
asadbg est un framework d'outils conçu pour faciliter l'automatisation du débogage en direct des appareils Cisco ASA.
Note préliminaire : nous recommandons de l'utiliser dans le cadre de asatools, mais il peut également être utilisé de manière autonome.
asadbg est un framework d'outils conçu pour faciliter l'automatisation du débogage en direct des équipements Cisco ASA, ainsi que l'automatisation des interactions avec le CLI Cisco via série/ssh afin d'exécuter rapidement des tâches répétitives.

asadbg.cfg pour faciliter le
débogage de différentes versionsL'outil principal est asadbg.py et il exécutera la plupart des autres scripts
d'assistance. Notez que vous devrez peut-être utiliser au départ
asafw pour dépaqueter le firmware afin
d'obtenir la meilleure version de asadbg.
asadbg.py : outil principal utilisé pour déboguer les ASAasdbg_hunt.py/asadbg_rename.py : scripts Python IDA à utiliser avec idahunt pour importer des symboles pour de nouvelles ciblesLes éléments suivants sont importés automatiquement par asadbg.py, mais nous
vous donnons quelques informations sur leur utilité :
asa_lib*.py : scripts Python gdb pour utiliser
libdlmalloc,
libptmalloc et
libmempool.asa_sync.py : script Python gdb pour utiliser
ret-synccomm.py : ensemble de fonctions pour communiquer via série, SSH, telnet.find_lina_pid.py : trouve le PID de lina à l'aide de commandes SSHtemplate_gdbinit : modèle gdbinit corrigé par asadbg.py pour chaque cible
que nous débogonsVous devez au départ modifier asadbg/env.sh pour correspondre à votre
environnement. Cela vous permettra de définir les chemins vers les outils
utilisés par tous les scripts ainsi que certaines variables correspondant à
votre environnement ASA. Notez qu'il existe un asafw/env.sh similaire, mais
un seul est requis pour les deux projets. Nous recommandons de l'ajouter à votre
~/.bashrc :```
source /path/to/asadbg/env.sh
# Débogage automatisé
L'un des principaux avantages de l'utilisation d'asadbg est que vous pouvez automatiser votre utilisation des appareils Cisco ASA à la fois émulés (GNS3) et réels. Cela peut inclure simplement l'automatisation générale du démarrage et de l'exécution de divers firmwares et configurations, ou spécifiquement l'automatisation du processus de débogage de `lina` à l'aide de gdb. Cela se fait principalement via le script `asadbg.py`. L'idée principale est de précharger de la mémoire flash sur l'appareil ASA avec les fichiers de firmware et de configuration que vous souhaitez utiliser sur l'appareil. Pour chaque firmware que vous souhaitez déboguer, vous pouvez utiliser un outil tel que `asafw` pour extraire différents symboles, puis générer automatiquement des fichiers gdbinit à partir de ces symboles. Par défaut, `asadbg.py` utilise un fichier `template_gdbinit` pour automatiser la création d'un fichier gdbinit spécifique à la version au moment de l'exécution, en utilisant les symboles présents dans la base de données.
## Démarrer rapidement un appareil réel (sans débogage)
Vous pouvez démarrer rapidement une version donnée en spécifiant les fichiers de firmware et de configuration qui doivent déjà se trouver sur la carte CF.```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802
L’exemple suivant montre comment configurer les fichiers de configuration pour déboguer
un périphérique GNS3. Nous définissons d’abord un fichier de configuration asadbg.cfg similaire à
celui ci-dessous. Il contient l’adresse IP/le port GNS3 du pare-feu configuré, que nous obtenons
directement depuis 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
Il pointe également vers le fichier `asadb.json` de la base de données ASA contenant les adresses requises. Ce
qui est important ici, c'est que `version=941200` et `arch=gns3` spécifiés dans
`asadbg.cfg` permettent de correspondre au firmware dans `asadb.json` ci-dessous. Nous indiquons également
que nous voulons attacher 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
}
Maintenant, nous commençons le débogage et clock_interval sera automatiquement patché :```
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.
## Débogage d'un appareil réel avec fichier de configuration
L'exemple suivant montre comment configurer les fichiers de configuration pour déboguer
un véritable appareil Cisco ASA via une console série.```ini
[GLOBAL]
serial_port=/dev/ttyUSB0
asadb_file=asadb.json