
أداة تدقيق أمني سحابي آلية تكتشف سوء استخدام بيانات اعتماد AK/SK عن طريق تدقيق دوري لسجلات المنصة السحابية باستخدام كشف الشذوذ وقواعد القائمة السوداء وتحليل الخط الأساسي لـ Tencent Cloud و AWS.
cloud-audit (مساعد تدقيق الأمان السحابي) هو أداة للكشف عن تسريب واستخدام مفاتيح AK/SK لمزودي الخدمات السحابية العامة. يقوم بمراجعة دورية لسجلات منصة السحابة عبر واجهات برمجة التطبيقات، ويكتشف سلوكيات الاختراق المشتبه بها بناءً على السلوك الشاذ/الخصائص السوداء/الخط الأساسي.
يدعم حاليًا Tencent Cloud و AWS فقط.
الخطوة الأولى: تنفيذ الأمر لتثبيت التبعيات
cd /opt/ && git clone https://github.com/al0ne/cloud-audit
cd cloud-audit && pip3 install -r requirements.txt
الخطوة الثانية: إنشاء وتعديل ملف .env
cp .env.example .env
قم بتعبئة ملف .env حسب إعداداتك الفعلية
# معلومات AK/SK لـ Tencent Cloud، مطلوبة لاستدعاء واجهة API للحصول على السجلات
TencentAccessKey="xxx"
TencentSecretKey="xxx"
# قائمة مفاتيح AK/SK المراد مراقبتها في Tencent Cloud
AccesskeyList="xxx,xxx,xxx"
# معلومات AK/SK لـ AWS
AWS_ACCESS_KEY_ID="xxx"
AWS_SECRET_ACCESS_KEY="xxx"
# معلومات إشعار Discord
discord_webhook_url=""
# إشعار روبوت WeChat Work
weixin_webhook_url=""
الخطوة الثالثة: التكوين الهام للبرنامج
# نطاقات الشبكة الموثوقة، سيتم إنذار العمليات الحساسة من نطاقات غير موثوقة مباشرة.
while_cidr = ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8"]
# المناطق المراد متابعتها في AWS، لن يتم الاستعلام عن الأحداث خارج هذه المناطق
aws_region = [
"us-east-1",
"us-east-2",
"ap-northeast-1",
"ap-southeast-1"
]
التشغيل
python3 cloud-audit.py
يقوم البرنامج بتنفيذ البحث مرة كل 15 دقيقة.
نظرًا لأن سجلات AWS تُقرأ وتُدقق عبر خدمة AWS CloudTrail، تأكد من أن حسابك لديه صلاحية IAM AWSCloudTrail_ReadOnlyAccess لاستخدام هذا المنتج، وإلا ستظهر رسالة الخطأ التالية.
botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the LookupEvents operation: User: arn:aws:iam::xxxxx:user/test is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action
انتقل إلى منصة AWS IAM، واختر المستخدم ← الصلاحيات لإضافة الصلاحية.
عند استخدام أدوات استغلال المنصات السحابية، تتضمن الإجراءات الشائعة فحص وجود مثيلات RDS في جميع المناطق، وفحص وجود مثيلات ECS أو حاويات في جميع المناطق، وإنشاء/حذف الحسابات الفرعية، وتنفيذ الأوامر، إلخ. هذه الإجراءات تعتبر حساسة نسبيًا، لذا يتم الحصول عليها عبر واجهات سجلات كل منصة سحابية.
أيضًا، يتم اكتشاف العمليات الحساسة القادمة من نطاقات شبكة غير موثوقة. عادةً ما تكون المكالمات من شبكة IDC الداخلية أو من عنوان IP صادر IDC. إذا ظهرت مكالمات AK/SK من نطاق شبكة غير موثوق به في المؤسسة وقامت بعملية عالية الخطورة، يتم إنذارها مباشرة.
أمثلة على العمليات الحساسة الشائعة:
الفرق الأكبر بين Tencent Cloud و AWS API Calls هو أن Tencent Cloud يمكنه الاستعلام عن الإجراءات التفصيلية لمعرف AK معين عبر واجهة API، بينما يمكن لـ AWS فقط البحث على المنصة ولا يمكنه الاستعلام عن أحدث معلومات التنفيذ لمعرف AK معين عبر واجهة AK/SK.
لذا، لاكتشاف استغلال AK/SK في Tencent Cloud، يلزم إدخال قائمة معرفات AK المستخدمة في الخدمات عبر الإنترنت ومراقبة الإجراءات التي ينفذها كل معرف AK بشكل دوري.
أما AWS، فيمكنه فقط الحصول على السجلات حسب المنطقة والإجراء. يتم استدعاء واجهة CloudTrail عبر AK/SK للحصول على سجلات إجراء معين في منطقة معينة.
لذا، يعتمد AWS بشكل أكبر على الحكم وفقًا للخط الأساسي.
def DescribeInstances(CloudTrailEvent: dict):
"""
الكشف عن استخدام AK/SK لسرد معلومات EC2
:param CloudTrailEvent:
:return: None
"""
accessKeyId = CloudTrailEvent.get('userIdentity').get('accessKeyId')
arn = CloudTrailEvent.get('userIdentity').get('arn')
eventTime = utc_to_china_tz(CloudTrailEvent.get('eventTime'))
eventName = CloudTrailEvent.get('eventName')
awsRegion = CloudTrailEvent.get('awsRegion')
sourceIPAddress = CloudTrailEvent.get('sourceIPAddress')
userAgent = CloudTrailEvent.get('userAgent')
sip_verify = False
for cidr in while_cidr:
if ipaddress.ip_address(sourceIPAddress) in ipaddress.ip_network(cidr):
sip_verify = True
if not sip_verify and 'aws-internal' not in userAgent:
message = f"{text_title}\nالوقت:{eventTime}\nمعرف الحساب:{arn}\nالمنطقة:{awsRegion}\nمعرف مفتاح الوصول:{accessKeyId}\n"
f"الإجراء المنفذ:{eventName}\nعنوان IP:{sourceIPAddress}\nوكيل المستخدم:{userAgent}\n\n"
f"تم اكتشاف طلب من IP خارجي لسرد معلومات المثيلات، يرجى الانتباه إذا كان ذلك استغلالاً من المهاجم!"
send_message(message)
لقطة شاشة إنذار Discord



حاليًا يتم الكشف فقط بناءً على السلوك، بينما يمكن أيضًا الكشف بناءً على الخط الأساسي.