Académique Documents
Professionnel Documents
Culture Documents
1. Remerciements ...................................................................................................... 5
2. Présentation personnelle ........................................................................................ 6
3. Présentation de l’entreprise .................................................................................... 7
4. Contexte et motivation de la problématique ............................................................. 8
1. Introduction des enjeux de cybersécurité dans le monde d'aujourd'hui ....................... 8
2. Définition et fonctionnement des scanners de vulnérabilité ......................................... 9
3. Importance de l'interprétation correcte des résultats d’un scanner de vulnérabilités.. 9
4. Les limites des solutions intégrées de rapport ............................................................. 10
5. Environnement de Travail...................................................................................... 12
1. Télétravail ...................................................................................................................... 12
2. Méthodologie de travail ................................................................................................ 12
3. Infrastructure et ressources de l'entreprise ................................................................. 13
6. Missions Ponctuelles ............................................................................................. 15
7. Mission Principale : Présenter les résultats d'une solution d'évaluation des vulnérabilités
19
1. Point de départ .......................................................................................................... 19
Nessus : Présentation et Fonctionnement ....................................................................... 19
Z_Scan............................................................................................................................... 21
2. Restauration du projet Z_Scan .................................................................................. 27
3. Refonte graphique de l'interface de Z_vul_scan ....................................................... 35
Analyse de l’existant......................................................................................................... 35
Choix technologique ......................................................................................................... 37
Actions Réalisées .............................................................................................................. 38
4. Production de graphique avec Excel ......................................................................... 42
Remise en contexte .......................................................................................................... 42
Analyse de l’existant......................................................................................................... 42
Traiter les données de la Base de données vers Excel ..................................................... 44
Limitations : retour des données d'Excel à MongoDB ..................................................... 47
Pourquoi le script ne repose pas sur un modèle défini à l’avance .................................. 48
Utilisation combinée de xlsxwriter et openpyxl............................................................... 49
Indicateurs de performances clés à choisir ...................................................................... 50
3|Page
5. Synthèse sur le projet Z_Scan .................................................................................... 57
6. Perspective et évolutions futures .............................................................................. 58
8. Conclusion ........................................................................................................... 59
9. Annexes............................................................................................................... 60
Introduction aux Annexes ................................................................................................ 60
Description des Annexes .................................................................................................. 60
10. Sitographie .......................................................................................................... 61
11. Fiche de Validation Entreprise................................................................................ 63
4|Page
4. Contexte et motivation de la problématique
Dans ce contexte, les entreprises doivent accorder une attention accrue à la protection
de leurs infrastructures et de leurs données, tout en restant conformes aux réglementations
en vigueur. Les responsables de la sécurité des systèmes d'information (RSSI) et les équipes
de Technologie de l'Information (IT) sont chargés de mettre en place des mesures de
sécurité efficaces pour prévenir et détecter les cybermenaces, tout en assurant la continuité
des opérations et la résilience face aux incidents.
Ces organisations peuvent également faire appel à des prestataires externes, tels que
Cyber Impact, pour effectuer des analyses de vulnérabilité et les aider à identifier et à
remédier aux faiblesses de leurs systèmes informatiques, réseaux et services, on parle alors
d’audit de cybersécurité externe.
Deux des étapes de cet audit consiste en la collecte de données concernant les hôtes,
systèmes, réseaux et applications de l'organisation cible puis en l’interprétation des résultats
en fonction des données recueillies.
Ces étapes peuvent être automatisé via un outil fréquemment utilisé lors d’audit de
cybersécurité : un scanner de vulnérabilité.
8|Page
2. Définition et fonctionnement des scanners de vulnérabilité
Il s'agit d'un logiciel qui scanne les actifs pour détecter les vulnérabilités connues et les
failles de sécurité qui pourraient être exploitées par des attaquants. Les résultats sont
ensuite analysés et présentés aux équipes de l’organisation pour qu'elles puissent prendre
des mesures pour corriger les problèmes détectés.
Le scanner de vulnérabilités réseau peut rechercher des ports ouverts, des services
vulnérables, des systèmes d'exploitation obsolètes ou mal configurés, des identifiants par
défaut, des certificats expirés et d'autres vulnérabilités potentielles.
Les résultats du scan de vulnérabilité réseau peuvent ensuite être utilisés pour identifier
les risques et prioriser les correctifs nécessaires pour renforcer la sécurité de l'entreprise.
L'interprétation correcte des résultats issus des scanners de vulnérabilités est cruciale
pour plusieurs raisons :
Dans un premier temps, la priorisation des actions à mener à l’issue de l’audit : Les
rapports contiennent souvent un grand nombre de vulnérabilités identifiées, en particulier
dans un parc informatique d’entreprise qui peut contenir plusieurs milliers d’actifs. Il est
donc important de prioriser certaines mesures en fonction de leur criticité, de leur impact
potentiel et des ressources disponibles pour y remédier. Une interprétation adéquate des
résultats permet de concentrer les efforts sur les vulnérabilités les plus importantes et
d'optimiser l'utilisation des ressources.
Arrive ensuite la compréhension des risques : L'interprétation des résultats des scanners
de vulnérabilités permet également de mieux comprendre les risques encourus par
l'entreprise. Les rapports indiquant les vulnérabilités identifiées, leur impact business
9|Page
potentiel sur l'environnement informatique, et le niveau de risque associé, il est possible de
mieux comprendre les menaces potentielles auxquelles l'entreprise est exposée. Cela
permet également de mieux évaluer les risques, de prendre des mesures pour les réduire et
de mieux protéger l'infrastructure informatique de l'entreprise.
Dans un premier temps, on peut noter la technicité des rapports, les rapports intégrés
contiennent souvent des informations techniques complexes, qui peuvent être difficiles à
comprendre, particulièrement pour les non-spécialistes, rendant la communication des
résultats aux parties prenantes moins efficace.
10 | P a g e
Il est cependant important d’indiquer que Tenable Nessus offre la possibilité
d'exporter des rapports dans d'autres formats plus adaptés au business intelligence, ces
formats peuvent être beaucoup moins lisibles, notamment pour les personnes non
techniques.
Il était donc nécessaire de développer une solution plus adaptée, afin de mieux exploiter
les résultats des scans de vulnérabilité. Cette solution pourrait inclure des outils de
visualisation de données, pour aider les parties prenantes à mieux comprendre les résultats
des scans. En outre, la solution devrait être conçue pour être plus conviviale, facilitant la
communication des résultats aux non-spécialistes de la sécurité informatique. En intégrant
ces fonctionnalités, les entreprises peuvent mieux tirer parti de leurs efforts de sécurité, en
réduisant la complexité et en améliorant leur efficacité à identifier et à corriger rapidement
les vulnérabilités critiques.
Extrait d’un rapport Nessus au format PDF concernant un réseau vulnérable avec 16 appareils réseaux actifs. 30
pages. Le rapport complet est disponible en tant que ressource externe à ce mémoire au format numérique.
Extrait du même rapport Nessus au format détaillé. 593 pages. Le rapport complet est disponible en tant
que ressource externe à ce mémoire au format numérique.
11 | P a g e
5. Environnement de Travail
1. Télétravail
Mon stage a été effectué principalement en télétravail. Cela a constitué une expérience
enrichissante qui m'a permis de développer mon autonomie, ma discipline et ma capacité à
m'adapter à un environnement de travail numérique.
Bien qu'aucun horaire strict n'ait été imposé par l'entreprise, j'ai choisi d'établir un
planning de travail afin de maintenir des habitudes et assurer une productivité optimale.
Cela m'a aidé à séparer clairement le temps de travail et le temps personnel, ce qui est
crucial lorsqu'on travaille à domicile.
Malgré l'établissement d'un planning de travail régulier, j'ai également fait preuve de
flexibilité en fonction des exigences spécifiques de chaque tâche. Par exemple, si une
mission était proche de son achèvement, je prolongeais parfois ma journée de travail pour
l'achever, plutôt que de la reporter au lendemain. Cette flexibilité a été précieuse pour gérer
efficacement le flux de travail et atteindre les objectifs dans les délais.
Dans l'ensemble, mon expérience de télétravail pendant mon stage a été positive et
éducative. J'ai appris à gérer mon temps de manière efficace, à équilibrer les besoins du
travail avec ceux de ma vie personnelle et à être flexible en fonction des exigences de la
mission. J'ai aussi réalisé l'importance de la discipline personnelle et de la gestion du temps
dans le succès du travail à distance.
2. Méthodologie de travail
J'ai bénéficié d'une grande autonomie quant à la réalisation de mes tâches, ce qui
incluait la priorisation des tâches ainsi que des méthodes à utiliser pour les accomplir. Cela
12 | P a g e
m'a permis de développer mes compétences en matière de prise de décisions et de gestion
du temps.
Néanmoins, il est important de noter que cette autonomie opérationnelle n'était pas
sans contraintes. En effet, certaines tâches nécessitaient le respect de certaines restrictions
techniques inhérentes au métier. Les choix technologiques effectués en amont par mon
tuteur pour ma mission principale conditionnaient mes méthodes de développement.
L’infrastructure réseau, système et les solutions logicielle déjà en place pour les missions
ponctuelles, déterminaient parfois la manière dont je devais mettre ne place de nouveaux
services.
Dans le cadre de ma mission, j'ai travaillé sur des projets de développement complexe
qui nécessitaient une gestion rigoureuse des versions. Pour ce faire, tous les
développements étaient versionnés sur un serveur local. De plus, lorsque j'effectuais des
missions d'administration système, je m'assurais de la sauvegarde des serveurs via des
snapshots après l'exécution des missions. Ces processus garantissaient la sécurité des
données et permettaient une traçabilité et une reproductibilité des travaux effectués.
Ces différentes pratiques ont permis un suivi régulier et efficace du travail, tout en
garantissant un haut niveau de qualité et de sécurité dans la réalisation de mes tâches.
Pour garantir un accès sécurisé à ces ressources, l'entreprise a mis en place un VPN
d’entreprise (Virtual Private Network, Réseau Privé Virtuel) pour garantir un accès sécurisé à
ses ressources.
13 | P a g e
Les serveurs de l'entreprise étaient tous virtualisés grâce à un hyperviseur VMware
vSphere, basé sur l'infrastructure VMware ESXi. Cet hyperviseur était lui-même hébergé sur
un NAS (Network Attached Storage, Stockage en réseau), qui était protégé derrière un
firewall pour garantir la sécurité des données et des services.
L’entreprise possède aussi quelques services déployés sur cette infrastructure. On peut
notamment y trouver un annuaire Active Directory (AD), plusieurs serveurs web, un VPN, des
serveurs de stockage, ainsi que des machines dédiées au développement et aux tests. Ces
dernières m’ont été mise à disposition dans le cadre de mes missions.
Bien que Cyber Impact ne compte actuellement que deux employés, l'entreprise a décidé
de mettre en place un annuaire Active Directory, cela pourrait sembler superflu, cependant,
cette décision répond à un besoin pour des démonstrations pratiques. En effet, l'entreprise
envisage d'organiser des ateliers éducatifs pratiques pour les apprenants. L'AD jouera alors
un rôle crucial pour limiter les droits d'accès des apprenants à des aspects spécifiques du
système, assurant ainsi la sécurité des ressources sensibles de l'entreprise.
L'Active Directory est actuellement utilisée pour tester cet aspect de contrôle des droits
d'accès. Des environnements de test ont été mis en place, dans lesquels les droits d'accès
sont modifiés pour simuler les conditions réelles d'une session d'atelier. Ces tests
permettent de s'assurer que l'AD est correctement configuré et qu'il peut être déployé en
toute sécurité lors de la mise en place des ateliers.
En outre, même si Cyber Impact est actuellement une petite entreprise, l'AD offre des
avantages en matière de sécurité. Il centralise la gestion des droits d'accès, permettant ainsi
une surveillance efficace et une application rigoureuse des politiques de sécurité de
l'entreprise. Par exemple, l'AD peut être utilisé pour restreindre l'accès à certaines
ressources sensibles, même pour les employés de l'entreprise. Il facilite également la
traçabilité des actions des utilisateurs, un aspect clé de la gestion de la sécurité de
l'information.
Ainsi, malgré sa taille actuelle, Cyber Impact utilise l'Active Directory pour préparer son
expansion future et renforcer la sécurité de ses systèmes. Ce choix démontre une vision à
long terme et une compréhension claire de l'importance des bonnes pratiques en matière de
sécurité de l'information.
14 | P a g e
6. Missions Ponctuelles
Un certain nombre de missions ponctuelles m’ont été confiés durant cette expérience
professionnelle. La plupart de ces missions s’avèrent être des tâches standards
d’administration système et réseaux, ce qui m’a permis de continuer à améliorer mes
compétences dans ces domaines.
Au-delà des savoirs-faires techniques, ces missions m’ont également enseigné à travailler
de manière rigoureuse et organisée, à savoir être à l’écoute des demandes et à respecter les
délais impartis pour les réalisations.
Au cours de mon stage, l'une de mes missions a été de mettre en place un serveur de
versionnage utilisant Git. Ce système ne m'était pas exclusivement destiné ; il servait
également à héberger les différentes versions des projets sur lesquels je travaillais. L'objectif
principal de cette mission était d'implémenter une infrastructure efficace pour le suivi des
modifications de code, afin de faciliter le travail collaboratif et la gestion des versions.
J'ai été en charge de la conception et de l'installation du serveur Git, ainsi que de la mise
en place de GitWeb, une interface web pour Git, afin d'améliorer la visibilité et la
compréhension des commits (action d'envoyer ses modifications locales vers le référentiel
central, dans le cadre de l’utilisation d’un logiciel de gestion de version) effectués.
Cependant, cette tâche n'a pas été sans défis. J'ai rencontré des difficultés pour faire
fonctionner correctement Git à travers le protocole HTTP. Les problèmes principaux étaient
liés à des erreurs de permission et d'authentification qui entravaient le bon fonctionnement
du système. Pour les surmonter, j'ai dû m'immerger dans la documentation de Git et dans
divers forums en ligne pour comprendre l'origine des problèmes et trouver une solution
appropriée. Cette recherche m'a permis d'ajuster la configuration du serveur et d'assurer le
bon fonctionnement de Git via HTTP.
Les résultats de cette mission ont été très positifs. Le serveur de versionnage a permis un
suivi efficace et ordonné des modifications du code, et l'utilisation de GitWeb a amélioré la
visibilité des commits pour tous les utilisateurs du serveur.
15 | P a g e
Suite à la mise en place du serveur de versionnage, une autre mission m'a été attribuée :
la création d'un schéma réseau et d'un plan d'adressage IP pour l'infrastructure actuelle,
ainsi que pour les nouvelles machines virtuelles que je générais progressivement. Cette
tâche a constitué un défi particulier en raison de la nature du stage, principalement effectué
en télétravail, et de l'absence d'accès physique aux machines.
Une fois mes hypothèses établies, je les vérifiais en consultant la configuration des
machines auxquelles j'avais accès. Pour les autres, j'ai dû recourir à des méthodes de
déduction indirectes et non standards pour estimer leur configuration et leur position dans
le réseau.
Ces déductions ont servi de base à la création du schéma réseau et du plan d'adressage
IP. Ainsi, le schéma réseau et le plan d'adressage IP que j'ai élaborés serviront donc à
informer ces apprenants de la topologie du réseau actuel. Cela leur permettra de
comprendre le fonctionnement de l'infrastructure et de mieux appréhender les défis liés à la
cybersécurité.
En effet, Cyber Impact a pour ambition de créer des environnements de test destinés à
l'apprentissage des étudiants. Dans le cadre de la diversification de son catalogue de
services, elle envisage à moyen/long terme de proposer des environnements pour mettre en
pratique des notions de cybersécurité, tels que l’administration de pare-feu ou la gestion des
risques et le renforcement de configuration.
Après avoir réussi à créer le schéma réseau et le plan d'adressage IP, et toujours en
parallèle de ma mission principale exposée ci-après, une autre mission m'a été confiée,
toujours en matière de préparation au e-learning. Le but était d'installer Moodle sur une
nouvelle machine virtuelle, pour continuer de servir l'objectif éducatif de Cyber Impact.
16 | P a g e
Pour rappel, Moodle est une plateforme d'apprentissage en ligne open source largement
utilisée dans l'éducation. Elle permet de créer des cours en ligne personnalisés, de gérer les
inscriptions des étudiants et de suivre leurs progrès.
La mise en place de Moodle a présenté plusieurs défis. Tout d'abord, j'ai constaté que la
documentation officielle de Moodle n'était pas à jour en ce qui concerne ses dépendances.
Bien qu'elle les indiquait, certaines dépendances mentionnées n'étaient plus à jour. Pour
résoudre ce problème, j'ai dû consulter les publications des développeurs pour trouver les
dépendances correctes et à jour. Cela a nécessité de la recherche et de la patience, mais n'a
pas représenté un obstacle majeur, car c’est une gêne relativement répandue en ce qui
concerne l’installation de ce genre de service.
Cependant, un autre défi s'est avéré plus difficile à surmonter. L'idée était que les élèves
puissent accéder aux modules d'apprentissage sur Moodle via des comptes, comptes qui
pourraient être créés par Active Directory, une fonctionnalité que Moodle sait gérer puisque
ce service sait interroger un annuaire LDAP3. Cependant, cela impliquait que la machine soit
jointe au domaine de l'entreprise. Pour des raisons encore inconnues, il n'a jamais été
possible de joindre le domaine avec cette machine (ou une autre), ce qui a constitué une
véritable frustration. Il est cependant à noter que qu’il existe d’autre machines linux sur le
domaine mais que des problèmes de synchronisation ont également été constaté.
Malgré ces défis, la mise en place de Moodle a été une expérience précieuse. Elle m'a
permis de développer mes compétences en administration de systèmes et de gérer des
problèmes inattendus. Elle m'a également rappelé l'importance de la persévérance et de la
recherche active de solutions lorsque la documentation officielle est insuffisante ou erronée.
La dernière tâche ponctuelle qui m'a été confiée au cours de mon stage était un projet
assez ambitieux de synchronisation de fichiers entre une machine Ubuntu et une machine
Windows. L'objectif était de créer un script, tant en PowerShell pour Windows qu'en Shell
pour Linux, pour synchroniser un certain type de fichiers - des fichiers Excel dans notre cas -
de manière bidirectionnelle, en se basant sur la date de modification du fichier. Pour rendre
le processus plus réactif et efficace, le script devait également inclure des événements
d'écoute qui déclencheraient la synchronisation dès qu'un fichier était modifié.
17 | P a g e
J'ai décidé d'imposer une contrainte supplémentaire à moi-même : ne pas utiliser rsyncc
et utiliser un système de gestion d'événements. Cependant, après avoir exploré différentes
approches, il est devenu évident que la gestion d'événements de fichiers était une tâche
complexe. Nous avons donc finalement opté pour l'utilisation de rsync de manière
périodique avec Crond sur Linux et le planificateur de tâches sous Windows.
Même si je n'ai pas pu réaliser le projet tel que je l'avais initialement envisagé, cette
mission m'a appris à être flexible dans ma façon de résoudre les problèmes et à être réaliste
dans l'établissement de mes objectifs. J'ai également compris l'importance de la recherche
et de l'exploration des ressources disponibles, même si elles semblent insuffisantes ou non
idéales au premier abord.
18 | P a g e
7. Mission Principale : Présenter les résultats d'une solution
d'évaluation des vulnérabilités
1. Point de départ
Il me parait essentiel de commencer cette partie en explicitant quel a été mon point de
départ et les ressources à ma disposition car cela conditionne beaucoup les tâches, les
raisonnements et les choix qui vont être décrit dans la suite de ce mémoire. Commençons
par le scanner Nessus, qui a motivé cette problématique
Nessus est un outil très réputé dans le domaine de la sécurité informatique, utilisé
pour la détection des vulnérabilités dans le cadre de tests d'intrusion ou d'audits de
sécurité. Développé par Tenable Network Security, Nessus offre une gamme exhaustive
de fonctions qui le distingue des autres outils similaires sur le marché.
19 | P a g e
Vue principale du scanner Nessus et des possibilités offertes par le produit
Au sein de Cyber Impact, Nessus joue un rôle central dans le service d'analyse de
vulnérabilités que nous proposons. Ce service est conçu pour aider nos clients à
comprendre et à gérer les risques potentiels liés à la cybersécurité dans leurs systèmes
informatiques.
Face à la complexité des rapports générés par Nessus, notre objectif était d'optimiser
la communication des résultats à nos clients, en mettant en avant les informations les
plus pertinentes et en rendant les rapports plus accessibles et compréhensibles.
20 | P a g e
En travaillant sur la version « Essentials » de Nessus, nous avons développé une
approche qui, bien que limitée en termes d'échelle, nous a permis de tester et
d'implémenter des solutions qui ont amélioré l'efficacité et la clarté des rapports de
Cyber Impact. Ce travail a renforcé la valeur du service que nous offrons à nos clients et a
contribué à notre objectif d'amélioration continue de la qualité de notre service.
Bien que Nessus soit un outil puissant pour l'analyse des vulnérabilités, l'un des défis
que nous avons rencontrés dans notre utilisation de l'outil concerne ses rapports. Les
rapports détaillés de Nessus peuvent être extrêmement longs et complexes, ce qui rend
difficile pour les utilisateurs de distinguer rapidement et facilement les informations les
plus pertinentes. À l'inverse, les rapports résumés sont souvent trop courts et peuvent
omettre des informations importantes.
Une des lacunes spécifiques que nous avons identifiées concerne l'absence
d'information sur le nombre de machines sur lesquelles un scan authentifié a été
effectué, d’autres lacunes seront traitées lors du développement. Cette information est
cruciale pour évaluer l'étendue de la couverture de notre analyse de vulnérabilités, ainsi
que pour identifier les domaines potentiels où des efforts supplémentaires pourraient
être nécessaires pour garantir l'authentification.
Lors de cette mission, nous avons cherché à trouver un équilibre entre le niveau de
détail et la lisibilité des rapports de Nessus. Nous avons travaillé à la création d'un
système qui compile les données les plus pertinentes des rapports détaillés de Nessus,
tout en présentant ces informations de manière claire et concise. L’objectif était de
fournir aux utilisateurs une vue d'ensemble précise et compréhensible des vulnérabilités
détectées, tout en mettant en évidence les informations clés qui peuvent être manquées
dans les rapports standard de Nessus.
Z_Scan
Dans le contexte de ma mission, un autre outil clé qui a joué un rôle central est
Z_vuln_scan, souvent abrégé en Z_Scan. Il s'agit d'un programme interne sans nom
commercial, conçu comme une application web.
Z_Scan est un outil ancien, conçu en Python 2.7. Python, comme on le sait, est un
langage de programmation hautement flexible et polyvalent, utilisé dans une multitude
de domaines, de la conception de sites web à l'analyse de données. Cependant, Python
2.7 est une version plus ancienne du langage (à l’heure où j’écris ces lignes la dernière
version de Python sortie et la 3.11 et la version 3.12 en est au stade de beta), qui a
officiellement cessé d'être supportée en 2020.
21 | P a g e
D'après les informations disponibles dans le code lui-même, notamment les
commentaires laissés par les développeurs, le développement de Z_Scan aurait débuté
au minimum en 2009. Cela indique que le programme a une histoire assez longue, ce qui
explique en partie pourquoi il est basé sur des technologies plus anciennes comme
Python 2.7.
Toutefois, il est à noter que les traces les plus récentes du développement, avant
mon arrivée, datent de 2014. Cela pourrait signifier que le développement de Z_Scan a
ralenti passée cette date, une information qui sera confirmé par mon tuteur.
Pour le stockage des données, Z_Scan utilise une base de données MongoDB en
backend. MongoDB est une base de données NoSQL4 populaire qui peut gérer de grands
volumes de données et qui est connue pour sa flexibilité, sa scalabilité et ses
performances. Cela semble un choix tout à fait approprié en particulier si on doit gérer
des rapports à des milliers de machines. C’est ici que nous allons retrouver les données
clés des rapports de scanners de vulnérabilités qui serviront dans la suite de cette
mission.
4Not Only Structured Query Language, désigne les différents types de bases de
données non relationnelles
22 | P a g e
Capture d’écran de la page d’accueil avant refonte graphique
Il est important de souligner que cet outil a été conçu avant tout pour une utilisation
interne. Mon tuteur de stage est l'utilisateur principal de Z_Scan, exploitant ses
fonctionnalités pour faciliter la gestion des rapports Nessus. Néanmoins, l'utilisation de
Z_Scan ne se limite pas uniquement à cette perspective interne.
Un aspect intéressant de Z_Scan est son potentiel d'utilisation dans une interaction
client. Par exemple, Z_Scan peut être utilisé pour soutenir des démonstrations pour les
clients de Cyber Impact, mettant en évidence ses capacités de traitement et de présentation
des résultats Nessus. Cela pourrait être particulièrement utile lors de la présentation des
compétences et des services offerts par Cyber Impact en termes d'évaluation des
vulnérabilités.
Qui plus est, Z_Scan peut également servir de support précieux lors des retours
clients après un scan de leur infrastructure. Il peut aider à expliquer de manière plus claire et
compréhensible les résultats du scan, ce qui peut faciliter la compréhension par le client des
vulnérabilités identifiées et des mesures à prendre pour y remédier.
Les fonctionnalités proposées par Z_Scan présentent des améliorations notables par
rapport à celles intégrées dans Nessus, notamment en termes de flexibilité et de contrôle de
l'utilisateur sur la présentation des résultats du scan.
Tout d'abord, la manière dont Z_Scan gère le tri des résultats de scans est
particulièrement remarquable. Contrairement à Nessus, qui nécessite que l'utilisateur
détermine le mode de tri avant la génération du rapport et ne permet pas de modifier ce
choix par la suite, Z_Scan offre une flexibilité bien plus grande.
23 | P a g e
Possibilités de tri offertes par Nessus lors de la génération de rapport d’un scan
Il permet en effet de passer d'une vue à une autre via un simple clic dans le menu.
Cela permet à l'utilisateur de passer facilement d'une classification par vulnérabilité à une
classification par actif réseau ou par découverte, sans avoir à générer plusieurs rapports et à
naviguer entre différents documents PDF. Cette capacité d'adapter rapidement la
présentation des résultats aux besoins du moment représente un gain de temps significatif
et améliore l'efficacité de l'analyse et facilite la prise de décision.
De plus, Z_Scan offre également une plus grande finesse dans le contrôle des détails
à afficher. Par exemple, l'outil permet d'afficher les détails de résolution d'une vulnérabilité
spécifique, au lieu de devoir afficher les détails pour toutes les vulnérabilités détectées,
comme c'est le cas avec Nessus. Cela facilite le focus sur une vulnérabilité particulière qui
pourrait nécessiter une attention immédiate ou une analyse plus approfondie.
24 | P a g e
Focus sur l’unique vulnérabilité de la signature SMB non requise, les autres vulnérabilités sont présentées de manière
plus succincte.
Z_Scan donne la possibilité d'exclure les faux positifs des rapports, ce qui permet
d'éliminer les alertes non pertinentes et de se concentrer sur les véritables vulnérabilités. De
plus, l'outil permet également d'indiquer la raison de l'exclusion de ces faux positifs,
ajoutant une couche supplémentaire de contexte et de clarté à l'analyse.
De plus, Z_Scan offre la possibilité d'ajouter des commentaires aux résultats, ce qui
permet d'apporter des précisions ou des observations spécifiques sur une vulnérabilité
donnée. C'est une fonctionnalité qui facilite grandement la collaboration et la
communication autour des résultats du scan.
L'une des fonctionnalités les plus significatives de Z_Scan est sa capacité à assurer le
suivi des corrections de vulnérabilités. Il permet de faire une séparation entre les mises à
25 | P a g e
jour (patchable) et les vulnérabilités non patchable, fournissant ainsi une vision claire et
actualisée de l'état de sécurité de l'infrastructure. Cette interactivité est un avantage majeur
par rapport à un rapport statique en PDF, qui ne peut pas être mis à jour pour refléter les
changements dans l'état des vulnérabilités.
Malgré ses nombreuses forces, Z_Scan présente aussi des faiblesses notables qui ont
une incidence sur son utilisation et son efficacité. L'une d'elles est son interface utilisateur,
qui a vieilli avec le temps. Si cette faiblesse peut sembler mineure lorsqu'elle est utilisée
exclusivement en interne, elle devient plus problématique lorsque l'outil est présenté à des
clients. En effet, une interface démodée peut donner une impression négative et rendre
l'outil moins attrayant, quelles que soient ses capacités fonctionnelles.
26 | P a g e
en compte ces faiblesses et en travaillant à les surmonter, nous pouvons améliorer la clarté
et l'efficacité de la présentation des résultats de l'évaluation des vulnérabilités.
Comme dit précédemment, je suis parti d’une base de travail déjà existante et assez
conséquente. Et, toujours comme dit lors de mes premières impressions, le développement
est relativement ancien.
La restauration d'un projet logiciel après une interruption de plusieurs années est un
processus qui oblige à un certain nombre d’exigences et qui présente à la fois des défis
techniques et intellectuels. La première étape de ce processus et d’abord et avant tout de
comprendre et d'interpréter l'ensemble du code existant.
Il est important de souligner que comprendre un code existant est une tâche à part
entière, qui va bien au-delà de la maîtrise du langage de programmation utilisé. En effet,
même si j'ai une bonne affinité avec le langage Python, la compréhension du code de Z_Scan
a nécessité de saisir non seulement les détails techniques, mais aussi l'intention et la logique
derrière chaque fonctionnalité.
27 | P a g e
été abandonnées, ou des tentatives de résolution de problèmes qui n'ont pas abouti. Quelle
que soit leur origine, ils ajoutent du bruit au code et peuvent rendre sa lecture et sa
compréhension plus difficiles.
Deuxièmement, le projet contient des scripts en plusieurs versions. Cela peut être le
signe d'un manque de contrôle des versions ou d'une mauvaise gestion des mises à jour du
code. Cela peut également rendre le code plus difficile à maintenir, car il n'est pas toujours
clair quelle version du script doit être utilisée, ni quelles sont les différences entre les
versions.
Troisièmement, il semble que le projet ne suit pas la structure standard d'un projet
Pyramid.
├───bin
│ ├───json2excel
│ │ └───handlers
│ └───python
├───gimp
│ └───2.0
│ ├───environ
│ ├───interpreters
│ ├───modules
│ ├───plug-ins
│ └───python
├───imgs
├───jquery
│ ├───css
│ ├───development-bundle
│ │ ├───demos
│ │ │ ├───accordion
. . . .
. . . .
. . . .
. . . .
. . . .
│ │ │ ├───tooltip
│ │ │ │ ├───ajax
│ │ │ │ └───images
│ │ │ └───widget
│ │ ├───docs
│ │ ├───external
│ │ ├───themes
│ │ │ ├───base
│ │ │ └───flick
│ │ └───ui
│ │ ├───i18n
│ │ └───minified
28 | P a g e
│ │ └───i18n
│ └───js
├───modules
│ └───templates
├───python
├───static
├───templates
└───webfonts
Structure du projet (tronqué), les cas de doublons de dossiers avérés ont été colorisés
Par exemple, il y a deux dossiers pour les templates, et les deux semblent
nécessaires. Cela peut rendre le code plus difficile à naviguer et à comprendre, surtout pour
quelqu'un qui s'attendrait à une structure de projet standard.
Il est indéniable que la résolution de la dette technique de Z_Scan est une étape
significative pour la restauration et l'amélioration du logiciel. Cependant, il est important de
29 | P a g e
souligner que, compte tenu des contraintes de temps inhérentes à la nature de mon stage, il
a fallu faire des choix quant à l'orientation des efforts de développement.
Ces priorités ont été définies en tenant compte de l'impact potentiel sur la clarté de
la présentation des résultats d'évaluation des vulnérabilités.
Dans l’idéal, la réduction de la dette technique est un processus continu qui, devrait
être intégré dans le cycle de vie du développement logiciel. Alors que la phase de mon stage
se termine, j'espère que le travail que j'ai réalisé posera les bases pour des améliorations
futures de Z_Scan, y compris la résolution des problèmes techniques restants.
La corruption de fichiers a été une difficulté majeure, car elle a nécessité la recherche
de copies de certains scripts. Dans certains cas, ces copies pourraient ne pas avoir été mises
à jour aussi récemment que le reste du projet, ajoutant une autre couche de complexité à la
restauration du logiciel.
En effet, Z_Scan reste actuellement compatible uniquement avec Python 2.7. Cette
situation implique certaines difficultés, notamment le risque de sécurité associé à
l'utilisation de dépendances obsolètes et non mises à jour. Avec la fin du support officiel
pour Python 2 en janvier 2020, les problèmes de sécurité ne sont plus corrigés, ce qui peut
exposer le projet à des vulnérabilités potentielles.
30 | P a g e
À titre personnel, j'aurais souhaité mettre à jour Z_Scan pour une version plus
récente de Python. Cependant, cette tâche aurait été une entreprise considérable. La
migration vers Python 3 aurait exigé non seulement la mise à jour du code de base, mais
aussi la recherche de dépendances équivalentes pour celles qui n'ont pas fait la transition
vers Python 3.
Dans certains cas, je pense même qu’il aurait été nécessaire de porter manuellement
certaines dépendances à une version plus moderne de Python, ce qui aurait nécessité un
temps considérable au vu du projet.
La première étape de ce processus a été la mise en place d'un cluster MongoDB sur
deux machines. MongoDB est une base de données orientée documents, idéale pour gérer
des données structurées de manière flexible, comme c'est le cas avec les rapports Nessus. Le
fait d'avoir un cluster sur deux machines assure la résilience des données : si une machine
tombe en panne, l'autre peut continuer à servir les données, garantissant ainsi une
disponibilité continue du service.
Une fois ce cluster en place et après avoir établi un lien entre l’application et la base
de données, il était nécessaire d'obtenir un rapport Nessus concret pour alimenter la base
de données et donc d’alimenter Z_Scan. En effet, impossible de restaurer correctement un
projet autant lié à des données si la base de données qui l’alimente est vide. Pour cela, il
fallait des données probantes, c'est-à-dire des données représentatives de ce que Z_Scan
aurait à traiter dans un contexte réel.
En effet, il n'aurait pas été approprié d'utiliser les données des clients de Cyber
Impact en raison de leur caractère sensible et de ma position de stagiaire au sein de
l'entreprise.
31 | P a g e
Afin de respecter les considérations de confidentialité et de sécurité des données, sur
une idée de mon tuteur, il fut décidé d'utiliser Metasploitable2, une distribution Linux
spécialement conçue pour être vulnérable. Metasploitable2 est un outil largement utilisé
dans le domaine de la cybersécurité pour l'apprentissage et la formation. Elle est
délibérément emplie de failles de sécurité pour permettre aux apprenants de tester leurs
compétences en matière de détection et d'exploitation des vulnérabilités.
Une autre solution aurait été d’utiliser scanme.nmap.org, un site est dédié au test
des capacités de Nmap, une suite de logiciels libres de scan de ports bien connue, et à
l'apprentissage de son utilisation. En effet, l'équipe de Nmap permet aux utilisateurs
d'effectuer des scans sur ce domaine pour leur permettre de pratiquer sans risquer de violer
la loi.
Une fois la distribution virtuelle en place sur un hyperviseur, j'ai pu lancer un scan
Nessus sur ce réseau où je savais qu’il y avait au moins un terminal réseau complètement
vulnérable de bien des façons, produisant ainsi un rapport riche en données. Ces datas, bien
que générées dans un environnement contrôlé, étaient représentatives de ce que Z_Scan
pourrait avoir à traiter dans un contexte réel.
Cette approche a permis de tester Z_Scan avec des données réalistes tout en
respectant les contraintes de confidentialité et de sécurité. Par ailleurs, elle a permis de
valider le fonctionnement de l'application avec des données récentes, un aspect essentiel de
la restauration du projet.
L'audit de conformité est une fonctionnalité importante pour toute entreprise qui a
besoin de respecter certaines normes de sécurité, comme ISO 27001, PCI DSS, HIPAA, etc.
C'est un outil précieux pour vérifier si l'entreprise respecte ces normes et pour identifier les
domaines où des améliorations peuvent être nécessaires.
32 | P a g e
Liste des scans de conformités proposés par Nessus, tous ces scans demande une mise à jour
vers une offre payante
Heureusement, malgré les années qui se sont écoulées, la structure des rapports
exportés par Nessus n'a que très peu changé. Mis à part quelques ajustements mineurs, la
restauration du script d'importation des données n'a pas présenté de difficulté majeure.
Cette stabilité du format de sortie de Nessus a été un avantage certain pour la restauration
du projet.
33 | P a g e
Il peut sembler surprenant que Z_Scan, une application web Pyramid, repose sur des
scripts à exécuter en ligne de commande, mais cela s'inscrit en réalité dans la logique du
projet. En effet, Z_Scan offre la possibilité de planifier des tâches à l'avance via un
planificateur ou de les exécuter directement via l'interface web, l’une de ces tâches est
FILLMONGODB, dont le nom est relativement explicite sur sa finalité.
C'est d'ailleurs dans ce cadre que j'ai développé une nouvelle tâche destinée à
produire des graphiques à partir des données importées, en utilisant Excel. Mais j'aborderai
ce point dans la partie dédiée.
J’ai adopté une approche méthodique pour restaurer le projet Z_Scan. Conscient de
la complexité du projet et des multiples problèmes potentiels que je pourrais rencontrer, j'ai
opté pour une approche systématique, traitant chaque route une à une. Dans le contexte du
framework Pyramid, une route représente un chemin d'accès spécifique dans l'application.
Chaque route a été analysée et testée individuellement. À chaque fois qu'une erreur
survenait, j'analysais et corrigeais le problème avant de passer à la route suivante. Cette
approche m'a permis de garantir la stabilité de chaque partie de l'application avant de
passer à la suivante.
34 | P a g e
La plupart des erreurs rencontrées étaient liées à des changements dans les
dépendances ou à la structure hiérarchique des dossiers du projet. Le temps et l'attention
que j'ai accordés à ces problèmes ont été essentiels pour assurer le succès de la restauration
du projet.
Cette approche m'a non seulement permis de restaurer avec succès le projet Z_Scan,
mais elle m'a aussi donné une compréhension approfondie de l'architecture du projet et de
ses dépendances, ce qui me serait particulièrement utile pour la suite des missions en lien
avec ce projet de développement.
Analyse de l’existant
De plus, toutes les informations sont présentées de la même manière, qu'elles soient
cruciales ou secondaires, c’est ce qu’on appelle la hiérarchisation visuelle des informations,
ce qui peut prêter à confusion pour l'utilisateur, surtout s'il est novice dans le domaine de la
cybersécurité. Par exemple, la présentation des vulnérabilités pourrait être mieux
hiérarchisée, en donnant plus de visibilité aux vulnérabilités les plus critiques, par le biais, de
couleurs ou d'icônes. Il est à noter que cette hiérarchisation n’est pas complètement
inexistante, mais relativement peu marquée, ce qui est contre-productif. De la même façon
et en lien de ce qui vient d’être dit, le manque de délimitation claire entre deux
vulnérabilités provoque la aussi des difficultés de lecture des informations :
35 | P a g e
Manque de délimitation des vulnérabilités d’un même terminal réseau, phénomène particulièrement visible en ce qui
concerne les solutions à apporter pour boucher une vulnérabilité.
36 | P a g e
L'utilisation d'icônes est un moyen efficace de guider l'utilisateur et de faciliter la
navigation. Cependant, dans le cas de Z_Scan, les icônes utilisées ne semblent pas toujours
intuitives ou cohérentes. Par exemple, une même icône peut apparaître plusieurs fois sur
une même page pour une utilisation différente, ce qui peut être source de confusion. De
plus, certaines icônes ne correspondent pas à l'action réelle réalisée en cliquant sur elles.
Cette incohérence est un obstacle à l'efficacité et à l'intuitivité de l'interface, et doit donc
être adressée lors de la refonte.
Malgré les faiblesses citées, il me parait nécessaire d’en replacer certaines dans le
contexte du développement initiale du projet, Z_Scan a été développé à une époque où les
pratiques et attentes en matière de conception d'interfaces étaient différentes. De plus, la
quantité d'informations que les utilisateurs sont prêts et capables de traiter a également
évolué.
Cela dit, il est important de souligner que l'interface de Z_Scan a été conçue à une
époque où cette densité d'information était bien plus la norme. À l'époque, les interfaces
graphiques étaient souvent chargées d'informations et d'options pour donner à l'utilisateur
le contrôle total sur les fonctionnalités du logiciel. Cependant, avec l'évolution de la
technologie et des attentes des utilisateurs, cette approche est devenue obsolète.
C'est donc dans ce contexte que nous devons envisager la refonte de l'interface de
Z_Scan. L'objectif sera de réduire la densité d'information par écran pour se rapprocher des
standards visuels actuels, tout en conservant la richesse des fonctionnalités de l'outil.
L'objectif est de rendre l'outil plus accessible et compréhensible pour une plus large gamme
d'utilisateurs, y compris ceux qui ne sont pas nécessairement experts en cybersécurité. Cette
démarche s'inscrit parfaitement dans le cadre de notre problématique, qui est de présenter
de façon claire les résultats d'une solution d'évaluation des vulnérabilités.
Choix technologique
5
Cascading Style Sheets, feuille de style en cascade et français
37 | P a g e
globale. J'ai opté pour Bulma CSS, un framework CSS basé sur Flexboxj. Ce choix repose sur
plusieurs facteurs clés.
De plus, Bulma est responsive, cela veut dire que Bulma optimise votre site internet
en fonction de la taille du support sur lequel il est affiché. Il est tout à fait possible, qu’à
terme, Z_Scan puisse être consulter sur divers appareils.
Concernant la gestion des icônes, la librairie Font Awesome a été choisie pour sa
grande variété d'icônes disponibles, sa reconnaissance dans le domaine du web et le fait
qu’il puisse être utilisé de façon homogène avec Bulma. Cette librairie est largement utilisée,
et de nombreux utilisateurs sont déjà familiers avec ses icônes, ce qui renforce l'intuitivité de
l'interface.
En somme, le choix de Bulma CSS et Font Awesome s'est avéré judicieux pour
adresser les problèmes identifiés dans l'interface de Z_Scan, contribuant ainsi à la clarté et à
la lisibilité des résultats de l'évaluation des vulnérabilités.
Actions Réalisées
38 | P a g e
Premièrement, j'ai introduit un nouveau schéma de couleurs plus contrasté pour
améliorer la hiérarchisation visuelle de l'information. Cela a permis de mettre en avant les
informations les plus importantes et de faciliter leur repérage par l'utilisateur.
39 | P a g e
Deuxièmement, j'ai cherché à épurer et espacer les éléments de l'interface afin de
réduire la densité d'information. L'interface originale avait tendance à surcharger l'utilisateur
avec un grand nombre d'informations présentées simultanément. En introduisant un design
plus minimaliste et en espaçant plus largement les éléments, j'ai pu rendre l'interface plus
lisible et moins intimidante pour l'utilisateur.
Capture d’écran globale d’une des pages les plus chargée en information, le classement des patchs par terminal réseau, avant refonte graphique
40 | P a g e
Capture d’écran globale d’une des pages les plus chargée en information, le classement des patchs par terminal réseau, après refonte graphique
Troisièmement, j'ai entrepris de revoir l'utilisation des icônes dans l'interface. J'ai
remplacé les icônes peu intuitives ou incohérentes par des icônes Font Awesome plus
appropriées, en accord avec l'action réalisée. Cela a permis d'améliorer la cohérence globale
de l'interface et de la rendre plus intuitive pour l'utilisateur.
Evolution des icônes utilisées concernant une vulnérabilité, dans l’ordre, classer la vulnérabilité en « patchée,
l’ajouter à un groupe, ajouter un commentaire, exclure la vulnérabilité (pour une autre raison qu’un patch et signalé
comme faux-positif
41 | P a g e
En évaluant l'interface de Z_Scan, un aspect s'est avéré efficace et a été conservé : la
présentation des données sous forme de tableau. Ce choix initial avait été fait par deux
professionnels de la cybersécurité, une expertise qui a orienté leur décision vers une
présentation structurée et pertinente des données.
Les tableaux permettent une visualisation claire et ordonnée des informations. Ils
facilitent le tri et le filtrage des données selon différents critères pertinents, tels que la
criticité d'une vulnérabilité ou la classification par appareil. Cette présentation soutient la
mission de Z_Scan qui est de fournir une évaluation claire et compréhensible des
vulnérabilités.
Malgré la refonte graphique, cette méthode de présentation des données a donc été
préservée. Le travail effectué s'est concentré principalement sur l'amélioration des éléments
visuels, en augmentant la lisibilité et l'intuitivité de l'interface, tout en maintenant la
structure effective existante pour la présentation des données.
Remise en contexte
Analyse de l’existant
Avant mon implication dans le projet Z_Scan, une tentative de visualisation des
données de vulnérabilités avait été entreprise en utilisant GNUplot, un outil connu pour sa
flexibilité et sa capacité à générer des graphiques à partir de données scientifiques.
42 | P a g e
Cependant, l'intégration de GNUplot au sein du framework Pyramid s'est avérée
problématique, notamment sur la production d’image à partir des données. De nombreuses
difficultés ont été rencontrées, ce qui a conduit à une impasse technique. De plus, GNUplot,
bien que puissant, souffrait de certaines limitations, notamment en termes de
personnalisation visuelle.
Pour rappel : Pandas est une bibliothèque logicielle écrite pour le langage de
programmation Python qui fournit des structures de données et des fonctions d'analyse de
données de haute performance et faciles à utiliser. Elle est basée sur la notion de
"Dataframe", qui est essentiellement une table de données bidimensionnelle où chaque
colonne peut contenir des données d'un certain type (numérique, string, etc.).
Matplotlib est une bibliothèque de traçage 2D en Python qui produit des figures de
qualité dans une variété de formats et de milieux interactifs. Matplotlib peut être utilisée
dans des scripts Python, le terminal Python et IPythonk, des applications web, et divers outils
d'interface utilisateur graphique (GUI) en Python.
Dans le contexte du projet Z_Scan, il était essentiel de choisir une solution qui serait
non seulement puissante et flexible, mais aussi accessible pour une variété d'utilisateurs, y
compris ceux qui n'ont pas d'expertise approfondie en programmation ou en manipulation
de données. En tenant compte de ces facteurs, ainsi que de l'impasse technique rencontrée
avec GNUplot, la décision a été prise de passer à une solution plus courante et familière :
Excel. Ce choix a été guidé par la volonté d'offrir une solution de visualisation de données
qui serait à la fois facile à utiliser et à maintenir.
43 | P a g e
Traiter les données de la Base de données vers Excel
Pour le transfert des données entre la base MongoDB et Excel, j'ai développé un
script Python. Ce script peut être exécuté à partir du gestionnaire de tâches de Z_Scan décrit
plus haut, et a été conçu pour être indépendant du système d'exploitation sur lequel Z_Scan
est déployé. Actuellement, Z_Scan est déployé sur une distribution Ubuntu, bien qu'il soit
possible de le faire fonctionner sur d'autres systèmes tels que Windows.
Lors de la création du script d'extraction des données, j'ai donc utilisé deux
bibliothèques Python spécifiques : openpyxl et xlsxwriter. Openpyxl est une bibliothèque
Python utilisée pour lire/écrire des fichiers Excel xlsx/xlsm/xltx/xltm. Elle offre une interface
très complète et intuitive pour la gestion des données Excel. D'autre part, xlsxwriter est une
bibliothèque Python qui peut être utilisée pour écrire des fichiers texte, des nombres, des
formules et des hyperliens dans des fichiers Excel 2010 xlsx en utilisant plusieurs types de
formatage.
L'une des difficultés rencontrées lors de l'écriture du script a été la désérialisationl et
l’aplatissementm des données. Les données stockées dans MongoDB sont sous forme de
documents JSON6, qui peuvent contenir des structures de données complexes, y compris des
listes et des dictionnaires imbriqués. Pour les rendre exploitables dans Excel, une étape de
désérialisation était nécessaire. Cela implique la conversion des structures de données JSON
de MongoDB en structures de données Python, puis la restructuration de ces données pour
qu'elles puissent être écrites dans un fichier Excel. Le défi ici était de rendre le code
44 | P a g e
universel et hautement tolérant, pour pouvoir gérer tous les types de données possibles, y
compris ceux qui pourraient apparaître dans la version payante de Nessus.
Extrait d’une donnée JSON dans la base de données MongoDB de Z_Scan, des dictionnaires sont imbriqués dans une liste
Gestion des structures imbriquées dans Python, Obligeant à de nombreuses boucles imbriquées
45 | P a g e
Une fois les données de la base MongoDB correctement récupérées et aplaties, j'ai
fait le choix d'utiliser un DataFrame pour simplifier l'exportation vers Excel. Un DataFrame,
provenant de la bibliothèque Pandas, est une structure de données bidimensionnelle, c'est-
à-dire une table, où chaque colonne peut contenir des données d'un type différent
(nombres, chaines de caractères, etc.). Les DataFrame sont particulièrement adaptés pour le
traitement de grandes quantités de données et pour l'exportation de ces données dans
divers formats, dont Excel.
Toutefois, j'ai été conscient des difficultés que peuvent présenter les DataFrame pour
les personnes non familières avec la bibliothèque Pandas. C'est pourquoi j'ai veillé à ce que
leur utilisation reste sommaire et transparente pour les autres développeurs du projet. Le
DataFrame est uniquement utilisé dans le script d'exportation, comme une étape
intermédiaire avant la création du fichier Excel. Ainsi, les autres parties du projet, y compris
le script de récupération et d'aplatissage des données, n'ont pas besoin de gérer des
DataFrame, ce qui facilite la maintenance et l'évolutivité du projet.
Pour améliorer l'utilisabilité du fichier Excel généré, il a été demandé par mon tuteur
que les données puissent être triées selon n'importe quel critère. C'est une fonctionnalité
très appréciée dans l'analyse de données car elle permet d'organiser et de filtrer les
informations rapidement en fonction des besoins spécifiques de l'utilisateur. Pour mettre en
œuvre cette demande, j'ai utilisé la fonctionnalité d'AutoFiltre d'Excel.
46 | P a g e
La méthode AutoFiltre a été ajoutée à chaque en-tête de chaque feuille Excel
produite par le script. Ainsi, les utilisateurs peuvent facilement trier et filtrer les informations
contenues dans les feuilles en fonction de leurs besoins. Par exemple, ils peuvent choisir de
voir uniquement les vulnérabilités d'une certaine criticité, ou de filtrer les données pour
n'afficher que les informations concernant un appareil spécifique. Cette fonctionnalité a
grandement amélioré la maniabilité du fichier Excel et a permis une analyse plus précise et
flexible des données.
Extrait du fichier de sortie Excel après exécution du script, l’ensemble des données sont triable par colonne, ici par port
47 | P a g e
En effet, l'aplatissement des données, bien que nécessaire pour leur exploitation
dans Excel, provoque une perte d'information concernant la structure originelle des
données. Il est certes possible de reconstruire cette structure, mais cela suppose de
connaître à l'avance les données pour lesquelles il faut réaugmenter la dimensionnalité. Cela
irait à l'encontre du principe de tolérance à la variété des données que j'ai cherché à
instaurer pour ce script. De plus, cela poserait problème pour la fonctionnalité de
conformité, dont la structure m'est inconnue.
Face à ces contraintes et ces incertitudes, il a été décidé de ne pas renvoyer les
données modifiées dans Excel vers MongoDB. Cette décision a été prise en accord avec les
principes de maintenabilité et de tolérance aux variétés de données que j'ai cherché à
instaurer pour ce script. Cependant, cela reste une limitation que j'ai identifiée et qui
pourrait faire l'objet de développements futurs pour améliorer encore l'outil.
L'une des principales raisons pour lesquelles Excel a été choisi comme outil d'analyse
des données est sa capacité à générer facilement des graphiques à partir des données.
Cependant, la construction de ces graphiques n'a pas été sans défis.
Un choix délibéré a été fait pour éviter l'utilisation d'un modèle Excel préconstruit
pour générer ces graphiques. Bien qu'il existe une multitude de modèles disponibles qui
peuvent faciliter la création de graphiques, ceux-ci présentent certains inconvénients. En
particulier, ils sont souvent très spécifiques et rigides, ce qui signifie qu'ils peuvent être très
peu tolérants aux erreurs ou aux changements dans les données.
Dans le contexte de ce projet, les rapports Nessus peuvent changer au fil du temps,
avec de nouvelles vulnérabilités découvertes et des modifications apportées à la façon dont
elles sont signalées. Si nous avions choisi d'utiliser un modèle préconstruit, chaque fois qu'un
changement de ce type se produirait, nous devrions probablement mettre à jour ou ajuster
le modèle pour s'adapter à ces changements. Cela entraînerait une maintenance
supplémentaire qui n'est pas souhaitable. (Sans compter qu’un modèle personnalisé est
difficile à créer si la fonctionnalité d’audit de conformité ne peut pas être prise en compte.)
48 | P a g e
Utilisation combinée de xlsxwriter et openpyxl
Xlsxwriter est une bibliothèque Python qui permet de créer des fichiers Excel .xlsx en
écriture seule. Elle offre un contrôle précis sur l'aspect final du document Excel et permet
l'intégration de scripts VBA compilés, utiles pour la mise en place de macros automatisées.
Cependant, cette bibliothèque ne permet pas la lecture ou la modification de fichiers Excel
existants. Il est donc impossible d’obtenir des champs calculés pour faire un graphique (un
aspect qui sera traité ci-après).
De son côté, openpyxl est une bibliothèque Python qui permet de lire, écrire et
modifier des fichiers Excel .xlsx. Elle a été utilisée dans ce projet pour sa capacité à
manipuler des documents Excel existants, notamment pour la mise en forme des données.
Toutefois, cette bibliothèque a une limitation majeure : elle ne supporte pas l'utilisation de
macros.
De manière générale, aucune des deux bibliothèques ne gère réellement les macros
(l’une permet d’ajouter une version compilée, mais cela s’arrête là, celles-ci sont pourtant
nécessaires pour obtenir de l’interactivité avec les graphiques, pour changer le filtre sur des
données du graphique par exemple).
La création des macros a été effectuée directement dans Excel, en utilisant le mode
développeur de Visual Basic. Une fois les macros VBA créées et compilées, elles ont été
extraites du fichier Excel en exploitant le fait qu'un fichier Excel est en réalité un fichier
compressé au format zip. La macro compilée a ensuite été intégrée dans le document Excel
généré par le script Python en utilisant la bibliothèque xlsxwriter.
49 | P a g e
Il est important de souligner qu'il n'y a pas d'autre moyen que de préparer les macros
VBA à l'avance. Cependant, contrairement à une maquette figée, un code VBA bien écrit
offre une flexibilité et une tolérance aux variations dans les données.
Code VBA pour mettre à jour le graphique si le filtre change, l’évènement est lié à la case du filtre, filtre qui n’existe
pas si les données nécessaires au graphique n’existent pas, la tolérance des erreurs peut donc être jugé acceptable
Lors de l'élaboration de l'outil Excel, une étape clé a été la sélection des données à
mettre en avant sous forme de graphiques. En effet, la visualisation des données joue un
rôle crucial dans l'analyse des rapports de vulnérabilité, en facilitant la compréhension et
l'interprétation des données.
50 | P a g e
approfondie des indicateurs de performance clés (abrégé KPI, pour Key Performance
Indicators) pertinents dans le domaine de la cybersécurité.
Un indicateur de performance clé est une mesure quantifiable utilisée pour évaluer le
succès d'une organisation, d'un employé, etc., dans la réalisation des objectifs. Dans notre
contexte, les KPI peuvent inclure des mesures telles que le nombre total, le nombre de
vulnérabilités par niveau de gravité, le taux de scan identifié etc.
L’un des avantages majeurs d'utiliser Excel pour créer des graphiques est sa capacité
à produire des visualisations interactives. Cette interactivité est possible grâce à l'utilisation
de macros VBA (Visual Basic for Applications), qui sont des ensembles d'instructions
permettant de manipuler les fonctionnalités d'Excel.
Ainsi, l'ajout de cette interactivité a été une priorité dans le développement des
graphiques pour le projet Z_Scan. En plus d'améliorer l'expérience utilisateur, ces
fonctionnalités interactives permettent une analyse plus approfondie des données, car elles
offrent aux utilisateurs la possibilité d'explorer les données de manière dynamique et
personnalisée. Ce qui est une bonne approche pour tenter de répondre à la problématique
de ce mémoire.
L'une des spécificités d'Excel est la capacité à créer des champs calculés, soit
directement via des formules Excel, soit via des scripts Python lorsque les formules Excel ne
sont pas suffisantes. Les champs calculés sont des valeurs dérivées de données existantes,
généralement utilisées pour effectuer des analyses plus complexes ou pour produire des
résumés de données. Par exemple, un champ calculé peut représenter le pourcentage de
vulnérabilités critiques par rapport au nombre total de vulnérabilités, ou le nombre de
vulnérabilités par appareil.
51 | P a g e
Dans la toute première tentative de produire un graphique simple, de sorte à prendre
parfaitement en main les bibliothèques utilisés pour cette tâche, j’ai tenté de produire le
taux d’appareil sur lesquels nous avions effectué un scan identifié, une donnée importante
déjà évoqué lors de ce mémoire car un scan authentifié permet de détecter des
vulnérabilités qui ne serait pas visible depuis un simple scan extérieur. Un pourcentage trop
bas dans le cadre d’un audit d’une infrastructure d’entreprise pourrait motiver à un scan
plus complet avec de nouveaux identifiants pour les actifs :
52 | P a g e
Code correspondant à la création du graphique sur le taux de scan identifié.
Dans certains cas, il peut être nécessaire de créer de nouvelles feuilles dans le
classeur Excel pour stocker ces champs calculés. Cela peut être utile pour organiser les
données et faciliter leur manipulation. De plus, ces nouvelles feuilles peuvent également
servir de base pour la création de graphiques dynamiques, en utilisant les champs calculés
comme source de données.
L'objectif ici est d'exploiter les fonctionnalités avancées d'Excel pour présenter les
données de manière plus intuitive et significative, tout en offrant aux utilisateurs la flexibilité
d'explorer et d'interagir avec les données à leur guise.
Excel a la capacité de fournir des fonctionnalités interactives, tels que les filtres de
données ou les validations de données (Data Validation). Ces dernières sont des outils
intégrés à Excel qui permettent de contrôler le type de données ou les valeurs qui peuvent
être entrées dans une cellule.
Dans le cadre de ce projet, les validations de données ont été utilisées pour créer des
menus déroulants. Ces menus déroulants sont liés à des cellules spécifiques dont les
résultats sont calculés, ce qui permet de sélectionner dynamiquement la ligne de données à
utiliser pour produire un graphique.
53 | P a g e
Par exemple, un menu déroulant pourrait être utilisé pour choisir un critère
spécifique (ci-après l’adresse IP d’un appareil) à partir duquel un graphique serait généré.
Cette approche facilite l'analyse des données et permet une interaction plus directe et plus
flexible avec les données.
Les validations de données ont été mises en place après la création des cellules
calculées pour assurer une interaction fluide et une fonctionnalité correcte. L'utilisation
conjointe des validations de données et des cellules calculées a permis de maximiser les
fonctionnalités d'Excel, rendant le rapport final plus intuitif et facile à utiliser pour les
professionnels de la cybersécurité.
54 | P a g e
Erreur obtenue en cas de trop nombreuse données
sélectionnées pour un graphique
Ces validations de données sont, en parallèle, lié à une macro qui gère les
évènements, en cas de modification de la valeur de la cellule, le graphique se met à jour
avec la nouvelle valeur saisie dans la cellule. Une manière de fonctionner très proche de ce
qui serait réalisé en JavaScript/HTML sur une page web.
MongoDB est une base de données NoSQL puissante avec plusieurs avantages, mais
contrairement à une base de données relationnelle SQL, elle n'a pas de schéma relationnel
inhérent. Cette particularité a ajouté une couche de complexité à la tâche de produire des
graphiques qui nécessitent le croisement de plusieurs tables. En fait, dans un contexte où les
liaisons entre les tables ne sont pas directement supportées par le système de gestion de la
base de données, j'ai dû trouver une solution alternative pour créer ces relations.
Voici un extrait de code qui illustre la solution que j'ai mise en œuvre pour relever ce
défi :
55 | P a g e
Extrait de code permettant la création des cellules calculés du graphique plus haut
Dans ce code, j'ai créé deux dictionnaires pour gérer les relations entre les données
de vulnérabilités (vuln_dict, le dictionnaire des vulnérabilités) et les données de scans
(ip_dict, le dictionnaire des adresses IP). Le dictionnaire vuln_dict a été créé avec l'ID comme
clé et le score CVSS3 comme valeur, tandis que ip_dict utilise l'adresse IP comme clé et
stocke une liste de scores CVSS3 comme valeur.
Le tableau final a été produit en comptant le nombre de scores CVSS3 dans chaque
catégorie pour chaque adresse IP. Malgré la flexibilité de MongoDB, cette approche a
nécessité une manipulation de données en mémoire avec Python, qui peut être gourmande
en ressources pour de grands ensembles de données.
56 | P a g e
5. Synthèse sur le projet Z_Scan
Le parcours que j'ai entrepris avec le projet Z_Scan a été un voyage stimulant, rempli
de défis techniques et de nouvelles compétences acquises. L'objectif principal était de
restaurer, d'améliorer et de fournir une présentation améliorée des résultats d'une solution
d'évaluation des vulnérabilités. Ce périple a commencé par une exploration approfondie de
l’existant avec Z_Scan, et l’apprentissage de l’utilisation d’un scanner de vulnérabilités :
Nessus, tout cela suivie par une restauration du projet Z_Scan.
Ensuite, l'accent a été mis sur la production de graphiques avec Excel. Ce travail a
commencé par la prise en compte du contexte, la réalisation d'une analyse de l'existant et le
traitement des données de la base de données vers Excel. J'ai dû surmonter plusieurs défis,
notamment les limitations inhérentes à la rétroaction des données d'Excel à MongoDB, la
nécessité d'une grande tolérance aux erreurs et les contraintes liées à l'utilisation combinée
de xlsxwriter et openpyxl.
Tout au long de cette mission, j'ai dû faire preuve de flexibilité et d'ingéniosité pour
surmonter les difficultés techniques et les limites des outils existants. J'ai acquis une
compréhension approfondie des systèmes d'évaluation des vulnérabilités et de la manière
dont ils peuvent être utilisés pour renforcer la sécurité d'un réseau. De plus, j'ai pu constater
l'importance d'une présentation visuelle efficace des données pour aider les responsables à
prendre des décisions éclairées.
57 | P a g e
6. Perspective et évolutions futures
En outre, un autre aspect à considérer pour l'avenir est l'intégration plus approfondie
de l'IA, comme avec le modèle de langage ChatGPT. Mon utilisation de ChatGPT durant cette
mission a été sporadique, d’où le fait qu’il ne soit évoqué que maintenant, servant
principalement à résumer le fonctionnement de certaines fonctions ou à automatiser
l'écriture de parties répétitives du code. Cependant, je vois un potentiel énorme dans
l'adoption de ces outils d'IA pour augmenter la productivité et accélérer le développement.
Cependant, il convient de noter que, malgré les avantages potentiels de l'IA, son utilisation
ne peut pas remplacer une vérification humaine rigoureuse. Les outils d'IA, bien qu'efficaces
pour automatiser certaines tâches, sont encore loin de pouvoir garantir un travail sans
erreurs. Par conséquent, leur utilisation doit être complétée par un contrôle humain pour
assurer la qualité et l'exactitude du travail. Il paraît néanmoins évident que ce jugement
devra être révisé dans quelques années pour quelque chose plus nuancé sur ce point.
58 | P a g e
8. Conclusion
Au terme de ce stage, je peux affirmer que l'expérience acquise est d'une valeur
inestimable. A travers les différentes missions qui m'ont été confiées, j'ai eu l'opportunité
d'explorer un large éventail de disciplines informatiques, ce qui a contribué à enrichir ma
compréhension du domaine et à affiner mes compétences techniques.
La base de données NoSQL avec MongoDB m'a apporté une nouvelle perspective sur
la gestion des données. La refonte graphique de Z_Scan, couplée à la création et la
restauration de certaines fonctionnalités en Python, a été une plongée enrichissante dans le
développement front-end et back-end.
Le travail avec Nessus, ainsi que l'apport de mon tuteur, ont été essentiels pour
élargir ma compréhension de la cybersécurité. La création de graphiques liés à ce domaine
m'a fourni des outils précieux pour le Business Intelligence et l'informatique décisionnelle.
59 | P a g e
9. Annexes
Dans le cadre de ce mémoire, plusieurs annexes ont été créées pour fournir une
compréhension plus profonde et plus détaillée des travaux de recherche menés. En raison
de la taille substantielle de certaines de ces annexes, il n'a pas été possible de les inclure
dans la version imprimée de ce mémoire. Cependant, pour garantir un accès complet à
toutes les informations pertinentes, ces annexes ont été incluses sous forme numérique
dans le dossier qui accompagne ce document.
Annexe B : Rapport produit par Nessus (format résumé) au format PDF, ce document
sert à montrer le manque d’informations présentent dans celui-ci
Annexe C : Rapport produit par Nessus (format détaillé) au format PDF, sert à
montrer la verbosité du rapport (593 pages)
Pour accéder à ces annexes, veuillez insérer la clé USB dans un ordinateur compatible
et naviguer jusqu'au dossier correspondant à l'annexe que vous souhaitez consulter. Chaque
fichier d’annexe sera nommé « annexe » suivi de la lettre associée.
Il est important de noter que certaines annexes peuvent nécessiter un logiciel spécifique
pour être visualisées correctement. Par exemple, le code source peut nécessiter un éditeur
de texte ou un environnement de développement intégré (IDE), et les données de test
peuvent nécessiter un logiciel de gestion de bases de données.
60 | P a g e
10. Sitographie
b : Source : https://csrc.nist.gov/glossary/term/vulnerability_scanner
c : rsync est un utilitaire open source qui permet de transférer rapidement des fichiers de
manière incrémentielle : https://rsync.samba.org/
d: Cron est un programme pour exécuter automatiquement des scripts, des commandes
ou des logiciels à une date et une heure spécifiée précise, ou selon un cycle défini à
l’avance : https://doc.ubuntu-fr.org/cron
f : Un point d'extrémité est tout dispositif qui se connecte à un réseau informatique. […],
un ordinateur connecté à un réseau est l'un des points d'arrivée d'un échange de données
continu.
Parmi les exemples quotidiens de points d'extrémité figurent les ordinateurs de bureau,
les smartphones, les tablettes, les ordinateurs portables et les dispositifs de l'Internet des
objets (IoT). https://www.cloudflare.com/fr-fr/learning/security/glossary/what-is-endpoint/
g : Une structure en couches indiquant quels types de programmes peuvent ou doivent
être construits et comment ils doivent être reliés entre eux.
https://csrc.nist.gov/glossary/term/framework
h: Source de la structure :
https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/project.html#the-project-
structure
61 | P a g e
j : Le module des boîtes flexibles, aussi appelé « flexbox », a été conçu comme un modèle
de disposition unidimensionnel et comme une méthode permettant de distribuer l'espace
entre des objets d'une interface ainsi que de les aligner. Source :
https://developer.mozilla.org/fr/docs/Web/CSS/CSS_flexible_box_layout/Basic_concepts_of
_flexbox
k : IPython fournit une riche boîte à outils pour vous aider à tirer le meilleur parti de
l'utilisation interactive de Python. Ses principaux composants sont les suivants :
- Un noyau Jupyter pour travailler avec du code Python dans des carnets Jupyter
et d'autres interfaces interactives.
Source : https://pypi.org/project/ipython/
l : processus par lequel un format de niveau inférieur (par exemple, qui a été transféré sur
un réseau ou stocké dans un magasin de données) est traduit en un objet lisible ou une autre
structure de données. Source :
https://developer.mozilla.org/fr/docs/Glossary/Deserialization
62 | P a g e
11. Fiche de Validation Entreprise
63 | P a g e