
Guía curada para convertirse en analista de malware, abarcando conocimientos esenciales, ingeniería inversa, herramientas de análisis y aprendizaje asistido por LLM con ejercicios prácticos y recursos.
Esta es la opinión personal de @PINKSAWTOOTH y puede que no sea necesariamente el mejor método para ti. Espero que te sirva como un ejemplo de método de estudio.
Antes de leer esto, la analista de malware a quien respeto, @hasherezade, ha resumido en su blog cómo empezar a estudiar análisis de malware. Es posible que haya partes que se solapen, pero recomiendo leerlo. Además, como los siguientes blogs están centrados principalmente en fuentes en inglés, me gustaría presentar fuentes centradas en japonés en la medida de lo posible.
[!NOTE]
Añadido en 2026: Aprendizaje del análisis de malware en la era de los LLM
Cuando empecé a escribir esta página, no era una época en la que los LLM y los AI Agent se pudieran usar a diario como ahora. A fecha de 2026, si vas a estudiar análisis de malware o ingeniería inversa, recomiendo utilizar activamente los LLM además de libros y materiales en la web. Especialmente, son muy útiles para crear programas de aprendizaje, explicar código y ensamblador, analizar, crear scripts de análisis, organizar resultados de análisis, etc.
Por otro lado, en muchas técnicas de análisis han aumentado las situaciones en las que los LLM superan a los humanos. Sin embargo, eso no significa que los conocimientos básicos hayan dejado de ser necesarios. Para comprender la salida del LLM y verificar por uno mismo sus fundamentos y su corrección, es importante tener conocimientos especializados (aunque puede que pronto llegue el día en que ese trabajo pierda sentido...). En este documento, se parte de la premisa de utilizar el LLM no como un "dispositivo que da respuestas", sino como un "profesor con el que aprender juntos, un asistente en el momento del análisis".
Primero, explicaré brevemente los conocimientos previos necesarios para el análisis de malware. Antes de aprender sobre análisis de malware, se necesitan como mínimo conocimientos de informática (ciencias de la computación).
Sobre estos, creo que basta con comprender los contenidos que se cursan en la universidad o en escuelas técnicas. (Consultando el programa de estudios en línea de alguna universidad, etc., se puede conocer contenido más concreto.) En este documento, cómo aprender lenguajes de programación o ciencias de la computación queda fuera del alcance, pero los siguientes son materiales recomendados.
Los conocimientos necesarios para el análisis de malware se dividen a grandes rasgos en los siguientes cinco.
Primero, es necesario aprender qué es el malware y qué tipo de trabajo se realiza en el análisis de malware. Presento materiales y libros recomendados para aprender sobre el análisis de malware en general.
También se recomiendan los entrenamientos en línea de análisis de malware.
Presento páginas que recopilan el comportamiento del malware y las técnicas que explota.
Los blogs e informes que tratan información de amenazas y análisis de malware publicados a diario también son fuentes de información importantes. Es conveniente configurar notificaciones de actualización con un lector RSS, etc. También hay sitios que los recopilan, por lo que se pueden aprovechar.
De entre estos, presento los que abordan análisis detallados de malware en japonés.
Además, leyendo reglas YARA se pueden aprender las características del malware.
La ingeniería inversa no es más que una parte del análisis de malware, pero es un camino inevitable para convertirse en analista de malware. Solo con el análisis dinámico usando un sandbox o el análisis dinámico usando herramientas (exceptuando la depuración realizada manualmente), es difícil identificar la totalidad de las funcionalidades del malware o los algoritmos utilizados.
Para realizar ingeniería inversa, es necesario comprender el código fuente original. (Se asume el entorno Windows, que es común en el análisis de malware) Analizar malware sin experiencia en programación usando la Windows API sería un rodeo.
Microsoft publica documentación oficial y ejemplos de la Windows API. ※Hay que tener cuidado, ya que en ocasiones la visualización es extraña en las traducciones al japonés
Para aprender el funcionamiento del sistema operativo Windows, se recomiendan los siguientes libros.
C/C++ sigue siendo muy importante para aprender ingeniería inversa de malware de Windows, por lo que lo recomiendo como primer lenguaje a aprender. Por otro lado, el objeto de análisis real no es solo C/C++. A fecha de 2026, resulta útil conocer al menos las características de los binarios y runtimes de lo siguiente.
No es necesario aprender todos los lenguajes en profundidad desde el principio. Hay que tener en cuenta que, cuando cambian los lenguajes de desarrollo o los runtimes, también cambian los conocimientos necesarios.
Una vez adquiridas las habilidades de programación en el lenguaje y entorno del objeto de análisis, pasemos a estudiar ingeniería inversa. Al analizar archivos PE de Windows, que son comunes en el análisis de malware, primero hagamos ingeniería inversa de programas introductorios en C o C++. Como siguiente paso, analicemos archivos PE que usen Win API y que hayamos compilado nosotros mismos (cuyo código fuente tengamos). Incluso con el mismo código fuente, si se cambian las opciones de proyecto, compilación o enlace seleccionadas y se observa qué cambios aparecen en el ejecutable, creo que se adquirirán bastantes habilidades de ingeniería inversa.
Antes recomendaba buscar ejemplos de Microsoft o código en GitHub y aprender reescribiéndolo. Este método sigue siendo válido, pero a fecha de 2026 también es muy eficaz hacer que un LLM o un Coding Agent cree pequeños programas adaptados a tu objetivo de aprendizaje.
Por ejemplo, primero se le pide que genere un programa pequeño de unas 10 a 50 líneas.```text CreateFileWとWriteFileを使ってテキストファイルを作成する、 できるだけ小さなWindows Cプログラムを作ってください。 リバースエンジニアリングの教材に使いたいので、 処理を複雑にせず、各Windows APIを使う理由も説明してください。
生成されたコードを、Microsoft Learnのドキュメントと照らし合わせながら内容を確認し、自分でコンパイルします。
その後、GhidraやIDAなどで自分がコンパイルしたバイナリを解析し、元のソースコードと逆アセンブル・デコンパイル結果を比較します。
以下のループで勉強します。```text
LLMに小さなコードを作らせる
↓
ソースコードを読む・APIを調べる
↓
自分でビルドする
↓
Ghidraなどで解析する
↓
元のソースコードと比較する
↓
分からない部分だけLLMに質問する
↓
別の条件で再ビルドして比較する
Por ejemplo, sería bueno comparar lo siguiente respecto al código fuente del mismo proceso.
Analizar un binario conociendo el código fuente original es un entrenamiento muy bueno para aprender ingeniería inversa.
Además, para perfeccionar las técnicas de ingeniería inversa, es recomendable resolver retos de Rev de CTF y Crackmes. En particular, se recomiendan los problemas de archivos PE y los dirigidos a analistas de malware.
Además, en la ingeniería inversa de malware a menudo se realiza ingeniería inversa del procesamiento de algoritmos criptográficos, por lo que se recomienda aprender sobre técnicas criptográficas básicas. Una vez que comprendas el algoritmo, lee el código fuente de implementaciones de algoritmos criptográficos de código abierto publicadas en GitHub, etc., y realiza ingeniería inversa en la práctica.
Al avanzar en el análisis de malware, usar mejores herramientas o dominarlas puede facilitar el análisis. Además, incluso teniendo diversos conocimientos, en la práctica se analiza a través de herramientas, por lo que es necesario comprender también cómo utilizarlas.
Para la gestión de instalación y actualización de herramientas de análisis, en entornos Windows es útil FLARE-VM publicada por Mandiant. Permite instalar de forma conjunta las herramientas necesarias para el análisis de malware y la ingeniería inversa.
En entornos Linux, se puede utilizar REMnux. Esta también reúne las herramientas necesarias para el análisis de malware, y se pueden consultar en la lista de herramientas incluidas.
Tanto FLARE-VM como REMnux permiten construir fácilmente un entorno de análisis de malware, por lo que se recomiendan también para quienes crean un entorno de análisis por primera vez. Al revisar las herramientas incluidas en cada uno y probarlas en la práctica, se puede aprender qué herramientas de análisis existen y en qué situaciones se utilizan.
Además, sería bueno probar también las herramientas presentadas en los siguientes enlaces.
Una de las formas útiles de usar un LLM es utilizarlo como un profesor al que se le puede preguntar en el momento lo que no se entiende. Antes de la aparición de los LLM, era necesario investigar por uno mismo lo que no se comprendía y entender su contenido. Especialmente en el caso de los principiantes, muchas veces no se sabía ni qué investigar, lo que creo que era uno de los obstáculos para el aprendizaje. Actualmente, un LLM con un alto nivel de conocimiento explica con paciencia tantas veces como sea necesario, adaptándose al nivel de comprensión de cada uno. Si no se entiende, basta con volver a preguntar, y también se puede usar diciendo "explícalo de forma más sencilla", "da un ejemplo concreto" o "confirma si esta comprensión es correcta". Creo que hemos llegado a una buena época en la que, si uno tiene motivación, puede aprender preguntando sin límite sobre lo que no entiende.
Por ejemplo, sobre los resultados de desensamblado o descompilación, se pueden hacer preguntas como las siguientes.```text この関数の役割と、そう判断できる理由を教えてください。
## クイックスタート
### インストール
```bash
# リポジトリをクローン
git clone https://github.com/yourusername/kitploit-tool.git
cd kitploit-tool
# 依存関係をインストール
pip install -r requirements.txt
# ツールをインストール
python setup.py install
# 単一のターゲットをスキャン
python kitploit.py -t example.com
# 複数のターゲットをスキャン
python kitploit.py -f targets.txt
# 詳細出力を有効化
python kitploit.py -t example.com -v
# 結果をファイルに保存
python kitploit.py -t example.com -o results.json
ツールは、設定ファイルを通じてカスタマイズできます。デフォルトの設定ファイルは config.yaml です:
# スキャン設定
scan:
timeout: 30
threads: 10
retries: 3
# 出力設定
output:
format: json
verbose: false
# API キー
api_keys:
shodan: YOUR_API_KEY
virustotal: YOUR_API_KEY
独自のスキャンモジュールを作成できます:
from kitploit.core import BaseModule
class CustomModule(BaseModule):
def __init__(self):
super().__init__()
self.name = "custom"
def run(self, target):
# ここにカスタムロジックを記述
return results
ツールは、以下の外部 API との統合をサポートしています:
問題: インストール時に ModuleNotFoundError が発生する
解決策: 依存関係が正しくインストールされていることを確認してください:
pip install --upgrade -r requirements.txt
問題: スキャンがタイムアウトする
解決策: 設定ファイルでタイムアウト値を増やしてください:
scan:
timeout: 60
貢献を歓迎します!以下の手順に従ってください:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)このプロジェクトは MIT ライセンスの下でライセンスされています。詳細については、LICENSE ファイルを参照してください。
このツールは、教育および倫理的なテスト目的のみで提供されています。許可なくシステムをスキャンすることは違法です。ユーザーは、このツールの使用に関連するすべての法的責任を負います。```text このデコンパイル結果から変数の型を推定したいです。 型を判断するために、どの命令、API、参照先を確認すべきですか?
## 検出ルール
### ルール1: 不審なファイルダウンロードの検出
```yaml
name: "Suspicious File Download Detection"
description: "Detects suspicious file downloads from web browsers"
severity: "medium"
enabled: true
conditions:
- field: "process_name"
operator: "in"
values: ["chrome.exe", "firefox.exe", "msedge.exe", "iexplore.exe"]
- field: "event_type"
operator: "equals"
value: "file_create"
- field: "file_extension"
operator: "in"
values: [".exe", ".dll", ".scr", ".bat", ".cmd", ".ps1", ".vbs", ".js"]
- field: "file_path"
operator: "not_contains"
values: ["\\AppData\\Local\\Temp\\", "\\Windows\\Temp\\"]
actions:
- type: "alert"
priority: "high"
message: "Suspicious file download detected: {file_path}"
- type: "quarantine"
target: "{file_path}"
- type: "log"
level: "warning"
message: "Download blocked and quarantined"
name: "Process Injection Detection"
description: "Detects potential process injection attempts"
severity: "high"
enabled: true
conditions:
- field: "event_type"
operator: "equals"
value: "process_access"
- field: "access_rights"
operator: "contains_any"
values: ["PROCESS_VM_WRITE", "PROCESS_VM_OPERATION", "PROCESS_CREATE_THREAD"]
- field: "source_process"
operator: "not_in"
values: ["svchost.exe", "lsass.exe", "csrss.exe", "wininit.exe"]
- field: "target_process"
operator: "in"
values: ["lsass.exe", "winlogon.exe", "services.exe", "explorer.exe"]
actions:
- type: "alert"
priority: "critical"
message: "Potential process injection detected: {source_process} -> {target_process}"
- type: "block"
target: "{source_process}"
- type: "forensics"
capture: ["memory_dump", "process_tree", "network_connections"]
name: "Persistence Mechanism Detection"
description: "Detects common persistence mechanisms"
severity: "high"
enabled: true
conditions:
- field: "event_type"
operator: "in"
values: ["registry_modify", "service_create", "scheduled_task_create"]
- field: "registry_path"
operator: "contains_any"
values: [
"\\CurrentVersion\\Run",
"\\CurrentVersion\\RunOnce",
"\\CurrentVersion\\Windows\\Load",
"\\CurrentVersion\\Windows\\Run"
]
- field: "process_name"
operator: "not_in"
values: ["msiexec.exe", "setup.exe", "installer.exe"]
actions:
- type: "alert"
priority: "high"
message: "Persistence mechanism detected: {registry_path}"
- type: "log"
level: "warning"
message: "Registry modification logged for analysis"
- type: "collect"
artifacts: ["registry_key", "process_info", "file_info"]
name: "Suspicious Network Connection Detection"
description: "Detects suspicious outbound network connections"
severity: "medium"
enabled: true
conditions:
- field: "event_type"
operator: "equals"
value: "network_connect"
- field: "destination_port"
operator: "in"
values: [4444, 5555, 6666, 7777, 8888, 9999, 31337, 12345]
- field: "process_name"
operator: "not_in"
values: ["svchost.exe", "chrome.exe", "firefox.exe", "msedge.exe"]
actions:
- type: "alert"
priority: "medium"
message: "Suspicious network connection: {process_name} -> {destination_ip}:{destination_port}"
- type: "log"
level: "info"
message: "Network connection logged"
name: "Privilege Escalation Detection"
description: "Detects potential privilege escalation attempts"
severity: "critical"
enabled: true
conditions:
- field: "event_type"
operator: "equals"
value: "token_manipulation"
- field: "privilege"
operator: "in"
values: ["SeDebugPrivilege", "SeImpersonatePrivilege", "SeAssignPrimaryTokenPrivilege"]
- field: "process_name"
operator: "not_in"
values: ["lsass.exe", "services.exe", "winlogon.exe"]
actions:
- type: "alert"
priority: "critical"
message: "Privilege escalation attempt detected: {process_name}"
- type: "block"
target: "{process_name}"
- type: "forensics"
capture: ["memory_dump", "token_info", "process_tree"]
name: "Custom Rule Name"
description: "Description of what this rule detects"
severity: "low|medium|high|critical"
enabled: true
# 検出条件
conditions:
- field: "field_name"
operator: "equals|contains|in|not_in|regex|gt|lt|gte|lte"
value: "single_value"
# または
values: ["value1", "value2", "value3"]
# アクション
actions:
- type: "alert|block|quarantine|log|collect|forensics"
priority: "low|medium|high|critical"
message: "Alert message with {field} placeholders"
target: "{field_name}"
level: "info|warning|error|critical"
capture: ["artifact1", "artifact2"]
artifacts: ["artifact1", "artifact2"]
# ルールをテスト
python -m src.rule_engine.test_rule --rule custom_rule.yaml --event test_event.json
# ルールを検証
python -m src.rule_engine.validate_rule --rule custom_rule.yaml
# すべてのルールを一覧表示
python -m src.rule_engine.list_rules --directory rules/
# ルールをリロード
python -m src.rule_engine.reload_rules --config config.yaml
# ルールをデプロイ
python -m src.rule_engine.deploy_rule --rule custom_rule.yaml --target production
# ルールをエクスポート
python -m src.rule_engine.export_rules --output rules_backup.yaml
# ルールをインポート
python -m src.rule_engine.import_rules --input rules_backup.yaml
``````text
このWindows API呼び出しの前後で使われている構造体について説明してください。
各フィールドを確認するためにGhidra上でどこを見るべきかも教えてください。
id: dangerous-command-execution
name: 危険なコマンド実行の検出
severity: critical
action: block
patterns:
- "rm -rf /"
- "curl.*\\|.*sh"
- "wget.*\\|.*bash"
- "eval.*base64"
- "nc -e /bin/sh"
- "bash -i >& /dev/tcp/"
id: sensitive-file-access
name: 機密ファイルへのアクセス検出
severity: high
action: alert
patterns:
- "\\.ssh/id_rsa"
- "\\.aws/credentials"
- "\\.env"
- "etc/passwd"
- "etc/shadow"
- "\\.kube/config"
id: prompt-injection
name: プロンプトインジェクションの検出
severity: high
action: block
patterns:
- "ignore previous instructions"
- "disregard.*system prompt"
- "you are now"
- "new instructions:"
- "forget everything"
id: data-exfiltration
name: データ漏洩の検出
severity: critical
action: block
patterns:
- "curl.*-d.*@"
- "wget.*--post-file"
- "base64.*\\|.*curl"
- "cat.*\\|.*nc"
id: my-custom-rule
name: カスタムルール名
description: このルールが検出する内容の説明
severity: high # critical, high, medium, low
action: block # block, alert, log
patterns:
- "regex-pattern-1"
- "regex-pattern-2"
conditions:
- field: command
operator: contains
value: "suspicious"
tags:
- custom
- security
# ルールをテスト
python -m ai_agent_security.cli test-rule --rule my-rule.yaml --input "test command"
# すべてのルールを検証
python -m ai_agent_security.cli validate-rules --dir rules/
# config.yaml
version: "1.0"
# エージェント設定
agent:
name: "my-agent"
type: "claude-code" # claude-code, cursor, custom
timeout: 300
# セキュリティ設定
security:
# 検出レベル: strict, balanced, permissive
level: "balanced"
# ブロックモード: true の場合、危険な操作をブロック
block_mode: true
# ログレベル: debug, info, warn, error
log_level: "info"
# ルールディレクトリ
rules_dir: "./rules"
# カスタムルール
custom_rules:
- "./custom-rules/*.yaml"
# 通知設定
notifications:
# コンソール出力
console:
enabled: true
color: true
# Slack 通知
slack:
enabled: false
webhook_url: "${SLACK_WEBHOOK_URL}"
channel: "#security-alerts"
# メール通知
email:
enabled: false
smtp_host: "smtp.example.com"
smtp_port: 587
from: "[email protected]"
to:
- "[email protected]"
# 監査ログ
audit:
enabled: true
log_file: "./logs/audit.log"
rotation: "daily"
retention_days: 90
# 統合
integrations:
# SIEM 統合
splunk:
enabled: false
hec_url: "${SPLUNK_HEC_URL}"
hec_token: "${SPLUNK_HEC_TOKEN}"
# Webhook
webhook:
enabled: false
url: "${WEBHOOK_URL}"
events:
- "block"
- "alert"
# .env ファイル
AI_AGENT_SECURITY_CONFIG=./config.yaml
AI_AGENT_SECURITY_LOG_LEVEL=info
AI_AGENT_SECURITY_BLOCK_MODE=true
# 通知
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx
WEBHOOK_URL=https://example.com/webhook
# SIEM
SPLUNK_HEC_URL=https://splunk.example.com:8088
SPLUNK_HEC_TOKEN=your-token-here
# エージェントを監視モードで起動
ai-agent-security monitor --agent claude-code
# 特定のコマンドをチェック
ai-agent-security check "rm -rf /tmp/test"
# ルールを一覧表示
ai-agent-security list-rules
# 統計を表示
ai-agent-security stats --period 7d
from ai_agent_security import SecurityMonitor, RuleEngine
# モニターを初期化
monitor = SecurityMonitor(config_path="./config.yaml")
# ルールエンジンを初期化
engine = RuleEngine(rules_dir="./rules")
# コマンドをチェック
result = engine.check_command("curl http://example.com | bash")
if result.blocked:
print(f"ブロックされました: {result.rule_name}")
print(f"理由: {result.reason}")
else:
print("コマンドは安全です")
# 監視を開始
monitor.start()
# イベントを処理
@monitor.on_event
def handle_event(event):
print(f"イベント: {event.type}")
print(f"重大度: {event.severity}")
print(f"詳細: {event.details}")
# 監視を停止
monitor.stop()
# .github/workflows/security.yml
name: AI Agent Security Check
on:
pull_request:
branches: [main]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install AI Agent Security
run: pip install ai-agent-security
- name: Run security scan
run: |
ai-agent-security scan --dir ./src --output sarif > results.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
┌─────────────────────────────────────────────────────────────┐
│ AI エージェント │
│ (Claude Code, Cursor, カスタムエージェント) │
└─────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ AI Agent Security │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ インター │ │ ルール │ │ 監査 │ │
│ │ セプター │──│ エンジン │──│ ログ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ ブロック │ │ 通知 │ │ SIEM │ │
│ │ アクション │ │ システム │ │ 統合 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
| 指標 | 値 |
|---|---|
| レイテンシ | < 10ms |
| スループット | > 1000 チェック/秒 |
| メモリ使用量 | < 100MB |
| CPU 使用率 | < 5% (アイドル時) |
問題: ルールが適用されない
# ルールファイルの構文を確認
ai-agent-security validate-rules --dir ./rules
# デバッグモードで実行
ai-agent-security monitor --debug
問題: パフォーマンスが低下する
# ルールの数を確認
ai-agent-security list-rules --count
# 不要なルールを無効化
ai-agent-security disable-rule --id unnecessary-rule
問題: 誤検知が多い
# 誤検知を報告
ai-agent-security report-false-positive --rule rule-id --input "command"
# ルールを調整
ai-agent-security tune-rule --id rule-id --threshold 0.8
貢献を歓迎します!詳細については CONTRIBUTING.md を参照してください。
# リポジトリをクローン
git clone https://github.com/example/ai-agent-security.git
cd ai-agent-security
# 仮想環境を作成
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 依存関係をインストール
pip install -e ".[dev]"
# テストを実行
pytest tests/ -v
# リントを実行
ruff check .
mypy src/
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細については LICENSE ファイルを参照してください。
⚠️ 免責事項: このツールは追加のセキュリティ層を提供しますが、完全なセキュリティソリューションではありません。多層防御戦略の一部として使用してください。```text このアセンブリを1命令ずつ説明するのではなく、 まずbasic blockごとの役割を整理して、私が自分で処理を推定できるようにヒントをください。
## セキュリティに関する考慮事項
### 認証情報の取り扱い
- **APIキーをハードコードしないでください。** 環境変数またはシークレットマネージャーを使用してください。
- **認証情報をバージョン管理にコミットしないでください。** `.gitignore` に `.env` や `*.key` などのパターンを追加してください。
- **定期的にキーをローテーションしてください。** 漏洩の疑いがある場合は、直ちに無効化して再発行してください。
### ネットワークセキュリティ
- 本番環境では、すべての通信に **TLS 1.2 以上** を使用してください。
- 受信接続を **ファイアウォールルール** で制限し、必要なポートのみを開放してください。
- 内部サービスを公共のインターネットに直接公開しないでください。リバースプロキシまたは VPN を使用してください。
### 依存関係の管理
- 依存関係を最新の状態に保ち、既知の脆弱性を定期的に確認してください。
- `npm audit`、`pip-audit`、`cargo audit` などのツールを CI パイプラインに統合してください。
- ロックファイル(`package-lock.json`、`poetry.lock`、`Cargo.lock`)を必ずコミットしてください。
### ログと監視
- 認証の失敗、権限昇格の試み、異常なトラフィックパターンを監視してください。
- ログに **パスワード、トークン、個人を特定できる情報(PII)** を記録しないでください。
- アラートを設定し、重大なイベントに迅速に対応できるようにしてください。
### インシデント対応
セキュリティインシデントが発生した場合:
1. **影響範囲を特定** し、侵害されたシステムを隔離します。
2. **証拠を保全** します(ログ、メモリダンプ、ディスクイメージ)。
3. **関係者に通知** し、必要に応じて規制当局に報告します。
4. **根本原因を分析** し、再発防止策を実施します。
5. **事後レビュー** を実施し、教訓を文書化します。
---
## 貢献
貢献を歓迎します!以下の手順に従ってください:
1. リポジトリをフォークします。
2. 機能ブランチを作成します(`git checkout -b feature/amazing-feature`)。
3. 変更をコミットします(`git commit -m 'Add amazing feature'`)。
4. ブランチにプッシュします(`git push origin feature/amazing-feature`)。
5. プルリクエストを作成します。
### コーディング規約
- 既存のコードスタイルに従ってください。
- 新機能にはテストを追加してください。
- ドキュメントを更新してください。
- コミットメッセージは明確かつ簡潔にしてください。
### バグ報告
バグを報告する際は、以下の情報を含めてください:
- **再現手順**: バグを再現するための明確な手順。
- **期待される動作**: 何が起こるべきか。
- **実際の動作**: 実際に何が起こるか。
- **環境**: OS、バージョン、その他の関連情報。
- **スクリーンショット**: 該当する場合は添付してください。
---
## ライセンス
このプロジェクトは [MIT License](https://github.com/pinksawtooth/how_to_become_a_malware_analyst/blob/main/LICENSE) の下でライセンスされています。詳細については `LICENSE` ファイルを参照してください。
---
## 謝辞
- すべての貢献者とメンテナーに感謝します。
- このプロジェクトを可能にしたオープンソースコミュニティに感謝します。
- インスピレーションを与えてくれた類似プロジェクトに感謝します。
---
## サポート
質問やサポートが必要な場合:
- [GitHub Issues](https://github.com/example/project/issues) で問題を報告してください。
- [Discussions](https://github.com/example/project/discussions) で質問してください。
- [ドキュメント](https://example.com/docs) を参照してください。
---
**最終更新**: 2024年```text
私はこの関数を「設定ファイルの読み込み処理」だと推測しました。
この仮説を検証するために確認すべきポイントを挙げてください。
最初から答えを聞くのではなく、ヒント、確認ポイント、検証方法を聞く使い方がおすすめです。
2026年現在は、ChatGPTのような対話型LLMだけでなく、ファイルの読み書き、プログラムのビルド、コマンドの実行などを行えるCoding Agentも利用できるようになっています。 さらに、MCP(Model Context Protocol)などを利用することで、AI Agentから解析ツールを直接操作する方法も広まりつつあります。 例えばREMnuxには、AI AgentからREMnux上のマルウェア解析ツールを利用するためのMCP Serverが用意されています。
Ghidraについても、AI Agentから操作するためのMCP実装がいくつか登場しています。私もGhidraをHeadlessで利用し、MCP経由でAI Agentから解析を行うためのMecha Ghidraを開発しています。
IDAやその他のリバースエンジニアリングツールについても、MCPやAgentと連携するための実装が複数登場しており、これまで人間が手作業で行っていた解析作業をAgentに任せることができるようになっています。 一方で、初学者の段階からすべての解析をAgentに任せてしまうのはおすすめしません。「なぜその解析を行ったのか」「ツールが内部で何をしているのか」「出力された結果が正しいのか」といったことを自分で判断する力が身につきにくくなるためです。
まずは自分で解析し、分からない部分をLLMに質問するところから始めるとよいでしょう。慣れてきたら、解析支援スクリプトの作成、MCPによるツール連携、Agentを使った解析の自動化へと徐々に進んでいくことをおすすめします。
業務で扱っているマルウェア、顧客から提供されたファイル、未公開のIoC、インシデント情報、社内情報などを外部のLLMサービスへ入力する場合には注意が必要です。 利用しているサービスの契約内容、データの保持期間、学習への利用有無、所属組織のルールなどを確認したうえで利用しましょう。
必要に応じて、以下のような対策を検討してください。
また、マルウェア本体や解析対象のファイル、解析結果の中には、AI Agentを意図しない動作へ誘導する文字列が含まれている可能性もあります。 特に、AI Agentがファイル操作やコマンド実行、解析ツールの操作まで行える場合は、通常のLLMよりも強い権限を持つことになります。そのため、マルウェア解析でAI Agentを利用する場合は、VMなどの隔離環境上で実行し、安全性を確保することをおすすめします。
AIはかなり賢くなりましたが、それでも意図しないコマンドを実行することがあります。 これまでのマルウェア解析と同様に解析環境を隔離するという基本を守って利用しましょう。
2026年現在、マルウェア解析を勉強するために、最初から実際のマルウェアを入手する必要はありません。 むしろ初学者には、以下の順番をおすすめします。
最初のうちは、元のソースコードが分かっているプログラムを教材にするのがおすすめです。 自分で解析した結果と実際のソースコードを比較できるため、「どこまで正しく解析できたか」「どこを読み違えたか」を自分で確認できます。 いきなり実際のマルウェアを解析するよりも、まずは答え合わせのできる教材を使って、逆アセンブルやデコンパイル結果の読み方に慣れる方が効率よく学習できると思います。
ここではマルウェアの入手方法について触れますが、紹介するサービスを利用する際は利用規約を必ず読んで利用してください。 また、以下の内容は、マルウェアの入手を勧めるものではありません。
不正指令電磁的記録に関する罪では、マルウェアの作成、提供、取得、保管などについて、その目的や正当な理由の有無などが要件になります。
私は法律の専門家ではないため、どういった理由であれば法律上の正当な理由にあたるかはわかりません。
個人の趣味でマルウェア解析をおこなうことは正当な理由として認められない可能性もあります。
捜査されると困る、裁判になったら困る、正当な理由として提示できる活動実績がない、弁護費用がないなど、平穏な人生を絶対に送りたいという人は、個人の趣味でやらないほうがよいかと思います。
とはいえ過度に怯えすぎて萎縮する必要はないとは思います。 最低限、警視庁が公開している不正指令電磁的記録に関する罪に関するページには目を通して、内容を確認しておきましょう。
マルウェアを扱う上で気にしなければいけないことは、法律面だけではありません。 マルウェアを実行(故意かどうかは問わない)すると、たいていの場合は攻撃者の用意したサーバにアクセスします。 攻撃者のサーバには自分の利用しているIPアドレスのログが残りますし、接続時に利用しているシステムの情報を送信することもあります。 マルウェアによっては、攻撃者によるコマンドの実行などがおこなわれることも考えられますし、内部ネットワークのスキャンや(一番避けるべき)外部への感染活動などがおこなわれるかもしれません。 攻撃者のサーバに記録された情報は攻撃者自身だけでなく、第三者へ提供されることもあります。また、捜査機関はサーバを差し押さえてログを解析したうえで、ISPに情報開示請求をおこなうことができます。
以下のどれか一つにでも当てはまる場合は、実際のマルウェアを利用した学習は控えましょう。
実際のマルウェアを個人的に入手しなくても、学習する方法は前述しております。
最後にオタクがみんな大好きな以下の名言たちで前置きを終えます。
With great power comes great responsibilityThe abyss gazes also into you.マルウェアのサンプルやIoCを共有するためのサービスがいくつかあります。もっとも登録が多く有名なサービスはVirusTotalですが、有償アカウントのみダウンロードが可能であるため、ここでは無償で利用可能なサービスを紹介します。
この2つのサービスがサンプルの入手先としては有力です。
参考情報として以下のサービスも記載しておきます。
無料で使用できるオンラインサンドボックスのサービスは本来マルウェアの挙動を解析するサービスですが、他者の投稿したマルウェアをダウンロードすることができます。
以下はRAT(Remote Access Trojan)の実装を理解するのに役に立つリポジトリです。 ソースコードと実際のバイナリを比較することで、通信処理、コマンド実行、ファイル操作などの実装を学ぶことができます。
マルウェアのC2通信やAgentの実装を理解するためには、オープンソースで公開されているC2フレームワークのソースコードを読むことも参考になります。 C2フレームワークには、AgentとC2 Server間の通信、コマンドの受信と実行、ファイル操作、プロセス操作、通信データの暗号化など、マルウェアでもよく見られる機能が実装されています。 それぞれ実装言語やAgentの構造、通信方式が異なるため、ソースコードと生成されたAgentを比較しながらリバースエンジニアリングしてみるのもよいでしょう。
| フィールド | 説明 | 例 |
|---|
process_name | プロセス名 | chrome.exe |
process_id | プロセスID | 1234 |
parent_process | 親プロセス名 | explorer.exe |
command_line | コマンドライン引数 | -enc <base64> |
file_path | ファイルパス | C:\temp\file.exe |
file_extension | ファイル拡張子 | .exe |
file_hash | ファイルハッシュ | a1b2c3... |
registry_path | レジストリパス | HKLM\...\Run |
registry_value | レジストリ値 | malware |
network_protocol | ネットワークプロトコル | TCP |
source_ip | 送信元IPアドレス | 192.168.1.100 |
destination_ip | 宛先IPアドレス | 10.0.0.1 |
destination_port | 宛先ポート | 443 |
user_name | ユーザー名 | admin |
event_type | イベントタイプ | process_create |
timestamp | タイムスタンプ | 2024-01-01T12:00:00Z |
| 演算子 | 説明 | 例 |
|---|
equals | 完全一致 | field equals "value" |
not_equals | 不一致 | field not_equals "value" |
contains | 部分一致 | field contains "substring" |
not_contains | 部分不一致 | field not_contains "substring" |
in | リスト内に存在 | field in ["a", "b", "c"] |
not_in | リスト内に存在しない | field not_in ["a", "b", "c"] |
contains_any | いずれかを含む | field contains_any ["a", "b"] |
contains_all | すべてを含む | field contains_all ["a", "b"] |
regex | 正規表現マッチ | field regex "^[a-z]+$" |
gt | より大きい | field gt 100 |
lt | より小さい | field lt 100 |
gte | 以上 | field gte 100 |
lte | 以下 | field lte 100 |
| アクション | 説明 | パラメータ |
|---|
alert | アラートを生成 | priority, message |
block | プロセス/接続をブロック | target |
quarantine | ファイルを隔離 | target |
log | ログに記録 | level, message |
collect | アーティファクトを収集 | artifacts |
forensics | フォレンジックデータをキャプチャ | capture |