[BBB] [GDB] Exploitation de binaire ARM
[BBB] [GDB] Exploitation de binaire ARM
Bonjour,
Je suis actuellement un tutoriel sur l’ASM ARM et l’exploitation de binaire ARM (https://azeria-labs.com/writing-arm-assembly-part-1/), je suis en train de faire les challenges proposés (https://azeria-labs.com/part-3-stack-ov ... hallenges/).
J’ai fait jusqu’au 5ᵉ challenge sous l’OS original qui tournait sur mon BeagleBoneBlackrevC, c’est-à-dire bone-debian-9.5-iot-armhf-2018-10-07-4gb.img (https://debian.beagleboard.org/images/b ... 4gb.img.xz).
Pour des raisons de logiciels pas vraiment à jour sur la version de Debian, faisant planter GDB à l’erreur de segmentation, j’ai décidé d’installer mon OS préféré (https://archlinuxarm.org/platforms/armv ... bone-black) pour avoir les correctifs de ce bug par une version à jour du logiciel.
Sauf qu’il y a un problème maintenant sous Arch.
Sous GDB j’ai eu juste à changer une adresse pour que mon exploit sur le chalenge 5 remarche, mais ce n’est plus le cas en dehors de GDB avec ce même changement.
Je précise que j’ai désactivé l’ASLR et que le binaire fourni par le challenge n’a aucune protection.
Je ne comprends pas pourquoi mon exploit ne marche plus en dehors de GDB alors qu’il marchait sur le Debian de manière identique à l’extérieur de GDB comme dans GDB.
Je suppose qu’il doit surement avoir quelques choses qui change sur la stack entre l’environnement GDB et en dehors de GDB, mais cela me parait bizarre que les variables d’environnement dans GDB et en dehors soient différentes?! J’ai remarqué par exemple que python ne s’exécutait pas correctement par defaut, il lui manquait dans locale.conf LANG=en_US.UTF-8 pour afficher correctement certain caractère Unicode alors que locale.gen était correctement configuré
Est-ce qu’il y a des mesures de protection supplémentaire sur ArchlinuxARM d’activé par défaut? J’ai remarqué par exemple qu’il y avait systemd-auditd qui tournait dans le fond ce qu’il n’y a pas sur mon installation x86. Est-ce qu’il y a d’autre changement ou une documentation qui les listes?
Comment je résous cela? Merci d’avance
Je suis actuellement un tutoriel sur l’ASM ARM et l’exploitation de binaire ARM (https://azeria-labs.com/writing-arm-assembly-part-1/), je suis en train de faire les challenges proposés (https://azeria-labs.com/part-3-stack-ov ... hallenges/).
J’ai fait jusqu’au 5ᵉ challenge sous l’OS original qui tournait sur mon BeagleBoneBlackrevC, c’est-à-dire bone-debian-9.5-iot-armhf-2018-10-07-4gb.img (https://debian.beagleboard.org/images/b ... 4gb.img.xz).
Pour des raisons de logiciels pas vraiment à jour sur la version de Debian, faisant planter GDB à l’erreur de segmentation, j’ai décidé d’installer mon OS préféré (https://archlinuxarm.org/platforms/armv ... bone-black) pour avoir les correctifs de ce bug par une version à jour du logiciel.
Sauf qu’il y a un problème maintenant sous Arch.
Sous GDB j’ai eu juste à changer une adresse pour que mon exploit sur le chalenge 5 remarche, mais ce n’est plus le cas en dehors de GDB avec ce même changement.
Je précise que j’ai désactivé l’ASLR et que le binaire fourni par le challenge n’a aucune protection.
Je ne comprends pas pourquoi mon exploit ne marche plus en dehors de GDB alors qu’il marchait sur le Debian de manière identique à l’extérieur de GDB comme dans GDB.
Je suppose qu’il doit surement avoir quelques choses qui change sur la stack entre l’environnement GDB et en dehors de GDB, mais cela me parait bizarre que les variables d’environnement dans GDB et en dehors soient différentes?! J’ai remarqué par exemple que python ne s’exécutait pas correctement par defaut, il lui manquait dans locale.conf LANG=en_US.UTF-8 pour afficher correctement certain caractère Unicode alors que locale.gen était correctement configuré
Est-ce qu’il y a des mesures de protection supplémentaire sur ArchlinuxARM d’activé par défaut? J’ai remarqué par exemple qu’il y avait systemd-auditd qui tournait dans le fond ce qu’il n’y a pas sur mon installation x86. Est-ce qu’il y a d’autre changement ou une documentation qui les listes?
Comment je résous cela? Merci d’avance
Dernière modification par Distag le mar. 16 juil. 2019, 21:09, modifié 1 fois.
x86_64 | KDE | Clavier Bépo
Re: [BBB] [GDB] [STACK] Exploitation de binaire ARM
J’ai trouvé comment désactiver audit temporairement par:
La manière permanente ne semble pas marcher vu qu’au reboot il se réactive:
Mais cela ne change rien à mon probleme.
J’ai fait un diff entre l’env de gdb (show env) et l’env locale, il n’y a que 3 variables qui changent:
J’ai export les 2 derrières mais cela ne change rien à mon problème.
J’ai aussi essayé de lancer les exécutables avec
Mais cela ne change rien au problème
J’ai revérifié que la stack était bien exécutable dans /proc/PID/map et c’est bien le cas.
Code : Tout sélectionner
sudo auditctl -e 0
Code : Tout sélectionner
sudo systemctl disable auditd
J’ai fait un diff entre l’env de gdb (show env) et l’env locale, il n’y a que 3 variables qui changent:
- $_
- LINES=24
- COLUMNS=96
J’ai export les 2 derrières mais cela ne change rien à mon problème.
J’ai aussi essayé de lancer les exécutables avec
Code : Tout sélectionner
env -i gdb -q ./stack5
env -i ./stack5 <<< $(echo $(cat shellcode.bin ; perl -e 'print "\xb0\xfa\xff\xbe"x7'))
J’ai revérifié que la stack était bien exécutable dans /proc/PID/map et c’est bien le cas.
x86_64 | KDE | Clavier Bépo
Re: [BBB] [GDB] [STACK] Exploitation de binaire ARM
Kernels
Code : Tout sélectionner
Linux beaglebone 4.14.71-ti-r80 #1 SMP PREEMPT Fri Oct 5 23:50:11 UTC 2018 armv7l GNU/Linux
Linux alarm 5.1.15-1-ARCH #1 PREEMPT Fri Jun 28 02:45:22 UTC 2019 armv7l GNU/Linux
x86_64 | KDE | Clavier Bépo
Re: [BBB] [GDB] Exploitation de binaire ARM
Avec l’outil : https://github.com/slimm609/checksec.sh J’ai fait un "checksec --kernel" du debian ARM et du archlinux ARM
Les résultats du diff:
Est-ce que cela pourrait avoir un lien avec mon problème? Suis-je obligé de recompiler le kernel pour désactiver tout cela? Ou il y a une commande du style sysctl pour switcher off temporairement ces protections?
Les résultats du diff:
- Sur Archlinux:
Code : Tout sélectionner
Protected symlinks: Enabled
Protected hardlinks: Enabled
Full reference count validation: Enabled
Hardened Usercopy: Enabled
Hardened Usercopy Pagespan: Disabled
Harden str/mem functions: Enabled
Restrict /dev/kmem access: Enabled
- Sur Debian:
Code : Tout sélectionner
Protected symlinks: Disabled
Protected hardlinks: Disabled
Full reference count validation: Disabled
Hardened Usercopy: Disabled
Restrict /dev/kmem access: Disabled
Est-ce que cela pourrait avoir un lien avec mon problème? Suis-je obligé de recompiler le kernel pour désactiver tout cela? Ou il y a une commande du style sysctl pour switcher off temporairement ces protections?
x86_64 | KDE | Clavier Bépo
Re: [BBB] [GDB] Exploitation de binaire ARM
Ce qui correspond à:
Pour recompiler le noyau, je suis tombé sur ça https://archlinuxarm.org/forum/viewtopi ... 48&t=10089
J’ai été cherché le PKGBUILD du noyau parmi les PKGBUILD d’archlinuxarm (https://github.com/archlinuxarm/PKGBUILDs)
- sudo sysctl fs.protected_symlinks=0
- sudo sysctl fs.protected_hardlinks=0
- CONFIG_REFCOUNT_FULL=y
- CONFIG_HARDENED_USERCOPY=y
- CONFIG_FORTIFY_SOURCE=y
- # CONFIG_DEVKMEM is not set
Pour recompiler le noyau, je suis tombé sur ça https://archlinuxarm.org/forum/viewtopi ... 48&t=10089
J’ai été cherché le PKGBUILD du noyau parmi les PKGBUILD d’archlinuxarm (https://github.com/archlinuxarm/PKGBUILDs)
x86_64 | KDE | Clavier Bépo
- benjarobin
- Maître du Kyudo
- Messages : 17393
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [BBB] [GDB] Exploitation de binaire ARM
Bonjour,
Je ne vois pas comment CONFIG_FORTIFY_SOURCE=y peut être la cause de tes soucis.
Tu n'aurais pas le code source du chalenge ? Ou uniquement le binaire ? As tu analysé ce qui était fait ?
Je ne vois pas comment CONFIG_FORTIFY_SOURCE=y peut être la cause de tes soucis.
Tu n'aurais pas le code source du chalenge ? Ou uniquement le binaire ? As tu analysé ce qui était fait ?
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Re: [BBB] [GDB] Exploitation de binaire ARM
Le stack5 de https://github.com/azeria-labs/ARM-challenges
Il ne fait que remplir un buffer avec gets via stdin.
Je ne vois que lui qui est un lien avec un buffer en userspace.
Il ne fait que remplir un buffer avec gets via stdin.
Je ne vois que lui qui est un lien avec un buffer en userspace.
(https://cateee.net/lkddb/web-lkddb/FORTIFY_SOURCE.html)Detect overflows of buffers in common string and memory functions where the compiler can determine and validate the buffer sizes.
x86_64 | KDE | Clavier Bépo
- benjarobin
- Maître du Kyudo
- Messages : 17393
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [BBB] [GDB] Exploitation de binaire ARM
Ah en effet s'il appel gets (qui utilise ce genre de fonction aujourd'hui...).
Généralement les buffers overflow sont fait depuis l'userspace et non depuis un syscall kernel.
Je pensais à un memcpy coté userspace, et dans ce cas là le kernel ne peut pas vraiment te protéger (à part le classique stack overflow)
Je viens de désassembler le programme, il n'a pas l'air de faire grand chose...
Et le but est de juste faire ceci ?
Généralement les buffers overflow sont fait depuis l'userspace et non depuis un syscall kernel.
Je pensais à un memcpy coté userspace, et dans ce cas là le kernel ne peut pas vraiment te protéger (à part le classique stack overflow)
Je viens de désassembler le programme, il n'a pas l'air de faire grand chose...
Code : Tout sélectionner
0001041c <main>:
1041c: e92d4800 push {fp, lr}
10420: e28db004 add fp, sp, #4
10424: e24dd048 sub sp, sp, #72 ; 0x48
10428: e50b0048 str r0, [fp, #-72] ; 0xffffffb8
1042c: e50b104c str r1, [fp, #-76] ; 0xffffffb4
10430: e24b3044 sub r3, fp, #68 ; 0x44
10434: e1a00003 mov r0, r3
10438: ebffffa1 bl 102c4 <gets@plt>
1043c: e1a00003 mov r0, r3
10440: e24bd004 sub sp, fp, #4
10444: e8bd8800 pop {fp, pc}
Le tableau à l'air d'être en stack et de taille 68Goal: overwrite PC and make it branch to your shellcode.
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Re: [BBB] [GDB] Exploitation de binaire ARM
Dans mon premier post, j’aurais peut-être dû préciser:
Mon problème n’est pas l’exploitation du binaire. Il suffit juste d’écraser l’adresse dans $r11 par l'adresse dans $r11 -68 pour lancer le shellcode, mon shellcode fait 44 octets, j’écris en plus 7 x 4 = 28 octets, soit 72. Ce qui l’écrase dans GDB sur debian ou sur Arch. Mais pas en dehors de GDB sur Arch à partir un shell classique alors que c’est le cas sur debian. Je suppose donc que mon problème vient de l’environnement système. Je suppose que si ce n’est pas les variables d’environnement [tester plus haut], cela doit venir de la config du kernel.J’ai fait jusqu’au 5ᵉ challenge inclu
x86_64 | KDE | Clavier Bépo