
bulk_extractor v2.2.0beta2
これは開発ツリーです。本番版のダウンロードは次にあります:
bulk_extractor は、高性能なデジタルフォレンジック調査ツールです。これは「証拠を取得する」ボタンのようなもので、あらゆる種類の入力(ディスクイメージ、ファイル、ファイルのディレクトリなど)を高速にスキャンし、ファイルシステムやファイルシステム構造を解析することなく、メールアドレス、クレジットカード番号、JPEG、JSONスニペットなどの構造化情報を抽出します。結果はテキストファイルに保存されるため、簡単に検査・検索したり、他のフォレンジック処理の入力として使用したりできます。また、bulk_extractor は、Google検索語やメールアドレスなど、検出した特定の種類の特徴のヒストグラムも作成します。これは、そのようなヒストグラムが捜査および法執行アプリケーションにおいて特に有用であることがこれまでの研究で示されているためです。
他のデジタルフォレンジックツールとは異なり、bulk_extractor はデータのすべてのバイトを調査し、それが解凍または他の方法でデコードできるシーケンスの開始点であるかどうかを確認します。該当する場合、デコードされたデータは再帰的に再検査されます。その結果、bulk_extractor は、従来のカービングツールが見逃すような BASE64 エンコードされた JPEG や圧縮された JSON オブジェクトも発見できます。
このソースツリーは bulk_extractor 2.2.0 をビルドします。本番環境での使用には、https://github.com/simsong/bulk_extractor/releases のテスト済みリリースを推奨します。
bulk_extractor のビルド
ソースからのビルドを推奨します。etc/ ディレクトリには、クリーンな仮想マシンを構成するための bash スクリプトがいくつか用意されています:
git clone https://github.com/simsong/bulk_extractor.git
./bootstrap.sh
./configure
make
make check
make install
パッケージのインストールと bulk_extractor のビルドに関する詳細な手順については、こちらのwikiページをお読みください: https://github.com/simsong/bulk_extractor/wiki/Installing-bulk_extractor
bulk_extractor の詳細については、https://forensics.wiki/bulk_extractor をご覧ください。
ドキュメント
生成されたPDFマニュアルは、変更が main にマージされた後、https://simsong.github.io/bulk_extractor/ で公開されます。2.2の運用マニュアルと開発者マニュアルが含まれています。プルリクエストは、ワークフローのアーティファクトとして同じPDFを受け取ります。
テスト済み構成
このリリースの bulk_extractor は C++17 を必要とします。現在の検証範囲は以下のとおりです:
- Apple Silicon macOS(ローカルビルドおよび
make distcheck、2026-07-19) - Ubuntu 22.04 および現在の macOS GitHub Actions ランナー
etc/ ディレクトリにある古いプラットフォーム準備スクリプトは、現在のCIサポートと同等ではなく、メンテナンスが必要になる場合があります。
bulk_extractor が動作しないテスト済み構成
- Debian 10(ネイティブビルドは非対応)
推奨引用
科学論文を執筆していて bulk_extractor を使用する場合は、次のように引用してください:
Garfinkel, Simson, Digital media triage with bulk data analysis and bulk_extractor. Computers and Security 32: 56-72 (2013)
@article{10.5555/2748150.2748581,
author = {Garfinkel, Simson L.},
title = {Digital Media Triage with Bulk Data Analysis and Bulk_extractor},
year = {2013},
issue_date = {February 2013},
publisher = {Elsevier Advanced Technology Publications},
address = {GBR},
volume = {32},
number = {C},
issn = {0167-4048},
journal = {Comput. Secur.},
month = feb,
pages = {56–72},
numpages = {17},
keywords = {Digital forensics, Bulk data analysis, bulk_extractor, Stream-based forensics, Windows hibernation files, Parallelized forensic analysis, Optimistic decompression, Forensic path, Margin, EnCase}
}
環境変数
以下の環境変数を設定すると、bulk_extractor の動作を変更できます:
| 変数 | 動作 |
|---|---|
DEBUG_BENCHMARK | report.xml ファイルにCPUベンチマーク情報を含めます |
DEBUG_NO_SCANNER_BYPASS | sbuf が n-gram を含む場合や高い異なり文字数を持たない場合に一部のスキャナーをバイパスするスキャナーバイパスロジックを無効にします。 |
DEBUG_HISTOGRAMS | ファイルベースのヒストグラムに関するデバッグ情報を出力します。 |
DEBUG_HISTOGRAMS_NO_INCREMENTAL | 増分式のメモリベースのヒストグラムを使用しません。 |
DEBUG_PRINT_STEPS | 各 sbuf に対して各スキャナーが呼び出されたときに stdout に出力します |
DEBUG_SCANNER_DUMP_DATA | スキャン対象の各 sbuf を16進ダンプします。 |
DEBUG_SCANNERS_IGNORE | 無視するスキャナーを識別するために使用される部分文字列。単体テストのデバッグに役立ちます。 |
その他のデバッグのヒント:
- スキャナーなしで実行するには -xall を指定します。
- 画像サイズの読み取りと数回のクイックシークをデバッグするには、0.001% のランダムサンプリングで実行します。
ロード可能なスキャナー
bulk_extractor は、-P で指定されたディレクトリまたは BE_PATH 内のディレクトリから、scan_.so(macOS では scan_.dylib、Windows では scan_*.dll)という名前のスキャナーモジュールをロードします。モジュールは、次のCリンケージファクトリをエクスポートします:
extern "C" scanner_t *bulk_extractor_scanner_v1();
ファクトリは通常の scanner_t 関数を返します。モジュールは、実行可能ファイルと同じバージョンの bulk_extractor ソースに対してビルドしてください。スキャナーの PHASE_INIT ハンドラーは sp.check_version() を呼び出す必要があります。モジュールは、スキャナーのクリーンアップが完了するまでロードされたままになります。
Windows でのビルド
bulk_extractor のネイティブWindowsビルドは現在サポートされていません。
Windows MinGW build GitHub Actions ワークフローは、すべてのプルリクエストについて Ubuntu 上で実行可能ファイルをクロスコンパイルし、bulk_extractor-windows-x86_64 アーティファクト内に bulk_extractor64.exe をアップロードします。このワークフローは、PE実行可能ファイルが MinGW、RE2、Abseil、Expat、zlib、GNU crypto の各ランタイムDLLをインポートしないことを検証します。Windowsランナーは、その正確なアーティファクトをダウンロードし、Unicodeファイル名を含むディレクトリに対して実行します。このワークフローは、x86_64 MinGW-w64 POSIX ツールチェーンと、固定された vcpkg チェックアウトからの静的 Expat、RE2、Abseil を使用します。CIアーティファクトは現在 libewf なしでビルドされているため、E01サポートを含まず、署名もされておらず、リリースインストーラーでもありません。ワークフローファイルとその管理されているビルドノートは、.github/workflows/mingw.yml と doc/mingw_notes.txt です。
BULK_EXTRACTOR リリースノート
リリース 2.2.0(2026年7月19日)
be20 API とそのソース依存関係を bulk_extractor ソースツリーに統合し、再帰的なサブモジュール設定を不要にしました。統合ビルドでは、bulk_extractor、be20、DFXML をまとめて検証し、フルイメージテストと AddressSanitizer で発見されたスレッドプールのシャットダウン欠陥を修正します。
リリース 2.1.1(2024年4月26日)
jpeg_carved フィーチャーレコーダーの名前を jpeg に変更しました。これにより、紛らわしかった -S jpeg_carved_carve_mode=2 ではなく、-S jpeg_carve_mode=2 で jpeg カーブモードを設定できます。
リリース 2.0
bulk_extractor 2.0(BE2)が運用可能になりました。Javaベースのビューアーとは動作しますが、現在Windowsで動作するインストーラーはありません。
BE2 のコンパイルには C++17 が必要です。be20 スキャナーAPI、dfxml_cpp、utfcpp、DFXML スキーマのソースはこのリポジトリ内で直接管理されており、再帰的なサブモジュールのチェックアウトは不要です。
このプロジェクトは予想以上に時間がかかりました。C++17 への更新に加えて、大規模なコードリファクタリングと、コード品質・テスト容易性・信頼性の全体的な向上の機会としても活用されました。この実験に関する記事は、ACM Queue の近刊号に掲載される予定です。