web-dev-qa-db-ja.com

PDFファイルから悪意のあるコードを抽出する

いくつかの悪意のあるコードを含むPDFファイルです。開いたとき、プロセッサの使用率は最大になり、ファンはフルrpmで動作します。 pdfid.py は、次の出力を生成します。

PDF Header: %PDF-1.7
 obj                 8598
 endobj              8598
 stream              8001
 endstream           8001
 xref                   0
 trailer                0
 startxref              2
 /Page                594
 /Encrypt               0
 /ObjStm              981
 /JS                    1
 /JavaScript            0
 /AA                    2
 /OpenAction            1
 /AcroForm              0
 /JBIG2Decode           0
 /RichMedia             0
 /Launch                0
 /EmbeddedFile          0
 /XFA                   0
 /URI                   0
 /Colors > 2^24         0

/JSは、JavaScriptコードが1つあることを示し、/AAおよび/OpenActionは、JavaScriptコードを起動するコードがあることを示します。

ただし pdf-parser.py ツール、キーワードjavascriptを検索しても一致しません:

python ./pdf-parser.py --search javascript ./document.pdf

ただし、キーワードOpenScriptを検索すると、1つの一致が返されます。

python ./pdf-parser.py --search openaction --raw ./document.pdf

結果:

obj 33412 0
 Type: /Catalog
 Referencing: 37640 0 R, 4364 0 R, 37641 0 R, 33413 0 R, 18188 0 R, 33259 0 R, 33264 0 R, 18275 0 R, 37642 0 R
<</MarkInfo 37640 0 R/Metadata 4364 0 R/Names 37641 0 R/OpenAction 33413 0 R/Outlines 18188 0 R/PageLabels 33259 0 R/PageLayout/SinglePage/PageMode/UseNone/Pages 33264 0 R/StructTreeRoot 18275 0 R/Type/Catalog/ViewerPreferences 37642 0 R>>

  <<
    /MarkInfo 37640 0 R
    /Metadata 4364 0 R
    /Names 37641 0 R
    /OpenAction 33413 0 R
    /Outlines 18188 0 R
    /PageLabels 33259 0 R
    /PageLayout /SinglePage
    /PageMode /UseNone
    /Pages 33264 0 R
    /StructTreeRoot 18275 0 R
    /Type /Catalog
    /ViewerPreferences 37642 0 R
  >>

実行中:

python ./pdf-parser.py --reference 33412 --raw ../document.pdf

結果:

obj 37639 0
 Type: /XRef
 Referencing: 33410 0 R, 33412 0 R
 Contains stream

  <<
    /DecodeParms
      <<
        /Columns 5
        /Predictor 12
      >>
    /Filter /FlateDecode
    /ID [<0B1CC64D68284D90BD0A295FADB0972A><08CB936A1AF9EB42A906D26EC2F80EFA>]
    /Index [33411 15558]
    /Info 33410 0 R
    /Length 7901
    /Prev 15523287
    /Root 33412 0 R
    /Size 48969
    /Type /XRef
    /W [1 3 1]
  >>


obj 4368 0
 Type: /XRef
 Referencing: 33410 0 R, 33412 0 R
 Contains stream

  <<
    /DecodeParms
      <<
        /Columns 5
        /Predictor 12
      >>
    /Filter /FlateDecode
    /ID [<0B1CC64D68284D90BD0A295FADB0972A><08CB936A1AF9EB42A906D26EC2F80EFA>]
    /Info 33410 0 R
    /Length 8135
    /Root 33412 0 R
    /Size 33411
    /Type /XRef
    /W [1 3 1]
  >>

ついに実行

python ./pdf-parser.py --object 4368 --raw --filter ./document.pdf

解凍できないバイナリ出力を生成します。

誰かが私の間違いを指摘したり、JavaScriptとOpenActionコードを表示するために抽出する方法を教えたりできますか?

5
zindarod

任意の Hex Editor を使用して、PDFファイル(別名画像、テキスト、JavaScriptコードなど)のコンテンツを分割して開きます。これ以降、ファイルのコンテンツを検証し、フィルターできますJavaScriptまたは不審なコード。

1
Penguine