说真的,接触网络这么多年,捏着过期的网络工程师证,网络硬件相关公司工作过,负责过多个公司的网络环境设计,真的是有种想吹“啥样的网络攻击我没见识过”这种牛逼的感觉。
这次攻击还是有点小小震惊到我了。
I’m shocked
情况简述
我的服务器上主要是放着博客服务,BIKE404,以及一些其他的 PHP 服务,像日常开发的对公 DEMO 都是在这台服务器上。我还有租香港的虚拟主机,本来那个主机才是专门用来做博客的,但是虚拟主机各种不方便,还有糊弄傻子的重大嫌疑,所以现在重要服务都是在这台服务器上。毕竟是方便啊。
我是用 iptables DROP 掉所有端口的,只保留 80 和 443 以及管理用的高位端口。 除非你从 1024-65535 全扫一遍,否则没什么好手段找到管理端口。
问题就出在这了:
真的有什么人,或者是什么东西,能每次 100% 正确知道我的端口号,并且进行分布式主动探测
而且比较耻辱的是: 攻击都持续了一个星期了,我才察觉到!
细节
详情
首先,修改管理端口,之后
- 抓这个端口的数据包,并过滤掉客户端的数据
- 抓网口的数据包,过滤掉管理端口
大概一分钟之内,方法一就会有大量且不同的 IP 向这个端口发起探测请求,而方法二则几乎抓不到明显的数据包。也就是说:攻击者没有进行端口扫描,不仅明显知道我的端口号,而且整个过程都是全自动的。
出卖者?
我的第一反应是,身边的某个设备上的某个/些软件背叛了我。
于是首先一边抓包,一边用不同设备尝试反复触发攻击者的主动探测。电脑比较容易触发自动攻击,而手机和平板则不会,路由器是 Openwrt 且 3 年没动过,开发机和NAS都没加电,这几个可以排除嫌疑。
初步怀疑是电脑上的什么软件泄露了我的网络流量。于是把手机和平板关机,开始写 curl 脚本尝试自动触发,结果完全没有触发的效果,而使用 Firefox 能够触发但效果不明显,Chrome 则很容易触发。这边的非常难办,因为 Wireshark 没办法针对某个进程做抓包,同样也没法做排除。一开浏览器,这俩货检查更新的包还都是 https 的,如果叛徒也是用 https 的话,除了一个一个看请求头中的 domain 之外,别无他法。我就这么一点一点抠了很久,最后发现这俩浏览器除了启动时给各自的官网发一些同步请求之外,完全没任何可疑行为。而且从网卡上发出去的数据包就没其他的了。
难道有什么高级手段,能略过 Wireshark 的抓包,或者根本就不走 TCP/UDP ?即使是能跳过 NAT 直接帧中继也是能被 Wireshark 抓到的啊。
不过反思回来,用 curl 的脚本则完全不能触发攻击,而 Firefox 和 Chrome 又没有嫌疑,这货还高端到认浏览器?开始考虑脚本与浏览器的区别。
因为是跑在 Windows 上的,而我有好多年没写过批处理文件了,所以请求是单发的没有并发,而浏览器则可以一次发出大量请求。也就是说并发量可能是个触发条件。于是把电脑网线拔掉,打开手机和平板,试着产生大并发。虽然很困难,但是成功检测到了攻击。
结论:并发数可能是触发条件之一,但具体触发机制不明。泄露数据的并不在我的设备上。
这个阶段大概用了 2 小时(2 小时白折腾了)
劫持?
立刻把路由的网线拔下来(联通),插到邻居的路由上(宽带通)(我也是交了服务费的所以 OK)。
宽带通的出口走的是电信,可以当做电信网络分析。
尝试复现 → 复现成功
初步认定非当地运营商的行为。
凶手
当从源头分析而一无所获,走进了死胡同的时候,就应该 逆转 一下。
既然无法获知自己的数据是泄露给了 谁 ,那么:
“考虑 谁 拿到了你的数据后对你发起攻击。”
这是我在尝试应对方法时,把攻击探测 DROP 后,用 tcpdump 抓到的探测包
第一个 SYN 请求 1 秒后重传第一次,再 2 秒后重传第二次,事不过三后放弃探测。探测请求不是 HTTP 请求也不是能肉眼读懂的明文请求,也就是说不是什么低劣作坊的产品,而是针对什么特定协议的探测。
所有攻击来源都来自中国大陆,但几乎每个攻击源都没有关联,IP 分散在全国各地的住宅区中,而且多数都有 GPS 定位记录,也就是说这些 IP 多数都是真实用户在使用的家用宽带,而非机房网络。同时这些 IP 还存在机器人撞库的嫌疑。
也就是说?
也就是说?
是什么人?从比当地运营商还要高级的层面获取用户流量数据?并可以控制分散在全国各地的 IP ?向对应的端口进行主动探测攻击?
结论
还记得我开头说的有点小小震惊吗?
我现在开始害怕了!
Watashi wa mo shin de iru
6 comments
Skip to comment form ↓
大致
2018 年 11 月 1 日 在 上午 11:51 (UTC 8) Link to this comment
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0
其实是扫地大妈干的。
石樱灯笼
2018 年 12 月 28 日 在 上午 1:46 (UTC 8) Link to this comment
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
有时候就觉得啊,是不是年龄大了,生活平坦了,遇到啥困难之后,放弃的就特别快,而且放弃的还特别痛快。
我前老板有次回老家,到了火车站发现没带身份证,直接就把火车票给退了坐地铁回公司沙发玩手机。我说车站可以办临时身份证明啊,老板说麻烦,算了,买了明天的车票明天再走。
青山
2018 年 11 月 4 日 在 下午 12:03 (UTC 8) Link to this comment
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
毫无意义的攻击,攻击者也是闲得无聊
萃香西瓜
2018 年 11 月 5 日 在 上午 9:52 (UTC 8) Link to this comment
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
感觉有可能是你的服务器上有进程在主动上报
野生的喵喵
2019 年 1 月 24 日 在 上午 7:29 (UTC 8) Link to this comment
Mozilla/5.0 (iPhone; CPU iPhone OS 11_3_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/15E302 UCBrowser/11.5.4.970 Mobile AliApp(TUnionSDK/0.1.15)
我想可能不是针对你一个站点,大抵是无差别扫描,各种可能的url随便扫,我java的站点,一天多的时候也有好几百次php的链接请求呢……
石樱灯笼
2019 年 1 月 24 日 在 下午 10:09 (UTC 8) Link to this comment
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
好好读完全文再评论