Skip to content
Snippets Groups Projects
zz2-f5-websec.md 10.2 KiB
Newer Older
Title: ZZ2 F5 - Securité logicielle (2/2) - sécurité des applications web
Date: 2019-11-20 10:55
mazenovi's avatar
mazenovi committed
Category: <i class='fa fa-graduation-cap' aria-hidden='true'></i> &Eacute;tudiants
Tags: cours

[TOC]

## Plan du cours

Vincent Mazenod's avatar
Vincent Mazenod committed
### Architecture
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
* [HTTP](slides/1337/http.html)
* [HTTPS](slides/privacy/tls.html#/0/52)
* [JS](slides/1337/js.html)
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
### Pentesting
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
* [Collecter](slides/1337/gathering.html)
Vincent Mazenod's avatar
Vincent Mazenod committed
* [Détecter](slides/1337/detecting.html)
Vincent Mazenod's avatar
Vincent Mazenod committed
    * [Heartbleed](slides/1337/heartbleed.html)
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
### Mécanisme
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
* [Authentification](slides/1337/authentication.html)
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
### Vulnérabilités communes
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
* [Command execution](slides/1337/cmdi.html)
Vincent Mazenod's avatar
Vincent Mazenod committed
    * [Shellshock](slides/1337/shellshock.html)
Vincent Mazenod's avatar
Vincent Mazenod committed
* [Upload](slides/1337/upload.htm)
* [LFI_RFI](slides/1337/fi.htm)
* [XSS](slides/1337/xss.html)
* [CSRF](slides/1337/csrf.html)
* [SQLi](slides/1337/sqli.htm)
    * [Drupalgeddon](slides/1337/drupalgeddon.htm!)
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
### Se protéger
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
* [Top10](slides/1337/top10.htm)
* [anticiper](slides/1337/anticiper.htm)
mazenovi's avatar
mazenovi committed

Vincent Mazenod's avatar
Vincent Mazenod committed
<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>

mazenovi's avatar
mazenovi committed
## 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)
mazenovi's avatar
mazenovi committed

```
VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.2.18.vbox-extpack
mazenovi's avatar
mazenovi committed
```

sous windows vous devrez peut être utiliser le path entier de vboxmanage
mazenovi's avatar
mazenovi committed

```
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
```

### Créer un réseau NAT

mazenovi's avatar
mazenovi committed
```bash
mazenovi's avatar
mazenovi committed
vboxmanage  natnetwork add --netname natwebsec --network "172.16.76.0/24" --enable --dhcp off
mazenovi's avatar
mazenovi committed
```

mazenovi's avatar
mazenovi committed
### Télécharger les images OVA
mazenovi's avatar
mazenovi committed

voir [https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/](https://drive.mesocentre.uca.fr/d/69e5535b0b88425396d7/)

mazenovi's avatar
mazenovi committed
```bash
mazenovi's avatar
mazenovi committed
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
mazenovi's avatar
mazenovi committed
```
<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

mazenovi's avatar
mazenovi committed
```bash
mazenovi's avatar
mazenovi committed
vboxmanage import debian.ova
vboxmanage import proxy.ova
vboxmanage import kali.ova
vboxmanage import thenetwork.ova
vboxmanage ubuntu-server-18.04.ova
mazenovi's avatar
mazenovi committed
```

mazenovi's avatar
mazenovi committed
### 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
mazenovi's avatar
mazenovi committed
![réseau vm](images/etudiants/vm-network.png)

mazenovi's avatar
mazenovi committed
### (optionnel) Mettre en place le port-forwarding sur debian
mazenovi's avatar
mazenovi committed

mazenovi's avatar
mazenovi committed
```bash
Vincent Mazenod's avatar
Vincent Mazenod committed
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"
mazenovi's avatar
mazenovi committed
```

mazenovi's avatar
mazenovi committed
### (optionnel) Se connecter en ssh
mazenovi's avatar
mazenovi committed

mazenovi's avatar
mazenovi committed
```bash
Vincent Mazenod's avatar
Vincent Mazenod committed
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
mazenovi's avatar
mazenovi committed
```

mazenovi's avatar
mazenovi committed
## (fix) En cas de réseau injoignable sur proxy et thenetwork
mazenovi's avatar
mazenovi committed

si

mazenovi's avatar
mazenovi committed
```bash
mazenovi's avatar
mazenovi committed
ping 172.16.76.145 # ping sur kali
mazenovi's avatar
mazenovi committed
```

renvoie

mazenovi's avatar
mazenovi committed
```bash
mazenovi's avatar
mazenovi committed
connect: Network is unreachable
```

vérifier le numéro de votre interface réseau

mazenovi's avatar
mazenovi committed
```bash
student@proxy:~$ ifconfig -a

mazenovi's avatar
mazenovi committed
eth2      Link encap:Ethernet  HWaddr 08:00:27:ae:b5:20
mazenovi's avatar
mazenovi committed
          inet adr:172.16.76.143  Bcast:172.16.76.255  Masque:255.255.255.0
mazenovi's avatar
mazenovi committed
          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)

mazenovi's avatar
mazenovi committed
lo        Link encap:Boucle locale
mazenovi's avatar
mazenovi committed
          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)
mazenovi's avatar
mazenovi committed
```

mazenovi's avatar
mazenovi committed
par exemple ce numéro peut être eth2 (comme ci dessus) au lieu de eth0
mazenovi's avatar
mazenovi committed

il faut alors modifier le fichier /etc/network/interfaces en fonction

mazenovi's avatar
mazenovi committed
```bash
mazenovi's avatar
mazenovi committed
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).
mazenovi's avatar
mazenovi committed

mazenovi's avatar
mazenovi committed
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
mazenovi's avatar
mazenovi committed
auto eth2
iface eth2 inet static
        address 172.16.76.143
mazenovi's avatar
mazenovi committed
        netmask 255.255.255.0
mazenovi's avatar
mazenovi committed
        gateway 172.16.76.1
mazenovi's avatar
mazenovi committed
```

puis activer l'interface réseau

mazenovi's avatar
mazenovi committed
```bash
mazenovi's avatar
mazenovi committed
student@proxy:~$ sudo ifup eth2
mazenovi's avatar
mazenovi committed
```

réessayer

mazenovi's avatar
mazenovi committed
```bash
ping 172.16.76.145 # ping sur kali
mazenovi's avatar
mazenovi committed
```

mazenovi's avatar
mazenovi committed
Ce bug est dû à la numérotation fantaisiste d'Ubuntu des interfaces réseau ...


mazenovi's avatar
mazenovi committed
## liste des vms / noms de domaine
mazenovi's avatar
mazenovi committed

```
mazenovi's avatar
mazenovi committed
# SecLab
172.16.76.143 proxy secured heart.bleed fo.ol #proxied version of dum.my
mazenovi's avatar
mazenovi committed

mazenovi's avatar
mazenovi committed
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
mazenovi's avatar
mazenovi committed

mazenovi's avatar
mazenovi committed
172.16.76.142 thenetwork
mazenovi's avatar
mazenovi committed

mazenovi's avatar
mazenovi committed
172.16.76.1   us.er
mazenovi's avatar
mazenovi committed
```
mazenovi's avatar
mazenovi committed

## Evaluation

* Examen écrit en fin de session
mazenovi's avatar
mazenovi committed

* Un projet à réaliser par binôme

Vincent Mazenod's avatar
Vincent Mazenod committed
### Projet
Vincent Mazenod's avatar
Vincent Mazenod committed
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
Vincent Mazenod's avatar
Vincent Mazenod committed
* 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)

Vincent Mazenod's avatar
Vincent Mazenod committed
**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
Vincent Mazenod's avatar
Vincent Mazenod committed
    * ...
    * README.md
Vincent Mazenod's avatar
Vincent Mazenod committed
    * ...
    * 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

Vincent Mazenod's avatar
Vincent Mazenod committed
* 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
Vincent Mazenod's avatar
Vincent Mazenod committed
#### Critères de notation
Vincent Mazenod's avatar
Vincent Mazenod committed
* 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)
Vincent Mazenod's avatar
Vincent Mazenod committed
* 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)
Vincent Mazenod's avatar
Vincent Mazenod committed
<!--
mazenovi's avatar
mazenovi committed
## Mini projet en binôme
mazenovi's avatar
mazenovi committed

* [Enoncé](https://drive.mesocentre.uca.fr/f/d9e76a8e45934a069890/?dl=1)

Vincent Mazenod's avatar
Vincent Mazenod committed
* [Enoncé](https://drive.mesocentre.uca.fr/f/54bdd1a80c184bbcb63e/?dl=1)
mazenovi's avatar
mazenovi committed

* Rendu le 25/03/2019 à 23h59 dernier délais
mazenovi's avatar
mazenovi committed

    * à [vincent.mazenod@uca.fr](mailto:vincent.mazenod@uca.fr)
mazenovi's avatar
mazenovi committed

      * ```[TP websec]``` dans le sujet du mail ... sinon je vous perds ;)
mazenovi's avatar
mazenovi committed

mazenovi's avatar
mazenovi committed
    * Tous les fichiers nommés en NOMETUDIANT1_NOMETUDIANT2_nomfichier.ext

Vincent Mazenod's avatar
Vincent Mazenod committed
 -->
Vincent Mazenod's avatar
Vincent Mazenod committed

mazenovi's avatar
mazenovi committed
## 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/1w65KH2cnL_DbTKrUT-2AMvQ_p0Ht-wfSJT2YLEB8l7E/prefill)
mazenovi's avatar
mazenovi committed
## See also

* [faire son propre seclab](https://blog.mazenod.fr/faire-son-propre-seclab.html)