Raccoon

Raccoon 样本分析

1. 样本信息

Raccoon是一种信息窃取类型恶意软件,可作为恶意软件即服务使用。它可以通过订阅获得,每月收费 200 美元。Raccoon恶意软件已经感染了超过 100,000 台设备,并成为 2019 年地下论坛上被提及最多的病毒之一。

ioc

类别 特征值
MD5 f1521ff38743ca05cc8c6f25cd95309c
SHA1 ebb54174674901b68474ae44944fbe5283d56398
SHA256 1a79ac5d13c3c8ab8fc5b8d7e512065f512a2d81e61b199902a0ad0f380a2256
C2 91.219.236.49

2. 样本分析

2.1. 空间申请

ida载入样本,从主函数往下发现其调用GlobalAlloc在堆中申请空间:

通过计算或动态调试可知sizeBytes大小为0x4DBD0

2.2. 数据拷贝

然后会将本地0x407B58地址处的数据逐字节拷贝到刚才申请的堆空间中:

数据的内容如下:

2.3. 修改虚拟空间保护

通过GetProcAddress获取kernel32.dll&byte_479098字符串的函数地址,然后调用该函数使申请的堆空间可读可写可执行。&byte_479098所对应的字符串可通过计算或动态调试得知为VirtualProtect

2.4. 解密释放数据

handleAddress处拷贝的数据进行解密后,便跳转到handleAddress进行执行:

解密方式如下:

2.5. 第一次执行虚拟内存代码

在申请内存空间时,空间句柄保存在handleAddress中,当解密完数据后,EIP将指向handleAddress(因申请空间存在随机性,复现时内存地址亦存在差异):

通过动态调试跟踪执行,发现第一个call函数的主要功能是获取API函数地址:GlobalAllocGetLastErrorSleepVirtualAllocCreateToolhelp32SnapshotModule32FirstCloseHandle;第二个call函数则包含了一些有趣的东西:

在内存dataAddress中存在一个加密数据块,其中存储着恶意代码,下方第一个红框则是对该部分的密钥进行计算,第二个红框是解密过程(获取密钥再xor解密),第三个红框是判断是否全部解密(解密长度大小为0x4D1F1):

当解密完成后,dataAddress数据块内容如下:

通过VirtualAlloc申请一块内存virtualAddress,用于存储下一次解密后的数据,该解密是从dataAddress获取基础数据,然后解密后加载到virtualAddress

当解密完成后,virtualAddress数据块内容如下:

2.6. 第二次执行虚拟内存代码

当解密完数据后,EIP将指向virtualAddress,转入其中的代码样式如下:

通过动态调试发现其中存在内存申请,并将数据拷贝到申请的内存中,数据大小为0x8C800

循环加载该PE文件的到0x400000,然后释放上一个内存空间:

内存布局中呈现的节区信息如下:

最终将跳转到0x43E9BE继续执行:

2.7. 恶意载荷分析

在恶意载荷内存中转拷贝过程中,将完整的PE文件dump下来进行分析,恶意载荷首先会获取当前主机用户名,创建互斥锁:

然后进行本地语言判断,如果是白名单区域的主机将退出:

提取内存中的语言白名单如下:

Russian、Ukrainian、Belarusian、Kazakh、Kyrgyz、Armenian、Tajik、Uzbek

恶意载荷将进行字符串拼凑及解码,本次解码获得的Telegram频道为agrybirdsgamerept

http://telegin.top/agrybirdsgamerept
http://ttmirror.top/agrybirdsgamerept
http://teletele.top/agrybirdsgamerept
http://telegalive.top/agrybirdsgamerept
http://toptelete.top/agrybirdsgamerept
http://telegraf.top/agrybirdsgamerept
https://t.me/agrybirdsgamerept

解码获得链接后,与其中一个链接(http://telegin.top/agrybirdsgamerept)进行通信:

用到的WinHttpOpenWinHttpConnect函数:

解密响应内容,获得一个链接http://91.219.236.49/

获取用户名和Guid

然后将Guid与用户名加密后,发送到C2

从响应报文中解码出一个json格式的字符串:

从内存中提取json文本格式如下:

{
  "_id": "4pwhxXwB3dP17SpzDPUc",
  "au": "/l/f/4pwhxXwB3dP17SpzDPUc/f986ccd7ae3990632485c23da5d654a8641da382",
  "ls": "/l/f/4pwhxXwB3dP17SpzDPUc/431b842dcfe7fd233578e09291277c256e232336",
  "ip": "*.*.*.*",
  "location": {
    "country": "",
    "country_code": "",
    "state": null,
    "state_code": null,
    "city": null,
    "zip": null,
    "latitude": ,
    "longitude": 
  },
  "c": {
    "m": null,
    "t": null,
    "lu": null
  },
  "lu": null,
  "rm": 1,
  "stm": 1,
  "tg": 1,
  "is_screen_enabled": 0,
  "is_history_enabled": 1,
  "depth": 3,
  "s": [...],
  "cs": [...],
  "steamstr": [...],
  "tgs": [...],
  "ews": [...]
}

其中参数对应关系如下:

  • id:当前主机的编号;
  • au:下载SQLite3.dll的地址;
  • ls:下载窃密功能动态链接库压缩包(tS1oI8aQ4.zip)的地址;
  • location:当前主机地理位置相关信息;
  • rm:是否启用自我删除;
  • stm:是否窃取Steam相关信息;
  • tg:是否窃取Telegram相关信息;
  • s:窃取的浏览器列表;
  • cs:窃取的钱包列表;
  • steamstrSteam路径;
  • tgsTelegram路径;
  • ews:窃取的加密货币地址;

被窃取的浏览器包含:

edge、chrome、chromeBeta、chromeSxS、chromium、xpom、comodo、amigo、orbitum、bromium、brave、nichrome、rockmelt、360browser、vivaldi、go、sputnik、kometa、uran、qipSurf、epicprivacy、coccoc、centbrowser、7star、elements、torbro、suhba、saferbrowser、mustang、superbird、chedot、torch、UC Browser、QQ Browser、opera

被窃取的钱包包含:

binance、atomic、daedalus、electrum、electrum-ltc、electroncash、exodus、green、guarda、jaxxliberty、jaxxold、mymonero、monerogui、wasabi、ledger_live

SteamTelgram的地址信息如下:

被窃取的加密钱包地址包含:

meta、meta_e、brave、ronin、tronlink、bsc、MEW、guarda、Yoroi、Yoroi_e、math、math_e、equal、iwallet、jaxx、wombat、nifty、phantom、guild、saturn、liquality、terrastation、terrastation_e、keplr、neoline、polymesh、clover、sollet、iconex、temple、coin98、tezbox、khc、auromina、coinbase、cyano

3. 参考资料

https://labs.k7computing.com/index.php/raccoon-the-info-stealer/
https://app.any.run/tasks/f877e664-3a3c-4e03-a35a-e96e079317a5/#
https://www.virustotal.com/gui/file/1a79ac5d13c3c8ab8fc5b8d7e512065f512a2d81e61b199902a0ad0f380a2256