AWSHound؛ کشف مسیرهای حمله در AWS با گراف
خلاصهٔ کاملتر
تیم SpecterOps ابزار AWSHound رو منتشر کرده؛ یه collector فقط-خواندنی که یه اکانت AWS یا کل یه Organization رو تبدیل میکنه به دیتاست OpenGraph برای BloodHound Community Edition. نویسنده میگه سؤالی که همیشه دنبالش بودن اینه: با دسترسیای که همین الان دارم، نهایتاً کجا میتونم برسم؟ جواب دادن بهش تو AWS سخته، چون iam:SimulatePrincipalPolicy هر بار فقط یه action رو برای یه principal تو یه اکانت بررسی میکنه.
به گفتهٔ نویسنده ریشهٔ مشکل اینه که یه مجوز تو AWS خاصیت یه principal نیست، بلکه جواب یه سؤال چهارتاییه: این principal، این action، روی این resource، تو این request context. جواب هم از چند لایه سیاست ساخته میشه که مالکهاشون فرق دارن: سیاستهای خود principal، permissions boundary که هیچوقت چیزی اضافه نمیکنه و فقط کم میکنه، SCPها که بین root و OU و اکانت اشتراک گرفته میشن، و سیاست خود منبع مثل bucket policy یا key policy.
مثال عملی مقاله خوب نشون میده چرا خوندن سیاستها کافی نیست. یه رول دیپلوی به اسم ci-deploy-role این مجوزها رو داره:
"Action": [
"lambda:CreateFunction",
"lambda:UpdateFunctionCode",
"iam:PassRole"
],
"Resource": "*"روی کاغذ این یه escalation تمامعیاره. ولی permissions boundary همون رول فقط lambda و logs رو مجاز کرده و اسمی از iam:PassRole نیاورده. هیچ Denyای هم در کار نیست. چون boundary یه سقفه، مجوز مؤثر اشتراک دو سنده و PassRole قیچی میشه؛ برای همین AWSHound اون یال رو اصلاً نمیکشه.
کار اصلی تو فاز Process انجام میشه: wildcardها باز میشن، سیاستهای identity ادغام میشن، بعد boundary و SCP اعمال میشن و آخر سر نوبت سیاست خود منبع میرسه که برای هر سرویس قانون ترکیب متفاوتی داره. برای conditionهایی که آفلاین معلوم نیستن (مثل IP مبدأ یا MFA) ارزیاب سهحالته کار میکنه و عمداً سمت مهاجم میره: allowهایی که نمیتونه ردشون کنه رو نگه میداره. یعنی مسیرها کاندیدان، نه قطعی.
مدل گراف ۱۵۶ نوع یال داره که فقط ۳۶ تاش پیمودنیان. مثلاً AWS_Trusts تو گراف میمونه ولی مسیریابی روش راه نمیره، چون trust policy بهتنهایی دسترسی نیست و یال واقعی AWS_CanAssumeRole هست. چند مجوز که تکتک بیخطرن هم تو یال ترکیبی AWS_CanCreateAndAssumeAdminRole جمع میشن. نُه collector داره (IAM، Organizations، S3، KMS، SSM، EC2، Lambda، CloudFormation و EKS) و فقط S3 پیشفرض خاموشه.
نکات کلیدی:
- AWSHound رایگان و self-hosted هست و روی هر دو نسخهٔ Community و Enterprise BloodHound کار میکنه
- فقط کالهای List و Get و Describe میزنه و هیچی رو تو اکانت هدف تغییر نمیده
- ۱۵۶ نوع یال داره و فقط ۳۶ تاش برای shortestPath() پیمودنیان
- نُه collector؛ فقط S3 پیشفرض خاموشه و سقف ۱۰۰۰ آبجکت در هر باکت داره
- مقدار پارامترهای SSM، کد و متغیرهای محیطی Lambda و همچنین کلیدها و رمزها جمع نمیشن
- جمعآوری KMS فعلاً فقط same-account هست و key policy جمعنشده fail closed حساب میشه




