Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/google/hashr
Disk ForensicsAnalisi HashInformatica ForenseDigital ForensicsRisposta agli Incidenti
GitHubgoogle/hashr

hashr

Costruisce set di hash forensi di file da immagini disco, pacchetti e archivi su GCP, AWS e sorgenti locali, con deduplicazione ed esportazione verso PostgreSQL/Spanner per i flussi di lavoro DFIR.

Vedi Repository
1309106 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

HashR: Genera il tuo set di hash



Indice

  • HashR: Genera il tuo set di hash
    • Indice
    • Informazioni
    • Requisiti
    • Compilazione del binario HashR ed esecuzione dei test
    • Configurazione di HashR
      • HashR tramite docker
      • Configurazione del sistema operativo & strumenti di terze parti richiesti
      • Configurazione dello storage per le attività di elaborazione
        • Configurazione dello storage PostgreSQL
        • Configurazione di Cloud Spanner
      • Configurazione degli importatori
        • GCP (Google Cloud Platform)
        • AWS (Amazon Web Services)
        • GCR (Google Container Registry)
        • Windows
        • WSUS
        • TarGz
        • Deb
        • RPM
        • Zip (e altri formati simili a zip)
        • ISO 9660
      • Configurazione degli esportatori
        • Configurazione dell'esportatore Postgres
        • Configurazione dell'esportatore GCP
      • Flag aggiuntivi

Informazioni

HashR ti consente di creare i tuoi set di hash basati sulle tue fonti dati. È uno strumento che estrae file e hash dalle fonti di input (ad es. immagine disco raw, immagine disco GCE, file ISO, pacchetto di aggiornamento Windows, file .tar.gz, ecc.).

HashR è composto dai seguenti componenti:

  1. Importatori, responsabili della copia della sorgente nello storage locale e di qualsiasi pre-elaborazione necessaria.
  2. Core, che si occupa dell'estrazione del contenuto dalla sorgente tramite image_export.py (Plaso), della memorizzazione nella cache e della deduplicazione a livello di repository e della preparazione dei file estratti per gli esportatori.
  3. Esportatori, responsabili dell'esportazione di file, metadati e hash verso i sink di dati specificati.

Importatori attualmente implementati:

  1. GCP, che estrae file dalle immagini disco di base di GCP.
  2. Windows, che estrae i file dai supporti di installazione di Windows in formato ISO-13346.
  3. WSUS, che estrae i file dai pacchetti di Windows Update.
  4. GCR, che estrae file dalle immagini container memorizzate in Google Container Registry.
  5. TarGz, che estrae file dagli archivi .tar.gz.
  6. Deb, che estrae file dai pacchetti software Debian.
  7. RPM, che estrae file dai pacchetti software RPM.
  8. Zip, che estrae file dagli archivi .zip (e simili a zip).

Una volta estratti e sottoposti a hashing, i risultati verranno passati agli esportatori. Esportatori attualmente implementati:

  1. PostgreSQL, che carica i dati su un'istanza PostgreSQL.
  2. Cloud Spanner, che carica i dati su un'istanza GCP Spanner.

Puoi scegliere quali importatori eseguire; ognuno ha requisiti diversi. Maggiori informazioni al riguardo sono disponibili nelle sezioni seguenti.

Requisiti

HashR richiede un sistema operativo Linux per funzionare; può trattarsi di una macchina fisica, virtuale o cloud. Di seguito sono riportati i requisiti hardware ottimali:

  1. 8-16 core
  2. 128GB di memoria
  3. 2TB di storage locale veloce (preferibilmente SSD)

HashR può probabilmente funzionare su macchine con specifiche inferiori, ma questo non è stato testato a fondo.

Compilazione del binario HashR ed esecuzione dei test

Per compilare un binario hashr, esegui il seguente comando:``` shell env GOOS=linux GOARCH=amd64 go build hashr.go

root@kitploit:~
Per eseguire i test per il pacchetto core hashR è necessario eseguire l'emulatore Spanner:``` shell
gcloud emulators spanner start

Quindi, per eseguire tutti i test, esegui il seguente comando:``` shell go test -timeout 2m ./...

root@kitploit:~
## Configurazione di HashR

### HashR in OSDFIR Infrastructure

Puoi distribuire HashR come parte del [progetto OSDFIR Infrastructure](https://github.com/google/osdfir-infrastructure/tree/main/charts/hashr)
Questa distribuzione eseguirà HashR come cronjob Kubernetes e consente una facile
integrazione con Timesketch.

### HashR usando docker

Per eseguire HashR in un container docker consulta la [guida specifica per docker](https://github.com/google/hashr/blob/main/docker/README.md)

### Configurazione del SO e strumenti di terze parti richiesti

HashR si occupa del lavoro pesante (analisi di immagini disco, volumi, file system) utilizzando Plaso. Devi eseguire il pull del container docker di Plaso usando il seguente comando:``` shell
docker pull log2timeline/plaso

Abbiamo anche bisogno che 7z, che viene utilizzato dall'importatore WSUS per l'estrazione ricorsiva dei pacchetti di Windows Update, sia installato sulla macchina che esegue HashR:``` shell sudo apt install p7zip-full

root@kitploit:~
Devi consentire all'utente con cui HashR verrà eseguito di eseguire determinati comandi tramite sudo. Supponendo che il tuo utente sia `hashr`, crea un file `/etc/sudoers.d/hashr` e inserisci:``` shell
hashr ALL = (root) NOPASSWD: /bin/mount,/bin/umount,/sbin/losetup,/bin/rm

L'utente sotto cui verrà eseguito HashR dovrà anche poter eseguire docker. Supponendo che il tuo utente sia hashr, aggiungilo al gruppo docker in questo modo:``` shell sudo usermod -aG docker hashr

root@kitploit:~
### Configurazione dello storage per le attività di elaborazione

HashR deve memorizzare informazioni sulle fonti elaborate. Memorizza inoltre telemetria aggiuntiva sulle attività di elaborazione: tempi di elaborazione, numero di file estratti, ecc. Puoi scegliere tra:

1. PostgreSQL
1. Cloud (GCP) Spanner

#### Configurazione dello storage PostgreSQL

Ci sono molti modi per eseguire e mantenere la tua istanza PostgreSQL; uno dei più semplici è eseguirla in un contenitore Docker. Segui i passaggi seguenti per configurare un contenitore Docker PostgreSQL.

Passaggio 1: Esegui il pull dell'immagine docker di PostgreSQL.``` shell
docker pull postgres

Passaggio 2: Inizializza ed esegui il container PostgreSQL in background. Assicurati di modificare la password.``` 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:~
Fase 3: Creare una tabella che verrà utilizzata per memorizzare i processi di elaborazione.``` shell
cat scripts/CreateJobsTable.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr

Per utilizzare PostgreSQL per memorizzare le informazioni sui task di elaborazione è necessario specificare i seguenti flag: -storage postgres -postgres_host <host> -postgres_port <port> -postgres_user <user> -postgres_password <pass> -postgres_db <db_name>

Configurazione di Cloud Spanner

Puoi scegliere di memorizzare i dati relativi ai job di elaborazione in Cloud Spanner. Avrai bisogno di un progetto Google Cloud per farlo. Il principale vantaggio di questa configurazione è che puoi creare facilmente dashboard utilizzando Google Data Studio e connetterti direttamente all'istanza Cloud Spanner, consentendo monitoraggio e debugging senza eseguire query sulla tua istanza PostgreSQL.

Supponendo che il tuo strumento gcloud sia configurato con il tuo progetto GCP di destinazione di HashR, dovrai seguire i passaggi seguenti per abilitare Cloud Spanner.

Crea l'account di servizio HashR:``` shell gcloud iam service-accounts create hashr --description="HashR SA key." --display-name="hashr"

root@kitploit:~
Create service account key and store in your home directory. Set *<project_name>* to your project name.``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com

Punta la variabile d'ambiente GOOGLE_APPLICATION_CREDENTIALS alla tua chiave dell'account di servizio:``` shell export GOOGLE_APPLICATION_CREDENTIALS=/home/hashr/hashr-sa-private-key.json

root@kitploit:~
Crea un'istanza Spanner, modifica la configurazione e il valore di processing-units se necessario:``` shell
gcloud spanner instances create hashr --config=regional-us-central1 --description="hashr" --processing-units=100

Crea un database Spanner:``` shell gcloud spanner databases create hashr --instance=hashr

root@kitploit:~
Consenti all'account di servizio di utilizzare il database Spanner, imposta *<project_name>* al nome del tuo progetto:``` shell
gcloud spanner databases add-iam-policy-binding hashr --instance hashr --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/spanner.databaseUser"

Aggiorna lo schema del database Spanner:``` shell gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateJobsTable.ddl

root@kitploit:~
Per utilizzare Cloud Spanner per archiviare informazioni sulle attività di elaborazione è necessario specificare i seguenti flag: `-jobStorage cloudspanner -spannerDBPath <spanner_db_path>`

### Configurazione degli importatori

Per specificare quale importatore si desidera eseguire, è necessario utilizzare il flag `-importers`. Valori possibili: `GCP,targz,windows,wsus,deb,rpm,zip,gcr,iso9660`

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

Questo importatore può estrarre file dalle immagini dei dischi GCP. L'operazione viene eseguita in pochi passaggi:

  1. Verificare la presenza di nuove immagini nel progetto di destinazione (es. ubuntu-os-cloud)
  2. Copiare l'immagine nuova/non elaborata nel progetto GCP di hashR
  3. Eseguire Cloud Build, che crea una VM temporanea, esegue dd sull'immagine copiata e salva l'output in un file .tar.gz.
  4. Esportare raw_disk.tar.gz nel bucket GCS del progetto GCP di hashR
  5. Copiare raw_disk.tar.gz da GCS all'archivio hashR locale
  6. Estrarre raw_disk.tar.gz e passare l'immagine disco a Plaso

L'elenco dei progetti GCP che contengono immagini GCP pubbliche è disponibile qui. Per utilizzare questo importatore devi disporre di un progetto GCP e seguire questi passaggi:

Passaggio 1: creare l'account di servizio HashR; se è già stato fatto durante la configurazione di Cloud Spanner, passa al passaggio 4.``` shell gcloud iam service-accounts create hashr-sa --description="HashR SA key." --display-name="hashr"

root@kitploit:~
Passaggio 2: crea la chiave dell'account di servizio e salvala nella tua home directory. Assicurati di  impostare *<project_name>* sul nome del tuo progetto:``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com

Passo 3: Imposta la variabile d'ambiente GOOGLE_APPLICATION_CREDENTIALS sulla chiave del tuo account di servizio:``` shell export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json

root@kitploit:~
Passaggio 4: crea un bucket GCS che verrà utilizzato per archiviare le immagini disco in formato .tar.gz, imposta *<project_name>* sul nome del tuo progetto e *<gcs_bucket_name>* sul nome del nuovo bucket GCS del tuo progetto:``` shell
gcloud storage buckets create gs://<gcs_bucket_name> --project=<project_name>

Passaggio 5: rendi l'account di servizio amministratore di questo bucket:``` 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:~
Fase 6: Abilita Compute API:``` shell
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com

Step 7: Crea il ruolo IAM e assegnagli le autorizzazioni richieste:``` 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:~
Passo 8: Associa il ruolo IAM all'account di servizio:``` shell
gcloud projects add-iam-policy-binding <project_name> --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="projects/<project_name>/roles/hashr"

Step 9a: Abilita l'API cloudbuild``` shell gcloud services enable cloudbuild.googleapis.com --project <project_name>

root@kitploit:~
Step 9b: Ottieni il tuo project_number```shell
gcloud projects list --filter="mlegin-testing-things" --format="value(PROJECT_NUMBER)"

Passo 9c: concedi agli account di servizio l'accesso necessario per eseguire Cloud Build, assicurati di modificare i valori <project_name> e <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:~
Per utilizzare questo importatore è necessario specificare i seguenti flag:

1. `-gcp_projects` che è un elenco separato da virgole di progetti cloud contenenti immagini dei dischi. Se desideri importare immagini pubbliche, dai un'occhiata [qui](https://cloud.google.com/compute/docs/images/os-details#general-info)
1. `-hashr_gcp_project` progetto GCP che verrà utilizzato per conservare una copia delle immagini dei dischi per l'elaborazione ed eseguire anche Cloud Build
1. `-hashr_gcs_bucket` bucket GCS che verrà utilizzato per salvare l'output di Cloud Build (immagini dei dischi in formato .tar.gz)

#### AWS

Questo importatore elabora le AMI di proprietà di Amazon e genera hash. L'importatore richiede almeno un worker HashR (un'istanza EC2).

##### Worker HashR AWS

Un worker HashR AWS è un'istanza EC2 in cui viene collegato il volume dell'AMI, viene creato l'archivio del disco e poi caricato su un bucket S3. Si consiglia di avere almeno due worker HashR AWS. Se la tua configurazione utilizza un singolo worker AWS, usa `-processing_worker_count 1`.

Un worker HashR AWS deve soddisfare i seguenti requisiti:

- Le istanze EC2 devono avere il tag `InUse: false`. Se il valore è `true`, il worker non viene utilizzato per l'elaborazione.```shell
aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Tags’
  • Il sistema che esegue hashr deve essere in grado di connettersi via SSH all'istanza EC2 usando:

    • Chiave SSH come descritto in Keyname. ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’
    root@kitploit:~
  • Al FQDN come descritto in PublicDnsName. ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].PublicDnsName’

    root@kitploit:~
  • scripts/hashr-archive deve essere copiato nel worker AWS HashR in /usr/local/sbin/hashr-archive

  • Un account AWS con autorizzazione a caricare file sul bucket HashR. La configurazione e le credenziali AWS devono essere memorizzate nella directory $HOME/.aws/.```shell aws configure

root@kitploit:~
##### Applicazione HashR

Sul sistema che esegue `hashr` è richiesto quanto segue.

- Un account AWS con i permessi per chiamare le seguenti API:
  - EC2
    - AttachVolume
    - CopyImage
    - CreateTags
    - CreateVolume
    - DeleteVolume
    - DescribeAvailabilityZones
    - DescribeImages
    - DescribeInstances
    - DescribeSnapshots
    - DescribeVolumes
    - DetachVolume
  - S3
    - DeleteObject
- Il file di configurazione e le credenziali dell'account AWS devono trovarsi nella directory `$HOME/.aws/`.
- La chiave privata SSH utilizzata per AWS HashR deve trovarsi nella directory `$HOME/.ssh/`. Deve corrispondere al valore di `Keyname` come descritto in `aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’`

##### Configurazione dell'istanza AWS EC2

Questa sezione descrive come creare istanze EC2 da usare con HashR. Idealmente vogliamo due account AWS: `hashr.uploader` e `hashr.worker`.

`hashr.uploader` viene utilizzato sulle istanze EC2 e necessita dei permessi per caricare le immagini disco archiviate nel bucket S3. `scripts/aws/AwsHashrUploaderPolicy.json` contiene un esempio di policy per il bucket S3 `hashr-bucket`.

`hashr.worker` viene utilizzato sul computer che esegue i comandi HashR. L'account necessita dei permessi EC2 e S3. `scripts/aws/AwsHashrWorkerPolicy.json` contiene un esempio di policy per l'account `hashr.worker`.

`hashr_setup.sh` è uno script che aiuta a creare istanze EC2. Modifica `hashr_setup.sh` e controlla e aggiorna i seguenti campi come richiesto:
- `AWS_PROFILE`
- `AWS_REGION`
- `SECURITY_SOURCE_CIDR`
- `WORKER_AWS_CONFIG_FILE`

**Nota**: Il file specificato da `WORKER_AWS_CONFIG_FILE` deve esistere nella directory contenente `hashr_setup.sh`.

**Nota**: `hashr_setup.sh` deve essere eseguito dalla stessa directory in cui si trova `hashr_setup.sh`.

Esegui i seguenti comandi per creare e configurare le istanze 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 Importer Workflow

L'importatore AWS segue i seguenti passaggi di alto livello:

  1. Copia un'AMI Amazon nuova/non elaborata nel progetto HashR
  2. Crea un volume basato sull'AMI copiata
  3. Collega il volume a un worker HashR AWS disponibile
  4. Su un worker HashR AWS a. Crea un archivio del disco (tar.gz) sul worker HashR AWS b. Carica l'archivio del disco nel bucket S3 di HashR
  5. Scarica l'archivio del disco dal bucket S3 di HashR
  6. Estrae l'immagine del disco dall'archivio
  7. Elabora il disco grezzo utilizzando Plaso
HashR AWS Importer Command

Il comando seguente elabora le immagini debian-12 e le archivia in un database PostgreSQL.```shell hashr -storage postgres -exporters postgres -importers aws -aws_bucket aws-hashr-bucket -aws_os_filter debian-12

root@kitploit:~
**Nota**: Amazon Linux (al2023-*) è stato utilizzato come worker durante lo sviluppo dell'importer. Pertanto, il valore predefinito per `-aws_ssh_user` è impostato su `ec2-user`. Una distro diversa potrebbe avere un utente SSH predefinito diverso; usa `-aws_ssh_user` per impostare l'utente SSH appropriato.

#### GCR (Google Container Registry)
Questo importer estrae file da immagini container memorizzate nei repository GCR. Per configurarlo, segui questi passaggi:

Passo 1: Crea l'account di servizio HashR, salta al passo 4 se è già stato fatto durante la configurazione di altri componenti dipendenti da GCP.``` shell
gcloud iam service-accounts create hashr-sa --description="HashR SA key." --display-name="hashr"

Passaggio 2: Crea la chiave dell'account di servizio e salvala nella tua home directory. Assicurati di impostare <project_name> con il nome del tuo progetto:``` shell gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com

root@kitploit:~
Passaggio 3: Imposta la variabile d'ambiente GOOGLE_APPLICATION_CREDENTIALS per puntare alla chiave del tuo account di servizio:``` shell
export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json

Passaggio 4: Concedi alla chiave dell'account di servizio hashR le autorizzazioni necessarie per accedere al repository GCR indicato.``` 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:~
Per utilizzare questo importatore è necessario specificare i seguenti flag:

1. `-gcr_repos` che deve contenere un elenco separato da virgole di repository GCR da cui si desidera importare le immagini dei container.

#### Windows

Questo importatore estrae i file dai supporti di installazione ufficiali di Windows in formato ISO-13346, ad esempio quelli che puoi scaricare dal [sito Web](https://www.microsoft.com/en-gb/software-download/windows10ISO) ufficiale di Microsoft.
Un singolo file ISO può contenere più immagini WIM:

1. Windows10ProEducation
1. Windows10Education
1. Windows10EducationN
1. Windows10ProN
1. ecc.

Questo importatore estrarrà i file da tutte le immagini che riesce a trovare nel file `install.wim`.

#### WSUS

Questo importatore utilizza 7z per estrarre ricorsivamente il contenuto dei pacchetti di Windows Update. Cercherà i file di Windows Update nel bucket GCS fornito; il modo più semplice per aggiornare automaticamente il bucket GCS con i nuovi aggiornamenti è il seguente:

1. Configura una VM GCE che esegue Windows Server nel progetto GCP hashr.
1. Configurala con il ruolo WSUS, seleziona i pacchetti di Windows Update che desideri elaborare
1. Configura WSUS per approvare e scaricare automaticamente gli aggiornamenti nell'archivio locale
1. Imposta un'attività di Windows per sincronizzare automaticamente il contenuto dell'archivio locale con il bucket GCS: `gcloud storage rsync --recursive D:/WSUS/WsusContent gs://hashr-wsus/` (ricorda di modificare i percorsi)
1. Se desideri utilizzare il nome file del pacchetto di aggiornamento (che di solito contiene il numero KB) come ID (per impostazione predefinita è sha1, è così che MS memorizza gli aggiornamenti WSUS) e la sua descrizione, queste informazioni possono essere estratte dal database WID interno di WSUS. Puoi utilizzare il seguente script Power Shell ed eseguirlo come attività:```
#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 operazione esporterà le informazioni rilevanti dal database WSUS, le salverà nel file export.csv e sincronizzerà il contenuto della cartella WSUS con il bucket GCS. L'importatore WSUS verificherà se il file export.csv è presente nella radice del repository WSUS e, in tal caso, lo utilizzerà.

TarGz

Questo è un semplice importatore che esamina i repository e cerca file .tar.gz. Una volta trovato, calcolerà l'hash dei primi e degli ultimi 10MB del file per verificare se è già stato elaborato. Questo viene fatto per evitare di dover calcolare l'hash dell'intero file ogni volta che il repository viene scansionato alla ricerca di nuove fonti. Per utilizzare questo importatore è necessario specificare il/i seguente/i flag:

  1. -targz_repo_path che deve puntare al percorso nel file system locale che contiene i file .tar.gz

Deb

Questo è molto simile all'importatore TarGz, tranne per il fatto che cerca pacchetti .deb. Una volta trovato, calcolerà l'hash dei primi e degli ultimi 10MB del file per verificare se è già stato elaborato. Questo viene fatto per evitare di dover calcolare l'hash dell'intero file ogni volta che il repository viene scansionato alla ricerca di nuove fonti. Per utilizzare questo importatore è necessario specificare il/i seguente/i flag:

  1. -deb_repo_path che deve puntare al percorso nel file system locale che contiene i file .deb

RPM

Questo è molto simile all'importatore TarGz, tranne per il fatto che cerca pacchetti .rpm. Una volta trovato, calcolerà l'hash dei primi e degli ultimi 10MB del file per verificare se è già stato elaborato. Questo viene fatto per evitare di dover calcolare l'hash dell'intero file ogni volta che il repository viene scansionato alla ricerca di nuove fonti. Per utilizzare questo importatore è necessario specificare il/i seguente/i flag:

  1. -rpm_repo_path che deve puntare al percorso nel file system locale che contiene i file .rpm

Zip (e altri formati simili a zip)

Questo è molto simile all'importatore TarGz, tranne per il fatto che cerca archivi .zip. Una volta trovato, calcolerà l'hash dei primi e degli ultimi 10MB del file per verificare se è già stato elaborato. Questo viene fatto per evitare di dover calcolare l'hash dell'intero file ogni volta che il repository viene scansionato alla ricerca di nuove fonti. Per utilizzare questo importatore è necessario specificare il/i seguente/i flag:

  1. -zip_repo_path che deve puntare al percorso nel file system locale che contiene i file .zip

Facoltativamente, puoi anche impostare il/i seguente/i flag:

  1. -zip_file_exts elenco separato da virgole di estensioni di file da trattare come file zip, es. "zip,whl,jar". Predefinito: "zip"

ISO 9660

Questo è molto simile all'importatore TarGz, tranne per il fatto che cerca file .iso. Una volta trovato, calcolerà l'hash dei primi e degli ultimi 10MB del file per verificare se è già stato elaborato. Questo viene fatto per evitare di dover calcolare l'hash dell'intero file ogni volta che il repository viene scansionato alla ricerca di nuove fonti. Per utilizzare questo importatore è necessario specificare il/i seguente/i flag:

  1. -iso_repo_path che deve puntare al percorso nel file system locale che contiene i file .iso

Configurazione degli exporter

Configurazione dell'exporter Postgres

L'exporter Postgres consente l'invio di hash, metadati dei file e il contenuto effettivo del file a un'istanza PostgreSQL. Per ottenere le migliori prestazioni, si consiglia di configurarlo su una macchina separata e dedicata. Se hai configurato PostgreSQL durante la scelta dello storage dei job di elaborazione, sei quasi pronto per partire: esegui semplicemente il seguente comando per creare le tabelle richieste:``` shell cat scripts/CreatePostgresExporterTables.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr

root@kitploit:~
Se non hai scelto Postgres per l'archiviazione dei job di elaborazione, segui i passaggi 1 e 2 della sezione [Configurazione dell'archiviazione PostgreSQL](####setting-up-postgresql-storage).

Questo è attualmente l'exporter predefinito, non è necessario abilitarlo esplicitamente. Per impostazione predefinita, il contenuto dei file effettivi non verrà caricato nel database PostgreSQL; se desideri modificare questo comportamento, usa il flag `-upload_payloads true`.

Affinché l'exporter Postgres funzioni, è necessario impostare i seguenti flag: `-exporters postgres -postgresHost <host> -postgresPort <port> -postgresUser <user> -postgresPassword <pass> -postgresDBName <db_name>`

#### Configurazione dell'exporter GCP

L'exporter GCP consente l'invio di hash e metadati dei file a un'istanza GCP Spanner. Facoltativamente, puoi caricare i file estratti in un bucket GCS. Se non hai configurato Cloud Spanner per archiviare i job di elaborazione, segui i passaggi in [Configurazione di Cloud Spanner](####setting-up-cloud-spanner) e, invece dell'ultimo passaggio, esegui il comando seguente per creare le tabelle necessarie:``` shell
gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateCloudSpannerExporterTables.ddl

Se hai già configurato Cloud Spanner per archiviare i dati dei job, devi solo eseguire il comando sopra e sei pronto a partire.

Se desideri caricare i file estratti su GCS, devi creare il bucket GCS:

Passo 1: Rendi l'account di servizio amministratore di questo bucket:``` shell gcloud storage buckets create gs://<gcs_bucket_name> --project=project_name>

root@kitploit:~
Passaggio 2: Rendi l'account di servizio amministratore di questo bucket:``` 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"

To use this exporter you need to provide the following flags: -exporters GCP -gcp_exporter_gcs_bucket <gcs_bucket_name>

Additional flags

  1. -processing_worker_count: Questo flag controlla il numero di worker di elaborazione paralleli. L'elaborazione è intensiva per CPU e I/O; durante i miei test ho trovato che avere 2 worker è la soluzione più ottimale.
  2. -cache_dir: Posizione della cache locale utilizzata per la deduplicazione; si consiglia di cambiarla da /tmp ad esempio nella home directory dell'utente che eseguirà hashr.
  3. -export: Se impostato su false, hashr salverà i risultati su disco bypassando l'exporter.
  4. -export_path: Se export è impostato su false, questa è la cartella in cui verranno salvati i campioni.
  5. -reprocess: Consente di rielaborare una determinata sorgente (nel caso in cui, ad esempio, abbia generato un errore) in base al valore sha256 memorizzato nella tabella dei job.
  6. -upload_payloads: Controlla se il contenuto effettivo del file verrà caricato dagli exporter definiti.
  7. -gcp_exporter_worker_count: Numero di worker/goroutine che l'exporter GCP utilizzerà per caricare i dati.

This is not an officially supported Google product.

Scarica lo strumento