初步说明:我们建议你将其作为 asatools 的一部分使用,但它也可以 独立使用。
asadbg 是一个工具框架,用于帮助自动执行 Cisco ASA 设备的实时调试, 以及通过串口/SSH 自动与 Cisco CLI 交互, 以快速执行重复性任务。

asadbg.cfg 配置文件,以方便调试不同的
版本主工具是 asadbg.py,它将执行大多数其他辅助脚本。
请注意,你可能需要先使用
asafw 解包固件,以获得最佳
的 asadbg 使用体验。
asadbg.py:用于调试 ASA 的主工具asdbg_hunt.py/asadbg_rename.py:与 idahunt 一起使用的 IDA Python 脚本,用于为新目标导入符号以下内容由 asadbg.py 自动导入,但我们提供一些
关于它们用途的信息:
asa_lib*.py:gdb Python 脚本,用于使用
libdlmalloc、
libptmalloc 和
libmempool。asa_sync.py:gdb Python 脚本,用于使用
ret-synccomm.py:一组用于通过串口、SSH、telnet 通信的函数。find_lina_pid.py:使用 SSH 命令查找 lina PIDtemplate_gdbinit:gdbinit 模板,由 asadbg.py 针对我们调试的每个目标
打补丁你首先需要修改 asadbg/env.sh 以匹配你的环境。它将
允许你定义所有脚本使用的工具路径,以及一些
与你的 ASA 环境匹配的变量。请注意,还有一个类似的
asafw/env.sh,但两个项目只需使用其中一个。我们
建议你将它添加到你的 ~/.bashrc 中:```
source /path/to/asadbg/env.sh
# 自动化调试
使用 asadbg 的主要好处之一是,你可以自动化使用模拟(GNS3)和真实 Cisco ASA 设备的操作。这可以包括一般性地自动化启动和运行各种固件与配置,也可以专门使用 gdb 自动化 `lina` 的调试过程。这主要通过 `asadbg.py` 脚本完成。其核心思路是预先在 ASA 设备的 flash 上装载你想要使用的固件和配置文件。对于每个你想要调试的固件,你可以使用类似 `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 配置文件。它包含从 GNS3 自身获取的、已配置防火墙的 GNS3 IP/端口。```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`,其中包含所需的地址。这里重要的是,`asadbg.cfg`中指定的`version=941200`和`arch=gns3`能够匹配下面`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,它指示固件是否
未修改、已 root、启用了串行 shell,还是已在启动时
启用了 gdb。这是因为我们将根据格式在启动时执行不同的操作。
这里我们可以看到,我们使用了一个修改过的固件
asa924-k8-debugshell-gdbserver.bin,它已在启动时启用了 gdbserver
并包含一个调试 shell。
我们在下面可以看到,当 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.
# 导入附加符号
asadbg 的许多部分依赖于一个数据库 `asadbg/asadb.json`,其中包含各种固件版本的符号。我们提供了一小部分现有符号,但您可以手动添加其他符号,或使用
[idahunt](https://github.com/nccgroup/idahunt)
自动添加新目标。本节将介绍具体操作方法。
## 要求
asadbg 中的 IDA Python 脚本假定 `filelock.py/ida_helper.py` 可用。由于它们直接从 IDA Python 执行,我们目前的做法是在 `asadbg/` 中创建符号链接。我们无法在仓库中真正创建它们,因为 Windows 上的符号链接与 Linux 上的不同。因此需要手动完成。
在 Linux 上:```
asadbg$ ln -s ../idahunt/ida_helper.py ida_helper.py
asadbg$ ln -s ../idahunt/filelock.py filelock.py
在 Windows 上,使用管理员权限:``` C:\asadbg> mklink filelock.py ..\idahunt\filelock.py C:\asadbg> mklink ida_helper.py ..\idahunt\ida_helper.py
我们还需要设置数据库的路径(由 `env.sh` 自动完成):```
C:\idahunt>set ASADBG_DB=C:\asadbg\asadb.json
我们假设您已经使用例如 asafw 将所有固件提取到一个目录中,或者您只提取了 lina 文件并将它们放入一个能表明其来自哪个固件的目录结构中:```
C:\temp>tree /F
Folder PATH listing
Volume serial number is XXXX-XXX
C:.
├───asa924-k8.bin
│ lina
│
├───asa924-smp-k8.bin
│ lina
│
└───asav941-200.qcow2
lina
首先,你需要在 IDA 中进行初始分析。我们可以将 `--list-only` 与
任何命令一起使用,以检查该命令会得到什么结果。
注意,我们筛选了特定的 ASA 版本(9.2.4)和架构(32 位):```
C:\idahunt>idahunt.py --verbose --inputdir "C:\temp" --analyse --scripts C:\asadbg\asadbg_rename.py --filter "filters\ciscoasa.py -m 924 -M 924 -v -a 32"
[idahunt] IDA32 = C:\Program Files (x86)\IDA 6.95\idaq.exe
[idahunt] IDA64 = C:\Program Files (x86)\IDA 6.95\idaq64.exe
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\temp\asa924-k8.bin\lina
[idahunt] C:\Program Files (x86)\IDA 6.95\idaq.exe -B -LC:\temp\asa924-k8.bin\lina.log C:\temp\asa924-k8.bin\lina
[ciscoasa] Skipping non 32-bit: C:\temp\asa924-smp-k8.bin\lina
[ciscoasa] Skipping version too high: C:\temp\asav941-200.qcow2\lina
[idahunt] Waiting on remaining 1 IDA instances