More About skidmap
<!--kg-card-begin: markdown--><h1 id="">引</h1>
<p>我们（360netlab）于 20201127 发了一篇《<a href="__GHOST_URL__/use-dns-data-produce-threat-intelligence/">用DNS数据进行威胁发现<br>
---发现skidmap的未知后门</a>》的文章，它的主题是从 DNSMon 为入口发现并阻断skidmap。而本文的主题，则是试图从更多的视角剖析skidmap可能引起的安全问题，以及如何识别并处置相关问题。</p>
<p>之所以觉得有必要继续深入的写这样一篇文章，原因在于以下几点：</p>
<ol>
<li>在公开的skidmap相关的文章中，对skidmap的恶意定性为挖矿，然而我们认为真正值得关注的点，在于它的后门逻辑，由于这些后门的存在，受害者二次受害的风险增加了。</li>
<li>从我们手中的线索来看，我们确信，一部分机器是以 “redis漏洞” 为入口被攻陷的，这表明这部分受害机器中 redis服务 和后门是同时存在的，而 redis服务 在很多公司中是负责数据管道的基础组件，一般都留存着公司相关的重要数据。skidmap的存在让这些公司在 数据泄漏/数据投毒 的威胁大幅度提升，最终影响公司的安全生产。</li>
<li>在可搜索的文章中，都只提到了 skidmap 一小部分细节，而关于：该后门是如何植入的，后门影响哪些Linux内核版本，如何识别这个后门等细节，没有一个汇总性质的报告。这对于日后的事件处置来说帮助不大。碰巧的是我们手里的信息足够清晰描述这些细节。</li>
</ol>
<p>基于以上原因，我们决定以看到的细节为线索，重新披露一次skidmap这个后门程序。</p>
<p>PS: 在撰写本文的时候出现了一个新的样本分发域名 <code>http[:]//d.powreofwish[.]com/pm.sh</code>。</p>
<h1 id="skidmap">skidmap的整体结构</h1>
<p>由于该恶意程序涉及到很多的文件，为了更清晰的描述清楚这些文件之间的关系，以及它们存在的意义，我们绘制了一个全局图，方便大家快速的了解到 skidmap 中的关键细节。</p>
<p><img src="__GHOST_URL__/content/images/2020/11/skidmap_all_detail-1.png" alt="skidmap_all_detail-1" loading="lazy"></p>
<h2 id="lkmrootkit">内核层隐藏 LKM-rootkit</h2>
<p>skidmap内核模块中对常见的 Linux 发行版均有考虑，但植入rootkit这个逻辑，目前仅仅针对 CentOS6/7 发行版，通过样本逆向，我们可以断定，它仅处理了以下几个Linux内核版本：</p>
<pre><code>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
</code></pre>
<p>通过安装内核模块（iproute.ko/crypto.ko/netlink.ko）skidmap 可以将运行中涉及到的所有文件，进程，网络会话，对用户隐藏起来。用户将无法通过 ls/ps/top/netstat 等命令发现被攻击的线索。甚至挖矿时，CPU利用率的展示信息也是被内核模块修改过的。</p>
<h2 id="">远控后门</h2>
<p>skidmap 执行成功后，在受害者机器上会安装三类后门。</p>
<h3 id="1">后门1</h3>
<p>skidmap 执行之后，会在系统目录释放 pam_unix.so 文件（需要root权限），该文件一般用于 SSH 远程登录的身份认证。在 pam_unix.so 中，攻击者硬编码了一个密码<code>Mtm$%889*G*S3%G</code>。该密码不绑定用户名，任意系统用户均可通过该密码登录，包括root。</p>
<p>在写本文的时候，攻击者更新了一个新的密码：<code>Mtm$%898*G*S3%G</code></p>
<h3 id="2">后门2</h3>
<p>skidmap 执行后，会在当前用户对应目录放置一个 ssh-rsa 的公钥。攻击者随时可以拿着正确的私钥登录机器。</p>
<p><code>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/cjOtK8LAcIPBchQkU/qKSGbe7A9MTvrwqBc6trso6UMBpeTWY8loM1082h4HZ4daNJ1S8yB57PtOHSUwG//SD5ahYfOTOInQpU5p7mnczql9UPXO68VXukBpbmjueEwVtXXFnd/9kZzqBroS9zMakKh53URPoKus4d/V7Ct5ecPSo2WDRJDLbewE9ojb+v4R8C4xartjNLsyUXRwqgk1B6LK8JKIWUU55+LoaecFTBoBil+DP2Wxl2RhFaGCHItInwPgmtigYcOH/zMePw+aiXsYMbSzNtQswh3E0h7bpxq7hgilFTglfmrZybF45enkjwr9cfsWpkQ6NQ1nONA9 root@doclever</code></p>
<p>在写本文的时候，攻击者更新了一个新的公钥：</p>
<p><code>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9WKiJ7yQ6HcafmwzDMv1RKxPdJI/oeXUWDNW1MrWiQNvKeSeSSdZ6NaYVqfSJgXUSgiQbktTo8Fhv43R9FWDvVhSrwPoFBz9SAfgO06jc0M2kGVNS9J2sLJdUB9u1KxY5IOzqG4QTgZ6LP2UUWLG7TGMpkbK7z6G8HAZx7u3l5+Vc82dKtI0zb/        ohYSBb7pK/2QFeVa22L+4IDrEXmlv3mOvyH5DwCh3HcHjtDPrAhFqGVyFZBsRZbQVlrPfsxXH2bOLc1PMrK1oG8dyk8gY8m4iZfr9ZDGxs4gAqdWtBQNIN8cvz4SI+Jv9fvayMH7f+Kl2yXiHN5oD9BVTkdIWX root@doclever </code></p>
<p>但新更新的公钥，却被曝光在DDG相关资料(<a href="https://www.mdeditor.tw/pl/pOYN/zh-hk">https://www.mdeditor.tw/pl/pOYN/zh-hk</a>)中。出现这样诡异的情况，笔者推测原因有二：</p>
<ol>
<li>提供 DDG资料的作者，把DDG和skidmap弄混了，由于skidmap本身比较难发现，而DDG很容易发现。所以弄混的可能是存在的。</li>
<li>skidmap在被我们曝光之后，在试图隐藏痕迹，或者向 DDG 泼脏水。</li>
</ol>
<h3 id="3">后门3</h3>
<p>skidmap 执行后，会启动一个名为 <code>irqbalanced</code> 的后门程序，即 《<a href="__GHOST_URL__/use-dns-data-produce-threat-intelligence/">用DNS数据进行威胁发现----发现skidmap的未知后门</a>》中提到的 <code>rctl</code> 开源远控。该后门程序内置多个主控域名，攻击者可以随时操控相关的受控主机。有趣的是：在内置的域名中，甚至都没有完全注册，这也给了我们一个近距离观察这个后门细节的机会。</p>
<h3 id="">口令窃取</h3>
<p>在公开的关于 skidmap 分析中，很少有提到其具有口令窃取的功能，但通过对相关样本的逆向分析，我们确认，它能够窃取 SSH 登录口令。</p>
<p><em>当从受控机登录到一台新机器时</em>，被安装的 /usr/bin/ssh 就会记录下登录密码，并将结果以<code>user:password@host --&gt; |%s|%s|%s</code> 的格式，保存在/usr/include/olog.h 文件中（该文件会受到“内核模块”的保护）。<br>
<em>当其他人通过口令登录到受控机时</em>，被安装的 /usr/bin/ip6network 会记录下登录密码，，并将结果以 <code>user:password --&gt; |%s|%s</code> 的格式，保存在 /usr/include/ilog.h 文件中（该文件会受到“内核模块”的保护）。</p>
<p>在 /usr/bin/kswaped 程序中，会定期将收集到的 ilog.h/olog.h 文件汇报给攻击者（info[.]onlinetalk[.]tk/info[.]ipfswallet[.]tk）。</p>
<p>通过这样的密码收集，攻击者可以实现横向移动，发现并操纵更多的主机。</p>
<h1 id="skidmap">skidmap 是如何投递的</h1>
<p>关于域名 ipfswallet.tk 这个域名的恶意线索，我们最早可以回溯到2018年11月2日，在我们的“Anglerfish蜜罐”中，记录了如下内容：</p>
<p><img src="__GHOST_URL__/content/images/2020/11/skidmap_Inject.png" alt="skidmap_Inject" loading="lazy"></p>
<p>如图可知，这是一个通过 redis 传播的恶意样本，不难发现：随着 pc 一起出现的还有一个 pm.sh ，这就是上文中提到的挖矿脚本，也许正是这个表层脚本的存在，降低了普通安全分析人员进一步探索样本背后行为的意愿。</p>
<p>另一方面由于 pc(ecb5435b877eae990b4e296113ee8ea7) 中有对执行环境的判断，当且仅当执行环境为 CentOS 时，才会进一步完成后续复杂逻辑的执行。这会导致一部分沙箱无法正确的模拟出样本的全部行为。可能也正是这个原因，rctl 相关的一系列域名才用了相当长的时间体现在外部情报之中。（这也表明 DNSMon 生产的威胁情报是有很好的补充作用的）。</p>
<h1 id="skidmap">如何识别skidmap</h1>
<p><em>内核模块判断方法</em></p>
<p>考虑到大部分 Linux 运维人员没有对抗 rootkit 的经验，这里将给出一些依据Linux自带命令就可完成的判定方法。</p>
<p>通过分析我们发现，skidmap 隐藏文件的逻辑是基于文件名的，而不绑定路径。其次，文件隐藏生效范围也仅限于 <code>ls</code> 命令，而不包含 <code>file/cat</code> 命令。所以只需要随便一个目录，创建一个同名文件，无法通过ls观察到，但却可以通过 <code>file/cat</code> 观察到。一旦满足这个条件，就可以迅速判断出当前系统是否被植入 skidmap 。具体操作如下图所示：</p>
<p><img src="__GHOST_URL__/content/images/2020/11/determine_skidmap.png" alt="determine_skidmap" loading="lazy"></p>
<p>同 <code>ip6network</code> 达到类似效果的文件名还有很多，比如 <code>iproute.ko</code> / <code>netlink.ko</code> / <code>cryptov2.ko</code> / <code>kswaped</code> / <code>irqbalanced</code> 等等，篇头图中的大部分文件名，均可用于识别skidmap 。</p>
<p><em>挖矿情况判断方法</em></p>
<p>由于挖矿程序会修改用户 Home目录文件。植入 <em>后门2</em> 。所以通过查阅<code>~/.ssh/authorized_keys</code> 的文件内容，也可以看到被攻击的迹象。</p>
<h1 id="skidmap">如何清理 skidmap</h1>
<p>联系360安服人员？安装360杀毒Linux版？或者xxxx？</p>
<h1 id="ioc">IOC</h1>
<pre><code>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

</code></pre>
<!--kg-card-end: markdown-->
引


我们（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



{"version":"0.3.1","atoms":[],"cards":[["markdown",{"markdown":"# 引\n\n我们（360netlab）于 20201127 发了一篇《[用DNS数据进行威胁发现\n---发现skidmap的未知后门](__GHOST_URL__/use-dns-data-produce-threat-intelligence/)》的文章，它的主题是从 DNSMon 为入口发现并阻断skidmap。而本文的主题，则是试图从更多的视角剖析skidmap可能引起的安全问题，以及如何识别并处置相关问题。\n\n之所以觉得有必要继续深入的写这样一篇文章，原因在于以下几点：\n\n1. 在公开的skidmap相关的文章中，对skidmap的恶意定性为挖矿，然而我们认为真正值得关注的点，在于它的后门逻辑，由于这些后门的存在，受害者二次受害的风险增加了。\n2. 从我们手中的线索来看，我们确信，一部分机器是以 “redis漏洞” 为入口被攻陷的，这表明这部分受害机器中 redis服务 和后门是同时存在的，而 redis服务 在很多公司中是负责数据管道的基础组件，一般都留存着公司相关的重要数据。skidmap的存在让这些公司在 数据泄漏/数据投毒 的威胁大幅度提升，最终影响公司的安全生产。\n3. 在可搜索的文章中，都只提到了 skidmap 一小部分细节，而关于：该后门是如何植入的，后门影响哪些Linux内核版本，如何识别这个后门等细节，没有一个汇总性质的报告。这对于日后的事件处置来说帮助不大。碰巧的是我们手里的信息足够清晰描述这些细节。\n\n基于以上原因，我们决定以看到的细节为线索，重新披露一次skidmap这个后门程序。\n\nPS: 在撰写本文的时候出现了一个新的样本分发域名 `http[:]//d.powreofwish[.]com/pm.sh`。\n# skidmap的整体结构\n\n由于该恶意程序涉及到很多的文件，为了更清晰的描述清楚这些文件之间的关系，以及它们存在的意义，我们绘制了一个全局图，方便大家快速的了解到 skidmap 中的关键细节。\n\n![skidmap_all_detail-1](__GHOST_URL__/content/images/2020/11/skidmap_all_detail-1.png)\n\n## 内核层隐藏 LKM-rootkit\n\nskidmap内核模块中对常见的 Linux 发行版均有考虑，但植入rootkit这个逻辑，目前仅仅针对 CentOS6/7 发行版，通过样本逆向，我们可以断定，它仅处理了以下几个Linux内核版本：\n\n```\nCentOS6\n2.6.x-71  / 2.6.x-220 / 2.6.x-279\n2.6.x-431 / 2.6.x-504 / 2.6.x-573\n2.6.x-642 / 2.6.x-696 / 2.6.x-754\n\nCentOS7\n3.10.x-123 / 3.10.x-229 / 3.10.x-327\n3.10.x-514 / 3.10.x-693 / 3.10.x-862\n3.10.x-957 / 3.10.x-1062 / 3.10.x-1127\n```\n\n通过安装内核模块（iproute\\.ko/crypto\\.ko/netlink\\.ko）skidmap 可以将运行中涉及到的所有文件，进程，网络会话，对用户隐藏起来。用户将无法通过 ls/ps/top/netstat 等命令发现被攻击的线索。甚至挖矿时，CPU利用率的展示信息也是被内核模块修改过的。\n\n## 远控后门\n\nskidmap 执行成功后，在受害者机器上会安装三类后门。\n\n### 后门1\n\nskidmap 执行之后，会在系统目录释放 pam\\_unix.so 文件（需要root权限），该文件一般用于 SSH 远程登录的身份认证。在 pam\\_unix.so 中，攻击者硬编码了一个密码`Mtm$%889*G*S3%G`。该密码不绑定用户名，任意系统用户均可通过该密码登录，包括root。\n\n\n在写本文的时候，攻击者更新了一个新的密码：`Mtm$%898*G*S3%G`\n\n### 后门2\n\nskidmap 执行后，会在当前用户对应目录放置一个 ssh-rsa 的公钥。攻击者随时可以拿着正确的私钥登录机器。\n\n`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/cjOtK8LAcIPBchQkU/qKSGbe7A9MTvrwqBc6trso6UMBpeTWY8loM1082h4HZ4daNJ1S8yB57PtOHSUwG//SD5ahYfOTOInQpU5p7mnczql9UPXO68VXukBpbmjueEwVtXXFnd/9kZzqBroS9zMakKh53URPoKus4d/V7Ct5ecPSo2WDRJDLbewE9ojb+v4R8C4xartjNLsyUXRwqgk1B6LK8JKIWUU55+LoaecFTBoBil+DP2Wxl2RhFaGCHItInwPgmtigYcOH/zMePw+aiXsYMbSzNtQswh3E0h7bpxq7hgilFTglfmrZybF45enkjwr9cfsWpkQ6NQ1nONA9 root@doclever`\n\n在写本文的时候，攻击者更新了一个新的公钥：\n\n`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9WKiJ7yQ6HcafmwzDMv1RKxPdJI/oeXUWDNW1MrWiQNvKeSeSSdZ6NaYVqfSJgXUSgiQbktTo8Fhv43R9FWDvVhSrwPoFBz9SAfgO06jc0M2kGVNS9J2sLJdUB9u1KxY5IOzqG4QTgZ6LP2UUWLG7TGMpkbK7z6G8HAZx7u3l5+Vc82dKtI0zb/        ohYSBb7pK/2QFeVa22L+4IDrEXmlv3mOvyH5DwCh3HcHjtDPrAhFqGVyFZBsRZbQVlrPfsxXH2bOLc1PMrK1oG8dyk8gY8m4iZfr9ZDGxs4gAqdWtBQNIN8cvz4SI+Jv9fvayMH7f+Kl2yXiHN5oD9BVTkdIWX root@doclever\n`\n\n但新更新的公钥，却被曝光在DDG相关资料(https://www.mdeditor.tw/pl/pOYN/zh-hk)中。出现这样诡异的情况，笔者推测原因有二：\n\n1. 提供 DDG资料的作者，把DDG和skidmap弄混了，由于skidmap本身比较难发现，而DDG很容易发现。所以弄混的可能是存在的。\n2. skidmap在被我们曝光之后，在试图隐藏痕迹，或者向 DDG 泼脏水。\n\n### 后门3\n\nskidmap 执行后，会启动一个名为 `irqbalanced` 的后门程序，即 《[用DNS数据进行威胁发现----发现skidmap的未知后门](__GHOST_URL__/use-dns-data-produce-threat-intelligence/)》中提到的 `rctl` 开源远控。该后门程序内置多个主控域名，攻击者可以随时操控相关的受控主机。有趣的是：在内置的域名中，甚至都没有完全注册，这也给了我们一个近距离观察这个后门细节的机会。\n\n\n### 口令窃取\n\n在公开的关于 skidmap 分析中，很少有提到其具有口令窃取的功能，但通过对相关样本的逆向分析，我们确认，它能够窃取 SSH 登录口令。\n\n*当从受控机登录到一台新机器时*，被安装的 /usr/bin/ssh 就会记录下登录密码，并将结果以`user:password@host --> |%s|%s|%s` 的格式，保存在/usr/include/olog.h 文件中（该文件会受到“内核模块”的保护）。\n*当其他人通过口令登录到受控机时*，被安装的 /usr/bin/ip6network 会记录下登录密码，，并将结果以 `user:password --> |%s|%s` 的格式，保存在 /usr/include/ilog.h 文件中（该文件会受到“内核模块”的保护）。\n\n在 /usr/bin/kswaped 程序中，会定期将收集到的 ilog.h/olog.h 文件汇报给攻击者（info[.]onlinetalk[.]tk/info[.]ipfswallet[.]tk）。\n\n通过这样的密码收集，攻击者可以实现横向移动，发现并操纵更多的主机。\n\n# skidmap 是如何投递的\n\n关于域名 ipfswallet.tk 这个域名的恶意线索，我们最早可以回溯到2018年11月2日，在我们的“Anglerfish蜜罐”中，记录了如下内容：\n\n![skidmap_Inject](__GHOST_URL__/content/images/2020/11/skidmap_Inject.png)\n\n如图可知，这是一个通过 redis 传播的恶意样本，不难发现：随着 pc 一起出现的还有一个 pm.sh ，这就是上文中提到的挖矿脚本，也许正是这个表层脚本的存在，降低了普通安全分析人员进一步探索样本背后行为的意愿。\n\n另一方面由于 pc(ecb5435b877eae990b4e296113ee8ea7) 中有对执行环境的判断，当且仅当执行环境为 CentOS 时，才会进一步完成后续复杂逻辑的执行。这会导致一部分沙箱无法正确的模拟出样本的全部行为。可能也正是这个原因，rctl 相关的一系列域名才用了相当长的时间体现在外部情报之中。（这也表明 DNSMon 生产的威胁情报是有很好的补充作用的）。\n\n# 如何识别skidmap\n\n*内核模块判断方法*\n\n考虑到大部分 Linux 运维人员没有对抗 rootkit 的经验，这里将给出一些依据Linux自带命令就可完成的判定方法。\n\n通过分析我们发现，skidmap 隐藏文件的逻辑是基于文件名的，而不绑定路径。其次，文件隐藏生效范围也仅限于 `ls` 命令，而不包含 `file/cat` 命令。所以只需要随便一个目录，创建一个同名文件，无法通过ls观察到，但却可以通过 `file/cat` 观察到。一旦满足这个条件，就可以迅速判断出当前系统是否被植入 skidmap 。具体操作如下图所示：\n\n![determine_skidmap](__GHOST_URL__/content/images/2020/11/determine_skidmap.png)\n\n同 `ip6network` 达到类似效果的文件名还有很多，比如 `iproute.ko` / `netlink.ko` / `cryptov2.ko` / `kswaped` / `irqbalanced` 等等，篇头图中的大部分文件名，均可用于识别skidmap 。\n\n*挖矿情况判断方法*\n\n由于挖矿程序会修改用户 Home目录文件。植入 *后门2* 。所以通过查阅`~/.ssh/authorized_keys` 的文件内容，也可以看到被攻击的迹象。\n# 如何清理 skidmap\n\n联系360安服人员？安装360杀毒Linux版？或者xxxx？\n\n\n# IOC\n\n\n```\nbc97398297f45603a858d4a64a411cf4 pc_upx_unpack  \n57256b359e381e8b949f18b4d9081f39 kaudite_upx_unpack  \necb6f50245706cfbdc6d2098bc9c54f3 irqbalanced\n0c6e5b9f04fcff56ed882e112abea263 crypto1062  \n76d5be89fee2eb8706720115f13499aa netlink1062  \nb116a39ed0aab864f749126f8040ef6e iproute1062  \n3007be4300e5c05d7b1910f3f73c0ba1 /lib/x86_64-linux-gnu/security/pam_unix.so  \n325a5dd42dfc140dbd2e3eb0f0448ec3 /lib/x86_64-linux-gnu/security/pam_unix.so  \n\necb5435b877eae990b4e296113ee8ea7 pc  \n57256b359e381e8b949f18b4d9081f39 kaudite  \n20bd9e38ba920a86a7d64106f9f8c6d1 cos7.tar.gz  \nce1ac8a48a3b2f5c8b5a1567908670e6 cos6.tar.gz  \n\n\n在撰写本文的过程中，出现了新的样本分发地址\nhttp://d.powreofwish[.]com/pm.sh\nhttp://d.powreofwish[.]com/cc\nhttp://d.powreofwish[.]com/cos7.tar.gz\nhttp://d.powreofwish[.]com/cos6.tar.gz\n\n```"}]],"markups":[],"sections":[[10,0],[1,"p",[]]],"ghostVersion":"3.0"}