HashR 允许你基于自己的数据源构建哈希集合。它是一款从输入源(例如原始磁盘镜像、GCE 磁盘镜像、ISO 文件、Windows 更新包、.tar.gz 文件等)中提取文件和哈希的工具。
HashR 由以下组件组成:
当前已实现的导入器:
文件被提取并计算哈希后,结果将传递给导出器。当前已实现的导出器:
你可以选择要运行的导入器,每个导入器有不同的要求。更多相关信息请参阅以下章节。
HashR 需要 Linux 操作系统才能运行,可以是物理机、虚拟机或云主机。以下是推荐的硬件配置要求:
HashR 或许可以在配置较低的机器上运行,但未经全面测试。
要构建 hashr 二进制文件,请运行以下命令:``` shell env GOOS=linux GOARCH=amd64 go build hashr.go
要运行核心 hashR 包的测试,你需要运行 Spanner 模拟器:``` shell
gcloud emulators spanner start
然后,要执行所有测试,请运行以下命令:``` shell go test -timeout 2m ./...
## 设置 HashR
### OSDFIR 基础设施中的 HashR
您可以将 HashR 部署为 [OSDFIR 基础设施项目](https://github.com/google/osdfir-infrastructure/tree/main/charts/hashr)。
此部署将以 kubernetes cronjobs 方式运行 HashR,并可轻松
与 Timesketch 集成。
### 使用 docker 运行 HashR
要在 docker 容器中运行 HashR,请参阅 [docker 专属指南](https://github.com/google/hashr/blob/main/docker/README.md)
### 操作系统配置及所需的第三方工具
HashR 通过使用 Plaso 来处理繁重的工作(解析磁盘镜像、卷、文件系统)。您需要使用以下命令拉取 Plaso docker 容器:``` shell
docker pull log2timeline/plaso
我们还需要在运行 HashR 的机器上安装 7z,WSUS 导入器使用它来递归提取 Windows Update 包:``` shell sudo apt install p7zip-full
你需要允许运行 HashR 的用户通过 sudo 执行某些命令。假设你的用户是 `hashr`,请创建文件 `/etc/sudoers.d/hashr` 并写入:``` shell
hashr ALL = (root) NOPASSWD: /bin/mount,/bin/umount,/sbin/losetup,/bin/rm
运行 HashR 的用户还需要能够运行 docker。假设你的用户是 hashr,请将其添加到 docker 组,如下所示:``` shell
sudo usermod -aG docker hashr
### 为处理任务设置存储
HashR 需要存储有关已处理来源的信息。它还会存储有关处理任务的额外遥测数据:处理时间、提取的文件数等。你可以选择使用:
1. PostgreSQL
1. 云 (GCP) Spanner
#### 设置 PostgreSQL 存储
运行和维护 PostgreSQL 实例的方法有很多,最简单的方法之一是在 Docker 容器中运行它。按照以下步骤设置 PostgreSQL Docker 容器。
步骤 1:拉取 PostgreSQL Docker 镜像。``` shell
docker pull postgres
步骤 2:在后台初始化并运行 PostgreSQL 容器。确保调整密码。``` shell docker run -itd -e POSTGRES_DB=hashr -e POSTGRES_USER=hashr -e POSTGRES_PASSWORD=hashr -p 5432:5432 -v /data:/var/lib/postgresql/data --name hashr_postgresql postgres
步骤 3:创建一个用于存储处理作业的表。``` shell
cat scripts/CreateJobsTable.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr
为了使用 PostgreSQL 存储处理任务的信息,你需要指定以下标志:-storage postgres -postgres_host <host> -postgres_port <port> -postgres_user <user> -postgres_password <pass> -postgres_db <db_name>
你可以选择将处理作业的数据存储在 Cloud Spanner 中。为此,你需要一个 Google Cloud 项目。这种设置的主要优势是,你可以使用 Google Data Studio 轻松创建仪表盘,并直接连接到 Cloud Spanner 实例,以便监控和调试,而无需针对 PostgreSQL 实例运行查询。
假设你的 gcloud 工具已针对目标 hashr GCP 项目完成配置,你需要按照以下步骤启用 Cloud Spanner。
创建 HashR 服务账号:``` shell gcloud iam service-accounts create hashr --description="HashR SA key." --display-name="hashr"
创建服务账号密钥并将其存储在你的主目录中。将 *<project_name>* 设置为你的项目名称。``` shell
gcloud iam service-accounts keys create ~/hashr-sa-private-key.json --iam-account=hashr-sa@<project_name>.iam.gserviceaccount.com
将 GOOGLE_APPLICATION_CREDENTIALS 环境变量指向您的服务账号密钥:``` shell export GOOGLE_APPLICATION_CREDENTIALS=/home/hashr/hashr-sa-private-key.json
创建 Spanner 实例,如有需要,请调整 config 和 processing-units 的值:``` shell
gcloud spanner instances create hashr --config=regional-us-central1 --description="hashr" --processing-units=100
创建 Spanner 数据库:``` shell gcloud spanner databases create hashr --instance=hashr
允许服务账号使用 Spanner 数据库,将 *<project_name>* 设置为你的项目名称:``` shell
gcloud spanner databases add-iam-policy-binding hashr --instance hashr --member="serviceAccount:hashr-sa@<project_name>.iam.gserviceaccount.com" --role="roles/spanner.databaseUser"
更新 Spanner 数据库架构:``` shell gcloud spanner databases ddl update hashr --instance=hashr --ddl-file=scripts/CreateJobsTable.ddl
为了使用 Cloud Spanner 存储有关处理任务的信息,你需要指定以下标志:`-jobStorage cloudspanner -spannerDBPath <spanner_db_path>`
### 设置导入器
要指定要运行的导入器,应使用 `-importers` 标志。可选值:`GCP,targz,windows,wsus,deb,rpm,zip,gcr,iso9660`
#### GCP (Google Cloud Platform)```shell
-importers GCP
此导入器可从 GCP 磁盘映像中提取文件。具体步骤如下:
包含公共 GCP 映像的 GCP 项目列表可在此处找到。要使用此导入器,您需要拥有一个 GCP 项目并执行以下步骤: