Title: ZZ2 F5 - Securité logicielle - sécurité des applications web Date: 2019-11-20 10:55 Category: <i class='fa fa-graduation-cap' aria-hidden='true'></i> Étudiants Tags: cours [TOC] ## Contexte * [Souveraineté](slides/privacy/sovereignty.html) * [Mots de passes](slides/privacy/passwords.html) * [HTTP](slides/1337/http.html) * [HTTPS](slides/privacy/tls.html#/0/52) * [JS](slides/1337/js.html) * [tracking](slides/privacy/tracking.html) ## Pentesting * [Collecter](slides/1337/gathering.html) * [Détecter](slides/1337/detecting.html) * [Heartbleed](slides/1337/heartbleed.html) ## Mécanisme * [Authentification](slides/1337/authentication.html) ## Vulnérabilités communes * [Command execution](slides/1337/cmdi.html) * [Shellshock](slides/1337/shellshock.html) * [Upload](slides/1337/upload.html) * [LFI_RFI](slides/1337/fi.html) * [XSS](slides/1337/xss.html) * [CSRF](slides/1337/csrf.html) * [SQLi](slides/1337/sqli.html) * [Drupalgeddon](slides/1337/drupalgeddon.html) ## Se protéger * [Top10](slides/1337/top10.html) * [anticiper](slides/1337/anticiper.html) <div class="panel panel-success"> <div class="panel-heading"> <h3 class="panel-title">FYI</h3> </div> <div class="panel-body"> <ul> <li>Tous les slides sont fait avec <a href="https://github.com/hakimel/reveal.js">reveal.js</a> <ul> <li>ils sont exportables en pdf en ajoutant <code>?print-pdf#</code> à l'url (à coller juste après le <code>.html</code>) et en passant par l'impression dans un fichier du navigateur chrome ou (mieux) <a href="https://www.chromium.org/">chromium</a> <ul> <li>plus de détails sur l'<a href="https://github.com/hakimel/reveal.js/#pdf-export">export PDF de reveal</a></li> </ul> </li> </ul> </li> </ul> </div> </div> ## Recréer l'environnement de cours dans VirtualBox * testé avec [VirtualBox 5.2.18](https://download.virtualbox.org/virtualbox/5.2.18/virtualbox-5.2_5.2.18-124319~Ubuntu~bionic_amd64.deb) sous [Ubuntu Bionic](http://releases.ubuntu.com/bionic/) * et les [extensions pack associés](https://download.virtualbox.org/virtualbox/5.2.18/Oracle_VM_VirtualBox_Extension_Pack-5.2.18.vbox-extpack) ``` VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.2.18.vbox-extpack ``` sous windows vous devrez peut être utiliser le path entier de vboxmanage ``` "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" ``` ### Créer un réseau NAT ```bash vboxmanage natnetwork add --netname natwebsec --network "172.16.76.0/24" --enable --dhcp off ``` ### Télécharger les images OVA voir [https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/](https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/) ```bash wget https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/files/?p=/debian.ova&dl=1 wget https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/files/?p=/proxy.ova&dl=1 wget https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/files/?p=/kali.ova&dl=1 wget https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/files/?p=/thenetwork.ova&dl=1 wget https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/files/?p=/ubuntu-server-18.04.ova&dl=1 ``` <div class="panel panel-warning"> <div class="panel-heading"> <h3 class="panel-title">FYI</h3> </div> <div class="panel-body"> il y a environ 7 Go d'images, n'hésitez pas à vous les faire passer via des clés USB </div> </div> ### Importer les images OVA ```bash vboxmanage import debian.ova vboxmanage import proxy.ova vboxmanage import kali.ova vboxmanage import thenetwork.ova vboxmanage ubuntu-server-18.04.ova ``` ### Configurer le réseau pour chaque vm ```bash vboxmanage modifyvm debian --nic1 natnetwork --nat-network1 natwebsec vboxmanage modifyvm proxy --nic1 natnetwork --nat-network1 natwebsec vboxmanage modifyvm kali --nic1 natnetwork --nat-network1 natwebsec vboxmanage modifyvm thenetwork --nic1 natnetwork --nat-network1 natwebsec vboxmanage modifyvm ubuntu-server-18.04 --nic1 natnetwork --nat-network1 natwebsec ```  ### (optionnel) Mettre en place le port-forwarding sur debian ```bash vboxmanage natnetwork modify --netname natwebsec --port-forward-4 "ssh:tcp:[127.0.0.1]:1722:[172.16.76.142]:22" vboxmanage natnetwork modify --netname natwebsec --port-forward-4 "ssh:tcp:[127.0.0.1]:1723:[172.16.76.143]:22" vboxmanage natnetwork modify --netname natwebsec --port-forward-4 "ssh:tcp:[127.0.0.1]:1724:[172.16.76.144]:22" vboxmanage natnetwork modify --netname natwebsec --port-forward-4 "ssh:tcp:[127.0.0.1]:1725:[172.16.76.145]:22" vboxmanage natnetwork modify --netname natwebsec --port-forward-4 "ssh:tcp:[127.0.0.1]:1726:[172.16.76.146]:22" ``` ### (optionnel) Se connecter en ssh ```bash ssh -p 1722 mazenovi@127.0.0.1 #thenetwork ssh -p 1723 mazenovi@127.0.0.1 #proxy ssh -p 1724 mazenovi@127.0.0.1 #debian ssh -p 1725 mazenovi@127.0.0.1 #kali ssh -p 1726 mazenovi@127.0.0.1 #ubuntu server 18.04 ``` ## (fix) En cas de réseau injoignable sur proxy et thenetwork si ```bash ping 172.16.76.145 # ping sur kali ``` renvoie ```bash connect: Network is unreachable ``` vérifier le numéro de votre interface réseau ```bash student@proxy:~$ ifconfig -a eth2 Link encap:Ethernet HWaddr 08:00:27:ae:b5:20 inet adr:172.16.76.143 Bcast:172.16.76.255 Masque:255.255.255.0 adr inet6: fe80::a00:27ff:feae:b520/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Packets reçus:24 erreurs:0 :0 overruns:0 frame:0 TX packets:32 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 Octets reçus:4789 (4.7 KB) Octets transmis:4679 (4.6 KB) lo Link encap:Boucle locale inet adr:127.0.0.1 Masque:255.0.0.0 adr inet6: ::1/128 Scope:Hôte UP LOOPBACK RUNNING MTU:16436 Metric:1 Packets reçus:54 erreurs:0 :0 overruns:0 frame:0 TX packets:54 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 Octets reçus:4076 (4.0 KB) Octets transmis:4076 (4.0 KB) ``` par exemple ce numéro peut être eth2 (comme ci dessus) au lieu de eth0 il faut alors modifier le fichier /etc/network/interfaces en fonction ```bash student@proxy:~$ sudo vi /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth2 iface eth2 inet static address 172.16.76.143 netmask 255.255.255.0 gateway 172.16.76.1 ``` puis activer l'interface réseau ```bash student@proxy:~$ sudo ifup eth2 ``` réessayer ```bash ping 172.16.76.145 # ping sur kali ``` Ce bug est dû à la numérotation fantaisiste d'Ubuntu des interfaces réseau ... ## liste des vms / noms de domaine ``` # SecLab 172.16.76.143 proxy secured heart.bleed fo.ol #proxied version of dum.my 172.16.76.144 good.one go.od targ.et 172.16.76.144 mutillid.ae 172.16.76.144 dvwa.com dv.wa 172.16.76.144 d.oc 172.16.76.144 dum.my 172.16.76.144 drup.al hackable-drupal.com drupal 172.16.76.144 wordpre.ss bl.og wp wordpress 172.16.76.144 spip sp.ip 172.16.76.145 bad.guy hack.er 1337.net 172.16.76.142 thenetwork 172.16.76.1 us.er ``` ## Evaluation * Examen écrit en fin de session * Une présentation d'une des 7 failles suivantes par trinôme * [lundi 22/09/2020] Authentification inefficiente ou ressource mal protégée * un objet qui devrait être protégée est accessible sans authentification * on peut obtenir une session * [lundi 29/09/2020] Command execution * il s'agit d'injecter des commandes systèmes (on empiète pas sur le SQLi) * [lundi 6/10/2020] Upload * comment exécuter du code arbitraire à partir d'un formulaire d'upload de fichier * [lundi 13/10/2020] LFI / RFI * injection de paramètre http permettant d'inclure un fichier localement / distant * [lundi 20/10/2020] XSS * faire exécuter du code javascript arbitraire stocké (stored) ou passé en paramètres dan la requête (reflected) * [lundi 03/11/2020] CSRF * exécution d'un commande avec privilège à l'insu de l'utilisateur * [lundi 17/11/2020] SQLi * injection de commandes SQL (les blind sont à traiter) * Vous pouvez vous organiser avec ce [framacalc](https://lite.framacalc.org/HgFrqMT1eZ) * Chaque présentation durera 15 minutes et devra présenter * la vulnérabilité * l'exploitation de la vulnérabilité * l'exploitation d'une vulnérabilité existante dans https://www.cvedetails.com/ est un plus :D * un ensemble de solutions permettant de se protéger * Vous éviterez au maximum de vous aider du support de cours et des exemples qui s'y trouvent (notamment [DVWA](http://www.dvwa.co.uk/)). Si je raconte la même chose que les étudiants qui présentent c'est pas marrant ... <!-- ### Projet #### jwt Vous implémenterez un exemple de protection d'API REST via [JWT](https://jwt.io/) dans l'un des langages au choix * php * nodejs * python Vous implémenterez 2 services et un client * un service de génération et de validation de JWT * un service accessible via REST avec un JWT valide * un client capable d'obtenir un JWT et de l'utiliser pour accéder légitimement à l'API REST Dans un premier temps vous implémenterez des JWT avec mot de passe (chiffrement symétrique) Dans un second temps vous implémenterez des JWT avec des paires de clés publiques / privées (chiffrement asymétrique) **N.B.** "l'api rest" peut se résumer à une url /protected qui renvoie un json en méthode GET. L'implémentation d'une API REST ne fait pas parti du sujet! Dans votre rapport vous analyserez * les avantages et les inconvénients, notamment au niveau de la sécurité, de chacune des deux approches * les conséquences des choix d'implémentation sur * la validation d'un JWT * l'enrolement des clients * la gestion d'une compromission côté serveur #### Rendu Un repo Gitlab sur [https://gitlab.isima.fr](https://gitlab.isima.fr), par binôme, ayant la forme suivante * symetric * ... * README.md * asymetric * ... * README.md * README.md * symetric/README.md et asymetric/README.md contiennent respectivement la marche à suivre pour pouvoir déployer l'implémentation avec des JWT avec mot de passe et avec des clés publiques / privées * le fichier README.md contient votre rapport * vous mettrez l'utilisateur gitlab Vincent Mazenod comme membre en tant que maintainer * vous m'enverrez l'url du repo dans un message mail chiffré avec GPG * le tout avant le 22 mars 23h59 #### Critères de notation * Qualité de l'implémentation, notamment sur l'aspect sécurité (si je passe au travers des sécurités mises en place c'est 0) * Qualité de la documentation de déploiement (si je n'arrive pas à installer le projet en local sur ma machine c'est 0) * Qualité de l'analyse (le rapport n'est pas forcément long il s'agit de présenter tous les scénarios d'utilisation et d'attaque en expliquant les avantages et inconvénients de chacune des deux implémentations) ## Mini projet en binôme * [Enoncé](https://drive.mesocentre.uca.fr/f/d9e76a8e45934a069890/?dl=1) * [Enoncé](https://drive.mesocentre.uca.fr/f/54bdd1a80c184bbcb63e/?dl=1) * Rendu le 25/03/2019 à 23h59 dernier délais * à [vincent.mazenod@uca.fr](mailto:vincent.mazenod@uca.fr) * ```[TP websec]``` dans le sujet du mail ... sinon je vous perds ;) * Tous les fichiers nommés en NOMETUDIANT1_NOMETUDIANT2_nomfichier.ext --> ## Evaluation du cours Vous avez aimé ou vous avez détesté ce cours ... [donnez moi votre avis et aidez moi à l'améliorer (en tout anonymat)](https://docs.google.com/forms/d/1zTH-8YIaW6yGxmIasFjQEnMstCnOaWjnZEuM9VHnRlk/prefill) ## See also * [faire son propre seclab](https://blog.mazenod.fr/faire-son-propre-seclab.html)