
asadbg — это набор инструментов, предназначенных для автоматизации живой отладки устройств Cisco ASA.
Предварительное замечание: мы рекомендуем использовать это в составе asatools, но также можно использовать отдельно.
asadbg — это набор инструментов для автоматизации живой отладки устройств Cisco ASA, а также для автоматизации взаимодействия с Cisco CLI через 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 с помощью SSH-командtemplate_gdbinit: шаблон gdbinit, пропатченный asadbg.py для каждой
отлаживаемой нами целиПервоначально вам нужно изменить asadbg/env.sh в соответствии с вашим
окружением. Это позволит вам указать пути к инструментам, используемым всеми
скриптами, а также некоторые переменные, соответствующие вашему окружению ASA.
Обратите внимание, что есть аналогичный asafw/env.sh, но для обоих проектов
требуется использовать только один. Мы рекомендуем добавить его в ваш
~/.bashrc:```
source /path/to/asadbg/env.sh
# Автоматизированная отладка
Одним из главных преимуществ использования asadbg является возможность автоматизировать работу как с эмулируемыми (GNS3), так и с реальными устройствами Cisco ASA. Это может включать просто общую автоматизацию загрузки и запуска различных прошивок и конфигураций, или же конкретно автоматизацию процесса отладки `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.