تست نفوذ اندروید-بدقلق های پروکسی نرو!

سلام، من مجید هستم و توی این پست میخوام در مورد یکی از چالش هایی بنویسم که هنگام تست نفوذ یک برنامه اندرویدی که با Flutter نوشته شده بود، به اون برخوردم.مقدمهمن برای تست نفوذ از متودولوژی OWASP MASVS استفاده میکنم و داستان از این قراره که یکی از کارهایی که هنگام تست داینامیک باید انجام بدین، بررسی ترافیک های بین برنامه و سرور هست. معمولا برنامه های اندرویدی از پروتکل های HTTP و یا WebSocket برای این منظور استفاده میکنن و وظیفه ما هم بررسی ارتباط با Endpoint هاست.برای این کار من از ابزارهای زیر استفاده میکنم:Genymotion: شبیه ساز سیستم عامل اندرویدBurp Suite: ابزار پروکسی و بررسی ترافیکبرای‌ نصب Genymotion از این لینک دانلود و نصب کنید و برای Burp Suite هم از این لینک. بعد از نصب کافیه یک مطابق شکل زیر یک سیستم عامل اندرویدی برای خودتون بسازید.این نکته رو بگم که من برای روشی که میخوام در ادامه بگم از اندروید 9 استفاده کردم و روی ورژن 6 و 12 هم جواب نگرفتم.سیستم عامل اندروید به طور پیشفرض Root شده است و بعد از اجرای اون نیازه که یه ARM-Translation رو روی شبیه ساز نصب کنید. برای ورژن های قبل از اندروید 9 از این لینک و برای ورژن های بعدی این لینک. خروجی این پروژه ها یک فایل zip هست که با درگ و دراپ روی شبیه ساز باید انتقال داده بشه و بعد از اون سیستم Flash شده و شما میتونید برنامه های ARM رو روی شبیه ساز نصب و استفاده کنید.اگر توی حوزه وب فعالیت دارین، میدونید که برای اینکه ارتباط بین مرورگر و سرور رو بخوایید با Burp Suite بررسی کنید نیازه که Cert مربوط به Burp Suite رو توی مرورگر وارد کنید. توی اندروید هم باید همین کار رو انجام بدیم ولی یکم قضیه فرق داره. برنامه های اندرویدی برای ارتباطاتی که امن هست و از TLS استفاده میکنه یکی از سه حالت زیر رو دارن:برنامه Cert مربوط به سرور رو چک نمیکنه (به طور پیشفرض غیر فعاله مگر اینکه برنامه نویس این کار رو کرده باشه!)برنامه به سیستم عامل اعتماد میکنه. یعنی میگه اگه سیستم عامل به این Cert اعتماد داره منم اوکیم.برنامه مقدار Cert سرور و یا Hash اون رو در کدش داره که موقع ارتباط TLS Handshake اعتبار سنجی انجام میده (به این سازوکار Certificate Pinning میگن)خوب توی این مرحله باید Cert ابزار Burp Suite رو به سیستم وارد کنیم. برای اینکار کلی مقاله وجود داره و من دیگه توضیحش نمیدم شما از طریق این مقاله برین جلو.حالا باید برای سیستم اندرویدی پروکسی ست کنید که از ترافیک اون از سیستم اصلی شما و ابزار Burp Suite رد بشه. پس سرور میشه IP سیستم اصلی و Port میشه Port ی که ابزار Burp Suite روی اون گوش میده. برای این کار به مسیر زیر در اندروید برین:Settings > Network & Internet > Wi-Fi > Advanced Options > Proxy > Manualخوب حالا اگه برنامه شما به Cert های سیستم عامل اعتماد میکنه شما ترافیک HTTP یا WS رو توی Burp Suite میبینید اما اگه سازوکار Certificate Pinning داره شما باید زحمت bypass رو بکشین. برای اینکار میتونید از ابزار Frida استفاده کنید. این ابزار حین تست داینامیک شما میتونه فانکشن هایی از برنامه که مد نظر دارین رو Hook کنه و کار دلخواه شما رو جایگزینش کنه. این مقاله هم معرفی میکنم که بخونید و اگه به این مشکل رسیدین بدون باید چیکار کنید. نکته اینکه کلی اسکریپت برای Bypass بوسیله Frida وجود داره که میتونید ازش استفاده کنید.اگه مراحل بالا رو برین جلو، حالا تسک شما میشه تست Endpoint ها و کشف آسیب پذیری.چرا یک سری برنامه ها بدقلق اند؟توی تست ها برای اولین باری که به یک برنامه Flutter ای برخوردم دیدم با اینکه Certificate Pinning فعال نیست و ترافیک سایر برنامه ها از Burp Suite رد میشه اما باز ترافیک این برنامه به پروکسی من محل نمیزاره!با سرچ فهمیدیم که طبق گفته ایشون، پیاده‌سازی فریمورک های مثل Flutter، Xamarin و Unity به این صورت هستش که خودشون مدیریت ارتباطات رو بر عهده دارن و به سیاست های سیستم (مثل قرار دادن پروکسی) محل نمیزارن :)Third party app frameworks will have their own low-level implementation for TLS and HTTP and default pinning bypass scripts won’t work. If the app is written in Flutter, Xamarin or Unity, you’ll need to do some manual reverse engineering.حالا باید چیکار کرد؟ برای اینکه از شر این وضع خلاص شد باید دو تا کار رو انجام داد:1- سیستم عامل اندروید شما Root باشه که به طور پیشفرض توی Genymotion این کار اوکیه2- برنامه ProxyDroid رو شبیه ساز نصب و فعال کنید (مطابق شکل زیر).با این روش نیاز به ست کردن پروکسی در تنظیمان گوشی نیست و میتونید ترافیک این برنامه ها رو روی Burp Suite مشاهده کنید.امیدورام این پست مفید بوده باشه براتون.راه ارتباطی با من در توییتر.