
asadbg es un marco de herramientas para ayudar a automatizar la depuración en vivo de dispositivos Cisco ASA
Nota preliminar: recomendamos utilizarlo como parte de asatools, aunque también puede usarse de forma independiente.
asadbg es un framework de herramientas para ayudar a automatizar la depuración en vivo de dispositivos Cisco ASA, así como automatizar la interacción con la CLI de Cisco mediante serial/ssh para realizar rápidamente tareas repetitivas.

asadbg.cfg para habilitar la depuración de diferentes
versiones fácilmenteLa herramienta principal es asadbg.py y ejecutará la mayoría de los otros scripts
auxiliares. Ten en cuenta que puede que necesites usar inicialmente
asafw para desempaquetar el firmware y obtener la mejor
variante de asadbg.
asadbg.py: herramienta principal utilizada para depurar ASAsasdbg_hunt.py/asadbg_rename.py: script de IDA Python para usar con idahunt para importar símbolos para nuevos objetivosLos siguientes son importados automáticamente por asadbg.py, pero te damos algo de
información sobre para qué sirven:
asa_lib*.py: scripts de gdb en Python para usar
libdlmalloc,
libptmalloc y
libmempool.asa_sync.py: script de gdb en Python para usar
ret-synccomm.py: conjunto de funciones para comunicarse por serial, SSH, telnet.find_lina_pid.py: encuentra el PID de lina usando comandos SSHtemplate_gdbinit: plantilla gdbinit parcheada por asadbg.py para cada objetivo
que depuramosInicialmente necesitas modificar asadbg/env.sh para ajustarlo a tu entorno. Te
permitirá definir rutas a las herramientas utilizadas por todos los scripts, así como algunas
variables acordes a tu entorno ASA. Ten en cuenta que existe un
asafw/env.sh similar, pero solo se necesita que uno sea utilizado para ambos proyectos. Nosotros
recomendamos que lo añadas a tu ~/.bashrc:```
source /path/to/asadbg/env.sh
# Depuración automatizada
Una de las principales ventajas de usar asadbg es que puedes automatizar el uso tanto
de dispositivos Cisco ASA emulados (GNS3) como reales. Esto puede incluir simplemente
automatizar el arranque y la ejecución de varios firmwares y configuraciones, o
específicamente automatizar el proceso de depuración de `lina` usando gdb. Esto se hace
principalmente mediante el script `asadbg.py`. La idea principal es precargar algo de flash en
el dispositivo ASA con archivos de firmware y configuración que quieras usar en
el dispositivo. Para cada firmware que quieras depurar, puedes usar una herramienta
como `asafw` para extraer diferentes símbolos y luego puedes generar
automáticamente archivos gdbinit usando esos símbolos. Por defecto, `asadbg.py` usará un
archivo `template_gdbinit` para automatizar la construcción de un archivo gdbinit específico de la versión en
tiempo de ejecución usando los símbolos que estén presentes en la base de datos.
## Arrancar rápidamente un dispositivo real (sin depuración)
Puedes arrancar rápidamente una versión determinada especificando el firmware y los archivos de configuración
que ya deben estar en la tarjeta CF.```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802
El siguiente ejemplo muestra cómo puedes configurar los archivos de configuración para depurar
un dispositivo GNS3. Primero definimos un archivo de configuración asadbg.cfg similar al
siguiente. Contiene la IP/puerto de GNS3 para el firewall configurado que obtenemos
del propio 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
También apunta al archivo de base de datos ASA `asadb.json` que contiene las direcciones requeridas. Lo importante aquí es que `version=941200` y `arch=gns3` especificados en `asadbg.cfg` permiten hacer coincidir el firmware en `asadb.json` a continuación. También indicamos que queremos adjuntar 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
}
Ahora comenzamos la depuración y clock_interval se parcheará automáticamente:```
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.
## Depuración de un dispositivo real con archivo de configuración
El siguiente ejemplo muestra cómo puede configurar los archivos de configuración para depurar
un dispositivo Cisco ASA real a través de una consola serie.```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
Tenga en cuenta también que necesitamos especificar un firmware_type que indique si el
firmware está sin modificar, rooteado, tiene un shell serie habilitado o si gdb se ha
habilitado al arrancar. Esto es
porque haremos cosas diferentes en el arranque dependiendo del formato. Aquí
podemos ver que usamos un firmware modificado asa924-k8-debugshell-gdbserver.bin
que tiene gdbserver habilitado al arrancar y contiene un shell de depuración.
Vemos a continuación que cuando el bootrom se inicia, asadbg automáticamente
interrumpe la secuencia para cargar el firmware y los archivos de configuración ya
presentes en la tarjeta 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.