Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
iocextract — 無害化された侵害指標(IOC)抽出ツール。 | Kitploit
ツール/GitHubGitHub/pedramamini/iocextract
侵害指標 (IOC) 管理OSINT (オープンソースインテリジェンス)脅威フィードとアグリゲーターフォレンジック情報収集マルウェア分析デジタルフォレンジック脅威インテリジェンス
GitHubpedramamini/iocextract

iocextract

無害化された侵害指標(IOC)抽出ツール。

リポジトリを見る
584921年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

iocextract

Developed by InQuest Build Status Documentation Status PyPI Version

侵害指標(IOC)抽出ツール。よく取り込まれるアーティファクトに対応しています。

目次

  • 概要
    • 問題点
    • 解決策
    • 使用例
  • インストール
  • 使い方
    • ライブラリ
    • コマンドラインインターフェース
  • 参考情報
    • FAQ
    • 詳細
    • カスタム正規表現
    • 関連プロジェクト
    • コントリビューション

概要

iocextract パッケージは、テキストコーパスからURL、IPアドレス、MD5/SHAハッシュ、メールアドレス、YARAルールを抽出するためのライブラリおよびコマンドラインインターフェース(CLI)です。エンコードされた「難読化(defanged)」されたIOCを抽出し、必要に応じてデコードまたは復元(refang)できます。

問題点

マルウェアアナリストやエンドポイントソフトウェアが、誤って悪意のあるコンテンツにさらされるのを防ぐために、URLやIPアドレスなどのIOCを「難読化(defang)」するのは一般的な手法です。これらのIOCを抽出・集約できることはアナリストにとって多くの場合価値があります。残念ながら、既存の「IOC抽出」ツールは標準の正規表現では捕捉できないため、それらを見逃してしまうことがよくあります。

例えば、ピリオドを括弧で囲む単純な難読化手法:

root@kitploit:~
127[.]0[.]0[.]1

単純なIPアドレス正規表現を使用する既存のツールは、このIOCを完全に無視します。

解決策

特別に作成された正規表現とカスタム後処理を組み合わせることで、「難読化(defanged)」されたIOCの検出と難読化解除の両方が可能になります。これにより、手動でIOCを検索して機械可読形式に変換する手間が省け、アナリストの時間と労力を節約できます。

使用例

多くのTwitterユーザーは、難読化されたURLを含むC2やその他の貴重なIOC情報を投稿しています。例えば、@InQuestのこのツイート:

root@kitploit:~
Recommended reading and great work from @unit42_intel:
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/ ...
InQuest customers have had detection for threats delivered from hotfixmsupload[.]com
since 6/3/2017 and cdnverify[.]net since 2/1/18.

これを抽出器にかけると、簡単にURLを取り出せます:

root@kitploit:~
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/
hotfixmsupload[.]com
cdnverify[.]net

抽出時に refang=True を指定すると難読化が除去されますが、これらは実際のIOCなので、ドキュメントでは難読化したままにしておきます。

インストール

regex 依存関係をインストールするために、Python開発用ヘッダーが必要になる場合があります。Ubuntu/Debian系システムでは、次を試してください:

root@kitploit:~
sudo apt-get install python-dev

その後、pipから iocextract をインストールします:

root@kitploit:~
pip install iocextract

Windowsでインストールに問題がある場合は、PyPIから適切なwheel をダウンロードして pip で直接 regex をインストールしてみてください:

root@kitploit:~
pip install regex-2018.06.21-cp27-none-win_amd64.whl

使い方

ライブラリ

難読化されたURLを抽出してみましょう:

root@kitploit:~
import iocextract

content = \
"""
I really love example[.]com!
All the bots are on hxxp://example.com/bad/url these days.
C2: tcp://example[.]com:8989/bad
"""

for url in iocextract.extract_urls(content):
    print(url)

    # 出力

    # hxxp://example.com/bad/url
    # tcp://example[.]com:8989/bad
    # example[.]com
    # tcp://example[.]com:8989/bad

注意:一部のURLは複数の正規表現にマッチするため、2回表示されることがあります。

必要に応じて、IOCから一般的な難読化手法を除去(refang)することもできます:

root@kitploit:~
import iocextract

for url in iocextract.extract_urls(content, refang=True):
    print(url)

    # 出力

    # http://example.com/bad/url
    # http://example.com:8989/bad
    # http://example.com
    # http://example.com:8989/bad

抽出時にIOCをまったく難読化したくない場合は、これを無効にすることもできます:

root@kitploit:~
import iocextract

content = \
"""
http://example.com/bad/url
http://example.com:8989/bad
http://example.com
http://example.com:8989/bad
"""

for url in iocextract.extract_urls(content, defang=False):
    print(url)

    # 出力

    # http://example.com/bad/url
    # http://example.com:8989/bad
    # http://example.com
    # http://example.com:8989/bad

このライブラリの extract_* 関数はすべて、リストではなくイテレータを返します。この動作の利点は、iocextract が非常に大きな入力でも非常に低いオーバーヘッドで処理できることです。ただし、何らかの理由でIOCを複数回ループする必要がある場合は、結果をリストとして保存する必要があります:

root@kitploit:~
import iocextract

content = \
"""
I really love example[.]com!
All the bots are on hxxp://example.com/bad/url these days.
C2: tcp://example[.]com:8989/bad
"""

print(list(iocextract.extract_urls(content)))
# ['hxxp://example.com/bad/url', 'tcp://example[.]com:8989/bad', 'example[.]com', 'tcp://example[.]com:8989/bad']

コマンドラインインターフェース

コマンドラインツールも含まれています:

root@kitploit:~
$ iocextract -h
    usage: iocextract [-h] [--input INPUT] [--output OUTPUT] [--extract-emails]
                  [--extract-ips] [--extract-ipv4s] [--extract-ipv6s]
                  [--extract-urls] [--extract-yara-rules] [--extract-hashes]
                  [--custom-regex REGEX_FILE] [--refang] [--strip-urls]
                  [--wide]

    Advanced Indicator of Compromise (IOC) extractor. If no arguments are
    specified, the default behavior is to extract all IOCs.

    optional arguments:
      -h, --help            show this help message and exit
      --input INPUT         default: stdin
      --output OUTPUT       default: stdout
      --extract-emails
      --extract-ips
      --extract-ipv4s
      --extract-ipv6s
      --extract-urls
      --extract-yara-rules
      --extract-hashes
      --custom-regex REGEX_FILE file with custom regex strings, one per line, with one capture group each
      --refang              default: no
      --strip-urls          remove possible garbage from the end of urls. default: no
      --wide                preprocess input to allow wide-encoded character matches. default: no

注意:復元(refang)が可能なのはURL、メール、IPv4アドレスのみです。

参考情報

FAQ

あなたは...

Q. ツイートやブログ記事などのプレーンテキストから、難読化されている可能性のあるIOCを抽出したい?

A. はい! これこそがiocextractが設計された目的であり、最も性能を発揮する場面です。さらに一歩進んで抽出と保存を自動化したいですか? ThreatIngestor をチェックしてください。

Q. 16進数やBase64でエンコードされたURLを抽出したい?

A. はい、ただしCLIでは最良の結果が得られない可能性があります。Pythonスクリプトを作成して、iocextract.extract_encoded_urls を直接呼び出してみてください。

注:URLの末尾に余分なゴミが付く可能性が高いです。

Q. HTML/XML/RTFから難読化されていないIOCを抽出したい?

A. 可能性はありますが、--strip-urls CLIフラグ(ライブラリでは strip=True パラメータ)を使用することを検討すべきです。それでも出力に余分なゴミが混ざる可能性があります。HTMLから抽出する場合は、Beautiful Soup のようなものを使用してテキストコンテンツをまず分離し、それをiocextractに渡すことを検討してください。この例 のように。

Q. 実行可能ファイルのようなバイナリデータや非常に大きな入力から、難読化されていないIOCを抽出したい?

A. ライブラリとして使用する場合、非常に簡素なバージョンが利用可能ですが、defang=False パラメータが必要であり、一部のIOCを見逃す可能性があります。iocextractの正規表現は、難読化されたIOCを捕捉するために柔軟性を持たせて設計されています。必要な情報を収集できない場合は、代わりに Cacador のようなものを使用することを検討してください。

詳細

このライブラリは現在、以下のIOCをサポートしています:

  • IPアドレス
    • IPv4:完全対応
    • IPv6:一部対応
  • URL
    • プロトコル指定子あり:http、https、tcp、udp、ftp、sftp、ftps
    • [.] アンカーあり(プロトコル指定子なしでも可)
    • IPv4およびIPv6(RFC2732)URL対応
    • 16進数エンコードURL(プロトコル指定子:http、https、ftp)
    • URLエンコードURL(プロトコル指定子:http、https、ftp、ftps、sftp)
    • Base64エンコードURL(プロトコル指定子:http、https、ftp)
  • メール
    • 一部対応、@ または at をアンカーに
  • YARAルール
    • imports、includes、コメント対応
  • ハッシュ
    • MD5
    • SHA1
    • SHA256
    • SHA512
  • 電話番号
  • カスタム正規表現
    • 正確に1つのキャプチャグループが必要

IPv4アドレスでは、以下の難読化手法に対応しています:

メールアドレスでは、以下の難読化手法に対応しています:

URLでは、以下の難読化手法に対応しています:

注意:上記の表は網羅的ではなく、他のURL/難読化パターンも正しく抽出される可能性があります。不足や誤動作に気づいた場合は、GitHub Issues でお知らせください。

base64正規表現は、@deadpixi の base64正規表現ツール を使用して生成されました。

カスタム正規表現

CLIを使用して、独自のカスタム正規表現でIOCを抽出したい場合は、各行に1つの正規表現文字列を記述したプレーンテキストファイルを作成し、--custom-regex フラグで指定します。各正規表現文字列に正確に1つのキャプチャグループが含まれていることを確認してください。

例:

root@kitploit:~
http://(example\.com)/
(?:https|ftp)://(example\.com)/

このカスタム正規表現ファイルは、一致するURLからドメイン example.com を抽出します。(?: ) 非キャプチャグループは一致に含まれません。

一致全体を抽出したい場合は、正規表現文字列全体を括弧で囲みます。次のように:

root@kitploit:~
(https?://.*?.com)

正規表現が無効な場合は、次のようなエラーメッセージが表示されます:

root@kitploit:~
Error in custom regex: missing ) at position 5

正規表現にキャプチャグループが含まれていない場合は、次のようなエラーメッセージが表示されます:

root@kitploit:~
Error in custom regex: no such group

カスタム正規表現を使用する場合は、常に単一のキャプチャグループを使用してください。簡単な例:

root@kitploit:~
[
    r'(my regex)',  # パターンが一致すると 'my regex' を返す
    r'my (re)gex',  # パターンが一致すると 're' を返す
]

複数のキャプチャグループを使用すると予期しない結果になる可能性があります。次の例を確認してください:

root@kitploit:~
[
    r'my regex',  # 何も返さない
    r'(my) (re)gex',  # パターンが一致すると 'my' を返す
]

なぜでしょうか?結果は常に、各正規表現の最初のグループ一致のみを返すためです。

より複雑な正規表現クエリの場合は、キャプチャグループと非キャプチャグループを次のように組み合わせることができます:

root@kitploit:~
[
    r'(?:my|your) (re)gex',  # パターンが一致すると 're' を返す
]

これで、非キャプチャグループの (?: ) 構文とキャプチャグループの ( ) 構文を比較できます。

関連プロジェクト

iocextractがユースケースに適合しない場合は、同様のプロジェクトがいくつか存在します。GitHubの defang タグと indicators-of-compromise タグ、および以下をチェックしてください:

  • Go言語の Cacador
  • JavaScriptの ioc-extractor
  • Pythonの Cyobstract

IOCの抽出、エンリッチメント、エクスポートなどを自動化したい場合は、ThreatIngestor をチェックしてください。

YARAルールを扱っている場合は、plyara に興味があるかもしれません。

コントリビューション

抽出器で処理できない難読化手法がある場合や、バグを見つけた場合は、Pull RequestやIssueをいつでも歓迎します。ライブラリはGPL-2.0 ライセンス の下でリリースされています。

iocextractを使用しているのは誰?

  • InQuest
  • PacketTotal

使用していますか? ここにあなたのサイトが表示されるのを見たいですか? お知らせください!

ツールをダウンロード
手法難読化後復元後
. -> [.]1[.]1[.]1[.]11.1.1.1
. -> (.)1(.)1(.)1(.)11.1.1.1
. -> \.1\.1\.1\.11.1.1.1
部分1[.1[.1.]11.1.1.1
任意の組み合わせ1.)1[.1.)11.1.1.1
手法難読化後復元後
. -> [.]me@example[.]com[email protected]
. -> (.)me@example(.)com[email protected]
. -> {.}me@example{.}com[email protected]
. -> _dot_me@example dot com[email protected]
@ -> [@]me[@]example.com[email protected]
@ -> (@)me(@)example.com[email protected]
@ -> {@}me{@}example.com[email protected]
@ -> _at_me at example.com[email protected]
部分me@} example[.com[email protected]
スペース追加me@example [.] com[email protected]
任意の組み合わせme @example [.)com[email protected]
手法難読化後復元後
. -> [.]example[.]com/pathhttp://example.com/path
. -> (.)example(.)com/pathhttp://example.com/path
. -> \.example\.com/pathhttp://example.com/path
部分http://example[.com/pathhttp://example.com/path
/ -> [/]http://example.com[/]pathhttp://example.com/path
Cisco ESAhttp:// example .com /pathhttp://example.com/path
:// -> __http__example.com/pathhttp://example.com/path
:// -> :\\http:\\example.com/pathhttp://example.com/path
: -> [:]http[:]//example.com/pathhttp://example.com/path
hxxphxxp://example.com/pathhttp://example.com/path
任意の組み合わせhxxp__ example( .com[/]pathhttp://example.com/path
16進数エンコード687474703a2f2f6578616d706c652e636f6d2f70617468http://example.com/path
URLエンコードhttp%3A%2F%2fexample%2Ecom%2Fpathhttp://example.com/path
Base64エンコードaHR0cDovL2V4YW1wbGUuY29tL3BhdGgKhttp://example.com/path