Τι θα χρειαστειτε;
1.Kali linux
Πολυ απο εσας διαβαζετε βιβλια σε μορφη pdf και συνηθως τα βρισκετε δωρεαν στο διαδικτυο
Καποιος ομως κακοβουλος χρηστης τα ανεβασε δωρεαν στο διαδικτυο με σκοπο να σας μολυνει με ιο
Σε αυτο τον οδηγο θα μαθουμε να κοιταμε τα αρχεια pdf αν εχουνε ιο
Για το παραδειγμα εχω φτιαξει ενα αρχειο pdf χωρις ιο και ενα με ιο
κοιταξτε οταν ανοιγουμε το kalo pdf
και τωρα το kako.pdf
οπως βλεπετε καμια οπτικη διαφορα παρα μονο στο kako.pdf ειναι λιγο μεγαλυτερο σε kilobyte λογο του ιου που εχω δεσμευσει με το metasploit
οποτε τωρα με την βοηθεια του pdfid θα δουμε αρχικα αν εχει καποιο javascript η κατι εκτελεσιμο
*αν θελετε να ανιχνευσετε ολοκληρο φακελο με pdf αρχεια τοτε χρησιμοποιηστε
pdfid -s /fakelos_me_pdf/
ανοιγουμε ενα τερματικο και γραφουμε
pdfid /root/Desktop/kalo.pdf
οπου /root/Desktop/kalo.pdf ειναι η διαδρομη του αρχειου pdf
στην πανω εικονα το αρχειο kalo.pdf κοιταμε τις εξεις γραμμες
αν και ξερω οτι ειναι καθαρο το αρχειο βλεπω /Open action δλδ με το που ανοιξει να τρεξει η να δειξει μια εντολη η ενα script
δειτε τον πινακα κατω
- AA :: an additional actions dictionary defining a fields behavior in response to trigger events
- AcroForm :: PDF files interactive form dictionary
- endobj :: specifies the end of a object in a PDF file
- endstream :: the end marker of a stream object in a PDF file
- JavaScript :: javascript dictionary containing javascript scripts
- JBIG2Decode :: decompresses data encoded using the JBIG2 standard
- JS :: a text string or stream containing JavaScript that will be executed when the action is triggered
- Launch :: launch an application which usually opens a file
- obj :: the beginning of a object in a PDF file
- ObjStm :: object stream
- OpenAction :: destination that shall be displayed or action that will be performed when PDF is opened
- RichMedia :: interactive PDF elements
- startxref :: follows trailer keyword and is offset of the cross-reference stream
- stream :: the beginning marker of a stream object PDF file
- trailer :: provides a method to quickly find a cross-reference table and certain special objects
- xref :: notes a cross-reference section in a PDF file
τωρα με την βοηθεια του peepdf θα δουμε καλυτερα τι ειναι αυτο και τι περιεχει το open action
οποτε πριν τρεξουμε το peepdf πρεπει να το κανουμε update με την εντολη
peepdf -u
και τωρα αναλυουμε το αρχειο kalo.pdf με την ποιο κατω εντολη
peepdf /root/Desktop/kalo.pdf
εδω το peepdf μας λεει οτι /openAction ειναι στο object 15
ομως θα τρεξουμε το peepdf σε interactive mode με την εντολη
peepdf -i /root/Desktop/kalo.pdf
αν πληκτρολογησετε help θα δειτε τις εντολες
πχ
για δουμε το metadata
εδω βλεπουμε ποτε δημιουργηθηκε το αρχειο ,τον τιτλο, το θεμα και οτι δημιουργηθηκε απο Libreoffice (openoffice)
τωρα ας κοιταξουμε το object 15 το οποιο το peepdf βρηκε υποπτο
και βλεπουμε στο /OpenAction ειναι το object 1 και οτι λεει null null δλδ τιποτα
ας δουμε τωρα το kako.pdf με το pdfid
οπως βλεπετε το pdf εχει javascript ,2 openAction και Launch
ας το κοιταξουμε με το peepdf
οποτε με την εντολη
peepdf -i /root/Desktop/kako.pdf
ας κοιταξουμε το object 15
βλεπουμε οτι φερνει ενα αλλο open action στο object 21 οτι το object 17 εχει ονοματα
οποτε κοιταμε το 17
βλεπουμε οτι εχει ενα συνδεδεμενο αρχειο στο object 18
και βλεπουμε το ονομα του αρχειου kalo (δλδ πχ εγω εφτιαξα το kalo.pdf και απο με αυτο το μολυνα με ιο και το ονομασα kako.pdf
δειτε εικονα κατω
το object 20 ειναι ο ιος
τωρα ας δουμε το object 21 που μας εβγαλε οτι εχει javascript
οπως βλεπετε οταν τρεξει το javascript ανοιγει το kalo.pdf
και το object 22 που ειναι το Launch
με λιγα λογια το javascript τρεχει το αρχειο kalo.pdf ωστε ο χρηστης να μην καταλαβει τιποτα και επισης τρεχει το object 22 ωστε να πατησει ο χρηστης αποδοχη για να γραφτει στο c:windows/system32 το object 20 που ανοιγει ενα meterpreter session με το θυμα
ας δουμε καλυτερα με το pdf-parser
τρεχουμε σε ενα τερματικο
pdf-parser /root/Desktop/kako.pdf
το pdf-parser θα ανοιξει ολα τα object
πχ
εμας μας ενδιαφερει το object 19,20,21,22 δλδ αυτα που βρηκαμε με το peepdf
ας υποθεσουμε οτι δεν εχουμε χρησιμοποιησει το pdfid για να δουμε αν εχει ιο το kako.pdf
τρεχουμε την εντολη
pdf-parser -a /root/Desktop/kako.pdf
οπως βλεπουμε εχει 2 action στο object 21 και 22
οποτε με την εντολη κοιταμε το object 21
pdf-parser --object=21 /root/Desktop/kako.pdf
βλεπουμε οτι το javascript κανει export ενα αντικειμενο με το ονομα kalo
και εκτελει και action
τωρα ας δουμε το object 22
pdf-parser --object=22 /root/Desktop/kako.pdf
εδω βλεπουμε το Launch που προσπαθει να εκτελεσει το kalo.pdf δλδ τον ιο
ομως που ειναι ο ιος?
με την εντολη
pdf-parser -r 21 /root/Desktop/kako.pdf
θα δουμε ποια object συνδεονται(reference) με το 21
οποτε βλεπουμε το object 15
οποτε τωρα κοιταμε το object 17 εφοσον τα 21 το εχουμε κοιταξει
και κοιταμε το object 18
κοιταμε το object 19
και εδω καταλαβαινουμε οτι απο το αρχειο kalo.pdf φτιαχτηκε το kako.pdf
και βλεπουμε τον ιο στο object 20
τωρα ας δουμε το object 20
βλεπουμε που λεει contains stream
για να δουμε τι περιεχει το stream γραφουμε
pdf-parser -f --object=20 /root/Desktop/kako.pdf
τωρα για να γλυτωσουμε την περιηγηση απο object σε object μεχρι να βρουμε τον ιο απλα γραφουμε
pdf-parser --searchstream=program /root/Desktop/kako.pdf
και μας βρισκει το object που εχει τον ιο δλδ το 20
ενας αλλος τροπος για να μην κανουμε αυτη την δουλεια απο object σε object θα χρησιμοποιησουμε το pdfobjflow για να φτιαξουμε ενα γραφημα
οποτε κανουμε εγκατασταση το pdfobjflow
γραφουμε apt-get install python-pydot
μετα για να δημιουργησουμε ενα φακελο
mkdir /root/tools/pdflow
πηγαινουμε στο φακελο με την εντολη
cd /root/tools/pdflow
για να το κατεβασουμε
wget http://pdfobjflow.googlecode.com/git/pdfobjflow.py
για να το κανουμε εκτελεσιμο
chmod +x pdfobjflow.py
δειτε εικονα
τωρα τρεχουμε την εντολη για να μας φτιαξει το γραφημα
pdf-parser /root/Desktop/kako.pdf | python /root/tools/pdflow/pdfobjflow.py eog pdfobjflow.png
πηγαινουμε και ανοιγουμε το pdfobjflow.png στην τοποθεσια /root
οποτε βλεπουμε ποιο object συσχετιζετε με ποιo
Εφοσον τωρα εχουμε μαθει να κοιταμε τα αρχεια pdf για ιους και βρηκαμε και σε ποιο object τρεχει ο ιος
αν θελουμε μπορουμε να εξαγουμε τον ιο ωστε να βρουμε την ip του κακοβουλου χρηστη
γραφουμε
pdf-parser --dump=/root/ios.exe -f --object=20 /root/Desktop/kako.pdf
και το αρχειο ios.exe θα ειναι στη διαδρομη /root/
τωρα αν εχουμε βρει ενα ωραιο βιβλιο pdf και δυστυχως καποιος το εχει μολυνει με ιο το απενεργοποιουμε με το pdfid
στην ουσια αλλαζει τα ονοματα ωστε να μην εκτελεστουνε
pdfid -d /root/Desktop/kako.pdf
με το peepdf μπορουμε να διαγραψουμε η να τροποποιησουμε ενα object πχ το object 20 που ειναι ο ιος θα βγαλουμε το περιεχομενο του
μετα γραφουμε save και exit
ξανατρεχουμε την εντολη peepdf /root/Desktop/kako.pdf
και βλεπουμε οτι στο object 20 δεν εχει τιποτα μεσα