{"id":7059,"date":"2020-07-14T20:19:51","date_gmt":"2020-07-14T19:19:51","guid":{"rendered":"https:\/\/www.erroussafi.com\/?p=7059"},"modified":"2020-07-14T20:19:51","modified_gmt":"2020-07-14T19:19:51","slug":"pratique-analyse-statique-de-malware-part-1-hash-calculation","status":"publish","type":"post","link":"https:\/\/www.erroussafi.com\/index.php\/2020\/07\/14\/pratique-analyse-statique-de-malware-part-1-hash-calculation\/","title":{"rendered":"[Pratique] &#8211; Analyse statique de Malware (Part 1 &#8211; Hash Calculation)"},"content":{"rendered":"\n<p>Dans cet article, nous allons nous exercer \u00e0 faire une &#8220;analyse statique&#8221; de Malware. Principalement, nous allons apprendre \u00e0 analyser un fichier afin d&#8217;extraire toutes les informations utiles qui peuvent \u00eatre v\u00e9rifiable sur des bases de donn\u00e9es de la communaut\u00e9 pour detecter les malwares connus. Nous allons utiliser pour cel\u00e0 python afin d&#8217;extraire les informations utiles (noms, strings, hashes ..) mais aussi des outils d&#8217;inspection du PE Header et finalement nous allons introduire le fameux YARA, moteur qui alimente les principaux IDS et Antivirus modernes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9requis Techniques<\/h2>\n\n\n\n<p>Nous allons utiliser pour ce premier article :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Une machine Windows ou Linux avec Python install\u00e9 dessus<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">L&#8217;analyse statique de malware<\/h2>\n\n\n\n<p>Pour effectuer une analyse statique, nous allons examiner un \u00e9chantillon de fichier suspect (executable) sans l&#8217;ex\u00e9cuter. La quantit\u00e9 d&#8217;informations qui peut \u00eatre obtenu de cette fa\u00e7on est importante, ca peut aller du simple nom de fichier, jusqu&#8217;aux signatures YARA complexes et sp\u00e9cialis\u00e9es. Nous allons essayer de voir les diff\u00e9rentes \u00e9tapes pour analyser statiquement un \u00e9chantillon.<\/p>\n\n\n\n<p>L&#8217;analyse statique, n&#8217;est pas une solution miraculeuse, il s&#8217;agit principalement de la premi\u00e8re \u00e9tape dans l&#8217;analyse de binaires dans le sens qu&#8217;elle permet d\u00e9j\u00e0 de voir les similarit\u00e9s avec les \u00e9chantillons pr\u00e9c\u00e9demment analys\u00e9s par la communaut\u00e9. <\/p>\n\n\n\n<p>Aussi, les malwares modernes excellent dans l&#8217;art de l&#8217;obfuscation, ou le fait de cacher les informations n\u00e9cessaire pour r\u00e9sister \u00e0 l&#8217;analyse statique. Dans le prochain article nous allons introduire la notion d&#8217;analyse dynamique en Sandbox (ou machine virtuelle s\u00e9curis\u00e9e) qui, elle, permet une plus grande inspection du comportement.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Calcul du Hash de l&#8217;\u00e9chantillon<\/h2>\n\n\n\n<p>On nomme <strong>fonction de hachage<\/strong>, de l&#8217;anglais <em>hash function<\/em> (<em>hash<\/em>\u00a0: pagaille, d\u00e9sordre, recouper et m\u00e9langer) par analogie avec la cuisine, une fonction particuli\u00e8re qui, \u00e0 partir d&#8217;une donn\u00e9e fournie en entr\u00e9e, calcule une <em><strong>empreinte num\u00e9rique<\/strong><\/em> servant \u00e0 identifier rapidement la donn\u00e9e initiale, au m\u00eame titre qu&#8217;une signature pour identifier une personne. Les fonctions de hachage sont utilis\u00e9es en informatique et en cryptographie notamment pour reconna\u00eetre rapidement des fichiers ou des mots de passe.<\/p>\n\n\n\n<p>L&#8217;id\u00e9e est donc de calculer le hash de notre \u00e9chantillon pour pouvoir confronter cette &#8220;empreinte&#8221; aux empruntes connues des malwares.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9parer l&#8217;environnement<\/h2>\n\n\n\n<p>Pour cet article, nous allons essayer d&#8217;analyser un fichier \u00e0 priori b\u00e9nin, nous allons prendre notepad.exe qui r\u00e9side sur chaque machine windows et pour cel\u00e0, nous allons cr\u00e9er un dossier de travail et copier le fichier notepad.exe (qui r\u00e9side dans le r\u00e9p\u00e9rtoire windows\/system32) vers notre dossier de travail. Notre code est \u00e9crit en python.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Calculer le hash de notepad.exe<\/h2>\n\n\n\n<p>Voici les \u00e9tapes pour calculer le hash de notepad.exe :<\/p>\n\n\n\n<p>D&#8217;abord on importe les librairies n\u00e9cessaires et notre fichier<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import sys\nimport hashlib\nfilename = \"notepad.exe\"<\/code><\/pre>\n\n\n\n<p><br>Initialiser les fonctions MD5 et SHA256 avec un incr\u00e9ment de calcul de 64k<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BUF_SIZE = 65536\nmd5 = hashlib.md5()\nsha256 = hashlib.sha256()<\/code><\/pre>\n\n\n\n<p><br>Nous lisons le fichier notepad.exe par incr\u00e9ments de 64k pour construire notre hash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>with open(filename, \"rb\") as f:\nwhile True:\ndata = f.read(BUF_SIZE)\nif not data:\nbreak\nmd5.update(data)\nsha256.update(data)<\/code><\/pre>\n\n\n\n<p><br>A la fin nous envoyons le r\u00e9sultat sur la fen\u00eatre console :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(\"MD5: {0}\".format(md5.hexdigest()))\nprint(\"SHA256: {0}\".format(sha256.hexdigest()))<\/code><\/pre>\n\n\n\n<p>Pour mon notepad.exe sur mon windows 10, voici le r\u00e9sultat que j&#8217;obtiens :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MD5:  f65b883128779592cca7d01cc87937bf \nSHA256:  2f3daf08b248b0a8aa0c47ba81864be7d379a0229599cdec3b93281b57fcd280 <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Explications du code<\/h2>\n\n\n\n<p>Cette section expliquera les \u00e9tapes qui ont \u00e9t\u00e9 fournies dans la section pr\u00e9c\u00e9dente :<br>\u00c0 <strong>l&#8217;\u00e9tape 1<\/strong>, nous importons <strong>hashlib<\/strong>, une biblioth\u00e8que Python standard pour le calcul de hachage. Nous sp\u00e9cifions \u00e9galement le fichier que nous allons hacher &#8211; dans ce cas, le fichier est notepad.exe.<br>\u00c0 <strong>l&#8217;\u00e9tape 2<\/strong>, nous instancions un objet md5 et un objet sha256 et sp\u00e9cifions la taille des morceaux que nous allons lire (64Kb = 65536 b).<br>\u00c0 l&#8217;\u00e9tape 3, nous utilisons la m\u00e9thode .update (data). Cette m\u00e9thode nous permet de calculer le hachage de mani\u00e8re incr\u00e9mentielle, car il calcule le hachage de l&#8217;encha\u00eenement. En d&#8217;autres termes, hash.update (a) suivi de hash.update (b) est \u00e9quivalent \u00e0 hash.update (a + b).<br>\u00c0 l&#8217;\u00e9tape 4, nous imprimons les hachages en chiffres hexad\u00e9cimaux. et nous obtenons les deux valeurs de hash MD5 et SHA256.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">V\u00e9rification VirusTOTAL<\/h2>\n\n\n\n<p>On peut v\u00e9rifier notre code, en soumettant le fichier c:\\windows\\system32\\notepad.exe au moteur www.virustotal.com. Celui ci effectuera un calcul externe des hash et nous montrera les m\u00eames r\u00e9sultats :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"664\" src=\"https:\/\/www.erroussafi.com\/wp-content\/uploads\/2020\/07\/hashvirustotal-1024x664.png\" alt=\"\" class=\"wp-image-7062\" srcset=\"https:\/\/www.erroussafi.com\/wp-content\/uploads\/2020\/07\/hashvirustotal-1024x664.png 1024w, https:\/\/www.erroussafi.com\/wp-content\/uploads\/2020\/07\/hashvirustotal-300x195.png 300w, https:\/\/www.erroussafi.com\/wp-content\/uploads\/2020\/07\/hashvirustotal-768x498.png 768w, https:\/\/www.erroussafi.com\/wp-content\/uploads\/2020\/07\/hashvirustotal.png 1210w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Analyse hash de notepad.exe par virustotal<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Dans ce premier article, nous avons appris \u00e0 utiliser python et ses modules pour calculer le hash de fichier executable. Cette \u00e9tape primordiale nous permet de nous assurer d\u00e9j\u00e0 de l&#8217;integrit\u00e9 des fichiers que nous sommes en train d&#8217;analyser. Lorsqu&#8217;on analyse un fichier dont on dispose du MD5 Hash calcul\u00e9 par l&#8217;initateur du fichier, une comparaison des hash peut montrer une alt\u00e9ration du fichier et \u00eatre une premi\u00e8re alerte de modification.<\/p>\n\n\n\n<p>Dans nos prochains articles, nous allons nous attaquer \u00e0 l&#8217;analyse des ent\u00eate PE, ainsi qu&#8217;au moteur de rule YARA qui est fondamental dans la recherche d&#8217;indicateurs et dans la r\u00e9alisation de syst\u00e8mes IDS.<\/p>\n\n\n\n<p>Mehdi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article, nous allons nous exercer \u00e0 faire une &#8220;analyse statique&#8221; de Malware. Principalement, nous allons apprendre \u00e0 analyser un fichier afin d&#8217;extraire toutes les informations utiles qui peuvent \u00eatre v\u00e9rifiable sur des bases de donn\u00e9es de la communaut\u00e9 pour detecter les malwares connus. Nous allons utiliser pour cel\u00e0 python afin d&#8217;extraire les informations [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":7063,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Nouvel article pratique - Analyse statique de Malwares (Part 1 - Hash Calculation)","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-7059","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classe"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.erroussafi.com\/wp-content\/uploads\/2020\/07\/malware_analysis.jpeg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/posts\/7059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/comments?post=7059"}],"version-history":[{"count":0,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/posts\/7059\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/media\/7063"}],"wp:attachment":[{"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/media?parent=7059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/categories?post=7059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/tags?post=7059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}