Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/google/hashr
FestplattenforensikHash-AnalyseForensikDigitale ForensikIncident Response
GitHubgoogle/hashr

hashr

Erstellt forensische Datei-Hash-Sets aus Datenträger-Images, Paketen und Archiven aus GCP, AWS und lokalen Quellen, mit Deduplizierung und PostgreSQL/Spanner-Export für DFIR-Workflows.

Repository anzeigen
130910vor 6 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

HashR: Erstelle deine eigenen Hash-Sets



Inhaltsverzeichnis

  • HashR: Erstelle deine eigenen Hash-Sets
    • Inhaltsverzeichnis
    • Über
    • Voraussetzungen
    • HashR-Binary erstellen und Tests ausführen
    • HashR einrichten
      • HashR mit Docker
      • Betriebssystemkonfiguration & erforderliche Drittanbieter-Tools
      • Speicher für Verarbeitungsaufgaben einrichten
        • PostgreSQL-Speicher einrichten
        • Cloud Spanner einrichten
      • Importeure einrichten
        • GCP (Google Cloud Platform)
        • AWS (Amazon Web Services)
        • GCR (Google Container Registry)
        • Windows
        • WSUS
        • TarGz
        • Deb
        • RPM
        • Zip (und andere zip-ähnliche Formate)
        • ISO 9660
      • Exporteure einrichten
        • Postgres-Exporteur einrichten
        • GCP-Exporteur einrichten
      • Zusätzliche Flags

Über

HashR ermöglicht es dir, eigene Hash-Sets basierend auf deinen Datenquellen zu erstellen. Es ist ein Tool, das Dateien und Hashes aus Eingabequellen extrahiert (z. B. rohes Festplatten-Image, GCE-Festplatten-Image, ISO-Datei, Windows-Update-Paket, .tar.gz-Datei usw.).

HashR besteht aus den folgenden Komponenten:

  1. Importeure, die dafür verantwortlich sind, die Quelle in den lokalen Speicher zu kopieren und alle erforderlichen Vorverarbeitungsschritte durchzuführen.
  2. Core, der sich um das Extrahieren des Inhalts aus der Quelle mit image_export.py (Plaso), Caching und Deduplizierung auf Repository-Ebene sowie die Vorbereitung der extrahierten Dateien für die Exporteure kümmert.
  3. Exporteure, die dafür verantwortlich sind, Dateien, Metadaten und Hashes an die angegebenen Daten-Sinks zu exportieren.

Derzeit implementierte Importeure:

  1. GCP, extrahiert Dateien aus Basis-GCP-Festplatten-Images
  2. Windows, extrahiert Dateien aus Windows-Installationsmedien im ISO-13346-Format.
  3. WSUS, extrahiert Dateien aus Windows-Update-Paketen.
  4. GCR, extrahiert Dateien aus Container-Images, die in der Google Container Registry gespeichert sind.
  5. TarGz, extrahiert Dateien aus .tar.gz-Archiven.
  6. Deb, extrahiert Dateien aus Debian-Softwarepaketen.
  7. RPM, extrahiert Dateien aus RPM-Softwarepaketen.
  8. Zip, extrahiert Dateien aus .zip- (und zip-ähnlichen) Archiven.

Sobald Dateien extrahiert und gehasht wurden, werden die Ergebnisse an die Exporteure übergeben. Derzeit implementierte Exporteure:

  1. PostgreSQL, lädt die Daten in eine PostgreSQL-Instanz hoch.
  2. Cloud Spanner, lädt die Daten in eine GCP-Spanner-Instanz hoch.

Du kannst auswählen, welche Importeure du ausführen möchtest; jeder hat unterschiedliche Anforderungen. Mehr dazu findest du in den folgenden Abschnitten.

Voraussetzungen

HashR benötigt ein Linux-Betriebssystem, um ausgeführt zu werden. Dies kann eine physische, virtuelle oder Cloud-Maschine sein. Im Folgenden sind die optimalen Hardware-Anforderungen aufgeführt:

  1. 8-16 Kerne
  2. 128 GB Arbeitsspeicher
  3. 2 TB schneller lokaler Speicher (SSDs bevorzugt)

HashR läuft wahrscheinlich auch auf Maschinen mit geringeren Spezifikationen, dies wurde jedoch nicht gründlich getestet.

HashR-Binary erstellen und Tests ausführen

Um eine HashR-Binary zu erstellen, führe den folgenden Befehl aus:``` shell env GOOS=linux GOARCH=amd64 go build hashr.go

root@kitploit:~
Um Tests für das Kernpaket hashR auszuführen, müssen Sie den Spanner-Emulator starten:``` shell
gcloud emulators spanner start

Um dann alle Tests auszuführen, führen Sie den folgenden Befehl aus:``` shell go test -timeout 2m ./...

root@kitploit:~
## HashR einrichten

### HashR in OSDFIR Infrastructure

Sie können HashR als Teil des [OSDFIR-Infrastructure-Projekts](https://github.com/google/osdfir-infrastructure/tree/main/charts/hashr) bereitstellen. Diese Bereitstellung führt HashR als Kubernetes-Cronjobs aus und ermöglicht eine einfache
Integration mit Timesketch.

### HashR mit Docker

Um HashR in einem Docker-Container auszuführen, besuchen Sie den [Docker-spezifischen Leitfaden](https://github.com/google/hashr/blob/main/docker/README.md).

### OS-Konfiguration und erforderliche Drittanbieter-Tools

HashR übernimmt die schwere Arbeit (Parsen von Datenträger-Images, Volumes, Dateisystemen) mithilfe von Plaso. Sie müssen den Plaso-Docker-Container mit dem folgenden Befehl abrufen:``` shell
docker pull log2timeline/plaso

Zudem muss 7z, das vom WSUS importer für die rekursive Extraktion von Windows-Update-Paketen verwendet wird, auf dem Rechner installiert sein, auf dem HashR läuft:``` shell sudo apt install p7zip-full

root@kitploit:~
Sie müssen dem Benutzer, unter dem HashR ausgeführt wird, erlauben, bestimmte Befehle über sudo auszuführen. Angenommen, Ihr Benutzer ist `hashr`, erstellen Sie eine Datei `/etc/sudoers.d/hashr` und fügen Sie Folgendes ein:``` shell
hashr ALL = (root) NOPASSWD: /bin/mount,/bin/umount,/sbin/losetup,/bin/rm

Der Benutzer, unter dem HashR ausgeführt wird, muss auch in der Lage sein, Docker auszuführen. Angenommen, Ihr Benutzer ist hashr, fügen Sie ihn wie folgt zur Docker-Gruppe hinzu:``` shell sudo usermod -aG docker hashr

root@kitploit:~
### Einrichtung des Speichers für Verarbeitungsaufgaben

HashR muss Informationen über verarbeitete Quellen speichern. Außerdem speichert es zusätzliche Telemetriedaten zu Verarbeitungsaufgaben: Verarbeitungszeiten, Anzahl der extrahierten Dateien usw. Sie können zwischen folgenden Optionen wählen:

1. PostgreSQL
1. Cloud (GCP) Spanner

#### Einrichten des PostgreSQL-Speichers

Es gibt viele Möglichkeiten, Ihre PostgreSQL-Instanz zu betreiben und zu warten. Eine der einfachsten Möglichkeiten ist der Betrieb in einem Docker-Container. Befolgen Sie die folgenden Schritte, um einen PostgreSQL-Docker-Container einzurichten.

Schritt 1: Ziehen Sie das PostgreSQL-Docker-Image.``` shell
docker pull postgres

Schritt 2: Initialisieren und starten Sie den PostgreSQL-Container im Hintergrund. Achten Sie darauf, das Passwort anzupassen.``` 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:~
Schritt 3: Erstellen Sie eine Tabelle, die zum Speichern von Verarbeitungsaufträgen verwendet wird.``` shell
cat scripts/CreateJobsTable.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr

Um PostgreSQL zum Speichern von Informationen über Verarbeitungsaufgaben zu verwenden, müssen Sie die folgenden Flags angeben: -storage postgres -postgres_host <host> -postgres_port <port> -postgres_user <user> -postgres_password <pass> -postgres_db <db_name>

Einrichten von Cloud Spanner

Sie können wählen, die Daten über Verarbeitungsaufträge in Cloud Spanner zu speichern. Dazu benötigen Sie ein Google Cloud-Projekt. Der Hauptvorteil dieser Einrichtung ist, dass Sie mithilfe von Google Data Studio problemlos Dashboards erstellen und direkt eine Verbindung zur Cloud-Spanner-Instanz herstellen können, was Überwachung und Debugging ermöglicht, ohne Abfragen gegen Ihre PostgreSQL-Instanz ausführen zu müssen.

Angenommen, Ihr gcloud-Tool ist mit Ihrem Ziel-HashR-GCP-Projekt konfiguriert, müssen Sie die folgenden Schritte ausführen, um Cloud Spanner zu aktivieren.

HashR-Dienstkonto erstellen:``` shell gcloud iam service-accounts create hashr --description="HashR SA key." --display-name="hashr"

root@kitploit:~
Erstellen Sie einen Service-Account-Schlüssel und speichern Sie ihn in Ihrem Home-Verzeichnis. Setzen Sie *<project_name>* auf Ihren Projektnamen.``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com

Setzen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf Ihren Service-Account-Schlüssel:``` shell export GOOGLE_APPLICATION_CREDENTIALS=/home/hashr/hashr-sa-private-key.json

root@kitploit:~
Erstellen Sie eine Spanner-Instanz und passen Sie bei Bedarf den config- und den processing-units-Wert an:``` shell
gcloud spanner instances create hashr --config=regional-us-central1 --description="hashr" --processing-units=100

Spanner-Datenbank erstellen:``` shell gcloud spanner databases create hashr --instance=hashr

root@kitploit:~
Erlauben Sie dem Dienstkonto die Verwendung der Spanner-Datenbank und setzen Sie *<project_name>* auf Ihren Projektnamen:``` 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-Datenbankschema aktualisieren:``` shell gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateJobsTable.ddl

root@kitploit:~
Um Cloud Spanner zum Speichern von Informationen über Verarbeitungsaufgaben zu verwenden, müssen Sie die folgenden Flags angeben: `-jobStorage cloudspanner -spannerDBPath <spanner_db_path>`

### Setting up importers

Um anzugeben, welchen Importer Sie ausführen möchten, sollten Sie das Flag `-importers` verwenden. Mögliche Werte: `GCP,targz,windows,wsus,deb,rpm,zip,gcr,iso9660`

#### GCP (Google Cloud Platform)```shell
-importers GCP

Dieser Importer kann Dateien aus GCP-Disk-Images extrahieren. Dies erfolgt in wenigen Schritten:

  1. Prüfen auf neue Images im Zielprojekt (z. B. ubuntu-os-cloud)
  2. Kopieren des neuen/unverarbeiteten Images in das hashR-GCP-Projekt
  3. Cloud Build ausführen, das eine temporäre VM erstellt, dd auf dem kopierten Image ausführt und die Ausgabe in einer .tar.gz-Datei speichert.
  4. raw_disk.tar.gz in den GCS-Bucket im hashR-GCP-Projekt exportieren
  5. raw_disk.tar.gz von GCS in den lokalen hashR-Speicher kopieren
  6. raw_disk.tar.gz extrahieren und das Disk-Image an Plaso übergeben

Eine Liste von GCP-Projekten mit öffentlichen GCP-Images finden Sie hier. Um diesen Importer nutzen zu können, benötigen Sie ein GCP-Projekt und müssen die folgenden Schritte ausführen:

Schritt 1: HashR-Dienstkonto erstellen. Falls dies bereits beim Einrichten von Cloud Spanner erfolgt ist, fahren Sie mit Schritt 4 fort.``` shell gcloud iam service-accounts create hashr-sa --description="HashR SA key." --display-name="hashr"

root@kitploit:~
Schritt 2: Erstellen Sie einen Dienstkontoschlüssel und speichern Sie ihn in Ihrem Home-Verzeichnis. Stellen Sie sicher, dass Sie *<project_name>* auf Ihren Projektnamen setzen:``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com

Schritt 3: Setzen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf Ihren Dienstkonto-Schlüssel:``` shell export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json

root@kitploit:~
Schritt 4: Erstellen Sie einen GCS-Bucket zum Speichern von Disk-Images im .tar.gz-Format, setzen Sie *<project_name>* auf Ihren Projektnamen und  *<gcs_bucket_name>* auf den Namen Ihres neuen GCS-Buckets:``` shell
gcloud storage buckets create gs://<gcs_bucket_name> --project=<project_name>

Schritt 5: Machen Sie das Dienstkonto zum Administrator dieses Buckets:``` 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:~
Schritt 6: Compute API aktivieren:``` shell
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com

Schritt 7: IAM-Rolle erstellen und ihr die erforderlichen Berechtigungen zuweisen:``` 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:~
Schritt 8: IAM-Rolle an das Dienstkonto binden:``` shell
gcloud projects add-iam-policy-binding <project_name> --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="projects/<project_name>/roles/hashr"

Schritt 9a: Aktivieren Sie die cloudbuild API``` shell gcloud services enable cloudbuild.googleapis.com --project <project_name>

root@kitploit:~
Schritt 9b: Rufe deine project_number ab```shell
gcloud projects list --filter="mlegin-testing-things" --format="value(PROJECT_NUMBER)"

Schritt 9c: Gewähren Sie den Dienstkonten den Zugriff, der zum Ausführen von Cloud Build erforderlich ist, und stellen Sie sicher, dass Sie die Werte <project_name> und <project_number> ändern:``` 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:~
Um diesen Importer zu verwenden, musst du die folgenden Flags angeben:

1. `-gcp_projects` eine durch Kommas getrennte Liste von Cloud-Projekten, die Datenträgerimages enthalten. Wenn du öffentliche Images importieren möchtest, wirf einen Blick [hier](https://cloud.google.com/compute/docs/images/os-details#general-info).
1. `-hashr_gcp_project` GCP-Projekt, das verwendet wird, um eine Kopie der Datenträgerimages für die Verarbeitung zu speichern und auch Cloud Build auszuführen
1. `-hashr_gcs_bucket` GCS-Bucket, der verwendet wird, um die Ausgabe von Cloud Build zu speichern (Datenträgerimages im `.tar.gz`-Format)

#### AWS

Dieser Importer verarbeitet Amazon-eigene AMIs und erzeugt Hashes. Der Importer benötigt mindestens einen HashR-Worker (eine EC2-Instanz).

##### AWS HashR-Worker

Der AWS-HashR-Worker ist eine EC2-Instanz, an die das Volume der AMI angehängt wird, ein Datenträgerarchiv erstellt und anschließend in einen S3-Bucket hochgeladen wird. Es wird empfohlen, mindestens zwei AWS-HashR-Worker zu haben. Wenn dein Setup einen einzelnen AWS-Worker verwendet, verwende `-processing_worker_count 1`.

Ein AWS-HashR-Worker muss die folgenden Anforderungen erfüllen:

- EC2-Instanzen müssen das Tag `InUse: false` haben. Wenn der Wert `true` ist, wird der Worker nicht für die Verarbeitung verwendet.```shell
aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Tags’
  • Das System, auf dem hashr läuft, muss per SSH auf die EC2-Instanz zugreifen können, und zwar mit:

    • SSH-Schlüssel wie in Keyname beschrieben. ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’
    root@kitploit:~
  • Zu FQDN, wie in PublicDnsName beschrieben. ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].PublicDnsName’

    root@kitploit:~
  • Das Skript scripts/hashr-archive muss auf den AWS-HashR-Worker nach /usr/local/sbin/hashr-archive kopiert werden.

  • Ein AWS-Konto mit der Berechtigung, Dateien in den HashR-Bucket hochzuladen. Die AWS-Konfiguration und die Anmeldedaten sollten im Verzeichnis $HOME/.aws/ gespeichert werden.```shell aws configure

root@kitploit:~
##### HashR-Anwendung

Auf dem System, auf dem `hashr` ausgeführt wird, ist Folgendes erforderlich.

- Ein AWS-Konto mit Berechtigungen zum Aufrufen der folgenden APIs:
  - EC2
    - AttachVolume
    - CopyImage
    - CreateTags
    - CreateVolume
    - DeleteVolume
    - DescribeAvailabilityZones
    - DescribeImages
    - DescribeInstances
    - DescribeSnapshots
    - DescribeVolumes
    - DetachVolume
  - S3
    - DeleteObject
- Die AWS-Kontokonfiguration und die Credential-Datei müssen sich im Verzeichnis `$HOME/.aws/` befinden.
- Der für AWS HashR verwendete SSH-Private-Key muss sich im Verzeichnis `$HOME/.ssh/` befinden. Er muss mit dem Wert von `Keyname` übereinstimmen, wie in `aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’` beschrieben.

##### AWS-EC2-Instanz einrichten

Dieser Abschnitt beschreibt, wie EC2-Instanzen für die Verwendung mit HashR erstellt werden. Idealerweise benötigen wir zwei AWS-Konten: `hashr.uploader` und `hashr.worker`.

`hashr.uploader` wird auf EC2-Instanzen verwendet und benötigt Berechtigungen, um archivierte Datenträger-Images in den S3-Bucket hochzuladen. `scripts/aws/AwsHashrUploaderPolicy.json` enthält eine Beispielrichtlinie für den S3-Bucket `hashr-bucket`.

`hashr.worker` wird auf dem Computer verwendet, auf dem HashR-Befehle ausgeführt werden. Das Konto benötigt EC2- und S3-Berechtigungen. `scripts/aws/AwsHashrWorkerPolicy.json` enthält eine Beispielrichtlinie für das `hashr.worker`-Konto.

`hashr_setup.sh` ist ein Skript, das beim Erstellen von EC2-Instanzen hilft. Bearbeiten Sie `hashr_setup.sh` und überprüfen und aktualisieren Sie die folgenden Felder nach Bedarf:
- `AWS_PROFILE`
- `AWS_REGION`
- `SECURITY_SOURCE_CIDR`
- `WORKER_AWS_CONFIG_FILE`

**Hinweis**: Die unter `WORKER_AWS_CONFIG_FILE` angegebene Datei muss im Verzeichnis mit `hashr_setup.sh` vorhanden sein.

**Hinweis**: `hashr_setup.sh` muss aus demselben Verzeichnis ausgeführt werden, in dem sich `hashr_setup.sh` befindet.

Führen Sie die folgenden Befehle aus, um die EC2-Instanzen zu erstellen und einzurichten.```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 Importer Workflow

Der AWS-Importer führt die folgenden Schritte auf hoher Ebene aus:

  1. Kopiert eine neue/unverarbeitete Amazon-eigene AMI in das HashR-Projekt
  2. Erstellt ein Volume basierend auf der kopierten AMI
  3. Hängt das Volume an einen verfügbaren AWS-HashR-Worker an
  4. Auf einem AWS-HashR-Worker a. Erstellt ein Datenträgerarchiv (tar.gz) auf dem AWS-HashR-Worker b. Lädt das Datenträgerarchiv in den HashR-S3-Bucket hoch
  5. Lädt das Datenträgerarchiv vom HashR-S3-Bucket herunter
  6. Entpackt das Datenträgerabbild
  7. Verarbeitet den Rohdatenträger mit Plaso
HashR AWS Importer-Befehl

Der folgende Befehl verarbeitet debian-12-Images und speichert sie in einer PostgreSQL-Datenbank.```shell hashr -storage postgres -exporters postgres -importers aws -aws_bucket aws-hashr-bucket -aws_os_filter debian-12

root@kitploit:~
**Hinweis**: Beim Entwickeln des Importers wurde Amazon Linux (al2023-*) als Worker verwendet. Daher ist der Standardwert für `-aws_ssh_user` auf `ec2-user` gesetzt. Eine andere Distribution kann einen anderen Standard-SSH-Benutzer haben. Verwenden Sie `-aws_ssh_user`, um den entsprechenden SSH-Benutzer festzulegen.

#### GCR (Google Container Registry)
Dieser Importer extrahiert Dateien aus Container-Images, die in GCR-Repositories gespeichert sind. Um ihn einzurichten, gehen Sie folgendermaßen vor:

Schritt 1: Erstellen Sie ein HashR-Dienstkonto. Springen Sie zu Schritt 4, wenn dies bereits beim Einrichten anderer GCP-abhängiger Komponenten erledigt wurde.``` shell
gcloud iam service-accounts create hashr-sa --description="HashR SA key." --display-name="hashr"

Schritt 2: Erstellen Sie einen Dienstkontoschlüssel und speichern Sie ihn in Ihrem Home-Verzeichnis. Stellen Sie sicher, dass Sie <project_name> auf Ihren Projektnamen setzen:``` shell gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com

root@kitploit:~
Schritt 3: Setzen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf Ihren Servicekontoschlüssel:``` shell
export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json

Schritt 4: Erteilen Sie dem hashR-Dienstkontoschlüssel die erforderlichen Berechtigungen für den Zugriff auf das angegebene GCR-Repository.``` 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:~
Um diesen Importer zu verwenden, müssen Sie die folgenden Flags angeben:

1. `-gcr_repos`, das eine durch Kommas getrennte Liste von GCR-Repositories enthalten sollte, aus denen Sie die Container-Images importieren möchten.

#### Windows

Dieser Importer extrahiert Dateien aus offiziellen Windows-Installationsmedien im ISO-13346-Format, z. B. denjenigen, die Sie von der offiziellen Microsoft-[Website](https://www.microsoft.com/en-gb/software-download/windows10ISO) herunterladen können.
Eine ISO-Datei kann mehrere WIM-Images enthalten:

1. Windows10ProEducation
1. Windows10Education
1. Windows10EducationN
1. Windows10ProN
1. usw.

Dieser Importer extrahiert Dateien aus allen Images, die er in der Datei `install.wim` finden kann.

#### WSUS

Dieser Importer verwendet 7z, um den Inhalt von Windows-Update-Paketen rekursiv zu extrahieren. Er sucht nach Windows-Update-Dateien im angegebenen GCS-Bucket. Der einfachste Weg, den GCS-Bucket automatisch mit neuen Updates zu aktualisieren, wäre Folgendes:

1. Richten Sie eine GCE-VM ein, auf der Windows Server im GCP-Projekt hashr läuft.
1. Konfigurieren Sie sie mit der WSUS-Rolle und wählen Sie die Windows-Update-Pakete aus, die Sie verarbeiten möchten.
1. Konfigurieren Sie WSUS so, dass Updates automatisch genehmigt und in den lokalen Speicher heruntergeladen werden.
1. Richten Sie eine Windows-Aufgabe ein, die den Inhalt des lokalen Speichers automatisch mit dem GCS-Bucket synchronisiert: `gcloud storage rsync --recursive D:/WSUS/WsusContent gs://hashr-wsus/` (denken Sie daran, die Pfade anzupassen).
1. Wenn Sie den Dateinamen des Update-Pakets (der normalerweise die KB-Nummer enthält) als ID verwenden möchten (standardmäßig ist es sha1, so speichert MS WSUS-Updates) und dessen Beschreibung, kann dies aus der internen WID-WSUS-Datenbank exportiert werden. Sie können das folgende PowerShell-Skript verwenden und es als Aufgabe ausführen:```
#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/

Dadurch werden die relevanten Informationen aus der WSUS-DB exportiert, in der Datei export.csv gespeichert und der Inhalt des WSUS-Ordners mit dem GCS-Bucket synchronisiert. Der WSUS-Importer prüft, ob die Datei export.csv im Stammverzeichnis des WSUS-Repos vorhanden ist; wenn ja, verwendet er sie.

TarGz

Dies ist ein einfacher Importer, der Repositories durchläuft und nach .tar.gz-Dateien sucht. Sobald eine Datei gefunden wird, werden die ersten und letzten 10 MB der Datei gehasht, um zu prüfen, ob sie bereits verarbeitet wurde. Dies dient dazu, ein Hashing der gesamten Datei bei jedem Scan des Repositories nach neuen Quellen zu vermeiden. Um diesen Importer zu verwenden, musst du die folgenden Flags angeben:

  1. -targz_repo_path, das auf den Pfad im lokalen Dateisystem zeigen sollte, der .tar.gz-Dateien enthält

Deb

Dies ist dem TarGz-Importer sehr ähnlich, mit dem Unterschied, dass nach .deb-Paketen gesucht wird. Sobald eines gefunden wird, werden die ersten und letzten 10 MB der Datei gehasht, um zu prüfen, ob es bereits verarbeitet wurde. Dies dient dazu, ein Hashing der gesamten Datei bei jedem Scan des Repositories nach neuen Quellen zu vermeiden. Um diesen Importer zu verwenden, musst du die folgenden Flags angeben:

  1. -deb_repo_path, das auf den Pfad im lokalen Dateisystem zeigen sollte, der .deb-Dateien enthält

RPM

Dies ist dem TarGz-Importer sehr ähnlich, mit dem Unterschied, dass nach .rpm-Paketen gesucht wird. Sobald eines gefunden wird, werden die ersten und letzten 10 MB der Datei gehasht, um zu prüfen, ob es bereits verarbeitet wurde. Dies dient dazu, ein Hashing der gesamten Datei bei jedem Scan des Repositories nach neuen Quellen zu vermeiden. Um diesen Importer zu verwenden, musst du die folgenden Flags angeben:

  1. -rpm_repo_path, das auf den Pfad im lokalen Dateisystem zeigen sollte, der .rpm-Dateien enthält

Zip (und andere zip-ähnliche Formate)

Dies ist dem TarGz-Importer sehr ähnlich, mit dem Unterschied, dass nach .zip-Archiven gesucht wird. Sobald eines gefunden wird, werden die ersten und letzten 10 MB der Datei gehasht, um zu prüfen, ob es bereits verarbeitet wurde. Dies dient dazu, ein Hashing der gesamten Datei bei jedem Scan des Repositories nach neuen Quellen zu vermeiden. Um diesen Importer zu verwenden, musst du die folgenden Flags angeben:

  1. -zip_repo_path, das auf den Pfad im lokalen Dateisystem zeigen sollte, der .zip-Dateien enthält

Optional kannst du außerdem die folgenden Flags setzen:

  1. -zip_file_exts – Kommagetrennte Liste von Dateiendungen, die als Zip-Dateien behandelt werden sollen, z. B. „zip,whl,jar“. Standard: „zip“

ISO 9660

Dies ist dem TarGz-Importer sehr ähnlich, mit dem Unterschied, dass nach .iso-Dateien gesucht wird. Sobald eine gefunden wird, werden die ersten und letzten 10 MB der Datei gehasht, um zu prüfen, ob sie bereits verarbeitet wurde. Dies dient dazu, ein Hashing der gesamten Datei bei jedem Scan des Repositories nach neuen Quellen zu vermeiden. Um diesen Importer zu verwenden, musst du die folgenden Flags angeben:

  1. -iso_repo_path, das auf den Pfad im lokalen Dateisystem zeigen sollte, der .iso-Dateien enthält

Einrichten der Exporter

Einrichten des Postgres-Exporters

Der Postgres-Exporter ermöglicht das Senden von Hashes, Dateimetadaten und dem tatsächlichen Inhalt der Datei an eine PostgreSQL-Instanz. Für die beste Leistung wird empfohlen, ihn auf einer separaten und dedizierten Maschine einzurichten. Wenn du PostgreSQL bei der Auswahl des Speichers für die Verarbeitungsaufträge eingerichtet hast, bist du fast startklar. Führe einfach den folgenden Befehl aus, um die erforderlichen Tabellen zu erstellen:``` shell cat scripts/CreatePostgresExporterTables.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr

root@kitploit:~
Falls du PostgreSQL nicht für die Speicherung von Verarbeitungsaufträgen gewählt hast, folge den Schritten 1 und 2 aus dem Abschnitt [Einrichtung des PostgreSQL-Speichers](####setting-up-postgresql-storage).

Dies ist derzeit der Standard-Exporter; du musst ihn nicht explizit aktivieren. Standardmäßig werden die Inhalte der eigentlichen Dateien nicht in die PostgreSQL-Datenbank hochgeladen. Wenn du das ändern möchtest, verwende das Flag `-upload_payloads true`.

Damit der Postgres-Exporter funktioniert, musst du die folgenden Flags setzen: `-exporters postgres -postgresHost <host> -postgresPort <port> -postgresUser <user> -postgresPassword <pass> -postgresDBName <db_name>`

#### Einrichten des GCP-Exporters

Der GCP-Exporter ermöglicht das Senden von Hashes und Dateimetadaten an eine GCP-Spanner-Instanz. Optional kannst du die extrahierten Dateien in einen GCS-Bucket hochladen. Wenn du Cloud Spanner noch nicht für die Speicherung von Verarbeitungsaufträgen eingerichtet hast, folge den Schritten unter [Einrichtung von Cloud Spanner](####setting-up-cloud-spanner) und führe anstelle des letzten Schritts den folgenden Befehl aus, um die erforderlichen Tabellen zu erstellen:``` shell
gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateCloudSpannerExporterTables.ddl

Wenn Sie bereits Cloud Spanner für die Speicherung von Auftragsdaten eingerichtet haben, müssen Sie nur den obigen Befehl ausführen und schon kann es losgehen.

Wenn Sie die extrahierten Dateien in GCS hochladen möchten, müssen Sie den GCS-Bucket erstellen:

Schritt 1: Machen Sie das Dienstkonto zum Administrator dieses Buckets:``` shell gcloud storage buckets create gs://<gcs_bucket_name> --project=project_name>

root@kitploit:~
Schritt 2: Machen Sie das Dienstkonto zum Administrator dieses Buckets:``` 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"

Um diesen Exporter zu verwenden, müssen die folgenden Flags angegeben werden: -exporters GCP -gcp_exporter_gcs_bucket <gcs_bucket_name>

Zusätzliche Flags

  1. -processing_worker_count: Dieses Flag steuert die Anzahl der parallelen Verarbeitungs-Worker. Die Verarbeitung ist CPU- und I/O-intensiv; in meinen Tests habe ich festgestellt, dass 2 Worker die optimale Lösung sind.
  2. -cache_dir: Speicherort des lokalen Caches, der für die Deduplizierung verwendet wird. Es wird empfohlen, diesen von /tmp beispielsweise in das Home-Verzeichnis des Benutzers zu ändern, der hashr ausführen wird.
  3. -export: Wenn dies auf false gesetzt ist, speichert hashr die Ergebnisse auf der Festplatte und umgeht dabei den Exporter.
  4. -export_path: Wenn export auf false gesetzt ist, ist dies der Ordner, in dem die Samples gespeichert werden.
  5. -reprocess: Ermöglicht die erneute Verarbeitung einer bestimmten Quelle (falls sie z. B. fehlgeschlagen ist) anhand des in der Jobs-Tabelle gespeicherten sha256-Werts.
  6. -upload_payloads: Steuert, ob der tatsächliche Inhalt der Datei von den definierten Exporteuren hochgeladen wird.
  7. -gcp_exporter_worker_count: Anzahl der Worker/Goroutinen, die der GCP-Exporter zum Hochladen der Daten verwendet.

Dies ist kein offiziell unterstütztes Google-Produkt.

Tool herunterladen