آشنایی با تست نفوذ در اندروید
فرض کن نشستی توی ماشینی که از اسنپ درخواست دادی بیاد دنبالت و بعد از این که به مقصدت رسیدی بدون این که ریالی به اسنپ و راننده تاکسی پرداخت کنی از ماشین پیاده میشی و میری پی زندگیت.
یا میخوای توی دیوار یه آگهی بذاری و بدون این که پولی خرج کنی آگهیت نردبون بشه و ساعتها یا حتی روزها، اولِ لیست جستجوی کاربرای دیوار باشه.
این سناریوها که به نظر خیلی دور از ذهن میان، در واقع نشون دهندهی وجود آسیب پذیریهای امنیتی توی اپلیکیشنهای اندروید هستن.
یعنی اگر کسی نباشه که روی اپلیکیشن ها تست نفوذ اندروید انجام بده اینطور اتفاقات خیلی رایج میشن و این هم برای شرکتها و هم کاربراش مشکلات زیادی ایجاد میکنه.
تمام اپلیکیشنهایی که شما دارید ازش استفاده میکنید باید حتما از دست این آسیب پذیریها جون سالم بدر ببرن وگرنه یه نفر پیدا میشه که اینطوری شروع به سوءاستفاده ازشون بکنه.
در ادامه مقاله آشنایی با تست نفوذ در اندروید میخوام شمارو با چند تا از روشهای مرسوم این کار آشنا کنم.
چرا تست نفوذ در اندروید مهمه؟
اپلیکیشنهای اندروید یا به طور کلی همهی نرمافزارها برای کاربرها و توسعه دهندهها حکم خونه رو دارن. قطعا شما به عنوان یک کاربر یا یک برنامهنویس دلت نمیخواد کسی بیاجازه وارد خونت بشه و ازش دزدی کنه. حالا بهترین راه برای جلوگیری از دزدی چیه؟ اینه که خودت یک دزد حرفهای رو استخدام کنی تا بیاد و از خونت دزدی کنه، اینطوری میفهمی که واقعا سوراخ سمبههای خونت کجاست.
کاری که تست نفوذ انجام میده دقیقا همینه. یعنی شما میای قبل از این که کسی بره سراغ اطلاعات کاربرها یا این که بخواد به یه طریقی پرداختهای داخل برنامه تورو دور بزنه و رایگان از برنامت استفاده کنه، میای و خودت برنامت رو هک میکنی یا میسپاریش به یک آزمایشگاه امنیت. اینطوری میتونی دیگه با خیال راحت بشینی و دونه دونه این ایرادات رو رفع کنی چون هنوز کسی نفهمیده که برنامت چه نقصهایی داره.
روشهای رایج برای تست نفوذ در اندروید
تست نفوذ در اندروید شامل تکنیکها و ابزارهای مختلفی میتونه باشه. در اینجا بعضی از روشهای مهم این کار رو بهتون معرفی میکنم.
-
- تحلیل کد استاتیک (static code analysis) :
توی این روش شما به عنوان کسی که میخواید تست نفوذ انجام بدید باید به سورس کد برنامه دسترسی داشته باشید. با این روش بدون اجرا کردن برنامه شروع به تحلیل کدهای نوشته شده می کنید تا خطاهای برنامه نویسی و نقاط ضعف دیگه رو پیدا کنید. از ابزار های مهمی که باهاش این کارارو انجام میدن میشه به SonarQube و Checkmarx اشاره کرد.
مثلا برنامه Sonar Qube میاد به صورت اتوماتیک از طریق یک سری قوانین و پترنهای از پیش تعریف شده، خطاها یا آسیب پذیریهای رایج مثل استفاده نادرست از دادهها یا مدیریت نا مناسب حافظه رو توی سورس کد پیدا میکنه و در آخر توی داشبوردش به شما یک گزارش کامل از این تحلیل ارائه میده. - تحلیل کد داینامیک (dynamic analysis):
توی این روش دیگه باید برنامه رو روی دستگاههای اندرویدی (چه شبیهساز چه دستگاه واقعی ) اجرا کنیم. اینجا دیگه برنامه باید تحت شرایط واقعی تست بشه و آسیب پذیریهایی که ممکنه در زمان اجرا بوجود بیان رو پیدا کنیم. در ادامه چند تا از ابزارهای مهم برای کار رو بهتون معرفی میکنم.
- تحلیل کد استاتیک (static code analysis) :
نرمافزارهای کاربردی برای تست نفوذ در اندروید
ADB
adb یک ابزار کامندلاین هست که تقریبا تمام نرمافزارهایی که در ادامه معرفیشون میکنم برای ارتباط با دستگاه اندرویدی ازش استفادهمیکنند. واسه همین بهتره که همین اول باهاش آشنا بشید. adb که در واقع مخفف Android Debug Bridge هست، همونطور که از اسمش هم معلومه پل ارتباطی بین دستگاه اندرویدی و کامپیوتر هست. این ارتباط میتونه از طریق wifi یا بلوتوث یا با استفاده از شبیه ساز های اندرویدی برقرار بشه.
چند تا از دستورات مهم adb رو براتون مینویسم تا باهاش بیشتر آشنا بشید.
adb devices
این دستور تمام دستگاههایی که به کامپیوتر وصل هستن رو نشون میده. دقت کنید بعضی وقتا این دستور امولاتورهارو نشون نمیده واسه همین باید برای وصل شدن به امولاتور برید آدرس و آی پی اون امولاتور رو پیدا کنید و بعد با دستور زیر بهش وصل بشید:
adb connect <device adress>: <device port>
دستور بعدی برای نصب یک فایل apk روی دستگاه اندرویدی استفاده میشه:
adb install example.apk
و برای پاک کردن اون برنامه از دستور زیر استفاده می کنیم:
adb uninstall com.example.app
این دستور برای انتقال فایل از کامپیوتر به دستگاه استفاده میشه:
adb push example.txt /sdcard/example.txt
یکی از دستورات جالب adb دستور زیر هست که باهاش میتونید وارد محیط shell لینوکس بشید و دستورات لینوکس رو مستقیما روی دستگاه اندرویدی اجرا کنید:
adb shell
حالا در ادامه میخوام برنامههایی که کار ما رو برای تست نفوذ در اندروید آسون تر می کنن معرفی کنم.
Burp Suit
برپ سوئیت یکی از محبوب ترین ابزارهای تست نفوذ در اندروید هست. البته بجز اندروید خیلی جاهای دیگه هم کاربرد داره. با استفاده از این برنامه شما میتونید پکتهای ارسالی و دریافتی برنامه خودتون رو ببینید و متوجه بشید که کجاها سوتی دادین. مثلا خیلی وقتا پیش میاد که با استفاده از همین برنامه شما میتونید دادههای ارسالی برنامه رو تغیر بدید. برای مثال بیاید و یوزرنیمی که در صفحه لاگین وارد شده رو تغییر بدید و با استفاده از پسورد یک شخص دیگه، پروفایل شخص دیگهای رو باز کنید. به حملاتی که به این شکل انجام میشن حملات Man in middle هم میگن.
استفاده مقدماتی از Burp Suit
از اونجایی که این برنامه خیلی کاربردی هست و تمام افراد از مبتدی تا حرفهای میتونن ازش استفاده کنند تصمیم گرفتم یکمی بیشتر بریم تو دلش و آموزش استفاده از این برنامه رو هم واستون قرار بدم.
برای دانلود برپ سوئیت میتونید از سایتهای ایرانی مثل soft98..ir اقدام کنید. همونجا روش نصبش رو هم توضیح داده.
از طرفی نیاز دارید که یک شبیهساز اندروید هم روی دستگاهتون نصب کنید. ما اینجا از جنیموشن (genymotion) استفاده میکنیم.
قبل از شروع باید یکم فنی تر در مورد بِرپ سوئیت بدونید.
- نقش burp suit:
این برنامه به عنوان یک پروکسی عمل میکنه یعنی به شما اجازه میده که ترافیک بین کلاینت و (در این مورد جنیموشن) و سرور رو ببینید یا تغییر بدید. - اهمیت Https:
اکثر اپلیکیشنها برای تامین ارتباط بین کلاینت و سرور از این پروتکل استفاده میکنند. کاری که https انجام میده اینه که با استفاده از پروتکل SSL/TLS اطلاعات رو رمزنگاری میکنه تا کسی نتونه این وسط اطلاعات رو دزدکی بخونه. - چطور Https رو دور بزنیم؟
زمانی که میخواید یک تست نفوذ در اندروید انجام بدید بالاخره نیاز دارید یه طوری این اطلاعاتی که داره این وسط رد و بدل میشه رو بخونید دیگه اونوقت اگه از پروتکل https استفاده شده باشه نیاز دارید یه طوری دورش بزنید. برای این کار نیاز به سرتیفیکیت (certificate) دارید. امولاتورها معمولا به طور پیشفرض به سرتیفیکیتهایی که ما بهشون میدیم اعتماد نمیکنن ولی چون ما زیر بار نمیریم یجوری به زور این سرتیفیکیت رو به امولاتور تزریق میکنیم.
حالا برای شروع تست نفوذ در اندروید با استفاده از burp suit برنامه رو باز کنید.
طبق تصاویر زیر باید محیط burp suit رو برای گوش دادن به درخواستهایی که از طریق جنیموشن داره به سمت اینترنت میره آماده کنیم.
برای این کار باید حتما یک فایل سرتیفیکیت به امولاتورمون بدیم در ادامه این رو هم بهتون آموزش میدم.
خب حالا میریم که فایل سرتیفیکیت رو ایجاد کنیم.
خب حالا فایل سرتیفیکیت ما آماده شده. حالا باید وارد cmd بشیم و بعد از اتصال به امولاتور فایل سرتیفیکیت رو توش نصب کنیم. برای این کار از دستورات زیر استفاده کنید. اینجا یه دستگرمی هم با adb داریم.
با استفاده از دستور زیر امولاتورتون رو پیدا کنید. دقت کنید که حتما adb رو روی سیستموتون نصب کنید و توی environment ویندوزتون تعریفش کنید. آموزش نصبش توی سایتهای مختلف هست ما دیگه اینجا توضیح نمیدیم چون از بحث خارج میشیم.
adb devices
اینجا آدرس و آی پی امولاتور خودتون رو وارد کنید.
adb connect 192.168.56.102:5555
adb shell settings put global http_proxy localhost:3333
adb reverse tcp:3333 tcp:8082
با استفاده از ابزار openssl سرتیفیکیتمون رو برای امولاتور آماده میکنیم. آموزش نصب openssl هم میتونید تو گوگل سرچ کنید و فراموش نکنید که توی environment ویندوزتون هم تعریفش کنید.
openssl x509 -inform DER -in burp.der -out burp.pem
در دستور بعدی اولین خطی که به شما میده رو کپی کنید چون بعدا بهش نیاز داریم
for /f "delims=" %i in ('openssl x509 -inform PEM -subject_hash_old -in burp.pem') do @echo %i & goto :eof
move burp.pem 9a5ba575.0
با استفاده از دستورات زیر فایل سرتیفیکیت رو روی امولاتور نصب
adb root adb remount adb push 9a5ba575.0 /sdcard/ adb shell mv /sdcard/9a5ba575.0 /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0
خب حالا وارد برپ سوئیت بشید و از قسمت proxy، تب Http history رو انتخاب کنید تا بتونید پکتهای ارسالی و دریافتی امولاتور رو بخونید.
همونطور که توی عکس هم مشخصه ما اینجا توی امولاتور یک درخواست https با متن hello world به گوگل فرستادیم و با استفاده از برپ سوئیت تونستیم اونو بخونیم. حالا این داستان رو بسط بدید به تمام درخواستهایی که اپلیکیشنهای مختلف به سرورهاشون ارسال میکنند!
در ادامه چند تا از نرم افزار هایی که برای تست نفوذ در اندروید ازشون استفاده میشه رو معرفی کردم.
OWASP ZAP (Zed Attack Proxy)
این برنامه بیشتر برای برای نرمافزارهای تحت وب طراحی شده اما مثل همون برپسوئیت میتونه ترافیک شبکهای بین اپلیکیشن و وب سرور رو اینترسپت (intercept) کنه. همونطور که قبلا هم گفتم این کار معمولا برای مسائلی مثل نشت دادهها و ضعفهای احراز هویتی انجام میشه.
MobSF (Mobile Security Framework)
MobSF یک برنامه محبوب دیگه جهت تحلیل داینامیک و استاتیک و تست نفوذ در اندروید و ios هست. برای استفاده از این برنامه کافیه فایل apk تون رو بدید بهش تا خودش برنامه رو دیکامپایل کنه. بعدش شروع به تجزیه و تحلیل کدهای برنامه میکنه و مجوزهای برنامه، سرویسها و سایر مولفههارو شناسایی میکنه و اینطوری میتونید آسیب پذیریهای برنامه رو بررسی کنید.
اگر تنظیمات محیط شبیه سازی MobSF رو هم فعال کنید میتونید برنامه رو روی یک امولاتور اجرا کنید و به طور داینامیک ترافیک شبکه، فعالیتهای فایلی و API هایی که برنامه صدا میزنه (فراخوانی میکنه) رو تحلیل کنید.
بعد از پایان تجزیه و تحلیل هم بهتون یک گزارش جامعی از نتایج تحلیل استاتیک و داینامیک ارائه میده که شامل توصیف آسیبپذیریها، مشکلات حریمخصوصی و توصیههای امنیتی هست.
Drozer
این یک ابزار خیلی کاربردی توی کار امنیت برنامههای اندرویدی هست. این برنامه با استفاده از ماژولهایی که داره دستورات رو به اپلیکیشن میده و پاسخهای اون رو بررسی میکنه و قابلیت تحلیل داینامیک داره. یکی از کارای خیلی جالبی که این برنامه میکنه اینه که لیستی از تمام اجزای اپلیکیشن مثل اکتیویتیها و برودکست ریسیورها تهیه میکنه و بهتون میگه که کدوم یک از اینا به صورت عمومی در دسترس هستن و ممکنه آسیب پذیر باشن.
این برنامه میتونه حتی intent های خاصی رو به برنامه ارسال کنه تا واکنش برنامه به این اینتنتها رو ببینه. (اگر بخوام خیلی ساده بگم اینتنتها مکانیزمی هستن برای ارتباط بین صفحات مختلف برنامه یا حتی برنامههای دیگه. مثلا برای شروع یک اکتیویتی یا سرویس یا دریافت برودکست از برنامههای دیگه باید از اینتنتها استفاده کنیم.)
App Use
این برنامه که اسمش در حقیقت مخفف Android Pentest Platform Unified Standalone Environment هست یک محیط مجازی برای شما فراهم میکنه که توش میتونید خیلی از کارارو باهم انجام بدید. مثلا فایل apk رو دیکامپایل کنید، فایل منیفستش (manifest) رو ببینید، لایوتهای برنامه رو استخراج کنید، وجود ویروس در برنامه رو شناسایی کنید، آنالیز داینامیک انجام بدید، ویو هارو تغییر بدید و…
البته باید اشاره کنم که این برنامه رایگان نیست و باید اشتراکش رو بخرید.
در مورد امنیت در نرمافزارها میشه مدتها حرف زد و مطلب نوشت. من توی این مقاله فقط یک شرح مختصری دادم و سعی کردم شمارو با یک سری مفاهیم مقدماتی آشنا کنم ولی دیگه بقیش با خودتون هست که برید و آموزش ببینید.
برای شروع میتونید دوره تست نفوذ در اندروید از یودمی رو ببینید یا در یوتیوب در موردش سرچ کنید.
راستی ما توی سایتمون چند تا مقاله دیگه هم در مورد امنیت در اندروید داریم که میتونی اونها رو هم مطالعه کنی :