Rédigé par Antoine, le Samedi 13 Novembre 2021
Les pares-feux sont dĂ©sormais systĂ©matiquement dĂ©ployĂ©s dans les entreprises, et la plupart dâentre eux sont configurĂ©s pour filtrer les flux entrant et sortant de lâentreprise. Dans ces conditions, un attaquant ou un programme malveillant qui souhaite exfiltrer de lâinformation ou rĂ©aliser une prise de contrĂŽle Ă distance dâune machine interne devra impĂ©rativement utiliser un des protocoles autorisĂ©s pour traverser le pare-feu en sortie.
Dans cet article nous allons montrer comment il est possible de crĂ©er des « canaux cachĂ©s », en dĂ©tournant les protocoles usuels ICMP, HTTP et DNS pour encapsuler un « Reverse Shell » (invite de commande Ă distance) qui permettra Ă un attaquant extĂ©rieur dâavoir la main sur une machine interne de lâentreprise.
Enfin, nous verrons que grĂące Ă lâIPS embarquĂ© dans les pares-feux Stormshield, et prendra les mesures nĂ©cessaires afin de bloquer ces diffĂ©rentes attaques dĂ©tectĂ©es.
Cette démonstration a été réalisée dans un but éducatif, en aucun cas vous ne devez reproduire la procédure sur un environnement ne vous appartenant pas !
Dans ce premier exemple, nous allons utiliser les messages ICMP Echo Request et Echo Reply pour « cacher » notre canal de commande. Nous allons utiliser lâoutil ICMPsh
et un simple Shell ICMP inversé avec un esclave sous Windows et un maßtre compatible POSIX en C, Perl ou Python, comme un Linux par exemple.
LâICMPsh est un simple Shell ICMP inversĂ© avec un esclave sous Windows et un maĂźtre compatible. Le principal avantage par rapport aux autres outils open source similaires est quâil ne nĂ©cessite pas de privilĂšges administrateurs pour fonctionner sur la machine cible.
Lâinstallation est assez simple et se lance en client portable cĂŽtĂ© Windows et un script Python cĂŽtĂ© Linux.
CĂŽtĂ© Linux de lâattaquant, nous mettons le programme en Ă©coute, en prĂ©cisant lâIP du serveur et lâIP du client (ici sur le mĂȘme rĂ©seau, mais le serveur pourrait ĂȘtre sur Internet Ă©videmment).
L'usage de ce programme est relativement simple :
./icmpsh_m.py <serveur> <destination>
<serveur>
: Adresse IP de notre Linux, faisant office de serveur
<destination>
: Adresse IP de la victime, Windows cible
CĂŽtĂ© Windows de la victime, nous exĂ©cutons le « client » ICMPsh, tout en prĂ©cisant lâadresse IP du serveur :
CĂŽtĂ© Linux de lâattaquant, on voit dĂ©sormais que nous avons la main sur son poste en ligne de commande :
Notre objectif est maintenant dâobtenir un Shell Ă distance, passant par le protocole HTTP Ă lâaide dâun script Python (exemple : https://github.com/mayurkadampro/HTTP-Reverse-Shell).
CĂŽtĂ© Linux de lâattaquant, nous mettons en place notre serveur en Ă©coute (ici sur le port 5003, mais dans le cas dâune attaque rĂ©elle cela serait sur le port 80, afin que ce dernier soit autorisĂ© sur le pare-feu).
CÎté Windows de la victime, nous exécutons le script « Client.pyw »
et nous obtenons alors une connexion avec un Shell directement sous Windows !
Notre dernier objectif dans cet article est dâobtenir un Reverse Shell en passant par le protocole DNS sur le port 53. Lâarchitecture repose sur un serveur Linux sur lequel un serveur Ruby exĂ©cutant DNSCat Server et un client Windows dans lequel le client DNSCat sera importĂ© et lancĂ© sur Powershell.
CĂŽtĂ© Linux de lâattaquant, nous lançons l'utilitaire Dnscat2
:
ï»ż
MĂȘme principe, on lance du cĂŽtĂ© du Windows de la victime sur PowerShell, le script client DNSCat2 avec le domaine prĂ©cĂ©demment spĂ©cifiĂ© et l'adresse IP du serveur DNS malveillant :
On obtient grĂące Ă cela un accĂšs distant Ă l'Invite de Commande avec les droits utilisateurs distants de la console PowerShell !
GrĂące Ă la protection IPS intĂ©grĂ©e (et active par dĂ©faut) dans les pares-feux Stormshield, ce dernier analyse les flux transitant par les protocoles spĂ©cifiĂ©s et dĂ©tectera lâusage anormal des protocoles.
VĂ©rifier que sur vos flux sortants concernant les protocoles ICMP, DNS et HTTP, le niveau dâinspection est bien positionnĂ© Ă IPS (par dĂ©faut).
Il est important de garder Ă lâesprit que la sĂ©curitĂ© IPS regroupe des fonctionnalitĂ©s permettant de filtrer et de bloquer le trafic malveillant, comparĂ© au niveau dâinspection IDS, qui va dĂ©tecter lâattaque et lâoption Firewall qui nâinspecte pas le trafic.
Pour activer lâIPS sur vos rĂšgles de sĂ©curitĂ©, aller dans CONFIGURATION > POLITIQUE DE SECURITE > Filtrage et NAT.
Double-cliquez sur une de vos rĂšgles actuelles, aller dans le niveau dâinspection et sĂ©lectionnez IPS.
Si maintenant nous tentons à nouveau de créer les canaux cachés précédents, voici les alarmes qui seront levées sur le firewall :
...et il ne sera pas possible Ă lâattaquant dâenvoyer ses commandes :
Du cÎté des DNS...
Nous avons dĂ©montrĂ© lâefficacitĂ© de la protection IPS de Stormshield. Il est en effet trĂšs important de mettre la protection IPS pour toutes vos rĂšgles crĂ©Ă©es sur la solution.
Dans les protections applicatives, le mode Firewall (FW) nâeffectue aucune vĂ©rification de sĂ©curitĂ©, lâIDS ne dĂ©tecte que lâattaque mais ne la bloque pas, contrairement Ă lâIPS oĂč il dĂ©tecte et bloque les attaques.
Il est Ă noter que dâautres canaux cachĂ©s existent, notamment via les flux chiffrĂ©s en TLS (HTTPSâŠ), dans ce cas les pares-feux Stormshield sont capables de jouer le rĂŽle de proxy TLS afin de continuer Ă analyser ces flux Ă la recherche dâabus sur les protocoles sous-jacents.
Enfin, sachez que les pares-feux Stormshield disposent dâune alarme « DĂ©tection de session Interactive » qui se base sur la statistique des donnĂ©es Ă©changĂ©es sur une session et qui permet de dĂ©tecter tout canal cachĂ©, y compris sur des sessions chiffrĂ©es (SSH, HTTPSâŠ).
Il peut ĂȘtre intĂ©ressant de surveiller cette alarme (par dĂ©faut elle est positionnĂ©e sur « Ignorer ») pour vous assurer quâil nây a pas de flux illĂ©gitimes qui traversent votre firewall (ou tout simplement pour ĂȘtre alertĂ© lorsquâun administrateur se connecte en Telnet, SSH ou RDP sur une de vos machinesâŠ).