Panda Banker是使用Zeus源代码变种的银行木马。该银行木马于2016年首次被发现,至今仍然活跃。
Panda Banker会用man-in-the-browser技术将恶意代码注入到受害者浏览器的web页面中。注入的代码会窃取银行账户、信用卡和个人信息。
Panda Banker最近也通过Emotet进行传播。Panda Banker采用许多步骤来隐藏其行为。复杂的代码混淆和多层加密使其C2通信和恶意脚本很难被分析。
Panda Banker主要的攻击目标位于美国、加拿大和日本。恶意软件主要关注银行账户、信用卡和web钱包信息。
Panda Banker的攻击流程非常复杂(如图1)。首先检查受害者运行的环境是不是沙箱,然后创建一个包括扩展文件属性的副本,副本创建完成后,进程会在退出前加载新创建的恶意软件副本。新副本会创建两个svchost.exe
进程,然后将自己注入到进程中。
Panda Banker的C2 URL是从payload中嵌入的配置数据中获取的。也会与C2服务器通信来获取其他的配置信息。如果发现一个已知的web浏览器进程,就会注入插件dll到web浏览器中来拦截流量。
然后Panda Banker会等受感染的浏览器访问目标站点(比如银行或信用卡公司的网站)。当访问目标站点时,恶意软件会注入针对特定目标的恶意脚本来窃取银行账户、信用卡和个人信息。
图1: Panda Banker攻击流程
Panda Banker会检查受害者的环境来避免沙箱和手动分析(表1),包括包抓取持续、调试器、反编译工具和其他恶意软件分析工具。如果在环境中找到这些工具,恶意软件就会退出并删除payload文件。
表1: Panda Banker检查规避检测的字符串
一旦Panda Banker通过环境检查,就会创建4个新文件。其中一个文件是Panda Banker的副本。blocklist.exe
就是payload(图2):
图2: Panda Banker创建的4个文件
Panda Banker会通过Ntseteafiles API
给恶意软件副本分配一个扩展文件属性,在本例中是EaName is BEAR(图3)。加载了副本后原始payload就会退出。一旦Panda Banker在扩展文件属性中找到BEAR
,就会创建两个svchost.exe进程并注入:
图3: Panda Banker分配给扩展文件属性EaName
Panda Banker的payload含有配置数据,含有到C2服务器的URL和公钥。配置数据是用AES算法加密的,加密数据结构如图4所示:
图4: Panda Banker payload中嵌入的加密的配置数据结构
对加密数据解密后,会看到用RC4加密的C2 URL和X.509 subjectPublicKeyInfo DER SEQUENCE
格式的RSA公钥。
解密URLs需要用嵌入的RSA公钥进行RC4解密。这里,66 c7 5b 69 f4 5a 4e 12
等于https://
:
图5: RC4加密的C2 URLs
图6: RSA公钥
Panda Banker在访问C2服务器时会生成URL,见图7。生成的URL看起来像随机字符串,但后面有个算法:
图7: 生成的URL示例
Panda Banker用Mersenne Twister
算法生成随机值。整个URL算法描述如下,步骤1-5描述的是第一部分,6-10描述第二部分:
mod(A random value from Mersenne Twister, 9) + 2
决定part 1的长度,结果在2~10之间。mod(A random value from Mersenne Twister, 62)
获取随机的index值,结果在0~61之间。qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890
,如果index是1,选择w
。得到4个值:
GetComputerNameW API
得到计算机名;HKLM\software\microsoft\windows nt\currentversion
得到InstallDate
;HKLM\software\microsoft\windows nt\currentversion
得到DigitalProductId
值,并计算CRC值;GetVersionEx API
得到OSVERSIONINFOEX
值,并计算CRC值;将步骤6的结果打包,并计算SHA256的值;
用下面的伪代码对步骤4和8中的结果进行XOR运算:
resultlist = []
for i in range(0, 16):
xoredvalue = the_begining_of_16bytes_from_result_of_8[i] ^ 1st_part[i % len(1st_part)]
resultlist.append(xoredvalue)
resultlist中的每个值都用base64编码,并将+
, /
,=
替换掉。然后,根据步骤d中的公式计算mod,如果mod小于20,在第二部分末尾加上/
。
将C2域名,第1部分,第2部分连接起来:C2 domain/1st part/2nd part
。
Panda Baker的POST请求参数示例如图8所示,是用32字节key的AES-256 CBC
模式和16字节的IV加密的,process行是Panda Banker将自己注入svchost.exe的过程。name
值在Panda Banker payload中已预配置过了。如果有必要,恶意软件会从C2服务器接收配置数据:
图8: POST参数示例
对每个POST请求,Panda Banker会常见32字节的key和16字节的IV用于AES加密。生成的AES key用RAS key加密,如图6。然后将用RSA加密的AES key、16字节的AES IV和AES加密的POST参数打包。然后Panda Banker会从生成的URL的第1和第2部分和打包的内容中计算SHA256值(如图9)。最后,用base64编码所有数据:
图9: POST主体的二进制数据
Panda Banker的C2服务器会向受害者机器发送多层加密的二进制数据。解密步骤如下:
因为来自C2服务器的响应数据是base64方式编码的。解码后的二进制格式见图10。二进制数据中的SHA256值用于完整性检查。为了解密AES加密的数据,Panda Baker会复用POST请求中的AES key:
图10: 来自C2服务器的二进制响应数据
解密后的JSON数据如图11:
图11: 解密的第一层
图11中的数据解码后,会出现另一个二进制格式,如图4所示。解密后,会出现更多的JSON数据,如图12。
图12: 解密的第二层
解码的sign
值用于完整性检查。Panda Banker的RSA公钥值会用于检查解码的data
值的完整性。如果计算的签名和JSON数据的签名不匹配,解码的data
值就会被忽略。
解密的data
也是用base64编码的,并含有:
第一个例子中,解码的二进制格式如图4所示。一旦解密就会发现配置文件或web注入数据。第二个例子中,解码的数据是有个PE可执行文件(动态链接库)。
真实的C2配置数据如图13所示,其中含有传播许多插件的URL,比如url_plugin_webinject32, url_plugin_webinject64, url_plugin_vnc32, url_plugin_vnc64, url_plugin_backsocks, url_plugin_grabber, url_plugin_keylogger
。
也会显示VNC注入(inject_vnc
), 窃取的数据(grab_pass, grab_cookie
), 登陆进程名 (keylog_process
和 screen_process
)的当前设定。本例中,执行键盘记录和屏幕监控的进程名为putty.exe:
图13: 来自C2服务器的配置数据
Panda Banker会通过API hooking
拦截浏览器的web流量,将恶意脚本注入到受害者web浏览器的目标web页。也会通过移除Content Security Policy header
来影响web浏览器的安全。
url_plugin_webinject32
插件就是用于web注入的。根据分析,它会hookiexplore.exe, microsoftedge.exe, microsoftedgecp.exe, firefox.exe, chrome.exe, opera.exe
等使用的API。一旦浏览器从访问的URL在url_webinjects
的配置数据中,插件就会将对应的脚本注入到web浏览器的web页面中。
一些API hooks示例如下:
影响微软浏览器的API Hooks
HttpSendRequestsW
HttpSendRequestsA
HttpSendRequestsExW
HttpSendRequestsExA
InternetReadFile
InternetReadFileExA
InternetReadFileExW
InternetQueryDataAvailable
InternetCloseHandle
HttpOpenRequestsA
HttpOpenRequestsW
HttpQueryInfoA
InternetConnectA
InternetConnectW
InternetWriteFile
影响Firefox的API Hooks
PR_Close
PR_Read
PR_Write
PR_Poll
影响Chrome / Opera的API Hooks
closesocket
WSASend
WSARecv
recv
url_webinjects
的数据主要攻击银行和信用卡公司。图14是针对银行网站的web注入数据示例。例子中,恶意代码被注入到<head> tag
后,代码含有下载特定目标窃取脚本的URL,这些命令都是混淆过的,以此隐藏Panda Banker的恶意行为:
图14: 针对银行网站的注入代码
用于数据窃取的代码反混淆后,可以看出含有下面的功能:
图15:注入代码——伪造消息
图16: 注入代码——窃取卡号
图17: 注入代码——收集昵称、支付限额、借记卡和贷记卡的取现限额
表2是攻击目标的国家和行业分析:
表2: 攻击目标的国家和行业
美国、加拿大和日本是Panda Banker的主要攻击国家。恶意软件主要窃取银行账号、信用卡信息和工资系统中的个人信息。Web钱包和区块信息也是工具的目标。
Panda Banker是一款高度混淆的、高度可配置的、活跃的恶意软件。威胁单元使用该恶意软件来窃取银行卡、信用卡信息,个人数据、web钱包和区块信息。主要的工具目标的美国、加拿大和日本。