
Guida curata per diventare un analista di malware, che copre le conoscenze essenziali, il reverse engineering, gli strumenti di analisi e l'apprendimento assistito da LLM con esercizi pratici e risorse.
Questa è l'opinione personale di @PINKSAWTOOTH e potrebbe non essere necessariamente il metodo migliore per te. Spero che tu possa usarla come esempio di metodo di studio.
Prima di leggere questo, l'analista di malware che rispetto, @hasherezade, ha riassunto nel suo blog come iniziare a studiare l'analisi del malware. Probabilmente ci saranno parti sovrapposte, ma vi consiglio di dargli un'occhiata. Inoltre, poiché i blog seguenti sono principalmente in inglese, vorrei presentare fonti il più possibile incentrate sul giapponese.
[!NOTE]
Aggiunta del 2026: Apprendimento dell'analisi del malware nell'era degli LLM
Quando ho iniziato a scrivere questa pagina, non era un'epoca in cui LLM e AI Agent fossero utilizzabili quotidianamente come oggi. Nel 2026, se si studia l'analisi del malware o il reverse engineering, consiglio di utilizzare attivamente gli LLM oltre a libri e risorse web. Sono particolarmente utili per la creazione di programmi di studio, la spiegazione di codice e assembly, l'analisi, la creazione di script di analisi e l'organizzazione dei risultati dell'analisi.
D'altra parte, in molte tecniche di analisi gli LLM superano gli esseri umani in un numero crescente di situazioni. Tuttavia, ciò non significa che le conoscenze di base siano diventate inutili. Per comprendere l'output degli LLM e verificarne personalmente le basi e la correttezza, è importante possedere conoscenze specialistiche (anche se potrebbe avvicinarsi il giorno in cui tale lavoro perderà significato...). In questo documento, si presuppone l'utilizzo degli LLM non come "dispositivi che forniscono risposte", ma come "insegnanti con cui imparare insieme, assistenti durante l'analisi".
Innanzitutto, spiegherò brevemente le conoscenze prerequisite per l'analisi del malware. Prima di studiare l'analisi del malware, sono necessarie come minimo conoscenze di informatica (computer science).
Per quanto riguarda questi argomenti, ritengo che sia sufficiente comprendere i contenuti che si studiano all'università o negli istituti professionali. (Consultando i sillabi online di qualche università, si possono conoscere contenuti più specifici.) In questo documento, come apprendere i linguaggi di programmazione e l'informatica è fuori ambito, ma ecco le risorse consigliate.
Le conoscenze necessarie per l'analisi del malware si dividono in grandi linee nelle seguenti 5 categorie.
Innanzitutto, è necessario imparare cos'è il malware e in cosa consiste il lavoro di analisi del malware. Presento le risorse e i libri consigliati per apprendere l'analisi del malware in generale.
Anche i training online di analisi del malware sono consigliati.
Presento le pagine che riassumono il comportamento del malware e le tecniche sfruttate.
Anche i blog e i report che trattano informazioni sulle minacce e analisi del malware pubblicati quotidianamente sono fonti importanti. È comodo ricevere notifiche degli aggiornamenti tramite un lettore RSS. Esistono anche siti che li raccolgono, quindi è possibile utilizzarli.
Tra questi, presento quelli che trattano analisi dettagliate del malware in giapponese.
Inoltre, leggendo le regole YARA si possono apprendere le caratteristiche del malware.
Il reverse engineering è solo una parte dell'analisi del malware, ma è una strada inevitabile per diventare un analista di malware. Con la sola analisi dinamica tramite sandbox o tramite strumenti (escluso il debug manuale), è difficile identificare l'intera funzionalità del malware e gli algoritmi utilizzati.
Per eseguire il reverse engineering, è necessario comprendere il codice sorgente originale. (Supponendo l'ambiente Windows tipico dell'analisi del malware) fare analisi del malware senza esperienza di programmazione con le Windows API sarebbe una strada più lunga.
Microsoft pubblica documentazione ufficiale e campioni per le Windows API. ※Attenzione al fatto che alcune visualizzazioni potrebbero risultare anomale quando tradotte in giapponese
Per apprendere il funzionamento del sistema operativo Windows, sono consigliati i seguenti libri.
C/C++ è ancora oggi molto importante per apprendere il reverse engineering del malware Windows, quindi è consigliato come primo linguaggio da imparare. D'altra parte, gli oggetti di analisi reali non sono solo C/C++. Nel 2026, conoscere le caratteristiche dei binari e dei runtime almeno per i seguenti linguaggi è utile.
Non è necessario imparare approfonditamente tutti i linguaggi fin dall'inizio. Teniamo presente che, quando cambiano i linguaggi di sviluppo e i runtime, cambiano anche le conoscenze necessarie.
Una volta acquisite le competenze di programmazione nel linguaggio e nell'ambiente oggetto di analisi, passiamo a studiare il reverse engineering. Quando si analizzano file PE di Windows, tipici dell'analisi del malware, iniziamo con il reverse engineering di programmi introduttivi in C o C++. Come passo successivo, proviamo ad analizzare un file PE che utilizza le Win API e che abbiamo compilato noi stessi (di cui esiste il codice sorgente). Anche con lo stesso codice sorgente, se si cambiano il progetto scelto o le opzioni di compilazione e linking e si osserva quali cambiamenti appaiono nell'eseguibile, credo che le competenze di reverse engineering miglioreranno notevolmente.
In precedenza consigliavo di cercare campioni Microsoft o codice su GitHub e di studiarli modificandoli. Questo metodo è ancora valido, ma nel 2026 è anche molto efficace far creare a un LLM o a un Coding Agent piccoli programmi adatti ai propri obiettivi di studio.
Ad esempio, all'inizio si può far generare un piccolo programma di circa 10-50 righe.```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 この関数の役割と、そう判断できる理由を教えてください。
## Funzionamento
1. **Raccolta di informazioni**
- Risoluzione DNS, rilevamento CDN/WAF, scansione delle porte
- Rilevamento di tecnologie e framework
- Raccolta di sottodomini e endpoint
2. **Scansione delle vulnerabilità**
- Test di SQL injection (basato su errori, booleano, temporale)
- Test XSS (riflesso, memorizzato, DOM)
- Rilevamento di path traversal e LFI
- Test di command injection
- Scansione di vulnerabilità comuni (OWASP Top 10)
3. **Analisi di sicurezza**
- Verifica della configurazione SSL/TLS
- Analisi delle intestazioni di sicurezza
- Rilevamento di file e directory sensibili
- Test di autenticazione e autorizzazione
4. **Generazione di report**
- Report dettagliati in formato JSON, HTML e Markdown
- Classificazione della gravità e punteggio CVSS
- Passaggi di riproduzione e raccomandazioni per la correzione
## Utilizzo
### Scansione di base
```bash
# Scansione di un singolo URL
python3 webvulnscan.py -u https://example.com
# Scansione con crawling approfondito
python3 webvulnscan.py -u https://example.com --deep-scan
# Scansione di più URL da un file
python3 webvulnscan.py -f urls.txt
# Scansione con output in un formato specifico
python3 webvulnscan.py -u https://example.com -o report.html --format html
# Scansione con cookie di autenticazione
python3 webvulnscan.py -u https://example.com --cookie "session=abc123"
# Scansione con proxy
python3 webvulnscan.py -u https://example.com --proxy http://127.0.0.1:8080
# Scansione con thread personalizzati e timeout
python3 webvulnscan.py -u https://example.com --threads 20 --timeout 30
# Scansione con User-Agent personalizzato
python3 webvulnscan.py -u https://example.com --user-agent "Mozilla/5.0..."
# Scansione con verifica SSL disabilitata
python3 webvulnscan.py -u https://example.com --no-ssl-verify
# Scansione completa con tutte le opzioni
python3 webvulnscan.py -u https://example.com \
--deep-scan \
--threads 15 \
--timeout 20 \
--cookie "session=abc123" \
--proxy http://127.0.0.1:8080 \
-o full_report.html \
--format html \
--verbose
# Scansione di più URL con output JSON
python3 webvulnscan.py -f urls.txt -o results.json --format json
# Scansione rapida senza crawling
python3 webvulnscan.py -u https://example.com --no-crawl --quick
{
"scan_info": {
"target": "https://example.com",
"start_time": "2024-01-01T12:00:00",
"end_time": "2024-01-01T12:05:00",
"duration": 300
},
"vulnerabilities": [
{
"type": "SQL Injection",
"severity": "High",
"url": "https://example.com/login",
"parameter": "username",
"payload": "' OR '1'='1",
"description": "Vulnerabilità di SQL injection rilevata nel parametro username",
"remediation": "Utilizzare query parametrizzate e validazione dell'input"
}
],
"summary": {
"total_vulnerabilities": 1,
"critical": 0,
"high": 1,
"medium": 0,
"low": 0
}
}
Il report HTML include:
# Report di scansione delle vulnerabilità Web
## Riepilogo della scansione
- **Target**: https://example.com
- **Data di scansione**: 2024-01-01 12:00:00
- **Durata**: 5 minuti
## Vulnerabilità rilevate
### 1. SQL Injection (Alta)
- **URL**: https://example.com/login
- **Parametro**: username
- **Payload**: `' OR '1'='1`
- **Descrizione**: Vulnerabilità di SQL injection rilevata nel parametro username
- **Correzione**: Utilizzare query parametrizzate e validazione dell'input
``````text
このデコンパイル結果から変数の型を推定したいです。
型を判断するために、どの命令、API、参照先を確認すべきですか?
name: "Suspicious File Download Detection"
description: "Detects suspicious file downloads from web servers"
severity: "medium"
enabled: true
conditions:
- field: "http.response.status_code"
operator: "equals"
value: 200
- field: "http.response.headers.content_type"
operator: "contains"
value: "application/octet-stream"
- field: "http.response.headers.content_disposition"
operator: "contains"
value: "attachment"
actions:
- type: "alert"
message: "Suspicious file download detected"
- type: "log"
level: "warning"
name: "SQL Injection Attempt Detection"
description: "Detects potential SQL injection attempts"
severity: "high"
enabled: true
conditions:
- field: "http.request.uri.query"
operator: "regex"
value: "(?i)(union|select|insert|update|delete|drop|create|alter|exec|execute)"
- field: "http.request.uri.query"
operator: "regex"
value: "(?i)(\\'|\\\"|;|--|#|/\\*|\\*/)"
actions:
- type: "alert"
message: "Potential SQL injection attempt detected"
- type: "block"
duration: 3600
name: "Suspicious User Agent Detection"
description: "Detects requests with suspicious user agents"
severity: "low"
enabled: true
conditions:
- field: "http.request.headers.user_agent"
operator: "regex"
value: "(?i)(sqlmap|nikto|nmap|masscan|dirb|gobuster|wfuzz|burp|zap)"
actions:
- type: "alert"
message: "Suspicious user agent detected"
- type: "log"
level: "info"
# config.yaml
server:
host: "0.0.0.0"
port: 8080
workers: 4
timeout: 30
logging:
level: "info"
format: "json"
output: "/var/log/kitploit/kitploit.log"
rotation:
max_size: "100MB"
max_files: 10
detection:
enabled: true
rules_path: "/etc/kitploit/rules"
reload_interval: 300
database:
type: "sqlite"
path: "/var/lib/kitploit/kitploit.db"
max_connections: 10
api:
enabled: true
port: 9090
auth:
type: "bearer"
token: "${KITPLOIT_API_TOKEN}"
# Start the server
kitploit server --config /etc/kitploit/config.yaml
# Start with custom port
kitploit server --port 9090
# Start in daemon mode
kitploit server --daemon
# Check server status
kitploit status
# Reload configuration
kitploit reload
# Stop the server
kitploit stop
# List all rules
kitploit rules list
# Enable a rule
kitploit rules enable rule-001
# Disable a rule
kitploit rules disable rule-001
# Test a rule
kitploit rules test rule-001 --input request.json
# Validate rules
kitploit rules validate /etc/kitploit/rules
``````text
このWindows API呼び出しの前後で使われている構造体について説明してください。
各フィールドを確認するためにGhidra上でどこを見るべきかも教えてください。
title: ファイルレスペイロード実行
description: メモリ内で実行される悪意のあるコードを検出
level: critical
tags:
- attack.defense_evasion
- attack.t1055
detection:
selection:
EventID: 1
Image|endswith: '\powershell.exe'
CommandLine|contains:
- 'IEX'
- 'Invoke-Expression'
- 'FromBase64String'
condition: selection
title: リモートプロセスインジェクション
description: リモートプロセスインジェクションの試行を検出
level: critical
tags:
- attack.defense_evasion
- attack.t1055.002
detection:
selection:
EventID: 8
SourceImage|endswith: '\powershell.exe'
TargetImage|endswith:
- '\lsass.exe'
- '\winlogon.exe'
condition: selection
title: 難読化されたPowerShellコマンド
description: エンコードされたPowerShellコマンドを検出
level: high
tags:
- attack.execution
- attack.t1059.001
detection:
selection:
EventID: 4104
ScriptBlockText|contains:
- 'FromBase64String'
- 'EncodedCommand'
- '-enc '
condition: selection
title: レジストリRunキーの永続化
description: レジストリのRunキーによる永続化を検出
level: high
tags:
- attack.persistence
- attack.t1547.001
detection:
selection:
EventID: 13
TargetObject|contains:
- '\CurrentVersion\Run\'
- '\CurrentVersion\RunOnce\'
condition: selection
title: PsExecによる横展開
description: PsExecを使用した横展開を検出
level: high
tags:
- attack.lateral_movement
- attack.t1021.002
detection:
selection:
EventID: 1
Image|endswith: '\PSEXESVC.exe'
condition: selection
title: LSASSメモリダンプ
description: LSASSメモリダンプの試行を検出
level: critical
tags:
- attack.credential_access
- attack.t1003.001
detection:
selection:
EventID: 10
TargetImage|endswith: '\lsass.exe'
GrantedAccess|contains:
- '0x1010'
- '0x1410'
condition: selection
notifications:
slack:
enabled: true
webhook_url: "https://hooks.slack.com/services/XXX/YYY/ZZZ"
channel: "#security-alerts"
mention: "@security-team"
notifications:
email:
enabled: true
smtp_server: "smtp.example.com"
smtp_port: 587
username: "[email protected]"
password: "your-password"
from: "[email protected]"
to:
- "[email protected]"
tls: true
notifications:
webhook:
enabled: true
url: "https://your-siem.example.com/api/alerts"
method: "POST"
headers:
Authorization: "Bearer YOUR_TOKEN"
Content-Type: "application/json"
{
"timestamp": "2024-01-15T10:30:00Z",
"rule_name": "ファイルレスペイロード実行",
"severity": "critical",
"hostname": "WORKSTATION-01",
"user": "DOMAIN\\user",
"process": {
"name": "powershell.exe",
"pid": 1234,
"command_line": "powershell.exe -enc SQBFAFgA..."
},
"mitre_attack": {
"tactic": "Defense Evasion",
"technique": "T1055"
},
"details": {
"detection_type": "fileless",
"confidence": "high"
}
}
2024-01-15 10:30:00 INFO Hayabusa started
2024-01-15 10:30:01 INFO Loading rules from ./rules
2024-01-15 10:30:02 INFO Loaded 150 detection rules
2024-01-15 10:30:03 INFO Monitoring started
2024-01-15 10:30:15 WARN Suspicious process detected: powershell.exe
2024-01-15 10:30:15 CRIT Fileless payload execution detected
2024-01-15 10:30:15 INFO Alert sent to Slack
2024-01-15 10:30:16 INFO Alert sent to email
performance:
max_memory_mb: 512
buffer_size: 10000
batch_size: 100
performance:
worker_threads: 4
cpu_limit_percent: 50
nice_level: 10
performance:
async_logging: true
log_buffer_size: 1000
flush_interval_seconds: 5
hayabusa --debug --log-level debug
performance:
worker_threads: 8
buffer_size: 50000
batch_size: 500
performance:
max_memory_mb: 1024
restart_interval_hours: 24
A: Windows 10/11、Windows Server 2016/2019/2022に対応しています。
A: 管理者権限が必要です。イベントログの読み取りとプロセス監視に必要です。
A: はい、併用可能です。ただし、パフォーマンスへの影響を考慮してください。
A: 公式リポジトリのrulesディレクトリ、またはSigmaルールから変換できます。
A: ホワイトリスト機能を使用するか、ルールをカスタマイズしてください。
whitelist:
processes:
- "C:\\Program Files\\Legitimate\\app.exe"
commands:
- "legitimate-command"
users:
- "SYSTEM"
貢献を歓迎します!以下の方法で参加できます:
詳細はCONTRIBUTING.mdを参照してください。
このプロジェクトはMITライセンスの下で公開されています。詳細はLICENSEファイルを参照してください。
## 検出ルールのカスタマイズ
`config/detection_rules.yaml` を編集して、検出ルールをカスタマイズできます:
```yaml
rules:
- name: "AWS Access Key"
pattern: "AKIA[0-9A-Z]{16}"
severity: "critical"
description: "AWS Access Key ID detected"
enabled: true
- name: "Generic API Key"
pattern: "(?i)(api[_-]?key|apikey)[\\s]*[=:][\\s]*['\"]?([a-zA-Z0-9_\\-]{16,})['\"]?"
severity: "high"
description: "Generic API key pattern"
enabled: true
- name: "Private Key"
pattern: "-----BEGIN (RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----"
severity: "critical"
description: "Private key detected"
enabled: true
rules:
# Detect Slack tokens
- name: "Slack Token"
pattern: "xox[baprs]-[0-9a-zA-Z]{10,48}"
severity: "high"
description: "Slack API token detected"
enabled: true
# Detect Stripe keys
- name: "Stripe API Key"
pattern: "sk_live_[0-9a-zA-Z]{24,}"
severity: "critical"
description: "Stripe live API key detected"
enabled: true
# Detect JWT tokens
- name: "JWT Token"
pattern: "eyJ[A-Za-z0-9_-]*\\.eyJ[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]*"
severity: "medium"
description: "JSON Web Token detected"
enabled: true
特定のファイル、ディレクトリ、またはパターンをスキャンから除外できます:
exclude:
paths:
- "node_modules/"
- "vendor/"
- ".git/"
- "test/fixtures/"
- "*.min.js"
- "*.lock"
patterns:
- "EXAMPLE_KEY"
- "test_key_"
- "dummy_"
┌─────────────────────────────────────────────────────────────┐
│ Scan Results │
├──────────────┬──────────┬──────────┬────────────────────────┤
│ File │ Line │ Severity │ Rule │
├──────────────┼──────────┼──────────┼────────────────────────┤
│ config.py │ 42 │ CRITICAL │ AWS Access Key │
│ .env │ 7 │ HIGH │ Generic API Key │
│ secrets.json │ 15 │ CRITICAL │ Private Key │
└──────────────┴──────────┴──────────┴────────────────────────┘
{
"scan_info": {
"timestamp": "2024-01-15T10:30:00Z",
"target": "./src",
"files_scanned": 156,
"duration_ms": 1234
},
"findings": [
{
"file": "config.py",
"line": 42,
"column": 15,
"rule": "AWS Access Key",
"severity": "critical",
"match": "AKIA***************",
"description": "AWS Access Key ID detected"
}
],
"summary": {
"critical": 1,
"high": 1,
"medium": 0,
"low": 0,
"total": 2
}
}
{
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "SecretScanner",
"version": "1.0.0"
}
},
"results": []
}
]
}
シークレットスキャンを CI/CD パイプラインに統合します:
# .github/workflows/secret-scan.yml
name: Secret Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run SecretScanner
run: |
python secret_scanner.py . --format json --output results.json
- name: Upload results
uses: actions/upload-artifact@v4
with:
name: scan-results
path: results.json
コミット前にシークレットを検出します:
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: secret-scanner
name: Secret Scanner
entry: python secret_scanner.py
language: system
pass_filenames: false
既知の検出結果をベースライン化して、新規の問題のみに集中します:
# Create baseline
python secret_scanner.py . --format json --output baseline.json
# Scan and compare against baseline
python secret_scanner.py . --baseline baseline.json
誤検出を減らすために除外を設定します:
exclude:
paths:
- "tests/"
- "docs/"
- "*.example"
patterns:
- "EXAMPLE"
- "PLACEHOLDER"
- "YOUR_KEY_HERE"
シークレットが検出された場合:
問題: スキャンが遅い
解決策: 大きなディレクトリを除外するか、ファイルサイズ制限を使用します:
python secret_scanner.py . --max-file-size 1048576 # 1MB limit
問題: 誤検出が多い
解決策: ルールを調整するか、除外を追加します:
exclude:
patterns:
- "test_"
- "example_"
- "sample_"
問題: エンコーディングエラー
解決策: ファイルエンコーディングを指定します:
python secret_scanner.py . --encoding utf-8
詳細なデバッグ出力を有効にします:
python secret_scanner.py . --verbose --debug
ログは logs/secret_scanner.log に書き込まれます:
# View logs
tail -f logs/secret_scanner.log
# Set log level
python secret_scanner.py . --log-level DEBUG
# Use 4 worker threads
python secret_scanner.py . --workers 4
# Limit memory usage to 512MB
python secret_scanner.py . --max-memory 512
# Only scan files modified in the last 24 hours
python secret_scanner.py . --since "24 hours ago"
貢献を歓迎します!プルリクエストを送信する前に、貢献ガイドラインをお読みください。
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)このプロジェクトは MIT ライセンスの下でライセンスされています - 詳細については LICENSE ファイルを参照してください。
SecretScanner で安全を保ちましょう! 🔒```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実装がいくつか登場しています。私もGhidraをHeadlessで利用し、MCP経由でAI Agentから解析を行うためのMecha Ghidraを開発しています。
- [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ですが、有償アカウントのみダウンロードが可能であるため、ここでは無償で利用可能なサービスを紹介します。
この2つのサービスがサンプルの入手先としては有力です。
- [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フレームワークの機能や特徴を比較するための一覧
| Opzione | Descrizione | Predefinito |
|---|
-u, --url | URL di destinazione da scansionare | - |
-f, --file | File contenente un elenco di URL | - |
-o, --output | File di output per i risultati | - |
--format | Formato di output (json, html, markdown) | json |
--deep-scan | Abilita la scansione approfondita | false |
--quick | Modalità di scansione rapida | false |
--no-crawl | Disabilita il crawling | false |
--threads | Numero di thread | 10 |
--timeout | Timeout della richiesta in secondi | 10 |
--cookie | Stringa di cookie per l'autenticazione | - |
--proxy | URL del proxy | - |
--user-agent | Stringa User-Agent personalizzata | - |
--no-ssl-verify | Disabilita la verifica del certificato SSL | false |
--verbose | Abilita l'output dettagliato | false |
| 変数 | 説明 | デフォルト |
|---|
KITPLOIT_CONFIG | 設定ファイルのパス | /etc/kitploit/config.yaml |
KITPLOIT_LOG_LEVEL | ログレベル | info |
KITPLOIT_API_TOKEN | API認証トークン | - |
KITPLOIT_DB_PATH | データベースファイルのパス | /var/lib/kitploit/kitploit.db |
KITPLOIT_RULES_PATH | 検出ルールのパス | /etc/kitploit/rules |
| フィールド | 型 | 説明 |
|---|
name | string | ルールの一意な名前 |
pattern | string | マッチング用の正規表現パターン |
severity | string | 重大度レベル: critical、high、medium、low |
description | string | 人間が読める形式の説明 |
enabled | boolean | このルールを有効にするかどうか |