新型Golang恶意软件的详细分析
字数 1971 2025-08-06 08:35:35

Golang恶意软件分析与逆向工程教学文档

一、Golang恶意软件概述

1.1 Golang语言特点

  • 相对较新的编程语言(2009年发布)
  • 编译型语言,生成静态链接的可执行文件
  • 跨平台支持良好
  • 内置并发支持(Goroutines)
  • 运行时环境包含在二进制文件中,导致文件体积较大

1.2 Golang恶意软件特点

  • 不常见但逐渐增多
  • 二进制文件体积庞大
  • 调试分析时与传统C/C++程序差异明显
  • 使用静态链接库导致分析复杂度增加
  • 使用UPX等工具打包以减小体积

二、样本分析基础

2.1 样本信息

  • 名称:Trojan.CryptoStealer.Go
  • SHA256:941330c6be0af1eb94741804ffa3522a68265f9ff6c8fd6bcf1efb063cb61196
  • 原始包:HyperCheats.rar
  • C&C服务器:cu23880.tmweb.ru/landing.php

2.2 行为分析

  1. 文件搜索行为

    • 搜索多种浏览器用户数据目录
    • 搜索桌面文件(*.txt)
    • 针对俄罗斯用户(Yandex浏览器路径)
  2. 数据窃取行为

    • 复制找到的文件到%APPDATA%创建的文件夹
    • 将数据压缩打包
    • 发送到C&C服务器

三、逆向工程工具与方法

3.1 必备工具

  1. UPX:用于解压UPX打包的可执行文件

    upx -d sample.exe
    
  2. IDA Pro:主要逆向分析工具

    • 配合IDAGolangHelper脚本(George Zaytsev开发)
    • 支持函数重命名和类型识别
  3. 调试工具

    • PIN跟踪器(用于跟踪Windows API调用)
    • GDB/Delve(Go语言专用调试器)

3.2 IDA Pro分析流程

  1. 加载二进制文件
  2. 运行IDAGolangHelper脚本
    • 文件 -> 脚本文件 -> 选择IDAGolangHelper.py
  3. 确定Golang版本
    • 脚本提供版本识别功能(本例为Go 1.2)
  4. 重命名函数
    • 自动解析标准Go函数和类型
  5. 添加注释
    • 重点关注main_*函数(程序特有逻辑)

3.3 关键函数识别

  1. main_init

    • 程序初始化函数
    • 包含使用的模块信息
    • 负责字符串初始化(base64解码)
  2. main_main

    • 主逻辑函数
    • 创建目录
    • 启动Goroutines
    • 文件搜索和数据处理

四、恶意功能深入分析

4.1 使用的第三方库

  1. GRequests:网络通信
    • GitHub: https://github.com/levigross/grequests
  2. go-sqlite3:SQLite3数据库操作
    • GitHub: https://github.com/mattn/go-sqlite3
  3. try:异常处理
    • GitHub: https://github.com/manucorporat/try

4.2 数据窃取目标

  1. 浏览器数据

    • 信用卡信息(name_on_card, card_number_encrypted等)
    • 自动填充数据(autofill_profiles)
    • 电子邮件地址
    • 电话号码
  2. 加密货币钱包

    • Bitcoin (wallet.dat)
    • Ethereum (keystore)
    • Exodus (seed.seco)
    • Zcash (wallet.dat)
    • 其他多种加密货币
  3. 即时通讯软件

    • Telegram (tdesktop.tg)

4.3 SQL查询分析

恶意软件执行的关键SQL查询:

SELECT name_on_card, expiration_month, expiration_year, card_number_encrypted, billing_address_id FROM credit_cards
SELECT * FROM autofill_profiles
SELECT email FROM autofill_profile_emails
SELECT number FROM autofill_profile_phones
SELECT first_name, middle_name, last_name, full_name FROM autofill_profile_names

4.4 字符串处理特点

  • Golang字符串以串联形式存储
  • 通过偏移量和长度检索特定字符串
  • 大量使用base64编码

五、防御与检测建议

5.1 检测指标

  1. 文件系统行为

    • 对浏览器用户数据目录的异常访问
    • 对加密货币钱包文件的读取
  2. 网络行为

    • 与已知C&C服务器(cu23880.tmweb.ru)的通信
    • 异常的数据压缩和上传行为
  3. 进程行为

    • 大量Goroutines创建
    • SQLite3数据库查询行为

5.2 防御措施

  1. 终端防护

    • 监控对敏感目录的访问
    • 限制未知程序的网络连接
  2. 浏览器安全

    • 使用强密码保护敏感数据
    • 定期清理自动填充数据
  3. 加密货币安全

    • 使用硬件钱包
    • 定期备份钱包文件

六、Golang恶意软件发展趋势

  1. 逐渐增多:随着Go语言流行度上升,相关恶意软件会增加
  2. 分析工具成熟:专用逆向工具将不断完善
  3. 混淆技术增强:可能采用更复杂的打包和混淆技术
  4. 跨平台攻击:利用Go的跨平台特性进行多平台攻击

七、总结

本案例中的Golang恶意软件虽然功能相对简单,但展示了新型语言编写的恶意软件的特点和挑战。通过适当的工具和方法,可以有效分析这类恶意软件。安全研究人员需要持续关注Golang等新兴语言在恶意软件中的应用,并开发相应的分析技术和防御措施。

Golang恶意软件分析与逆向工程教学文档 一、Golang恶意软件概述 1.1 Golang语言特点 相对较新的编程语言(2009年发布) 编译型语言,生成静态链接的可执行文件 跨平台支持良好 内置并发支持(Goroutines) 运行时环境包含在二进制文件中,导致文件体积较大 1.2 Golang恶意软件特点 不常见但逐渐增多 二进制文件体积庞大 调试分析时与传统C/C++程序差异明显 使用静态链接库导致分析复杂度增加 使用UPX等工具打包以减小体积 二、样本分析基础 2.1 样本信息 名称:Trojan.CryptoStealer.Go SHA256:941330c6be0af1eb94741804ffa3522a68265f9ff6c8fd6bcf1efb063cb61196 原始包:HyperCheats.rar C&C服务器:cu23880.tmweb.ru/landing.php 2.2 行为分析 文件搜索行为 : 搜索多种浏览器用户数据目录 搜索桌面文件(* .txt) 针对俄罗斯用户(Yandex浏览器路径) 数据窃取行为 : 复制找到的文件到%APPDATA%创建的文件夹 将数据压缩打包 发送到C&C服务器 三、逆向工程工具与方法 3.1 必备工具 UPX :用于解压UPX打包的可执行文件 IDA Pro :主要逆向分析工具 配合IDAGolangHelper脚本(George Zaytsev开发) 支持函数重命名和类型识别 调试工具 : PIN跟踪器(用于跟踪Windows API调用) GDB/Delve(Go语言专用调试器) 3.2 IDA Pro分析流程 加载二进制文件 运行IDAGolangHelper脚本 : 文件 -> 脚本文件 -> 选择IDAGolangHelper.py 确定Golang版本 : 脚本提供版本识别功能(本例为Go 1.2) 重命名函数 : 自动解析标准Go函数和类型 添加注释 : 重点关注main_* 函数(程序特有逻辑) 3.3 关键函数识别 main_ init : 程序初始化函数 包含使用的模块信息 负责字符串初始化(base64解码) main_ main : 主逻辑函数 创建目录 启动Goroutines 文件搜索和数据处理 四、恶意功能深入分析 4.1 使用的第三方库 GRequests :网络通信 GitHub: https://github.com/levigross/grequests go-sqlite3 :SQLite3数据库操作 GitHub: https://github.com/mattn/go-sqlite3 try :异常处理 GitHub: https://github.com/manucorporat/try 4.2 数据窃取目标 浏览器数据 : 信用卡信息(name_ on_ card, card_ number_ encrypted等) 自动填充数据(autofill_ profiles) 电子邮件地址 电话号码 加密货币钱包 : Bitcoin (wallet.dat) Ethereum (keystore) Exodus (seed.seco) Zcash (wallet.dat) 其他多种加密货币 即时通讯软件 : Telegram (tdesktop.tg) 4.3 SQL查询分析 恶意软件执行的关键SQL查询: 4.4 字符串处理特点 Golang字符串以串联形式存储 通过偏移量和长度检索特定字符串 大量使用base64编码 五、防御与检测建议 5.1 检测指标 文件系统行为 : 对浏览器用户数据目录的异常访问 对加密货币钱包文件的读取 网络行为 : 与已知C&C服务器(cu23880.tmweb.ru)的通信 异常的数据压缩和上传行为 进程行为 : 大量Goroutines创建 SQLite3数据库查询行为 5.2 防御措施 终端防护 : 监控对敏感目录的访问 限制未知程序的网络连接 浏览器安全 : 使用强密码保护敏感数据 定期清理自动填充数据 加密货币安全 : 使用硬件钱包 定期备份钱包文件 六、Golang恶意软件发展趋势 逐渐增多 :随着Go语言流行度上升,相关恶意软件会增加 分析工具成熟 :专用逆向工具将不断完善 混淆技术增强 :可能采用更复杂的打包和混淆技术 跨平台攻击 :利用Go的跨平台特性进行多平台攻击 七、总结 本案例中的Golang恶意软件虽然功能相对简单,但展示了新型语言编写的恶意软件的特点和挑战。通过适当的工具和方法,可以有效分析这类恶意软件。安全研究人员需要持续关注Golang等新兴语言在恶意软件中的应用,并开发相应的分析技术和防御措施。