Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
hashr — GCP, AWS और स्थानीय स्रोतों से डिस्क इमेज, पैकेज और संग्रह से फोरेंसिक फ़ाइल हैश सेट बनाता है, DFIR वर्कफ़्लो के लिए डीडुप्लीकेशन और PostgreSQL/Spanner निर्यात के साथ। | Kitploit
उपकरण/GitHubGitHub/google/hashr
डिस्क फोरेंसिकहैश विश्लेषणफोरेंसिकडिजिटल फोरेंसिकघटना प्रतिक्रिया
GitHubgoogle/hashr

hashr

GCP, AWS और स्थानीय स्रोतों से डिस्क इमेज, पैकेज और संग्रह से फोरेंसिक फ़ाइल हैश सेट बनाता है, DFIR वर्कफ़्लो के लिए डीडुप्लीकेशन और PostgreSQL/Spanner निर्यात के साथ।

रिपॉजिटरी देखें
1309106 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

HashR: अपने स्वयं के हैश सेट उत्पन्न करें



विषय-सूची

  • HashR: अपने स्वयं के हैश सेट उत्पन्न करें
    • विषय-सूची
    • परिचय
    • आवश्यकताएँ
    • HashR बाइनरी बनाना और परीक्षण चलाना
    • HashR सेट करना
      • Docker का उपयोग करके HashR
      • OS कॉन्फ़िगरेशन & आवश्यक तृतीय-पक्ष टूलिंग
      • प्रसंस्करण कार्यों के लिए संग्रहण सेट करना
        • PostgreSQL संग्रहण सेट करना
        • Cloud Spanner सेट करना
      • Importers सेट करना
        • GCP (Google Cloud Platform)
        • AWS
        • GCR (Google Container Registry)
        • Windows
        • WSUS
        • TarGz
        • Deb
        • RPM
        • Zip (और अन्य zip-जैसे प्रारूप)
        • ISO 9660
      • Exporters सेट करना
        • Postgres exporter सेट करना
        • GCP exporter सेट करना
      • अतिरिक्त फ़्लैग

परिचय

HashR आपको अपने डेटा स्रोतों के आधार पर अपने स्वयं के हैश सेट बनाने की अनुमति देता है। यह एक उपकरण है जो इनपुट स्रोतों (जैसे रॉ डिस्क इमेज, GCE डिस्क इमेज, ISO फ़ाइल, Windows अपडेट पैकेज, .tar.gz फ़ाइल, आदि) से फ़ाइलें और हैश निकालता है।

HashR निम्नलिखित घटकों से मिलकर बना है:

  1. Importers, जो स्रोत को स्थानीय संग्रहण में कॉपी करने और किसी भी आवश्यक प्रीप्रोसेसिंग करने के लिए जिम्मेदार हैं।
  2. Core, जो image_export.py (Plaso) का उपयोग करके स्रोत से सामग्री निकालने, कैशिंग और रिपॉजिटरी स्तर की नकल-हटाने (deduplication) तथा निकाली गई फ़ाइलों को exporters के लिए तैयार करने का ध्यान रखता है।
  3. Exporters, जो दिए गए डेटा सिंक्स में फ़ाइलों, मेटाडेटा और हैश को निर्यात करने के लिए जिम्मेदार हैं।

वर्तमान में कार्यान्वित importers:

  1. GCP, जो आधार GCP डिस्क इमेज से फ़ाइल निकालता है।
  2. Windows, जो ISO-13346 प्रारूप में Windows इंस्टॉलेशन मीडिया से फ़ाइलें निकालता है।
  3. WSUS, जो Windows Update पैकेजों से फ़ाइलें निकालता है।
  4. GCR, जो Google Container Registry में संग्रहीत कंटेनर इमेज से फ़ाइल निकालता है।
  5. TarGz, जो .tar.gz संग्रहों से फ़ाइलें निकालता है।
  6. Deb, जो Debian सॉफ़्टवेयर पैकेजों से फ़ाइलें निकालता है।
  7. RPM, जो RPM सॉफ़्टवेयर पैकेजों से फ़ाइलें निकालता है।
  8. Zip, जो .zip (और zip-जैसे) संग्रहों से फ़ाइलें निकालता है।

फ़ाइलें निकाले जाने और हैश हो जाने के बाद परिणाम exporters को भेज दिए जाएंगे, वर्तमान में कार्यान्वित exporters:

  1. PostgreSQL, जो डेटा को PostgreSQL इंस्टेंस पर अपलोड करता है।
  2. Cloud Spanner, जो डेटा को GCP Spanner इंस्टेंस पर अपलोड करता है।

आप चुन सकते हैं कि कौन से importers चलाने हैं, प्रत्येक की अलग-अलग आवश्यकताएँ हैं। इसके बारे में अधिक जानकारी नीचे दिए गए अनुभागों में मिल सकती है।

आवश्यकताएँ

HashR को चलाने के लिए Linux OS आवश्यक है, यह भौतिक, वर्चुअल या क्लाउड मशीन हो सकती है। नीचे इष्टतम हार्डवेयर आवश्यकताएँ दी गई हैं:

  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 की स्थापना

### OSDFIR इंफ्रास्ट्रक्चर में HashR

आप HashR को [OSDFIR Infrastructure project](https://github.com/google/osdfir-infrastructure/tree/main/charts/hashr) के हिस्से के रूप में तैनात कर सकते हैं। यह तैनाती HashR को kubernetes cronjobs के रूप में चलाएगी और Timesketch के साथ आसान एकीकरण की अनुमति देती है।

### Docker का उपयोग करके HashR

Docker कंटेनर में HashR चलाने के लिए [डॉकर विशिष्ट मार्गदर्शिका](https://github.com/google/hashr/blob/main/docker/README.md) देखें।

### OS कॉन्फ़िगरेशन और आवश्यक तृतीय-पक्ष टूलिंग

HashR भारी-भरकम काम (डिस्क इमेज, वॉल्यूम, फाइल सिस्टम पार्स करना) Plaso का उपयोग करके करता है। आपको निम्न कमांड का उपयोग करके Plaso docker कंटेनर खींचने की आवश्यकता है:``` shell
docker pull log2timeline/plaso

हमें 7z की भी आवश्यकता है, जिसका उपयोग WSUS importer द्वारा Windows Update पैकेजों के पुनरावर्ती निष्कर्षण के लिए किया जाता है, ताकि इसे 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 कंटेनर में चलाना होगा। 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

root@kitploit:~
चरण 3: एक टेबल बनाएं जिसका उपयोग प्रोसेसिंग जॉब्स को संग्रहीत करने के लिए किया जाएगा।``` shell
cat scripts/CreateJobsTable.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr

In order to use PostgreSQL to store information about processing tasks you need to specify the following flags: -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 टूल आपके लक्षित hashr GCP प्रोजेक्ट के साथ कॉन्फ़िगर किया गया है, 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 env वेरिएबल को अपनी service account key पर पॉइंट करें:``` shell export GOOGLE_APPLICATION_CREDENTIALS=/home/hashr/hashr-sa-private-key.json

root@kitploit:~
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

root@kitploit:~
सेवा खाते (service account) को 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. नई/असंसाधित इमेज को hashR GCP प्रोजेक्ट में कॉपी करें
  3. Cloud Build चलाएं, जो एक अस्थायी VM बनाता है, कॉपी की गई इमेज पर dd चलाता है और आउटपुट को .tar.gz फ़ाइल में सहेजता है।
  4. raw_disk.tar.gz को hashR GCP प्रोजेक्ट में GCS बकेट में निर्यात करें
  5. raw_disk.tar.gz को GCS से स्थानीय hashR स्टोरेज में कॉपी करें
  6. raw_disk.tar.gz निकालें और डिस्क इमेज को Plaso को दें

सार्वजनिक GCP इमेज वाले GCP प्रोजेक्ट्स की सूची यहाँ पाई जा सकती है। इस इम्पोर्टर का उपयोग करने के लिए आपके पास एक GCP प्रोजेक्ट होना आवश्यक है और इन चरणों का पालन करें:

Step 1: HashR सेवा खाता बनाएं, यदि यह Cloud Spanner सेट करते समय किया गया था तो कृपया Step 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 env वेरिएबल को अपनी सेवा खाता कुंजी पर इंगित करें:``` shell export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json

root@kitploit:~
चरण 4: GCS bucket बनाएं जिसका उपयोग डिस्क इमेज को .tar.gz प्रारूप में संग्रहीत करने के लिए किया जाएगा, *<project_name>* को अपने प्रोजेक्ट के नाम पर और  *<gcs_bucket_name>* को अपने नए GCS bucket नाम पर सेट करें:``` 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 role को service account से बांधें:``` 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 चलाने के लिए आवश्यक service accounts एक्सेस प्रदान करें, सुनिश्चित करें कि <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:~
इस इम्पोर्टर का उपयोग करने के लिए आपको निम्नलिखित फ़्लैग(s) निर्दिष्ट करने होंगे:

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

यह इम्पोर्टर Amazon के स्वामित्व वाली AMIs को प्रोसेस करता है और हैश उत्पन्न करता है। इस इम्पोर्टर को कम से कम एक HashR वर्कर (एक EC2 इंस्टेंस) की आवश्यकता होती है।

##### AWS HashR वर्कर्स

AWS HashR वर्कर एक EC2 इंस्टेंस है जहाँ AMI का वॉल्यूम अटैच किया जाता है, डिस्क आर्काइव बनाया जाता है, और फिर S3 बकेट पर अपलोड किया जाता है। कम से कम दो AWS HashR वर्कर रखने की अनुशंसा की जाती है। यदि आपका सेटअप एकल AWS वर्कर का उपयोग करता है तो `-processing_worker_count 1` का उपयोग करें।

AWS HashR वर्कर को निम्नलिखित आवश्यकताओं को पूरा करना होगा:

- EC2 इंस्टेंस में `InUse: false` टैग होना चाहिए। यदि मान `true` है, तो वर्कर का उपयोग प्रोसेसिंग के लिए नहीं किया जाता है।```shell
aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Tags’
  • hashr चलाने वाला सिस्टम निम्नलिखित का उपयोग करके EC2 इंस्टेंस में SSH करने में सक्षम होना चाहिए:

    • Keyname में वर्णित SSH कुंजी। ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’
    root@kitploit:~
  • PublicDnsName में वर्णित FQDN के लिए। ```shell aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].PublicDnsName’

    root@kitploit:~
  • scripts/hashr-archive को AWS HashR worker के /usr/local/sbin/hashr-archive पर कॉपी किया जाना चाहिए

  • एक AWS खाता जिसके पास HashR बकेट में फ़ाइलें अपलोड करने की अनुमति हो। AWS कॉन्फ़िगरेशन और क्रेडेंशियल $HOME/.aws/ निर्देशिका में संग्रहीत किए जाने चाहिए।```shell aws configure

root@kitploit:~
##### HashR अनुप्रयोग

जिस सिस्टम पर `hashr` चलता है, उस पर निम्नलिखित आवश्यक है।

- निम्नलिखित APIs को कॉल करने की अनुमति वाला एक AWS खाता:
  - EC2
    - AttachVolume
    - CopyImage
    - CreateTags
    - CreateVolume
    - DeleteVolume
    - DescribeAvailabilityZones
    - DescribeImages
    - DescribeInstances
    - DescribeSnapshots
    - DescribeVolumes
    - DetachVolume
  - S3
    - DeleteObject
- AWS खाता कॉन्फ़िगरेशन और क्रेडेंशियल फ़ाइल `$HOME/.aws/` निर्देशिका में स्थित होनी चाहिए।
- AWS HashR के लिए उपयोग की जाने वाली SSH निजी कुंजी `$HOME/.ssh/` निर्देशिका में स्थित होनी चाहिए। इसे `Keyname` के मान से मेल खाना चाहिए जैसा कि `aws ec2 describe-instances --instance-id INSTANCE_ID | jq -r ‘.Reservations[].Instances[0].Keyname’` में वर्णित है।

##### AWS EC2 इंस्टेंस सेट अप करना

यह अनुभाग वर्णन करता है कि HashR के साथ उपयोग के लिए EC2 इंस्टेंस कैसे बनाएँ। आदर्श रूप से हमें दो 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
HashR AWS Importer कार्यप्रवाह

AWS importer निम्नलिखित उच्च-स्तरीय चरणों का पालन करता है:

  1. एक नए/असंसाधित Amazon स्वामित्व वाले AMI को HashR प्रोजेक्ट में कॉपी करता है
  2. कॉपी किए गए AMI के आधार पर एक वॉल्यूम बनाता है
  3. वॉल्यूम को उपलब्ध AWS HashR वर्कर से जोड़ता है
  4. AWS HashR वर्कर पर a. AWS HashR वर्कर पर डिस्क संग्रह (tar.gz) बनाता है b. डिस्क संग्रह को HashR S3 बकेट में अपलोड करता है
  5. HashR S3 बकेट से डिस्क संग्रह डाउनलोड करता है
  6. डिस्क इमेज को अनआर्काइव करता है
  7. Plaso का उपयोग करके रॉ डिस्क को प्रोसेस करता है
HashR AWS Importer कमांड

नीचे दिया गया कमांड 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 उपयोगकर्ता अलग हो सकता है, उपयुक्त SSH उपयोगकर्ता सेट करने के लिए `-aws_ssh_user` का उपयोग करें।

#### GCR (Google Container Registry)
यह इम्पोर्टर GCR रिपॉज़िटरी में संग्रहीत कंटेनर इमेज से फ़ाइलें निकालता है। इसे सेट अप करने के लिए इन चरणों का पालन करें:

चरण 1: HashR सेवा खाता बनाएं, यदि यह अन्य GCP-निर्भर घटकों को सेट अप करते समय किया गया था तो चरण 4 पर जाएँ।``` 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 env वेरिएबल को अपनी सेवा खाता कुंजी की ओर इंगित करें:``` shell
export GOOGLE_APPLICATION_CREDENTIALS=~/hashr-sa-private-key.json

चरण 4: दिए गए GCR रिपॉजिटरी तक पहुँचने के लिए hashR सेवा खाता कुंजी को आवश्यक अनुमतियाँ प्रदान करें।``` 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:~
इस importer का उपयोग करने के लिए आपको निम्नलिखित flag(s) निर्दिष्ट करने होंगे:

1. `-gcr_repos` जिसमें GCR रिपॉजिटरी की comma separated सूची होनी चाहिए जिनसे आप कंटेनर इमेज आयात करना चाहते हैं।

#### Windows

यह importer आधिकारिक Windows इंस्टॉलेशन मीडिया से ISO-13346 प्रारूप में फ़ाइलें निकालता है, उदा. वे जिन्हें आप आधिकारिक Microsoft [website](https://www.microsoft.com/en-gb/software-download/windows10ISO) से डाउनलोड कर सकते हैं।
एक ISO फ़ाइल में कई WIM इमेज हो सकती हैं:

1. Windows10ProEducation
1. Windows10Education
1. Windows10EducationN
1. Windows10ProN
1. आदि।

यह importer `install.wim` फ़ाइल में मिलने वाली सभी इमेज से फ़ाइलें निकालेगा।

#### WSUS

यह importer Windows Update पैकेज की सामग्री को पुनरावर्ती रूप से निकालने के लिए 7z का उपयोग करता है। यह दिए गए GCS bucket में Windows Update फ़ाइलों की तलाश करेगा, GCS bucket को नए अपडेट के साथ स्वचालित रूप से अपडेट करने का सबसे आसान तरीका निम्नलिखित होगा:

1. hashr GCP प्रोजेक्ट में Windows Server चलाने वाला GCE VM सेट करें।
1. इसे WSUS भूमिका के साथ कॉन्फ़िगर करें, उन Windows Update पैकेजों का चयन करें जिन्हें आप प्रोसेस करना चाहते हैं
1. WSUS को स्थानीय स्टोरेज पर अपडेट स्वचालित रूप से अनुमोदित और डाउनलोड करने के लिए कॉन्फ़िगर करें
1. स्थानीय स्टोरेज की सामग्री को GCS bucket में स्वचालित रूप से सिंक करने के लिए एक Windows कार्य सेट करें: `gcloud storage rsync --recursive D:/WSUS/WsusContent gs://hashr-wsus/` (पथ समायोजित करना याद रखें)
1. यदि आप अपडेट पैकेज का फ़ाइलनाम (जिसमें आमतौर पर KB नंबर होता है) ID के रूप में रखना चाहते हैं (डिफ़ॉल्ट रूप से यह 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/

This will dump the relevant information from WSUS DB, store it in the export.csv file and sync the contents of the WSUS folder with GCS bucket. WSUS importer will check if export.csv file is present in the root of the WSUS repo, if so it will use it.

TarGz

This is a simple importer that traverses repositories and looks for .tar.gz files. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -targz_repo_path which should point to the path on the local file system that contains .tar.gz files

Deb

This is very similar to the TarGz importer except that it looks for .deb packages. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -deb_repo_path which should point to the path on the local file system that contains .deb files

RPM

This is very similar to the TarGz importer except that it looks for .rpm packages. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -rpm_repo_path which should point to the path on the local file system that contains .rpm files

Zip (and other zip-like formats)

This is very similar to the TarGz importer except that it looks for .zip archives. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -zip_repo_path which should point to the path on the local file system that contains .zip files

Optionally, you can also set the following flag(s):

  1. -zip_file_exts comma-separated list of file extensions to treat as zip files, eg. "zip,whl,jar". Default: "zip"

ISO 9660

This is very similar to the TarGz importer except that it looks for .iso file. Once found it will hash the first and the last 10MB of the file to check if it was already processed. This is done to prevent hashing the whole file every time the repository is scanned for new sources. To use this importer you need to specify the following flag(s):

  1. -iso_repo_path which should point to the path on the local file system that contains .iso files

Setting up exporters

Setting up Postgres exporter

Postgres exporter allows sending of hashes, file metadata and the actual content of the file to a PostgreSQL instance. For best performance it's advised to set it up on a separate and dedicated machine. If you did set up PostgreSQL while choosing the processing jobs storage you're almost good to go, just run the following command to create the required tables:``` shell cat scripts/CreatePostgresExporterTables.sql | docker exec -i hashr_postgresql psql -U hashr -d hashr

root@kitploit:~
यदि आपने प्रोसेसिंग जॉब स्टोरेज के लिए Postgres नहीं चुना है, तो [PostgreSQL स्टोरेज सेट करना](####setting-up-postgresql-storage) अनुभाग के चरण 1 और 2 का पालन करें।

यह वर्तमान में डिफ़ॉल्ट एक्सपोर्टर है, आपको इसे स्पष्ट रूप से सक्षम करने की आवश्यकता नहीं है। डिफ़ॉल्ट रूप से, वास्तविक फ़ाइलों की सामग्री PostgreSQL DB पर अपलोड नहीं की जाएगी, यदि आप इसे बदलना चाहते हैं तो `-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 पर अपलोड करना चाहते हैं, तो आपको GCS बकेट बनाने की आवश्यकता है:

चरण 1: इस बकेट का सेवा खाता व्यवस्थापक बनाएं:``` 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: यह फ्लैग समानांतर प्रोसेसिंग वर्कर्स की संख्या को नियंत्रित करता है। प्रोसेसिंग CPU और I/O भारी है, अपने परीक्षण के दौरान मैंने पाया कि 2 वर्कर्स होना सबसे अनुकूल समाधान है।
  2. -cache_dir: डीडुप्लिकेशन के लिए उपयोग किए जाने वाले स्थानीय कैश का स्थान, इसे /tmp से बदलकर, उदाहरण के लिए, hashr चलाने वाले उपयोगकर्ता की होम निर्देशिका में करने की सलाह दी जाती है।
  3. -export: जब इसे false पर सेट किया जाता है, hashr एक्सपोर्टर को बायपास करते हुए परिणामों को डिस्क पर सहेज लेगा।
  4. -export_path: यदि export को false पर सेट किया गया है, तो यह वह फ़ोल्डर है जहाँ सैंपल सहेजे जाएँगे।
  5. -reprocess: jobs तालिका में संग्रहीत sha256 मान के आधार पर किसी दिए गए स्रोत को फिर से प्रोसेस करने की अनुमति देता है (उदाहरण के लिए यदि उसमें त्रुटि हुई हो)।
  6. -upload_payloads: नियंत्रित करता है कि परिभाषित एक्सपोर्टर द्वारा फ़ाइल की वास्तविक सामग्री अपलोड की जाएगी या नहीं।
  7. -gcp_exporter_worker_count: GCP एक्सपोर्टर द्वारा डेटा अपलोड करने के लिए उपयोग किए जाने वाले वर्कर्स/गोरूटीन की संख्या।

यह आधिकारिक रूप से समर्थित Google उत्पाद नहीं है।

टूल डाउनलोड करें