Arkendia Classrooms
Leçon 5 sur 28 · 17 min

Les bases de Python utiles à la sécurité

Les professionnels de la sécurité répètent souvent la même phrase : « si vous faites une tâche trois fois, écrivez un script ». Python est le langage le plus utilisé pour cela, parce qu'il se lit presque comme de l'anglais et qu'il fournit de quoi traiter des fichiers, des journaux et du réseau en quelques lignes. Cette leçon ne suppose aucune expérience de la programmation : en une quinzaine de minutes, vous aurez les notions dont nous nous servirons pour le reste du chapitre.

Cadre légal et éthique

Un script est un outil, et comme tout outil il engage votre responsabilité. Dans ce chapitre, nous n'écrivons que des scripts passifs ou inoffensifs, qui lisent des fichiers ou interrogent vos propres systèmes et ceux de votre laboratoire. Un script qui interroge ou teste un système tiers sans autorisation écrite et périmètre défini peut constituer une infraction (articles 323-1 à 323-3-1 du Code pénal). Les exercices se font dans votre laboratoire personnel, ou sur DVWA, OWASP Juice Shop, PortSwigger Web Security Academy, TryHackMe ou HackTheBox.

Dans le chapitre précédent, vous avez vu qu'un annuaire contient des milliers d'objets et que la valeur d'un audit tient à l'analyse de ces données. Le fil rouge de ce chapitre est la constitution d'une petite boîte à outils personnelle : trois scripts que vous rangerez dans le dossier « scripts » de votre portfolio. Commençons par les fondations.

Pourquoi Python plutôt qu'autre chose ?

Il existe de nombreux langages. Python s'est imposé en sécurité pour plusieurs raisons concrètes :

  • Il est lisible : un collègue comprend votre script sans l'avoir écrit, ce qui compte quand le code accompagne un rapport.
  • Il est interactif : on peut tester une idée ligne par ligne avant de l'enregistrer.
  • Il est fourni avec de quoi travailler : lecture de fichiers, expressions régulières, requêtes web, formats JSON et CSV sont inclus dans l'installation de base.
  • Il est partout : de nombreux outils de sécurité sont écrits en Python ou proposent une interface Python, et l'immense majorité de la documentation s'y trouve.

Vérifiez que Python 3 est présent dans votre machine virtuelle Linux de laboratoire en ouvrant un terminal et en tapant python3 --version. Les versions récentes de Kali Linux l'incluent par défaut.

Votre premier script

Un script Python est un simple fichier texte, terminé par .py. Voici le plus classique :

print("Bonjour, laboratoire !")

Enregistrez-le sous bonjour.py, puis lancez-le avec python3 bonjour.py. La fonction print affiche du texte. Rien de plus : mais vous venez d'écrire un programme.

Variables et types de données

Une variable est une étiquette posée sur une valeur. Pensez à des boîtes étiquetées dans un entrepôt : le nom sert à retrouver le contenu. Python reconnaît plusieurs types de valeurs :

  • le texte (chaîne de caractères), entre guillemets : "serveur-web" ;
  • le nombre entier : 8080 ;
  • le booléen, vrai ou faux : True, False ;
  • la liste, un ensemble ordonné : [22, 80, 443] ;
  • le dictionnaire, un ensemble de paires clé-valeur, comme une fiche d'identité : {"nom": "serveur-web", "port": 8080}.
nom = "serveur-web"
port = 8080
ports_ouverts = [22, 80, 443]
machine = {"nom": nom, "port": port, "actif": True}

print(f"{nom} écoute sur le port {port}")
print(machine["nom"])
print(len(ports_ouverts))

Le préfixe f devant les guillemets crée une f-string : ce qui se trouve entre accolades est remplacé par la valeur de la variable. C'est la façon la plus pratique de construire un message. La fonction len renvoie la taille d'une liste.

Prendre des décisions et répéter

La sécurité consiste largement à trier : ce port est-il attendu, cette ligne de journal est-elle suspecte ? Python offre pour cela les conditions (if, elif, else) et les boucles (for). Notez que l'indentation (le décalage en début de ligne) fait partie de la syntaxe : elle indique ce qui appartient au bloc.

for p in ports_ouverts:
    if p == 22:
        print("22 : accès à distance (SSH)")
    elif p in (80, 443):
        print(f"{p} : service web")
    else:
        print(f"{p} : port non répertorié, à vérifier")

La boucle prend chaque élément de la liste, l'un après l'autre, et lui applique le même traitement. C'est ce qui permet de passer de dix lignes à dix mille sans effort supplémentaire.

Regrouper dans des fonctions

Une fonction est une recette nommée que l'on peut réutiliser. Elle reçoit des ingrédients (les paramètres) et rend un résultat avec return.

def est_port_valide(valeur):
    return 1 <= valeur <= 65535

print(est_port_valide(443))
print(est_port_valide(70000))

Les fonctions rendent votre code testable : vous pouvez vérifier chacune séparément. Elles servent aussi à documenter : le nom est_port_valide dit déjà ce que fait le code. Prenez l'habitude de choisir des noms explicites.

Lire un fichier, gérer une erreur

Presque tous vos scripts liront un fichier : une liste de machines, un journal, une sortie d'outil. Voici le modèle à retenir :

with open("cibles-labo.txt", encoding="utf-8") as fichier:
    for ligne in fichier:
        print(ligne.strip())

Le bloc with ouvre le fichier et le referme proprement à la fin. strip() retire les espaces et le saut de ligne. Que se passe-t-il si le fichier n'existe pas ? Python s'arrête avec une erreur. On peut l'anticiper :

try:
    with open("cibles-labo.txt", encoding="utf-8") as fichier:
        contenu = fichier.read()
except FileNotFoundError:
    print("Fichier introuvable : vérifiez son nom et son dossier.")

Un bon script de sécurité échoue proprement : il dit ce qui ne va pas plutôt que d'afficher une trace illisible. C'est particulièrement utile quand un collègue l'utilise après vous.

Les bonnes habitudes dès le début

  • Ne jamais écrire de secret dans un script (mot de passe, clé d'accès). Un script qui finit sur un dépôt public avec un secret est un incident de sécurité en soi.
  • Commenter le « pourquoi », pas le « comment » : le code dit déjà ce qu'il fait.
  • Commencer petit : un script de dix lignes qui marche vaut mieux qu'un projet ambitieux jamais fini.
  • Lire avant d'exécuter : n'exécutez jamais un script trouvé en ligne sans l'avoir lu entièrement. C'est vrai pour tout le monde, encore plus en sécurité.

À vous de jouer

Dans votre machine virtuelle de laboratoire, créez un fichier ports.py qui :

  1. définit une liste de ports : [21, 22, 23, 80, 443, 3389] ;
  2. définit un dictionnaire qui associe chaque port à son service (21 → FTP, 22 → SSH, 23 → Telnet, 80 → HTTP, 443 → HTTPS, 3389 → bureau à distance) ;
  3. affiche, pour chaque port, une ligne de la forme « 23 : Telnet (non chiffré, à éviter) » lorsque le service est Telnet ou FTP, et « 22 : SSH » sinon.
Voir une solution
services = {
    21: "FTP",
    22: "SSH",
    23: "Telnet",
    80: "HTTP",
    443: "HTTPS",
    3389: "Bureau à distance",
}

for port in [21, 22, 23, 80, 443, 3389]:
    nom = services[port]
    if nom in ("Telnet", "FTP"):
        print(f"{port} : {nom} (non chiffré, à éviter)")
    else:
        print(f"{port} : {nom}")

Le dictionnaire joue le rôle d'un tableau de correspondance. La condition utilise in avec un tuple pour tester l'appartenance à un petit groupe. Pour aller plus loin, ajoutez un test qui signale aussi le port 3389 comme « à protéger derrière un accès contrôlé ».

Où s'entraîner

Vous pouvez tester chaque exemple dans l'interpréteur interactif (tapez simplement python3 dans le terminal). La documentation officielle de Python est riche, mais commencez par vos propres fichiers de laboratoire : c'est avec vos données que l'apprentissage s'ancre le mieux.

Dans la leçon suivante, vous allez utiliser ces notions pour automatiser une première tâche concrète : lire une liste de machines de votre laboratoire, la nettoyer et la présenter proprement.

À retenir

  • Python est lisible, interactif et riche en bibliothèques standard : un excellent outil d'automatisation pour la sécurité.
  • Variables, listes, dictionnaires, conditions, boucles et fonctions suffisent pour écrire des scripts utiles.
  • L'indentation fait partie de la syntaxe ; les f-strings facilitent l'affichage.
  • Un bon script gère les erreurs, ne contient jamais de secret et est relu avant exécution.
  • Un script ne s'exécute que sur vos systèmes ou avec autorisation écrite.
Publicité
Connectez-vous pour enregistrer votre progression. Se connecter