Ανίχνευση Εκμετάλλευσης Δομικών Μορφών Αρχείων (0‑Click Chains)

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

Αυτή η σελίδα συνοψίζει πρακτικές τεχνικές για την ανίχνευση 0‑click mobile exploit files ελέγχοντας τα δομικά αμετάβλητα των φορμά τους αντί να βασίζεται σε byte signatures. Η προσέγγιση γενικεύει ανά δείγματα, πολυμορφικές παραλλαγές και μελλοντικά exploits που καταχρώνται την ίδια λογική του parser.

Κεντρική ιδέα: κωδικοποίηση δομικών αδυναμιών και ασυνεπειών μεταξύ πεδίων που εμφανίζονται μόνο όταν επιτυγχάνεται μια ευπαθής κατάσταση decoder/parser.

Δείτε επίσης:

PDF File analysis

Γιατί δομή, όχι υπογραφές

Όταν weaponized samples δεν είναι διαθέσιμα και τα payload bytes μεταλλάσσονται, οι παραδοσιακές IOC/YARA patterns αποτυγχάνουν. Η δομική ανίχνευση επιθεωρεί τη δηλωμένη διάταξη του container σε σύγκριση με το τι είναι μαθηματικά ή σημασιολογικά δυνατό για την υλοποίηση του format.

Τυπικοί έλεγχοι:

  • Επιβεβαιώστε τα μεγέθη πινάκων και τα όρια που προκύπτουν από το spec και τις ασφαλείς υλοποιήσεις
  • Σημειώστε μη νόμιμα/μη τεκμηριωμένα opcodes ή state transitions σε embedded bytecode
  • Διασταυρώστε το metadata VS τα πραγματικά encoded stream components
  • Εντοπίστε αντιφατικά πεδία που υποδεικνύουν parser confusion ή set‑ups για integer overflow

Πιο κάτω υπάρχουν συγκεκριμένα, ελεγμένα στο πεδίο μοτίβα για πολλαπλές υψηλού αντίκτυπου chains.


PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)

Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).

Δομικά σήματα:

  • Αντιφατική κατάσταση του dictionary που δεν μπορεί να συμβεί σε benign content αλλά απαιτείται για να ενεργοποιήσει το overflow στο arithmetic decoding.
  • Υποπτη χρήση global segments σε συνδυασμό με ανώμαλους αριθμούς symbols κατά τη refinement coding.

Pseudo‑logic:

# Detecting impossible dictionary state used by FORCEDENTRY
if input_symbols_count == 0 and (ex_syms > 0 and ex_syms < 4):
mark_malicious("JBIG2 impossible symbol dictionary state")

Πρακτική διαλογή:

  • Εντοπίστε και εξαγάγετε JBIG2 ροές από το PDF
  • pdfid/pdf-parser/peepdf για εντοπισμό και εξαγωγή ροών
  • Επαληθεύστε τα arithmetic coding flags και τις παραμέτρους του symbol dictionary σε σχέση με το JBIG2 spec

Σημειώσεις:

  • Λειτουργεί χωρίς embedded payload signatures
  • Χαμηλά false positives στην πράξη επειδή η κατάσταση που επισημαίνεται είναι μαθηματικά ασύμβατη

WebP/VP8L – BLASTPASS (CVE‑2023‑4863)

Στόχος: WebP lossless (VP8L) Huffman prefix‑code tables.

Δομικά σήματα:

  • Το συνολικό μέγεθος των κατασκευασμένων πινάκων Huffman υπερβαίνει το ασφαλές ανώτατο όριο που αναμένεται από τις reference/patched implementations, υπονοώντας την προϋπόθεση overflow.

Ψευδο‑λογική:

# Detect malformed Huffman table construction triggering overflow
let total_size = sum(table_sizes)
if total_size > 2954:   # example bound: FIXED_TABLE_SIZE + MAX_TABLE_SIZE
mark_malicious("VP8L oversized Huffman tables")

Πρακτική διαλογή:

  • Ελέγξτε τα τμήματα του κοντέινερ WebP: VP8X + VP8L
  • Αναλύστε τους prefix κωδικούς VP8L και υπολογίστε τα πραγματικά εκχωρημένα μεγέθη πινάκων

Σημειώσεις:

  • Ανθεκτικό σε byte‑level polymorphism του payload
  • Το όριο προκύπτει από ανάλυση upstream limits/patch

TrueType – TRIANGULATION (CVE‑2023‑41990)

Στόχος: TrueType bytecode μέσα σε προγράμματα fpgm/prep/glyf.

Δομικά σήματα:

  • Παρουσία μη τεκμηριωμένων/απαγορευμένων opcodes στον interpreter της Apple που χρησιμοποιείται από την exploit chain.

Ψευδο‑λογική:

# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue

Πρακτικός διαχωρισμός:

  • Εξαγωγή πινάκων γραμματοσειράς (π.χ., χρησιμοποιώντας fontTools/ttx) και σάρωση των προγραμμάτων fpgm/prep/glyf
  • Δεν χρειάζεται να εξομοιώσετε πλήρως τον διερμηνέα για να αποκτήσετε χρήσιμες πληροφορίες από ελέγχους παρουσίας

Σημειώσεις:

  • Μπορεί να παράγει σπάνια ψευδώς θετικά (FPs) εάν μη τυπικές γραμματοσειρές περιέχουν άγνωστα opcodes· επικυρώστε με δευτερεύοντα εργαλεία

DNG/TIFF – CVE‑2025‑43300

Στόχος: μεταδεδομένα εικόνας DNG/TIFF έναντι του πραγματικού αριθμού συστατικών στην κωδικοποιημένη ροή (π.χ., JPEG‑Lossless SOF3).

Δομικά σήματα:

  • Ασυμφωνία μεταξύ των πεδίων EXIF/IFD (SamplesPerPixel, PhotometricInterpretation) και του αριθμού συστατικών που αναλύεται από την κεφαλίδα της ροής εικόνας που χρησιμοποιεί το pipeline.

Ψευδο‑λογική:

# Metadata claims 2 samples per pixel but stream header exposes only 1 component
if samples_per_pixel == 2 and sof3_components == 1:
mark_malicious("DNG/TIFF metadata vs. stream mismatch")

Πρακτική διαλογή:

  • Ανάλυση πρωτευόντων IFD και ετικετών EXIF
  • Εντοπισμός και ανάλυση της ενσωματωμένης κεφαλίδας JPEG‑Lossless (SOF3) και σύγκριση αριθμών συνιστωσών

Σημειώσεις:

  • Αναφέρθηκε exploited in the wild; εξαιρετικός υποψήφιος για ελέγχους δομικής συνέπειας

DNG/TIFF – Samsung libimagecodec.quram.so (CVE‑2025‑21042) + Appended ZIP payload (LANDFALL)

Target: DNG (TIFF‑derived) images carrying an embedded ZIP archive appended at EOF to stage native payloads after parser RCE.

Structural signals:

  • Το magic αρχείου υποδεικνύει TIFF/DNG (II*\x00 or MM\x00*) αλλά το όνομα αρχείου μιμείται JPEG (π.χ. .jpg/.jpeg WhatsApp naming).
  • Παρουσία ZIP Local File Header ή EOCD magic κοντά στο EOF (PK\x03\x04 or PK\x05\x06) που δεν αναφέρεται σε καμία περιοχή δεδομένων TIFF IFD (strips/tiles/JPEGInterchangeFormat).
  • Ασυνήθιστα μεγάλα δεδομένα στο τέλος πέρα από το τελευταίο αναφερόμενο μπλοκ δεδομένων IFD (εκατοντάδες KB έως MB), συμβατά με πακεταρισμένο archive από .so modules.

Pseudo‑logic:

# Detect appended ZIP payload hidden after DNG/TIFF data (Samsung chain)
if is_tiff_dng(magic):
ext = file_extension()
if ext in {".jpg", ".jpeg"}: mark_suspicious("Extension/magic mismatch: DNG vs JPEG")

zip_off = rfind_any(["PK\x05\x06", "PK\x03\x04"], search_window_last_n_bytes=8*1024*1024)
if zip_off >= 0:
end_dng = approx_end_of_tiff_data()  # max(end of Strip/Tile/JPEGInterchangeFormat regions)
if zip_off > end_dng + 0x200:
mark_malicious("DNG with appended ZIP payload (LANDFALL‑style)")

Πρακτική διαλογή:

  • Αναγνώριση μορφής έναντι του ονόματος:
  • file sample; exiftool -s -FileType -MIMEType sample
  • Εντοπίστε footer/header του ZIP κοντά στο EOF και carve:
  • off=$(grep -aboa -E $‘PK\x05\x06|PK\x03\x04’ sample.dng | tail -n1 | cut -d: -f1)
  • dd if=sample.dng of=payload.zip bs=1 skip=“$off”
  • zipdetails -v payload.zip; unzip -l payload.zip
  • Επαληθεύστε ότι οι περιοχές δεδομένων TIFF δεν επικαλύπτουν την carved ZIP region:
  • tiffdump -D sample.dng | egrep ‘StripOffsets|TileOffsets|JPEGInterchangeFormat|StripByteCounts|TileByteCounts|JPEGInterchangeFormatLength’
  • Verify max(offset+length) << zip_off
  • Μονοβήματο carving (χονδρικό): binwalk -eM sample.dng

Σημειώσεις:

  • Εκμεταλλεύτηκε σε πραγματικές επιθέσεις εναντίον της Samsung’s libimagecodec.quram.so (CVE‑2025‑21042). Το appended ZIP περιείχε native modules (π.χ., loader + SELinux policy editor) που εξάχθηκαν/εκτελέστηκαν μετά από RCE.

Σχέδια υλοποίησης και απόδοση

Ένας πρακτικός scanner θα πρέπει να:

  • Αυτόματη ανίχνευση τύπου αρχείου και αποστολή μόνο στους σχετικούς analyzers (PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)
  • Stream/partial‑parse για ελαχιστοποίηση των allocations και δυνατότητα πρώιμου τερματισμού
  • Εκτέλεση αναλύσεων παράλληλα (thread‑pool) για μαζική διαλογή

Παράδειγμα ροής εργασίας με ElegantBouncer (open‑source Rust implementation of these checks):

# Scan a path recursively with structural detectors
$ elegant-bouncer --scan /path/to/directory

# Optional TUI for parallel scanning and real‑time alerts
$ elegant-bouncer --tui --scan /path/to/samples

DFIR συμβουλές και ακραίες περιπτώσεις

  • Ενσωματωμένα αντικείμενα: Τα PDFs μπορεί να ενσωματώνουν εικόνες (JBIG2) και γραμματοσειρές (TrueType)· εξαγάγετε και σαρώστε αναδρομικά
  • Ασφάλεια αποσυμπίεσης: χρησιμοποιήστε βιβλιοθήκες που επιβάλλουν αυστηρά όρια σε tables/buffers πριν την κατανομή
  • Ψευδώς θετικά: διατηρήστε τους κανόνες συντηρητικούς, προτιμήστε αντιφάσεις που είναι αδύνατες σύμφωνα με τις προδιαγραφές
  • Απόκλιση εκδόσεων: αναπροσαρμόστε τα βασικά όρια (π.χ., VP8L table sizes) όταν οι upstream parsers αλλάζουν τα όρια

Σχετικά εργαλεία

  • ElegantBouncer – δομικός σαρωτής για τις ανιχνεύσεις παραπάνω
  • pdfid/pdf-parser/peepdf – Εξαγωγή αντικειμένων PDF και στατική ανάλυση
  • pdfcpu – linter/καθαριστής PDF
  • fontTools/ttx – εξαγωγή TrueType tables και bytecode
  • exiftool – ανάγνωση μεταδεδομένων TIFF/DNG/EXIF
  • dwebp/webpmux – ανάλυση WebP metadata και chunks

Αναφορές

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