
asadbg è un framework di strumenti per aiutare ad automatizzare il debug dal vivo dei dispositivi Cisco ASA
Nota preliminare: ti consigliamo di usarlo come parte di asatools ma può essere usato anche autonomamente.
asadbg è un framework di strumenti che aiuta ad automatizzare il debug in tempo reale di dispositivi Cisco ASA, oltre ad automatizzare l'interazione con la CLI Cisco via seriale/ssh per eseguire rapidamente attività ripetitive.

asadbg.cfg per abilitare facilmente il debug di versioni
diverseLo strumento principale è asadbg.py ed eseguirà la maggior parte degli altri script
helper. Nota che potresti dover inizialmente usare
asafw per decomprimere il firmware per ottenere la migliore
versione di asadbg.
asadbg.py: strumento principale usato per il debug delle ASAasdbg_hunt.py/asadbg_rename.py: script IDA Python da usare con idahunt per importare simboli per nuovi targetI seguenti vengono importati automaticamente da asadbg.py ma ti diamo alcune
informazioni su a cosa servono:
asa_lib*.py: script gdb Python per usare
libdlmalloc,
libptmalloc e
libmempool.asa_sync.py: script gdb Python per usare
ret-synccomm.py: insieme di funzioni per comunicare via seriale, SSH, telnet.find_lina_pid.py: trova il PID di lina usando comandi SSHtemplate_gdbinit: modello gdbinit modificato da asadbg.py per ogni target
di cui facciamo il debugInizialmente devi modificare asadbg/env.sh per adattarlo al tuo ambiente. Ti
consente di definire i percorsi degli strumenti usati da tutti gli script e alcune
variabili corrispondenti al tuo ambiente ASA. Nota che esiste un simile
asafw/env.sh ma ne basta uno solo da usare per entrambi i progetti. Ti
consigliamo di aggiungerlo al tuo ~/.bashrc:```
source /path/to/asadbg/env.sh
# Debug automatizzato
Uno dei principali vantaggi dell'uso di asadbg è che puoi automatizzare l'uso sia di dispositivi Cisco ASA emulati (GNS3) che reali. Questo può includere semplicemente l'automazione generale dell'avvio e dell'esecuzione di vari firmware e configurazioni, oppure specificamente l'automazione del processo di debug di `lina` usando gdb. Questo viene fatto principalmente tramite lo script `asadbg.py`. L'idea principale è precaricare della flash sul dispositivo ASA con i firmware e i file di configurazione che vuoi usare sul dispositivo. Per ogni firmware che vuoi debuggare, puoi usare uno strumento come `asafw` per estrarre diversi simboli e poi generare automaticamente file gdbinit usando quei simboli. Per impostazione predefinita, `asadbg.py` userà un file `template_gdbinit` per automatizzare la creazione di un file gdbinit specifico per versione a runtime usando i simboli presenti nel database.
## Avvia rapidamente un dispositivo reale (senza debug)
Puoi avviare rapidamente una determinata versione specificando i file di firmware e di configurazione che devono essere già presenti sulla scheda CF.```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802
L'esempio seguente mostra come configurare i file di configurazione per eseguire il debug
di un dispositivo GNS3. Per prima cosa definiamo un file di configurazione asadbg.cfg simile a
quello riportato di seguito. Contiene l'IP/porta GNS3 per il firewall configurato che otteniamo
da GSN3 stesso.```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
Punta inoltre al file `asadb.json` del database ASA che contiene gli indirizzi richiesti. Ciò che è importante qui è che `version=941200` e `arch=gns3` specificati in `asadbg.cfg` consentono di abbinare il firmware in `asadb.json` riportato di seguito. Indichiamo anche che vogliamo collegare 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
}
Ora iniziamo il debug e clock_interval verrà automaticamente patchato:```
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.
## Debug di un dispositivo reale con file di configurazione
L'esempio seguente mostra come configurare i file di configurazione per eseguire il debug
di un dispositivo Cisco ASA reale tramite console seriale.```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
Nota anche che dobbiamo specificare un firmware_type che indica se il
firmware è non modificato, con root, ha una shell seriale abilitata o se gdb è
stato abilitato all'avvio. Questo
perché faremo cose diverse all'avvio a seconda del formato. Qui
possiamo vedere che usiamo un firmware modificato asa924-k8-debugshell-gdbserver.bin
che ha gdbserver abilitato all'avvio e contiene una shell di debug.
Vediamo sotto che quando il bootrom parte, asadbg automaticamente
interrompe la sequenza per caricare il firmware e i file di configurazione già
presenti sulla scheda 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.