Modification de ASAOS pour faire fonctionner ASDM en émulation
Un petit tuto pour patcher asaos afin de faire fonctionner ASDM en émulation. Les manipulation seront à faire sous linux.
Testé avec la version 8.0.2
Pour ceux qui ne sont pas bidouilleurs, j’ai mis une version patchée de la VM citée dans un précédent post, c’est par ici:
Extraction de l’OS
Ouvrir le fichier bin avec un editeur hexadecimal, ou generer un dump avec la comande:
#hexdump -C asa802.bin > asa802.hd
Chercher ensuite la chaine « 1f 8b 08 00 1d » dans ce dump avec la commande:
#grep "1f 8b 08 00 1d" asa802.hd
On obtiens quelque chose comme ça:
001228b0: 1f 8b 08 00 1d 3d 73 46 - 00 03 ec 3a 6d 54 14 57
Cela veut dire que l’occurence est trouvé à l’octet 001228B0 du fichier. Cette séquence de caractère délimite le fichier avec une en tête qu’il faut enlever. Pour cela, nous allons juste prendre la taille du fichier en octet, auquel on va soustraire cette valeur, précédemment convertie en décimale (hexdump nous donne des adresses… Hexadécimales.).
On peut utiliser PERL pour le faire simplement. On copiera ensuite le fichier sans cette entête, en utilisant la commande tail.
# ls -la asa802-k8.bin -rw-r--r-- 1 ftp wheel 14524416 9 Aug 09:25 asa802-k8.bin # perl -e '$x=14524416-0x1228b0;print "$x\n"' 13334352 # tail -c 13334352 asa802.bin > asa802.gz
Ensuite on dézippes extrait l’archive avec CPIO. Je vais créer un dossier uncompressed et copier les fichiers dedans:
#gzip -d asa802.gz #mkdir uncompressed #cd uncompressed #sudo cpio -id --no-absolute-filenames < ../asa802
A partir d’ici vous avez un système de fichier linux complet, qui correspond a ASAOS (oui ça se base sur linux). Vous pouvez modifier le script rcS qui correspond au script de lancement, mais ici nous allons nous intéressé à l’executable lina qui se trouve dans asa/bin.
Cet exécutable est en gros le shell de asaos, c’est lui qui parse les commandes. Lorsque l’on lance ASDM, il va effectuer un show version afin de vérifier si ASDM est compatible avec le modèle de l’ASA. Etant donné que l’on émule l’ASA, le show version ne retourne rien. On va donc modifier lina afin de faire afficher le modèle que l’on souhaite. J’ai utilisé GHex, mais n’importe quel autre outil fait l’affaire.
Voici donc les étapes à suivre:
1) Edition lina
hexedit Lina et chercher la seconde occurence de « Hardware: » On trouve ceci:
Hardware: %s, %d MB RAM,
2) Trouver une chaine à modifier
Trouver une chaine de caractère dans l’éxécutable plus longue et qui n’est pas utile, on la remplacera par notre chaine à nous.
strings -n 30 lina
3)Je vais utiliser la chaine « pager_main() – Unable to create the pager initialization thread », donc dans GHex, je cherche « pager_main », afin de la localiser
4) Remplacer la chaine
Je remplace cette chaine avec la chaine suivante, en effacant ce qui reste avec des 00 (partie hexadécimale)
"Hardware: ASA5520, 128 MB RAM, CPU Pentium II 2000 MHz"
Avant:
pager_main() - Unable to create the pager initialization.....thread
Après:
Hardware: ASA5520, 128 MB RAM, CPU Pentium II 2000 MHz..................thread
(Fill the old string with 00 hex, to not change exe structure, and don’t forget the ,).
Après un test, je me suis aperçu qu’il y avait un C en trop lors du show ver:
Hardware: ASA5520, 128 RAM, CPU Pentium II 2000 MHzc
Cela est du à la fonction qui est censée récupéré le nom du processeur.
Si on retourne à la chaine Hardware: initiale, on remarque ceci:
Hardware: %s, %d MB RAM, .cpuid.c.CPU %s .%d MHz. reg%d: 0x%x..c....
Il y a 2 C, on les remplace par des 00 (partie Hexa), et c’est bon.
5) Désassemblage
J’ai désassemblé lina avec IDA Pro. Une fois l’analyse complète, cliquer dans views/open subviews, strings, et quand les chaines sont affichée, chercher (ALT+T) la chaine remplacée, qui contient le modèle de l’asa (il se peut qu’il faille sélectionner les octet, et la convertir en string depuis le menu edit). Notez ensuite les adresses dans le fichier (file offset), et l’adresse d’exécution
Dans mon cas j’avais:
File offset:0x01280BD8 Adress:0x092C8BD8 Offset name: aHardware5515SD
Chercher la chaine originale, et faire la même chose
File offset:0x014AFB8F8 Adress:0x094F7BF8 Offset name:aHardware5520DM
6)Patching
Faire un clique droit sur la chaine originale, et un click sur « jump xrefs to operand », cliquez sur OK, et on doit être amené à l’offset fichier:
0x01024C30
Sélectionner le nom de l’offset (dans mon cas aHardware5520DM), et cliquer sur l’onglet hexview.
On remarque :
F8 7B 4F 09
Qui correspond à 094F7BF8 (l’adresse d’éxécution de la chaine) inversé.
On va donc remplacer cette adresse avec celle de notre chaine:
09 2C 8B D8 (adresse nouvelle chaine) devient
D8 8B 2C 09
Dans notre editeur hexadecimal, aller à l’adresse 0x01024C30 et changer F8 7B 4F 09 par D8 8B 2C 09
7) Repack
Sauvegarder lina, assurer vous qu’il est en chmod 755, et recréer l’os comme suit:
bastien@bastien-laptop:~/asaemu/asa802-k8_1/uncompressed$ find . | cpio -o -H newc > ../asa802_cpio 61038 blocks bastien@bastien-laptop:~/asaemu/asa802-k8_1/uncompressed$ cd .. bastien@bastien-laptop:~/asaemu/asa802-k8_1$ gzip -9 asa802_cpio
Et si tout est niquel, quand on boot on peut avoir ça:
ciscoasa# sh ver Cisco Adaptive Security Appliance Software Version 8.0(2) Compiled on Fri 15-Jun-07 19:29 by builders System image file is "Unknown, monitor mode tftp booted image" Config file at boot was "startup-config" ciscoasa up 3 secs Hardware: ASA5520, 128 RAM, CPU Pentium II 2000 MHz
Pour infos, voici ma chaine de lancement QEmu:
qemu -hda ./asa802-k8_1/FLASH -m 256 -kernel ./asa802-k8_1/uncompressed/vmlinuz -initrd ./asa802-k8_1/asa802_cpio.gz \ --no-kqemu -nographic -append "auto console=ttyS0,9600 bigphysarea=16384 ide1=noprobe" \ -net nic,vlan=1,macaddr=00:aa:00:00:02:01,model=pcnet -net tap,vlan=1,ifname=tap0
Voilà, j’ai plus d’excuses pour pas bosser à fond SNAF
1) hexedit Lina and find Hardware:, 2nd occurence:
Hardware: %s, %d MB RAM,
2) Find a string longer than this, in the linux shell, type:
strings -n 30 lina
3) Search this string in the hex editor, I’ll take « pager_main() – Unable to create the pager initialization thread », so I’m looking for « pager_main », for example
4)Replace this string and end with 0s:
« Hardware: 5515, 128 MB RAM, CPU Pentium II 2000 MHz »
You can let the %s,%d or hard writting it, that what i’ll do because otherwise couln’t have the CPU name…
Before:
pager_main() – Unable to create the pager initialization…..thread
After:
Hardware: ASA5520, 128 MB RAM, CPU Pentium II 2000 MHz………………thread
(Fill the old string with 00 hex, to not change exe structure, and don’t forget the ,).
Well, I repacked it and try, but the show ver gave me:
Hardware: 5520, 128 RAM, CPU Pentium II 2000 MHzc
Notice the final C… It is due to the CPU Fetch function, so what yo uhave to do, is to go back to the original string in your hex editor:
Notice the string:
Hardware: %s, %d MB RAM, .cpuid.c.CPU %s .%d MHz. reg%d: 0x%x..c….
There are two damned C(after cpuid, and at the end of the line), well, replace it with 00 hex and it’s cool.
5) Disassemble lina with IDA Pro (wait the analysis to complete, long time), then click views, open subviews, string, and search(ALT+T) for the string you’ve written, with the 5515 or whatever you’ve put, and note the file offset, string address, and offset name. (you may have to select and right click and then select string to convert it to string)
In my case it is:
File offset:0x01280BD8
Adress:0x092C8BD8
Offset name: aHardware5515SD
then look for the original Hardware: %s, %d… string in the strings window Click on it
Note same infos as above
File offset:0x014AFB8F8
Adress:0x094F7BF8
Offset name:aHardware5520DM
6)Right click on the offset name and click jump to xrefs to operand and click ok. Note the file offset:
0x01024C30
Select aHardware5520DM and go to hex view.
You’ll notice:
BB F8 7B 4F 09
That is 094F7BF8 reversed.
Then it’s here you have to replace with your address!
So 09 2C 8B D8 would become
D8 8B 2C 09.
Return to your hex editor, go to the file offset 0x01024C30 and write down the new address of your edited string
7)Save the lina executable, and repack the IOS, then launch n prey
ciscoasa# sh ver
Cisco Adaptive Security Appliance Software Version 8.0(2)
Compiled on Fri 15-Jun-07 19:29 by builders
System image file is « Unknown, monitor mode tftp booted image »
Config file at boot was « startup-config »
ciscoasa up 3 secs
Hardware: ASA5520, 128 RAM, CPU Pentium II 2000 MHz
WHOOOHOOO
Let’s try ASDM
Recent Entries
- Définir des « handlers » personnalisés pour associer les liens d’un protocole avec une application perso.
- DMVPN over GETVPN avec KS COOP (redondance) et KS Forwarding
- EAP-TLS avec Autorité de certification autonome (Standalone CA) sous Windows 2003
- Static subnet NAT avec VRF pour monter des ‘PODs’ (LAB)
- Capture WiFi en mode monitor sous windows, et capture par process
- Comment taper un point d’interrogation ‘?’ dans un mot de passe ?
- IPSEC High Availability Stateful Failover avec VTI
- Exemple GETVPN avec utilisation du CA server IOS
- Vente de matériel cisco : ip phone 7960, 3550 PoE, AP 1131Ag
- Prise en main d’un IDS 4215 et utilisation IDM sous Windows 7
juin 29th, 2009 at 10:23
bonjour,
j’ai télécharger ta VM patché
je la démarre avec vmware workstation6 mais il y a un message d’erreur concernant le port série —> » serial0: Unable to create the server-side instance of the « asaconsole » named pipe: Syntaxe du nom de fichier, de répertoire ou de volume incorrecte. »
pourrai tu m’aider en m’expliquant comment je doit procéder pour me connecter
à la machine virtuelle
en te remerciant par avance
juin 29th, 2009 at 16:14
Salut, es tu sous linux ou windows ? Je penses que le chemin pour le pipe est pas bon… Modifie les propriétés de ta VM. Pour plus d’info, regarde mon autre post sur la VM ASA
juin 29th, 2009 at 16:23
salut merci de ta reponse
je suis sous windows , dans les propriétés du port serial de la VM
Use named pipe:
asaconsole
This end is the server.
The other end is an application
ce sont je pense les paramètres preconfigurés de la VM
et sa ne fonctionne pas
juin 29th, 2009 at 16:46
en modifiant le nom du pipe par \\.\pipe\asaconsole
je ne recoit pas de message d’erreure
par contre
je lance start_gw.bat
puis je me connecte en hyperterminal
en tcp/ip
sur localhost port 567
je réussie à me connecter mais j’ai rien sur le terminal
août 13th, 2009 at 10:37
Salut, suis la procédure ici:
http://bmigette.fr/2008/11/30/asa-emulation-part-2/
août 14th, 2009 at 15:35
bonjour
j’ai tenter de reproduire ton opération mais je bloque à l’étape
5) Désassemblage
je ne voie pas où est -> le fichier (file offset)
File offset:0x01280BD8
Adress:0x092C8BD8
Offset name: aHardware5515SD
pour faire la modif est ce que c’est un onglet dans IDA PRO
merci
août 30th, 2009 at 20:34
Salut, le file offset, c’est simplement l’instruction à l’adresse du fichier en octet, ce qui diffère de l’adresse d’exécution. Dans les menu, tu dois voir jump to file offset, ou quelque chose comme cela.