
asadbg é um framework de ferramentas para auxiliar na automação de depuração ao vivo de dispositivos Cisco ASA.
Nota preliminar: recomendamos que utilize isto como parte do asatools, mas também pode ser usado de forma autônoma.
asadbg é um framework de ferramentas para ajudar a automatizar a depuração ao vivo de dispositivos Cisco ASA, bem como a automatizar a interação com a CLI da Cisco através de serial/ssh para executar rapidamente tarefas repetitivas.

asadbg.cfg para permitir depurar diferentes
versões facilmenteA ferramenta principal é o asadbg.py e ela executará a maioria dos outros scripts
auxiliares. Note que pode ser necessário usar inicialmente o
asafw para descompactar o firmware e obter a melhor
variante do asadbg.
asadbg.py: ferramenta principal usada para depurar ASAsasdbg_hunt.py/asadbg_rename.py: script Python do IDA para usar com idahunt para importar símbolos para novos alvosOs seguintes são importados automaticamente pelo asadbg.py, mas fornecemos algumas
informações sobre para que servem:
asa_lib*.py: scripts Python do gdb para usar
libdlmalloc,
libptmalloc e
libmempool.asa_sync.py: script Python do gdb para usar
ret-synccomm.py: conjunto de funções para comunicar via serial, SSH, telnet.find_lina_pid.py: encontra o PID do lina usando comandos SSHtemplate_gdbinit: modelo de gdbinit adaptado pelo asadbg.py para todos os alvos
que depuramosVocê precisa inicialmente modificar o asadbg/env.sh para corresponder ao seu ambiente. Ele
permitirá definir caminhos para as ferramentas usadas por todos os scripts, bem como algumas
variáveis que correspondem ao seu ambiente ASA. Note que existe um asafw/env.sh
semelhante, mas apenas um é necessário para ser usado em ambos os projetos.
Recomendamos que o adicione ao seu ~/.bashrc:```
source /path/to/asadbg/env.sh
# Depuração automatizada
Um dos principais benefícios de usar o asadbg é que você pode automatizar o uso de
dispositivos Cisco ASA tanto emulados (GNS3) quanto reais. Isso pode incluir apenas
automatizar de modo geral a inicialização e execução de vários firmwares e configurações,
ou especificamente automatizar o processo de depuração do `lina` usando gdb. Isso é feito
principalmente por meio do script `asadbg.py`. A ideia principal é pré-carregar a flash
no dispositivo ASA com arquivos de firmware e configuração que você deseja usar no
dispositivo. Para cada firmware que você deseja depurar, você pode usar algo como a
ferramenta `asafw` para extrair diferentes símbolos e, em seguida, gerar automaticamente
arquivos gdbinit usando esses símbolos. Por padrão, o `asadbg.py` usará um arquivo
`template_gdbinit` para automatizar a criação de um arquivo gdbinit específico da versão
em tempo de execução, usando os símbolos presentes no banco de dados.
## Inicializar rapidamente um dispositivo real (sem depuração)
Você pode inicializar rapidamente uma determinada versão especificando os arquivos de firmware
e configuração que já devem estar no cartão CF.```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802
O exemplo a seguir mostra como você pode configurar os arquivos de configuração para depurar
um dispositivo GNS3. Primeiro definimos um arquivo de configuração asadbg.cfg semelhante ao
abaixo. Ele contém o IP/porta do GNS3 para o firewall configurado, que obtemos
do próprio GSN3.```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
Ele também aponta para o arquivo do banco de dados ASA `asadb.json` contendo os endereços necessários. O que
é importante aqui é que o `version=941200` e `arch=gns3` especificados em
`asadbg.cfg` permitem corresponder ao firmware em `asadb.json` abaixo. Também indicamos
que queremos anexar o 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
}
Agora começamos a depuração e clock_interval será corrigido automaticamente:```
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.
## Depurando um dispositivo real com arquivo de configuração
O exemplo a seguir mostra como você pode configurar os arquivos de configuração para depurar
um dispositivo Cisco ASA real por meio de um console serial.```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
Note também que precisamos especificar um firmware_type que indica se o
firmware não foi modificado, está com root, tem um shell serial habilitado ou se o gdb foi
habilitado na inicialização. Isso ocorre
porque faremos coisas diferentes na inicialização dependendo do formato. Aqui nós
podemos ver que usamos um firmware modificado asa924-k8-debugshell-gdbserver.bin
que tem gdbserver habilitado na inicialização e contém um shell de depuração.
Vemos abaixo que quando o bootrom inicia, asadbg automaticamente
interrompe a sequência para carregar o firmware e os arquivos de configuração já
presentes no cartão 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.