هک کردن APIهای گوگل با کمک هوش مصنوعی
خلاصهٔ کاملتر
نویسنده میگه بعد از دعوت به برنامهٔ bugSWAT گوگل دوباره به تحقیق روی این شرکت برگشته و این بار تصمیم گرفته از هوش مصنوعی برای فاز کردن خودکار APIهای گوگل در مقیاس بزرگ استفاده کنه. نقطهٔ شروع کار، سندهای Discovery بودن؛ این سندها معادل Swagger گوگل هستن و بهصورت ماشینخوان همهٔ اندپوینتها، پارامترها و متدهای یه API رو لیست میکنن. بعضیهاشون عمومی هستن ولی بیشترشون برای دسترسی نیاز به یه کلید API معتبر دارن.
برای جمع کردن کلیدها، نویسنده و دوستش Michael یه روش جامع رفتن: بیش از ۶۰ هزار فایل APK اندروید (هر نسخه از هر اپ گوگل) رو دانلود و باز کردن و دنبال کلید گشتن، یه افزونهٔ کروم با Chrome Debugger API ساختن که ترافیک شبکهٔ بیش از ۲۸۰۰ دامنهٔ وب گوگل رو شنود کنه، و حتی باینریهای iOS رو هم تحلیل کردن. نکتهٔ مهم اینه که یه کلید پیداشده توی یه سرویس، معمولاً چند API دیگه رو هم توی همون پروژهٔ GCP فعال داره.
برای فیلتر کردن کلیدهای غیر گوگلی، نویسنده از یه اندپوینت توی Cloud Marketplace API استفاده کرده. هر کلید توی پیام خطا شمارهٔ پروژهٔ GCP خودش رو لو میده، و این اندپوینت با گرفتن اون شماره، دامنهٔ مالک پروژه (مثلاً google.com) رو برمیگردونه؛ اینجوری کلیدهایی که مال پروژههای گوگل نبودن دور ریخته شدن.
بخش جالب کار احراز هویت بود. توکنهای Bearer با کلید API کار نمیکنن چون به پروژهٔ GCP گره خوردن، ولی خیلی از APIها از سیستم اختصاصی گوگل به اسم First Party Authentication (FPA) پشتیبانی میکنن که با کلید API جواب میده. نویسنده میگه Michael متوجه شده گوگل بهاشتباه برای مدتی sourcemapها رو لو داده بود، و از روی همونها کد کتابخانهٔ داخلی gapix که توکن FPA نسخهٔ ۲ رو میسازه به دست اومده.
نحوهٔ ساختن این توکن این شکلیه: سه شناسهٔ کاربری (ایمیل با کلید e، Gaia ID با کلید u، و دامنهٔ Workspace با کلید a) با یه timestamp، کوکی نشست و مقدار Origin ترکیب میشن و هش SHA1 میگیرن. فرمت نهایی توکن به شکل __ میشه. یه نکتهٔ بامزه اینه که بکاند کلیدهای ناشناخته رو نادیده میگیره، پس میشه رشتههای دلخواه هم تو بخش شناسهها گذاشت.
نویسنده توضیح میده که مانعهای دیگهای هم سر راه بوده: APIها یه «لیست سفید Origin» دارن که مستند نیست، و کلیدها هم میتونن محدودیتهای Server (بر اساس IP)، Browser (نیاز به هدر Referer درست)، Android (نیاز به هدرهای X-Android-Package و X-Android-Cert) یا iOS (هدر X-Ios-Bundle-Identifier) داشته باشن. نویسنده برای دور زدن اینها، همهٔ این مقادیر رو موقع جمعآوری کلیدها ذخیره کرده. در نهایت با ترکیب کلیدها، دامنههای زندهٔ API و پارامتر labels (مثل GOOGLE_INTERNAL) تونسته سندهای Discovery بیش از ۱۵۰۰ API رو دربیاره، از جمله اندپوینتهای مخفی پشت لیبلهای visibility.
نکات کلیدی:
- ابزار اصلی کشف، سندهای Discovery گوگل بودن که نقشهٔ همهٔ اندپوینتها و پارامترها رو میدن
- کلیدهای API با اسکن بیش از ۶۰ هزار APK و شنود ترافیک ۲۸۰۰ دامنهٔ وب جمع شدن
- یه کلید معمولاً چند API دیگه رو هم توی همون پروژهٔ GCP فعال داره
- احراز هویت First Party گوگل (FPA) برخلاف توکن Bearer با کلید API کار میکنه
- نشت sourcemap باعث شد منطق ساخت توکن FPA نسخهٔ ۲ از کتابخانهٔ gapix لو بره
- پارامتر labels مثل GOOGLE_INTERNAL اندپوینتهای مخفی رو توی سند Discovery آشکار میکنه




