پست دوم: فاز عملیاتی و استخراج کلید از رم (۲/۳)
چطور رمز ۲۰۰,۰۰۰ مرتبهای PBKDF2 با یک هوک فریدا بیاثر شد؟
در پست قبل دیدیم که اپلیکیشن چقدر قوی رمز عبور فایل گواهینامه (.p12) رو به صورت پویا تولید میکنه. اما مشکل اصلی سناریو اینجاست: محل نگهداری کلید!
برنامه برای تولید جفتکلید از این دستور استفاده کرده:
KeyPairGenerator.getInstance("EC")
این یعنی کلید به صورت یک شیء نرمافزاری معمولی توی حافظه رم (JVM Heap) ساخته میشه، نه داخل محیط ایزوله و سختافزاری دستگاه (TEE).
حالا بریم سراغ سناریوی دور زدن (Bypass) در دو گام:
گام اول: شکستن SSL Pinning (بایپاس TrustManager)
قبل از هر چیز باید کاری کنیم اندروید گواهینامه جعلی Burp Suite رو قبول کنه. با فریدا متد SSLContext.init() رو هوک میکنیم و بخش TrustManager رو با یک کلاس سفارشی که هر سازوکاری رو تایید میکنه جایگزین میکنیم. حالا ترافیک تا Burp میاد، اما سرور به خاطر نداشتن کلید کلاینت ارور 401 میده.
گام دوم: قاپیدن کلید در لحظه طلایی!
قفل چقدر هم که قوی باشه، برنامه برای اینکه بتونه با سرور دستدادن (Handshake) انجام بده، مجبوره فایل رو باز کنه، رمزگشایی کنه و کلید رو به صورت متن آشکار وارد رم کنه!
نویسنده متد سازنده کلاس ClientKeyManager رو دقیقاً در لحظه لود شدن هوک میکنه. فریدا اینجا چیکار میکنه؟
رمز عبور ۶۴ کاراکتری حاصل از ۲۰۰ هزار بار فرآیند PBKDF2 رو قبل از پاک شدن از رم، دو دستی تقدیم مهاجم میکنه!
متدهای ks.getCertificate و ks.getKey رو صدا میزنه و بایتهای واقعی کلید خصوصی رو از رم بیرون میکشه و به فرمت متنی استاندارد (PEM) توی کنسول چاپ میکنه!
در پست آخر، این کلید رو به Burp Suite تزریق میکنیم و ترافیک رو کاملاً دور میزنیم.
#AndroidSec #Exploit #MobileSecurity #BugBounty #SSLBinning
@AndroidSec_fa
Post #133
233
- 👍 3