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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
hashr — GCP、AWS、およびローカルソースにわたるディスクイメージ、パッケージ、アーカイブからフォレンジックファイルハッシュセットを構築し、重複排除とDFIRワークフロー向けのPostgreSQL/Spannerエクスポートを備えています。 | Kitploit
ツール/GitHubGitHub/google/hashr
ディスクフォレンジックハッシュ分析フォレンジックデジタルフォレンジックインシデントレスポンス
GitHubgoogle/hashr

hashr

GCP、AWS、およびローカルソースにわたるディスクイメージ、パッケージ、アーカイブからフォレンジックファイルハッシュセットを構築し、重複排除とDFIRワークフロー向けのPostgreSQL/Spannerエクスポートを備えています。

リポジトリを見る
1309106ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

HashR: 独自のハッシュセットを生成



目次

  • HashR: 独自のハッシュセットを生成
    • 目次
    • 概要
    • 要件
    • HashRバイナリのビルドとテストの実行
    • HashRのセットアップ
      • dockerを使用したHashR
      • OS設定と必要なサードパーティツール
      • 処理タスク用ストレージのセットアップ
        • PostgreSQLストレージのセットアップ
        • Cloud Spannerのセットアップ
      • インポーターのセットアップ
        • GCP(Google Cloud Platform)
        • AWS(Amazon Web Services)
        • GCR(Google Container Registry)
        • Windows
        • WSUS
        • TarGz
        • Deb
        • RPM
        • Zip(およびZip類似形式)
        • ISO 9660
      • エクスポーターのセットアップ
        • Postgresエクスポーターのセットアップ
        • GCPエクスポーターのセットアップ
      • 追加フラグ

概要

HashRを使用すると、データソースに基づいて独自のハッシュセットを構築できます。入力ソース(例: 生のディスクイメージ、GCEディスクイメージ、ISOファイル、Windows更新プログラムパッケージ、.tar.gzファイルなど)からファイルとハッシュを抽出するツールです。

HashRは次のコンポーネントで構成されています:

  1. インポーター: ソースをローカルストレージにコピーし、必要な前処理を実行します。
  2. コア: image_export.py(Plaso)を使用したソースからのコンテンツの抽出、キャッシュとリポジトリレベルの重複排除、エクスポーター向けに抽出されたファイルの準備を担当します。
  3. エクスポーター: ファイル、メタデータ、ハッシュを指定されたデータシンクにエクスポートします。

現在実装されているインポーター:

  1. GCP: 基本のGCPディスクイメージからファイルを抽出します
  2. Windows: ISO-13346形式のWindowsインストールメディアからファイルを抽出します。
  3. WSUS: Windows Updateパッケージからファイルを抽出します。
  4. GCR: Google Container Registryに保存されているコンテナイメージからファイルを抽出します。
  5. TarGz: .tar.gzアーカイブからファイルを抽出します。
  6. Deb: Debianソフトウェアパッケージからファイルを抽出します。
  7. RPM: RPMソフトウェアパッケージからファイルを抽出します。
  8. Zip: .zip(およびZip類似形式)アーカイブからファイルを抽出します。

ファイルが抽出されハッシュ化されると、結果はエクスポーターに渡されます。現在実装されているエクスポーター:

  1. PostgreSQL: PostgreSQLインスタンスにデータをアップロードします。
  2. Cloud Spanner: GCP Spannerインスタンスにデータをアップロードします。

実行するインポーターを選択できます。それぞれに異なる要件があります。詳細については、以下のセクションを参照してください。

要件

HashRの実行にはLinux OSが必要です。物理マシン、仮想マシン、クラウドマシンのいずれでも構いません。以下は最適なハードウェア要件です:

  1. 8〜16コア
  2. 128GBメモリ
  3. 2TBの高速ローカルストレージ(SSD推奨)

HashRは低スペックのマシンでも実行できる可能性がありますが、これは十分にテストされていません。

HashRバイナリのビルドとテストの実行

hashrバイナリをビルドするには、次のコマンドを実行します:``` shell env GOOS=linux GOARCH=amd64 go build hashr.go

root@kitploit:~
コア hashR パッケージのテストを実行するには、Spanner エミュレータを実行する必要があります:``` shell
gcloud emulators spanner start

その後、すべてのテストを実行するには、次のコマンドを実行します:``` shell go test -timeout 2m ./...

root@kitploit:~
## 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

root@kitploit:~
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

root@kitploit:~
### 処理タスク用のストレージの設定

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

root@kitploit:~
ステップ 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 のセットアップ

処理ジョブに関するデータは 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"

root@kitploit:~
サービスアカウントキーを作成し、ホームディレクトリに保存してください。*<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

root@kitploit:~
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

root@kitploit:~
サービスアカウントが 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

root@kitploit:~
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ディスクイメージからファイルを抽出できます。これはいくつかのステップで行われます:

  1. ターゲットプロジェクト(例: ubuntu-os-cloud)内の新しいイメージを確認する
  2. 新しい/未処理のイメージをhashR GCPプロジェクトにコピーする
  3. Cloud Buildを実行する。これにより一時的なVMが作成され、コピーしたイメージに対してddが実行され、出力が.tar.gzファイルに保存されます。
  4. raw_disk.tar.gzをhashR GCPプロジェクトのGCSバケットにエクスポートする
  5. raw_disk.tar.gzをGCSからローカルのhashRストレージにコピーする
  6. raw_disk.tar.gzを抽出し、ディスクイメージをPlasoに渡す

公開GCPイメージを含むGCPプロジェクトの一覧は、こちらにあります。このインポーターを使用するには、GCPプロジェクトが必要であり、次の手順を実行する必要があります:

ステップ1: HashRサービスアカウントを作成します。Cloud Spannerの設定中にこれを行った場合は、ステップ4に進んでください。``` shell gcloud iam service-accounts create hashr-sa --description="HashR SA key." --display-name="hashr"

root@kitploit:~
ステップ 2: サービスアカウントキーを作成し、ホームディレクトリに保存します。必ず *<project_name>* をプロジェクト名に設定してください:``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com

ステップ 3: GOOGLE_APPLICATION_CREDENTIALS 環境変数をサービスアカウントキーに指定します:``` shell export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json

root@kitploit:~
ステップ4: ディスクイメージを.tar.gz形式で保存するために使用するGCSバケットを作成し、*<project_name>* をプロジェクト名に、*<gcs_bucket_name>* をプロジェクトの新しいGCSバケット名に設定します:``` shell
gcloud storage buckets create gs://<gcs_bucket_name> --project=<project_name>

ステップ5: このバケットの管理者にサービスアカウントを設定します:``` shell gcloud storage buckets add-iam-policy-binding gs://<gcs_bucket_name> --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/storage.objectAdmin"

root@kitploit:~
ステップ6: Compute APIを有効にする:``` shell
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com

ステップ 7: IAM ロールを作成し、必要な権限を割り当てます:``` shell gcloud iam roles create hashr --project=<project_name> --title=hashr --description="Permissions required to run hashR" --permissions compute.images.create,compute.images.delete,compute.globalOperations.get

root@kitploit:~
ステップ8: サービスアカウントにIAMロールをバインドする:``` shell
gcloud projects add-iam-policy-binding <project_name> --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="projects/<project_name>/roles/hashr"

ステップ9a: cloudbuild APIを有効にする``` shell gcloud services enable cloudbuild.googleapis.com --project <project_name>

root@kitploit:~
ステップ 9b: 自分の project_number を取得する```shell
gcloud projects list --filter="mlegin-testing-things" --format="value(PROJECT_NUMBER)"

ステップ9c: Cloud Buildを実行するために必要なサービスアカウントへのアクセスを許可し、<project_name> と <project_number> の値を必ず変更してください:``` shell gcloud projects add-iam-policy-binding <project_name> --member='serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com' --role='roles/storage.admin'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com'
--role='roles/viewer'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com'
--role='roles/resourcemanager.projectIamAdmin'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com'
--role='roles/cloudbuild.builds.editor'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>@cloudbuild.gserviceaccount.com'
--role='roles/compute.admin'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>@cloudbuild.gserviceaccount.com'
--role='roles/iam.serviceAccountUser'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>@cloudbuild.gserviceaccount.com'
--role='roles/iam.serviceAccountTokenCreator'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>@cloudbuild.gserviceaccount.com'
--role='roles/compute.networkUser'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>[email protected]'
--role='roles/compute.storageAdmin'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>[email protected]'
--role='roles/storage.objectViewer'

gcloud projects add-iam-policy-binding <project_name>
--member='serviceAccount:<project_number>[email protected]'
--role='roles/storage.objectAdmin'

root@kitploit:~
このインポーターを使用するには、以下のフラグを指定する必要があります:

1. `-gcp_projects` — ディスクイメージを含むクラウドプロジェクトのカンマ区切りリスト。パブリックイメージをインポートしたい場合は、[こちら](https://cloud.google.com/compute/docs/images/os-details#general-info) を参照してください。
1. `-hashr_gcp_project` — 処理用のディスクイメージのコピーを保存し、Cloud Build を実行するためにも使用される GCP プロジェクト
1. `-hashr_gcs_bucket` — Cloud Build の出力(.tar.gz 形式のディスクイメージ)を保存するために使用される GCS バケット

#### AWS

このインポーターは、Amazon が所有する AMI を処理してハッシュを生成します。このインポーターには、少なくとも 1 つの HashR ワーカー(EC2 インスタンス)が必要です。

##### AWS HashR Workers

AWS HashR ワーカーは、AMI のボリュームがアタッチされ、ディスクアーカイブが作成され、S3 バケットにアップロードされる EC2 インスタンスです。少なくとも 2 つの AWS HashR ワーカーを推奨します。セットアップで単一の AWS ワーカーを使用する場合は `-processing_worker_count 1` を使用してください。

AWS HashR ワーカーは以下の要件を満たす必要があります:

- EC2 インスタンスにはタグ `InUse: false` が必要です。値が `true` の場合、そのワーカーは処理に使用されません。```shell
aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Tags’
  • hashr を実行するシステムは、以下を使用して EC2 インスタンスに SSH できる必要があります:

    • Keyname に記述されている SSH キー。 ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’
    root@kitploit:~
  • PublicDnsName に記載されているとおり FQDN へ。 ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].PublicDnsName’

    root@kitploit:~
  • scripts/hashr-archive は AWS HashR worker の /usr/local/sbin/hashr-archive にコピーする必要があります

  • HashR バケットにファイルをアップロードする権限を持つ AWS アカウント。AWS 設定と認証情報は $HOME/.aws/ ディレクトリに保存する必要があります。```shell aws configure

root@kitploit:~
##### HashR アプリケーション

`hashr` を実行するシステムでは、以下が必要です。

- 以下の API を呼び出す権限を持つ AWS アカウント:
  - EC2
    - AttachVolume
    - CopyImage
    - CreateTags
    - CreateVolume
    - DeleteVolume
    - DescribeAvailabilityZones
    - DescribeImages
    - DescribeInstances
    - DescribeSnapshots
    - DescribeVolumes
    - DetachVolume
  - S3
    - DeleteObject
- AWS アカウントの設定と認証情報ファイルは、`$HOME/.aws/` ディレクトリに配置されている必要があります。
- AWS HashR で使用する SSH 秘密鍵は、`$HOME/.ssh/` ディレクトリに配置されている必要があります。これは、`aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r '.Reservations[].Instances[0].Keyname'` で説明されている `Keyname` の値と一致している必要があります。

##### AWS EC2 インスタンスのセットアップ

このセクションでは、HashR で使用する EC2 インスタンスの作成方法について説明します。理想的には、`hashr.uploader` と `hashr.worker` の 2 つの AWS アカウントが必要です。

`hashr.uploader` は EC2 インスタンス上で使用され、アーカイブされたディスクイメージを S3 バケットにアップロードする権限が必要です。`scripts/aws/AwsHashrUploaderPolicy.json` には、S3 バケット `hashr-bucket` のサンプルポリシーが含まれています。

`hashr.worker` は、HashR コマンドを実行するコンピューター上で使用されます。このアカウントには、EC2 および S3 の権限が必要です。`scripts/aws/AwsHashrWorkerPolicy.json` には、`hashr.worker` アカウントのサンプルポリシーが含まれています。

`hashr_setup.sh` は、EC2 インスタンスの作成を支援するスクリプトです。`hashr_setup.sh` を編集し、必要に応じて以下のフィールドを確認および更新してください:
- `AWS_PROFILE`
- `AWS_REGION`
- `SECURITY_SOURCE_CIDR`
- `WORKER_AWS_CONFIG_FILE`

**注**: `WORKER_AWS_CONFIG_FILE` で指定されたファイルは、`hashr_setup.sh` と同じディレクトリに存在する必要があります。

**注**: `hashr_setup.sh` は、`hashr_setup.sh` と同じディレクトリから実行する必要があります。

以下のコマンドを実行して、EC2 インスタンスを作成およびセットアップします。```shell
$ git clone https://github.com/google/hashr
$ cd hashr/scripts/aws
$ aws configure
$ cp -r ~/.aws ./
$ tar -zcf hashr.uploader.tar.gz .aws
$ hash_setup.sh setup
HashR AWS インポーターワークフロー

AWS インポーターは次の高レベルな手順を実行します:

  1. 新規/未処理の Amazon 所有 AMI を HashR プロジェクトにコピーします
  2. コピーした AMI に基づいてボリュームを作成します
  3. そのボリュームを利用可能な AWS HashR ワーカーにアタッチします
  4. AWS HashR ワーカー上で a. AWS HashR ワーカー上にディスクアーカイブ (tar.gz) を作成します b. ディスクアーカイブを HashR S3 バケットにアップロードします
  5. HashR S3 バケットからディスクアーカイブをダウンロードします
  6. ディスクイメージのアーカイブを展開します
  7. Plaso を使用して raw ディスクを処理します
HashR AWS インポーターコマンド

以下のコマンドは debian-12 イメージを処理し、PostgreSQL データベースに保存します。```shell hashr -storage postgres -exporters postgres -importers aws -aws_bucket aws-hashr-bucket -aws_os_filter debian-12

root@kitploit:~
**注意**: インポーターの開発中、ワーカーとしてAmazon Linux(al2023-*)が使用されました。そのため、`-aws_ssh_user` のデフォルト値は `ec2-user` に設定されています。他のディストリビューションではデフォルトのSSHユーザーが異なる場合があるため、適切なSSHユーザーを `-aws_ssh_user` で設定してください。

#### GCR(Google Container Registry)
このインポーターは、GCRリポジトリに保存されているコンテナイメージからファイルを抽出します。セットアップするには、次の手順を実行します。

ステップ 1: HashRサービスアカウントを作成します。他のGCP依存コンポーネントのセットアップ中にこれを行った場合は、ステップ4に進んでください。``` shell
gcloud iam service-accounts create hashr-sa --description="HashR SA key." --display-name="hashr"

ステップ2: サービスアカウントキーを作成し、ホームディレクトリに保存します。必ず <project_name> をプロジェクト名に設定してください:``` shell gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com

root@kitploit:~
ステップ 3: GOOGLE_APPLICATION_CREDENTIALS 環境変数をサービスアカウントキーに設定します:``` shell
export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json

ステップ 4: hashR サービス アカウント キーに、指定された GCR リポジトリへのアクセスに必要な権限を付与します。``` shell gcloud storage buckets add-iam-policy-binding gs://artifacts.<project_name_hosting_gcr_repo>.appspot.com --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/storage.objectViewer"

root@kitploit:~
このインポーターを使用するには、次のフラグを指定する必要があります:

1. `-gcr_repos` には、コンテナイメージをインポートしたい GCR リポジトリのカンマ区切りリストを指定します。

#### Windows

このインポーターは、ISO-13346 形式の公式 Windows インストールメディアからファイルを抽出します。例えば、公式 Microsoft [ウェブサイト](https://www.microsoft.com/en-gb/software-download/windows10ISO) からダウンロードできるものです。
1 つの ISO ファイルに複数の WIM イメージが含まれる場合があります:

1. Windows10ProEducation
1. Windows10Education
1. Windows10EducationN
1. Windows10ProN
1. など

このインポーターは、`install.wim` ファイル内で見つけられるすべてのイメージからファイルを抽出します。

#### WSUS

このインポーターは、7z を使用して Windows Update パッケージの内容を再帰的に抽出します。指定された GCS バケット内の Windows Update ファイルを探します。GCS バケットを新しい更新プログラムで自動的に更新する最も簡単な方法は、次のとおりです:

1. hashr GCP プロジェクトで Windows Server を実行する GCE VM をセットアップします。
1. WSUS ロールを構成し、処理したい Windows Update パッケージを選択します
1. 更新プログラムをローカルストレージに自動的に承認およびダウンロードするように WSUS を構成します
1. ローカルストレージのコンテンツを GCS バケットに自動的に同期する Windows タスクをセットアップします: `gcloud storage rsync --recursive D:/WSUS/WsusContent gs://hashr-wsus/` (パスを調整することを忘れないでください)
1. 更新パッケージのファイル名 (通常は KB 番号を含む) を ID として使用したい場合 (デフォルトでは sha1 です。これは MS が WSUS 更新プログラムを保存する方法です) と、その説明が必要な場合は、内部の WID WSUS データベースからダンプできます。次の Power Shell スクリプトを使用して、タスクとして実行できます:```
#SQL Query
$delimiter = ";"
$SqlQuery = 'select DISTINCT CONVERT([varchar](https://github.com/google/hashr/blob/main/512), tbfile.FileDigest, 2) as sha1, tbfile.[FileName], vu.[KnowledgebaseArticle], vu.[DefaultTitle]  from [SUSDB].[dbo].[tbFile] tbfile
  left join [SUSDB].[dbo].[tbFileForRevision] ffrev
  on tbfile.FileDigest = ffrev.FileDigest
  left join [SUSDB].[dbo].[tbRevision] rev
  on ffrev.RevisionID = rev.RevisionID
  left join [SUSDB].[dbo].[tbUpdate] u
  on rev.LocalUpdateID = u.LocalUpdateID
  left join [SUSDB].[PUBLIC_VIEWS].[vUpdate] vu
  on u.UpdateID = vu.UpdateId'
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = 'server=\\.\pipe\MICROSOFT##WID\tsql\query;database=SUSDB;trusted_connection=true;'
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandTimeout = 0
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
#Creating Dataset
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$DataSet.Tables[0] | export-csv -Delimiter $delimiter -Path "D:\WSUS\WsusContent\export.csv" -NoTypeInformation

gcloud storage rsync --recursive D:/WSUS/WsusContent gs://hashr-wsus/

This will dump the relevant information from WSUS DB, store it in the export.csv file and sync the contents of the WSUS folder with GCS bucket. WSUS importer will check if export.csv file is present in the root of the WSUS repo, if so it will use it.

TarGz

This is a simple importer that traverses repositories and looks for .tar.gz files. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -targz_repo_path which should point to the path on the local file system that contains .tar.gz files

Deb

This is very similar to the TarGz importer except that it looks for .deb packages. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -deb_repo_path which should point to the path on the local file system that contains .deb files

RPM

This is very similar to the TarGz importer except that it looks for .rpm packages. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -rpm_repo_path which should point to the path on the local file system that contains .rpm files

Zip (and other zip-like formats)

This is very similar to the TarGz importer except that it looks for .zip archives. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -zip_repo_path which should point to the path on the local file system that contains .zip files

Optionally, you can also set the following flag(s):

  1. -zip_file_exts comma-separated list of file extensions to treat as zip files, eg. "zip,whl,jar". Default: "zip"

ISO 9660

This is very similar to the TarGz importer except that it looks for .iso file. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -iso_repo_path which should point to the path on the local file system that contains .iso files

Setting up exporters

Setting up Postgres exporter

Postgres exporter allows sending of hashes, file metadata and the actual content of the file to a PostgreSQL instance. For best performance it's advised to set it up on a separate and dedicated machine. If you did set up PostgreSQL while choosing the processing jobs storage you're almost good to go, just run the following command to create the required tables:``` shell cat scripts/CreatePostgresExporterTables.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr

root@kitploit:~
処理ジョブの保存先としてPostgresを選択しなかった場合は、[PostgreSQLストレージのセットアップ](####setting-up-postgresql-storage)セクションの手順1と2に従ってください。

これは現在デフォルトのエクスポーターであり、明示的に有効にする必要はありません。デフォルトでは、実際のファイルの内容はPostgreSQL DBにアップロードされません。これを変更したい場合は、`-upload_payloads true`フラグを使用してください。

Postgresエクスポーターを機能させるには、次のフラグを設定する必要があります: `-exporters postgres -postgresHost <host> -postgresPort <port> -postgresUser <user> -postgresPassword <pass> -postgresDBName <db_name>`

#### GCPエクスポーターのセットアップ

GCPエクスポーターを使用すると、ハッシュやファイルメタデータをGCP Spannerインスタンスに送信できます。必要に応じて、抽出したファイルをGCSバケットにアップロードすることもできます。処理ジョブを保存するためのCloud Spannerをまだセットアップしていない場合は、[Cloud Spannerのセットアップ](####setting-up-cloud-spanner)の手順に従い、最後の手順の代わりに次のコマンドを実行して必要なテーブルを作成してください:``` shell
gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateCloudSpannerExporterTables.ddl

ジョブデータを保存するためにCloud Spannerをすでにセットアップしている場合は、上記のコマンドを実行するだけで準備完了です。

抽出したファイルをGCSにアップロードしたい場合は、GCSバケットを作成する必要があります:

ステップ 1: このバケットのサービスアカウントを管理者にします:``` shell gcloud storage buckets create gs://<gcs_bucket_name> --project=project_name>

root@kitploit:~
ステップ 2: このバケットのサービスアカウントを管理者にします。``` shell
gcloud storage buckets add-iam-policy-binding gs://<gcs_bucket_name> --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/storage.objectAdmin"

このエクスポーターを使用するには、次のフラグを指定する必要があります: -exporters GCP -gcp_exporter_gcs_bucket <gcs_bucket_name>

追加フラグ

  1. -processing_worker_count: このフラグは、並列処理ワーカーの数を制御します。処理はCPUとI/O負荷が高いため、私のテストでは2つのワーカーが最も最適な解決策でした。
  2. -cache_dir: 重複排除に使用されるローカルキャッシュの場所です。/tmp から、例えばhashrを実行するユーザーのホームディレクトリに変更することをお勧めします。
  3. -export: falseに設定すると、hashrはエクスポーターを介さずに結果をディスクに保存します。
  4. -export_path: exportがfalseに設定されている場合、これはサンプルが保存されるフォルダーです。
  5. -reprocess: ジョブテーブルに保存されているsha256値に基づいて、指定されたソースを再処理できます(例えば、エラーが発生した場合など)。
  6. -upload_payloads: 定義されたエクスポーターによってファイルの実際のコンテンツがアップロードされるかどうかを制御します。
  7. -gcp_exporter_worker_count: GCPエクスポーターがデータのアップロードに使用するワーカー/goroutineの数。

これはGoogleが公式にサポートする製品ではありません。

ツールをダウンロード