
Drltrace هو متتبع لاستدعاءات المكتبات لتطبيقات ويندوز ولينكس.
Windows test build
Drltrace هي أداة تتبع ديناميكي لاستدعاءات واجهة برمجة التطبيقات (API) لتطبيقات ويندوز ولينكس. تم بناء Drltrace فوق إطار العمل الديناميكي للتعليمات الثنائية DynamoRIO. تم تنفيذ Drltrace في البداية بواسطة Derek Bruening وتم توزيعه مع أطر عمل DynamoRIO وDrMemory. يحتوي هذا المستودع على إصدار مستقل من drltrace مع نصوص إضافية ومواد حول كيفية استخدامه لتحليل البرامج الضارة. يمكن تنزيل الإصدار الجاهز هنا.
استخدام drltrace بسيط جدًا. يحتاج المستخدم إلى تحديد دليل سجل واسم عملية مستهدفة بالطريقة التالية:
drltrace -logdir . -- calc.exe
هذا كل شيء، ستقوم الأداة بحقن ملفات DLL المطلوبة في العملية المستهدفة، وتبدأ التجهيز، وبالتوازي ستسجل معلومات حول جميع استدعاءات المكتبات التي يتم تنفيذها في العملية المستهدفة:
~~43600~~ msvcrt.dll!__wgetmainargs
arg 0: 0x010d2364
arg 1: 0x010d2368
and return to module id:0, offset:0x193a
~~43600~~ ntdll.dll!EtwEventRegister
arg 0: 0x002ff994
arg 1: 0x010d1490
and return to module id:0, offset:0x157e
~~43600~~ ntdll.dll!EtwEventSetInformation
arg 0: 0x007b4b40
arg 1: 0x00000033
and return to module id:0, offset:0x15a1
~~43600~~ SHELL32.dll!ShellExecuteW
arg 0: <null> (type=<unknown>, size=0x0)
arg 1: <null> (type=wchar_t*, size=0x0)
arg 2: calculator:// (type=wchar_t*, size=0x0)
arg 3: <null> (type=wchar_t*, size=0x0)
arg 4: <null> (type=wchar_t*, size=0x0)
arg 5: 0x1 (type=int, size=0x4)
and return to module id:0, offset:0x167d
تنسيق المخرجات بسيط ويمكن تحليله بسهولة بواسطة سكريبت خارجي:
~~[thread id]~~ [dll name]![api call name]
arg [arg #]: [value] (type=[Windows type name], size=[size of arg])
and return to module id:[module unique id], offset:[offset in memory]
يمكن إجراء التحليل باستخدام grep عند استخدام الوسيط -grepable؛ حيث يقوم بطباعة أسماء الدوال والوسائط كلها في سطر واحد:
~~4824~~ KERNELBASE.dll!CreateFileW {0: C:\Windows\Fonts\staticcache.dat (type=wchar_t*, size=0x0)} {1: 0x80000000 (type=DWORD, size=0x4)} {2: 0x3 (type=DWORD, size=0x4)} {3: 0x005cde8c (type=<unknown>*, size=0x0)} {4: 0x3 (type=DWORD, size=0x4)} {5: 0x80 (type=DWORD, size=0x4)}
يتم طباعة جدول المعرفات الفريدة للوحدات في نهاية ملف السجل:
Module Table: version 3, count 70
Columns: id, containing_id, start, end, entry, checksum, timestamp, path
0, 0, 0x010d0000, 0x010da000, 0x010d1b80, 0x0000f752, 0xb5fe3575, C:\Windows\SysWOW64\calc.exe
1, 1, 0x6d4c0000, 0x6d621000, 0x6d563940, 0x00136d65, 0x59ce1b0b, C:\Users\Max\Downloads\drltrace\drltrace\dynamorio\lib32\release\dynamorio.dll
2, 2, 0x73800000, 0x73975000, 0x7380dbf7, 0x00000000, 0x59ce1b0f, C:\Users\Max\Downloads\drltrace\drltrace\bin\release/drltracelib.dll
3, 3, 0x742f0000, 0x742fa000, 0x742f2a00, 0x0000c877, 0x0adc52c1, C:\Windows\System32\CRYPTBASE.dll
4, 4, 0x74300000, 0x74320000, 0x7430c9b0, 0x0002c617, 0x245970b4, C:\Windows\System32\SspiCli.dll
5, 5, 0x74410000, 0x74431000, 0x74416900, 0x0002a940, 0x88a53c1d, C:\Windows\System32\GDI32.dll
6, 6, 0x74440000, 0x74500000, 0x7446fb20, 0x000cc410, 0xd343d532, C:\Windows\System32\RPCRT4.dll
7, 7, 0x74500000, 0x74525000, 0x745047d0, 0x00026737, 0xa39c8991, C:\Windows\System32\IMM32.DLL
8, 8, 0x74550000, 0x745c7000, 0x7456e8a0, 0x00081857, 0x73b971e1, C:\Windows\System32\advapi32.dll
9, 9, 0x748f0000, 0x74929000, 0x748febd0, 0x00045303, 0xa58be652, C:\Windows\System32\cfgmgr32.dll
10, 10, 0x74930000, 0x75c78000, 0x74aa09d0, 0x01377aa6, 0x4b39926b, C:\Windows\System32\SHELL32.dll
يمكن لـ Drltrace تصفية استدعاءات المكتبات البينية بسهولة وطباعة استدعاءات API التي تتم من الوحدة الرئيسية (أو من الكومة) للتطبيق المستهدف فقط عن طريق تحديد الخيار -only_from_app، وهو مفيد جدًا في حالة التطبيقات التي تولد سجلات ضخمة. للتحكم الدقيق، يسمح الخيار -filter للمستخدم بتحديد ملف تكوين للتصفية بهدف تضمين دوال معينة في القائمة البيضاء، أو تجاهل دوال في القائمة السوداء (انظر ملف filter.config للأمثلة). يحتوي Drltrace أيضًا على عدة نصوص خارجية مفيدة لتصفية استدعاءات API لمكتبة معينة، وطباعة استدعاءات API والسلاسل التي قد تكون مثيرة للاهتمام فقط.
الوحدات الرئيسية لـ Drltrace موزعة تحت رخصة BSD.
بعض الملفات المطلوبة لـ drltrace موزعة تحت رخصة LGPL. راجع ملفات المصدر لمزيد من التفاصيل.
تحليل البرامج الضارة ليس مهمة سهلة. أدوات التغليف البرمجية المتطورة مثل Themida وArmadillo، وبالطبع العشرات من أدوات التغليف غير المسماة التي يكتبها مؤلفو البرامج الضارة بالإضافة إلى تشفير الكود والبيانات، تسهل بشكل كبير (وفي بعض الحالات تجعله مستحيلًا تمامًا) الهندسة العكسية الثابتة لهذه العينات، مما يجعل حياة محللي البرامج الضارة معقدة. في هذه الحالة، يمكن لتتبع استدعاءات API أن يقلل بشكل كبير من الوقت المطلوب لفهم النية الضارة الفعلية ويكشف عن الكثير من التفاصيل التقنية حول الكود الضار المحمي.
في حين تم تنفيذ التقنية التقليدية لـ API-hooking بنجاح في عدة حلول، إلا أن هذا النهج تمت دراسته جيدًا من قبل مؤلفي البرامج الضارة ويمكن اكتشافه و/أو تجاوزه بسهولة. علاوة على ذلك، يتم توزيع هذه الأدوات كتطبيقات واجهة مستخدم رسومية مستقلة وثقيلة (كمنتجات مملوكة) والتي غالبًا ما يصعب دمجها في سير عمل تحليل البرامج الضارة الحالي.
إذا نظرنا إلى عالم لينكس، هناك أداة رائعة تسمى ltrace. باستخدام أمر bash واحد، يمكننا بسهولة الحصول على التتبع الكامل لاستدعاءات API لملف تنفيذي معين.
لماذا لا نملك مثل هذه الأداة (مثل ltrace في لينكس) لنظام ويندوز تكون أيضًا شفافة تجاه تقنيات مكافحة البحث التي يستخدمها البرامج الضارة الحديثة؟
اتضح أن هناك تقنية يمكن أن تساعدنا في الحصول على مثل هذه الأداة لنظام ويندوز وتتبع استدعاءات API بشفافية تجاه البرنامج المنفذ. تسمى هذه التقنية التعليمات الثنائية الديناميكية (Dynamic Binary Instrumentation) أو DBI. DBI هي تقنية لتحليل سلوك تطبيق ثنائي في وقت التشغيل من خلال حقن كود التجهيز.
ومع ذلك، فإن تطبيق DBI لتحليل البرامج الضارة محدود بشكل غير مستحق بأتمتة فك التغليف والعديد من البراهين على المفهوم لتتبع التعليمات والكتل الأساسية واستدعاءات الدوال. على حد علمنا، drltrace هي أول أداة لتتبع استدعاءات API تعتمد على DBI يمكن استخدامها عمليًا لتحليل البرامج الضارة. قدمنا عدة أمثلة لتحليل البرامج الضارة في ويكي الخاصة بنا حيث وصفنا كيف سمح drltrace بالكشف في بضع دقائق عن الكثير من التفاصيل التقنية الداخلية حول عينات ضارة معقدة دون حتى بدء IDA أو مصحح الأخطاء.