
مُصوِّر ومكتشف الشذوذ لإدارة الهوية والوصول في AWS
هذا المستودع ليس قيد التطوير النشط. ومع ذلك، أنا منفتح على قبول PRs. لا يزال Aaia يعمل حيث لم تكن هناك تغييرات كبيرة من حيث واجهات برمجة تطبيقات AWS التي يستخدمها لجمع البيانات.
(A)n(a)lysis of (I)dentity and (A)ccess
ملاحظة: تم إنشاء التوسعة بعد أن تم تحديد الاسم :P
يساعد Aaia (يُنطق كما هو موضح هنا ) في تصور AWS IAM والمنظمات (Organizations) بتنسيق رسم بياني بمساعدة Neo4j. يساعد هذا في تحديد القيم الشاذة (outliers) بسهولة. نظرًا لأنه يعتمد على neo4j، يمكن للمرء الاستعلام عن الرسم البياني باستخدام استعلامات cypher للعثور على الحالات الشاذة.
يدعم Aaia أيضًا وحدات (modules) لجلب البيانات برمجيًا من قاعدة بيانات neo4j ومعالجتها بطريقة مخصصة. هذا مفيد بشكل أساسي إذا كان يجب تطبيق أي مقارنة أو منطق معقد والذي قد لا يكون سهلاً من خلال استعلامات cypher.
كان الهدف الأولي من Aaia هو أن يكون أداة لتعداد إمكانيات تصعيد الامتيازات (privelege escalation) وإيجاد الثغرات في AWS IAM. كان مستوحى من اقتباس @JohnLaTwC
"المدافعون يفكرون في قوائم. المهاجمون يفكرون في رسوم بيانية. طالما هذا صحيح، المهاجمون يفوزون."
Aaia في اللغة التاميلية تعني الجدة. بشكل عام، Aaia تعرف كل شيء عن العائلة. يمكنها بسهولة ربط من هو قريب بمن؛ وكيف؛ وتعطيك العلاقة في غضون جزء من الثانية. إنها قاعدة بيانات رسوم بيانية حية. :P
نظرًا لأن "Aaia" (هذه الأداة) تفعل نفس الشيء تقريبًا، ومن هنا جاء الاسم.
i. تثبيت بيئة تشغيل Docker
تحقق من الوثائق الرسمية بخصوص التثبيت هنا.
ii. قم بتشغيل أمر docker التالي
docker run -p 7687:7687 -p 7474:7474 -v `pwd`/neo4j/data:/data -v `pwd`/neo4j/logs:/logs -e NEO4J_AUTH=neo4j/test neo4j:3.5.17
ملاحظة: الأمر أعلاه يحتفظ ببيانات neo4j على قرصك. ومع ذلك، لا تتردد في التعديل حسب احتياجاتك وتغيير بيانات المصادقة وفقًا لتفضيلاتك. يجب تكوين بيانات الاعتماد المقدمة هنا في ملف Aaia.conf أيضًا.
التعليمات هنا
قم بإعداد اسم المستخدم وكلمة المرور وURI اتصال bolt في ملف Aaia.conf. تم تقديم تنسيق مثال في ملف Aaia.conf بالفعل.
ملاحظة: تم اختبار Aaia مع neo4j الإصدار 3.5.17. قد يعمل مع الإصدارات الأقدم. قدمت Neo4j بعض التغييرات الجديدة بعد الإصدار 4.0 والتي تبين أنها غير متوافقة مع قاعدة الشيفرة الحالية لـ Aaia.
apt-get install awscli jq
yum install awscli jq
هذه الحزم ضرورية لسكريبت Aaia_aws_collector.sh. تأكد من وجود هذه الحزم في النظام الأساسي الذي يتم تشغيل سكريبت الجمع منه.
git clone https://github.com/rams3sh/Aaia
cd Aaia/
python3 -m venv env
source env/bin/activate
ملاحظة: يعتمد Aaia على مكتبة pyjq والتي ليست مستقرة في Windows حاليًا. وبالتالي، لا يتم دعم Aaia لنظام Windows.
python -m pip install -r requirements.txt
ستتطلب Aaia الأذونات التالية في AWS لسكريبت الجمع لجمع البيانات ذات الصلة من AWS
iam:GenerateCredentialReport
iam:GetCredentialReport
iam:GetAccountAuthorizationDetails
iam:ListUsers
iam:GetUser
iam:ListGroups
iam:ListRoles
iam:GetRole
iam:GetPolicy
iam:GetAccountPasswordPolicy
iam:GetAccountSummary
iam:ListAccountAliases
organizations:ListAccountsForParent
organizations:ListOrganizationalUnitsForParent
organizations:DescribeOrganization
organizations:ListRoots
organizations:ListAccounts
organizations:ListTagsForResource
organizations:ListPolicies
organizations:ListTargetsForPolicy
organizations:DescribePolicy
organizations:ListAWSServiceAccessForOrganization
يمكن حذف الأذونات المتعلقة بـ "Organizations". ومع ذلك، فإن جميع أذونات "IAM" المذكورة أعلاه ضرورية.
تأكد من أن الأذونات متاحة للمستخدم / الدور / أي كيان AWS (principal) الذي سيتم استخدامه لجمع البيانات لسكريبت الجمع.
تأكد من أن لديك بيانات اعتماد AWS مكونة. راجع هذا للمساعدة.
بمجرد إعداد بيانات الاعتماد.
قم بتشغيل:-
./Aaia_aws_collector.sh <profile_name>
تأكد من أن تنسيق مخرجات ملف تعريف aws المستخدم لجمع البيانات مضبوط على json حيث أن Aaia تتوقع أن تكون البيانات المجمعة بتنسيق json.
في حالة وجود متطلبات حيث يجب جمع البيانات من مثيل آخر؛ قم بنسخ ملف "Aaia_aws_collector.sh" إلى المثيل البعيد، وقم بتشغيله وانسخ مجلد "offline_data" الناتج إلى مسار Aaia في المثيل الذي تم إعداد Aaia فيه واستمر في الخطوات التالية. سيكون هذا مفيدًا في حالات الاستشارات أو تدقيق العملاء.
python Aaia.py -n <profile_name> -a load_data
-n يدعم قيمة "all" والتي تعني تحميل جميع البيانات المجمعة والموجودة داخل مجلد offline_data.
يرجى التأكد من عدم وجود ملف تعريف باسم "all" في ملف بيانات الاعتماد حيث قد يتعارض مع الوسيطة. :P
الآن نحن مستعدون لاستخدام Aaia.
حاليًا، تم تقديم وحدة نموذجية كمثال هيكلي. يمكن اعتبار هذا كمرجع لبناء وحدات مخصصة.
python Aaia.py -n all -m iam_sample_audit
Aaia متأثر ومستوحى من العديد من المشاريع مفتوحة المصدر الرائعة. تحية كبيرة إلى:-
عرض نموذجي لـ IAM لحساب AWS وهمي
صورة لنتيجة استعلام AWS IAM البصري