
GCP、AWS、およびローカルソースにわたるディスクイメージ、パッケージ、アーカイブからフォレンジックファイルハッシュセットを構築し、重複排除とDFIRワークフロー向けのPostgreSQL/Spannerエクスポートを備えています。
HashRを使用すると、データソースに基づいて独自のハッシュセットを構築できます。入力ソース(例: 生のディスクイメージ、GCEディスクイメージ、ISOファイル、Windows更新プログラムパッケージ、.tar.gzファイルなど)からファイルとハッシュを抽出するツールです。
HashRは次のコンポーネントで構成されています:
現在実装されているインポーター:
ファイルが抽出されハッシュ化されると、結果はエクスポーターに渡されます。現在実装されているエクスポーター:
実行するインポーターを選択できます。それぞれに異なる要件があります。詳細については、以下のセクションを参照してください。
HashRの実行にはLinux OSが必要です。物理マシン、仮想マシン、クラウドマシンのいずれでも構いません。以下は最適なハードウェア要件です:
HashRは低スペックのマシンでも実行できる可能性がありますが、これは十分にテストされていません。
hashrバイナリをビルドするには、次のコマンドを実行します:``` shell env GOOS=linux GOARCH=amd64 go build hashr.go
コア hashR パッケージのテストを実行するには、Spanner エミュレータを実行する必要があります:``` shell
gcloud emulators spanner start
その後、すべてのテストを実行するには、次のコマンドを実行します:``` shell go test -timeout 2m ./...
## HashR のセットアップ
### OSDFIR インフラストラクチャにおける HashR
HashR は [OSDFIR Infrastructure プロジェクト](https://github.com/google/osdfir-infrastructure/tree/main/charts/hashr) の一部としてデプロイできます。
このデプロイメントでは、HashR を Kubernetes の cronjob として実行し、Timesketch との簡単な
統合を可能にします。
### Docker を使用した HashR
HashR を Docker コンテナで実行するには、[Docker 固有のガイド](https://github.com/google/hashr/blob/main/docker/README.md) を参照してください。
### OS の設定と必要なサードパーティツール
HashR は、Plaso を使用して、ディスクイメージ、ボリューム、ファイルシステムの解析といった重労働を処理します。以下のコマンドを使用して、Plaso の Docker コンテナをプルする必要があります。``` shell
docker pull log2timeline/plaso
また、WSUSインポーターがWindows Updateパッケージの再帰的抽出に使用する7zも、HashRを実行しているマシンにインストールされている必要があります。``` shell sudo apt install p7zip-full
HashRを実行するユーザーに対して、sudo経由で特定のコマンドを実行できるようにする必要があります。ユーザーが `hashr` であると仮定して、ファイル `/etc/sudoers.d/hashr` を作成し、以下を記述してください:``` shell
hashr ALL = (root) NOPASSWD: /bin/mount,/bin/umount,/sbin/losetup,/bin/rm
HashRが実行されるユーザーも、dockerを実行できる必要があります。ユーザーがhashrであると仮定して、次のようにしてdockerグループに追加してください:``` shell
sudo usermod -aG docker hashr
### 処理タスク用のストレージの設定
HashRは、処理済みソースに関する情報を保存する必要があります。また、処理タスクに関する追加のテレメトリー(処理時間、抽出されたファイル数など)も保存します。以下のいずれかを選択できます。
1. PostgreSQL
1. Cloud (GCP) Spanner
#### PostgreSQLストレージの設定
PostgreSQLインスタンスを実行・維持する方法は多数ありますが、最も簡単な方法の1つはDockerコンテナで実行することです。以下の手順に従って、PostgreSQL Dockerコンテナをセットアップしてください。
ステップ1: PostgreSQL Dockerイメージをプルします。``` shell
docker pull postgres
ステップ2: PostgreSQLコンテナを初期化してバックグラウンドで実行します。パスワードを必ず調整してください。``` shell docker run -itd -e POSTGRES_DB=hashr -e POSTGRES_USER=hashr -e POSTGRES_PASSWORD=hashr -p 5432:5432 -v /data:/var/lib/postgresql/data --name hashr_postgresql postgres
ステップ 3: 処理ジョブを保存するためのテーブルを作成します。``` shell
cat scripts/CreateJobsTable.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr
PostgreSQL を使用して処理タスクに関する情報を保存するには、次のフラグを指定する必要があります: -storage postgres -postgres_host <host> -postgres_port <port> -postgres_user <user> -postgres_password <pass> -postgres_db <db_name>
処理ジョブに関するデータは Cloud Spanner に保存することもできます。そのためには Google Cloud プロジェクトが必要です。この設定の主な利点は、Google Data Studio を使用してダッシュボードを簡単に作成し、Cloud Spanner インスタンスに直接接続できることです。これにより、PostgreSQL インスタンスに対してクエリを実行しなくても、監視とデバッグが可能になります。
gcloud ツールがターゲットの hashr GCP プロジェクトで設定されていることを前提として、Cloud Spanner を有効にするには、以下の手順を実行する必要があります。
HashR サービス アカウントを作成します:``` shell gcloud iam service-accounts create hashr --description="HashR SA key." --display-name="hashr"
サービスアカウントキーを作成し、ホームディレクトリに保存してください。*<project_name>*をプロジェクト名に設定してください。``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com
GOOGLE_APPLICATION_CREDENTIALS 環境変数をサービスアカウントキーに設定してください:``` shell export GOOGLE_APPLICATION_CREDENTIALS=/home/hashr/hashr-sa-private-key.json
Spanner インスタンスを作成し、必要に応じて config と processing-units の値を調整してください:``` shell
gcloud spanner instances create hashr --config=regional-us-central1 --description="hashr" --processing-units=100
Spanner データベースを作成:``` shell gcloud spanner databases create hashr --instance=hashr
サービスアカウントが Spanner データベースを使用できるようにし、*<project_name>* をプロジェクト名に設定してください:``` shell
gcloud spanner databases add-iam-policy-binding hashr --instance hashr --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/spanner.databaseUser"
Spanner データベーススキーマを更新:``` shell gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateJobsTable.ddl
Cloud Spanner を使用して処理タスクに関する情報を保存するには、次のフラグを指定する必要があります: `-jobStorage cloudspanner -spannerDBPath <spanner_db_path>`
### インポーターの設定
実行するインポーターを指定するには、`-importers` フラグを使用します。指定可能な値: `GCP,targz,windows,wsus,deb,rpm,zip,gcr,iso9660`
#### GCP (Google Cloud Platform)```shell
-importers GCP
このインポーターは、GCPディスクイメージからファイルを抽出できます。これはいくつかのステップで行われます:
公開GCPイメージを含むGCPプロジェクトの一覧は、こちらにあります。このインポーターを使用するには、GCPプロジェクトが必要であり、次の手順を実行する必要があります: