
脅威ハンティングセッションのためのキーワードとアーティファクトの素晴らしいリスト
🎯 ThreatHuntingセッションのためのキーワードリスト


Threat huntingは、組織のネットワークまたはシステム内で、自動化されたセキュリティ対策を迂回した可能性のある悪意のある活動を検出するための、プロアクティブかつ反復的なアプローチです。セキュリティアラートによってトリガーされるリアクティブな調査とは異なり、Threat huntingは脅威インテリジェンス(TI)に基づくチェックと、体系的かつ機会的な分析から導き出された仮説によって推進されます。これらの仮説 💡 は、ハンターが未知の脅威、潜在的な脅威、またはセキュリティ検出を回避した可能性のある既知の脅威に加えて、自動化システムが見逃したり除外したりする可能性のある脆弱性や侵害指標(IoC)を発見するのに役立ちます。このプロセスはまた、アラート/ダッシュボードの前兆を特定し、SOC/トリアージワークフローを改善することに焦点を当て、シャドウ資産インベントリ管理にも貢献し、さらなる調査を必要とする低/中忠実度のイベントをエスカレーションします。主な目的は、脅威アクターが使用する戦術、技術、手順(TTP)を特定し、組織が潜在的な攻撃を先制的に検出して軽減する能力を強化することです。

SOC内で高品質な検出ルールを維持するために、部分的に自動化されたThreat Huntingセッションを組織化するための私のプロセス提案です。

SOCチームは、検出成熟度ピラミッドのすべてのレベルにわたって高忠実度の検出を展開し、誤検知を最小限に抑えながら既知の脅威をターゲットにすることに注力しています。Threat Huntingはこれを補完し、未知の脅威、高度なTTP、高い誤検知率が発生しやすい異常に対処し、ギャップを埋めて標準的なSOC機能を超えた検出カバレッジを強化します。


理想的には、各Threat Huntingセッションには明確な目的が必要です。このフローチャートは、準備と調査から実践可能な推奨事項まで、プロセスを導く構造化されたアプローチを提供します。
🎯 ThreatHuntingセッションのためのキーワードリスト
ThreatHunting-Keywordsリストは、脅威アクター(またはレッドチーマー 😆)がログ内で有名な悪用ツールのデフォルト設定を使用していることを特定するのに役立つため、SIEMでの静的解析においてThreat Hunter、SOC、CERTチームにとって貴重です。 このリストはIOCフィードとは異なり、永続的な関連性を持ちます。ここにあるキーワードには「有効期限」がなく、追加から数年後でも脅威を検出でき、ワイルドカードと大文字小文字を区別しないマッチングを受け入れ、デフォルトのキーワードにのみ焦点を当てた柔軟性があります。
主にThreat Hunting用に設計されたこのリストは、複雑なシナリオでも役立ちます。 管理していないSIEMにアクセスでき、データがパースされていない場合でも、適切に管理されたSIEMを使用するSOCチームの一員である場合でも、ここに記載された例は何もパースする必要なく悪意のある活動の検出プロセスを迅速化できます。ログがすでにパースされている場合は、このリストを使用してデータ内のフィールドとマッチングでき、選択したキーワードタイプのカテゴリに基づいて検出ルールに変換できる可能性があります(誤検知率が十分に低い場合)。
⚠️ すべてをこのリストに追加できるわけではありません。ここでは複雑な動作検出は行わず、デフォルト設定を検出することを目的とした、フィールドまたはrawログでの単純なキーワード検出のみを行います
⚠️ リスト内の多くのツールには専用の検出ルールがあり、イベントをしきい値や固有のプロセス関係と相関させています...ここではツールの可能な検出をすべて網羅するわけではなく、キーワード検出のみを扱います
セキュリティオペレーションセンター(SOC)の一員であり、フィールドやイベントの相関なしに単純なキーワード検出のみに依存する何百もの検出ルールを管理している場合は、アプローチの再考を検討してください。私の意見では、これらは個別の検出ルールを構成すべきではありません。代わりに、このような統合リストの方が適している可能性があります。ただし、Splunkのようなプラットフォームを使用していない場合、実装はより困難になるかもしれません。
このアプローチは、単純なフィールドキーワード検出を1か所で整理して管理しやすく保ちながら、高品質で目的のあるルールの作成を促進します。最終結果は?それらすべてをカバーする1つの包括的な検出ルールです。これによりプロセスが合理化され、検出機能が最適化されます。
インシデントレスポンダーは、調査中にrawログやファイルでこのリストを使用して、既知の悪用ツールを迅速に特定できます。Yaraルール、powershellスクリプト、またはSplunk4DFIRでログをSplunkにすばやく取り込むことによって。
単純なキーワード検出による検出を回避するには、操作中に使用しているツールに関連付けられる可能性のあるすべてのカスタム文字列、クラス名や関数名、変数名、引数名、実行可能ファイル名、デフォルトのユーザーエージェント、証明書、その他の文字列を再コンパイルしてリネームすることが重要です。通常のトラフィックに溶け込むために、すべてに最も一般的な名前を使用してください。こちらにあるスクリプトは、これらの一部を特定するのに役立ちます。
ただし、公開の「レッドチームツール」を開発している場合は、明確な名前を使用してブルーチームを支援することを検討してください。エキゾチックなポート、カスタム証明書、独自のユーザーエージェント、一般的ではない特定の関数名と引数を備えたデフォルト設定を使用してください。これにより、単純なキーワード検出に使用できる明確なシグネチャの作成が支援され、ブルーチームが少なくともスクリプトキディを簡単に検出できるようになります。
ヘッダー: keyword,metadata_keyword_type,metadata_tool,metadata_description,metadata_tool_techniques,metadata_tool_tactics,metadata_malwares_name,metadata_groups_name,metadata_category,metadata_link,metadata_enable_endpoint_detection,metadata_enable_proxy_detection,metadata_tags,metadata_comment,metadata_severity_score,metadata_popularity_score,metadata_github_stars,metadata_github_forks,metadata_github_created_at,metadata_github_updated_at
keyword:この列のエントリは、Threat Huntingに使用される大文字小文字を区別しないキーワードを表します。これらのキーワードは柔軟で、必要に応じてワイルドカードを使用して検索パラメータを拡大または絞り込むことができます。
metadata_keyword_regex:この列のエントリは、キーワードの正規表現パターン検出を表します。これらのパターンは精密な検出機能を提供するために洗練されており、YARA、ripgrep、または類似の検出ツールでの使用に適しています。
metadata_keyword_type:キーワードのタイプ。現在、3つのタイプがあります:
offensive tool keyword:これらのキーワードは攻撃的なツールに関連するか、悪意のある意図の高い信頼性を示します。これらの用語は潜在的な脅威の検出において関連性と信頼性を持つことが重要です(誤検知率が低い)リスト threathunting-keywords.csv をSplunkにアップロードします
ルックアップ threathunting-keywords.csv 用に threathunting-keywords という名前のルックアップ定義を作成します
WILDCARD(keyword) を追加し、Case sensitive match がチェックされていないことを確認します
transforms.conf``` [threathunting-keywords] batch_index_query = 0 case_sensitive_match = 0 filename = threathunting-keywords.csv match_type = WILDCARD(keyword)
- これで、ルックアップ定義を使ってハンティングできます 🏹
- :warning: 以下のセクションの検索が機能していないように見える場合は、特にデフォルト設定でsplunkを実行している場合、splunkのリソース制限設定が原因である可能性があります。手始めに、`[lookup]` スタンザの `max_memtable_bytes` 値を増やすことを検討してみてください。
## `threathunting-keywords` を使用した使用例:

### 生ログ内のすべてのキーワードをハンティングする 😱```
`myendpointslogs`
| lookup threathunting-keywords keyword as _raw OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_endpoint_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
Send the job to background and keep the job ID.

myendpointslogs は、すべてのエンドポイントログを検索するマクロです。Windowsログ、EDRテレメトリ、Sysmon、auditd、bastionセッション、PowerShell実行ログ、またはプロセスアクティビティやファイルアクティビティを監視するその他のログが対象となります。(マクロを使用しない場合は、マクロをインデックス、タグ、またはデータモデルに置き換えることができます)
|lookup の前に TERM() コマンドで特定の検索を絞り込んでください| lookup これは非常に重要です。このような大きなルックアップでは、必ず |inputlookup ではなく |lookup を使用してください。|lookup はバンドルが複製されたときにインデクサーにプッシュされたルックアップを使用しますが、|inputlookup は検索のたびにルックアップの全コンテンツを含む検索をインデクサーに送信します。|lookup を使用することで、ここでは大幅なパフォーマンス向上が得られます(この検索は大規模な環境では何時間も実行されるため、検索を最適化したほうがよいでしょう)。... keyword as _raw OUTPUT keyword as keyword_detection ここでは、ルックアップ内の keyword フィールドと _raw という名前のフィールドをマッチングさせます。Splunk では はパースされていない生のログです(今回のユースケース)。キーワードが一致すると、 フィールドに、この()フィールドで一致したルックアップ内のキーワードが表示されます結果のフィルタリング``` | loadjob 1684146257.1495958 | search NOT (keyword_detection IN ("fixme","fixme","fixme")) NOT (metadata_keyword_type IN ("fixme","fixme")) NOT (raw IN ("fixme","fixme","fixme"))
必須キーワード、生テキスト、またはキーワードタイプを除外する。
この環境ではこの種のツールの検索結果が多すぎるため、`greyware tool keyword` タイプ(攻撃者に悪用される合法的なツールのキーワード)を除外すると決めた場合、2つの選択肢があります:
- 最初の検索の開始時にフィルタリングする```
`myendpointslogs`
| lookup threathunting-keywords keyword as _raw OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" metadata_keyword_type="offensive tool keyword" metadata_enable_endpoint_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
悪意のある攻撃者によって確実に使用される攻撃ツールのみに焦点を当てるために、metadata_keyword_type="offensive tool keyword" を追加しました。
つまり、これがエンドポイントログ内の生ログを検索するという私たちのユースケースでした。ネットワークログ(クエリまたはURLを記録できるもの)のキーワードを検索したい場合は、単にそれを次のように変更します:```
`mynetworklogs`
| lookup threathunting-keywords keyword as _raw OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_proxy_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
最初の検索と同じですが、データソースを mynetworklogs に変更し、networklogs の関連キーワードに一致するよう metadata_enable_proxy_detection=1 を追加しました(この場合はプロキシログとDNSログがあると良いでしょう)
mynetworklogs url=*
| lookup threathunting-keywords keyword as url OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_proxy_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(url) as url by src_ip metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
#### クエリフィールドのみでマッチ:```
`mynetworklogs` query=*
| lookup threathunting-keywords keyword as query OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_proxy_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(query) as query by src_ip metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
myendpointslogs
| eval myfields=mvappend(service, process, process_command, parent_process, parent_process_command, grand_parent_process, grand_parent_process_command, file_path, file_name)
| lookup threathunting-keywords keyword as myfields OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_endpoint_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(process) values(service) values(process_command) values(file_name) values(file_path) values(parent_process) values(parent_process_command) values(grand_parent_process) values(grand_parent_process_command) by metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
#### Speed:
速度が気になる場合や、これをスケジュールされた検出ルールとして実装する予定がある場合は、使用したい `metadata_keyword_type` または `metadata_tool` 列を選択して、ルックアップを異なるルックアップに分割することを検討するとよいでしょう。
`|lookup` の後に search コマンドを使ってフィルタリングしても、検索プロセスは高速化されないことに注意してください。ルックアップを分割せずに特定の部分に集中したい場合は、`|inputlookup` コマンドを where 句と共に使用する必要があります。この方法はより多くの CPU リソースを消費する可能性がありますが、一般的にはより高速に実行されます。詳細については、Splunk の inputlookup に関するドキュメントを参照してください: https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Inputlookup
#### With ELK:
Elastic Stack を使用している場合、リストには多くの制限があります(特殊文字やスペースなどは使用できません)。オプションは3つあります:
- 同じリポジトリ内にある別のリストを使用する https://github.com/mthcht/ThreatHunting-Keywords/tree/main/elk (threathunting-keywords.csv の直接の抽出ではなく、ELK 用に変更されており、更新されていません)
- このプロジェクト https://github.com/mthcht/ThreatHunting-Keywords-sigma-rules から直接抽出した Sigma "hunting" ルールを、変換に pysigma を使用して使用する
- ワイルドカードクエリを備えた IOC リストとして、私のリストの一部を使用する https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl-wildcard-query.html#wildcard-top-level-params
### Dashboard Example

### Splunk4DFIR
プロジェクトの CSV ファイルを Splunk で使用して DFIR アーティファクトとログを調査する別の例: https://github.com/mf1d3l/Splunk4DFIR

### Other awesome lists for detection
関連するアーティファクトを個別のリストにまとめています。これらのリストはより精密で、検出ルールに使用できます。この [github リポジトリ](https://github.com/mthcht/awesome-lists/tree/main/Lists) で利用できます。
以下があります:
Threat Hunting セッションを計画するためのインテリジェンス収集シート

- 📋 リスト: https://github.com/mthcht/awesome-lists/tree/main/Lists
- 🕵️♂️ ThreatHunting ガイド: https://mthcht.medium.com/list/threat-hunting-708624e9266f
- 🚰 疑わしい名前付きパイプ: [suspicious_named_pipe_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_named_pipe_list.csv)
- 🌐 疑わしい TLD(自動更新): [[suspicious_TLDs]](https://github.com/mthcht/awesome-lists/tree/main/Lists/TLDs)
- 🌐 疑わしい ASN(自動更新): [[suspicious ASNs]](https://github.com/mthcht/awesome-lists/tree/main/Lists/ASNs)
- 🔧 疑わしい Windows サービス: [suspicious_windows_services_names_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_services_names_list.csv)
- ⏲️ 疑わしい Windows タスク: [suspicious_windows_tasks_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_tasks_list.csv)
- 🚪 疑わしい宛先ポート: [suspicious_ports_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_ports_list.csv)
- 🛡️ 疑わしいファイアウォールルール: [suspicious_windows_firewall_rules_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_firewall_rules_list.csv)
- 🆔 疑わしいユーザーエージェント: [suspicious_http_user_agents_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_http_user_agents_list.csv)
- 📇 疑わしい USB ID: [suspicious_usb_ids_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_usb_ids_list.csv)
- 🔢 疑わしい MAC アドレス: [suspicious_mac_address_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_mac_address_list.csv)
- 📛 疑わしいホスト名: [suspicious_hostnames_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_hostnames_list.csv)
- 🧮 メタデータ実行ファイル: [executables_metadata_informations_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Windows%20Metadata/executables_metadata_informations_list.csv)
- 🕸️ DNS over HTTPS サーバーリスト: [dns_over_https_servers_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/dns_over_https_servers_list.csv)
- 📚 Hijacklibs(自動更新): [hijacklibs_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Hijacklibs/hijacklibs_list.csv)
- 🌐 TOR ノードリスト(自動更新): https://github.com/mthcht/awesome-lists/tree/main/Lists/TOR
- 🛠️ LOLDriver リスト(自動更新): [loldrivers_only_hashes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Drivers/loldrivers_only_hashes_list.csv)
- 🛠️ 悪意のあるブートローダーリスト(自動更新): [malicious_bootloaders_only_hashes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Drivers/malicious_bootloaders_only_hashes_list.csv)
- 📜 悪意のある SSL 証明書リスト(自動更新): [ssl_certificates_malicious_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/SSL%20CERTS/ssl_certificates_malicious_list.csv)
- 🖥️ RMM の検出: https://github.com/mthcht/awesome-lists/tree/main/Lists/RMM
- 👤🔑 AD/EntraID/AWS の重要なロールとグループ: [[permissions]](https://github.com/mthcht/awesome-lists/tree/main/Lists/permissions)
- 💻🔒 ランサムウェアの既知のファイル拡張子: [ransomware_extensions_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/ransomware_extensions_list.csv)
- 💻🔒 ランサムウェアの既知のファイル名(ランサムノート): [ransomware_notes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/ransomware_notes_list.csv)
- 📝 Windows ASR ルール: [windows_asr_rules.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/windows_asr_rules.csv)
- 🌐 DNSTWIST リスト(自動更新): [DNSTWIST Default Domains + script](https://github.com/mthcht/awesome-lists/tree/main/Lists/DNSTWIST)
- 🌍 VPN IP アドレスリスト(自動更新):
- 🛡️ NordVPN: [nordvpn_ips_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/VPN/NordVPN/nordvpn_ips_list.csv)
- 🛡️ ProtonVPN: [protonvpn_ip_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/VPN/ProtonVPN/protonvpn_ip_list.csv)
- 🏢 企業 IP レンジリスト(自動更新): [Default Lists + script](https://github.com/mthcht/awesome-lists/tree/main/Lists/Ranges_IP_Address_Company_List/bgp.he.net)
- 🔗 その他の相関リスト: https://github.com/mthcht/awesome-lists/tree/main/Lists/Others
- 📋 完成させる必要があるリスト: https://github.com/mthcht/awesome-lists/tree/main/todo
これらの [ガイド](https://github.com/mthcht/awesome-lists/tree/main/Lists#how-to-use-the-lists) を参照して、リストの一部を使用してください:
- [Windows サービスの検索](https://detect.fyi/threat-hunting-suspicious-windows-service-names-2f0dceea204c)
- [ユーザーエージェントの検索](https://mthcht.medium.com/threat-hunting-suspicious-user-agents-3dd764470bd0)
- [DNS over HTTPS の検索](https://mthcht.medium.com/detecting-dns-over-https-30fddb55ac78)
- [疑わしい TLD の検索](https://mthcht.medium.com/threat-hunting-suspicious-tlds-a742c2adbf58)
- [HijackLibs の検索](https://mthcht.medium.com/detect-dll-hijacking-techniques-from-hijacklibs-with-splunk-c760d2e0656f)
- [フィッシングと DNSTWIST の検索](https://detect.fyi/detecting-phishing-attempts-with-dnstwist-37c426b3bbb8)
- [ブラウザ拡張機能の検索](https://mthcht.medium.com/detecting-browser-extensions-installations-e0ac2b45c46b)
- [C2 の見え透いた隠蔽(hiding in plain sight)](https://mthcht.medium.com/c2-hiding-in-plain-sight-7a83963b9344)
- [HTML Smuggling のアーティファクト](https://mthcht.medium.com/detecting-html-smuggling-phishing-attempts-15af824e60e4)
- [PSEXEC と類似ツールの検索](https://mthcht.medium.com/detecting-psexec-and-similar-tools-c812bf3dca6c)
- [タイムスリッピングの検出](https://mthcht.medium.com/event-log-manipulations-1-time-slipping-55bf95631c40)
- [疑わしい名前付きパイプ](https://medium.com/detect-fyi/threat-hunting-suspicious-named-pipes-a4206e8a4bc8)
... 詳細は [こちら](https://github.com/mthcht/awesome-lists/tree/main/Lists#how-to-use-the-lists)
## ファイル内のキーワードを探す DFIR ハンティング(SIEM なし)
さまざまなツールを徹底的に調査した結果、[ripgrep](https://github.com/BurntSushi/ripgrep) は、大規模なログファイルの各行、あるいは複数のファイルを同時に処理しながら、膨大な正規表現パターンのリストを高速にマッチングするという点で、競合するツールを大幅に上回ることがわかりました。これは、大量のデータを処理するための最も効率的なソリューションであり、比類のない速度と柔軟性を提供します。
### **Ripgrep** と 'only_keywords_regex.txt' リストでログファイル内の悪意を探す
#### `rg.exe -f .\only_keywords_regex.txt .\EvtxECmd_Output.csv --multiline --ignore-case`
- .\only_keywords_regex.txt は、脅威ハンティングのキーワードのソースファイルとして機能し、正確にマッチングするための正規表現パターンに変換されます。これらのパターンは、threathunting-keywords.csv ファイルに由来し、正規表現操作との最適な互換性のために変換プロセスを経ています。
- .\EvtxECmd_Output.csv は、検索が実行されるターゲットファイルを表します。このコンテキストでは、evtx ログをエクスポートして生成された Windows イベントログの .csv 形式です。ただし、ripgrep の柔軟性により、詳細なパターン検索操作のために、これを任意のファイルに置き換えることができます。
- --multiline オプションにより、ripgrep は複数行にまたがるパターンを効果的に処理およびマッチングできるようになり、検索の範囲が大幅に広がります。
一致した行は、行番号付きで次のように表示されます(ただし、一致したキーワードは含まれません)


#### 非常に大きなファイル向けのより良いオプション(Windows の場合):
[DFIR_hunt_in_file.ps1](https://github.com/mthcht/ThreatHunting-Keywords/blob/main/DFIR_hunt_in_file.ps1)
`powershell -ep Bypass -File .\DFIR_hunt_in_file.ps1 -patternFile "only_keywords_regex.txt" -targetFile "C:\Users\mthcht\collection\20230406154410_EvtxECmd_Output.csv" -rgPath "C:\Users\mthcht\Downloads\ripgrep-13.0.0-x86_64-pc-windows-msvc\ripgrep-13.0.0-x86_64-pc-windows-msvc\rg.exe"`
- `-targetFile`: 検索するファイルを指定します(例では DFIR-ORC 抽出ログ)。
- `-patternFile`: 正規表現パターン `only_keywords_regex.txt` を含むファイル。
- `-rgPath`: ripgrep 実行可能ファイルのパス。
PowerShell スクリプトの内容(リポジトリに含まれています):```powershell
param (
[Parameter(Mandatory=$true)]
[string]$patternFile,
[Parameter(Mandatory=$true)]
[string]$targetFile,
[Parameter(Mandatory=$true)]
[string]$rgPath
)
Start-Transcript -Path "$PSScriptRoot\result_search.log" -Append -Force -Verbose
$totalLines = (Get-Content $patternFile | Measure-Object -Line).Lines
$currentLine = 0
Get-Content $patternFile | ForEach-Object {
$currentLine++
Write-Host "Searching for pattern $currentLine of $totalLines : $_"
& $rgPath --multiline --ignore-case $_ $targetFile | Write-Output
}
Stop-Transcript -Verbose
検索結果は、スクリプトと同じディレクトリ内の result_search.log に出力されます。

todo
powershell でははるかに遅くなりますが、それでもこの方法で実行したい場合は、以下のスクリプトを使用できます。マッチした行番号と対応するキーワードが表示されます:
powershell.exe -ep Bypass -File .\hunt_keywords_windows.ps1 -k .\only_keywords.txt -f .\EvtxECmd_Output.csv
[Parameter(Mandatory=$true)]
[string]$kw
)
$Keywords = Get-Content $kw $result = @()
foreach ($Keyword in $Keywords) { $SearchTerm = $Keyword.Replace("", ".") $SearchTerm = [Regex]::Escape($SearchTerm).Replace(".*", ".*")
$reader = New-Object System.IO.StreamReader($file)
$lineNumber = 0
while (($line = $reader.ReadLine()) -ne $null) {
$lineNumber++
if ($line -match $SearchTerm) {
$result += New-Object PSObject -Property @{
'Keyword' = $Keyword
'LineNumber' = $lineNumber
'Line' = $line
}
}
}
$reader.Close()
}
$result | Out-GridView Read-Host -Prompt "Press Enter to exit"
</details>
### YARA ルール

このプロジェクトのすべての検出パターンは、[ThreatHunting-Keywords-yara-rules](https://github.com/mthcht/ThreatHunting-Keywords-yara-rules) の YARA ルールに自動的にエクスポートされます。
YARA ルールを使用したハンティングの例:




## キーワード検索用クイックデータテーブル
https://mthcht.github.io/ThreatHunting-Keywords/

## 誤検知
あなたの誤検知を、期待される誤検知の [リスト](https://github.com/mthcht/ThreatHunting-Keywords/blob/main/_false_positives/false_positives_offensive_keywords.md) に追加して貢献してください。
## SIGMA ルール
[SIGMA ルール](https://github.com/mthcht/ThreatHunting-Keywords-sigma-rules) に翻訳されたルックアップをチェックしてください。通常、同時に更新しています :)

## MITRE ATT&CK テクニックマッピング
splunk アドオンを使用 https://splunkbase.splunk.com/app/5742

2242 個のツールのカバレッジ(2024/08/30 更新):

splunk 検索:
<details>```
| inputlookup threathunting-keywords.csv
| stats count by metadata_tool metadata_tool_techniques
| makemv delim=" - " metadata_tool_techniques
| mvexpand metadata_tool_techniques
| stats count by metadata_tool_techniques
Splunkダッシュボード(これは一例にすぎません。ファイル内の利用可能なフィールドを使用して、多種多様なフィルターを適用できます):
splunk xmlダッシュボードの例:



コントリビューション、問題報告、機能リクエストを歓迎します!
``
ツールの名前を提供してください。
``
ツールの公式ウェブサイトまたはソースコードリポジトリ(GitHub、GitLabなど)へのリンクを提供してください。ドキュメントが利用可能な場合は、それも含めてください。
``
ツールの目的、機能、注目すべき特徴を説明してください。不明な場合は空白のままにしてください。私がツールを詳しく確認します。
``
このツールの悪意のある行為者による既知または潜在的な悪用についての情報がある場合は、ここに共有してください。
ツールに最も適したカテゴリを選択してください:
ツールがリストに追加する価値があるかどうかは私が判断します。コミュニティで広く使用され認識されているツールは、無名なものや新しいものよりも含まれる可能性が高くなります。
greyware tool keyword:このカテゴリのキーワードは、悪意のあるアクターによって悪用される「正当な」ツールに対応します。これらのツールには正当な用途もあるため、誤検知の可能性は本質的に高くなります。すべての検出が悪意のある活動を示すとは限らないことを理解して結果を解釈することが重要ですsignature keyword:これらのキーワードはツールと直接関連しない場合がありますが、セキュリティ製品のシグネチャ名、特定の文字列、または脅威検出において重要な単語を含む場合があります。metadata_tool:検出したいツールの名前
metadata_description:検出したいツールの説明
metadata_tool_techniques:検出したいツールに関連するMITRE手法
metadata_tool_tactics:検出したいツールに関連するMITRE戦術
metadata_malwares_name:問題のツールを利用するマルウェア亜種の名前
metadata_groups_name:ツールに関連する脅威アクターグループの名前
metadata_category:ツールのグローバルカテゴリ名。これは後で変更される可能性があり、提案は歓迎します。
metadata_link:ツールへのリンク(ソースコード、記事、サンプル、ブログなど)
metadata_enable_endpoint_detection:キーワードがエンドポイントログ全体の検索で効果的に使用できるかどうかを示すフィールド。これには、Windowsイベントログ、EDR、PowerShellログ、auditd、bastionセッション、Sysmon、またはプロセスとファイルアクティビティフィールドを含む任意のデータソースが含まれますが、これらに限定されません。
metadata_enable_proxy_detection:ネットワークログ(プロキシ、DNSログ、または内部ネットワーク発信のクエリとURLを含む任意のデータ)内の検索に対するキーワードの適用可能性を示すフィールド
metadata_popularity_score:1から10のスコア(低から高の人気度)
metadata_severity_score:1から10のスコア(低から高の重大度)
metadata_tags:特定のアーティファクトを識別するためのタグ。1つのキーワードに複数のタグを関連付けることができます。特定のアーティファクトの一部がより多くの検出コンテキストなしではリストに追加できない場合、それらは私の検出用のその他のawesomeリストに追加されます。
metadata_comment:このフィールドには、キーワードに追加された有用なコメントが含まれる場合があります。
metadata_github_stars:githubプロジェクトのスター数(ツールがgithub上にある場合。他の場所にある場合は値はN/A)。これは人気度スコアの計算に使用されます
metadata_github_forks:githubプロジェクトのフォーク数(ツールがgithub上にある場合。他の場所にある場合は値はN/A)。最も使用されているツールのダッシュボード統計に使用できます
metadata_github_created_at:githubプロジェクトの作成日(ツールがgithub上にある場合。他の場所にある場合は値はN/A)。ダッシュボード統計に使用できます
metadata_github_updated_at:githubプロジェクトの最終更新日(ツールがgithub上にある場合。他の場所にある場合は値はN/A)。重要な攻撃的ツールの更新を追跡し、キーワード検出を調整するために使用できます
_rawkeyword_detection_raw| search metadata_description!="" AND metadata_enable_endpoint_detection=1 ここではエンドポイントログのみに焦点を当てているため、metadata_enable_endpoint_detection=1 を追加してエンドポイントログに関連するキーワードのみに一致させ、metadata_description!="" でマッチしたキーワードのみを対象にします| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype ここでは例として、ルックアップの全フィールドを使わずに簡易的なフィルタを作成しました(除外の可能性を増やしたい場合はフィールドを追加することもできます)。これにより、どのキーワードが多くマッチしているかを簡単に把握でき、特定のカテゴリやツールで誤検知が多すぎる場合は簡単に除外できます。|loadjob myjobid を使用すると、すべてのログを再度検索することなく、関連するログを使って出力を操作できます。そして、このSplunkビジュアライゼーションを使用してください:https://splunkbase.splunk.com/app/5742
