vendredi 11 juin 2010

Sniffing du trafic au sein d'un système

Netcat est  un outils qui permet de réaliser des connexion tcp et udp très facilement , il peut etre utilisé en tant que scanner de ports , backdoor , transferts de fichiers et plein d'autre chose .

Nous allons voir comment sniffer du trafic au sein d'un système dont vous avez l'accès (votre propre serveur web de préférence ^^)  par exemple en utilisant netcat  .

Voici , mon petit lab ^^ crée sous vmware :


Après avoir réussi a avoir un accès root au serveur apache , nous allons essayer de récupérer tous les informations qui sont destinés au serveur , dans cette notre exemple nous allons récupérer les informations envoyer pas la notre victime ;) .
Netcat peut donc etre utilisé comme un sniffer pour récupérer les informations entrante et sortante d'un système .
L'adresse ip de notre serveur est 192.168.1.2 .  voici ce que nous devrons faire :

  1. Changer le port d'écoute du serveur (80 par defaut)  pour le port 8080 , ou un autre si celui est déja occupé ;) . en modifiant les fichiers de configurations d'apache ,pour cela on se connecte au serveur avec ssh ou telnet.
 le  fichier de configuration des ports  de apache2 : etc/apache2/ports.conf

    2 .  ensuite  on redémarre le serveur  : cmd  : service apache2  restart
          rmq : les commandes sont a adaptés en fonction de votre serveur .
un petit coup de nmap :

Le service apache a bien changer de port .
Maintenant nous allons mettre netcat en écoute sur le port 80 , pour ce la on va créer un simple script que netcat va utiliser pour transférer tous les communication qui normalement sont adressé au serveur sur le port 80 vers sont le nouveau port 8080 et en meme temps enregistrer tous les donnés que netcat recoit , après tout c'est le but ^^.

 code : script_sniffing
    1  #!/bin/bash
    2  nc -o /tmp/sniff.out 192.168.1.2 8080 // va transférer les donnés au PORT 8080

A la ligne  1 on appelle l'interpréteur de commande, Dans deuxième ligne on utilise une première instance de netcat pour se connecter au serveur sur le port 8080 et en enregistrant les donnés transmis dans le fichier /tmp/sniff.out que nous allons récupérer pour l'analyser les donnés enregistré tranquillement chez nous ^^   .
Bien évidement  netcat doit etre disponible sur le serveur cible , si ce n'est pas le cas installer le ;)  .

Maintenant nous avons tous les éléments nécessaire pour mener a bien notre attaque  .Il suffit de créer une deuxième instance de netcat en écoute sur le port 80  en appelons le script "script_sniffing" crée plus haut avec le flag -e (permet d'exécuter des scripts passer en agrument) .
cmd : chmod 777 script_sniffing //si vous rencontrer des problèmes de permissions meme //en root
cmd : nc -l -p 80 -e script_sniffing 


Garder a l'esprit que l'attaque se termine dès que la connexion sur le port 80 est finit . Mais pour le tuto ca reste suffisant .
Passons a la phase de test, un simple test ou le login et le mot de passe sont envoyés en clair avec la méthode GET.


Netcat va recevoir les donnés password et login,  les enregistrés dans le fichier sniff.out et ensuite  les transmettre au serveur sur le port 8080, la victime ne s'apércoit de rien .

Analysons les donnés enregistrer dans ce fichier
cmd : head -10 sniff.out  (+ d'infos sur la commande head )

 
Maintenant que nous avons récupérer le login et le mot de passe , on peut les utiliser pour récupérer plus d'informations en se connectant avec sur le serveur par exemple.
Pour éviter ce genre d'attaque , il faut scanner régulièrement  les ports élevé et pas seulement ceux par défaut ou encore installer des logiciels qui génèrent des alertes lors d'un changement de port par exemple   .
               

            jeudi 10 juin 2010

            Identification des services

            Maintenant que nous connaissons le système d'exploitation de notre cible, il sera plus facile de déterminer la nature des services qui tourne sur notre machine cible.Il existe deux méthodes pour identifier l'application , banners (une entete en quelque sorte que l'application utilise pour se présenter ;) ) et l'analyse de paquet .
            La première méthode consiste a se connecter au service inconnu sur un port et espérer que l'application nous fournissent des informations sur le service lui meme (banners) .
            La deuxième méthode consiste a capturer le traffic réseau sortant d'un port et analyser les donnés , c'est plus compliquer car il faut lire le paquet TCP/IP et déterminer le protocol utilisé en analysant les donnés pour vérifier la nature du service .
            Banner Grabbing :
            Dans la figure suivantes , on va lancer Nmap avec le flag -sV , qui va essayer de rassembler les informations retournés par chaque applications (banners) .
            Les informations peuvent etre utilisé aussi pour identifier l'OS.
            cmd : nmap -sV 192.168.1.100

            ICI par exemple ,il s'agit d'OS sous linux, slax plus précisément et pour chaque service Nmap donne la version et l'application utilisé par exemple le serveur openSSH v.4.3 écoute sur le port 22 .

            Attention : les informations fournis par les applications sont peut etre fausses . Quand les développeurs font les mise a jour, il ne modifie pas souvent ce genre d'informations ;) .
            Testons par exemple le SSH service avec telnet , sur une autre cible (192.168.1.3) :
            cmd : telnet 192.168.1.3 22

            Comme vous pouvez le voir l'application qui tourne sur la machine cible nous informe que nous somme connecté a un service SSH (openSSH) compilé pour debian OS .

            Enumérer les ports inconnus  :
            Si vous avez un doute sur quelle service tourne sur un port en particuluer  , on peut essayer d'identifier en se connectant au port manuellement et regarder les type réponses renvoyer par l'application.  Pour ce la on peut utiliser netcat

            cmd : nc adress_ip   port
            ex    : nc 192.168.1.100 80

            Ensuite il suffit de taper des requette au hasard et attendre la réponse de l'application .Ici on voit que le service nous répond avec du HTML ,ce qui implique qu'un serveur http tourne bien sur le port 80 ^^.

            Identifier le système(OS)

            Maintenant que nous connaissons quelle ports sont ouverts sur notre machine cible, nous allons essayé d'indentifier l'OS de notre machine cible .La plus part des exploits sont écrits pour une applications en particulier ( meme la langue est prise en compte dans certains cas) , il donc essentiel de bien connaitre la cible pour trouver des vulnérabilités .
            Active OS Fingerprinting
            Nmap est capable des scanner un système et trouvé son OS de base . Dans la figure ci-dessous , on peut voir le résultat d'un OS scan sur 192.168.1.100 .
            cmd : nmap -O 192.168.100  


            Nmap a identifié le système comme Linux 2.6.x et nous donne une plage de version sur les quelles on peut travailler .
            Il existe un autre tool qui fait permet de faire le meme travail il s'agit de XProbe2 .dans la figure ci-dessous ,on peut voir le résultat du scan  de 192.168.1.100 :
            cmd : xprobe2 -p tcp:80:open 192.168.1.100

            Ca confirme bien le résultat trouvé avec nmap , la machine cible utilise une version 2.6 de linux.
            Passive OS Fingerprinting 
            Identifier l'OS d'une cible  passivement demande beaucoup de patience .En effet , l'objectif est de capturer des paquets TCP et et les exploiter pour obtenir des informations , et en déduire l'OS de la cible . Le problème est que l'attaque passif est très difficile sans que notre machine n'entre en contact avec la machine cible (ce n'est plus une attaque passif ) , a moins que notre machine soit capable de capturer tous le traffic circulant sur le réseau ,en mettant la main sur un routeur par exemple avec un outil comme  p0f , je vous conseille de lire cette article très bien fait  : FR-fingerprinting .

            Utilisé ce type d'attaque pendant un projet de pentesting est une très bon facon de devenir indétectable sur le réseau et par les admins réseaux .

            Une autre technique consiste utilisé le protocol ARP ,plus précisément le ARP poisoning (ou encoreARP poisoning )  pour forcer la cible a communiquer avec nous .  
            Notre réseau avant l'attaque arp : la victime et le serveur communique en passant par le switch :
            Maintenant lancons l'attaque ARP en utilisant l'outil arpspoof :
            cmd : arpspoof -i eth0 -t 192.168.1.100 192.168.1.254

            par exemple 192.168.1.254 est l'ip de notre passerelle .
            après l'attaque ARP : tous les communication qui s'adresse a 192.168.1.100 passeront par la machine de notre pentesteur .
            A partir de la il suffit de lancer p0f , avec arspoof toujours en marche  (dont j'ai parler plus haut ) et attendre qu'il identifie l'OS .^^
             cmd : p0f -A
            Attention : l'ARP est une méthode agressive ,et peut provoquer un dénie de service facilement , ne pas l'utiliser sur des machines critique  (serveurs mail par exemple.).

            mercredi 9 juin 2010

            Port scanning avec Nmap

            Nmap est un scanner de ports open source pour détecter les ports fermé | ouvert | filtré  mais aussi pour obtenir des informations sur les système d'exploitation d'une machine distante . Très utilisé par les administrateurs réseaux , cette outils donne des informations sur la sécurité de votre réseaux .
            Dans cette article j'aborde très rapidement netcat , pour monter qu'il peut etre utilisé comme un scanner mais l'article reste entièrement consacré a Nmap .
            Avant de débuter de scanner les ports d'une cible il est nécessaire et prudent de vérifier son existence, pour cela on va utiliser le protocol ICMP .
            requete ping : cmd : ping adress_ip

            Nmap Ping Scan : cmd : nmap -sP  adresse_ip


            le champ TYPE du header du message ICMP :
            8 = echo request : vers la machine cible
            0= echo reply : réponse de la cible

            si la requete n'aboutit pas cela ne vaut pas forcément dire que la cible n'existe pas mais peut etre qu'elle est configuré pour ne pas répondre a ce type de requete pour plus de sécurité .

            Le nmap scan lui , est capable de détecter la présence d'une cible meme si le traffic ICMP est bloqué , en effet le ping nmap envoie deux datagramme , un ICMP echo request et un packet TCP ACK , ce dernier détecte la présence de notre cible.

            Passive scans
            si on se trouve sur le meme ségment que la victime ou dans le chemin du paquet , il est possible d'écouter le réseau pour détecter les machines connectés .l'avantage est que nous somme pas obliger d'envoyer des paquets , et ainsi cacher nos intentions .

            on peut utiliser netdiscover sous linux : cmd : netdiscover
            TCP scanning
            les applications les plus intéressante lors d'un pentest utilise TCP pour communiquer a travers le réseau (web servers , ftp , base de donnés et bien plus ). il y a différents outils pour déterminer le status d'un port , ici j'utiliserai Nmap et Netcat . Ces outils analysent les TCP headers pour identifier les services qui tournent derrière un port précis . le plus intéressant dans le header sont les bits de control (106èmes bit) URG ,ACK ,PSH ,RST ,SYN et FIN. Ces bits de control sont utilisés pour assurés la fiabilité de la connexion entre deux systèmes .

            un scan avec netcat des ports 20 a 25 : 

            cmd : nc -z -vv -w adress_ip Range_port
            Ex   : nc -z -vv -w 192.168.100 20-25

            Dans ce scan on voit que plusieurs que plusieurs port sont ouvers , 25 (smtp) , 23 (telnet) , 21 (ftp) par exemple, mais ca ne vaut pas dire que ce sont les bon services , netcat n'affiches que des suggestions , il n'affiche aucune donnés pour confirmer quelle application tourne derrière , nmap peut faire ca ;).

            un scan basic avec nmap : cmd : nmap adress_ip

            Nmap nous affiche une liste de ports avec le "service" qui tourne derrière , attention comme meme car un administrateur réseau peu modifier ces informations et ainsi fausser le rapport de nmap , et c'est recommandé pour tromper l'ennemi ^^.
            "nmap 192.168.1.100" n'utilise pas toute la puissance de nmap , il nous donne une vue rapide de notre cible mais pas ce qui est réellement notre cible. ce scan ne fait qu'envoyer une simple connexion tcp et attend la réponse mais ne complète pas le TCP three-way handshake . Il est possible que le parfeu filtre les paquets et nous fournit de fausse informations . Voyons des techniques plus avancés de nmap.

            TCP connect scan (-sT) :
            Le Tcp connect scan est le moyen le plus fiable pour déterminer l'activité d'un port , il réalise un complet Three-way hanhshake .



            L'inconvénient de ce scan est qu'il génère du traffic et qui peut etre détecté par IDS (détecteur d'intrusion) et ainsi révéler notre présence . l'avantage du Tcp Connect est qu'on peut déterminer avec certitude ,si une application est présente ou pas.


            TCP SYN stealth Scan (-sS) : Ex : nmap -sS 192.168.1.100
            TCP SYN est le scan par défaut de nmap (nmap ou nmap -sS ) .contrairement au TCP connect , le SYN stealth réalisent un half-open connection comme vous pouvez le voir sur la figure suivante :


            Après avoir récus un SYN\ACK de la part du serveur cible , le pirate termine la connexion avec un RST (TCP reset). L'avantage de cette attaque est bien sur de réduire le traffic en ne complétant pas le three-way handshake , et rester discret face au IDS mais le réel avantage est d'accélérer la vitesse du scan des cibles .

            RPC Scan (-sR) :

            Ce scan est utilisé pour identifier le service RPC (Remote Call RPC) sur notre machine cible . Le scan vérifie si le service est présent . Les RPC sont des programmes qu'on peut utilisé pour comme si il etait installé sur notre propre machine depuis la machine cible il est donc possible de les attaquer et nous donner les privilèges élevé dans le système cible d'ou l'importance de vérifier leurs existence lors d'un pentest ;) .

            cmd : nmap  -sR address_ip


            Nmap possède beaucoup d'options différentes pour énumérer un système cible , certaine d'entre elles sont utilisées pour éviter les par-feus en , voici un détails de ces paramètres :

            • ACK scan (-sA) : active le bit ACK , Ce scan va envoyer un accusé de réception au système cible, dans l'espoir que le pare-feu prendra une communication en croyant qu'elle existe déjà entre l'attaquant et le système cible .
            • Fin scan (-sF) : Ce scan porte sur la bit FIN, qui ne devrait être présente qu'a  la fin d'une session TCP FIN est envoyé vers le système cible, dans l'espoir que le pare-feu prendra en charge cette communication en croyant qu'elle existe déjà entre l'attaquant et le système cible. En général le pare-feu qui filtre seulement les paquets SYN (filtrage simple de paquets), possible qu'il laisse FIN passer et donc inapércu.
            • Null scan (-sN) : une attaque "Null" est quand un paquet est envoyer avec tous ces bits de control a zero. Le paquet est envoyé vers le système cible dans l'espoir que quelque chose se plaint à propos du paquet - de préférence le système cible.En général si le parfeu filtre seulement les paquets SYN (filtrage simple de paquets) ,  le paquet vide pourrait aller inaperçu.
            • Xmas Tree scan (-SX): Une attaque Xmas Tree scan est celui où tous les flags sont activés dans un paquet TCP. Comme un paquet avec tous les bits de contrôle activé ne veut rien dire dans le protocole TCP, le pare-feu peut laisser l'attaque passer, généralement si il ne filtre que les paquets SYN (filtrage simple de paquets) et ne peut pas donc être la recherche de ce type d'anomalie.
            Ces quatre scans sont utilisées pour détecter les systèmes et les protocoles qui sont actives, mais le faire en manipulant le protocole TCP de manière à ne pas se conformer à la norme pratiques de communication.

            Null Scan Attack (-sN) :
            Le Null scan renvoi le meme  a peu près le meme résultat que le TCP SYN scan , a une différence près , est que nmap ne sais pas si c'est le port est réellement ouvert ou filtrer .
            D'après le RFC 793, si un port est fermé  un RST (tcp reset) doit etre renvoyer par le système et si le port est filtré un erreur devra etre renvoyer, comme par exemple une impossibilité de connexion (ICMP unreachable error) . Dans notre cas aucune erreur ,ni RST n'a été envoyer pas le système cible ,le paquet doit sans doute etre rejeter par le système cible ou par un par-feu , si le système la rejeté ,cela vaut dire qu'une application  tourne derrière le port,  la recu et la rejeter , il faut donc faire des scans plus précis  , sans doute avec d'autre tools que nmap ;).

            ACK scan (-sA)
            La figure montre le traffic capturé lors d'un ACK scan sur la cible avec nmap .on peut voir que nmap (192.168.1.4) envoie une séries de paquets TCP ACK vers le système cible (192.168.1.100). la cible répond avec une requete  RST ,parce Le ACK  n'etait pas attendu et ne fat parti d'aucune communication prétabli.
            si nmap recoit un RST , il classe le port comme unfiltered  (deuxième figure) 8 ports dans ce cas , sinon si il recoit un ICMP reply ou rien , il classe le port comme filtré ,dans ce cas 992 ports sont filtrés.
            si notre machine cible n'etait pas derrière un parfeu ,on aurait 992+8  unfiltered ports . A partir de ces informations, on devra ajuster notre attaque pour prendre en compte le parfeu  , qui devient une deuxième cible .


             FIN ( -sF) et Xmas  Tree(-xS) scans :

            Dans la figure suivante on peut voir le scan contre le cible 192.168.1.100 . on voit que deux ports sont classer comme fermé ,ce qui indique qu'un RST a été renvoyer pendant le scan des ports 20 et 443 . parce que nous savons que la cible utilise un par-feu avec avec filtrage simple de paquets ,  il doit y avoir une erreur de configurations du parfeu ,qui permet une communication sans entrave au moins avec ces deux ports , dans le cas contraire les deux ports serait considéré comme open|filtered

            Les quatre paramètres qu'on vient de voir sont utiles pour connaitre les services qui tournent derrière ou si la cible se trouve derrière un par-feu . d'autre méthodes existe , et consiste a manipuler les autres champs d'un paquet TCP , voir scapy .

            vendredi 19 février 2010

            Installer Ubuntu sous Windows

            Ubuntu est une distribution GNU/Linux basée sur Debian et destinée à proposer un système convivial, ergonomique, libre et gratuit y compris pour les entreprises. Initialement conçu pour tous les ordinateurs de bureau (fixe ou portable).
            Si vous etes intéresser  par ce système d'exploitation  mais que vous voulez garder windows , voici la procédure a suivre ^^ :
            Attention minimum 512 mo de ram requis.
            D'abord il faut le télécharger gratuitement bien sur :  http://www.ubuntu-fr.org/telechargement   puis il suffit de graver le fichier l'iso ou encore commander des CD gratuitement :) :

            page de téléchargement

            CD ubuntu commander recu par la poste une semaine 
            plus tard ...c'est plus jolie non ^^

            Maintenant en possession de votre CD de ubuntu , lancer le cd-rom, ensuite explorer le cd et lancer le seul executable disponible wubi.exe :

            Enuite pour commencer l'installation de ubuntu comme un simple logiciel, cliquer sur INSTALLER DANS WINDOWS :

            Une fenetre d'installation apparait : il suffit d'entrer un login ,un mot de passe et très important, la taille de disque que vous lui donner tous depends de vos besoin ,16 GO reste correcte.

            Et Voila il suffit d'attendre plusieurs minutes pour finir l'installation ensuite redémarrer votre ordinateur pour finir l'installation .
            A chaque démarrage vous aurez le choix entre ubuntu ou windows, un dual boot quoi :) .

            Pour supprimer ubuntu ,il suffit de se rendre dans panneaux de "configuration /programmes->désinstaller un programme" et le sélectionner :

            transformer ubuntu en backtrack 4


            Backtrack 4 est une distribution linux tournant sur un LiveCD qui permet de faire des tests de sécurité sur son réseau… ou de pirater son reseau wifi pas celui du  voisin :) . Elle contient tout ce qu’il faut en outil pour « pénétrer » n’importe quelle machine ou routeur.

            En voulant installer la distrib en dual boot ,je me suis rendu compte que mon pc portable est tatoué or toute installation d'un autre système d'exploitation fait planté l'ordinateur au démarrage, je me suis tourné vers ubuntu 9.10 qui disposait d'une fonctionnalité qui permet de l'installer comme simple logiciel sous windows tous en gardant le dual boot au démarrage (en savoir +).

            Après un recherche sur internet ,j'ai trouver des mini-tuto en anglais (que je traduirai si j'ai le temps ^^)  qui expliquent comment installer les outils de backtrack 4 sous ubuntu  :

            1) D'abord il faut commencer par créer un menu sous ubuntu qui va accueillir les liens vers les différents outils, en voici un aperçu :
            l'explication se trouve ici  http://micksmix.wordpress.com/   

            2) Enfin Après l'installation du menu il faut maintenant télécharger les différents outils depuis les dépots de backtrack, encore une fois c'est assez simple a comprendre , l'explication se trouve ici http://micksmix.wordpress.com
            Si vous avez un problème ,n'hésiter pas lire les commentaires posté a la fin de chaque explication ca peut aider ^^.