
أداة آلية لإثراء نتائج الأمان وتقييم التأثير لـ AWS. تثري بيانات الثغرات الأمنية بسياق الموارد والارتباطات والعلامات لحساب درجات التأثير السياقي لتحديد أولويات التصحيح.
MetaHub هي أداة تلقائية لإثراء نتائج الأمن السياقي وتقييم الأثر لإدارة الثغرات الأمنية. يمكنك استخدامها مع AWS Security Hub أو أي ماسح أمني متوافق مع ASFF. توقف عن الاعتماد على درجات الخطورة غير المفيدة وانتقل إلى تعريفات تسجيل الأثر بناءً على سياقك الخاص.
MetaHub هي أداة أمنية مفتوحة المصدر لإدارة الثغرات الأمنية ذات التأثير السياقي. يمكنها أتمتة عملية تسييق نتائج الأمن بناءً على بيئتك واحتياجاتك، سياقك الخاص، وتحديد الملكية، وحساب تسجيل الأثر بناءً عليه والذي يمكنك استخدامه لتحديد الأولويات (من أين تبدأ؟) والأتمتة مثل التصحيحات والتنبيهات أو التذاكر. الأداة مخصصة لبيئات AWS ويمكنك استخدامها مع AWS Security Hub أو أي ماسحات متوافقة مع ASFF (مثل Prowler).
ℹ️ استكشف ووسّع استخدام لوحات معلومات MetaHub الجديدة باستخدام Powerpipe!
MetaHub يصف السياق الخاص بك عن طريق الاتصال بمواردك المتأثرة في حساباتك المتأثرة. يمكنه وصف معلومات حول حسابك في AWS ومؤسستك، وعلامات الموارد المتأثرة، وأحداث CloudTrail ذات الصلة، وتكوينات مواردك المتأثرة وجميع ارتباطاتها: إذا كنت تضع نتيجة أمنية تؤثر على مثيل EC2، فإن MetaHub لن يتصل فقط بهذا المثيل نفسه ولكن أيضًا بأدوار IAM الخاصة به؛ ومن هناك، سيتصل بسياسات IAM المرتبطة بتلك الأدوار. سيتصل بمجموعات الأمان ويحلل جميع قواعدها، والشبكة VPC والشبكات الفرعية حيث يعمل المثيل، والمجلدات EBS، ومجموعات Auto Scaling، والمزيد. يمكنك تطبيق الفلاتر لاكتشاف موارد أخرى بنفس الخصائص تلقائيًا وإجراء تحقيقات متعمقة.
بعد جلب جميع المعلومات من السياق الخاص بك، سيقوم MetaHub بتقييم شروط الأثر لجميع مواردك: التعرض، الوصول، التشفير، الحالة، البيئة، التطبيق، والمالك، وبناءً على هذه الحسابات بالإضافة إلى المعلومات حول النتائج الأمنية التي تؤثر على المورد معًا، سيقوم MetaHub بإنشاء درجة لكل نتيجة وكل مورد متأثر.
تحقق من لوحة المعلومات التالية التي تم إنشاؤها بواسطة MetaHub. لديك الموارد المتأثرة، وجميع النتائج الأمنية التي تؤثر عليها مجمعة معًا، والخطورة الأصلية لكل نتيجة. بعد ذلك، لديك الدرجة وجميع المعايير التي قيمها MetaHub لإنشاء تلك الدرجة. جميع هذه المعلومات قابلة للتصفية والفرز والتجميع والتنزيل والتخصيص.
التالي هو المخرجات JSON لمثيل EC2؛ شاهد كيف ينظم MetaHub جميع المعلومات حول سياقه معًا، تحت الارتباطات، والتكوين، والعلامات، والحساب، وCloudTrail، وأخيرًا مفتاح الأثر مع الدرجة وجميع المعايير التي تم تقييمها لإنشاء تلك الدرجة.
MetaHub يوفر مجموعة من الطرق لسرد وإدارة وإخراج نتائج الأمن الخاصة بك للتحقيق، والقمع، والتحديث، والتكامل مع أدوات أخرى. تم تصميمه للاستخدام كأداة سطر أوامر (CLI) أو ضمن سير عمل آلية، مثل دوال AWS Lambda. يدعم مخرجات مختلفة، بعضها JSON برمجي، ولكن أيضًا html، وxlsx، وcsv قوية يمكنك تخصيصها.
إذا كنت تستخدم AWS Security Hub، يتكامل MetaHub بسلاسة ويوسع وظائفه. يمكن استخدامه كـ إجراء مخصص لـ Security Hub، ويدعم فلاتر AWS Security Hub، ويمكنك إدارة حالة سير العمل لنتائجك، ويمكنك حتى إثراء نتائجك مباشرة في AWS Security Hub.
MetaHub مصمم للاستخدام مع AWS ويدعم إعدادات حسابات متعددة. يمكنك تشغيل الأداة من أي بيئة عن طريق افتراض أدوار في حساب الرئيسي (master) لـ AWS Security Hub وحسابات الفرعية/الخدمة (child/service). يسمح لك هذا بجلب بيانات مجمعة من حسابات متعددة باستخدام تنفيذ الحسابات المتعددة لـ AWS Security Hub مع إثراء تلك النتائج ببيانات من الحسابات حيث تعمل مواردك المتأثرة. راجع تكوين Security Hub لمزيد من المعلومات.
اقرأ نتائج الأمن الخاصة بك من AWS Security Hub باستخدام الفلاتر الافتراضية ويُنفذ خيارات السياق الافتراضية:```bash ./metahub
اقرأ اكتشافًا أمنيًا محددًا (مُصفى بواسطة المعرف) من AWS Security Hub وقم بتنفيذ خيارات السياق الافتراضية:```bash
./metahub --sh-filters Id=arn:aws:securityhub:us-east-1:123456789012:security-control/CloudFront.1/finding/8bd4d049-dcbc-445b-a5d1-595d8274b4c1
يقرأ جميع النتائج الأمنية التي تؤثر على مورد واحد والتي تكون نشطة (تمت تصفيتها بواسطة ResourceId و RecordState) من AWS Security Hub وينفذ خيارات السياق الافتراضية:```bash ./metahub --sh-filters RecordState=ACTIVE ResourceId=arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0b7d243ff90ebc03e
اقرأ جميع النتائج الأمنية التي تؤثر على حساب AWS والتي تكون نشطة (مصفاة حسب AwsAccountId وRecordState) للموارد التي تحتوي على علامة `Environment` والقيمة `stg` وتنفيذ خيارات السياق `config` و`tags`:```bash
./metahub --sh-filters RecordState=ACTIVE AwsAccountId=123456789012 --mh-filters-tags Environment=stg --context config tags
اقرأ نتائج الأمان الخاصة بك من Prowler كملف إدخال وقم بتنفيذ خيارات السياق الافتراضية:```bash python3 prowler.py aws -M json-asff -q ./metahub --inputs file-asff --input-asff /path/to/prowler-findings.json.asff
اقرأ نتائج الأمان الخاصة بك من Powerpipe كملف إدخال ونفذ خيارات السياق الافتراضية:```bash
powerpipe benchmark run aws_compliance.benchmark.all_controls --export asff
./metahub --inputs file-asff --input-asff /path/to/powerpipe-findings.json.asff
اقرأ نتائج الأمان الخاصة بك من Trivy كملف إدخال وقم بتنفيذ خيارات السياق الافتراضية:```bash export AWS_REGION=us-west-1 export AWS_ACCOUNT_ID=012345678901 trivy image --format template --template "@contrib/asff.tpl" -o trivy-findings.json.asff public.ecr.aws/n2p8q5p4/metahub:stable ./metahub --inputs file-asff --input-asff /path/to/trivy-findings.json.asff
# السياق
في **MetaHub**، يشير **السياق** إلى المعلومات حول الموارد المتأثرة مثل **التكوين** و**الارتباطات** و**السجلات** و**الوسوم** و**الحساب**.
لا تتوقف MetaHub عند المورد المتأثر فحسب، بل تحلل أيضًا أي موارد مرتبطة أو ملحقة. على سبيل المثال، إذا وجد اكتشاف أمني على مجموعة أمان، فستقوم **MetaHub** بتحليل مجموعة الأمان وكل شيء آخر مرتبط بها، مثل مثيلات EC2 التي تستخدمها. لكل مورد مرتبط، ستجلب **MetaHub** سياقه. إذا كانت مجموعة الأمان ملحقة بمثيل EC2، فستقوم **MetaHub** بتحليل المثيل وجميع ارتباطاته، مثل أدوار IAM وسياسات IAM. من اكتشاف أمني واحد على مجموعة أمان، ستجلب **MetaHub** سياق مجموعة الأمان، ومثيل EC2، وأدوار IAM، وسياسات IAM. هذا أمر بالغ الأهمية لفهم تأثير اكتشافاتك الأمنية.
وحدة **السياق** لها خمسة أجزاء رئيسية: [**config**](#config) (والذي يتضمن [**associations**](#associations))، و[**tags**](#tags)، و[**cloudtrail**](#cloudtrail)، و[**account**](#account). بشكل افتراضي، يتم تمكين **config** و**tags** و**account** فقط، ولكن يمكنك تغيير هذا السلوك باستخدام الخيار `--context` (على سبيل المثال، استخدم `--context config tags cloudtrail account` لتمكين جميع مفاتيح السياق، أو `--context config` لتمكين مفتاح config والارتباطات فقط):
## التكوين
تحت مفتاح `config`، يمكنك العثور على معلومات تكوين مهمة من المورد المتأثر. على سبيل المثال، إذا كان المورد المتأثر هو حاوية S3، فستجد معلومات حول سياسة الحاوية، وقوائم التحكم في الوصول (ACLs)، وتكوين التشفير، والمزيد. إذا كان المورد المتأثر هو مثيل EC2، فستجد معلومات حول مفتاحه، وعنوان IP العام والخاص، والبيانات الوصفية، والمزيد. يتم تحديد معلومات التكوين التي تجلبها **MetaHub** حسب نوع المورد. إذا كنت ترغب في إضافة المزيد من معلومات التكوين، فانظر [المساهمة](#contributing).
يمكنك تصفية اكتشافاتك بناءً على مخرجات التكوين باستخدام الخيار: `--mh-filters-config <key> {True/False}` (انظر [مرشحات التكوين](#config-filters)).
<details>
<summary>مثال لمفتاح تكوين حاوية S3</summary>```json
"config": {
"resource_policy": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Test",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::metahub-bucket",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "123456789012"
}
}
},
]
},
"website_enabled": false,
"bucket_acl": [
{
"Grantee": {
"DisplayName": "gabriel.soltz",
"ID": "1234564bd76c6c64080717b68eafaa588b41706daaf22d3d0705b398bd7cbd57",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
],
"cannonical_user_id": "1234564bd76c6c64080717b68eafaa588b41706daaf22d3d0705b398bd7cbd57",
"public_access_block_enabled": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
},
"account_public_access_block_enabled": false,
"public": false,
"bucket_encryption": [
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
},
"BucketKeyEnabled": false
}
]
},
تحت مفتاح associations، ستجد جميع الموارد المرتبطة بالمورد المتأثر. على سبيل المثال، إذا كان المورد المتأثر هو مثيل EC2، فستجد موارد مثل: مجموعات الأمان، أدوار IAM، وحدات التخزين، VPC، الشبكات الفرعية، مجموعات التوسع التلقائي. إذا كان المورد المتأثر هو دور IAM، فستجد موارد مثل سياسات IAM، مستخدمي IAM، مجموعات IAM، والمزيد. في كل مرة يجد فيها MetaHub ارتباطًا، سيتصل بالمورد المرتبط مرة أخرى ويجلب سياقه الخاص. الارتباطات أساسية لفهم السياق وتأثير نتائجك الأمنية.
يمكنك تصفية نتائجك بناءً على مخرجات الارتباطات باستخدام الخيار: --mh-filters-config <key> {True/False} (راجع مرشحات التكوين).
تحت مفتاح tags، ستجد جميع الوسوم المرتبطة بالموارد المتأثرة. يستخدم MetaHub واجهة برمجة تطبيقات وضع العلامات على مجموعات موارد AWS للاستعلام عن الوسوم المرتبطة بمواردك. لاحظ أنه ليست جميع أنواع موارد AWS تدعم واجهة برمجة التطبيقات هذه. يمكنك التحقق من الخدمات المدعومة.
تشكل الوسوم جزءًا أساسيًا من فهم السياق. غالبًا ما تتضمن استراتيجيات الوسم:
إذا اتبعت استراتيجية وسم مناسبة، يمكنك تصفية وإخراج نتائج مثيرة للاهتمام. على سبيل المثال، يمكنك سرد جميع النتائج المتعلقة بفريق معين وتقديم تلك البيانات مباشرة لذلك الفريق.
يمكنك تصفية نتائجك بناءً على مخرجات الوسوم باستخدام الخيار: --mh-filters-tags TAG=VALUE (انظر مرشحات الوسوم).
تحت المفتاح cloudtrail، ستجد أحداث CloudTrail الهامة المتعلقة بالمورد المتأثر، مثل أحداث الإنشاء. يتم تعريف أحداث CloudTrail التي نبحث عنها حسب نوع المورد، ويمكنك إضافة أو إزالة أو تغييرها عن طريق تحرير ملف التكوين resources.py. على سبيل المثال، بالنسبة لمورد متأثر من نوع Security Group، سيبحث MetaHub عن الأحداث التالية: CreateSecurityGroup (حدث إنشاء مجموعة الأمان) و AuthorizeSecurityGroupIngress (حدث تفويض قاعدة مجموعة الأمان).
تحت مفتاح account، ستجد معلومات حول الحساب الذي يعمل عليه المورد المتأثر، مثل ما إذا كان جزءًا من مؤسسات AWS، ومعلومات حول جهات الاتصال الخاصة بهم، والمزيد.
يركز مكون التأثير في MetaHub على فهم الخصائص السبع الرئيسية للموارد المتأثرة: التعرض، الوصول، التشفير، الحالة، البيئة، التطبيق، والمالك ودمج قيمها مع قيم جميع النتائج الأمنية التي تؤثر على نفس المورد وشدتها لتوليد درجة. درجة التأثير هي رقم بين 0 و100، حيث 100 تعني أعلى تأثير.
يقيم التعرض كيفية تعرض المورد المتأثر للشبكات الأخرى. على سبيل المثال، إذا كان المورد المتأثر عاماً بشكل فعال أو عاماً فقط، أو إذا كان جزءاً من VPC، أو إذا كان له IP عام، أو إذا كان محمياً بجدار ناري أو مجموعة أمان.
الوصول يقيم طبقة سياسة المورد. يقوم MetaHub بفحص كل سياسة متاحة بما في ذلك: سياسات IAM المُدارة، سياسات IAM المضمنة، سياسات الموارد، قوائم تحكم الوصول للمجلدات (ACLs)، وأي ارتباط بموارد أخرى مثل أدوار IAM التي يتم تحليل سياساتها أيضًا. السياسة غير المقيدة ليست مجرد مشكلة في حد ذاتها، بل تؤثر على أي مورد آخر يستخدمها.
التشفير يقيم طبقات التشفير المختلفة بناءً على كل نوع مورد. على سبيل المثال، بالنسبة لبعض الموارد، يقوم بتقييم ما إذا كان تكوين التشفير at_rest وin_transit مفعلين معًا.
| الحالات المحتملة | القيمة | الوصف |
|---|
الحالة تقوم بتقييم حالة المورد المتأثر من حيث الارتباط أو التشغيل. على سبيل المثال، بالنسبة لمثيل EC2 نقوم بتقييم إذا كان المورد running أو stopped أو terminated، ولكن بالنسبة للموارد مثل وحدات تخزين EBS ومجموعات الأمان، نقوم بتقييم إذا كانت هذه الموارد attached بأي مورد آخر.
البيئة تقوم بتقييم البيئة التي يعمل فيها المورد المتأثر. افتراضيًا، يُعرِّف MetaHub 3 بيئات: production وstaging وdevelopment، ولكن يمكنك إضافة أو إزالة أو تعديل هذه البيئات وفقًا لاحتياجاتك. يقوم MetaHub بتقييم البيئة استنادًا إلى علامات المورد المتأثر أو معرف الحساب أو الاسم المستعار للحساب. يمكنك تحديد تعريفات واستراتيجية البيئات الخاصة بك في ملف الإعدادات (راجع تخصيص الإعدادات).
التطبيق يُقيّم التطبيق الذي ينتمي إليه المورد المتأثر. يعتمد MetaHub على ميزة myApplications من AWS، والتي تعتمد على الوسم awsApplication، ولكن يمكنك توسيع هذه الوظيفة بناءً على سياقك، على سبيل المثال عن طريق تعريف وسوم أخرى تستخدمها لتعريف التطبيقات أو الخدمات (مثل Service أو أي وسم آخر)، أو بالاعتماد على معرف الحساب أو الاسم المستعار. يمكنك تعريف تعريفات التطبيق واستراتيجيته في ملف الإعدادات (انظر تخصيص الإعدادات).
| الحالات المحتملة | القيمة | الوصف |
|---|---|---|
| 🔵 غير معروف | - | لم يمكن التحقق من المورد للتطبيق. |
المالك يركز على اكتشاف المالك. يمكنه تحديد مالك المورد المتأثر بطرق مختلفة. يمكن استخدام هذه المعلومات لتعيين نتيجة أمنية تلقائيًا إلى المالك الصحيح، أو تصعيدها، أو اتخاذ قرارات بناءً على هذه المعلومات. تعتبر الطريقة الآلية لتحديد مالك المورد أمرًا بالغ الأهمية لفرق الأمن. فهي تسمح لهم بالتركيز على المشكلات الأكثر أهمية وتعيينها في أسرع وقت ممكن للأشخاص المناسبين في سير العمل الآلي. يمكنك تحديد تعريفات المالك واستراتيجيتك في ملف التكوين (انظر تخصيص التكوين).
| الحالات المحتملة | القيمة | الوصف |
|---|---|---|
| 🔵 unknown | - | تعذر التحقق من المالك للمورد. |
كجزء من حساب درجة التأثير، نقوم أيضًا بتقييم إجمالي كمية النتائج الأمنية ودرجات خطورتها التي تؤثر على المورد. نستخدم الصيغة التالية لحساب هذا المقياس:```sh (SUM of all (Finding Severity / Highest Severity) with a maximum of 1)
على سبيل المثال، إذا كان المورد المتأثر يحتوي على نتيجتين تؤثران عليه، إحداهما بخطورة `HIGH` والأخرى بخطورة `LOW`، فإن **نتيجة تأثير النتائج ("Impact Findings Score")** ستكون:```sh
SUM(HIGH (3) / CRITICAL (4) + LOW (0.5) / CRITICAL (4)) = 0.875
MetaHub يقرأ نتائج الأمان الخاصة بك من AWS Security Hub أو أي ماسح أمان متوافق مع ASFF. ثم يستعلم عن الموارد المتأثرة مباشرة في الحساب المتأثر لتوفير سياق إضافي. بناءً على ذلك السياق، يحسب تأثيره. وأخيرًا، يُنشئ مخرجات مختلفة بناءً على احتياجاتك.
تشمل بعض حالات استخدام MetaHub ما يلي:
يستخدم MetaHub ملفات إعدادات تسمح لك بتخصيص بعض سلوكيات الفحوصات والمرشحات الافتراضية وغيرها. توجد ملفات الإعدادات في lib/config/.
الأشياء التي يمكنك تخصيصها:
lib/config/configuration.py: يحتوي هذا الملف على الإعداد الافتراضي لـ MetaHub. يمكنك تغيير المرشحات الافتراضية، وأوضاع الإخراج الافتراضية، وتعريفات البيئة، والمزيد.
lib/config/impact.py: يحتوي هذا الملف على القيم وأوزانها لمعادلة حساب التأثير. يمكنك تعديل القيم والأوزان بناءً على احتياجاتك.
lib/config/reources.py: يحتوي هذا الملف على تعريفات لكل نوع من أنواع الموارد، مثل أحداث CloudTrail التي يجب البحث عنها.
MetaHub هو برنامج Python3. يجب أن يكون Python3 مثبتًا على نظامك بالإضافة إلى وحدات Python المطلوبة الموضحة في ملف requirements.txt.
يمكن تثبيت المتطلبات يدويًا على نظامك (باستخدام pip3) أو باستخدام بيئة Python افتراضية (الطريقة الموصى بها).
git clone [email protected]:gabrielsoltz/metahub.gitcd metahubpython3 -m venv venv/metahubsource venv/metahub/bin/activatepip3 install -r requirements.txt./metahub -hdeactivateفي المرة القادمة، تحتاج فقط إلى الخطوتين 4 و6 لاستخدام البرنامج.
بدلاً من ذلك، يمكنك تشغيل هذه الأداة باستخدام Docker.
MetaHub متاح أيضًا كصورة Docker. يمكنك تشغيله مباشرة من صورة Docker العامة أو بنائه محليًا.
العلامات (tags) المتاحة لحاويات MetaHub هي التالية:
latest: متزامن مع الفرع الرئيسي (master)<x.y.z>: يمكنك العثور على الإصدارات هناstable: تشير هذه العلامة دائمًا إلى أحدث إصدار.للتشغيل من السجل العام، يمكنك تشغيل الأمر التالي:```sh docker run -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h
## بيانات اعتماد AWS و Docker
إذا كنت مسجلاً الدخول بالفعل إلى جهاز AWS المضيف، يمكنك استخدام نفس بيانات الاعتماد داخل حاوية Docker بسلاسة. يمكنك تحقيق ذلك إما عن طريق تمرير متغيرات البيئة اللازمة إلى الحاوية أو عن طريق تحميل ملف بيانات الاعتماد.
على سبيل المثال، يمكنك تشغيل الأمر التالي:```sh
docker run -e AWS_DEFAULT_REGION -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h
من ناحية أخرى، إذا لم تكن مسجلاً الدخول على جهاز المضيف، فستحتاج إلى تسجيل الدخول مرة أخرى من داخل الحاوية نفسها.
أو يمكنك أيضًا بناؤه محليًا:```sh git clone [email protected]:gabrielsoltz/metahub.git cd metahub docker build -t metahub . docker run -ti metahub ./metahub -h
# التشغيل مع Lambda
**MetaHub** جاهز لـ Lambda/Serverless! يمكنك تشغيل MetaHub مباشرة على دالة AWS Lambda دون الحاجة إلى أي بنية تحتية إضافية.
يتيح لك تشغيل MetaHub في دالة Lambda أتمتة تنفيذه بناءً على المشغلات (triggers) التي تحددها. على سبيل المثال، يمكنك:
- تشغيل دالة Lambda الخاصة بـ MetaHub في كل مرة يوجد فيها اكتشاف أمني جديد لإثراء هذا الاكتشاف في AWS Security Hub.
- تشغيل دالة Lambda الخاصة بـ MetaHub في كل مرة يوجد فيها اكتشاف أمني جديد للكبت (suppression) بناءً على السياق.
- تشغيل دالة Lambda الخاصة بـ MetaHub لتحديد المالك المتأثر بالاكتشاف الأمني بناءً على السياق وتعيينه باستخدام أنظمتك الداخلية.
- تشغيل دالة Lambda الخاصة بـ MetaHub لإنشاء تذكرة مع سياق مُثري.
## نشر Lambda
تم توفير كود Terraform لنشر دالة Lambda في المجلد `terraform/`.
ما عليك سوى تشغيل الأوامر التالية:```sh
cd terraform
terraform init
terraform apply
سينشئ الكود ملف مضغوط (zip) لكود Lambda وملف مضغوط للاعتماديات (dependencies) الخاصة بـ Python التي سنستخدمها كطبقة Lambda. كما سينشئ دالة Lambda وجميع الموارد المطلوبة.
سينشئ كود Terraform أيضًا إجراءً مخصصًا لـ Security Hub وقاعدة EventBridge لتفعيل دالة Lambda عند تنفيذ الإجراء المخصص. انظر أدناه.
يمكنك تخصيص خيارات MetaHub للامدا الخاصة بك عن طريق تحرير الملف lib/lambda.py. يمكنك تغيير الخيارات الافتراضية لـ MetaHub، مثل عوامل التصفية (filters)، وخيارات Meta*، والمزيد.
سينشئ Terraform الحد الأدنى من الأذونات المطلوبة لتشغيل دالة Lambda محليًا (في نفس الحساب). إذا كنت تريد أن تفترض Lambda دورًا في حسابات أخرى (على سبيل المثال، ستحتاج إلى ذلك إذا كنت تقوم بتشغيل Lambda في الحساب الرئيسي لـ Security Hub الذي يقوم بتجميع النتائج من حسابات أخرى)، فستحتاج إلى تحديد الدور الذي يجب افتراضه، وإضافة الخيار --mh-assume-role في تكوين دالة Lambda (راجع الخطوة السابقة) وإضافة السياسة المقابلة للسماح لـ Lambda بافتراض هذا الدور في دور lambda.
يمكن تشغيل MetaHub كـ إجراء مخصص لـ Security Hub. يتيح لك ذلك تشغيل MetaHub مباشرة من وحدة تحكم Security Hub لمشكلة مختارة أو لمجموعة مختارة من المشكلات.
سيقوم الإجراء المخصص بعد ذلك بتفعيل دالة Lambda التي ستشغل MetaHub للمشكلات المحددة.
عندما تقوم بتفعيل Lambda باستخدام الإجراء المخصص لـ Security Hub، ستقرأ lambda المشكلات المحددة لسياقها، وسيتم تنفيذها مرة واحدة لكل مشكلة. بشكل افتراضي، لن يتم اتخاذ أي إجراء بشأن المشكلات، ولكن يمكنك تغيير هذا السلوك. انظر تخصيص سلوك Lambda.
يتم نشر الإجراء المخصص لـ Security Hub كجزء من كود Terraform. انظر نشر Lambda لمزيد من المعلومات.
تأكد من إعداد بيانات اعتماد AWS على جهازك المحلي (أو من حيث ستقوم بتشغيل MetaHub).
على سبيل المثال، يمكنك استخدام خيار aws configure.```sh
aws configure
أو يمكنك تصدير بيانات اعتمادك إلى البيئة.```sh
export AWS_DEFAULT_REGION="us-east-1"
export AWS_ACCESS_KEY_ID= "ASXXXXXXX"
export AWS_SECRET_ACCESS_KEY= "XXXXXXXXX"
export AWS_SESSION_TOKEN= "XXXXXXXXX"
إذا كنت تستخدم MetaHub لإعداد حساب AWS واحد (AWS Security Hub لا يجمع النتائج من حسابات مختلفة)، فلن تحتاج إلى استخدام أي خيارات إضافية؛ سيستخدم MetaHub بيانات الاعتماد في بيئتك. ومع ذلك، إذا كان تصميم IAM الخاص بك يتطلب ذلك، فمن الممكن تسجيل الدخول وافتراض دور في نفس الحساب الذي قمت بتسجيل الدخول إليه. فقط استخدم الخيار --sh-assume-role لتحديد الدور و --sh-account مع نفس معرف حساب AWS الذي قمت بتسجيل الدخول إليه.
--sh-region: منطقة AWS حيث يعمل Security Hub. إذا لم تحدد منطقة، فسيستخدم المنطقة المكونة في بيئتك. إذا كنت تستخدم تجميع عبر المناطق لـ AWS Security Hub، فيجب عليك استخدام تلك المنطقة كخيار --sh-region حتى تتمكن من جلب جميع النتائج معًا.
--sh-account و --sh-assume-role: معرف حساب AWS حيث يعمل Security Hub ودور AWS IAM لافتراضه في ذلك الحساب. تكون هذه الخيارات مفيدة عندما تكون مسجلاً الدخول إلى حساب AWS مختلف عن الحساب الذي يعمل فيه AWS Security Hub أو عند تشغيل AWS Security Hub في إعداد حسابات AWS متعددة. يجب استخدام كلا الخيارين معًا. يجب أن يحتوي الدور المقدم على سياسات كافية للحصول على النتائج وتحديثها في AWS Security Hub (إذا لزم الأمر). إذا لم تحدد --sh-account، فسيفترض MetaHub الحساب الذي قمت بتسجيل الدخول إليه.
--sh-profile: يمكنك أيضًا تقديم اسم ملف تعريف AWS الخاص بك لاستخدامه مع AWS Security Hub. عند استخدام هذا الخيار، لا تحتاج إلى تحديد --sh-account أو حيث سيستخدم MetaHub بيانات الاعتماد من الملف الشخصي. إذا كنت تستخدم و ، فستأخذ تلك الخيارات الأولوية على .
هذه هي الحد الأدنى لسياسة IAM التي تحتاجها للقراءة والكتابة من AWS Security Hub. إذا كنت لا تريد تحديث النتائج الخاصة بك باستخدام MetaHub، يمكنك إزالة إجراء securityhub:BatchUpdateFindings.```sh
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"security hub:GetFindings",
"security hub:ListFindingAggregators",
"security hub:BatchUpdateFindings",
"iam:ListAccountAliases"
],
"Resource": [
"*"
]
}
]
}
# تكوين السياق
إذا كنت تدير MetaHub لإعداد حسابات AWS متعددة (يقوم AWS Security Hub بتجميع النتائج من حسابات AWS متعددة)، فيجب عليك توفير الدور الذي سيتم افتراضه لاستعلامات السياق لأن الموارد المتأثرة ليست في نفس حساب AWS الذي توجد به نتائج AWS Security Hub. سيتم استخدام `--mh-assume-role` للاتصال بالموارد المتأثرة مباشرة في الحساب المتأثر. يحتاج هذا الدور إلى صلاحيات كافية ليكون قادرًا على وصف الموارد.
## سياسة IAM للسياق
السياسة الدنيا اللازمة للسياق تتضمن السياسة المُدارة `arn:aws:iam::aws:policy/SecurityAudit` والإجراءات التالية:
- `tag:GetResources`
- `lambda:GetFunction`
- `lambda:GetFunctionUrlConfig`
- `cloudtrail:LookupEvents`
- `account:GetAlternateContact`
- `organizations:DescribeAccount`
- `iam:ListAccountAliases`
# المدخلات
يمكن لـ MetaHub قراءة النتائج الأمنية مباشرة من AWS Security Hub باستخدام واجهة برمجة التطبيقات الخاصة به. إذا كنت لا تستخدم Security Hub، فيمكنك استخدام أي ماسح ضوئي متوافق مع ASFF. تدعم معظم الماسحات الضوئية لأمن السحابة تنسيق ASFF مثل Prolwer وSteampipe وTrivy وغيرها.
إذا كنت ترغب في القراءة من ملف إدخال ASFF، فستحتاج إلى استخدام الخيار (`--inputs file-asff`) وتقديم المسار إلى الملف. يمكنك تقديم ملفات متعددة مفصولة بمسافة.:```sh
./metahub.py --inputs file-asff --input-asff path/to/the/file.json.asff path/to/the/file2.json.asff
يمكنك أيضًا الجمع بين نتائج AWS Security Hub وملفات الإدخال ASFF مع تحديد كلا المدخلين (--inputs file-asff securityhub). سيقوم MetaHub بمعالجة جميع النتائج معًا وينتج عنه ناتج واحد.```sh
./metahub.py --inputs file-asff securityhub --input-asff path/to/the/file.json.asff
عند استخدام ملف كمدخل، لا يمكنك استخدام الخيار `--sh-filters` لتصفية النتائج، لأن هذا الخيار يعتمد على واجهة برمجة تطبيقات AWS للتصفية. لا يمكنك استخدام الخيارات `--update-findings` أو `--enrich-findings` لأن هذه النتائج ليست في AWS Security Hub. إذا كنت تقرأ من كلا المصدرين في نفس الوقت، فسيتم تحديث النتائج من AWS Security Hub فقط.
يقوم MetaHub أيضًا بتنفيذ بعض **آليات الإصلاح** لتنسيق ASFF عندما لا يكون منسقًا بشكل صحيح. هذا نهج بأفضل جهد لجعل ASFF مفيدًا قدر الإمكان، لكنه ليس مثاليًا ويحتاج إلى إصلاح في الماسح الضوئي المصدر.
- إذا كان المفتاح `Region` مفقودًا من الموارد ومن المستوى الجذر، فسيقوم MetaHub بحساب المنطقة بناءً على ARN للمورد المتأثر.
- إذا كان ملف ASFF لا يضبط نوع مورد ASFF بشكل صحيح، فسيقوم MetaHub بحسابه بناءً على ARN للمورد المتأثر باستخدام المكتبة [aws-arn](https://github.com/gabrielsoltz/aws-arn)
- إذا كان أي حقل آخر مفقودًا مثل `SeverityLabel`، `Workflow`، `RecordState`، `Compliance`، `Id`، `ProductArn` أو `StandardsControlArn`، فسيقوم MetaHub بتعيينها إلى `Unknown`.
# المخرجات
يمكن لـ **MetaHub** إنشاء مخرجات برمجية ومرئية مختلفة. بشكل افتراضي، جميع أوضاع الإخراج مفعلة: `json-short`، `json-full`، `json-statistics`، `json-inventory`، `html`، `csv`، و `xlsx`. إذا كنت تريد فقط إنشاء وضع إخراج محدد، يمكنك استخدام الخيار `--output-modes` مع وضع الإخراج المطلوب. سيتم حفظ المخرجات في مجلد `outputs/` مع تاريخ التنفيذ.
على سبيل المثال، إذا كنت تريد فقط إنشاء المخرجات `json-short`، يمكنك استخدام:```sh
./metahub.py --output-modes json-short
إذا كنت تريد إنشاء مخرجات json-short وjson-full وhtml، يمكنك استخدام:```sh
./metahub.py --output-modes json-short json-full html
**MetaHub** يقوم بتنظيم النتائج الأمنية المؤثرة على نفس المورد معًا تحت المفتاح `findings` في محاولة لتجنب التظليل (عندما يشير فحصان إلى نفس المشكلة، لكن أحدهما بطريقة أكثر عمومية من الآخر) والتكرار (عندما تستخدم أكثر من ماسح ضوئي وتحصل على نفس المشكلة من أكثر من واحد). يمكنك رؤية هذا السلوك بوضوح في المخرجات `json-short` و`json-full` و`html`.
- [JSON](#json)
- [HTML](#html)
- [CSV](#csv)
- [XLSX](#xlsx)
- [SQLite](#sqlite)
## JSON
> :info: لاستكشاف مخرجات JSON بشكل تفاعلي، يمكنك استخدام الأداة [fx](https://github.com/antonmedv/fx).
### JSON-Full
يُظهر المورد المتأثر باستخدام ARN الخاص به كمفتاح والنتائج المؤثرة عليه كقائمة تحت المفتاح `findings`. بالإضافة إلى النتائج، ستحصل أيضًا على المفاتيح التالية: `ResourceType` و`Region` و`AwsAccountId` و`associations` و`config` و`tags` و`account` و`cloudtrail` و`impact`.```json
"arn:aws:ec2:eu-west-1:1234567890:instance/i-0a40b2be25dbac0ac": { --> The affected resource ARN
"findings": [ --> The findings affecting the resource
{
"EC2 instances should use Instance Metadata Service Version 2 (IMDSv2)": { --> The finding title
"SeverityLabel": "HIGH", --> The finding severity label
"Workflow":{ --> The finding workflow
"Status": "NEW",
},
"RecordState": "ACTIVE", --> The finding record state
"Compliance":{ --> The finding compliance
"Status": "FAILED",
},
"Id": "arn:aws:securityhub:eu-west-1:123456789012:security-control/EC2.8/finding/a1d4f19f-453e-4c3c-b486-8443c73e84f1",
"ProductArn": "arn:aws:securityhub:eu-west-1::product/aws/securityhub",
}
},
{"EC2 instances should be managed by AWS Systems Manager": {...}}, --> Another finding title
{"EC2 instances should not have a public IPv4 address": {...}} --> Another finding title
],
"ResourceType": "AwsEc2Instance", --> The affected resource type
"Region": "eu-west-1", --> The affected resource region
"AwsAccountId": "1234567890", --> The affected resource account id
"associations": { --> The associations of the affected resource
"security_groups": {}, --> The security groups associated with the affected resource
"iam_roles": {}, --> The IAM roles associated with the affected resource
"volumes": {}, --> The volumes associated with the affected resource
"autoscaling_groups": {}, --> The autoscaling groups associated with the affected resource
"vpcs": {}, --> The VPCs associated with the affected resource
"subnets": {}, --> The subnets associated with the affected resource
},
"config": { --> The configuration of the affected resource (based on it's type)
"public_ip": "200.200.200.200", --> The public IP of the affected resource, if any
"private_ip": "10.10.10.10", --> The private IP of the affected resource, if any
"key": "ssh-key", --> The key used for the affected resource, if any
"metadata_options": { --> The metadata options of the affected resource, if any
"State": "applied",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
},
},
"tags": { --> The tags of the affected resource
"Name": "test", --> The tag key and value
"Env": "prod",
"awsApplication": "arn:aws:resource-groups:eu-west-1:1234567890:group/app1/0c8vpbjkzeeffsz2cqgxpae7b2"
},
"account": { --> The account of the affected resource
"Alias": "prod", --> The account alias
"AlternateContact": {}, --> The alternate contact of the account, if any
"Organizations": { --> The organization of the account, if any
"Id": "o-1234567890",
"Arn": "arn:aws:organizations::1234567890:organization/o-1234567890/o-1234567890",
"MasterAccountId": "1234567890",
"MasterAccountArn": "arn:aws:organizations::1234567890:account/o-1234567890/1234567890",
"MasterAccountEmail": "",
"Details": {
"ParentId": "p-k1234567890",
"ParentType": "ROOT",
"OU": "ROOT",
"Policies": { --> The policies of the account, if any
"p-FullAWSAccess": {...} --> The policy name and policy
}
}
},
},
"cloudtrail": { --> The CloudTrail events affecting the affected resource
"RunInstances": { --> The CloudTrail event name
"Username": "test", --> The username of the event, if any
"EventTime": "2021-01-01T00:00:00Z",
"EventId": "12345678-1234-1234-1234-123456789012",
}
},
"impact": { --> The impact of the affected resource
"exposure": {...}, --> The exposure impact
"access": {...}, --> The access impact
"encryption": {...}, --> The encryption impact
"status": {...}, --> The status impact
"environment": {...}, --> The environment impact
"application": {...}, --> The application impact
"owner": {...}, --> The owner impact
"findings": {...}, --> The findings impact
"score": {...} --> The total impact score
}
}
يُظهر المورد المتأثر باستخدام ARN الخاص به كمفتاح، والنتائج التي تؤثر عليه كقائمة تحت المفتاح findings. بالإضافة إلى النتائج، ستحصل أيضًا على المفاتيح التالية: ResourceType, Region, AwsAccountId, associations, config, tags, account, cloudtrail, وimpact.```json
"arn:aws:ec2:eu-west-1:1234567890:instance/i-0a40b2be25dbac0ac": { --> The affected resource ARN
"findings": [ --> The findings affecting the resource
"EC2 instances should use Instance Metadata Service Version 2 (IMDSv2)", --> The finding title
"EC2 instances should be managed by AWS Systems Manager", --> The finding title
"EC2 instances should not have a public IPv4 address" --> The finding title
],
"ResourceType": "AwsEc2Instance", --> The affected resource type
"Region": "eu-west-1", --> The affected resource region
"AwsAccountId": "1234567890", --> The affected resource account id
"associations": { --> The associations of the affected resource
"security_groups": {}, --> The security groups associated with the affected resource
"iam_roles": {}, --> The IAM roles associated with the affected resource
"volumes": {}, --> The volumes associated with the affected resource
"autoscaling_groups": {}, --> The autoscaling groups associated with the affected resource
"vpcs": {}, --> The VPCs associated with the affected resource
"subnets": {}, --> The subnets associated with the affected resource
},
"config": { --> The configuration of the affected resource (based on it's type)
"public_ip": "200.200.200.200", --> The public IP of the affected resource, if any
"private_ip": "10.10.10.10", --> The private IP of the affected resource, if any
"key": "ssh-key", --> The key used for the affected resource, if any
"metadata_options": { --> The metadata options of the affected resource, if any
"State": "applied",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
},
},
"tags": { --> The tags of the affected resource
"Name": "test", --> The tag key and value
"Env": "prod",
"awsApplication": "arn:aws:resource-groups:eu-west-1:1234567890:group/app1/0c8vpbjkzeeffsz2cqgxpae7b2"
},
"account": { --> The account of the affected resource
"Alias": "prod", --> The account alias
"AlternateContact": {}, --> The alternate contact of the account, if any
"Organizations": { --> The organization of the account, if any
"Id": "o-1234567890",
"Arn": "arn:aws:organizations::1234567890:organization/o-1234567890/o-1234567890",
"MasterAccountId": "1234567890",
"MasterAccountArn": "arn:aws:organizations::1234567890:account/o-1234567890/1234567890",
"MasterAccountEmail": "",
"Details": {
"ParentId": "p-k1234567890",
"ParentType": "ROOT",
"OU": "ROOT",
"Policies": { --> The policies of the account, if any
"p-FullAWSAccess": {...} --> The policy name and policy
}
}
},
},
"cloudtrail": { --> The CloudTrail events affecting the affected resource
"RunInstances": { --> The CloudTrail event name
"Username": "test", --> The username of the event, if any
"EventTime": "2021-01-01T00:00:00Z",
"EventId": "12345678-1234-1234-1234-123456789012",
}
},
"impact": { --> The impact of the affected resource
"exposure": {...}, --> The exposure impact
"access": {...}, --> The access impact
"encryption": {...}, --> The encryption impact
"status": {...}, --> The status impact
"environment": {...}, --> The environment impact
"application": {...}, --> The application impact
"owner": {...}, --> The owner impact
"findings": {...}, --> The findings impact
"score": {...} --> The total impact score
}
}
### JSON-Inventory
عرض قائمة بجميع الموارد مع ARN الخاصة بها.```json
[
"arn:aws:sagemaker:us-east-1:ofuscated:notebook-instance/obfuscated",
"arn:aws:sagemaker:eu-west-1:ofuscated:notebook-instance/obfuscated"
]
عرض الإحصائيات لكل حقل/قيمة. في الإخراج، سترى كل حقل/قيمة وعدد مرات التكرار؛ على سبيل المثال، يظهر الإخراج التالي إحصائيات لست نتائج.```json { "Title": { "SageMaker.1 Amazon SageMaker notebook instances should not have direct internet access": 2, "SageMaker.2 SageMaker notebook instances should be launched in a custom VPC": 2, "SageMaker.3 Users should not have root access to SageMaker notebook instances": 2 }, "SeverityLabel": { "HIGH": 6 }, "Workflow": { "NEW": 6 }, "RecordState": { "ACTIVE": 6 }, "Compliance": { "FAILED": 6 }, "ProductArn": { "arn:aws:security hub:eu-west-1::product/aws/security hub": 3, "arn:aws:security hub:us-east-1::product/aws/security hub": 3 }, "ResourceType": { "AwsSageMakerNotebookInstance": 6 }, "AwsAccountId": { "obfuscated": 6 }, "Region": { "eu-west-1": 3, "us-east-1": 3 }, "ResourceId": { "arn:aws:sagemaker:eu-west-1:ofuscated:notebook-instance/obfuscated": 3, "arn:aws:sagemaker:us-east-1:ofuscated:notebook-instance/obfuscated": 3 } }
## HTML
يمكنك إنشاء تقارير HTML غنية عن نتائجك، مع إضافة سياقك كجزء منها.
تقارير HTML تفاعلية بعدة طرق:
- يمكنك إضافة/إزالة الأعمدة.
- يمكنك الفرز والتصفية حسب أي عمود.
- يمكنك التصفية التلقائية حسب أي عمود
- يمكنك تجميع/فك تجميع النتائج
- يمكنك أيضًا تنزيل تلك البيانات إلى xlsx، CSV، HTML، و JSON.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/21d785d2413698ed7cb3e9dc7e9b51dc6550395a598d777abc9fc358f8a23573.png" alt="html-example"/>
</p>
## CSV
يمكنك إنشاء تقارير CSV عن نتائجك، مع إضافة سياقك كجزء منها.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/66f15350123702e1cc317e47938401853bdcb1d86dad0ad4e48e73f15e00dd76.png" alt="csv-example"/>
</p>
## XLSX
مشابه لـ CSV ولكن مع خيارات تنسيق إضافية.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/953a77917dc5b06e5185e6cb882ba7e711d785861e184599f10cd472efc42db9.png" alt="xlsx-example"/>
</p>
## Customize HTML, CSV or XLSX outputs
يمكنك تخصيص مفاتيح السياق التي سيتم فتحها كأعمدة لمخرجات HTML و CSV و XLSX باستخدام الخيارين `--output-tag-columns` و `--output-config-columns` (كقائمة من الأعمدة). إذا كانت المفاتيح التي حددتها غير موجودة للمورد المتأثر، فستكون فارغة. يمكنك أيضًا تكوين هذه الأعمدة افتراضيًا في ملف التكوين (انظر [تخصيص التكوين](#customizing-configuration)).
على سبيل المثال، يمكنك إنشاء مخرجات HTML مع العلامات وإضافة "Owner" و "Environment" كأعمدة إلى تقريرك باستخدام:```sh
./metahub --output-modes html --output-tag-columns Owner Environment
يمكن لـ MetaHub حفظ النتائج والسياق في قاعدة بيانات SQLite. يمكن استخدام قاعدة البيانات هذه للتحليل الإضافي وإعداد التقارير والتكامل مع أدوات أخرى، مثل Powerpipe. سيتم حفظ قاعدة البيانات في مجلد outputs/ مع تاريخ التنفيذ والملحق .db.
يمكنك استخدام قاعدة بيانات SQLite التي تم إنشاؤها بواسطة MetaHub مع Powerpipe. يمكنك العثور على وحدة MetaHub PowerPipe في مجلد powerpipe/.
لاستخدامه، يجب أن يكون Powerpipe مثبتًا على نظامك.
بمجرد التثبيت، يمكنك تشغيل الأمر التالي:```sh powerpipe server --database sqlite:../outputs/metahub-20240331-182942.db
### أنشئ لوحات المعلومات الخاصة بك
إن بناء لوحات المعلومات باستخدام Powerpipe سهل للغاية وقوي. يمكنك الاطلاع على [وثائق Powerpipe](https://powerpipe.io/docs) لمزيد من المعلومات.
أدناه ستجد الجداول المتاحة في قاعدة بيانات SQLite.
#### الموارد
| Column Name | Data Type | Description |
| ------------------------------- | --------- | ---------------------------------------------------------------------------------------------- |
| resource_arn | VARCHAR | اسم مورد Amazon (ARN) للمورد، ويعمل كمفتاح أساسي. |
| resource_type | VARCHAR | نوع المورد. |
| resource_region | VARCHAR | المنطقة التي يقع فيها المورد. |
| resource_account_id | VARCHAR | معرف الحساب المرتبط بالمورد. مفتاح خارجي يشير إلى accounts(account_id). |
| resource_account_alias | VARCHAR | الاسم المستعار للحساب المرتبط بالمورد. |
| resource_tags | TEXT | العلامات المرتبطة بالمورد. |
| resource_exposure | VARCHAR | مستوى التعرض للمورد. |
| resource_access | VARCHAR | مستوى الوصول إلى المورد. |
| resource_encryption | VARCHAR | حالة التشفير للمورد. |
| resource_status | VARCHAR | الحالة الحالية للمورد. |
| resource_application | VARCHAR | التطبيق المرتبط بالمورد. |
| resource_environment | VARCHAR | البيئة (مثل الإنتاج، التدريج) التي يوجد فيها المورد. |
| resource_owner | VARCHAR | مالك المورد. |
| resource_score | INTEGER | درجة مرتبطة بالمورد. |
| resource_findings_score | INTEGER | درجة تعتمد على النتائج المرتبطة بالمورد. |
| resource_findings_critical | INTEGER | عدد النتائج الحرجة. |
| resource_findings_high | INTEGER | عدد النتائج عالية الخطورة. |
| resource_findings_medium | INTEGER | عدد النتائج متوسطة الخطورة. |
| resource_findings_low | INTEGER | عدد النتائج منخفضة الخطورة. |
| resource_findings_informational | INTEGER | عدد النتائج المعلوماتية. |
#### النتائج
| Column Name | Data Type | Description |
| ------------------------ | --------- | ------------------------------------------------------------------ |
| finding_id | VARCHAR | المعرف الفريد للنتيجة، ويعمل كمفتاح أساسي. |
| finding_title | VARCHAR | عنوان النتيجة. |
| finding_severity | VARCHAR | خطورة النتيجة. |
| finding_workflowstatus | VARCHAR | حالة سير العمل للنتيجة. |
| finding_recordstate | VARCHAR | حالة السجل للنتيجة. |
| finding_compliancestatus | VARCHAR | حالة الامتثال للنتيجة. |
| finding_productarn | VARCHAR | ARN للمنتج الذي ينتج النتيجة. |
| finding_resource_arn | VARCHAR | ARN للمورد المرتبط. |
#### الحسابات
| Column Name | Data Type | Description |
| ------------------------------- | --------- | ----------------------------------------------------------------------------- |
| account_id | INTEGER | المعرف الفريد للحساب، ويعمل كمفتاح أساسي. |
| account_alias | VARCHAR | الاسم المستعار للحساب. |
| account_organizations_id | VARCHAR | معرف المؤسسة التي ينتمي إليها الحساب. |
| account_organizations_arn | VARCHAR | ARN للمؤسسة التي ينتمي إليها الحساب. |
| account_master_account_id | VARCHAR | معرف الحساب الرئيسي، إذا كان هذا الحساب جزءًا من مؤسسة AWS. |
| account_master_account_email | VARCHAR | عنوان البريد الإلكتروني المرتبط بالحساب الرئيسي. |
| account_alternate_contact_type | VARCHAR | نوع جهة الاتصال البديلة (مثل الفوترة، الأمان). |
| account_alternate_contact_name | VARCHAR | اسم جهة الاتصال البديلة. |
| account_alternate_contact_email | VARCHAR | عنوان البريد الإلكتروني لجهة الاتصال البديلة. |
| account_alternate_contact_phone | VARCHAR | رقم الهاتف لجهة الاتصال البديلة. |
| account_alternate_contact_title | VARCHAR | المسمى الوظيفي لجهة الاتصال البديلة. |
# عوامل التصفية
يمكنك تصفية النتائج والموارد الأمنية التي تحصل عليها من مصدرك بطرق مختلفة والجمع بينها جميعًا للحصول على ما تبحث عنه تمامًا، ثم إعادة استخدام عوامل التصفية هذه لإنشاء أتمتة وتنبيهات وتقارير والمزيد.
- [تصفية Security Hub](#security-hub-filtering)
- [تصفية Security Hub باستخدام قوالب YAML](#security-hub-filtering-using-yaml-templates)
- [عوامل تصفية Config](#config-filters)
- [عوامل تصفية العلامات](#tags-filters)
- [عوامل تصفية التأثير](#impact-filters)
## تصفية Security Hub
يدعم MetaHub تصفية نتائج AWS Security Hub في شكل تصفية `KEY=VALUE` لـ AWS Security Hub باستخدام الخيار `--sh-filters`، بنفس الطريقة التي تقوم بها بالتصفية باستخدام AWS CLI ولكنها تقتصر على المقارنة `EQUALS`. إذا كنت تريد مقارنة أخرى، استخدم الخيار `--sh-template` [تصفية Security Hub باستخدام قوالب YAML](#security-hub-filtering-using-yaml-templates).
يمكنك التحقق من عوامل التصفية المتاحة في [وثائق AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/securityhub.html#SecurityHub.Client.get_findings)```sh
./metahub --sh-filters <KEY=VALUE>
إذا لم تحدد أي مرشحات، يتم تطبيق المرشحات الافتراضية: RecordState=ACTIVE WorkflowStatus=NEW
يؤدي تمرير المرشحات باستخدام هذا الخيار إلى إعادة تعيين المرشحات الافتراضية. إذا كنت تريد إضافة مرشحات إلى المرشحات الافتراضية، فأنت بحاجة إلى تحديدها بالإضافة إلى المرشحات الافتراضية. على سبيل المثال، إضافة SeverityLabel إلى المرشحات الافتراضية:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW
إذا كانت القيمة تحتوي على مسافات، فيجب عليك تحديدها باستخدام علامات الاقتباس المزدوجة: `"ProductName="Security Hub"`
يمكنك إضافة عدد المرشحات المختلفة التي تحتاجها إلى استعلامك وكذلك إضافة نفس مفتاح المرشح بقيم مختلفة:
أمثلة:
- التصفية حسب الخطورة (CRITICAL):```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL
- تصفية حسب الشدة وحساب AWS:```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL AwsAccountId=1234567890
- تصفية حسب نوع مورد AWS:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup
- تصفية حسب Finding Id:```sh
./metahub --sh-filters Id="arn:aws:security hub:eu-west-1:01234567890:subscription/aws-foundational-security-best-practices/v/1.0.0/EC2.19/finding/01234567890-1234-1234-1234-01234567890"
## تصفية Security Hub باستخدام قوالب YAML
**MetaHub** يتيح لك إنشاء عوامل تصفية معقدة باستخدام ملفات YAML (قوالب) يمكنك إعادة استخدامها عند الحاجة. تتيح لك قوالب YAML كتابة عوامل تصفية باستخدام أي مقارنة يدعمها AWS Security Hub مثل "EQUALS' | 'PREFIX' | 'NOT_EQUALS' | 'PREFIX_NOT_EQUALS". يمكنك استدعاء ملف YAML الخاص بك باستخدام الخيار `--sh-template <<FILE>>`.
يمكنك العثور على أمثلة داخل مجلد [templates](https://github.com/gabrielsoltz/metahub/blob/HEAD/templates)
- قم بالتصفية باستخدام قالب YAML default.yml:```sh
./metaHub --sh-template templates/default.yml
يدعم MetaHub مرشحات التكوين (والارتباطات) باستخدام KEY=VALUE حيث يمكن أن تكون القيمة True أو False فقط باستخدام الخيار --mh-filters-config. يمكنك استخدام أي عدد تريده من المرشحات وفصلها بمسافات. إذا حددت أكثر من مرشح واحد، فستحصل على جميع الموارد التي تطابق جميع المرشحات.
تدعم مرشحات التكوين فقط قيم True أو False:
True أو مع بيانات.False أو بدون بيانات.تعمل مرشحات التكوين بعد مرشحات AWS Security Hub:
--sh-filters (أو الافتراضية).--mh-filters-config الخاصة بك، لذا فهي مجموعة فرعية من الموارد من النقطة 1.أمثلة:
ResourceType=AwsEc2SecurityGroup) مع نتائج AWS Security Hub النشطة والجديدة (RecordState=ACTIVE WorkflowStatus=NEW) فقط إذا كانت مرتبطة بواجهات الشبكة (network_interfaces=True):```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-config network_interfaces=True- الحصول على جميع حاويات S3 (`ResourceType=AwsS3Bucket`) فقط إذا كانت عامة (`public=True`):```sh
./metahub --sh-filters ResourceType=AwsS3Bucket --mh-filters-config public=False
يدعم MetaHub عوامل تصفية الوسوم بصيغة KEY=VALUE حيث KEY هو اسم الوسم (Tag) و VALUE هي قيمة الوسم. يمكنك استخدام أي عدد تريده من عوامل التصفية وفصلها بمسافات. تحديد عدة عوامل تصفية سيعطيك جميع الموارد التي تطابق واحدًا على الأقل من عوامل التصفية.
تعمل عوامل تصفية الوسوم بعد عوامل تصفية AWS Security Hub:
--sh-filters (أو الافتراضية منها).--mh-filters-tags، وبالتالي فهي مجموعة فرعية من الموارد من النقطة 1.أمثلة:
ResourceType=AwsEc2SecurityGroup) التي تحتوي على نتائج أمنية من AWS Security Hub هي ACTIVE و NEW (RecordState=ACTIVE WorkflowStatus=NEW) فقط إذا كانت موسومة بوسم Environment بقيمة Production:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-tags Environment=Production## مرشحات التأثير
**MetaHub** يدعم **مرشحات التأثير**، حيث يمكنك التصفية بواسطة [مفاتيح التأثير](#impact) التي يحسبها MetaHub. يمكنك استخدام أي عدد تريده من المرشحات وفصلها بمسافات. إذا قمت بتحديد أكثر من مرشح واحد، ستحصل على جميع الموارد التي تتطابق مع **جميع** المرشحات.
أمثلة:
- قم بتصفية جميع نتائج الأمان التي تؤثر على الموارد ذات التعرض المحسوب على أنه عام بشكل فعّال:```sh
./metahub --mh-filters-impact exposure=effectively-public
# إجراءات Security Hub
## تحديث حالة سير العمل
يمكنك استخدام **MetaHub** لتحديث حالة سير عمل نتائج AWS Security Hub (`NOTIFIED,` `NEW,` `RESOLVED,` `SUPPRESSED`) بأمر واحد. ستستخدم الخيار `--update-findings` لتحديث جميع النتائج من استعلام MetaHub الخاص بك. هذا يعني أنه يمكنك تحديث نتيجة واحدة، أو عشر نتائج، أو آلاف النتائج باستخدام أمر واحد فقط. تقتصر واجهة برمجة تطبيقات AWS Security Hub على 100 نتيجة لكل تحديث. سيقوم MetaHub بتقسيم نتائجك إلى أجزاء من 100 عنصر لتجنب هذا القيد وتحديث نتائجك بغض النظر عن العدد.
على سبيل المثال، باستخدام الفلتر التالي: `./metahub --sh-filters ResourceType=AwsSageMakerNotebookInstance RecordState=ACTIVE WorkflowStatus=NEW` وجدت موردين متأثرين مع ثلاث نتائج لكل منهما، مما يجعل إجمالي نتائج Security Hub ست نتائج.
سيؤدي تشغيل أمر التحديث التالي إلى تحديث حالة سير العمل لهذه النتائج الست إلى `NOTIFIED` مع ملاحظة:```sh
./metahub --update-findings Workflow=NOTIFIED Note="Enter your ticket ID or reason here as a note that you will add to the finding as part of this update."
سيطلب منك --update-findings التأكيد قبل تحديث نتائجك. يمكنك تخطي هذا التأكيد باستخدام الخيار --no-actions-confirmation.
يمكنك استخدام MetaHub لإثراء نتائج AWS Security Hub الخاصة بك بمخرجات السياق باستخدام الخيار --enrich-findings. إثراء نتائجك يعني تحديثها مباشرة في AWS Security Hub. يستخدم MetaHub حقل UserDefinedFields لهذا الغرض.
من خلال إثراء نتائجك مباشرة في AWS Security Hub، يمكنك الاستفادة من ميزات مثل Insights وFilters باستخدام المعلومات الإضافية غير المتاحة في Security Hub سابقًا.
على سبيل المثال، تريد إثراء جميع نتائج AWS Security Hub التي تحتوي على WorkflowStatus=NEW و RecordState=ACTIVE و ResourceType=AwsS3Bucket والتي تكون public=True بمخرجات السياق:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsS3Bucket --mh-filters-checks public=True --enrich-findings
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/93a45d119a712b11ae5f23ea68e3a1f7d71e0e9511df7d7dadd2b462fcde71a2.png" alt="update-findings" width="850"/>
</p>
سيطلب منك `--enrich-findings` التأكيد قبل إثراء نتائجك. يمكنك تخطي هذا التأكيد باستخدام الخيار `--no-actions-confirmation`.
# المساهمة
يمكنك اتباع هذا الدليل إذا كنت ترغب في المساهمة في وحدة Context [الدليل](https://github.com/gabrielsoltz/metahub/blob/HEAD/docs/context.md).
| الحالات الممكنة | القيمة | الوصف |
|---|
| 🔴 effectively-public | 100% | المورد عام بشكل فعال من الإنترنت. |
| 🟠 restricted-public | 40% | المورد عام، لكن هناك قيد مثل مجموعة أمان. |
| 🟠 unrestricted-private | 30% | المورد خاص لكن غير مقيد، مثل مجموعة أمان مفتوحة. |
| 🟠 launch-public | 10% | هذه موارد يمكنها إطلاق موارد أخرى كعامة. على سبيل المثال، مجموعة Auto Scaling أو شبكة فرعية. |
| 🟢 restricted | 0% | المورد مقيد. |
| 🔵 unknown | - | تعذر فحص المورد. |
| الحالات المحتملة | القيمة | الوصف |
|---|
| 🔴 غير مقيد | 100% | المبدأ غير مقيد، دون أي شرط أو قيد. |
| 🔴 مبدأ غير موثوق | 70% | المبدأ هو حساب AWS، ليس جزءًا من حساباتك الموثوقة. |
| 🟠 مبدأ غير مقيد | 40% | المبدأ غير مقيد، مُعرف بحرف بدل (wildcard). قد يكون هناك شروط تحد منه أو قيود أخرى مثل الحظر العام لموارد S3. |
| 🟠 مبدأ عبر الحسابات | 30% | المبدأ من حساب AWS آخر. |
| 🟠 إجراءات غير مقيدة | 30% | الإجراءات مُعرفة باستخدام أحرف البدل (wildcards). |
| 🟠 إجراءات خطيرة | 30% | تم تعريف بعض الإجراءات الخطيرة كجزء من هذه السياسة. |
| 🟠 خدمة غير مقيدة | 10% | تسمح السياسة لخدمة AWS كمبدأ دون قيد. |
| 🟢 مقيد | 0% | السياسة مقيدة. |
| 🔵 غير معروف | - | تعذر فحص السياسة. |
| 🔴 غير مشفر | 100% | المورد غير مشفر بالكامل. |
| 🟢 مشفر | 0% | المورد مشفر بالكامل بما في ذلك أي ارتباطات له. |
| 🔵 غير معروف | - | لا يمكن التحقق من تشفير المورد. |
| الحالات الممكنة | القيمة | الوصف |
|---|
| 🟠 attached | 100% | المورد يدعم الارتباط وهو مرتبط. |
| 🟠 running | 100% | المورد يدعم التشغيل وهو قيد التشغيل. |
| 🟠 enabled | 100% | المورد يدعم التمكين وهو ممكّن. |
| 🟢 not-attached | 0% | المورد يدعم الارتباط، وهو غير مرتبط. |
| 🟢 not-running | 0% | المورد يدعم التشغيل وهو غير قيد التشغيل. |
| 🟢 not-enabled | 0% | المورد يدعم التمكين وهو غير ممكّن. |
| 🔵 unknown | - | تعذر التحقق من حالة المورد. |
| الحالات المحتملة | القيمة | الوصف |
|---|
| 🟠 إنتاج | 100% | إنه مورد إنتاجي. |
| 🟢 اختبار | 30% | إنه مورد اختباري. |
| 🟢 تطوير | 0% | إنه مورد تطويري. |
| 🔵 غير معروف | - | تعذر التحقق من بيئة المورد. |
--sh-assume-role--sh-account--sh-assume-role--sh-profile