---
# System prepended metadata

title: Guide de déploiement et d'utilisation final

---

# Guide de déploiement et d'utilisation final

L'objectif du projet STEGANODON est d'aider les enquêteurs forensics numériques à identifier rapidement la technique la plus probablement utilisée pour masquer des données dans une image.

Le produit final est un modèle de machine learning entraîné, avec lequel on intéragit via une applicaiton web.

Le document est divisé en deux grandes parties. Tout d'abord, la première partie détaille le déploiement du système pour entraîner le modèle de l'application. Puis, la seconde partie explique l'utilisation de l'application.

## Déploiement du produit

Le système utilisé pour entraîner le modèle est un serveur équipé d'une carte graphique pour effectuer les calculs.

### Prérequis

Les  prérequis nécessaires avant de passer à la configuration du serveur de calcul sont : 

- Un OS Ubuntu 20 LTS installé;
- Un compte `user:V@nnes56;` dans le groupe sudo ;
- Une connexion Internet.

La carte graphique n'est pas obligatoire, mais elle permet d'accélérer le temps de calcul.

### Installation des pilotes de la carte graphique

On commence par installer les pilotes de la carte graphique. Pour notre projet, nous disposons d'une carte graphique *Nvidia RTX 2070 6Go*.

Plusieurs éléments doivent être installés avant d'utilier la carte graphique NVIDIA : 

1. Installation des drivers de la carte graphique ;
2. Installation de CUDA pour compiler des programmes pour GPU ;
3. Installation de la librairie cuDNN qui facilite les calculs de réseaux de neurones.

**Installation des drivers** : 

```bash
# afficher le matériel graphique
sudo apt install hwinfo
hwinfo --gfxcard --short

# afficher les drivers recommandés
sudo apt install ubuntu-drivers-common
sudo ubuntu-drivers devices

# installer les drivers recommandés
sudo ubuntu-drivers install

# redémarrer le serveur
sudo reboot

# afficher la version des drivers NVIDIA
sudo nvidia-smi
```

**Installation de CUDA** : 

```bash
sudo apt install nvidia-cuda-toolkit

# afficher la version de CUDA et la noter (ex: 10.1)
nvcc --version

# compiler le fichier hello.cu pour tester le bon fonctionnement
cd /tmp; nvcc -o hello hello.cu && ./hello # fonctionne si l'output affiche Max error: 0.000000
```

**Installation de cuDNN** : 

Télécharger la version de cuDNN qui correspond à la version de CUDA sur https://developer.nvidia.com/rdp/cudnn-download : 

```bash
# copier puis décomprésser l'archive
cd /tmp; tar -xzvf cudnn-10.1-linux-x64-v8.0.5.39.tgz
sudo cp -v /tmp/cuda/include/cudnn.h /usr/lib/cuda/include/
sudo cp -v /tmp/cuda/lib64/libcudnn* /usr/lib/cuda/lib64/
sudo chmod a+r /usr/lib/cuda/include/cudnn.h /usr/lib/cuda/lib64/libcudnn*
```

### Configuration du serveur de calcul

Pour le reste de la configuration, nous avons fait une recette Ansible qu'il suffit de lancer pour terminer la configuration.

Cette recette effectue les tâches suivantes : 

- réglage de l'heure ;
- installation des paquets utiles ;
- création des utilisateurs et du répertoire partagé ;
- configuration SSH ;
- finalisation de l'installation des pilotes Nvidia (tâches qui ont pu être automatisées) ;
- configuration de l'environnement virtuel de python.

Ansible permet d'automatiser les tâches d'administration. Comme les tâches sont décrites avec une syntaxe relativement simple, les recettes (suite de tâches) constituent aussi une documentation de la configuration du serveur.

Pour récupérer la recette de configuration, il faut cloner le dépôt sur une machine autre que le serveur de calcul : 

```bash
# cloner le dépôt
git clone https://github.com/Natsec/steganodon.git

# aller dans le répertoire ansible
cd steganodon/ansible

# installer ansible et sshpass
apt install ansible sshpass

# lancer la recette ansible
ansible-playbook playbook.yml
```

Le serveur de calcul est maintenant configuré.

### Récupération des fichiers de développement

Pour récupérer les fichiers de développement du modèle, on fait la même chose sur le serveur de calcul : 

```bash
# cloner le dépôt
git clone https://github.com/Natsec/steganodon.git

# aller dans le répertoire de développement
cd steganodon/
```

C'est dans ce répertoire que se trouvent les fichiers qui effectuent l'entraînement du modèle.

### Génération des datasets

Génération du dataset simple (RAINBOW-6) : 

```bash
# génération des images simples
cd /opt/dataset-simple
bash /opt/steganodon/dataset-generator/rainbow-six.sh

# création des images stego
python3 dataset-generator.py
```

Génération du dataset ALASKA2 : 

```bash
# téléchargement du dataset ALASKA2
wget http://alaska.utt.fr/ALASKA_v2_RAWs_scripts.zip
unzip http://alaska.utt.fr/ALASKA_v2_RAWs_scripts.zip
chmod +x ALASKA_v2_RAWs_download_script.sh
bash ALASKA_v2_RAWs_download_script.sh

# conversion des images cover du format RAW vers PNG et recadrage en 512x512
cd /opt/Alaska/Conversion_script/devHome/ALASKA_v2_RAWs
bash /opt/steganodon/dataset-generator/raw2cropped-png.sh

# création des images stego
python3 dataset-generator.py
```

On obtient le résultat suivant : 

```bash
# répertoire contenant les cover images (PNG en 512x512)
cover-images/
|-- 00041.png
|-- 00046.png
|-- 00051.png
|-- 00055.png
|-- 00056.png
|-- 00058.png
|-- 00061.png
|-- 00068.png
|-- 00073.png
|-- ...

# répertoire contenant les stego images (PNG en 512x512)
stego-images/
|-- lsb_00041.png
|-- lsb_00046.png
|-- lsb_00051.png
|-- lsb_00055.png
|-- lsb_00056.png
|-- lsb_00058.png
|-- lsb_00061.png
|-- lsb_00068.png
|-- lsb_00073.png
|-- ...
```

### Entraînement du modèle

Procédure d'entrainement du modèle : 

```bash
cd /opt/steganodon/lsb-cnn
python lsb-cnn.py
```

### Observation des résultats avec tensorboard

Pour lancer tensorboard, il faut lancer un seveur local et le mettre en écoute : 

```bash
cd /opt/steganodon/lsb-cnn
sudo /opt/gpu_virtualenv/bin/tensorboard --logdir ./logs/ --port 443 --bind_all
```

Lorsqu'on accède à l'url http://172.16.22.1:443, on obtient alors l'interface web de tensorboard qui permet d'accéder aux statistiques d'entraînement : 

![Interface Tensorboard](https://i.imgur.com/7jhGANH.png)

## Utilisation du produit

Une interface web a été développée. Elle permet à un utilisateur d'uploader une image sur le serveur qui sera analysée par le modèle CNN. Après le traitement, le serveur retournera une hypothèse basée sur le modèles suggérant que l'image fournie contient ou non un secret.

![Interface web](https://i.imgur.com/SVpVWnf.png)
