Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
hashr — يبني مجموعات تجزئة ملفات جنائية من صور الأقراص والحزم والأرشيفات عبر GCP وAWS والمصادر المحلية، مع إزالة التكرار والتصدير إلى PostgreSQL/Spanner لسير عمل DFIR. | Kitploit
أدوات/GitHubGitHub/google/hashr
تحليل الأقراص الجنائيةتحليل التجزئةالتحقيق الجنائي الرقميالتحاليل الرقمية الجنائيةالاستجابة للحوادث
GitHubgoogle/hashr

hashr

يبني مجموعات تجزئة ملفات جنائية من صور الأقراص والحزم والأرشيفات عبر GCP وAWS والمصادر المحلية، مع إزالة التكرار والتصدير إلى PostgreSQL/Spanner لسير عمل DFIR.

عرض المستودع
130910منذ 6 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

HashR: توليد مجموعة الهاشات الخاصة بك



جدول المحتويات

  • HashR: توليد مجموعة الهاشات الخاصة بك
    • جدول المحتويات
    • نبذة
    • المتطلبات
    • بناء ثنائي HashR وتشغيل الاختبارات
    • إعداد HashR
      • HashR باستخدام docker
      • إعداد نظام التشغيل والأدوات الخارجية المطلوبة
      • إعداد التخزين لمهام المعالجة
        • إعداد تخزين PostgreSQL
        • إعداد Cloud Spanner
      • إعداد المستوردين
        • GCP (منصة جوجل السحابية)
        • AWS
        • GCR (سجل حاويات جوجل)
        • Windows
        • WSUS
        • TarGz
        • Deb
        • RPM
        • Zip (وغيرها من الصيغ المشابهة لـ Zip)
        • ISO 9660
      • إعداد المُصدِّرين
        • إعداد مُصدِّر Postgres
        • إعداد مُصدِّر GCP
      • خيارات إضافية

نبذة

يتيح لك HashR بناء مجموعات الهاش الخاصة بك استنادًا إلى مصادر بياناتك. إنها أداة تستخرج الملفات وقيم الهاش من مصادر الإدخال (مثل صورة قرص خام، صورة قرص GCE، ملف ISO، حزمة تحديث ويندوز، ملف .tar.gz، إلخ).

يتكون HashR من المكوّنات التالية:

  1. المستوردون، المسؤولون عن نسخ المصدر إلى التخزين المحلي وإجراء أي معالجة مسبقة مطلوبة.
  2. النواة، التي تتولى استخراج المحتوى من المصدر باستخدام image_export.py (Plaso)، والتخزين المؤقت، وإزالة التكرار على مستوى المستودع، وتحضير الملفات المستخرجة للمُصدِّرين.
  3. المُصدِّرون، المسؤولون عن تصدير الملفات والبيانات الوصفية والهاشات إلى وجهات البيانات المحددة.

المستوردون المُنفَّذون حاليًا:

  1. GCP، الذي يستخرج الملفات من صور أقراص GCP الأساسية.
  2. Windows، الذي يستخرج الملفات من وسائط تثبيت ويندوز بصيغة ISO-13346.
  3. WSUS، الذي يستخرج الملفات من حزم تحديث ويندوز.
  4. GCR، الذي يستخرج الملفات من صور الحاويات المخزنة في سجل حاويات جوجل.
  5. TarGz، الذي يستخرج الملفات من أرشيفات .tar.gz.
  6. Deb، الذي يستخرج الملفات من حزم برمجيات دبيان.
  7. RPM، الذي يستخرج الملفات من حزم برمجيات RPM.
  8. Zip، الذي يستخرج الملفات من أرشيفات .zip (وما يشبه zip).

بمجرد استخراج الملفات وتجزئتها، تُمرَّر النتائج إلى المُصدِّرين، والمُصدِّرون المُنفَّذون حاليًا هم:

  1. PostgreSQL، الذي يرفع البيانات إلى مثيل PostgreSQL.
  2. Cloud Spanner، الذي يرفع البيانات إلى مثيل GCP Spanner.

يمكنك اختيار المستوردين الذين تريد تشغيلهم، ولكلٍّ منهم متطلبات مختلفة. يمكن العثور على مزيد من التفاصيل في الأقسام أدناه.

المتطلبات

يتطلب HashR نظام تشغيل Linux ليعمل، ويمكن أن يكون جهازًا فعليًا أو افتراضيًا أو سحابيًا. فيما يلي متطلبات الأجهزة المثلى:

  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

### HashR في OSDFIR Infrastructure

يمكنك نشر HashR كجزء من [مشروع OSDFIR Infrastructure](https://github.com/google/osdfir-infrastructure/tree/main/charts/hashr)
سيُشغّل هذا النشر HashR كوظائف cronjobs في Kubernetes ويتيح تكاملًا سهلاً
مع Timesketch.

### HashR باستخدام docker

لتشغيل HashR في حاوية docker، اطلع على [الدليل المخصص لـ docker](https://github.com/google/hashr/blob/main/docker/README.md)

### إعداد نظام التشغيل والأدوات المطلوبة من طرف ثالث

يتولى HashR المهام الشاقة (تحليل صور الأقراص، وحدات التخزين، أنظمة الملفات) باستخدام Plaso. تحتاج إلى سحب حاوية Docker الخاصة بـ Plaso باستخدام الأمر التالي:``` shell
docker pull log2timeline/plaso

نحتاج أيضًا إلى تثبيت 7z، الذي يستخدمه مستورد WSUS للاستخراج التكراري لحزم تحديثات Windows، على الجهاز الذي يعمل عليه 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 لديك، ومن أبسط هذه الطرق تشغيله في حاوية Docker. اتبع الخطوات أدناه لإعداد حاوية Docker لـ PostgreSQL.

الخطوة 1: اسحب صورة Docker الخاصة بـ PostgreSQL.``` 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 لديك مُهيأة مع مشروع GCP الخاص بـ HashR المستهدف، ستحتاج إلى اتباع الخطوات أدناه لتفعيل 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، واضبط الإعدادات وقيمة 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. نسخ الصورة الجديدة/غير المعالجة إلى مشروع GCP الخاص بـ hashR
  3. تشغيل Cloud Build، والذي ينشئ VM مؤقتة، ويشغّل dd على الصورة المنسوخة ويحفظ المخرجات في ملف .tar.gz.
  4. تصدير raw_disk.tar.gz إلى حاوية GCS في مشروع GCP الخاص بـ hashR
  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: أنشئ bucket GCS الذي سيُستخدم لتخزين صور القرص بصيغة .tar.gz، واضبط *<project_name>* إلى اسم مشروعك و  *<gcs_bucket_name>* إلى اسم bucket 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` مشروع GCP الذي سيُستخدم لتخزين نسخة من صور الأقراص للمعالجة وكذلك لتشغيل Cloud Build
1. `-hashr_gcs_bucket` حاوية GCS التي سيتم استخدامها لتخزين مخرجات Cloud Build (صور الأقراص بصيغة .tar.gz)

#### AWS

يعالج هذا المستورد صور AMI المملوكة لشركة Amazon وينشئ التجزئات (hashes). يتطلب المستورد عامل HashR واحدًا على الأقل (مثيل EC2).

##### عوامل HashR الخاصة بـ AWS

عامل HashR الخاص بـ AWS هو مثيل EC2 يتم فيه إرفاق وحدة تخزين صورة AMI، وإنشاء أرشيف القرص، ثم رفعه إلى حاوية S3. يُنصح بوجود عاملَي HashR على الأقل خاصين بـ AWS. إذا كان إعدادك يستخدم عامل AWS واحدًا فقط، فاستخدم `-processing_worker_count 1`.

يجب أن يستوفي عامل HashR الخاص بـ AWS المتطلبات التالية:

- يجب أن تحمل مثيلات EC2 الوسم `InUse: false`. إذا كانت القيمة `true`، فلن يُستخدم العامل في المعالجة.```shell
aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Tags’
  • يجب أن يكون النظام الذي يشغّل hashr قادراً على الاتصال عبر SSH بمثيل EC2 باستخدام:

    • مفتاح SSH كما هو موصوف في Keyname. ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’
    root@kitploit:~
  • إلى FQDN كما هو موضح في PublicDnsName. ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].PublicDnsName’

    root@kitploit:~
  • يجب نسخ scripts/hashr-archive إلى عامل AWS HashR في /usr/local/sbin/hashr-archive

  • حساب AWS مع صلاحية رفع الملفات إلى bucket الخاص بـ HashR. يجب تخزين إعدادات AWS وبيانات الاعتماد في دليل $HOME/.aws/.```shell aws configure

root@kitploit:~
##### تطبيق HashR

على النظام الذي يعمل عليه `hashr`، يلزم ما يلي.

- حساب AWS بصلاحيات لاستدعاء واجهات برمجة التطبيقات التالية:
  - EC2
    - AttachVolume
    - CopyImage
    - CreateTags
    - CreateVolume
    - DeleteVolume
    - DescribeAvailabilityZones
    - DescribeImages
    - DescribeInstances
    - DescribeSnapshots
    - DescribeVolumes
    - DetachVolume
  - S3
    - DeleteObject
- يجب أن يكون ملف إعداد حساب AWS وملف بيانات الاعتماد موجودين في دليل `$HOME/.aws/`.
- يجب أن يكون مفتاح SSH الخاص المستخدم في AWS HashR موجودًا في دليل `$HOME/.ssh/`. ويجب أن يطابق قيمة `Keyname` كما هو موضح في `aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’`

##### إعداد مثيل AWS EC2

يصف هذا القسم كيفية إنشاء مثيلات EC2 لاستخدامها مع HashR. من الناحية المثالية، نريد حسابي AWS: `hashr.uploader` و`hashr.worker`.

يُستخدم `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
سير عمل مستورد AWS الخاص بـ HashR

يتبع مستورد AWS الخطوات عالية المستوى التالية:

  1. ينسخ AMI مملوكًا لأمازون جديدًا/غير معالج إلى مشروع HashR
  2. ينشئ وحدة تخزين استنادًا إلى AMI المنسوخ
  3. يُرفق وحدة التخزين بعامل HashR متاح على AWS
  4. على عامل HashR في AWS a. ينشئ أرشيف قرص (tar.gz) على عامل HashR في AWS b. يرفع أرشيف القرص إلى دلو S3 الخاص بـ HashR
  5. ينزّل أرشيف القرص من دلو S3 الخاص بـ HashR
  6. يفك ضغط صورة القرص
  7. يعالج القرص الخام باستخدام Plaso
أمر مستورد AWS الخاص بـ HashR

يعالج الأمر أدناه صور 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 افتراضي مختلف، استخدم `-aws_ssh_user` لتعيين مستخدم SSH المناسب.

#### GCR (Google Container Registry)
يستخرج هذا المستورد الملفات من صور الحاويات المخزنة في مستودعات GCR. لإعداده، اتبع الخطوات التالية:

الخطوة 1: أنشئ حساب خدمة HashR، وانتقل إلى الخطوة 4 إذا تم ذلك أثناء إعداد مكونات أخرى تعتمد على GCP.``` 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

يستخرج هذا المستورد الملفات من وسائط تثبيت Windows الرسمية بصيغة ISO-13346، مثل تلك التي يمكنك تنزيلها من [الموقع](https://www.microsoft.com/en-gb/software-download/windows10ISO) الرسمي لمايكروسوفت.
يمكن أن يحتوي ملف ISO واحد على عدة صور WIM:

1. Windows10ProEducation
1. Windows10Education
1. Windows10EducationN
1. Windows10ProN
1. إلخ.

سيقوم هذا المستورد باستخراج الملفات من جميع الصور التي يمكنه العثور عليها في ملف `install.wim`.

#### WSUS

يستخدم هذا المستورد 7z لاستخراج محتويات حزم Windows Update بشكل متكرر. سيبحث عن ملفات Windows Update في دلو GCS المقدم، وأسهل طريقة لتحديث دلو GCS تلقائيًا بالتحديثات الجديدة هي القيام بما يلي:

1. قم بإعداد جهاز GCE VM يعمل بنظام Windows Server في مشروع GCP الخاص بـ hashr.
1. قم بتكوينه بدور WSUS، وحدد حزم Windows Update التي ترغب في معالجتها.
1. قم بتكوين WSUS للموافقة تلقائيًا على التحديثات وتنزيلها إلى التخزين المحلي.
1. قم بإعداد مهمة في Windows لمزامنة محتوى التخزين المحلي تلقائيًا مع دلو GCS: `gcloud storage rsync --recursive D:/WSUS/WsusContent gs://hashr-wsus/` (تذكر ضبط المسارات).
1. إذا كنت ترغب في أن يكون اسم ملف حزمة التحديث (والذي يحتوي عادةً على رقم KB) هو المعرّف (افتراضيًا يكون 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/

سيقوم هذا بتفريغ المعلومات ذات الصلة من قاعدة بيانات WSUS، وتخزينها في ملف export.csv ومزامنة محتويات مجلد WSUS مع حاوية GCS. سيتحقق مستورد WSUS من وجود ملف export.csv في جذر مستودع WSUS، وإذا كان موجودًا فسيستخدمه.

TarGz

هذا مستورد بسيط يجتاز المستودعات ويبحث عن ملفات .tar.gz. وبمجرد العثور على أي ملف، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كان قد تمت معالجته مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:

  1. -targz_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .tar.gz

Deb

هذا مشابه جدًا لمستورد TarGz باستثناء أنه يبحث عن حزم .deb. وبمجرد العثور على أي حزمة، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كانت قد عولجت مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:

  1. -deb_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .deb

RPM

هذا مشابه جدًا لمستورد TarGz باستثناء أنه يبحث عن حزم .rpm. وبمجرد العثور على أي حزمة، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كانت قد عولجت مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:

  1. -rpm_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .rpm

Zip (والصيغ الأخرى المشابهة لـ zip)

هذا مشابه جدًا لمستورد TarGz باستثناء أنه يبحث عن أرشيفات .zip. وبمجرد العثور على أي أرشيف، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كان قد عولج مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:

  1. -zip_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .zip

بشكل اختياري، يمكنك أيضًا تعيين العلم/الأعلام التالية:

  1. -zip_file_exts قائمة مفصولة بفواصل من امتدادات الملفات لمعاملتها كملفات zip، على سبيل المثال: "zip,whl,jar". الافتراضي: "zip"

ISO 9660

هذا مشابه جدًا لمستورد TarGz باستثناء أنه يبحث عن ملفات .iso. وبمجرد العثور على أي ملف، سيقوم بتجزئة أول وآخر 10 ميجابايت من الملف للتحقق مما إذا كان قد عولج مسبقًا. ويتم ذلك لتجنب تجزئة الملف بأكمله في كل مرة يتم فيها فحص المستودع بحثًا عن مصادر جديدة. لاستخدام هذا المستورد، تحتاج إلى تحديد العلم/الأعلام التالية:

  1. -iso_repo_path والذي يجب أن يشير إلى المسار على نظام الملفات المحلي الذي يحتوي على ملفات .iso

إعداد المُصدِّرين

إعداد مُصدِّر Postgres

يتيح مصدّر Postgres إرسال التجزئات والبيانات الوصفية للملف والمحتوى الفعلي للملف إلى مثيل PostgreSQL. للحصول على أفضل أداء، يُنصح بإعداده على جهاز منفصل ومخصص. إذا كنت قد أعددت PostgreSQL أثناء اختيار تخزين مهام المعالجة، فأنت جاهز تقريبًا، فقط شغّل الأمر التالي لإنشاء الجداول المطلوبة:``` shell cat scripts/CreatePostgresExporterTables.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr

root@kitploit:~
إذا لم تختر Postgres لتخزين وظائف المعالجة، فاتبع الخطوتين 1 و2 من قسم [إعداد تخزين PostgreSQL](####setting-up-postgresql-storage).

هذا هو المُصدِّر الافتراضي حاليًا، ولا تحتاج إلى تمكينه صراحةً. افتراضيًا، لن يتم رفع محتوى الملفات الفعلية إلى قاعدة بيانات PostgreSQL، وإذا أردت تغيير ذلك فاستخدم الخيار `-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، فأنت بحاجة إلى إنشاء bucket خاص بـ GCS:

الخطوة 1: اجعل حساب الخدمة مسؤولًا (admin) عن هذا bucket:``` 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: يتحكم هذا الخيار في عدد عمال المعالجة المتوازية. المعالجة مكلفة لوحدة المعالجة المركزية والإدخال/الإخراج، وخلال اختباراتي وجدت أن وجود عاملَين هو الحل الأمثل.
  2. -cache_dir: موقع ذاكرة التخزين المؤقت المحلية المستخدمة لإزالة التكرار (deduplication)، ويُنصح بتغييره من /tmp إلى، على سبيل المثال، الدليل الرئيسي للمستخدم الذي سيشغّل hashr.
  3. -export: عند ضبطه على false، سيقوم hashr بحفظ النتائج على القرص متجاوزًا المُصدِّر.
  4. -export_path: إذا تم ضبط export على false، فهذا هو المجلد الذي ستُحفظ فيه العينات.
  5. -reprocess: يسمح بإعادة معالجة مصدر معيّن (في حال حدوث خطأ مثلًا) بناءً على قيمة sha256 المخزنة في جدول المهام.
  6. -upload_payloads: يتحكم فيما إذا كان المحتوى الفعلي للملف سيتم رفعه بواسطة المُصدِّرين المعرّفين.
  7. -gcp_exporter_worker_count: عدد العمال/الغوروتينات التي سيستخدمها مُصدِّر GCP لرفع البيانات.

هذا ليس منتجًا مدعومًا رسميًا من Google.

تنزيل الأداة