V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qq286735628
V2EX  ›  分享发现

无意中发现一种默默让用户的客户端向目标服务器发起 TCP 链接的方式

  •  
  •   qq286735628 · 2016-12-09 00:39:54 +08:00 · 3216 次点击
    这是一个创建于 2904 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为客户端完成且仅仅做了 TCP 握手,保持一个 TCP 链接,不会有后续的 HTTP 流量,所以目标服务器只能发现有很多用户 IP 与服务器进行者 TCP 链接,但是无法从 HTTP Referer 中获取这波无效流量的来源。

    Google 了一下,发现这种 TCP Preconnect Traffic 的相关资料并不多。

    我现在能确定的是,如果我手握一个大流量大并发的网页 url ,只需给网页中加入一行 meta ,即可让访问该 url 的用户朝着我设定的目标 server 发起 tcp 连接,消耗目标服务器的 TCP 链接数。

    安全外行人,不知道这东西危害大不大。
    第 1 条附言  ·  2016-12-09 01:39:02 +08:00
    我之前的测试在此,是 w3 组织把预加载行为做了规范化, Chrome 、 Firefox 、 Android 5.x 开始支持
    https://www.mxgw.info/a/preconnect-and-more.html

    由于是完整三次握手,一般对抗 syn flood 流量清洗设备无效。

    TCP_DEFER_ACCEPT 感觉有用,不知道常见的 Nginx 、 Apache 有没这个配置开关
    第 2 条附言  ·  2016-12-20 00:14:10 +08:00
    Nginx 的 listen 指令,通过添加 deferred 参数可以开启 TCP_DEFER_ACCEPT 特性

    http://nginx.org/en/docs/http/ngx_http_core_module.html#listen
    18 条回复    2016-12-20 15:39:56 +08:00
    crs0910
        1
    crs0910  
       2016-12-09 00:45:57 +08:00
    xss ddos
    qq286735628
        2
    qq286735628  
    OP
       2016-12-09 01:03:48 +08:00
    @crs0910 不是 XSS 。 XSS 这种,被攻击的服务器,可以从 HTTP 流量里面获知导流量的 url
    qq286735628
        3
    qq286735628  
    OP
       2016-12-09 01:05:44 +08:00
    @crs0910 不过配合 XSS ,可以做到就算我没有大流量 url ,我去 xss 几个大流量的页面再进行攻击,隐蔽性和攻击威力更大
    batnss
        4
    batnss  
       2016-12-09 01:17:23 +08:00
    img iframe script ... 都可以啊
    qq286735628
        5
    qq286735628  
    OP
       2016-12-09 01:18:58 +08:00
    @batnss 请求资源的方式,被攻击的服务器可以从 http 日志的 referer 字段中找到定位到攻击源头
    misaka19000
        6
    misaka19000  
       2016-12-09 01:19:33 +08:00 via Android
    首先你得有这个 URL
    choury
        7
    choury  
       2016-12-09 01:20:53 +08:00 via Android   ❤️ 1
    同学,你知道 tcp_defer_accept 吗?
    crs0910
        8
    crs0910  
       2016-12-09 01:23:08 +08:00
    @qq286735628 你说的一行 meta 是指什么?为什么可以发 tcp 连接
    qq286735628
        9
    qq286735628  
    OP
       2016-12-09 01:40:37 +08:00
    @crs0910 <meta rel="preconnect" href="http://target_server.com/">
    ryd994
        10
    ryd994  
       2016-12-09 02:40:53 +08:00 via Android
    Nginx 可以在 listen 里加 defer
    这个一般没多大危害,多几个连接对 Nginx 来说根本不值一提
    qq286735628
        11
    qq286735628  
    OP
       2016-12-09 22:33:32 +08:00
    @ryd994 我说的当然不是多几个了~

    其实这个也是最近遇到的一个问题,某个边缘业务服务器,最近经常被突发的握手流量搞死,每秒 20w 个 TCP 包。

    这些 TCP 包的特征都是完成三次握手后,不发送任何实际 HTTP 流量,一直找不到流量源头。

    所以才在研究有什么方式能发起这样的流量。
    firefox12
        12
    firefox12  
       2016-12-19 21:27:42 +08:00 via iPhone
    握手完成了 自然知道对方 ip 啊? 能有本事虚拟一个 ip 来攻击你 完成握手,现在的机房好像都不支持了。
    qq286735628
        13
    qq286735628  
    OP
       2016-12-20 00:10:52 +08:00
    @firefox12 这种预链接的方式,攻击 ip 都是真实用户的。我有多少用户量,就能发起多大的攻击,而被攻击者很难从攻击流量中定位到攻击发起来源
    firefox12
        14
    firefox12  
       2016-12-20 10:32:19 +08:00
    @qq286735628 这就是 ddos 啊,大量僵尸电脑攻击!
    qq286735628
        15
    qq286735628  
    OP
       2016-12-20 11:46:52 +08:00
    @firefox12 比传统的 ddos ,成本低多了。
    firefox12
        16
    firefox12  
       2016-12-20 14:18:46 +08:00
    这个很好处理, 服务器代码都会写防止这种 idle 攻击的代码, 30 秒刷一次 60 秒没有数据来往就断开连接。缓慢吞吐和 0 窗口攻击会麻烦很多,甚至需要借助外部工具才能断开连接。
    jedihy
        17
    jedihy  
       2016-12-20 14:28:59 +08:00
    @qq286735628 你确定是你发现的这种方式了?
    qq286735628
        18
    qq286735628  
    OP
       2016-12-20 15:39:56 +08:00
    @firefox12 恩,前面有人提到利用内核的 TCP_DEFER_ACCEPT 可以减缓这种只握手啥都不干的攻击

    @jedihy 然后呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3306 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:58 · PVG 19:58 · LAX 03:58 · JFK 06:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.