Des chercheurs en sécurité ont découvert six failles de sécurité importante au sein d'une version récente du firmware d'un routeur Wi-Fi relativement populaire : le Netgear Nighthawk R6700.
Lorsque l'on cherche à améliorer la connexion Wi-Fi de son domicile, on s'oriente assez naturellement vers certains produits comme les systèmes Wi-Fi Mesh comme ceux de chez Netgear (via Orbi) ou Devolo, mais aussi les routeurs Wi-Fi de la gamme Nighthawk, car ils sont performants et leurs designs futuristes plaisent aux gamers.
Les chercheurs en sécurité de la société Tenable ont découvert les six vulnérabilités suivantes :
CVE-2021-20173: une faille qui permet d'exécuter une commande malveillante via la fonctionnalité de mise à jour de l'appareil, après être authentifié sur le routeur.
CVE-2021-20174: le protocole HTTP est utilisé par défaut pour les connexions à l'interface web d'administration, ce qui risque d'exposer les identifiants en clair.
CVE-2021-20175: l'interface SOAP sur le port 5000 utilise des connexions HTTP pour communiquer, ce qui risque d'exposer les identifiants en clair.
CVE-2021-23147: une faille qui permet une exécution de commande en tant que "root" sans être authentifié en utilisant une connexion via le port série de l'appareil. Cela nécessite un accès physique à l'appareil.
CVE-2021-45732: une faille qui permet de modifier des paramètres de sécurité normalement verrouillés.
CVE-2021-45077: tous les noms d'utilisateurs et les mots de passe sont stockés en clair dans le fichier de configuration du routeur.
Cela me surprend toujours, qu'en 2022, des fabricants comme Netgear puissent stocker des identifiants en clair dans un fichier de configuration... Pas vous ?
Pour rappel, le routeur Netgear Nighthawk R6700 v3 est toujours sous support, ce qui n'est plus le cas des deux premières générations qui sont en fin de vie.
Sur le site de Netgear, la dernière version du firmware est la 1.0.4.122 du 14 décembre 2021, et c'est précisé qu'elle corrige des failles de sécurité, mais ce n'est pas précisé lesquelles. Il se pourrait que tout ou partie de ces failles ne soient pas corrigés (toujours présentes dans la version 1.0.4.120).
Si vous utilisez ce routeur, je vous recommande vivement d'installer cette mise à jour de firmware et de vérifier dans les prochaines semaines s'il y a une nouvelle version qui sort.
Nous continuons notre suite d'articles sur le CTF du FIC 2021 proposé par l'école EPITA afin de découvrir certains outils et méthodes de forensic (investigation numérique). Dans cet article nous allons nous pencher sur l'analyse de fichiers PDF et exécutables contenant des objets ou du code malveillant.
II. Contexte : Panic on board - SteerOnSomewhere
Le contexte de l'incident sur lequel nous intervenons est le suivant : Un bateau de croisière de la compagnie maritime ArMor a subi une panne et se retrouve bloqué en pleine mer.
Nous savons à présent qu'à la suite d'un phishing, l'attaquant est parvenu à dérober les identifiants VPN d'un utilisateur puis à mener une attaque sur les automates du bateau afin de les arrêter. Le contexte de cette quatrième étape de l'analyse est le suivant :
L’analyse du logiciel d’IHM (auquel seul le technicien a accès) n’a rien révélé de probant. Sur le point d’abandonner, vous tombez sur quelques fichiers de documentation anodins… Ou pas ? Découvrez comment les ordres d’arrêter les machines ont été donnés.
Deux fichiers nous sont ici fournis :
s7-300_IHB_f.pdf
stopAutomatesProp.exe
Nous devons répondre aux questions suivantes pour compléter cette quatrième étape de l'analyse :
Le fichier PDF cache du contenu ;
La fonction de décodage utilisée pour désobfusquer la charge utile ;
La charge utile est... ;
Vous avez extrait le fichier embarqué. En quel langage le programme est-il écrit ;
Le temps en secondes que le script passe à dormir.
N'oublions pas de vérifier l'intégrité des éléments récupérés (le hash BLAKE2 est fourni avec les fichiers sur le site du challenge) :
Comme je l'ai indiqué dans l'article Forensic – PhishingBoat : analyse de fichiers Mbox et PDF, les fichiers PDF peuvent être utilisés de façon malveillante afin de transporter d'autres objets, parfois chiffrés ou encodés, et déclencher des actions à leur ouverture. Pour décortiquer ce fichier PDF, nous allons commencer par utiliser le script pdfid.py de Dider Stevens :
pdfid.py n'est pas un parser PDF, mais il analysera un PDF pour rechercher certains mots-clés permettant d'identifier les documents PDF contenant (par exemple) du JavaScript ou d'exécuter une action lorsqu'ils sont ouverts.
Ici, celui-ci nous indique que le fichier fait 245 pages et contient du code Javascript (/JS, /Javascript) ainsi que des éléments permettant l'exécution d'instructions à l'ouverture (/AA, /OpenAction, /Launch). Nous pouvons compléter notre analyse avec l'utilisation de l'outil pdfdetach, qui vient de la suite d'outil origami :
$ pdfdetach s7-300_IHB_f.pdf -list Syntax Warning: Illegal URI-type link Syntax Warning: Illegal URI-type link 1 embedded files 1: s7-300_IHB_f.pdf
Contrairement à pdfid.py, pdfdetach détecte un fichier embarqué dans le PDF, tentons d'en savoir plus avec pdf-parser et utilisons l'option --search, qui permet d'effectuer un filtre sur un mot précis :
Un PDF est composé de multiples objets de différents types qui sont numérotés de façon unique et référencés dans la XREF table (cross reference table). Ici, nous voyons que l'objet 3246 0 référence l'objet 3247 0 en tant que fichier embarqué, nous pouvons ici utiliser l'option --object pour afficher directement le contenu de cet objet :
Nous arrivons enfin à l'objet 3249 0 pour lequel nous devons ajouter les options --filter et --raw pour avoir une sortie brute de son contenu. Celui-ci étant un stream,pdf-parser n'affiche pas son contenu par défaut (un stream peut être très volumineux) :
Dans un fichier PDF, les streams sont des séquences d'octets qui peuvent être de longueur illimitée et peuvent être compressés ou encodés. En tant que tels, ils constituent le type d'objet utilisé pour stocker de gros blocs de données(blob) qui sont dans un autre format standardisé, (XML , image, police, etc.).
Et justement, nous voyons ici le début du contenu du blob dans ce stream et il commence par MZ, il s'agit du magic byte caractéristique des fichiers exécutables Windows.
Les magic bytes, ou signatures de fichier, sont simplement les premiers octets composant un fichier et indiquant son format, on peut les considérer comme un "en-tête" qui va ensuite indiquer au système quels programmes peuvent les ouvrir, puis aux programmes comment ils sont composés (un peu à l'image d'un paquet pour Wireshark et ses dissecteurs). Ainsi un fichier PNG commencera toujours par 89 50 4E 47 0D 0A 1A 0A, un fichier PDF par 25 50 44 46 2D et un fichier exécutable par 4D 5A, soit MZ en conversion ASCII.
C'est notamment sur ces éléments que se basent les outils de File Carving ou de récupération de fichiers supprimés qui permettent de trouver les fichiers contenus dans un autre fichier ou un espace disque donné (image disque, firmware, PDF, etc.). On peut notamment citer foremost, binwalk, bulk_extractor, etc. Voici une liste des magics bytes par format de fichier : List of file signatures
Nous pouvons donc affirmer ici que notre fichier PDF embarque un fichier exécutable Windows, ce qui est des plus suspect. Nous pouvons ici citer la T1204.002 User Execution: Malicious File du MITRE ATT&CK.
Nous pouvons également utiliser l'outil PeePDF pour avoir une synthèse des informations sur cet objet spécifique :
PPDF> info 3249 Offset: 3608903 Size: 7423903 MD5: 8057276523631af3456969a2372971f9 Object: stream Subtype: /application/pdf Stream MD5: c53391adcd8cb8b2ad4995c78c13aca7 Raw Stream MD5: acbe518d8f95f884467b4c42cea1598c Length: 7423727 Encoded: Yes Filters: /FlateDecode Filter Parameters: No Decoding errors: No References: []
Nous voyons ici une notion importante lors de l'analyse d'objet dans un PDF : Filters: /FlateDecode. Dans un PDF, les Filters sont le moyen utilisé pour encoder un objet. Le fait d'indiquer en clair ce Filter permet ensuite aux lecteurs PDF de les décoder facilement. Cela nous permet de répondre à la question suivante :
La fonction de décodage utilisée pour désobfusquer la charge utile : FlateDecode
La charge utile est... : PE Executable
Je note au passage qu'il existe une multitude d'outils pour analyser un PDF, certains très anciens (avant 2010) qui fonctionnent encore et d'autres plus récents. Lorsque l'on aborde ce domaine, il n'est pas évident de s'orienter sur un outil spécifique (aucun ne semble contenir à lui seul toutes les fonctions utiles) ou au contraire de jongler entre les différents outils (commandes, syntaxes et sorties différentes à chaque fois). PeePDF me parait cependant assez dynamique, l'analyse interactive apparait comme un plus, par exemple pour suivre les objets qui se référencent entre eux. Voici la synthèse des outils utilisés dans cet article :
L'ANSSI a également sorti un outil d'analyse de PDF qui ne semble plus maintenu aujourd'hui et que je n'ai pas du tout réussi à installer : Caradoc.
IV. Analyse basique d'un exécutable
Un binaire, ou exécutable, peut être étudié de différentes façons, souvent complémentaires :
l'analyse statique : elle consiste à récupérer certains éléments tels que les hashs (empreinte numérique et unique du fichier), l'analyse antivirus, l'analyse d'un dump mémoire, la détection des packers, etc. Ce fichier binaire peut ensuite faire l'objet d'un reverse engineering à l'aide d'un désassembleur pour convertir le code machine en code assembleur afin de le rendre "lisible" par l'homme.
l'analyse dynamique : elle consiste à analyser le comportement des binaires malveillants dans un environnement sandbox (bac à sable) afin qu'ils n'affectent pas les autres systèmes. Différentes "sondes", métriques et autres éléments de détection et de surveillance sont alors utilisés pour capturer et analyser le comportement du malware à son exécution (fichiers ouverts, connexion réseau, API systèmes utilisées, etc.)
Lors de la réalisation d'une analyse statique de base, nous n'exécutons pas directement le code du binaire malveillant analysé ni n'ouvrons de désassembleur pour tenter de disséquer ce binaire. La première étape est d'obtenir un aperçu rapide de la structure de l'exécutable et d'identifier les premiers éléments d'analyse. Commençons par un simple strings sur le binaire fourni dans le cadre du challenge :
La commande Linux strings est utilisée pour détecter et afficher les chaines de caractères présentes dans des fichiers. Elle se concentre principalement sur la détermination du contenu et l'extraction du texte des fichiers binaires (fichier non texte).
On retrouve ici plusieurs lignes contenant le mot python ou python38. Il s'agirait donc d'un exécutable contenant du Python. Ce qui est inhabituel, c'est que l'on ne produit habituellement pas de .exe en Python étant donné qu'il s'agit d'un langage interprété et non compilé. Il existe néanmoins une solution permettant de faire cela : Transformer un script Python en exécutable avec PyInstaller
$ python3.8 pyinstxtractor.py ../stopAutomatesProp.exe [+] Processing ../stopAutomatesProp.exe [+] Pyinstaller version: 2.1+ [+] Python version: 38 [+] Length of package: 7298295 bytes [+] Found 71 files in CArchive [+] Beginning extraction...please standby [+] Possible entry point: pyiboot01_bootstrap.pyc [+] Possible entry point: pyi_rth_multiprocessing.pyc [+] Possible entry point: pyi_rth_pkgres.pyc [+] Possible entry point: stopAutomatesProp.pyc [+] Found 254 files in PYZ archive [+] Successfully extracted pyinstaller archive: ../stopAutomatesProp.exe
You can now use a python decompiler on the pyc files within the extracted directory
PyInstaller Extractor est un script Python permettant d'extraire le contenu d'un fichier exécutable Windows généré par PyInstaller.Le contenu du fichier (généralement des fichiers .pyc) est présent dans l'exécutable est également extrait. Et oui, lorsque PyInstaller génère l'exécutable à partir du code python, celui-ci positionne le bytecode dans l'exécutable, ce qui facilite sa récupération. Vous trouverez plus d'informations sur le fonctionnement de PyInstaller ici : What PyInstaller Does and How It Does It
Nous nous retrouvons donc avec un ensemble de fichiers .dll et .pyc (entre autres) :
Les fichiers .pyc sont des fichiers Python compilés. Mais si Python est un langage interprété, pourquoi existe-t-il des formats de fichiers compilés ?
Les fichiers .pyc sont une version pré-compilée du code d'un fichier .py (script en texte clair). Il s'y trouve un code en format bytecode, ce qui permet de gagner du temps lors de l'exécution, car le système n'aura pas à faire lui-même cette conversion. Lorsque l'on dispose du fichier .pyc, le code en clair (fichier .py) n'est plus nécessaire à l'exécution.
Le format de fichier .pyc est donc du bytecode, il s'agit d'un format de code intermédiaire entre les instructions-machine et le code source, qui n'est pas directement exécutable. Il ne s'agit pas d'une mesure d'obfuscation et l'opération inverse (bytecode vers code source) peut elle aussi être réalisée, à l'aide de uncompyle6 notamment :
Nous récupérons ici le code source en clair de notre exécutable malveillant, ce qui est bien plus simple à étudier qu'une analyse en assembleur :). On remarque notamment une fonction stop_plc et une fonction scan_port, ce qui correspond aux éléments observés lors des précédentes étapes de notre analyse. En fin de script, on remarque la fonction suivante :
Notre script fait 2 pauses à l'aide de l'instruction time.sleep. Il s'agit d'un comportement visant à espacer les scans de port et les actions d’arrêt du PLC dans le temps, notamment afin de tromper des systèmes de détection (IPS, sondes de détection, antivirus) qui pourraient baser leur analyse sur le nombre d’occurrences d'un évènement dans le temps.
Cela nous permet de répondre aux dernières questions de notre analyse :
Vous avez extrait le fichier embarqué. En quel langage le programme est-il écrit : Python
Le temps en secondes que le script passe à dormir : 37231
Lorsqu'un antivirus exécute un programme en sandbox (bac à sable) avant de le considérer comme sûr, celui-ci ne peut se permettre de faire durer son analyse plusieurs minutes (ce serait désagréable pour l'utilisateur), il est donc courant qu'un programme malveillant profite de ce comportement afin de n'exécuter son action malveillante qu'après un temps d'attente. L'antivirus n'ayant pas la patience d'attendre ce temps va souvent arrêter son analyse au bout d'un certain temps et ne jamais exécuter le code malveillant, qui ne sera alors pas détecté. Cette mesure est décrite dans la T1497.003 Virtualization/Sandbox Evasion: Time Based Evasion du MITRE ATT&CK.
Nous avons vu dans cet article qu'un PDF peut cacher bien des choses et notamment un exécutable Windows. Différents outils ont été utilisés ici, mais nous sommes loin de l'exhaustivité. Nous sommes tout de même parvenus à retrouver, via le code source, l'exécutable responsable des activités identifiées au niveau des traces réseau dans les articles précédents. Cela nous donne donc un bon aperçu de comment quelques lignes de code peuvent avoir un impact très important sur un système d'information.
Le prochain article, et dernier de cette série sur le scénario de l'attaque du SI d'un navire, portera sur l'analyse de journaux d'évènements, de fichiers supprimés, d'une image OVA et d'une image disque :).
Microsoft a publié un correctif en urgence pour les serveurs de messagerie Microsoft Exchange afin de corriger ce que l'on pourrait appeler le bug de l'an 2022. Conséquence directe de ce bug : les e-mails ne sont plus délivrés et restent dans la file d'attente.
Bienvenue en 2022 ! Alors que l'année 2021 a été compliquée pour les administrateurs de serveurs Exchange, il faut dire que l'année 2022 commence de la pire des manières. Depuis minuit, le 1er janvier 2022, les serveurs Exchange (Exchange Server 2016 et Exchange Server 2019) ne parviennent plus à envoyer les e-mails et les messages suivants sont visibles dans le journal "Application" de l'observateur d'événements du serveur :
Source: FIPFS
Logged: 1/1/2022 1:03:42 AM
Event ID: 5300
Level: Error
Computer: server1.contoso.com
Description: The FIP-FS "Microsoft" Scan Engine failed to load. PID: 23092, Error Code: 0x80004005. Error Description: Can't convert "2201010001" to long.
Source: FIPFS
Logged: 1/1/2022 11:47:16 AM
Event ID: 1106
Level: Error
Computer: server1.contoso.com
Description: The FIP-FS Scan Process failed initialization. Error: 0x80004005. Error Details: Unspecified error.
Au sein des messages d'erreur ci-dessus, on constate la présence du code d'erreur 0x80004005.
Comment expliquer cette erreur ? Et bien, il s'avère qu'Exchange vérifie la version du moteur d'analyse antivirus FIP-FS et tente de stocker la date dans une variable int32 signée. Le problème, c'est que cette variable a une limite et sa valeur ne peut pas dépasser "2 147 483 647" sauf que la valeur correspondante au 1er janvier 2022 à minuit est "2 201 010 001".
Lorsqu'une analyse est déclenchée sur un message électronique, le moteur d'analyse va planter à cause de cette variable qui contient une valeur incorrecte. Étant donné que l'analyse n'est pas effectuée, l'e-mail reste dans la file d'attente.
Compte tenu de l'urgence de la situation, Microsoft a publié un correctif temporaire sous la forme d'un script PowerShell nommé "Reset-ScanEngineVersion.ps1". L'objectif de ce script est de réaliser les actions suivantes :
Arrêter les services Microsoft Filtering Management et Microsoft Exchange Transport
Supprimer les fichiers du moteur d'analyse antivirus
Télécharger une nouvelle version du moteur d'analyse antivirus sur le serveur (version 2112330001)
Démarrer les services arrêtés précédemment
Ce script doit être exécuté sur chaque serveur Exchange on-premise et vous pouvez le télécharger à cette adresse : https://aka.ms/ResetScanEngineVersion
Pour en savoir plus sur l'utilisation de ce script ou effectuer l'opération manuellement, je vous recommande de lire cet article publié par Microsoft : Exchange - Erreur FIP-FS.
Après avoir appliqué ce correctif, les e-mails seront expédiés et la file d'attente sera donc vidée au fur et à mesure. Bien entendu, cela peut prendre du temps en fonction de la quantité de messages en attente.
Je vous souhaite une excellente année 2022 au nom de toute l'équipe IT-Connect ! Comme je l'avais fait l'année dernière, je souhaitais partager quelques stats avec vous au sujet du site, de la chaîne YouTube, mais aussi évoquer mes envies pour l'avenir.
Statistiques de l'année 2021
Comme on dit "Les hommes mentent, mais pas les chiffres", alors j'ai fait un tour au sein de l'onglet statistique du site pour faire les comptes et voir l'évolution par rapport à l'année 2020. La bonne nouvelle, c'est que vous êtes de plus en plus nombreux à visiter le site et cela fait vraiment très plaisir ! C'est une source d'encouragement pour la suite également !
L'augmentation du trafic que j'évoque se traduit par les deux chiffres clés suivants :
- Nombre de visites en 2021 : 3 933 188
- Nombre de pages vues en 2021 : 5 347 204
Par rapport à l'année 2020, cela représente une augmentation des visites de 22,4% et une augmentation du nombre de pages vues de 23,6%. MERCI !
Quant à la chaîne YouTube, le nombre total de vues depuis la création de la chaîne a dépassé 1 000 000 de vues (au total, cumul des vues de toutes les vidéos), ce qui est clairement anecdotique, mais cela fait toujours plaisir ! C'est en grande partie grâce à l'année 2021 puisqu'elle représente à elle seule plus de 650 000 vues sur les différentes vidéos, et la plus populaire sur l'année est la vidéo "Les adresses IP pour les débutants" (mais je pense qu'elle sera détrônée en 2022 ! ).
Vous êtes désormais presque 16 000 abonnés à la chaîne YouTube, c'est cool !
Quelques idées pour 2022
Ça fait plusieurs années que j'évoque la mise en place d'une newsletter (du style une fois par semaine, c'est suffisant), j'espère cette fois-ci je vais réussir à me dégager du temps pour mettre en place ce projet, mais au-delà de l'aspect technique, il faut que je me renseigne sur la partie juridique (notamment le RGPD).
À côté de ça, je vais continuer à publier du contenu au format vidéo sur la chaîne YouTube et j'envisage de créer des sortes de Webinars pour que ce soit plus interactif, avec vous, les membres de la communauté IT-Connect. J'aimerais aussi agrandir le catalogue de cours en ligne (et trouver le temps d'actualiser les cours existants) en m'appuyant sur des contributeurs externes. Enfin bon, les idées ce n'est pas ça qui manque, mais c'est plus le temps le problème (mais ça je ne vous apprends rien).
Ma situation perso
Depuis quelques mois, j'ai quitté l'emploi que j'avais en CDI pour me lancer en tant qu'indépendant dans l'objectif de pouvoir consacrer plus de temps à IT-Connect (et ainsi avoir plus de temps de libre à côté !). Cela explique pourquoi il y a plus d'articles depuis quelque temps, notamment au niveau de l'actualité (et je sens que cela vous plaît !).
En complément et dans le but de trouver un équilibre, j'effectue des prestations administration système et réseau, sécurité, auprès d'entreprises. D'ailleurs, si vous souhaitez me solliciter sur un projet, n'hésitez pas à me contacter !
Pour finir, un énorme MERCI à tous pour votre soutien ! Si vous avez des idées pour le site, que ce soit au niveau des fonctionnalités ou de sujets à traiter dans les articles, n'hésitez pas à laisser un commentaire ! Les discussions sont ouvertes !
Alors que certains utilisateurs de Windows 11 voient leur écran HDR devenir jaune, les utilisateurs de LastPass quant à eux rient jaune... En effet, de nombreux utilisateurs affirment que leur mot de passe maître a été compromis après avoir reçu une alerte e-mail pour indiquer qu'une connexion a été effectuée depuis un emplacement inconnu.
Pour rappel, LastPass est une gestionnaire de mots de passe totalement en ligne, accessible en version gratuite, mais aussi en version payante.
Ce même e-mail affirme que la tentative de connexion a été bloquée par LastPass car elle provient d'un emplacement non familier (ou d'un périphérique non reconnu), ou en tout cas anormal vis-à-vis du lieu de connexion habituel de l'utilisateur. Même si la connexion est bloquée, cela signifie que le mot de passe maître permettant d'accéder au coffre-fort de mots de passe est bien compromis. Les utilisateurs concernés et qui ont reçu cet e-mail n'ont pas hésité à partager l'information sur Internet, notamment sur Twitter et Reddit.
De son côté LastPass a analysé la situation et d'après eux c'est un bot qui est à l'origine de ces connexions malveillantes. Cela voudrait dire qu'il n'y a pas eu de piratage, compromission ou fuite de données directement chez LastPass. En fait, certains utilisateurs seraient victimes de ce que l'on appelle le credential stuffing.
Pour être précis, cela signifie que les identifiants (nom d'utilisateur + mot de passe) utilisés pour se connecter à LastPass sont issus d'autres fuites de données liées à des attaques précédentes sur des services tiers. Si un utilisateur a défini le même nom d'utilisateur et le même mot de passe sur LastPass que sur un autre service victime d'une fuite de données, et bien cela facilite la découverte du compte LastPass.
Ce qui est étonnant, c'est que certains utilisateurs touchés assurent que leur mot de passe LastPass n'est pas utilisé ailleurs. Ce qui pose question... Mais pour se justifier, LastPass affirme qu'une partie de ces alertes ont étaient envoyées par erreur, tandis que d'autres seraient liées à des attaques de type credential stuffing. S'il s'avère bel et bien d'un bug, il faut avouer que cela sème le doute !
Remarque : cet article est l'occasion de préciser qu'il est indispensable d'avoir un mot de passe maître robuste pour son coffre-fort de mots de passe, et que ce mot de passe doit être unique (dans le sens où vous ne l'utilisez pas ailleurs).
Compte tenu de la situation, il est recommandé aux utilisateurs de LastPass de modifier leur mot de passe maître par précaution.