Introduction
Les analystes de menaces qui enquêtent sur des infrastructures malveillantes sont susceptibles de rencontrer des "répertoires ouverts" au cours de leurs investigations. Ces répertoires, communément appelés "opendirs", sont des serveurs ouvertement accessibles où les acteurs de la menace hébergent des fichiers malveillants liés à leurs opérations.
Un annuaire ouvert est un concept simple que beaucoup connaissent. Malgré cela, il existe peu de documentation publique sur leur découverte et sur la manière d'identifier et de suivre les nouvelles infrastructures d'annuaires ouverts.
Ce blog couvre les bases d'un répertoire ouvert, comment vous pouvez les découvrir pendant la recherche et comment poursuivre vos investigations dans l'infrastructure du répertoire ouvert.
Qu'est-ce qu'un annuaire ouvert ?
Un répertoire ouvert est simplement un serveur où un répertoire a été laissé "ouvert" et est accessible au public en naviguant vers l'IP ou le domaine du site.
Du point de vue des acteurs de la menace, ce répertoire permet aux fichiers malveillants d'être facilement accessibles et livrés au moment et à l'endroit où ils sont nécessaires. Il s'agit souvent de fichiers de seconde phase pour les logiciels malveillants, ou d'outils utilisés dans des opérations pratiques.
Il existe également des cas d'utilisation légitime, lorsqu'un service légitime doit rendre un fichier publiquement et facilement accessible, mais pour aujourd'hui, nous nous concentrerons sur les cas d'utilisation malveillante et sur la manière de les distinguer des exemples authentiques.
L'exemple ci-dessous (partagé par RussianPanda9XX sur X/Twitter) montre qu'un répertoire ouvert héberge des fichiers malveillants. Cet exemple montre un répertoire ouvert basé sur Apache lorsqu'il est affiché directement dans un navigateur.
Un autre exemple est un répertoire ouvert utilisé par ValleyRat et signalé par Zscaler.
Le répertoire ouvert utilise le logiciel HFS (HTTP File Server).
L'apparence diffère d'un logiciel à l'autre, mais la fonctionnalité reste la même. Voici un autre exemple de légères différences entre Apache et Python. Ces différences sont traitées plus en détail dans le rapport "Dorking The Internet" de Censys.
Comment trouver un annuaire ouvert ?
Les répertoires ouverts peuvent être découverts dans l'édition communautaire de Censys en recherchant le label open-dir.
Censys analyse automatiquement l'internet à la recherche de répertoires ouverts et applique le label " open-dir ", quel que soit le logiciel utilisé. Cela signifie qu'Apache, Python, HFS et d'autres seront tous inclus et n'auront pas besoin d'être recherchés individuellement.
Ce label inclura tous les annuaires ouverts, y compris les résultats malveillants et légitimes. L'étiquette peut à elle seule renvoyer des centaines de milliers de résultats.
Nous le voyons ci-dessous avec une recherche simple pour labels:open-dir, qui renvoie 450 153 répertoires ouverts actuels.
Comme indiqué, la recherche de labels:open-dir renverra tous les résultats, qu'ils soient malveillants ou légitimes.
Dans la suite de ce blog, nous verrons comment combiner cette requête avec des paramètres supplémentaires afin d'identifier uniquement les résultats malveillants.
Section 1 : Noms de fichiers statiques pour l'Open Directory Hunting
La méthode la plus simple pour identifier les répertoires malveillants consiste à exploiter les noms de fichiers des incidents précédents.
Considérons 81.71.147[.]158, qui a été partagé par @morimolymoly2 sur Twitter/X. Cette IP contient un répertoire ouvert avec un grand nombre de fichiers suspects.
Si nous recherchons l'IP sur Censys, nous arriverons à la page d'accueil où les informations suivantes sont disponibles sur le port 80.
Le répertoire ouvert sur 81.71.147[.]158 contient plusieurs fichiers qui sont suffisamment uniques pour être utilisés comme points pivots. Il s'agit de valeurs suffisamment uniques pour être utilisées dans une requête.
Deux schémas principaux se dégagent.
- A.dll, a.exe, a.hta, a.jpg - Fichiers suspects dont les noms sont courts et ne comportent qu'un seul caractère.
- Yaml-payload.jar - Fichier suspect contenant "payload" dans le nom du fichier. Probablement lié à un exploit de désérialisation Java.
Nous pouvons combiner ces noms de fichiers avec la requête labels:open-dir pour identifier les infrastructures de répertoires ouverts hébergeant des fichiers portant les mêmes noms.
Pivoter sur les noms de fichiers statiques
Les noms de fichiers tels que a.exe peuvent être combinés avec le paramètre labels:open-dir pour identifier les répertoires ouverts hébergeant des fichiers portant le même nom (mais pas nécessairement le même contenu de fichier).
Censys stocke le contenu des répertoires ouverts dans le champ services.http.response.body, c'est donc là que nous pouvons placer un nom de fichier en combinaison avec labels:open-dir
Nous pouvons donc rechercher les répertoires ouverts contenant a.exe en recherchant labels:open-dir et services.http.response.body:a.exe. Cette recherche simple renvoie 9 serveurs similaires.
Comme indiqué ci-dessus, la recherche révèle 9 répertoires ouverts contenant a.exe.
Le premier résultat de la recherche est 159.223.130[.]216. La consultation de la page de l'hôte associé montre un répertoire ouvert hébergeant a.exe, ainsi que d'autres fichiers avec des schémas de dénomination similaires à un seul caractère. En plus de a.exe, nous avons maintenant b.exe, c.exe et curl.exe.
Curl est un outil "légitime" utilisé pour télécharger des fichiers. Il est donc peu probable que curl.exe soit un logiciel malveillant, mais plutôt un outil de soutien utilisé pour "installer" curl lors d'opérations où l'outil curl n'était pas présent.
Pour confirmer la nature de ces fichiers, nous pouvons les télécharger (à l'aide d'un bac à sable ou d'une machine d'analyse séparée) en naviguant directement sur le site, puis en effectuant une analyse manuelle ou en les soumettant à un bac à sable. Cette méthode n'est pas toujours recommandée pour des raisons d'opsec, mais il s'agit là d'un autre sujet de discussion.
In cases where the infrastructure is not sensitive, the files can be scanned by inputting the URL directly into VirusTotal. In this case, we can input <IP>/b.exe and see that it has 34 detections and contains a Sliver C2 Implant.
Notez que ce type d'analyse avertit souvent l'acteur que ses serveurs font l'objet d'une enquête. Vous devez en tenir compte lorsque vous enquêtez sur une infrastructure.
Le fichier b.exe a été détecté 34 fois, mais le répertoire ouvert qui l'héberge en a détecté 0.
Cela signifie que nous avons probablement trouvé une "nouvelle" infrastructure, en utilisant un simple nom de fichier pour notre analyse.
Nous pouvons continuer à rechercher d'autres occurrences de a.exe dans les résultats de la recherche.
Un autre résultat de notre recherche préalable est 121.43.135[.]166, qui contient a.exe et de nombreux autres fichiers suspects.
Les mêmes schémas de dénomination des fichiers peuvent être observés sur d'autres serveurs renvoyés par la recherche, qui contiennent tous a.exe en combinaison avec d'autres fichiers suspects.
Pivoter sur le nom d'un fichier d'exploitation
L'adresse IP initiale contenait un autre fichier suspect nommé yaml-payload.jar. Une recherche sur Google suggère que ce fichier est lié à un exploit de désérialisation Yaml.
En répétant le processus précédent, nous pouvons identifier des serveurs similaires en recherchant labels:open-dir et services.http.response.body : "yaml-payload.jar"
La recherche simple renvoie 8 répertoires ouverts hébergeant des fichiers portant le même nom.
L'un des résultats contient yaml-payload.jar et une référence à artifact_x86.exe, qui est un nom de fichier courant pour Cobalt Strike.
Cela signifie que notre simple pivot sur yaml-payload.jar a probablement conduit au serveur d'un acteur utilisant Cobalt Strike.
Le nom artifact_x86.exe est suffisamment unique pour être utilisé comme un autre point pivot. Un analyste pourrait effectuer un pivot supplémentaire sur le nom de l'artefact_x86.ex e.
Il suffit de répéter les recherches précédentes en introduisant des noms de fichiers différents dans le champ services.http.response.body .
Résumé - Noms de fichiers statiques pour la chasse aux répertoires ouverts
Les noms de fichiers statiques constituent un moyen simple et très efficace de découvrir de nouveaux répertoires ouverts malveillants.
En utilisant les rapports publics (médias sociaux, Intel Repos, incidents internes), vous pouvez facilement identifier de simples noms de fichiers qui peuvent mener à une nouvelle infrastructure.
Pour ce faire, il suffit de rechercher labels:open-dir et d'ajouter le nom de votre fichier suspect dans le champ services.http.response.body.
Section 2 : Systèmes autonomes et fournisseurs d'hébergement
La recherche de répertoires ouverts peut être fortement facilitée en combinant les fournisseurs d'hébergement avec la requête labels:open-dir.
Cela peut être particulièrement efficace lorsqu'un acteur utilise un fournisseur d'hébergement unique ou peu commun.
Considérons l'IP 77.105.160.30 (initialement partagée par @karol_paciorek). Ce serveur a un répertoire ouvert et est hébergé sur EVILEMPIRE avec un numéro de système autonome de 216309.
Comme il s'agit d'un fournisseur peu courant, nous pouvons découvrir d'autres répertoires ouverts en combinant le numéro ASN associé avec labels:open-dir.
L'utilisation d'EVILEMPIRE est suffisamment unique pour qu'il n'y ait que 8 annuaires ouverts qui y soient hébergés.
L'un de ces résultats est 77.105.132[.]27qui correspond à nos critères de recherche et qui a déjà été marqué comme C2 connu.
En accédant à la page d'accueil et en examinant le contenu des répertoires, il apparaît qu'elle héberge les logiciels malveillants Vidar et Lumma.
Résumé - Systèmes autonomes et fournisseurs d'hébergement
Combiner des recherches dans des annuaires ouverts avec des fournisseurs d'hébergement inhabituels peut rapidement conduire à de nouveaux résultats.
Cette technique fonctionne mieux lorsque le fournisseur est peu courant ou bien connu pour héberger des acteurs malveillants. Soyez donc prudent lorsque vous appliquez cette technique à un grand fournisseur tel qu'Amazon ou CloudFlare. De tels fournisseurs peuvent être associés à des dizaines de milliers de résultats, ce qui peut être difficile à analyser et extrêmement propice aux faux positifs en l'absence de filtrage supplémentaire.
Considérez que CloudFlare était lié à 38 614 annuaires ouverts rien qu'en 2023. Amazon étant lié à un nombre considérable de 21 805. D'autres statistiques sont présentées en détail dans "Dorking The Internet".
Section 3 : Modèles de noms de fichiers et expressions régulières
Dans la première section, nous avons utilisé des noms de fichiers statiques pour pivoter vers des répertoires ouverts supplémentaires. Cependant, il existe une bien meilleure façon de procéder avec l'ajout d'expressions régulières.
Prenons l'exemple de la recherche de "fichiers nommés a.exe"par rapport à la recherche de "TOUT caractère unique .exe". La seconde option est plus générique (dans le bon sens du terme) et permet une recherche plus efficace.
Nous pouvons abstraire le nom de fichier a.exe à l'aide d'expressions régulières pour rechercher tout exécutable à un seul caractère. Pour une recherche plus efficace, nous pouvons même étendre cette recherche à tout nom de fichier d'un seul caractère portant les extensions exe, hta ou rtf.
Prenons les noms de fichiers suivants, issus de l'une de nos recherches précédentes.
Le répertoire ouvert contient 9 fichiers dont l'extension est précédée d'un seul caractère(a.dll, 1.rtf, a.hta, etc.).
Plutôt que de rechercher ces noms individuellement, créons une expression régulière qui recherche les noms de fichiers d'un seul caractère portant l'une des extensions exe, rtf ou hta.
Nous pouvons créer un prototype simple à l'aide de CyberChef, puis l'ajouter au champ services.http.response.body.
Notez que nous devons maintenant utiliser le contenu HTML brut et non le rendu HTML des captures d'écran précédentes, nous ajouterons donc .*\" de part et d'autre de nos expressions régulières. Cela tient compte de la syntaxe HTML (illustrée ci-dessous) et spécifie que nous ne voulons que les fichiers nommés a.exe, et non ceux qui contiennent a.exe.
Ci-dessous, nous pouvons voir les guillemets " avant et après les noms de fichiers, dont nous devons tenir compte dans notre expression régulière.
En prenant en compte le code HTML brut, nous pouvons rechercher des noms de fichiers à un seul caractère avec la requête suivante.
labels:open-dir et services.http.response.body:/.*\"\w\.(exe|hta|rtf)\".*/
Pour ceux qui ne sont pas familiers avec les expressions régulières, voici une visualisation réalisée avec l'aimable autorisation de regexper.com
L'exécution de cette nouvelle recherche renvoie 57 résultats pour les répertoires ouverts dont les noms de fichiers ne comportent qu'un seul caractère.
L'un de ces résultats est 20.98.129[.]89qui contient un seul caractère e.hta (correspondant à notre expression régulière) ainsi qu'un fichier charge utile.exe.
Un autre résultat de recherche est 1.92.96[.]35, où notre expression régulière correspond à des noms de fichiers à un seul caractère comme f.exe, m.exe, m.hta, p.hta.
En plus des noms correspondants, nous avons maintenant un répertoire ouvert référençant cs4.9, qui est probablement une référence à Cobalt Strike Version 4.9. La chaîne cs4.9 pourrait être utilisée pour des pivots supplémentaires.
Un autre résultat de recherche est 38.206.173[.]58, qui semble héberger un ransomware en raison de la présence de unlocker.exe et READ_TO_DECRYPT.html.
Il y a ici de nombreuses possibilités de dossiers qui pourraient être utilisés pour pivoter vers des serveurs supplémentaires.
Résumé - Modèles de noms de fichiers et expressions régulières
Les motifs de noms de fichiers sous forme d'expressions régulières peuvent être beaucoup plus efficaces que la recherche statique de noms. Si vous remarquez que plusieurs noms de fichiers ont des valeurs différentes mais "similaires", essayez d'utiliser une expression régulière pour les regrouper.
Les requêtes avancées utilisant des expressions régulières conduisent souvent à des serveurs malveillants supplémentaires.
Section 4 : Combinaison d'extensions de fichiers
Les extensions de fichiers constituent un autre moyen simple et efficace d'identifier les répertoires ouverts suspects.
Par exemple, la combinaison d'un fichier .exe et d'un fichier .hta dans le même répertoire ouvert est rare et peu susceptible de se produire dans un répertoire légitime. Nous pouvons donc utiliser cette idée pour identifier les serveurs malveillants. Le même concept peut être appliqué à un fichier .hta et .ps1 partageant le même répertoire.
Prenons l'un de nos résultats précédents, qui contient un mélange de fichiers .hta, .png, .exe, .msi et .txt. Nous pouvons utiliser cette combinaison (ou un sous-ensemble) pour identifier des infrastructures supplémentaires.
Nous pouvons élaborer une requête qui recherche tous les répertoires ouverts contenant à la fois une extension .hta et .exe.
labels:open-dir et same_service(services.http.response.body:*.hta* et services.http.response.body:*.exe*) et non services.http.response.body:*htaccess*
Quelques remarques rapides sur cette requête :
- Same_service - Ce paramètre indique à la recherche de n'inclure que les résultats pour lesquels les fichiers ont été observés sur le même port. Nous ne voulons pas d'un serveur avec.hta sur le port 443 et .exe séparément sur le port 80.
- Pas .htaccess - Il s'agit d'un fichier légitime qui correspond à notre recherche de caractères génériques pour .hta, nous voulons l'exclure de nos résultats sans avoir recours à des expressions régulières.
L'exécution de cette requête renvoie 9 résultats, dont l'un est un répertoire ouvert sur 20.163.176[.]155.
Ce répertoire correspond à notre recherche d'un fichier .hta et d'un fichier.exe sur le même service.
Ce répertoire ouvert sur 20.163.176[.]155 contient plusieurs fichiers "update" qui sont marqués comme téléchargeurs par VirusTotal. Nous avons donc rencontré un autre serveur contenant des fichiers malveillants.
Le répertoire ouvert contient également un nouveau modèle de fichiers ps1 et exe . Nous pouvons donc adapter notre requête pour rechercher ces fichiers et identifier d'autres résultats suspects.
Cette requête recherche les répertoires ouverts contenant à la fois un script powershell et un fichier exécutable.
labels:open-dir et same_service(services.http.response.body:*.ps1* et services.http.response.body:*.exe*)
La recherche renvoie 84 résultats pour des répertoires ouverts contenant des scripts et des exécutables powershell.
L'un de ces résultats est 96.255.173[.]42, qui contient à la fois .exe et ps1, ainsi qu'une collection d'autres fichiers suspects probablement liés à la boîte à outils PowerSploit.
Bonus Pivot sur les modèles de noms de fichiers
Le répertoire indiqué précédemment contient plusieurs fichiers dont le nom contient "power", suivi d'une extension ps1 ou py.
En utilisant des expressions régulières, nous pouvons transformer cela en une requête générique pour tout répertoire ouvert contenant.py ou ps1 et un nom de fichier commençant par power.
Nous pouvons d'abord prototyper une expression régulière à l'aide de CyberChef.
Grâce à l'expression régulière, nous pouvons rechercher .ps1 ou .py les fichiers dont le nom contient power.
La recherche renvoie 7 résultats, dont l'un est 95.111.214[.]111.
Nous pouvons voir que ce répertoire contient encore plus de fichiers liés aux boîtes à outils Powershell offensives.
Un autre résultat est 116.114.20[.]180, qui contient powercat.ps1, parmi d'autres noms de fichiers suspects.
Le fichier Powercat est probablement une référence à l'implémentation Powershell de Netcat.
Résumé : combinaison d'extensions de fichiers
Les extensions de fichiers peuvent être aussi utiles et simples que les noms de fichiers lors de la recherche de répertoires ouverts.
Si une enquête révèle un répertoire ouvert avec une combinaison inhabituelle de types de fichiers, essayez de l'utiliser dans votre requête. Vous seriez surpris de constater à quel point cette opération est simple, mais combien elle peut souvent conduire à de nouveaux résultats malveillants.
Conclusion
Nous avons maintenant montré 4 techniques utiles pour identifier et chasser les annuaires ouverts malveillants. Ces techniques sont extrêmement efficaces pour trouver et chasser les infrastructures d'annuaires ouverts utilisées par les acteurs de la menace.
Bien qu'il ne s'agisse pas d'une liste exhaustive, ces techniques, prises isolément ou combinées entre elles, constituent de formidables méthodes à intégrer dans votre boîte à outils d'investigation.
À l'exception des expressions régulières, toutes ces techniques peuvent être testées dans l'édition communautaire de Censys.
Et pour ceux qui aiment les statistiques et les études approfondies, consultez le rapport Dorking The Internet de Censys. Cet énorme rapport de 31 pages examine toutes les subtilités de l'exposition aux répertoires ouverts, y compris comment et où ils sont trouvés dans des scénarios à la fois malveillants et légitimes.
Requêtes liées au bonus
Pour les utilisateurs communautaires
ANY open directory(Lien)
labels:open-dir
Ouvrir les répertoires contenant des fichiers a.exe(Lien)
labels:open-dir et services.http.response.body:a.exe
Ouvrir les répertoires contenant "Payload.exe"
labels:open-dir et services.http.response.body:payload.exe
Annuaires ouverts référençant CS4.9(Lien)
labels:open-dir et services.http.response.body:cs4.9
Pour les utilisateurs ayant accès aux expressions régulières
Ouvrir les répertoires contenant des fichiers "Power" avec l'extension ps1 ou py
labels:open-dir et services.http.response.body:/.*power[a-z]+\.(ps1|py).*/
Ouvrir des répertoires contenant des fichiers RTF, HTA ou PS1 à caractère unique
labels:open-dir et services.http.response.body:/.*\W\w\.(hta|rtf|ps1)\W.*/
Ouvrir les répertoires référençant n'importe quelle version de Cobalt Strike au format csX.X(Lien)
labels:open-dir et services.http.response.body:/.*\W(cs|cobalt)[34]\d(\.exe) ?.*/
Ouvrir des répertoires avec des noms numériques courts pour les fichiers PNG
labels:open-dir and services.http.response.body:/.*\”[0-9]{1,5}\.png\W.*/
Visitez Embee Research
Aller sur Censys Recherche