Simovits

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:

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 mystery.pdf

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.

pdf-parser.py --object 13 mystery.pdf

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.

vi -b mystery.pdf

Referenser