More About skidmap

引


我们（360netlab）于 20201127 发了一篇《用DNS数据进行威胁发现

---发现skidmap的未知后门》的文章，它的主题是从 DNSMon 为入口发现并阻断skidmap。而本文的主题，则是试图从更多的视角剖析skidmap可能引起的安全问题，以及如何识别并处置相关问题。


之所以觉得有必要继续深入的写这样一篇文章，原因在于以下几点：


 1. 在公开的skidmap相关的文章中，对skidmap的恶意定性为挖矿，然而我们认为真正值得关注的点，在于它的后门逻辑，由于这些后门的存在，受害者二次受害的风险增加了。
 2. 从我们手中的线索来看，我们确信，一部分机器是以 “redis漏洞” 为入口被攻陷的，这表明这部分受害机器中 redis服务 和后门是同时存在的，而 redis服务 在很多公司中是负责数据管道的基础组件，一般都留存着公司相关的重要数据。skidmap的存在让这些公司在 数据泄漏/数据投毒 的威胁大幅度提升，最终影响公司的安全生产。
 3. 在可搜索的文章中，都只提到了 skidmap 一小部分细节，而关于：该后门是如何植入的，后门影响哪些Linux内核版本，如何识别这个后门等细节，没有一个汇总性质的报告。这对于日后的事件处置来说帮助不大。碰巧的是我们手里的信息足够清晰描述这些细节。


基于以上原因，我们决定以看到的细节为线索，重新披露一次skidmap这个后门程序。


PS: 在撰写本文的时候出现了一个新的样本分发域名 http[:]//d.powreofwish[.]com/pm.sh。



skidmap的整体结构


由于该恶意程序涉及到很多的文件，为了更清晰的描述清楚这些文件之间的关系，以及它们存在的意义，我们绘制了一个全局图，方便大家快速的了解到 skidmap 中的关键细节。






内核层隐藏 LKM-rootkit


skidmap内核模块中对常见的 Linux 发行版均有考虑，但植入rootkit这个逻辑，目前仅仅针对 CentOS6/7 发行版，通过样本逆向，我们可以断定，它仅处理了以下几个Linux内核版本：


CentOS6
2.6.x-71  / 2.6.x-220 / 2.6.x-279
2.6.x-431 / 2.6.x-504 / 2.6.x-573
2.6.x-642 / 2.6.x-696 / 2.6.x-754

CentOS7
3.10.x-123 / 3.10.x-229 / 3.10.x-327
3.10.x-514 / 3.10.x-693 / 3.10.x-862
3.10.x-957 / 3.10.x-1062 / 3.10.x-1127



通过安装内核模块（iproute.ko/crypto.ko/netlink.ko）skidmap 可以将运行中涉及到的所有文件，进程，网络会话，对用户隐藏起来。用户将无法通过 ls/ps/top/netstat 等命令发现被攻击的线索。甚至挖矿时，CPU利用率的展示信息也是被内核模块修改过的。



远控后门


skidmap 执行成功后，在受害者机器上会安装三类后门。



后门1


skidmap 执行之后，会在系统目录释放 pam_unix.so 文件（需要root权限），该文件一般用于 SSH 远程登录的身份认证。在 pam_unix.so 中，攻击者硬编码了一个密码Mtm$%889*G*S3%G。该密码不绑定用户名，任意系统用户均可通过该密码登录，包括root。


在写本文的时候，攻击者更新了一个新的密码：Mtm$%898*G*S3%G



后门2


skidmap 执行后，会在当前用户对应目录放置一个 ssh-rsa 的公钥。攻击者随时可以拿着正确的私钥登录机器。


ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/cjOtK8LAcIPBchQkU/qKSGbe7A9MTvrwqBc6trso6UMBpeTWY8loM1082h4HZ4daNJ1S8yB57PtOHSUwG//SD5ahYfOTOInQpU5p7mnczql9UPXO68VXukBpbmjueEwVtXXFnd/9kZzqBroS9zMakKh53URPoKus4d/V7Ct5ecPSo2WDRJDLbewE9ojb+v4R8C4xartjNLsyUXRwqgk1B6LK8JKIWUU55+LoaecFTBoBil+DP2Wxl2RhFaGCHItInwPgmtigYcOH/zMePw+aiXsYMbSzNtQswh3E0h7bpxq7hgilFTglfmrZybF45enkjwr9cfsWpkQ6NQ1nONA9 root@doclever


在写本文的时候，攻击者更新了一个新的公钥：


ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9WKiJ7yQ6HcafmwzDMv1RKxPdJI/oeXUWDNW1MrWiQNvKeSeSSdZ6NaYVqfSJgXUSgiQbktTo8Fhv43R9FWDvVhSrwPoFBz9SAfgO06jc0M2kGVNS9J2sLJdUB9u1KxY5IOzqG4QTgZ6LP2UUWLG7TGMpkbK7z6G8HAZx7u3l5+Vc82dKtI0zb/ ohYSBb7pK/2QFeVa22L+4IDrEXmlv3mOvyH5DwCh3HcHjtDPrAhFqGVyFZBsRZbQVlrPfsxXH2bOLc1PMrK1oG8dyk8gY8m4iZfr9ZDGxs4gAqdWtBQNIN8cvz4SI+Jv9fvayMH7f+Kl2yXiHN5oD9BVTkdIWX root@doclever


但新更新的公钥，却被曝光在DDG相关资料(https://www.mdeditor.tw/pl/pOYN/zh-hk)中。出现这样诡异的情况，笔者推测原因有二：


 1. 提供 DDG资料的作者，把DDG和skidmap弄混了，由于skidmap本身比较难发现，而DDG很容易发现。所以弄混的可能是存在的。
 2. skidmap在被我们曝光之后，在试图隐藏痕迹，或者向 DDG 泼脏水。



后门3


skidmap 执行后，会启动一个名为 irqbalanced 的后门程序，即 《用DNS数据进行威胁发现----发现skidmap的未知后门》中提到的 rctl 开源远控。该后门程序内置多个主控域名，攻击者可以随时操控相关的受控主机。有趣的是：在内置的域名中，甚至都没有完全注册，这也给了我们一个近距离观察这个后门细节的机会。



口令窃取


在公开的关于 skidmap 分析中，很少有提到其具有口令窃取的功能，但通过对相关样本的逆向分析，我们确认，它能够窃取 SSH 登录口令。


当从受控机登录到一台新机器时，被安装的 /usr/bin/ssh 就会记录下登录密码，并将结果以user:password@host --> |%s|%s|%s 的格式，保存在/usr/include/olog.h 文件中（该文件会受到“内核模块”的保护）。

当其他人通过口令登录到受控机时，被安装的 /usr/bin/ip6network 会记录下登录密码，，并将结果以 user:password --> |%s|%s 的格式，保存在 /usr/include/ilog.h 文件中（该文件会受到“内核模块”的保护）。


在 /usr/bin/kswaped 程序中，会定期将收集到的 ilog.h/olog.h 文件汇报给攻击者（info[.]onlinetalk[.]tk/info[.]ipfswallet[.]tk）。


通过这样的密码收集，攻击者可以实现横向移动，发现并操纵更多的主机。



skidmap 是如何投递的


关于域名 ipfswallet.tk 这个域名的恶意线索，我们最早可以回溯到2018年11月2日，在我们的“Anglerfish蜜罐”中，记录了如下内容：





如图可知，这是一个通过 redis 传播的恶意样本，不难发现：随着 pc 一起出现的还有一个 pm.sh ，这就是上文中提到的挖矿脚本，也许正是这个表层脚本的存在，降低了普通安全分析人员进一步探索样本背后行为的意愿。


另一方面由于 pc(ecb5435b877eae990b4e296113ee8ea7) 中有对执行环境的判断，当且仅当执行环境为 CentOS 时，才会进一步完成后续复杂逻辑的执行。这会导致一部分沙箱无法正确的模拟出样本的全部行为。可能也正是这个原因，rctl 相关的一系列域名才用了相当长的时间体现在外部情报之中。（这也表明 DNSMon 生产的威胁情报是有很好的补充作用的）。



如何识别skidmap


内核模块判断方法


考虑到大部分 Linux 运维人员没有对抗 rootkit 的经验，这里将给出一些依据Linux自带命令就可完成的判定方法。


通过分析我们发现，skidmap 隐藏文件的逻辑是基于文件名的，而不绑定路径。其次，文件隐藏生效范围也仅限于 ls 命令，而不包含 file/cat 命令。所以只需要随便一个目录，创建一个同名文件，无法通过ls观察到，但却可以通过 file/cat 观察到。一旦满足这个条件，就可以迅速判断出当前系统是否被植入 skidmap 。具体操作如下图所示：





同 ip6network 达到类似效果的文件名还有很多，比如 iproute.ko / netlink.ko / cryptov2.ko / kswaped / irqbalanced 等等，篇头图中的大部分文件名，均可用于识别skidmap 。


挖矿情况判断方法


由于挖矿程序会修改用户 Home目录文件。植入 后门2 。所以通过查阅~/.ssh/authorized_keys 的文件内容，也可以看到被攻击的迹象。



如何清理 skidmap


联系360安服人员？安装360杀毒Linux版？或者xxxx？



IOC


bc97398297f45603a858d4a64a411cf4 pc_upx_unpack  
57256b359e381e8b949f18b4d9081f39 kaudite_upx_unpack  
ecb6f50245706cfbdc6d2098bc9c54f3 irqbalanced
0c6e5b9f04fcff56ed882e112abea263 crypto1062  
76d5be89fee2eb8706720115f13499aa netlink1062  
b116a39ed0aab864f749126f8040ef6e iproute1062  
3007be4300e5c05d7b1910f3f73c0ba1 /lib/x86_64-linux-gnu/security/pam_unix.so  
325a5dd42dfc140dbd2e3eb0f0448ec3 /lib/x86_64-linux-gnu/security/pam_unix.so  

ecb5435b877eae990b4e296113ee8ea7 pc  
57256b359e381e8b949f18b4d9081f39 kaudite  
20bd9e38ba920a86a7d64106f9f8c6d1 cos7.tar.gz  
ce1ac8a48a3b2f5c8b5a1567908670e6 cos6.tar.gz  


在撰写本文的过程中，出现了新的样本分发地址
http://d.powreofwish[.]com/pm.sh
http://d.powreofwish[.]com/cc
http://d.powreofwish[.]com/cos7.tar.gz
http://d.powreofwish[.]com/cos6.tar.gz