أدوات وبرامجالمقال المثبتمواضيع عامةمواضيع ومقالات

مقال : تحليل البرمجيات الخبيثة على أجهزة الأندرويد

تم أرشفة هذا المحتوى


هذا التمرين يغطي تقنيات تحليل برمجيات الأندرويد الخبيثة باستخدام عينة برمجيات خبيثة خاصة.  عند تشغيل البرمجيات الخبيثة على جهاز اندرويد فإنها تقوم بإعطاء شيل عكسي “reverse shell” للمهاجم. سنقوم بتحليل كافة وظائف التطبيق باستخدام كل من تقنيات التحليل كـ static و dynamic.

بإمكانك تحميل ملفات الدعم هنا: DOWNLOAD 

  • قائمة بانظمة الVMs  المستخدمة : هذا التمرين المختبري يستخدم نظام Santoku Linux VM.
  • الأدوات:  AVD Manager, ADB, Wireshark, dex2jar, apktool
  • الملفات المستخدمة في هذا المختبر: bake_the_cake.apk، apktool،  tcpdump,

خطوات لضبط جهاز أندرويد إفتراضي, سنبدأ هذه التمرين عن طريق إنشاء محاكاة .بالانتقال إلى:

“Santoku>Development Tool”>  ثم انقر على“Android SDK Manager” كما هو مبين ادناه

1

القيام بالخطوة السابقة سيفتح النافذة التالية.

1

إن نظام  Santoku  الافتراضي يتكون من صور “images” لعدد قليل من إصدارات الأندرويد. تبعا للمتطلبات، يجب علينا تحميل صور الأندرويد  لإنشاء المحاكي المناسب. إذا لاحظت بالصورة أعلاه بأننا نصبنا مسبقا Android 4.4.2 ARM EABI v7a System Image. في حال تم ضبط كل شيء، انقر Tools في شريط القوائم  بالجزء العلوي من النافذة ثم انقر فوق ” Manage AVDS” كما هو مبين أدناه.

1

هذا وسوف يقوم بفتح نافذة”Android Virtual Device(AVD) Manager” كما هو مبين أدناه.

1

كما نرى في الشكل أعلاه، لدينا بالفعل نطام محاكي واحد مضبوط الإعدادات. اما الآن، دعونا نقوم بإنشاء محاكي جديد بمواصفات من إختيارنا . إنقر فوق “create” وسترى النافذة التالية.

1

الآن، نحدد الخيارات المناسبة كما هو موضح أدناه.

1

كما ترون في الشكل أعلاه، قمنا بتسمية النظام  المحاكي الخاص بنا بإسم “analysis_device”. بعد ذلك، نقوم بإختيار الجهاز بحجم “3.2inch HVGA” حتى يكون نظام المحاكي بحجم أصغر. وبعدها ، إخترنا الهدف ليكون “Android  4.4.2-Apl Level 19” . وحددنا سعة التخزين الداخلية في وحدة المعالجة  “CPU” لتكون “500=MB” . وأخيرا, نعين”MB=100″ لبطاقة ال “SD”.

1

بعد التحقق من كل شيء، انقر على زر “موافق” لاستكمال التنصيب. بمجرد اإنتهائك من إعداد الخطوات الموضحة، يجب رؤية الجهاز الإفتراضي الإضافي كما هو مبين أدناه.

1

إختر المحاكي المنشئ حديثا وأنقر على زر “start” لبدء تشغيل المحاكي. يجب أن يظهر لك نافذة التأكيد التالية.

1

أنقر على زر “Launch” لبدء عملية المحاكاة، فيظهر لك شريط سير العملية.

1

تحلى بالصبر وأنتظر لفترة من الوقت حيث أن المحاكي  قد يستغرق وقتا أطول ليبدأ عند تشغيله للمرة الأولى. وبمجرد ان تبدأ, يجب أن يظهر لك المحاكي كما هو مبين أدناه.

1

تهانينا! لقد قمت بإنشاء المحاكي الخاص بك لتحليل عينات برمجيات الأندرويد الخبيثة.

 

التحليل الثابت Static analysis


يتضمن التحليل الثابت  عمل decompiling للتطبيق والنظر في كود المصدر وتحليله لفهم ما تقوم به  البرامج الضارة. دعونا نبدأ  بتحليل ملف AndroidManifest.xml . يمكننا الحصول على ملف AndroidManifest.xml  بإستخدام عدة طرق. دعونا نستخدم apktool  واتباع الامر المبين أدناه للحصول عليه:

apktool d bake_the_cake.apk

ولكن، قبل أن نفعل ذلك، علينا أن نتأكد من أننا تستخدم أحدث نسخة من apktool وحذف 2 من مسار apktool’s framework لأن apktool التي تاتي مع Santoku قديمة وقد لا تكون قادرة على تفكيك ملفات APK  المستهدفة. فيما يلي الخطوات.

إزالة 2 تحت المسار /home/infosec/apktool/framework/ بإستخدام الأمر التالي:

 rm /home/infosec/apktool/framework/1.apk

يمكنك تشغيل الأمر أعلاه من أي مكان في terminal. وسوف يظهركما هو مبين في الشكل أدناه.

1

الآن، دعونا نحصل على أحدث نسخة من apktool   ويمكننا الحصول عليها من نظام Santoku VM.

1

الآن، قم بتشغيل الأمر التالي لتفكيك ملف Apk  ويجب أن يعمل بشكل جيد

 java -jar apktool_2.1.1.jar d bake_the_cake.apk

1

عظيم!!Apktool قامت بأداء المهمة. إن الأمر أعلاه من شأنه إنشاء مجلد جديد بإسم ملف APK.في حالتنا كان اسمه “bake_the_cake”. إنتقل إلى المجلد وقام بعرض الملفات والمجلدات داخله كما هو موضح في الشكل أدناه. قم بتشغيل الأمر التالي من مجلد analysis للإنتقال إلى مجلد bake_the_cake الدي تم إنشاؤه حديثا.

 $cd bake_the_cake

وبعد ذلك، قم بتشغيل امر ls لعرض الملفات والمجلدات داخل المجلد الحالي.

1

كما ترون في الشكل أعلاه، فقد اضيف الى القائمة ملف يسمى AndroidManifest.xml . دعونا نقم بمعاينة محتوياته باستخدام الأمر التالي ومعرفة ما إذا كان هناك أي شيء مثير للاهتمام.

vim AndroidManifest.xml

1

انظر الى المحتوى أعلاه، ليس هناك أي شيء مشبوه. حتى  ان هذا التطبيق لا يتطلب أية أذونات خطيرة. الشي الوحيد الذي يطلبه هذا التطبيق هو  اذن الوصول الى شبكة الإنترنت ، ولكن هذا لا يؤكد أنه ضار مثل معظم التطبيقات في هذه الأيام والتي تتطلب  إذن الانترنت لمعظم وظائفها. إذا كنت قد فرغت مع إستكشاف الملف المفتوح بواسطة vim editor ، اضغط CTRL + C  ثم أدخل !q: للخروج منه. لذلك، نحن بحاجة إلى القيام بمزيد من التحليل للتأكد ما اذا كان للتطبيق أي سلوكات ضارة. دعونا نتعمق اكثر في إلغاء ترجمة التطبيق وذلك بإستخدام  dex2jar&JD-GUI  . وسوف نبدأ أولا بفك ضغط التطبيق كما هو مبين في الشكل أدناه.

$unzip bake_the_cake.apk

1

إن الأمر أعلاه  من شأنه إنشاء ملفات ومجلدات إضافية في المسار الحالي. يمكنك التحقق من ذلك باستخدام الأمر ls -l كما هو مبين في الشكل أدناه.

1

كما نرى في الشكل أعلاه، قمنا باستخراج ملف “classes.dex” . يتم توليد ملف classes.dex من كود java الذي يكتبه المطورون. في الأصل،  ملفات Java.  يتم تجميعها “complied” بإستخدام مجمع الجافا التقليدي javac.

هذه الخطوة تنشئ ملفات “class.”. التي يتم اضافتها الى  إلى Tool DX والتي بدورها تنشئ  ملف classes.dex  الذي يعمل

داخل (Dalvik Virtual Machine(DVM. ملف Classes.dex  يعتبر compiled binary، وبالتالي فإننا لا يمكن قراءته مثل النصوص العادية. يمكننا استخدام أداة dex2jar  من لائحة الأوامر لتحويل ملف dex الى ملف jar. يمكننا فك ملفات jar  باستخدام أي من java decompilers مثل JD-GUI. هذه  خطوة أساسية لفهم  كود المصدر في التطبيق. أداة dex2jar  مثبتة مسبقاً في Santoku. يمكننا تشغيل الأمر التالي لاستخدام dex2jar.

$dex2jar classes.dex

هذا موضح في الشكل ادناه

1

كما نرى في الشكل أعلاه، تم تحويل ملف classes.dex الى ملف classe_dex2jar.jar.

يمكننا الآن استخدام أي من java decompiler للحصول على ملفات Java من ملف Jar أعلاه. دعونا نستخدم JD-GUI، والذي يتوفر في Santoku. إنتقل إلى “Santoku-> Reverse Engineering “. يجب أن تشاهد JD-GUI  كما هو مبين في الشكل أدناه.

1

انقر JD-GUI  وسيتم فتح الأداة كما هو مبين في الشكل أدناه.

1

كما ذكرنا سابقاً، سوف نستخدم هذه الأداة للحصول على ملفات java من ملف jar. لذلك, انتقل إلى File ثم open وإختار ملف “chooseclasses_dex2jar.jar . وهذا يبدو كما هو مبين أدناه.

1

انقر فوق فتح، وسترى نافذة كما هو موضح في الشكل التالي.

1

عظيم، يمكننا أن نرى الحزمة بإسم  com.infosecinstitute.analyze_me.  يمكننا أيضا أن نرى 3 Classes مختلفة والتي تشمل Main activity  دعونا ننقر MainActivity   واستكشاف ما بداخلها. إستكشاف MainActivity يظهر الكثير من المعلومات المثيرة للاهتمام. أولا، دعونا نلقي نظرة على الكود التالي:

1

هناك ثلاث طرق في الكود أعلاه.  () getReverseShell تبدو خطيرة إذ من الممكن انها تجري call to a method لإعطاء الشيل العكسي للمهاجم. قبل استكشاف ذلك، دعونا ننظر إلى 2 methods:

() copyFile و () changefilepermissions , الكود التالي يوضح  طريقة () copyFile

1

هذه الطريقة  تنسخ بشكل اساسي ملف يسمى nc من مسار assets الى مسار /data/data/com.infosecinstitute.analyze_me/app_files/ .

دعونا نفهم، كيف يحدث هذا:

أولا، شاهدنا ;(“copyFile(“nc في الكود السابق. وقد تم تمرير الـ argument الى () localAssetManager.open وتم فتحه. ثم تم بناء مسار وجهة الملف.

;() getPackageName يعطي اسم الحزمة الحالي. وتستخدم هذه الأسطر القليلة القادمة لنسخ الملف إلى الوجهة.

بما ان اسم الملف هو “nc”، قد تكون حزم netcat binary ضمن ملف apk. فلنقم بالتبديل الى مجلد analysis على terminal والتحقق من مجلد assets من APK الغير مضغوط ومشاهدة الخصائص . ويوضح الشكل التالي أن ملف الذي يحمل اسم “nc” يقع داخل مجلد assets.

1

دعونا نرى أيضا نوع الملف باستخدام أمر file. قم بتنفيذ file nc داخل مجلد assets. يجب أن يكون عليه الناتج  كما هو مبين أدناه.

1

تبين النتيجة أعلاه أن الملف هو ELF binary وصمم لبنية ARM. وهذا يؤكد أن الملف الواقع بداخل مجلد assests هو ملف تنفيذي ربما صمم لأجهزة الأندرويد. الآن، دعونا نرجع إلى JD_GUI وإلقاء نظرة على () methodchangefilepermissions. لنرى الكود التالي

1

يظهر الشكل أعلاه إلى أن تغيير أذونات ملف netcat  binary التي تم نسخها إلى مجلد “app_files”  في وقت سابق. إن أمر “<chmod 755 <filename” يعطي أذونات قابلة للتنفيذ إلى الملف المحدد. يمكننا التحقق إذا تم تغيير أذونات الملف. قم بتشغيل المحاكي الذي انشأناه سابقاً ، ثبت التطبيق وقم بتشغيله. لتثبيت التطبيق، ارجع مرة أخرى إلى terminal وتأكد من أنك دخhل مجلد analysis حيث يوجد ملف APK  المستهدف.ثم قم بتنفيذ الأمر التالي.

“adb install bake_the_cake.apk”

كما هو مبين في الشكل أدناه .

1

وبمجرد التثبيت، تأكد من تشغيل التطبيق بحيث  يتم تنفيذ  الكود التي شاهدناها مسبقاً. الآن، احصل على الشيل على الجهاز كما هو مبين في الشكل أدناه

$adb shell

1

انتقل إلى الحزمة المستهدفة باستخدام أمر cd /data/data/com.infosecinstitute.analyze_me/ ونفذ الامر ls.

1

كما نرى في الشكل أعلاه، تم إنشاء مسار app_files . الآن، دعونا ننتقل إلى هذا المسار ونتحقق من أذونات netcat  بإستخدام امر ls -l كما هو مبين في الشكل أدناه.

1

كما ترون في الشكل أعلاه، وقد حصل nc binary على أذونات التنفيذ. وبمجرد الإنتهاء، قم بالخروج من adb shell   بالضغط على  CTRL + C. وأخيرا، هناك طريقة اخيرة للإستكشاف. دعونا نبدل إلى JD-GUI والتحقق من () getReverseShell ونرى ما يقوم به. فيما يلي ما بقي من الكود:

1

يظهر الكود أعلاه أن التطبيق يستخدم ()Runtime.getRuntime().exec. ويجري اتصالا صادراً إلى عنوان 10.0.2.2 عبر منفذ 5555 مقدما الشيل العكسي الى المهاجم. ويجري حاليا هذا الشئ بإستخدام  أداة netcat binary المرتبطة مع ملف APK.

هذا التحليل الثابت للعيناتالممنوحة يلخص ما يلي:

  • أن هذا التطبيق خبيث.
  • تأتي مع netcat binary المجمعة داخل ملف APK.
  • عندما يفتح المستخدم التطبيق، فإنه يعطي الشيل العكسي للمهاجم (10.0.2.2).

 

التحليل الديناميكي Dynamic Analysis


عندما نحاول إجراء تحليل ثابت، قد يكون هناك غموض في الكود من قبل المطور الشيء الذي يصعب إكتشافه. وفي مثل هذه الحالات، ان الاعتماد على التحليل الثابت يمكن أن يكون مزعجا. هنا يأتي التحليل الديناميكي ليحل  في الصورة. يتكون التحليل الديناميكي من خطوات لتحليل التطبيق من خلال تشغيله. عادة تسخدم هذه العملية لفحص API calls   وnetwork calls, الخ.
يعرض هذا القسم كيفية إجراء تحليل حركة البيانات على أجهزة الأندرويد باستخدام tcpdump..
دعونا نبدأ عن طريق تثبيت وإطلاق التطبيق على المحاكي. ينبغي أن يظهر التطبيق كما هو مبين في الشكل أدناه بمجرد إطلاقه.

1
عظيم ، التطبيق يعمل بصورة جيدة. الآن، دعونا ندفع بـ tcpdump binary لداخل المحاكي. ويمكن القيام بذلك باستخدام أمر adb push كما هو مبين في الشكل أدناه.

1

في الأمر أعلاه، /data/local/tmp, يمكننا أن نرى أن tcpdump binary تم دفعه. الآن، دعونا نحصل على الشيل على المحاكي ونتحقق من الملف في/data/local/tmp   كما هو مبين في الشكل أدناه

1

إذا لاحظت الناتج أعلاه، tcpdump binary حاليا ليس لديه امتيازات للتنفيذ. لذا، دعونا  نقوم بمنح tcpdump أذونات تنفيذ كما هو مبين في الشكل أدناه.

#chmod 755 tcpdump

1

الآن tcpdump binary قابل للتنفيذ. دعونا نقوم بتشغيله والتقاط الحزم باستخدام الأمر التالي.

./tcpdump -v -s 0 -w packets.pcap

1

كما نرى في الشكل أعلاه، قمنا بإلتقاط الحزم وحفظها في ملف يسمى packets.pcap.

الآن، نغلق التطبيق مرة واحدة عن طريق الضغط على الزر الخلفي  على المحاكي ومن ثم نشغله مرة أخرى. هذا  فقط لضمان أن الشاشة الأولى من التطبيق مشغلة، tcpdump يرى حركة البيانات جيداً من نقطة البداية للتطبيق. التطبيق لديه صفحة واحدة فقط، لذلك إغلاق وإعادة تشغيل كافي في حالتنا.

وبمجرد القيام بالتشغيل ، يمكننا أن نتوقف عن التقاط الحزم عن طريق الضغط على CTRL + C في terminal كما هو مبين في الشكل أدناه.

1

الآن، يمكننا أن  نسحب هذه الحزم إلى جهاز محلي لمزيد من التحليل. أولاً قم بالخروج من adb shell عن طريق كتابة            CTRL + C ومن ثم سحبهم باستخدام  أمر “adb pull” كما هو مبين في الشكل أدناه.

#adb pull /data/local/tmp/packets.pcap

1

لقد سحبت الحزم التي تم التقاطها. الآن، نحن بحاجة إلى تحليلها. سوف نستخدم Wireshark لتحليل هذه الحزم.

في Santoku، يمكن العثور على Wireshark تحت ” Wireshark” <- Wireless Analyzers <- Santoku ” كما هو مبين في الشكل أدناه.

1

قم بتشغيل Wireshark بعدها اذهب الى“File->Open” لفتح ملف packets.pcap . هذا يبدو كما هو موضح بالشكل ادناه

1

يجب أن تشاهد الحزم في Wireshark كما هو موضح أدناه.

1

حسنا، هناك العديد من الحزم لتحليلها، ونحن بحاجة لفلترة الحزم عن طريق إزالة الحزم غير الضرورية التي لا تهمنا.

يمكنك تطبيق عامل التصفية التالي لإزالة الحزم التي تحمل علامة  “PSH ACK” يتم تطبيق هذه التصفية لأننا نتطلع للحزم ذات three-way handshake.

1

الفلترة أعلاه تزيل العديد من الحزم التي نحن لسنا مهتمين بها . عند النزول لأسفل في Wireshark  تظهر الحزمتين التاليين

1

كما ترون في الشكل أعلاه، هناك حزمة SYN ذاهبة من 10.0.2.15 (المحاكي) الى 10.0.2.2(Santoku).

ملاحظة: المحاكي يأخذ 10.0.2.2 كعنوان للجهاز المضيف الذي يتم تشغيل المحاكي عليه. تم إنشاء البرمجية الخبيثة مع هذا العنوان لمحاكاة عنوانIP  الخاص بالمهاجمين من دون  الحاجة للإنترنت

النقر على الحزمة المذكورة أعلاه  يظهر أيضاً أن port listening هو 5555. هذا هو المنفذ الذي تحاول الملفات الخبيثة الاتصال به.

1

عظيم! وهذا أعطانا فكرة  ان التطبيق يحاول انشاء إتصالات بعيدة عبر منفذ TCP 5555 إلى IP 10.0.2.2. ولكن، تظهر الحزمة التالية أن الاتصال قد تم إعادة تعيينه (حصلنا على RST). دعونا نعاود الاتصال مرة أخرى من خلال محاكاة الخادم المهاجم على Santoku باستخدام أداة netcat. يمكن بدء server netcat  على Santoku  كما هو مبين في الشكل أدناه.

1

كما نرى في الشكل أعلاه، فإننا نستمع على منفذ 5555

الآن ابدأ tcpdump على المحاكي كما فعلنا سابقا. واحفظ الحزم في ملف يسمى packets2.pcap.  ثم شغل التطبيق المستهدف لتوليد حركة البيانات. عندما تفعل ذلك، سوف تتلقى الشيل العكسي على ntcat listener .

1

دعونا نتوقف عن التقاط tcpdump . وهذا يبدو كما هو مبين أدناه.

1

دعونا نسحب الحزم خارجاً باستخدامadb  كما هو مبين في الشكل أدناه.

1

مرة أخرى، افتح ملف PCAP في Wireshark وابحث عن the 3-way handshake في الحزم التي تم التقاطها. ويوضح الشكل التالي طريقة the 3-way handshake .

1

كما نرى في الشكل أعلاه، فإن 10.0.2.15 قامت ببدأ عملية the 3-way handshake مع حزمة SYN.  ويوضح الشكل التالي أن التطبيق يحاول تأسيس اتصال إلى خادم المهاجم على المنفذ 5555.

1

انقر على الحزمة الثانية وسترى الرد القادم من (Santoku (10.0.2.2. قد تلاحظ مصدر المنفذ  5555.

1

وأخيرا، انقر على  3rd packet  لرؤية حزم ACK التي بعث بها من مصدر متجه إلى جهاز Santoku على المنفذ 5555.

1

وهذا يؤكد أن الاتصال قد أنشئ مع خادم المهاجم. وبما أننا استخدمنا أداة netcat على كلا الجانبين، فإنها تستخدم لأرسال نصوص واضحة، ويمكننا أن نرى حتى تبادل المعلومات. للتحقق من ذلك، دعونا نكرر العملية المذكورة أعلاه مرة أخرى.

شغل netcat listener على Santoku. ثم قم بتشغيل tcpdump واحفظ الحزم إلى الملف المسمى packets3.pcap. إبدأ بتشغيل التطبيق لتوليد حركة البيانات. ويوضح الشكل التالي ان امر tcpdump يقوم بالتقاط الحزم  ويكتبها في packets3.pcap

1

عندما تحصل على الشيل على جهاز Santoku،   قم بمحاكاة بعض حركة البيانات عن طريق إدخال أمر “cat /proc/cpuinfo”  كما هو مبين في الشكل أدناه.

1

إوقف الإلتقاط واسحب الحزم كما هو مبين في الشكل أدناه.

$adb pull /data/local/tmp/packets.pcap

1

الآن، وفتح الحزم في Wireshark وابحث عن strings التي أدخلناها. ويمكن القيام بذلك كما هو موضح في الشكل التالي. انتقل إلى “Edit -> Find Packet”.

1

الآن أختر string وأدخل “cpuinfo” في حقل النص. تأكد من اختيار “packet bytes” للبحث فيها وأخيرا انقر على زر “Find”.

1

الآن، يجب أن نرى الحزمة التي تحتوي على المحتوى الذي نبحث عنه. حدد حزمة وانقر على الزر الأيمن.

1

ينبغي أن تظهر لك الخيارات التالية. انقر فوق Follow TCP Stream.

1

هذا وسوف يفتح النافذة التالية حيث أنك ستكون قادرا على رؤية الرسائل التي يتم إرسالها بين البرمجية الخبيثة وسيرفر المهاجم.

1

 

الخلاصة


قد غطى هذه الإختبار المفاهيم الأساسية لتحليل البرمجيات الخبيثة في أجهزة الاندرويد على حد سواء باستخدام تقنيات التحليل الثابتة والمتحركة . على الرغم من أن تطبيق البرمجيات الخبيثة المخصص أظهر ميزة واحدة من برمجيات اندرويد الخبيثة  (إعطاء شيل عكسي), إلا أنه وعند تحليل البرمجيات الخبيثة في العالم الحقيقي قد تجد وظائف أكثر خبثاً مثل سرقة البيانات وإرسالها إلى خادم المهاجم . ومع ذلك، فإن الفكرة هنا هي  إظهار تقنيات التحليل الشائعة، وهذه التقنيات لا تزال هي نفسها.

 

ترجمة لمقال : Android Malware Analysis لصاحبها Srinivas.

isecur1ty

مجتمع عربي للهاكر الأخلاقي وخبراء الحماية يركّز على مفهوم اختبار الاختراق وجديد أخبار الحماية

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى