
asadbg هو إطار عمل من الأدوات للمساعدة في أتمتة التصحيح المباشر لأجهزة Cisco ASA
ملاحظة أولية: نوصي باستخدام هذا كجزء من asatools ولكن يمكن استخدامه أيضًا بشكل مستقل.
asadbg هو إطار عمل من الأدوات للمساعدة في أتمتة التصحيح المباشر لأجهزة Cisco ASA، بالإضافة إلى أتمتة التفاعل مع واجهة سطر أوامر Cisco عبر serial/ssh لتنفيذ المهام المتكررة بسرعة.

asadbg.cfg لتمكين تصحيح الإصدارات المختلفة بسهولةالأداة الرئيسية هي asadbg.py وستقوم بتنفيذ معظم السكربتات المساعدة الأخرى. لاحظ أنك قد تحتاج في البداية إلى استخدام asafw لفك ضغط البرامج الثابتة للحصول على أفضل صيغة من asadbg.
asadbg.py: الأداة الرئيسية المستخدمة لتصحيح أجهزة ASAasdbg_hunt.py/asadbg_rename.py: سكربت IDA Python للاستخدام مع idahunt لاستيراد الرموز للأهداف الجديدةما يلي يتم استيراده تلقائيًا بواسطة asadbg.py ولكننا نقدم لك بعض المعلومات حول الغرض منها:
asa_lib*.py: سكربتات gdb Python لاستخدام libdlmalloc و libptmalloc و libmempool.asa_sync.py: سكربت gdb Python لاستخدام ret-synccomm.py: مجموعة دوال للتواصل عبر serial و SSH و telnet.find_lina_pid.py: إيجاد PID الخاص بـ lina باستخدام أوامر SSHtemplate_gdbinit: قالب gdbinit يتم تعديله بواسطة asadbg.py لكل الأهداف التي نقوم بتصحيحهاتحتاج في البداية إلى تعديل asadbg/env.sh ليتوافق مع بيئتك. سيسمح لك ذلك بتحديد مسارات الأدوات المستخدمة بواسطة جميع السكربتات بالإضافة إلى بعض المتغيرات المطابقة لبيئة ASA لديك. لاحظ أن هناك ملفًا مشابهًا asafw/env.sh ولكن يلزم استخدام واحد فقط لكل المشروعين. نوصي بإضافته إلى ~/.bashrc الخاص بك:```
source /path/to/asadbg/env.sh
# تصحيح الأخطاء الآلي
من الفوائد الرئيسية لاستخدام asadbg هي أنك تستطيع أتمتة استخدام كل من أجهزة
Cisco ASA المحاكاة (GNS3) والحقيقية. يمكن أن يشمل ذلك عمومًا أتمتة تشغيل
وتشغيل مختلف إصدارات البرامج الثابتة وملفات الإعدادات، أو بشكل خاص أتمتة
عملية تصحيح الأخطاء لـ `lina` باستخدام gdb. يتم ذلك في الغالب من خلال
سكربت `asadbg.py`. الفكرة الرئيسية هي تحميل بعض ذاكرة الفلاش على
جهاز ASA بملفات البرامج الثابتة والإعدادات التي تريد استخدامها على
الجهاز. لكل برنامج ثابت تريد تصحيح أخطائه، يمكنك استخدام أداة مثل
`asafw` لاستخراج رموز مختلفة ثم يمكنك تلقائيًا إنشاء
ملفات gdbinit باستخدام تلك الرموز. افتراضيًا، سيستخدم `asadbg.py`
ملف `template_gdbinit` لأتمتة بناء ملف gdbinit خاص بإصدار معين في
وقت التشغيل باستخدام أي رموز متوفرة في قاعدة البيانات.
## تشغيل سريع لجهاز حقيقي (بدون تصحيح أخطاء)
يمكنك تشغيل إصدار معين بسرعة عن طريق تحديد ملفات البرامج الثابتة والإعدادات
التي يجب أن تكون موجودة بالفعل على بطاقة CF.```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802
يوضح المثال التالي كيفية إعداد ملفات الإعدادات لتصحيح أخطاء جهاز
GNS3. أولاً نعرّف ملف إعدادات asadbg.cfg مشابهاً لما يلي. يحتوي على
عنوان IP/المنفذ الخاص بـ GNS3 لجدار الحماية المكوّن والذي نحصل عليه
من GNS3 نفسه.```ini
[GLOBAL]
gns3_host=192.168.5.1
asadb_file=asadb.json
[asav941200] version=941200 arch=gns3 rootfs_path= /home/user/_asav941-200.qcow2.extracted/rootfs gns3_port=12005 attach_gdb=yes
كما يشير أيضًا إلى ملف قاعدة بيانات ASA `asadb.json` الذي يحتوي على العناوين المطلوبة. ما
هو المهم هنا هو أن `version=941200` و `arch=gns3` المحددين في
`asadbg.cfg` يسمحان بمطابقة البرنامج الثابت في `asadb.json` أدناه. كما نشير
إلى أننا نريد إرفاق gdb.```json
{
"ASLR": false,
"addresses": {
"clock_interval": 59514112,
"socks_proxy_server_start": 22139744,
"aaa_admin_authenticate": 418288
},
"fw": "asav941-200.qcow2",
"lina_imagebase": 4194304,
"version": "9.4.1.200",
"arch": 64
}
الآن نبدأ التصحيح وسيتم ترقيع clock_interval تلقائيًا:```
asadbg$ ./asadbg.py --name asav941200 --asadbg-config asadbg.cfg
[asadbg] Using config file: asadbg.cfg
[asadbg] Found section: 'asav941200' in config
[asadbg] Using gdb: '/usr/bin/gdb'
[asadbg] Using architecture: gns3
[asadbg] Trying lina: /home/user/_asav941-200.qcow2.extracted/rootfs/asa/bin/lina
[asadbg] Going to debug...
[asadbg] Using GNS3 emulator 192.168.5.1:12005
[asadbg] Starting gdb now...
[gdbinit_941200] Configuring paths...
[gdbinit_941200] Disabling pagination...
[gdbinit_941200] Connecting over TCP/IP...
0x0000003655201190 in ?? () from /home/user/_asav941-200.qcow2.extracted/rootfs/lib64/ld-linux-x86-64.so.2
[gdbinit_941200] Connected.
[gdbinit_941200] Watchdog disabled
[gdbinit_941200] heap debugging plugins loaded
[gdbinit_941200] Additional gdb scripts loaded
[gdbinit_941200] Done.
(gdb) c
Continuing.
## تصحيح أخطاء جهاز حقيقي باستخدام ملف الإعداد
يوضح المثال التالي كيفية تجهيز ملفات الإعداد لتصحيح أخطاء
جهاز Cisco ASA حقيقي عبر وحدة التحكم التسلسلية.```ini
[GLOBAL]
serial_port=/dev/ttyUSB0
asadb_file=asadb.json
[asa924-gdb]
version=924
arch=32
rootfs_path=/home/user/_asa924-k8.bin.extracted/rootfs
firmware=asa924-k8-debugshell-gdbserver.bin
config=config-924
firmware_type=gdb
attach_gdb=yes
لاحظ أيضًا أننا نحتاج إلى تحديد firmware_type الذي يوضح ما إذا كان البرنامج الثابت غير معدَّل، أو تم عمل روت له، أو يحتوي على شل تسلسلي مفعّل، أو إذا كان gdb مفعّلاً عند الإقلاع. وذلك لأننا سنقوم بإجراءات مختلفة عند الإقلاع اعتمادًا على الصيغة. هنا نرى أننا نستخدم برنامجًا ثابتًا معدَّلًا asa924-k8-debugshell-gdbserver.bin حيث يكون gdbserver مفعّلاً عند الإقلاع ويحتوي على شل تصحيح. نرى أدناه أنه عندما يبدأ bootrom، يقوم asadbg تلقائيًا بمقاطعة التسلسل من أجل تحميل البرنامج الثابت وملفات الإعداد الموجودة بالفعل على بطاقة CF.```
asadbg$ ./asadbg.py --name asa924-gdb --asadbg-config asadbg.cfg
[asadbg] Using config file: asadbg.cfg
[asadbg] Found section: 'asa924-gdb' in config
[asadbg] Using gdb: '/usr/bin/gdb'
[asadbg] Using architecture: 32
[asadbg] Trying lina: /home/user/_asa924-k8.bin.extracted/rootfs/asa/bin/lina
[asadbg] Going to debug...
[asadbg] Using serial port: /dev/ttyUSB0
[asadbg] Loading 'asa924-k8-debugshell-gdbserver.bin' with 'config-924'...
[comm] Waiting boot...
[SNIP]
Platform ASA5505
Use BREAK or ESC to interrupt boot. Use SPACE to begin boot immediately. Boot interrupted.
[SNIP] rommon #0> boot asa924-k8-debugshell-gdbserver.bin cfg=config-924 Launching BootLoader... Boot configuration file contains 1 entry.
Loading asa924-k8-debugshell-gdbserver.bin........ Booting... Platform ASA5505 [SNIP] SMFW PID: 514, Starting /asa/bin/lina under gdbserver /dev/ttyS0 SMFW PID: 512, started gdbserver on member: 514//asa/bin/lina SMFW PID: 512, created member ASA BLOB, PID=514 Process /asa/bin/lina created; pid = 517 Remote debugging using /dev/ttyS0 [comm] gdb detected - boot finished. [comm] Boot should be finished now? [asadbg] Starting gdb now... [gdbinit_924] Configuring paths... [gdbinit_924] Disabling pagination... [gdbinit_924] Connecting over USB... 0xdc7e2820 in ?? () from /home/user/_asa924-k8.bin.extracted/rootfs/lib/ld-linux.so.2 [gdbinit_924] Connected. [gdbinit_924] Watchdog disabled [gdbinit_924] heap debugging plugins loaded [gdbinit_924] Additional gdb scripts loaded [gdbinit_924] Done. (gdb) c Continuing.
# استيراد رموز إضافية