diff --git a/CHANGELOG-Japanese.md b/CHANGELOG-Japanese.md index cc9ca193..f93dd2f2 100644 --- a/CHANGELOG-Japanese.md +++ b/CHANGELOG-Japanese.md @@ -1,6 +1,6 @@ # 変更点 -## x.x.x [xxxx/xx/xx] +## 2.1.0 [2023/10/31] - Halloween Release **新機能:** diff --git a/CHANGELOG.md b/CHANGELOG.md index e62b797a..9b428af4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changes -## x.x.x [xxxx/xx/xx] +## 2.1.0 [2023/10/31] - Halloween Release **New Features:** diff --git a/README-Japanese.md b/README-Japanese.md index 06aa2980..86df6f47 100644 --- a/README-Japanese.md +++ b/README-Japanese.md @@ -39,6 +39,7 @@ Takajōは、日本語で["鷹狩りのスキルに優れた人"](https://en.wik - [Gitクローン](#gitクローン) - [アドバンス: ソースコードからのコンパイル(任意)](#アドバンス-ソースコードからのコンパイル任意) - [コマンド一覧](#コマンド一覧) + - [Extractコマンド](#extractコマンド) - [Listコマンド](#listコマンド) - [Splitコマンド](#splitコマンド) - [Stackコマンド](#stackコマンド) @@ -46,6 +47,9 @@ Takajōは、日本語で["鷹狩りのスキルに優れた人"](https://en.wik - [Timelineコマンド](#timelineコマンド) - [VirusTotalコマンド](#virustotalコマンド) - [コマンド使用方法](#コマンド使用方法) + - [Extractコマンド](#extractコマンド-1) + - [`extract-scriptblocks`コマンド](#extract-scriptblocksコマンド) + - [`extract-scriptblocks`コマンドの使用例](#extract-scriptblocksコマンドの使用例) - [Listコマンド](#listコマンド-1) - [`list-domains`コマンド](#list-domainsコマンド) - [`list-domains`コマンドの使用例](#list-domainsコマンドの使用例) @@ -113,11 +117,14 @@ Nimがインストールされている場合、以下のコマンドでソー ``` > nimble update -> nimble build -d:release --threads:on +> nimble build -d:release --threads:on ``` # コマンド一覧 +## Extractコマンド +* `extract-scriptblocks`: PowerShell EID 4104 スクリプトブロックログからPowerShellスクリプトを抽出して再構築する + ## Listコマンド * `list-domains`: `vt-domain-lookup`コマンドで使用する、重複のないドメインのリストを作成する * `list-hashes`: `vt-hash-lookup` で使用するプロセスのハッシュ値のリストを作成する @@ -146,6 +153,42 @@ Nimがインストールされている場合、以下のコマンドでソー # コマンド使用方法 +## Extractコマンド + +### `extract-scriptblocks`コマンド + +PowerShell EID 4104 スクリプトブロックログからPowerShellスクリプトを抽出して再構築します。 + +> 注意: PowerShellスクリプトは、コード構文が強調表示された「.ps1」ファイルとして開くのが最適ですが、悪意のあるコードが誤って実行されるのを防ぐために「.txt」拡張子を使用します。 + +* 入力: `JSONL` +* プロファイル: `すべて` +* 出力: `PowerShellスクリプト` + +必須オプション: + +- `-t, --timeline `: HayabusaのJSONLタイムライン + +任意オプション: + + - `-l, --level`: 最小のアラートレベルを指定 (デフォルト: `low`) + - `-o, --output`: PowerShellスクリプトを保存するディレクトリ (デフォルト: `scriptblock-logs`) + - `-q, --quiet`: ロゴを出力しない (デフォルト: `false`) + +#### `extract-scriptblocks`コマンドの使用例 + +HayabusaでJSONLタイムラインを出力する: + +``` +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w +``` + +PowerShell EID 4104 スクリプトブロックログから抽出し、`scriptblock-logs`ディレクトリに保存します: + +``` +takajo.exe extract-scriptblocks -t ../hayabusa/timeline.jsonl +``` + ## Listコマンド ### `list-domains`コマンド @@ -174,7 +217,7 @@ Nimがインストールされている場合、以下のコマンドでソー HayabusaでJSONLタイムラインを出力する: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` 結果をテキストファイルに保存する: @@ -212,7 +255,7 @@ takajo.exe list-domains -t ../hayabusa/timeline.jsonl -o domains.txt -s HayabusaでJSONLタイムラインを作成する: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` ハッシュタイプ毎に異なるファイルに結果を保存する: @@ -249,7 +292,7 @@ takajo.exe list-hashes -t ../hayabusa/timeline.jsonl -o case-1 HayabusaでJSONLタイムラインを作成する: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` 結果をテキストファイルに保存する: @@ -295,7 +338,7 @@ Hayabusaで検知するルールがなかったすべての`.evtx`ファイル HayabusaでCSVタイムラインを出力する: ``` -hayabusa.exe -d -p verbose -o timeline.csv +hayabusa.exe -d -p verbose -o timeline.csv -w ``` 結果を標準出力に表示する: @@ -336,7 +379,7 @@ takajo.exe list-undetected-evtx -t ../hayabusa/timeline.csv -e -o und HayabusaでCSVタイムラインを出力する: ``` -hayabusa.exe csv-timeline -d -p verbose -o timeline.csv +hayabusa.exe csv-timeline -d -p verbose -o timeline.csv -w ``` 結果を標準出力に表示する: @@ -376,7 +419,7 @@ takajo.exe list-unused-rules -t ../hayabusa/timeline.csv -r ../hayabusa/rules -o HayabusaでCSVタイムラインを出力する: ``` -hayabusa.exe csv-timeline -d -o timeline.csv +hayabusa.exe csv-timeline -d -o timeline.csv -w ``` 1つのCSVタイムラインを複数のCSVタイムラインに分割して `output` ディレクトリに出力: @@ -413,7 +456,7 @@ takajo.exe split-csv-timeline -t ../hayabusa/timeline.csv -m -o case-1-csv HayabusaでJSONLタイムラインを作成する: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` 1つのJSONLタイムラインを複数のJSONLタイムラインに分割して `output` ディレクトリに出力: @@ -466,7 +509,7 @@ takajo.exe stack-remote-logons -t ../hayabusa/timeline.jsonl HayabusaでJSONLタイムラインを作成する: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` 結果をテキストファイルに保存する: @@ -511,7 +554,7 @@ takajo.exe sysmon-process-tree -t ../hayabusa/timeline.jsonl -p "365ABB72-3D4A-5 HayabusaでJSONLタイムラインを作成する: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` ログオンタイムラインをCSVに保存する: @@ -543,7 +586,7 @@ takajo.exe timeline-logon -t ../hayabusa/timeline.jsonl -o logon-timeline.csv HayabusaでJSONLタイムラインを作成する: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` アラートレベルが`high`以上のプロセスを検索し、結果を標準出力に表示: diff --git a/README.md b/README.md index a9370ad9..1f003cca 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ Takajō means ["Falconer"](https://en.wikipedia.org/wiki/Falconry) in Japanese a - [Git cloning](#git-cloning) - [Advanced: Compiling From Source (Optional)](#advanced-compiling-from-source-optional) - [Command List](#command-list) + - [Extract Commands](#extract-commands) - [List Commands](#list-commands) - [Split Commands](#split-commands) - [Stack Commands](#stack-commands) @@ -47,6 +48,9 @@ Takajō means ["Falconer"](https://en.wikipedia.org/wiki/Falconry) in Japanese a - [Timeline Commands](#timeline-commands) - [VirusTotal Commands](#virustotal-commands) - [Command Usage](#command-usage) + - [Extract Commands](#extract-commands-1) + - [`extract-scriptblocks` command](#extract-scriptblocks-command) + - [`extract-scriptblocks` command example](#extract-scriptblocks-command-example) - [List Commands](#list-commands-1) - [`list-domains` command](#list-domains-command) - [`list-domains` command examples](#list-domains-command-examples) @@ -115,11 +119,14 @@ If you have Nim installed, you can compile from source with the following comman ``` > nimble update -> nimble build -d:release --threads:on +> nimble build -d:release --threads:on ``` # Command List +## Extract Commands +* `extract-scriptblocks`: extract and reassemble PowerShell EID 4104 script block logs + ## List Commands * `list-domains`: create a list of unique domains to be used with `vt-domain-lookup` * `list-hashes`: create a list of process hashes to be used with `vt-hash-lookup` @@ -148,6 +155,42 @@ If you have Nim installed, you can compile from source with the following comman # Command Usage +## Extract Commands + +### `extract-scriptblocks` command + +Extracts and reassemles PowerShell EID 4104 script block logs. + +> Note: The PowerShell scripts are best opened as `.ps1` files with code syntax highlighting but we use the `.txt` extension in order to prevent any accidental running of malicious code. + +* Input: `JSONL` +* Profile: Any +* Output: `PowerShell Scripts` + +Required options: + +- `-t, --timeline `: Hayabusa JSONL timeline + +Options: + + - `-l, --level`: specify the minimum alert level (default: `low`) + - `-o, --output`: output directory (default: `scriptblock-logs`) + - `-q, --quiet`: do not display the launch banner (default: `false`) + +#### `extract-scriptblocks` command example + +Prepare the JSONL timeline with Hayabusa: + +``` +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w +``` + +Extract PowerShell EID 4104 script block logs to the `scriptblock-logs` directory: + +``` +takajo.exe extract-scriptblocks -t ../hayabusa/timeline.jsonl +``` + ## List Commands ### `list-domains` command @@ -175,7 +218,7 @@ Options: Prepare the JSONL timeline with Hayabusa: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` Save the results to a text file: @@ -213,7 +256,7 @@ Options: Prepare JSONL timeline with Hayabusa: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` Save the results to a different text file for each hash type: @@ -250,7 +293,7 @@ Options: Prepare the JSONL timeline with Hayabusa: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` Save the results to a text file: @@ -298,7 +341,7 @@ Options: Prepare the CSV timeline with Hayabusa: ``` -hayabusa.exe -d -p verbose -o timeline.csv +hayabusa.exe -d -p verbose -o timeline.csv -w ``` Output the results to screen: @@ -341,7 +384,7 @@ Options: Prepare the CSV timeline with Hayabusa: ``` -hayabusa.exe csv-timeline -d -p verbose -o timeline.csv +hayabusa.exe csv-timeline -d -p verbose -o timeline.csv -w ``` Output the results to screen: @@ -381,7 +424,7 @@ Options: Prepare the CSV timeline with Hayabusa: ``` -hayabusa.exe csv-timeline -d -o timeline.csv +hayabusa.exe csv-timeline -d -o timeline.csv -w ``` Split the single CSV timeline into multiple CSV timelines in the default `output` directory: @@ -418,7 +461,7 @@ Options: Prepare the JSONL timeline with Hayabusa: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` Split the single JSONL timeline into multiple JSONL timelines in the default `output` directory: @@ -493,7 +536,7 @@ Options: Prepare JSONL timeline with Hayabusa: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` Save the results to a text file: @@ -538,7 +581,7 @@ Options: Prepare JSONL timeline with Hayabusa: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` Save logon timeline to a CSV file: @@ -570,7 +613,7 @@ Options: Prepare JSONL timeline with Hayabusa: ``` -hayabusa.exe json-timeline -d -L -o timeline.jsonl +hayabusa.exe json-timeline -d -L -o timeline.jsonl -w ``` Search for processes that had an alert level of `high` or above and output results to screen: diff --git a/src/takajo.nim b/src/takajo.nim index 1883040a..c4789533 100644 --- a/src/takajo.nim +++ b/src/takajo.nim @@ -35,7 +35,7 @@ include takajopkg/vtIpLookup include takajopkg/vtHashLookup when isMainModule: - clCfg.version = "2.1.0-dev" + clCfg.version = "2.1.0" const examples = "Examples:\p" const example_extract_scriptblocks = " extract-scriptblocks -t ../hayabusa/timeline.jsonl [--level low] -o scriptblock-logs\p" const example_list_domains = " list-domains -t ../hayabusa/timeline.jsonl -o domains.txt\p" @@ -53,7 +53,7 @@ when isMainModule: const example_vt_hash_lookup = " vt-hash-lookup -a --hashList case-1-MD5-hashes.txt -r 1000 -o results.csv --jsonOutput responses.json\p" const example_vt_ip_lookup = " vt-ip-lookup -a --ipList ipAddresses.txt -r 1000 -o results.csv --jsonOutput responses.json\p" - clCfg.useMulti = "Version: 2.1.0-dev\pUsage: takajo.exe \p\pCommands:\p$subcmds\pCommand help: $command help \p\p" & + clCfg.useMulti = "Version: 2.1.0 Halloween Release\pUsage: takajo.exe \p\pCommands:\p$subcmds\pCommand help: $command help \p\p" & examples & example_extract_scriptblocks & example_list_domains & example_list_hashes & example_list_ip_addresses & example_list_undetected_evtx & example_list_unused_rules & example_split_csv_timeline & example_split_json_timeline & example_stack_logons & example_sysmon_process_tree & example_timeline_logon & example_timeline_suspicious_processes &