
Genera conjuntos de hashes forenses de archivos a partir de imágenes de disco, paquetes y archivos comprimidos en GCP, AWS y fuentes locales, con deduplicación y exportación a PostgreSQL/Spanner para flujos de trabajo DFIR.
HashR te permite construir tus propios conjuntos de hashes basados en tus fuentes de datos. Es una herramienta que extrae archivos y hashes de fuentes de entrada (por ejemplo, imágenes de disco crudas, imágenes de disco GCE, archivos ISO, paquetes de actualización de Windows, archivos .tar.gz, etc.).
HashR consta de los siguientes componentes:
Importadores implementados actualmente:
Una vez que los archivos se extraen y se generan los hashes, los resultados se pasan a los exportadores. Exportadores implementados actualmente:
Puedes elegir qué importadores quieres ejecutar; cada uno tiene requisitos diferentes. Puedes encontrar más información sobre esto en las secciones siguientes.
HashR requiere un sistema operativo Linux para ejecutarse; puede ser una máquina física, virtual o en la nube. A continuación se indican los requisitos óptimos de hardware:
HashR probablemente puede ejecutarse en máquinas con especificaciones menores, sin embargo, esto no fue probado a fondo.
Para compilar un binario de hashr, ejecuta el siguiente comando:``` shell env GOOS=linux GOARCH=amd64 go build hashr.go
Para ejecutar las pruebas del paquete principal hashR, necesitas ejecutar el emulador de Spanner:``` shell
gcloud emulators spanner start
A continuación, para ejecutar todas las pruebas, ejecuta el siguiente comando:``` shell go test -timeout 2m ./...
## Configurando HashR
### HashR en OSDFIR Infrastructure
Puede implementar HashR como parte del [proyecto OSDFIR Infrastructure](https://github.com/google/osdfir-infrastructure/tree/main/charts/hashr)
Esta implementación ejecutará HashR como cronjobs de kubernetes y permite una fácil
integración con Timesketch.
### HashR usando docker
Para ejecutar HashR en un contenedor docker, visite la [guía específica de docker](https://github.com/google/hashr/blob/main/docker/README.md)
### Configuración del SO y herramientas de terceros requeridas
HashR se encarga del trabajo pesado (análisis de imágenes de disco, volúmenes y sistemas de archivos) usando Plaso. Debe extraer el contenedor docker de Plaso usando el siguiente comando:``` shell
docker pull log2timeline/plaso
También necesitamos que 7z, que es utilizado por el importador de WSUS para la extracción recursiva de paquetes de Windows Update, esté instalado en la máquina que ejecuta HashR:``` shell sudo apt install p7zip-full
Debes permitir que el usuario bajo el cual se ejecutará HashR pueda ejecutar ciertos comandos mediante sudo. Suponiendo que tu usuario es `hashr`, crea un archivo `/etc/sudoers.d/hashr` y añade:``` shell
hashr ALL = (root) NOPASSWD: /bin/mount,/bin/umount,/sbin/losetup,/bin/rm
El usuario bajo el cual se ejecutará HashR también necesitará poder ejecutar docker. Suponiendo que tu usuario es hashr, agrégalo al grupo docker de esta manera:``` shell
sudo usermod -aG docker hashr
### Configuración del almacenamiento para tareas de procesamiento
HashR necesita almacenar información sobre las fuentes procesadas. También almacena telemetría adicional sobre las tareas de procesamiento: tiempos de procesamiento, número de archivos extraídos, etc. Puedes elegir entre usar:
1. PostgreSQL
1. Cloud (GCP) Spanner
#### Configuración del almacenamiento PostgreSQL
Hay muchas formas de ejecutar y mantener tu instancia de PostgreSQL; una de las más sencillas sería ejecutarla en un contenedor Docker. Sigue los pasos a continuación para configurar un contenedor Docker de PostgreSQL.
Paso 1: Descarga la imagen de Docker de PostgreSQL.``` shell
docker pull postgres
Paso 2: Inicialice y ejecute el contenedor PostgreSQL en segundo plano. Asegúrese de ajustar la contraseña.``` 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
Paso 3: Crea una tabla que se utilizará para almacenar trabajos de procesamiento.``` shell
cat scripts/CreateJobsTable.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr
Para usar PostgreSQL con el fin de almacenar información sobre tareas de procesamiento, debes especificar las siguientes opciones: -storage postgres -postgres_host <host> -postgres_port <port> -postgres_user <user> -postgres_password <pass> -postgres_db <db_name>
Puedes elegir almacenar los datos sobre los trabajos de procesamiento en Cloud Spanner. Para ello necesitarás un proyecto de Google Cloud. La principal ventaja de esta configuración es que puedes crear fácilmente paneles (dashboards) usando Google Data Studio y conectarte directamente a la instancia de Cloud Spanner, lo que permite la supervisión y la depuración sin ejecutar consultas contra tu instancia de PostgreSQL.