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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
subcrawl — Modular framework for discovering and analyzing open directories on the web. Crawls URLs, extracts content, applies YARA/ClamAV scanning, and outputs results to MISP, SQLite, or console for threat intelligence. | Kitploit
ツール/GitHubGitHub/hpthreatresearch/subcrawl
OSINT (オープンソースインテリジェンス)脆弱性分析情報収集ウェブセキュリティ脅威インテリジェンスクローラー
GitHubhpthreatresearch/subcrawl

subcrawl

Modular framework for discovering and analyzing open directories on the web. Crawls URLs, extracts content, applies YARA/ClamAV scanning, and outputs results to MISP, SQLite, or console for threat intelligence.

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

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

SubCrawl

SubCrawlは、HP Inc.のThreat Researchチームに所属するPatrick Schläpfer、Josh Stroschein、Alex Hollandによって開発されたフレームワークです。SubCrawlは、公開ディレクトリを発見、スキャン、分析するために設計されています。このフレームワークはモジュール式で、入力モジュール、処理モジュール、出力モジュール、そしてコアのクローリングエンジンの4つのコンポーネントで構成されています。主要な入力値はURLであり、フレームワークはこれを解析し、キューシステムに追加してからクロールします。URLの解析は重要な最初のステップです。このプロセスでは、送信されたURLからサブディレクトリを1つずつ削除して、残りがなくなるまで追加のURLを生成します。これにより、Webサーバーに対するより完全なスキャン試行が保証され、追加のコンテンツの発見につながる可能性があります。特に、SubCrawlはURLの発見にブルートフォース方式を使用しません。スキャンされるすべてのコンテンツは、入力URL、URLの解析プロセス、およびクロール中の発見から得られます。公開ディレクトリが発見されると、クローリングエンジンはディレクトリからリンクを抽出して評価します。クローリングエンジンは、リンクが別のディレクトリかファイルかを判断します。ディレクトリはクローリングキューに追加され、ファイルは処理モジュールによる追加分析を受けます。スキャンされた各URLに対して、コンテンツのSHA256ハッシュやファジーハッシュ、公開ディレクトリが発見されたかどうか、YARAルールとの一致など、結果が生成され保存されます。最後に、結果データは1つ以上の出力モジュールに従って処理されます。現在は3つの出力モジュールがあります。1つ目はMISPとの統合を提供し、2つ目は単にデータをコンソールに出力し、3つ目はデータをSQLiteデータベースに保存します。フレームワークはモジュール式であるため、必要な入力モジュール、処理モジュール、出力モジュールを簡単に設定できるだけでなく、新しいモジュールを開発することも容易です。

Framework Architecture 図1 - SubCrawlのアーキテクチャ

SubCrawlは2つの異なる動作モードをサポートしています。まず、SubCrawlは1回限りの実行モードで起動できます。このモードでは、ユーザーはスキャンするURLをファイルに指定し、各入力値は改行で区切られます。2つ目の動作モードはサービスモードです。このモードでは、SubCrawlはバックグラウンドで実行され、入力モジュールがスキャンするURLを提供します。図1はSubCrawlのアーキテクチャの概要を示しています。両方の動作モードで使用されるコンポーネントは青色、1回限り実行モードのコンポーネントは黄色、サービスモードのコンポーネントは緑色です。

必要条件

選択した実行モードに応じて、他の前提条件を満たす必要があります。

1回限り実行モードの必要条件

SubCrawlはPython3で記述されています。さらに、SubCrawlを実行する前に必要なパッケージがいくつかあります。以下のコマンドを使用して、SubCrawlを実行する前に必要なすべてのパッケージをインストールできます。crawlerディレクトリから、次のコマンドを実行します。

root@kitploit:~
$ sudo apt install build-essential
$ pip3 install -r requirements.txt

サービスモードの必要条件

SubCrawlをサービスモードで起動する場合、Dockerを使用して行うことができます。そのため、DockerとDocker Composeのインストールが必要です。良いインストール手順はDocker.comのWebサイトに直接あります。

  • Docker Engineのインストール
  • Docker Composeのインストール

ヘルプの表示

SubCrawlには、-h/--help 引数を使用するか、スクリプトを引数なしで実行することで、組み込みのヘルプがあります。

root@kitploit:~
  ********         **        ******                               **
 **//////         /**       **////**                             /**
/**        **   **/**      **    //  ******  ******   ***     ** /**
/*********/**  /**/****** /**       //**//* //////** //**  * /** /**
////////**/**  /**/**///**/**        /** /   *******  /** ***/** /**
       /**/**  /**/**  /**//**    ** /**    **////**  /****/**** /**
 ******** //******/******  //****** /***   //******** ***/ ///** ***
////////   ////// /////     //////  ///     //////// ///    /// /// 
~~ Harvesting the Open Web ~~

usage: subcrawl.py [-h] [-f FILE_PATH] [-k] [-p PROCESSING_MODULES] [-s STORAGE_MODULES]

optional arguments:
  -h, --help            show this help message and exit
  -f FILE_PATH, --file FILE_PATH
                        Path of input URL file
  -k, --kafka           Use Kafka Queue as input
  -p PROCESSING_MODULES, --processing PROCESSING_MODULES
                        Processing modules to be executed comma separated.
  -s STORAGE_MODULES, --storage STORAGE_MODULES
                        Storage modules to be executed comma separated.

  Available processing modules: 
  - ClamAVProcessing
  - JARMProcessing
  - PayloadProcessing
  - TLSHProcessing
  - YARAProcessing

  Available storage modules: 
  - ConsoleStorage
  - MISPStorage
  - SqliteStorage

1回限り実行モード

このモードは、管理可能な数のドメインをすばやくスキャンしたい場合に適しています。この目的のために、スキャンするURLをファイルに保存し、それがクローラへの入力として機能します。以下は、1回限り実行モードでの実行例です。-f 引数がファイルへのパスとともに使用されていることに注意してください。

root@kitploit:~
python3 subcrawl.py -f urls.txt -p YARAProcessing,PayloadProcessing -s ConsoleStorage

サービスモード

サービスモードを使用すると、より多くのドメインをスキャンし、結果を保存できます。選択したストレージモジュールに基づいて、データをより詳細に分析および評価できます。サービスモードの実行をユーザーにとってできるだけ簡単にするために、すべての機能をDockerイメージに組み込みました。サービスモードでは、スキャンするドメインは入力モジュールを介して取得されます。デフォルトでは、新しいマルウェアおよびフィッシングURLがURLhausとPhishTankからダウンロードされ、スキャンのためにキューに入れられます。希望する処理モジュールとストレージモジュールはconfig.ymlに直接入力できます。デフォルトでは、以下の処理モジュールがアクティブ化され、SQLiteストレージが使用されます。

  • ClamAVProcessing
  • JARMProcessing
  • TLSHProcessing
  • YARAProcessing

SQLiteストレージモジュールに加えて、スキャンされたドメインとURLを表示および管理できるシンプルなWeb UIも開発されました。

Web UI for SQLite storage module

ただし、このUIでデータのその後の評価に不十分な場合は、MISPストレージモジュールを代わりにまたは追加でアクティブ化できます。対応する設定はconfig.ymlのMISPセクションで行う必要があります。

以下の2つのコマンドで、GITリポジトリをクローンし、Dockerコンテナを作成して直接起動できます。その後、Web UIはアドレスhttps://localhost:8000/でアクセスできます。コンテナが起動すると、入力モジュールが処理キューにURLを追加し始め、エンジンがホストのクロールを開始することに注意してください。

root@kitploit:~
git clone https://github.com/hpthreatresearch/subcrawl.git

docker-compose up --build 

SubCrawlモジュール

入力モジュール

入力モジュールはサービスモードでのみ使用されます。SubCrawlが1回限り実行モードで起動された場合は、スキャンするURLを含むファイルを指定する必要があります。以下の2つの入力モジュールが実装されています。

URLhaus

URLhausは、悪意のあるURLを追跡する著名なWebサービスです。このWebサービスは、新しく検出されたURLを含むエクスポートも提供しています。これらのマルウェアURLは、主に悪意のあるドメインを分析したいため、クローラへの完璧な入力となります。最近送信されたURLが取得され、APIリクエスト(タグやその他の利用可能なパラメータなど)によって検索結果は絞り込まれません。この入力モジュールでURLHaus APIに対して行われるHTTPリクエストは、取得結果をさらに絞り込むために変更できます。

PhishTank

PhishTankは、フィッシングURLを収集するWebサイトです。ユーザーは新しく見つかったフィッシングページを送信できます。アクティブなフィッシングURLを含むエクスポートを生成し、APIを介してこのWebサービスからダウンロードできます。これはクローラにとっても理想的なコレクションです。

処理モジュール

SubCrawlにはいくつかの処理モジュールが含まれています。処理モジュールはすべて、結果をコアエンジンに提供する方法について同様の動作に従います。一致が見つかると、結果がコアエンジンに返され、その後ストレージモジュールに提供されます。以下は処理モジュールのリストです。

SDHash

SDHash処理モジュールは、HTTP応答の類似性ハッシュを計算するために使用されます。ハッシュを正常に計算するには、コンテンツの最小サイズが512バイトである必要があります。これはおそらくインストールが最も複雑な処理モジュールであり、Protobufが必要であり、ターゲットホストによっては再コンパイルする必要があります。そのため、この処理モジュールはデフォルトで無効になっています。コンパイル済みのバージョンはcrawler/processing/minisdhash/にあります。これにはprotobuf-2.5.0とpython3.6が必要です。これらのバイナリはUbuntu 18.04.5 LTS x64上でコンパイルされました。インストール手順は次のとおりです。

root@kitploit:~
# Protobufのインストール
> apt-get update
> apt-get -y install libssl-dev libevent-pthreads-2.1-6 libomp-dev g++
> apt-get -y install autoconf automake libtool curl make g++ unzip
> wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.zip
> unzip protobuf-2.5.0.zip
> cd protobuf-2.5.0
> ./configure
> make
> sudo make install

# Python3.6のインストール
> apt-get install python3.6-dev
> sudo ldconfig

# SDHashのインストール
> git clone https://github.com/sdhash/sdhash.git
> cd sdhash
> make
> make install
> ldconfig

JARM

JARMは、Salesforceによって開発されたTLS接続をフィンガープリントするツールです。JARM処理モジュールは、ドメインのスキャンを実行し、JARMハッシュをドメインとともにコアエンジンに返します。Webサーバーの構成に応じて、TLSハンドシェイクには異なる特性があります。このハンドシェイクの属性のハッシュを計算することにより、これらの違いを使用してWebサーバー構成を追跡できます。

TLSH

TLSH処理モジュールは、類似性ハッシュを計算するために使用されるSDHash処理モジュールと同様です。TLSHの利点は、インストールがはるかに簡単で、入力の最小サイズが50バイトと小さいことです。ほとんどのWebシェルログインはかなり小さく、私たちの研究の焦点であったため、この処理モジュールをデフォルトで有効にしました。

YARA

YARA処理モジュールは、HTTP応答コンテンツをYARAルールでスキャンするために使用されます。この処理モジュールを呼び出すには、処理モジュールの引数として値YARAProcessingを指定します。たとえば、次のコマンドはYARA処理モジュールをロードし、ConsoleStorageストレージモジュールを介して出力をコンソールに生成します。

root@kitploit:~
python3 subcrawl.py -p YARAProcessing -s ConsoleStorage

現在、YARA処理モジュールはWebシェルログインやその他のさまざまな興味深いコンテンツを識別するために使用されています。このプロジェクトに含まれるYARAルール:

  • protected_webshell: パスワードで保護されたWebシェルのログインページを識別します
  • js_webshell_tracking_script: JavaScriptを使用してWebシェルがアクティブになったことを攻撃者に通知するバックドア化されたプラグイン/テーマを識別します
  • open_webshell: オープンなWebシェル(つまり、ログインで保護されていないWebシェル)を識別します
  • php_webshell_backend: 攻撃者が使用するPHP Webシェルバックエンドを識別します

サンプル出力: Yara processing output

追加のYARAルールを追加するには、yara-rulesフォルダに.YARファイルを追加し、combined-rules.yarにincludeステートメントを追加してルールファイルを含めます。

ClamAV

ClamAV処理モジュールは、スキャン中にHTTP応答コンテンツをClamAVでスキャンするために使用されます。一致が見つかった場合、それはさまざまな出力モジュールに提供されます。この処理モジュールを呼び出すには、処理モジュールの引数として値ClamAVProcessingを指定します。たとえば、次のコマンドはClamAV処理モジュールをロードし、ConsoleStorageストレージモジュールを介して出力をコンソールに生成します。

root@kitploit:~
python3 subcrawl.py -p ClamAVProcessing -s ConsoleStorage

サンプル出力: ClamAV Processing Module

このモジュールを利用するには、ClamAVをインストールする必要があります。ターミナルから、APTパッケージマネージャーを使用してClamAVをインストールします。

root@kitploit:~
$ sudo apt-get install clamav-daemon clamav-freshclam clamav-unofficial-sigs

インストール後、ClamAVアップデートサービスはすでに実行されているはずです。ただし、freshclamを使用して手動で更新する場合は、サービスを停止してください。

root@kitploit:~
sudo systemctl stop clamav-freshclam.service

そして、freshclamを手動で実行します。

root@kitploit:~
$ sudo freshclam

最後に、ClamAVサービスのステータスを確認します。

root@kitploit:~
$ sudo systemctl status clamav-daemon.service

サービスが実行されていない場合は、systemctlを使用して起動できます。

root@kitploit:~
$ sudo systemctl start clamav-daemon.service

Payload

Payload処理モジュールは、libmagicライブラリを使用してHTTP応答コンテンツを識別するために使用されます。さらに、SubCrawlは、PEファイルやアーカイブなど、関心のあるコンテンツを保存するように設定できます。この処理モジュールを呼び出すには、処理モジュールの引数として値PayloadProcessingを指定します。たとえば、次のコマンドはPayload処理モジュールをロードし、出力をコンソールに生成します。

root@kitploit:~
python3 subcrawl.py -p PayloadProcessing -s ConsoleStorage

このモジュールに追加の依存関係はありません。

サンプル出力: Payload processing output

ストレージモジュール

ストレージモジュールは、キュー内のすべてのURLがスキャンされた後、SubCrawlエンジンによって呼び出されます。これらは2つの目的で設計されました。1つ目は、スキャンキューが終了した直後にスキャン結果を取得すること、2つ目は長期保存と分析を可能にすることです。そのため、ConsoleStorageモジュールだけでなく、MISP統合とSQLiteストレージモジュールも実装しました。

Console

URLをスキャンした直後に結果をすばやく分析するために、整形された出力がコンソールに出力されます。この出力は、SubCrawlを1回限り実行モードで使用する場合に最適です。このアプローチは単一のドメインをスキャンしたり、簡単な出力を生成したりするのには適していますが、長期的な研究や分析には扱いにくいです。

Console Storage UI

Elastic

Elasticクラスターとの統合も利用可能です。各URLとそのデータはイベントとしてインデックス化され、Yaraなどの他のモジュールからの出力も含まれます。このモジュールを使用するためのデフォルトのダッシュボードも追加されています。_elasticsearch_セクションの更新が必要です。これには以下が含まれます。

  • Elastic search host (デフォルト localhost)
  • Port (デフォルト 9200)
  • Index name (デフォルト subcrawl)
  • Archive response content - HTTP応答本体をディスクに保存します (デフォルト False)
  • Archive log location - 応答コンテンツを保存する場所 (デフォルト log/)

この出力モジュールを使用するには、-s 引数で値 ElasticStorage を指定します。

SQLite

MISPのインストールと設定には時間がかかる可能性があるため、データをSQLiteデータベースに保存する別のモジュールを実装しました。ユーザーにデータをできるだけシンプルかつ明確に提示するために、シンプルなWeb GUIも開発しました。このWebアプリケーションを使用して、スキャンされたドメインとURLをすべての属性とともに表示および検索できます。これは初期バージョンであるため、複雑な比較機能はまだ実装されていません。

SQLite UI

MISP

MISPは、柔軟なデータモデルとAPIを備えたオープンソースの脅威インテリジェンスプラットフォームであり、脅威データを保存および分析します。SubCrawlはクロールされたデータをMISPイベントに保存し、ドメインごとに1つのイベントを公開し、特定されたオープンディレクトリを属性として追加します。MISPでは、ユーザーがイベントと属性にタグを定義することもできます。これはイベントの比較やリンク分析に役立ちます。これは私たちの主要な研究目標の1つであったため、SubCrawlの出力をMISPにエクスポートする際にURLHausのデータを強化しました。URLHausはタグを使用してデータに注釈を付け、URLに関連付けられたマルウェアファミリや脅威アクターを識別できます。各オープンディレクトリURLについて、モジュールはローカルに保存されたURLHausデータをクエリし、一致する場合にURLHausタグをMISPイベントに追加します。各MISPイベントに関連のない属性が集まらないように、スキャンされたURL用にopendir-urlという新しいMISPオブジェクトを作成しました。これにより、関連する属性がまとめられ、データの概要を把握しやすくなります。

MISP UI

独自のモジュールの構築

処理モジュールとストレージモジュールのテンプレートがフレームワークの一部として提供されています。

処理モジュール

処理モジュールは crawler->processing にあり、サンプルモジュールファイル example_processing.py がこのディレクトリにあります。テンプレートは、フレームワークによる実行を保証するために必要な継承とインポートを提供します。init 関数はモジュールの初期化を提供し、ロガーとグローバル設定のインスタンスを受け取ります。ロガーは、処理モジュールおよびフレームワーク全体のログ情報を提供するために使用されます。

process 関数は、各HTTP応答を処理するために実装されます。このために、URLと生の応答コンテンツを受け取ります。ここでモジュールの作業が実装されます。この関数は、以下のフィールドを持つ辞書を返す必要があります。

  • hash: コンテンツのsha256
  • url: コンテンツが取得されたURL
  • matches: モジュール内の一致結果。例:libmagicやYARAの結果。

一意のクラス名を定義する必要があり、-p 引数でこのモジュールを含める場合や、設定ファイルでデフォルトの処理モジュールとして定義する場合に使用されます。

最後に、__init__.py にクラス名を使用してインポートステートメントを追加します。

root@kitploit:~
from .<REPLACE>_processing import <REPLACE>Processing

ストレージモジュール

ストレージモジュールは crawler->storage にあり、サンプルモジュールファイル example_storage.py がこのディレクトリにあります。処理モジュールと同様に、init 関数はモジュールの初期化を提供し、ロガーとグローバル設定のインスタンスを受け取ります。store_results 関数は、設定ファイルのバッチサイズで定義された間隔でエンジンから構造化データを受け取ります。

一意のクラス名を定義する必要があり、-s 引数でこのモジュールを含める場合や、設定ファイルでデフォルトの処理モジュールとして定義する場合に使用されます。

プレゼンテーションとその他のリソース

2021年:

  • BlackHat Arsenal USA
  • VirusBulletin Localhost - 近日公開

ライセンス

SubCrawlはMITライセンスの下でライセンスされています。

ツールをダウンロード