PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Sécurité des webapps : Le cas des fichiers de Backup

vendredi 27 mars 2020 à 09:00

I. Présentation

La gestion d'un serveur web ou d'un site web nécessite couramment des opérations de modification et d'amélioration du code, parfois directement sur le serveur de production, ces manipulations peuvent toutefois faire naître des failles de sécurité importantes dont il est important d'être informé.

Nous allons ici étudier le cas des fichiers de sauvegarde et de leur présence dans les arborescences web. Nous verrons comment ceux-ci peuvent se créer, parfois de façon automatique et quels problèmes de sécurité ils posent.

II. Extension .swp .bak .old... tout sauf du PHP

Dans le domaine des applications web, on peut couramment retrouver deux types de fichiers de sauvegarde :

Il faut tout d'abord savoir comment ces fichiers se retrouvent dans une arborescence web, et comment ils deviennent consultables depuis un simple navigateur web.

A. Les fichiers de sauvegarde générés automatiquement

Pour les fichier créés automatiquement, ils apparaissent notamment lorsque l'on édite un fichier. C'est le cas de certains éditeurs comme "vi" ou "vim" qui  en créent dans "swap file" dès qu'un fichier est édité et que ces modifications ne sont pas sauvegardées.
Pour exemple, dans mon répertoire web /var/www/html, je possède un fichier "index.php". Son code source n'est donc pas visible par le public consultant mon site web. Afin d'améliorer ou de modifier mon index.php, je l'édite avec vim et commence à écrire à l'intérieur, dès lors, un fichier .index.php.swp va se créer dans mon arborescence de fichier :

drwxr-xr-x 2 www-data www-data 4096 juin 13 14:46 .
drwxr-xr-x 3 root root 4096 juin 10 09:50 ..
-rw-r--r-- 1 www-data www-data 75 juin 13 12:34 .htaccess
-rw-r--r-- 1 www-data www-data 11104 juin 10 09:50 index.html
-rw-r--r-- 1 www-data www-data 46 juin 13 14:46 index.php
-rw-r--r-- 1 root root 12288 juin 13 14:47 .index.php.swp

Ici, j'édite mon fichier en tant que root, vous pouvez néanmoins voir que tout le monde pourra quand même lire mon fichier "-rw-r--r--". Si j'accède à ce fichier via un navigateur web :

En effet, étant donné que le fichier que je demande à mon serveur web ne comporte pas l'extension d'un fichier exécutable par le serveur tel que .php, il va le traiter comme un fichier .txt, une image ou un autre document et me proposer de le télécharger, une fois téléchargé, voici son contenu :

Ici, et pour détailler un peu ce qui est affiché, il s'agit de tous les caractères et lignes de code que j'ai ajouté dans mon fichier index.php depuis que je l'ai ouvert avec vim.

Techniquement, les fichiers .SWP ou "vi Swap File" sont des fichiers créés par vi (ou ses variantes, vim, gvim,etc.), ils stockent une version temporaire du fichier édité. Cela permet par exemple à un autre programme d'ouvrir le même fichier sans entrer en conflit avec vim. Dès qu'un fichier est édité par vim, la copie en .swp de ce fichier est créée dans le répertoire courant et avec les droits de l'utilisateur exécutant vim. Par exemple, si le fichier "login.php" est ouvert avec vim, puis que l'on commence à l'éditer (à changer son contenu), un fichier .login.php.swp va alors être créé. Une autre raison légitime de ce mode de fonctionnement est le fait qu'en cas de crash ou de fermeture du programme vim (exemple avec un "kill -9"), le fichier .swp va permettre de reprendre l'édition au moment du crash en utilisant l'option "Recover" de vim, on pourra d'ailleurs avoir le message "Swap file .login.php.swp already exists".

Il faut noter que lorsque le fichier est finalement sauvegardé, son swap file au format .swp est supprimé. Toutefois, lorsque le fichier est quitté de manière non standard (exemple, coupure SSH lors de l'édition via une connexion SSH, extinction brute, kill -9...), le fichier .swp n'est alors pas supprimé et son existence persiste jusqu'à une suppression manuelle.

Outre vim, d'autres programmes ont le même comportement sur différentes plate-formes, c'est le cas d'emacs par exemple, qui créé automatiquement une version backup des fichiers édités dans certains cas d'édition.

B. Les fichiers de sauvegarde générés manuellement

Les cas les plus courant concernent les fichiers de sauvegarde créés manuellement, et bien souvent oubliés dans l'arborescence web. Il est (très) courant, avant de devoir éditer des fichiers, d'en créer des sauvegardes par sécurité. Une habitude répandue consiste à exécuter cette simple commande :

cp fichieramodifier.php fichieramodifier.php.bak

Ou encore :

cp fichieramodifier.php fichieramodifier.php.old

En soit, cela est une excellente habitude, car on peut alors revenir rapidement à une version d'origine du fichier en cas de mauvaise manipulation, d'erreur de code, etc. Cependant, ces fichiers se retrouvent dans l'arborescence web et sont alors consultables pour  n'importe quel visiteur. On se retrouve alors également avec la possibilité de les télécharger pour en visionner le contenu, simplement en allant avec un navigateur sur l'URL http://monsite/fichieramodifier.php.bak

Également, on peut être amené à vouloir sauvegarder l'intégralité d'un site web ou d'un répertoire dans une archive, par exemple une archive au format .tar.gz ou .zip, par manque de prudence, ces archives se retrouvent elles aussi dans l'arborescence web et sont alors directement téléchargeables depuis un navigateur.

Les backups de base de données, par exemple dans des fichiers .sql sont aussi très pratiques pour effectuer rapidement des sauvegardes d'une application web, également, ces fichiers peuvent se retrouver dans bien des cas dans l'arborescence web, voire directement indexés sur des moteurs de recherche.

C. Les répertoires de backups

Une bonne habitude à prendre en tant que sysadmin ou webmaster est le versionning et le stockage des sauvegardes faites. Toutefois, il faut absolument éviter de stocker ces répertoires à l'intérieur même du répertoire web de l'application ou du serveur web. Il est aujourd'hui courant de trouver des accès sur des URLs du type :

Bien que cette habitude soit une bonne chose, entreposer les backups d'une application web ou d'une base de données à l'intérieur même de celle-ci est très dangereux car ces répertoires, s'ils ne sont pas protégés, peuvent alors être consultés librement depuis un navigateur web.

Dans les cas les plus courants, on oublie de vérifier la présence de ces fichiers et de les supprimer, dans les cas plus spécifiques, ils sont accessibles via une mauvaise gestion des droits ou des failles LFI (Local File Inclusion).

III. L'accès au code source, un problème ?

Nous avons vu que ces fichiers pouvaient être créés de façon automatique ou de façon manuelle et également que leur présence dans l'arborescence web peut être beaucoup moins temporaire que prévue. Mais en quoi ces fichiers posent-ils un problème de sécurité ?

En soit, l'accès au code source d'un fichier HTML est la condition même du bon fonctionnement d'un serveur web. Lorsqu'une requête est faite à un serveur, le code HTML est envoyé dans son intégralité au client pour que son navigateur lui affiche correctement les images, couleurs et textes transmis. Néanmoins, le code PHP est lui un code exécuté du côté du serveur "server side code" est n'a aucunement pour vocation d'être lu par les visiteurs d'un site web ou par les navigateurs.

Pour rappel, lorsqu'un client demande l'affichage d'une page web en allant par exemple sur "http://site.demo/index.php", le serveur exécute le script "index.php" qui va alors générer dynamiquement un code HTML, c'est ce code HTML qui sera renvoyé au client, et non le code PHP. C'est pour cette raison que le code PHP est un code côté serveur, car c'est le serveur qui le lit et l'exécute :
Si un client arrive à télécharger le code PHP, comme dans les contextes vus plus haut, cela peut être relativement dangereux :

On comprend alors mieux pourquoi ce code PHP n'a absolument par pour vocation d'être vu par les visiteurs d'un site web, il fait partie du "backoffice" dans le fonctionnement du serveur web et peut contenir des informations sensibles.

IV. Quelques outils offensifs

Bien souvent lors de l'audit d'un site web et d'un test d'intrusion, personne se mettant dans la peau de l'attaquant va effectuer la recherche des fichiers de backups de façon manuelle. En effet, la création d'un fichier XXXXXX.php.bak n'est pas une norme et est loin d'être systématique comme pourrait l'être la présence d'un "install.php" à la racine d'une application web.

Cependant, différents outils permettent d'automatiser leur détection, on retrouve par exemple l'utilisation des Googles Dorks, très efficace lorsque ces fichiers de sauvegarde se retrouvent indexés. Par exemple, l'utilisation des directives "inurl:.php.bak" ou "filetype:bak OR filetype:old" permet de retrouver les fichiers de sauvegarde oubliés d'un serveur web.

Il faut toutefois noter que bien que ces fichiers traînent souvent dans les serveurs web, ceux-ci ne sont pas systématiquement indexés par les moteurs de recherche, c'est le cas des applications web internes par exemple.

On peut également facilement construire un outils qui, pour chaque URL trouvée et renvoyant un code 200 sur une application web (exemple : index.php), va tester l'équivalence avec des syntaxes propres aux fichiers de sauvegarde :

V. Les protections à mettre en place, techniques et humaines

Afin de protéger les serveurs et applications web des extractions d'informations vues précédemment, plusieurs systèmes peuvent être mis en place :

A. Interdire les extensions de "backup"

Commençons par les protections techniques, lorsqu'il est nécessaire d'effectuer un fichier de backup temporaire, on peut observer une certaine logique générale qui est de mettre ces fichiers en .bak ou .old. Libre à vous d'utiliser d'autres syntaxes comme .save, .backup ou .nimportequoi. la logique de protection restera la même du moment que vous adaptez la méthode de protection à vos habitudes.

Sous Apache, il est possible de mettre en place une restriction par .htaccess qui va permettre d'interdire toute lecture de certaines extensions de fichier. On peut alors se permettre de dire au serveur web "Refuse l'accès à toutes les ressources ayant comme extension .bak". Bien entendu, on peu remplacer .bak par ce que l'on souhaite. Il faut néanmoins, dans votre équipe de travail, normaliser le fait que les fichiers de backup temporaires seront .bak et pas .baks, .old ou .backup.

Pour mettre en place une telle protection avec un .htaccess sous Apache2, on peut utiliser la syntaxe suivante :

<Files ".bak">
     Order Allow,Deny
     Allow from none
     Deny from all
</Files>

Ainsi, dès que l'on souhaitera avoir accès à un fichier ayant comme extension ".bak", on aura une interdiction de la part du serveur (code d'erreur HTTP 403) :
Je vous conseille alors de mettre un ensemble de règles comme celle-ci dans vos .htaccess couvrant la plupart des extensions vues ici (.bak, .swp, .old...), la règle ressemblera alors à cela :

<Files ~"\.(bak|swp|old|sql|zip)$">
        Order Allow,Deny
        Allow from none
        Deny from all
</files>

Si vous avez un serveur web tournant sous Nginx, voici la configuration correspondante , à mettre dans le fichier de votre vhost :

location ~\.(bak|old|swp|sql|zip)$ {
    return 403;
}

Libre à vous d'y ajouter les extensions souhaitées ou non. Le ".zip" par exemple peut être utile dans un contexte normal, si l'on met à disposition des utilisateurs des archives téléchargeables. Encore plus sécurisé, mais beaucoup plus restrictif, on peut tout simplement n'autoriser aucune extension, sauf celles spécifiées. On abandonne alors le mode "Liste noire" dans laquelle tout est autorisé sauf ce qui est explicitement interdit, au profit du mode "Liste blanche" dans laquelle tout est interdit sauf ce qui est explicitement autorisé. Dans le cadre d'Apache2 avec un .htaccess, cela donnera les règles suivantes :

// On interdit toutes les extensions
<Files ~ "\..*$">
        Order Allow,Deny
        Allow from none
        Deny from all
</Files>
// On autorise seulement ce qui est légitime, image, php, html ...
<Files ~ "\.(html|php)$">
        Order Deny,Allow
        Deny from none
        Allow from all
</Files>

Cette dernière méthode est beaucoup moins simple à gérer mais évite les mauvaises surprises. On peut déjà penser à ajouter les extensions d'images pour avoir un site exploitable...

B. Partir à la chasse des extensions de backup

Une seconde opération qui pourrait être mise en place pourrait être le fait de faire tourner un script régulièrement sur l'arborescence web d'un serveur web. Ce script pourra alors partir à la recherche d'extension de backup comme les fichiers en .bak ou .old pour ensuite envoyer un mail à l'administrateur du serveur si de telles extensions sont trouvées. Ce genre de script peut être développé très rapidement en bash et améliorera à coup sûr la sécurité de vos serveurs web, un exemple de script que vous pouvez utiliser, je l'ai rédigé pour l'article, il peut donc certainement être amélioré :

#!/bin/bash
# Script to find backup extension files in web directory
# Create tmp file for output storage
TEMP=$(mktemp)
# Admin mail
AdmMail="foo@bar.test"
# Path to web directory
WebDir="/var/www/ogma-sec.fr"
# Bad extensions to find, please keep the regexp syntax
BadExtension=".*\.\(bak\|swp\|old\)$"
find $WebDir -regex $BadExtension > ${TEMP}
# If tmp file is not empty, send its content to admin
if [[ -s ${TEMP} ]] ; then
    cat ${TEMP} | mail -s "Bad Extension finded ${hostname}" $AdmMail
fi ;
# Delete tmp file
rm ${TEMP}

Il suffira alors de configurer un crontab pour que ce script soit exécuté tous les jours par exemple.

C. Le cas de vim

Nous avons vu que vim créait pour des raisons plus que légitime des "Swap Files" au format .swp qui pouvaient être téléchargés pour obtenir le code source d'un script PHP par exemple. Vim étant un outil très puissant, nous pouvons résoudre ce problème de plusieurs façons.

On peut tout d'abord commencer par demander à vim de ne plus produire de fichier swap en ajoutant la directive suivante dans la configuration de vim (/etc/vimrc ou /etc/vim/vimrc) :

set noswapfile

Si ces fichiers ont toujours un intérêt pour vous, il suffit de demander à vim de ne plus le stocker dans le répertoire courant mais plutôt dans un répertoire à part, loin de l'arborescence web et de vos applications web, par exemple dans /srv :

mkdir /srv/vim_swpfile

On va ensuite modifier le fichier de configuration de vim (/etc/vimrc ou /etc/vim/vimrc) pour y ajouter les options suivantes :

set backupdir=/srv/vim_swpfile
set directory=/srv/vim_swpfile
set undodir=/srv/vim_swpfile

À présent, les fichiers temporaires tels que les swap ne seront plus créés dans le répertoire courant mais dans un répertoire fixe, celui spécifié dans la configuration.

D. Umask : Limiter les droits

Une autre méthode pouvant être mise en place va consister à limiter les droits de lecture sur les fichiers de backup créés de manière automatique ou manuelle. En effet, nous avons vu que lorsqu'un fichier était créé manuellement, les droits de lecture étaient par défaut en lecture pour tous les utilisateurs "-rw-r--r--". Cela vient en réalité des droits qui sont affectés par défaut sur un fichier nouvellement créé : l'umask. Cela signifie que, pour tout fichier créé par un utilisateur dans un contexte de configuration par défaut sous Linux, tous les utilisateurs peuvent lire ce fichier. Nous allons donc mettre en place un durcissement de l'umask pour corriger cela. Techniquement c'est assez simple.

On se rend dans le fichier /etc/login.defs pour mettre "077" au lieu de "022" sur le champ "UMASK". On va ensuite dans le fichier /etc/pam.d/comm.session rajouter la ligne suivante :

session optional pam_umask.so

En redémarrant votre session, vous pourrez voir que votre umask est à 077 et que les fichiers créés ne sont plus lisibles par les "others" :

drwxr-xr-x 3 root     root      4096 juin  10 09:50 ..
-rw-r--r-- 1 www-data www-data   163 juin  13 15:56 .htaccess
-rw------- 1 root     root     11104 juin  13 17:16 index.bak    <------ Illisible par apache(www-data)
-rw-r--r-- 1 www-data www-data 11104 juin  10 09:50 index.html

Cela restreindra donc la lecture des fichiers de backups créés manuellement comme les zip, sql, bak, etc.. Mais ce n'est pas une mesure suffisante si elle est utilisée seule.

root@debian:/var/www/html# umask -p
umask 0077

Si vous souhaitez comprendre plus en profondeur le concept et le fonctionnement de l'umask, je vous oriente vers un autre article que j'ai écrit à ce sujet : Gestion de l'umask sous Linux

E. Le sysadmin/webmaster

La meilleure des sécurité reste la prudence des administrateurs systèmes et des webmasters des sites et applications web. Plusieurs habitudes seront certainement à changer pour arriver à créer un contexte sécurisé vis à vis de la sécurité des fichiers de backup, comme par exemple :

Quoi qu'il en soit, il est primordial d'utiliser l'une de ces sécurité, dans les meilleurs cas, il est préférable d'en combiner plusieurs pour avoir une sécurité plus robuste, qu'elles soient humaines et/ou techniques.

D'autres sources  d'informations à ce sujet :

Nous avons fait le tour de ce sujet pour cet article, il y a sûrement beaucoup de choses supplémentaires à dire, si vous avez des conseils ou des suggestions, n'hésitez pas à les partager des les commentaires, ils aideront beaucoup de monde.

Dirhunt – Enumération des répertoires web sans brute force

jeudi 26 mars 2020 à 09:20

I. Présentation

Je vous présente dans ce court article un outil que j'ai découvert récemment lors de la résolution des challenges natas. Il s'agit de dirhunt, un outil d’énumération de répertoires web qui n'utilise pas la technique du bruteforce.

Les méthodes les plus communes pour lister avec le plus d'exhaustivité possible les répertoires d'une application web sont les deux suivantes :

Ces deux méthodes sont généralement efficaces mais peuvent montrer quelques limites. Pour la méthode du proxy, le temps d'obtention d'une liste complète des répertoires dépend de la taille de l'application web. L'opération peut être longue à réaliser car la découverte se fait surtout manuellement. Pour la méthode de l'énumération, cela est aussi assez long et beaucoup de requêtes sont envoyées pour rien (si 10% du contenu de votre dictionnaire retourne des résultats positifs, vous serez déjà très chanceux). Un très grand pourcentage du trafic (et du temps) généré sera donc inutile.

Dirhunt peut ici être utilisé pour compléter ces deux méthodes. Il agit comme un crawler, c'est à dire qu'il va suivre tous les liens des pages web du site ciblé, et cela automatiquement.

Un robot d'indexation (ou littéralement araignée du Web ; en anglais web crawler ou web spider) est un logiciel qui explore automatiquement le Web. Il est généralement conçu pour collecter les ressources (pages Web, images, vidéos, documents Word, PDF ou PostScript, etc.), afin de permettre à un moteur de recherche de les indexer.

Source : https://fr.wikipedia.org/wiki/Robot_d%27indexation

A chaque nouvelle page analysée, il recherche dans le code source de ces pages les répertoires et met à jour une liste de répertoires valides sur l'application web au fur et à mesure.

II. Enumération des répertoire web, pour quoi faire ?

Avant de passer à la démonstration et aux options et cas d'utilisation de dirhunt, discutons un peu des contextes dans lesquels une énumération des répertoires web peut être utile.

Lors de l'analyse de la sécurité d'une application web (incluons là dedans bug bounty, audit de sécurité, etc.) la cartographie est l'une des première étape à mener. Plus la cartographie est complète, moins nous aurons de chance de passer à côté d'une fonction, d'un formulaire ou d'une page contenant des vulnérabilités. La cartographie sert en somme dessiner le périmètre de l'application.

Dans un tel contexte, on énumère notamment les sections du site web (une partie authentifiée, une partie en accès non authentifié), sa technologie (via le banner grabbing et autres indicateurs), ses fichiers et ses répertoires.

Quoi de plus facile de commencer l'analyse de la sécurité d'une application web en tombant dés les premières minutes sur un répertoire /backup contenant une archive ZIP avec le contenu de la base de donnée ?

L'énumération des répertoires (et fichiers) d'une application web et donc une étape essentielle à exécuter durant les phases de reconnaissance d'une application, potentiellement à réitérer plus tard, par exemple un fois que l'on a obtenu un accès authentifié.

III. Installation et utilisation de dirhunt

Dirhunt est écrit en Python et est disponible sur Github (https://github.com/Nekmo/dirhunt), il peut également être installé depuis pip3  :

pip3 install dirhunt

Rien de plus compliqué que cela, il suffit ensuite de l'utiliser. Une documentation plutôt complète est disponible sur le blog de l'auteur : http://docs.nekmo.org/dirhunt/usage.html

Pour exposer quelques cas d'utilisation, le plus simple est le suivant :

dirhunt https://ogma-sec.fr

On peut également spécifier plusieurs cibles :

dirhunt https://ogma-sec.fr/rep1 https://wikipedia.org

L'option la plus intéressante est la possibilité de filtrer par liste blanche ou liste noire les résultats. Cela permet d'exclure les redirections, les erreurs 404 ou au contraire de n'afficher que les Directory Listing (qui sont relevés et indiqués par dirhunt) :

dirhunt https://ogma-sec.fr/ --include-flags "Index Of"
dirhunt https://ogma-sec.fr/ --exclude-flags "404"

Dirhunt se base donc sur la méthode des crawlers des moteurs de recherche. En théorie, il est également censé aller chercher des informations sur Google, VirusTotal, ou encore le fichier robots.txt (si présent), mais après avoir testé l'outil, il semble que cette partie fonctionne mal, j'ai levé une issue sur son Github.

Enfin pour stocker tous les répertoires trouvés dans un fichier, on utilise le classique chevron :

dirhunt https://ogma-sec.fr > dir-ogma-sec.fr

J'ai pour ma part essayé de développer mon propre outil avant de trouver celui-ci, notamment pour résoudre le challenge Natas 4 (article à venir). La tâche n'est pas facile car il faut prévoir tous les cas possibles, redirection, 404, 403, savoir reconnaitre quand une URL contient plusieurs répertoires, pouvoir prendre en entrée plusieurs types de données, des fichiers externes (possible avec dirhunt en indiquant un /chemin/fichier à la plage de  l'URL en entrée), etc.

Bref, un outil très utile, il lui manque peut être la gestion de l'authentification en option. Le code étant en Python, il peut être facilement modifié si nécessaire.

Leak : Surface Go 2, les caractéristiques se précisent !

mercredi 25 mars 2020 à 13:47

Microsoft prépare la seconde génération de la Surface Go, la version allégée et alternative à la Surface Pro. Pour la Surface Go 2, la configuration matérielle pourrait effectuer un bond intéressant.

D'après Tom's Hardware, cette nouvelle génération de Surface Go pourrait hériter d'un processeur Intel Core M3 et d'un Intel Pentium. Plus précisément, il s'agirait d'un Intel Core M3-8100Y (2 cœurs / 4 threads) cadencé à 1,10 Ghz avec un boost possible à 3,4 GHz. Pour le processeur Intel Pentium, il s'agirait d'un 4425Y qui dispose de 2 cœurs et 4 threads cadencés à 1,7 Ghz contrairement à la première génération équipée d'un 4415Y limité à 1,6 GHz.

Concernant la partie stockage, il s'agirait du même SSD que celui de la Surface Pro 7 et de la Surface Pro X. Le modèle avec Core M3 aurait 256 Go de stockage alors que le modèle avec le Pentium serait équipé d'un SSD de 128 Go. Dans les deux cas, la puce graphique est une Intel UHD 615 et la mémoire RAM de 8 Go.

Bien que tout cela ne soit encore que des rumeurs, ça se précise.

Source

PCredz, récupérer des identifiants à partir d’une écoute réseau

mercredi 25 mars 2020 à 09:10

I. Présentation

Je vous présente aujourd'hui un petit outil que j'ai l'habitude d'utiliser lors de scénarios de tests d'intrusion internes. Celui-ci permet de récupérer des identifiants à partir d'écoutes réseau.

PCredz est une petit outil assez simple écrit par Laurent Gaffié (Igandx, auteur de Responder), il s'agit simplement d'un parser en quête d'identifiant dans une suite de protocoles non sécurisés. Il peut être utilisé lors d'une écoute en live sur le réseau ou lire un fichier .pcap ou .pcapng (format produit par Wireshark ou TCPdump).

Il est en effet très fréquent que des protocoles non sécurisés soient utilisés au sein d'un réseau d'entreprise, cela car les utilisateurs et administrateurs se considèrent comme sécurisés lorsqu'ils sont "chez eux". Plus précisément car ils ne soupçonnent pas la facilité qu'un attaquant pourrait avoir à s'introduire logiquement dans leur réseau (en s'y connectant physiquement, en Wifi ou par la compromission d'un poste utilisateur), mais aussi car les menaces internes sont souvent oubliées des analyses de risques faites en internes.

II. PCCredz

L'outil peut être trouvé sur le dépôt de Laurent Gaffié : https://github.com/lgandx/PCredz

En date d'écriture de cet article, celui-ci gère déjà un bon nombre de protocoles :

Tout ces protocoles, et bien d'autres d'ailleurs, sont en clair (sans aucun chiffrement), les phases authentification des utilisateurs et des systèmes font donc également passer ces informations là en clair, et n'importe qui en capacité d'intercepter ces flux peut les récupérer et les réutiliser.

Tous les hashs récupérés sont affichées selon le format hashcat afin qu'ils puissent être réutilisés rapidement et toutes les données récupérées sont stockées dans un fichier CredentialDump-Session.log.

Concernant l'utilisation, deux cas sont donc possibles. L'écoute en direct sur une interface, par exemple dans le cas d'une attaque par l'homme du milieu (MITM) menée en parallèle depuis le poste de l'attaquant :

./Pcredz -i eth0

Ou l'analyse "à froid" d'une fichier .pcap ou .pcapng, qui correspond aux scénarios d'écoutes menées sur une autre machine et dont les résultats ont ensuite été récupérés :

./Pcredz -f file-to-parse.pcap

On peut également indiquer un répertoire contenant plusieurs fichiers .pcap  avec l'option -d :

./Pcredz -d /tmp/pcap-directory-to-parse/

PCredz est écrit en python et se base essentiellement sur la librairie libpcap, il est donc possible d'étudier son fonctionnement et de le modifier (en ajoutant des protocoles par exemple). Voici par exemple la partie du code contenant les expressions régulières pour certains des protocoles pris en charge :

Voici un exemple de sortie sur plusieurs fichiers récupérés sur le site http://www.pcapr.net :

# ./Pcredz -d pcap/
Pcredz 1.0.0
Author: Laurent Gaffie
Please send bugs/comments/pcaps to: laurent.gaffie@gmail.com
This script will extract NTLM (http,ldap,smb,sql,etc), Kerberos,
FTP, HTTP Basic and credit card data from a given pcap file or from a live interface.

CC number scanning activated

Parsing: pcap/POP3-NTLM-Authentication.CAP
Using TCPDump format
pcap/POP3-NTLM-Authentication.CAP parsed in: 0.0235 seconds (File size 0.00454 Mo).

Parsing: pcap/smtp-auth-login.pcap
Using TCPDump format
14 protocol: tcp 127.0.0.1:25915 > 127.0.0.1:25
SMTP decoded Base64 string: username
pcap/smtp-auth-login.pcap parsed in: 0.0157 seconds (File size 0.00162 Mo).

Parsing: pcap/SMTP-Login-Auth.Cap
Using TCPDump format
21 protocol: tcp 192.168.26.1:1698 > 192.168.26.130:25
SMTP decoded Base64 string: simon
pcap/SMTP-Login-Auth.Cap parsed in: 0.0238 seconds (File size 0.00463 Mo).

Parsing: pcap/krb5_pam_erebo_correct_login.pcap
Using TCPDump format
pcap/krb5_pam_erebo_correct_login.pcap parsed in: 0.00753 seconds (File size 0.00332 Mo).

Parsing: pcap/dump.pcap
Using TCPDump format
24 protocol: tcp 192.168.1.18:56380 > 88.190.19.182:80
Found possible HTTP authentication username=flag_x:password=flag%7Bi_should_add_ssl%7D
Host: ctf.bi.tk
Full path: POST /login HTTP/1.1

pcap/dump.pcap parsed in: 0.0364 seconds (File size 0.0425 Mo).
Parsing: pcap/ftp-login.pcap
Using TCPDump format

9 protocol: tcp 192.168.1.7:50885 > 192.168.1.3:21
FTP User: alex
FTP Pass: alex

pcap/ftp-login.pcap parsed in: 0.00617 seconds (File size 0.00143 Mo).

III. Scénarios d'utilisation

Plusieurs moments clés dans le déroulement d'une intrusion peuvent conduire à l'utilisation de cet outil afin de faciliter le travail de l'attaquant au sein du réseau.

L'une des premières étapes d'une intrusion reste l'écoute passive, l'attaquant qui parvient à accéder au réseau interne d'une entreprise se met simplement en écoute sur le réseau afin d'étudier ses composants et son comportement sans lever d'alerte (en envoyant par exemple des identifiants incorrectes ou en faisant des scans réseau).

Cette première écoute n'est pas la propice à l'utilisation de PCredz, car les requêtes contenant des identifiants sont généralement dédiées à un serveur précis et donc ciblées.

Au fur et à mesure des compromissions et de ses avancées, un attaquant peut exécuter des écoutes réseaux sur les machines compromises afin de voir ce qui entre et sort de leur interface réseau. Ce type d'écoute est déjà bien plus intéressante pour l'utilisation de PCredz car l'utilisateur va forcément s'authentifier sur différents services au cours de sa journée. Egalement lors de la compromission d'un serveur, l'attaquant qui parvient à exécuter une écoute réseau va pouvoir récupérer les identifiants des utilisateurs qui se connectent aux services hébergés par le serveur.

Finalement, les cas d'interception réseaux, tels que l'ARP Spoofing , sont les plus intéressants car l'attaquant essaie de récupérer le plus de trafic possible afin d'y récupérer des informations, ou simplement de détourner/modifier le trafic intercepté pour des attaques massives ou ciblées.

Bref, nombreux sont les cas où une interception réseau est possible et l'utilisation de PCredz retourne souvent des résultats intéressants.

IV. Protections

Différents bonnes pratiques de sécurité peuvent ralentir l'attaquant lors d'une compromission interne du réseau et rendre inutile des outils tels que PCredz :

Au niveau architecture, les bonnes pratiquent générales de sécurité vont dans le sens du cloisonnement des systèmes et des utilisateurs par niveau de sensibilité ou criticité. Il est par exemple possible de positionner les administrateurs sur un réseau différent des utilisateurs. Ainsi, même en cas de compromission d'un poste utilisateur, le trafic réseau depuis et vers les postes des administrateurs sera plus difficile à intercepter (par ARP spoofing par exemple). Voir la règle 19 du Guide d'hygiène informatique de l'ANSSI "Segmenter le réseau et mettre en place un cloisonnement entre ces zone" : https://www.ssi.gouv.fr/uploads/2017/01/guide_hygiene_informatique_anssi.pdf

Concernant les configurations des services proposés aux utilisateurs, l'utilisation de protocoles sécurisés doit être systématique afin de réduire autant que possible la transmission d'identifiants en clair sur le réseau. Quasiment tous les protocoles proposent aujourd'hui une version chiffrée (HTTP -> HTTPS, FTP -> FTPS/SFTP, telnet -> SSH, etc.). Voir la règle 21 du Guide d'hygiène informatique de l'ANSSI "Utiliser des protocoles réseaux sécurisés dès qu’ils existent".

Egalement, les postes utilisateurs comme les serveurs doivent faire l'objet d'un durcissement qui vise à n'installer que les outils nécessaires à leur besoin métier et à interdire l'installation d'outils par des utilisateurs non privilégiés. Par exemple, les distributions Linux possèdent presque toutes nativement les paquets tcpdump ou nmap d'installés, et il est très fréquent que ces outils soient réutilisés lors d'une intrusion. L'attaquant n'a alors pas à installer ses propres outils, actions qui pourrait trahir sa présence (connexion à Internet, installation de nouveaux paquets, modification des droits ou permissions, etc.). Tous les logiciels permettant une écoute réseau doivent donc être désinstallés (et plus largement ceux qui ne répondent pas à un besoin métier ou technique justifié). Cela fait notamment partie des recommandations de la règle 14 du Guide d'hygiène de l'ANSSI : "Mettre en place un niveau de sécurité minimal sur l’ensemble du parc informatique".

Enfin, des outils de détection d'intrusion peuvent également être utilisés afin de trahir, non par une écoute réseau, mais une attaque par l'homme du milieu. Une attaque de type ARP spoofing est par exemple très visible sur le réseau. L'article suivant détaille le pourquoi et le comment de cette attaque et les protections possibles : Comprendre les attaques via ARP spoofing (MITM, DOS)

Bref, ce petit outil est très pratique car il automatise une bonne partie du travail de recherche d'identifiants. Mais l'application des bonnes pratiques générales de sécurité permettent tout de même de se protéger, non pas de son utilisation directe, mais des vulnérabilités ou faiblesses qu'il exploite.

Failles 0-day exploitées dans Windows 10 et Windows Server

mardi 24 mars 2020 à 13:00

Microsoft a communiqué sur l'existence de deux failles critiques "Zero Day" dans ses systèmes d'exploitation. Cela touche Windows 10, mais également Windows 7 et Windows 8.1, ainsi que Windows Server de 2008 à 2019. Rien que ça.

Les deux vulnérabilités se situent au sein de la librairie "Adobe Type Manager" : si un document est ouvert sur un poste ou un serveur, du code arbitraire peut être exécuté à distance. Cela nécessite que le document utilise une police d'écriture spécifique. Plus grave encore : si l'on prévisualise le document via l'Explorateur de fichiers Windows, l'attaque est exécutée également. Cependant, le volet de prévisualisation Outlook n'est pas concerné (tant mieux).

Concernant le correctif, il va falloir être patient : il sera disponible lors de la sortie du prochain Patch Tuesday, en avril prochain. Plus précisément le 14 avril 2020. Pour Windows 7, à moins de souscrire au support étendu, il n'y aura pas de correctif. En alternative, Microsoft propose de désactiver le volet de prévisualisation de l'explorateur et d'arrêter le service WebClient (sans préciser l'impact).

Microsoft précise que des hackers exploitent déjà ces vulnérabilités au travers d'attaques ciblées. De son côté, Adobe nie toute responsabilité et estime que Microsoft est l'unique gestionnaire de cette librairie.