每一个高手在成长路上, 都需要与墙作充足的对抗. 要么你成功, 站在世界之颠, 然后尽情汲取到顶级的知识; 或者或被它打趴下, 成为芸芸众生中的一人, 然后对它习以为常.
我也不例外.
前不久, 我刚在我的服务器上自行架好了自己的 "梯子". 这正是从 "梯子" 开始的故事.
开幕
夜已经深了, 我依然坐在电脑, 思索着一件事: 为什么突然之间, 历来运行良好的 "梯子", 突然就这么卡呢? 莫非已经被 "墙" 发现并限制了?
我不甘心地想, 这不可能, 我隐藏的这么好, 这么低调, 不会是我.
我拿出手中最爱的工具: ping.
开始了我的检测之旅.
60% 丢包, 这太夸张了, 这样的网络环境简直比帝都的交通环境还差千倍. 我在想.
试试另一个利器 traceroute 吧, 只有第一跳是通的, F**K, 果然是世界第一的局域网络, 运营商也敢非法丢弃我的检测包, 这个检测毫无收获.
但是, 看着我的 "梯子" 在云层摇摇晃晃(丢包), 我就心生决意: 不在对抗中成功, 就在对抗中消亡.
正在无所措时, "梯子" 所在的服务商给给我最爱的 Gmail 突然发送了一封至关重要的邮件, 上面赫然写道:
啊, 即将成为高手那种敏锐的第六感, 让我觉得, 我可能错怪 "墙" 了, 我可能被黑了.
检测
一阵饿意, 让我清醒了不少, 果然, 有些高手发明的 "轻断食" 疗法非常有效, 让我离高手更进了一步.
"我一定要把对手揪出来", 心里暗暗下决定.
ssh root@myblog.me
我开始连接到我的服务器, 第一步, 先从登录日志开始.
这是一个非常聪明的做法:
# whoroot pts/2 2015-01-20 3:00 (xx.xx.xx.xx)
嗯, 只有我一个人, 并没有抓住黑客的现行. "我想他不会这么笨, 让我当场拿住他", 心里暗想.
继续熟练地检查着有谁登录过系统, 通过 ip138.com 检测着 IP 的来源. 结果, 全是我这里的 IP, 没有人!!!
莫非我弄错了? 不是被黑了吗?
不行, 继续看登录日志.
看到这么多 ssh 爆破登录日志, 心里一阵凉意, 果然在互联网上混, 时刻要小心远方各种暗器. 冷静一下, 慢慢找找看.
花了几十分钟之后, 除了各种用户名密码的登录失败外, 并没有通过密码登录成功的日志, 全无新的发现.
心里暗想, "对手也不弱嘛."
不过, 还有一个线索没有检查过: "目前服务器的流量仍然很高"
是时候运用我手中的核心武器了.
发现
目前思路还是很清晰的, 要定位到底是哪个进程导致的高流量, 然后通过它的行为, 分析是否是黑客挂的马?
OK, 开始行动:
下载 iftop, 打开系统的流量面板, 10秒之后, 流量面板开始正确显示流量, 我的流量峰值高达 100mb/s. 调整一些命令参数, 显示端口与 IP 信息.
iftop -nP
流量面板显示出是从我的服务器往外流出流量, 先从 30157 端口开始往外发送, 几秒之后, 就会循环切到 30000 - 50000 之间的一个端口继续发. 是 UDP 流量. 我断言.
果然, 再通过 netstat -anp 来检测打开端口情况, 发现并没有 TCP 上的状态, 确认了我的断言.
( UDP 流量是可以无状态的, 可以快速切换, TCP 反之, 可以通过工具抓到链接状态 )
但不幸的是, 这两个工具并不能显示出来是哪个进程作的鬼. 看来只有一个个看了.
ps aux
进程并不多, 很快就看完了, 有两个可疑进程:
ruby 5162 0.0 5.0 286128 102200 ? Sl 02:58 2:20 /usr/sbin/httpd -c ./init -d /home/ruby/lib/2
111 3033 0.0 5.0 1 2017 ? Sl 02:58 2:20 /tmp/freeBSD /tmp/freeBSD 1
第1点, 我使用的是 nginx 而不是 apache, 这里的 httpd 非常可疑. 第2点, freeBSD 明显是一个伪装, 进程的权限也令人可疑.
至此, 已经确认, 我的服务器已经被黑了. 接下来, 是时候对决的时候了.
对决
第1点的进程信息有一个目录非常可疑, 在 /home/ruby/lib, 这里是我的个人目录, 怎么会出现在这里的参数里呢?
进去看看: cd /home/ruby/lib
大吃一惊, 第六感告诉我, 这命名, 这习惯, 绝对是一个黑客作为, 这不是我写的东西, 仔细看看.
Oh no, 一个木马程序赫然在目, 这是一个非常明显的反向连接木马:
只要你把服务器打开, 它便会启动, 并自动连接到黑客指定的服务器, 报告黑客已经上线, 然后等待指令. 一旦有指令收到, 便会用自己控制的权限运行对应的程序. 非常可怕.