文章目录[隐藏]
- 1 第一层 – Episode 1
- 2 第二层 – Attack of Compression
- 3 第三层 – The Last Beacon
IT 管理人员和安全专家经常会遇到一些看起来比较可疑的 PowerShell 命令,他们有时能够解开这些可疑的命令,但常常还得靠研究人员。本篇文章旨在让大家能够从下列项中来了解可疑命令的目的:
- Scheduled Tasks (预定任务);
- RUN Keys in the Registry (注册表中的 RUN 键值);
- Static PowerShell Scripts (PowerShell 静态脚本);
- Proxy Logs (Web 服务被 RCE 利用下的代理日志);
powershell.exe -EncodedCommand JABzAHIAdgBzAHkAcw..
以下为 Autoruns 导出的数据,数据来源于 Sophos 的检测。在检查日志后,可以发现以随机字符命名的服务名称出现,如下图中所示,圈起来的部分,它的属性看起来非常有趣:
提示:Autoruns 保存的数据文件为 arn 格式
按照常理来说,Windows Server 上会有这样的服务吗?正如预期所那样,这可能是恶意的。这个方法称之为 Living-Off-The-Land (LOLBins),即在没有文件落地 (硬盘) 前就执行恶意代码,主要是为了避免触发任何警告。AV 是基于静态的检测发展过来的,它也完全无法能摆脱这种技术,但是可以通过采取保护措施来保护终端用户机器。
此时,需要对上图中长字符串进行 base64 解码。
以下为一张 base64 代码快速预览表,我把它们都放在了一起:
base64 代码 | 解码 | 描述 |
---|---|---|
JAB | $. | 变量声明 (UTF-16) |
TVq | MZ | MZ 头部 |
SUVY | IEX | PowerShell Invoke 表达式 |
SQBFAF | I.E. | PowerShell Invoke 表达式 (UTF-16) |
SQBuAH | I.n. | PowerShell Invoke 字符串 (UTF-16),比如 Invoke-MimiKatz |
PAA | <. | Emotet 经常使用 (UTF-16) |
aWV4 | iex | PowerShell Invoke 表达式 |
aQBlA | i.e. | PowerShell Invoke 表达式 (UTF-16) |
dmFy | var | 变量声明 |
dgBhA | v.a. | 变更声明 (UTF-16) |
H4sIA | gzip 标志 (0x1f8b) |
字符串 JABz[..]IAagBwA= cin 最基本的形式是 onion,它具有多个层次,可以巧妙地隐藏真正执行的操作,从而逃避检测,但是与 onion 不同,它只有三层,下面让我们来剥开每一层。
1 第一层 – Episode 1
这个字符串可以使用 CyberChef 来解码,其中包含大量用于编码和解码的小工具:
解码后如下:
代码语言:javascript复制$s=New-Object IO.MemoryStream(,[Convert]::FromBase64String("ANOTHER_LOONG_STRING_R_U_KIDDING_ME"));IEX (New-Object IO.StreamReader(New-Object IO.Compression.GzipStream($s,[IO.Compression.CompressionMode]::Decompress))).ReadToEnd();
对上述确码后的字符串有两个解决方法:
- 再一次使用 base64 来解码;
- 字符串有出现 Compression/Decompression,也许可对其进行解压;
以下这张图描述起来更形象:
2 第二层 – Attack of Compression
现在把 H4sIAAAAA[..]GDQAA 进行 base64 解码,如下图所示:
3 第三层 – The Last Beacon
查看解码后的内容,并没有什么东西能引起我的注意,看不到 URL,IP,可识别的端口号或像 DoEvilStuff() 和 DestoryTheResistance() 之类的函数,但在结尾处有一长串字符也许能探索出东西来:
代码语言:javascript复制[Byte[]]$var_code = [System.Convert]::FromBase64String("/OiJAAAAYInlMdJ..ENUFF_IS_ENUFF_I_QUIT..jEwOAA=")
同样用 CyberChef 来解码,如下图所示:
解码出来的已不在是 [PowerShell,Batch,JS,VBS 等] 脚本,而是 Shellcode。我们遇到过攻击者将 PE 文件代码嵌入在脚本文件中,什么是 ShellCode?在黑客攻击中,ShellCode 是一小段代码,通常用在软件利用漏洞的 Payload,之所以称之为 ShellCode,是因为它会启动命令 shell 程序,攻击者可以通过该 shell 程序来控制受感染的计算机,但是执行类似任务的任何代码都可以称之为 ShellCode。
机器 A – Bob 所有,为攻击者
机器 B – Alice 所有,为受害者
启动命令 Shell 可以为 Bob 提供一个途径,在机器 B 上执行一段恶意程序,可以想象这么一个场景:
- Bob 知道 Alice 喜欢可爱狗狗图片,因此给她发一封伪装的电子邮件,里面有一个恶意附件,上面写着 “你见过狗演奏四弦琴吗?单击此处查看!”,她单击了此处,然后 Bob 会在 Alice 不知情的情况下进入她的电脑;
- Bob 知道 Alice 正在运行一台非常旧的 Win7 的电脑,他利用 EtermalBlue 漏洞远程攻击 Alice 操作系统,而无需用户干预;
在分析了 ShellCode 之后,我们发现它是 Cobalt Strike 的一部分。Cobalt Strike 是一个威胁仿真软件,该软件有助于进行安全评估,可复制网络中高级对手的策略和技术,但是总是会有人经常滥用此工具对企业进行攻击。
什么是 Beacon?Beacon 是 Cobalt Strike 的 Payload,用于为高级攻击者建模。
有时候使用正常的解码看不到 IP 地址,上面的示例非常简单,但是为了演示起见,可能会在 ShellCode 之后找到类似的代码:
代码语言:javascript复制[Byte[]]$var_code = [System.Convert]::FromBase64String('38u[Redacted_Chracters_CMjIyMg')
for ($x = 0; $x -lt $var_code.Count; $x ) {
$var_code[$x] = $var_code[$x] -bxor 35
}
根据上述代码,接下来需要一个 XOR 操作,如下图所示:
你也能使用 scdbg 工具,scdbg 是一个 ShellCode 仿真工具,运行它时,会向用户显示 ShellCode 试图调用的 Windows API。
scdbg 运行此 ShellCode 后:
IP 在演示中可能有所不同,因为我想在这里介绍两个示例,即恶意代码中有没有 XOR:
Success!我们有 IP 地址以及 ShellCode 调用的端口,以获取进一步的指示。在活动事件中,快速提取并将此信息快速传递给客户的能力会产生重大影响。现在,他们可以监视/阻止此 IP 和相应的端口 (作为事件响应的一部分),切断攻击者对其资产的访问。
直接在内存中执行 ShellCode 会让人感到意外,因为如果它被放在某个磁盘上 (包含依赖项),分析员会对它进行分析,或者会上传到 VirusTotal 上,文件会立即公开。
我想用公开的一小段 [Courtesy: OD] 来结束本篇文章,这小段可以拿来练习。如果你发现一个名为 UigioaCuQxDqfwNx 的恶意服务,并出现以下字符串,如果你想深入 C2 IP,请以安全的方式发布。
代码语言:javascript复制%COMSPEC% /b /c start /b /min powershell -nop -w hidden -encodedcommand JABzAD0ATgBlAHcALQBPAGIAagBlAGMAd
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。