Skadlig kod i PDF-dokument
PDF-dokument stödjer mycket mer än bara formaterad text, layouts och bilder och det finns tillräckligt med funktionalitet i PDF-standarden för att PDF-dokument skall kunna utgöra skadlig kod. Detta tillsammans med att PDF-dokument ofta utbyts över e-post och användare litar på PDF-dokument mer än t.ex. körbara filer leder till att PDF-dokument med skadlig kod används i angrepp. Därför kommer denna blogg att belysa risker och granskning av PDF-dokument.
Risker med PDF-dokument
PDF-dokument är uppbyggda av objekt, referenser och strömmar med kodad data. Objekt definieras med nyckelord varav de som kan vara riskfyllda är följande:
- /OpenAction /AA: öppna automatiskt
- /JavaScript /JS: javascript
- /GoTo: ändrar vy till en vy i annat PDF-dokument
- /Launch: starta program eller öppna dokument
- /URI: få åtkomst till innehåll över URL
- /SubmitForm /GoToR: skicka data över URL
- /RichMedia: kan bädda in Flash
- /ObjStm: kodat innehåll i ström
Verktyg för att granska PDF-dokument
Med vetskapen om att ovanstående nyckelord kan användas för skadlig kod finns ett antal verktyg för att översiktligt analysera PDF-dokument och extrahera strömmar och objekt från sådana.
peepdf.py
Peepdf.py kan lista objekt och strömmar i PDF-dokument och markerar misstänkta objekt som nedan.
peepdf.py ger både en listning av objekt som kan utnyttjas för skadlig kod och vilka objektnummer kopplade till dessa man bör granska noggrannare angivna inom blockparanteser.
Dock är det viktigt att notera att legitima PDF-dokument också använder sig av dessa objekt såsom AcroForm vilket gör att man behöver analysera vad dessa objekt och strömmar faktiskt innehåller vilket leder oss till nästa verktyg jag vill presentera.
pdf-parser.py
pdf-parser.py kan bland annat kan användas för att extrahera objekt och strömmar från PDF-dokument med växeln --obeject
. vilket i kan generera följande utdata på en ström med javascript.
Ofta upptäcker man dock som i fallet ovan att innehåll är kodat, i det här fallet där /FlatDecode
avslöjar att Deflate-algoritmen använts men då finns --filter --raw
för att mata ut strömmen.
Andra verktyg
Det finns fler verktyg bland annat grafiska verktyg såsom Origami och det är fullt möjligt att använda en texteditor såsom vi som kan hantera filer med blandat text och data-innehåll. Speciellt skulle jag rekommendera vi med -b som ger både syntax-highliting och visar icke-utskrivbara tecken med deras kodpunkter inom hakparanterser.