--- title: "Sécurité des réseaux : Commandes utiles" date: 2022-12-01 tags: ["nmap", "tcpdump", "MitM"] categories: ["Sécurité des réseaux", "TD"] --- Le but de cet article est de répertorier les commandes uiles que nous avons utilisés lors de différents TD et d'expliquer le contexte d'utilisation. ## Nmap map est le couteau suisse du scan de port. Il ppeut être utilisé en attaque mais aussi en défense préventive (test de sa propre infrasctucture). ### découverte de l'hôte seulement ``` nmap -sn ``` ### déterminer les versions ``` nmap -A -sV ``` * `-sV`: lance un scan en essayant de déterminer la version des services en écoute * `-A`: affiche plus d'informations ### Les différents type de scan * `nmap -sS `: *SYN* scan * `nmap -sX `: *XMAS* scan * `nmap -sF `: *FIN* scan ### Temporiser Il est possible de temporiser les différents scan afin de se rendre un peu plus discret avec l'option `-T `. `` étant un chiffre de 0 (plus lent) à 5 plus rapide. ## Spoof ARP La command `arpspoof` permet de faire de l'*ARP* cache poisoning en utilisant la technique du *flood* afn de noyer les hôtes du réseau d'annonces. ``` arpspoof -i -r -t ``` Empoisoser le cache de `` -- ou de tout le reseau si `-t` n;est pas utilisé -- pour détourner le trafic de `` ## TCP dump `tcpdump` est un outils de capture de trame réseau en ligne de commande. Il est possible de le lancer simplement afin qu'il affiche les informations sur la sortie standard: ``` tcpdump -i -n ``` * `-i` périphériue à écouter * `-n` ne résout pas les adresse IP vers le nom d'hôte Dans le cadre d'un TD cette méthode peut suffire, mais dès que le traffic réseau devient plus important, il est plus difficile de suivre. On peut alors capturer le trafic pour l'analyse avec un outils comme *Wireshark*: ``` tcpump -i -n -s 1500 -w ``` Ici `-s 1500` limite la taille des paquets à capturer à 1500 bits hitoire de ne pas tronquer les trames. On peut spécifier `-s0` pour ne pas donner de limite. `-w ` écrit la capture dans le fichier `` en mode binaire ### requête Il est aussi possible de faire en sorte de filter le traffic capturé. ``` tcpdump -i 'tcp and src and 80' ``` Ici on capture les trames *TCP* donc la source est `` et sur le port 80. ### Utiliser les outils usuel Pour utiliser les outils usuels tels que `grep`, `awk` ou `sed` avec *tcpdump*, il faut activer le mode *buffered line* avec le drapeau `-l`, il est aussi conseillé d'activer le mode verbeux avec `-v` (ou `-vv` pour avoir plus de détails): ``` tcpdump -v -l -n 'port http' | grep 'Host\|User-Agent' ``` L'exemple ci-dessus affiche le champs `Host` et `User-Agent` d'une connexion http. ## Iptables ### rediriger le traffic sur la machine locale Lors d'un forward, il est possible de rediriger le traffic sur la machine locale avec l'option `-j REDIRECT`. Cette option s'utilise sur la table `nat`. voici un exemple pour le traffic http: ``` iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 8080 ``` ## SSH SSH est bien plus qu'un outils pour se connecter sur un TTY à distance de manière sécurisée. Il est possible de faire des rebonds, de rediriger les connexions, créer des tunnels etc. Certaines options de la ligne de commande peuvent être interessante: * `-f`: passer SSH en tâche de fond et rendre la main. Utile pour les tunnels * `-N`: ne pas exécuter de commandes, utile lorsqu'on redirige simplement des ports. * `-n`: ne rien lire sur l'entrée standard, utile pour juste lancer une application sur le serveur cible * `-T`: ne pas allouer de pseudo terminal (mode non-interactif) * `-t`: forcer l'allocation de pseudo terminal ### Connexion par rebond Le principe: utiliser un serveur pour faire un rebond et ainsi accèder à une machine non accessible ``` ssh -J ssh.domain.com leserveur.domain.local ``` Je me connecte ainsi à `leserveur.domain.local` en passant par `ssh.domain.com` Il est possible d'automatiser le rebond dans le fochoer de configuration de ssh (`~/.ssh/config`): ``` # Se connecter à mcgonagall en passant par jaguar Host mcgonagall Hostname mcgonagall ProxyJump @jaguar.emi.u-bordeaux.fr User ``` ### Créer un tunnel Il est aussi possible de créer un tunnel sécurisé afin d'accéder à une resource d'un réseau local en passant par un serveur SSH: ``` ssh -L 8443:192.168.0.254:443 ssh.domain.com ``` Ici la connection se fait commme suit: ``` localhost:8443 -> ssh.domain.com -> 192.168.0.253:443 ``` Il est possible de faire l'inverse avec `-R` ### Proxy SOCKS Il est possible de créer un proxy socks afin de faire une redirection de ports dynamique (avec des applications qui le supporte): ``` ssh -D 9050 -Nf ssh.domaine.com ``` Il est par exemple possible de configuer son navigateur web afin d'utiliser ce proxy poyr y faire transiter les données. Le site visité identifira sa source comme `ssh.domain.com`. #### proxychains Proxychains est un logiciel permettait de "proxyfier" n'importe quel logiciel. Il est par exemple possible de lancer un scan de port via un proxy socks pour être au plis près de sa cible. La configucation se fait dans le fichier `/etc/proxychains.conf`, dans notre exemple plus haut il faut ajouter la ligne si elle n'y est pas: ``` socks4 127.0.0.1 9050 ``` Puis lancer un scan de ports en préficant la commande de `proxychains`: ``` proxychains nmap -sV macile.domain.com ``` ## Gnutls ### Mettre en place un serveur / client (tester les certificats) Il est possible d'utiliser gnutls pour tester des certificats et s'assurer que tout fonctionne correctement (le certificat de l'autorité de certification par exemple). ``` # sur le serveur gnutls-serv --x509keyfile= --x509certfile= ``` ``` # le client gnutls-cli --x509cafile= ``` ## Openssl ### Création de sa propre CA Voici la commande pour générer la clé et le certificate de notre CA. ``` openssl req -x509 -new -newkey rsa: -noenc \ -key $CANAME.key -sha256 -days 1826 \ -out \ -keyout \ -subj '' ``` NMous allons pouvoir fournir le certificat aux machines voulues pour qu'elle acceptent nos certificats et signer les requêtes en signature. ### Création de certificat Il est d'abord nécessaire de créer une clé et une requête en signature. Ces deux étapes sont réalisable en une seule commande: ``` # générer la clé openssl req -new -newkey rsa: -sha256 -noenc -out \ -keyout -subj ``` ### Signer la CSR Voici la commande pour signer lea requête en signature avec la clé de notre autorité. C'est ici que nous alons définir la durée de validiter du certificat signé. ``` openssl x509 -req -days 365 -in -out -signkey ``` ## Kerberos Quelques commande utiles pour administrer un service Kerberos. ### kadmin.local Comme la commande le suggère, `kadmin` sert à adminstrer le serveur. Une fois la commande lancée, un promp apparait. La commande suivante créée une clé pour l'hôte ``: ``` kadmin: addprinc -randkey host/.example.com ``` `-randkey` permet de générer une clé aléatoire en lieu et place d'un mot de passe. Il est ensuite de créer une clé supplémentaire pour le service nfs par exemple: Ou encore de rajouter un utilisateur à notre royaume ``` kadmin: addprinc .example.com ```