Aller au contenu principal

codellama

Pour sécuriser votre code avec Ollama

Notions théoriques

Le développement logiciel implique souvent des décisions critiques en matière de sécurité.

Même avec de bonnes pratiques, des erreurs peuvent se glisser dans le code : injections SQL, XSS, fuites de données, etc.

Pour aider à détecter ces vulnérabilités, il est possible d’utiliser l’intelligence artificielle, notamment via des modèles de langage comme ceux proposés par Ollama.

Qu'est-ce qu'Ollama ?

Ollama est un outil open source permettant d’exécuter localement des modèles de langage (LLMs) comme LLaMA, Mistral ou Code LLaMA.

Contrairement aux solutions cloud, Ollama fonctionne en local, ce qui garantit la confidentialité du code analysé.

Pourquoi utiliser Ollama ?

  • Confidentialité : Les données ne quittent pas votre machine.
  • Pas de dépendance à Internet : Une fois le modèle téléchargé, il n’est pas nécessaire d’être connecté.
  • Flexibilité : Ollama permet d’exécuter différents modèles selon les besoins.
  • Open source : Vous pouvez personnaliser et adapter l’outil à vos besoins spécifiques.

Qu'est-ce qu'un LLM ?

Un LLM (Large Language Model) est un modèle d'intelligence artificielle capable de comprendre et de générer du texte. Ces modèles sont entraînés sur de vastes ensembles de données textuelles et peuvent être utilisés pour diverses tâches, telles que :

  • la traduction,
  • la génération de texte,
  • et dans noter cas, l'analyse de code.

Pourquoi utiliser l’IA pour le code ?

  1. Analyse automatisée : L’IA peut repérer des patterns dangereux dans le code source.
  2. Aide à la relecture : Elle peut suggérer des corrections ou des pratiques plus sûres.
  3. Formation continue : Elle peut expliquer pourquoi une portion de code est vulnérable.
  4. Confidentialité : En exécutant le modèle localement, aucune donnée n’est transmise à un serveur distant.

Fonctionnement d’Ollama

  • Ollama télécharge et exécute des modèles LLM localement.
  • Il expose une API locale (par défaut sur http://localhost:11434) pour interagir avec le modèle.
  • Il est possible d’envoyer du code source à cette API et de demander une analyse de sécurité.

Exemple de modèles compatibles

  • llama2 : modèle généraliste
  • codellama : spécialisé dans le code
  • mistral : rapide et efficace
  • phi : petit modèle optimisé

Exemple de dialogue avec l’IA

L’IA peut répondre à des requêtes comme :

  • "Analyse cette fonction Python pour détecter des failles de sécurité."
  • "Y a-t-il une injection SQL possible dans ce code ?"
  • "Comment renforcer la sécurité de cette API Flask ?"

Avantages d’Ollama

  • Pas besoin de connexion Internet après téléchargement du modèle
  • Open source et personnalisable
  • Fonctionne sur Linux, macOS, Windows
  • Compatible avec des outils de développement en ligne de commande

Limites

  • Les modèles sont volumineux (plusieurs Go)
  • Nécessite une machine avec suffisamment de RAM
  • L’analyse dépend de la qualité du modèle utilisé
  • Ne remplace pas un audit de sécurité complet

Cas d’usage typiques

  • Relecture de code avant un commit
  • Analyse automatisée dans un pipeline CI/CD
  • Formation des développeurs juniors à la sécurité
  • Détection de failles dans du code hérité

Exemple pratique

Il est possible de lancer une analyse de sécurité sur un fichier Python en utilisant Ollama et le modèle codellama.

Étapes :

  1. Installer Ollama :
    https://ollama.com/download

  2. Installer un modèle spécialisé dans le code :

    ollama pull codellama
  3. Créer un fichier Python vulnérable :

    import sqlite3
    from flask import Flask, request

    app = Flask(__name__)

    @app.route("/user")
    def get_user():
    username = request.args.get("name")
    conn = sqlite3.connect("users.db")
    cursor = conn.cursor()
    cursor.execute(f"SELECT * FROM users WHERE name = '{username}'")
    return str(cursor.fetchall())
  4. Lancer une analyse avec le modèle :

    ollama run codellama
  5. Coller le code dans le prompt et demander :

    Analyse ce code Python et indique les failles de sécurité potentielles.
  6. Lire les suggestions de l’IA :

    • Injection SQL
    • Absence de validation des entrées
    • Informations sensibles exposées

Test de mémorisation/compréhension


Quel est le rôle principal d'Ollama ?


Quel est l'avantage d'utiliser Ollama par rapport à ChatGPT en ligne ?


Quel modèle est adapté à l’analyse de code ?


Quel port est utilisé par défaut par l’API Ollama ?


Quel est le format de la commande pour télécharger un modèle dans Ollama ?


Pourquoi éviter l'interpolation directe dans une requête SQL ?


Quel est un signe d'une faille dans l'extrait Flask présenté ?


Quel est un risque si le modèle IA est mal utilisé ?


Ollama est-il open source ?


Quel est le principal inconvénient d’Ollama ?


Quel type de modèle est codellama ?


Quel est le protocole utilisé par l’API locale d’Ollama ?


Quel est le risque principal d’un modèle LLM mal entraîné ?


Quel critère est indispensable pour faire tourner Ollama ?


Pourquoi l’analyse de code avec IA ne remplace-t-elle pas un audit complet ?


Quel est un avantage de l’analyse IA en local avec Ollama ?


TP pour réfléchir et résoudre des problèmes

Objectif du TP

Dans ce TP, vous allez utiliser Ollama et le modèle codellama pour analyser un script Python simulant une API REST.

Objectifs
  • détecter des failles de sécurité potentielles,
  • comprendre pourquoi elles sont problématiques,
  • puis proposer une version corrigée du code.

Nous allons :

  1. Installer Ollama et le modèle codellama
  2. Créer une version vulnérable pour tester
  3. L’analyser avec l’IA
  4. Identifier les vulnérabilités
  5. Corriger le code
  6. Ré-analyser la version corrigée

Étape 1 – Installer Ollama et le modèle codellama

Installez Ollama depuis le site officiel, puis téléchargez le modèle spécialisé dans le code.

# Télécharger Ollama
https://ollama.com/download

# Une fois installé, ouvrez un terminal et tapez :
ollama pull codellama
info

Le modèle codellama est optimisé pour comprendre la structure du code source et détecter des patterns problématiques.


Étape 2 – Création d’une version vulnérable pour tester

Créez un fichier appelé vulnerable_api.py dans un dossier de travail, par exemple ~/tp-ollama, et copiez-y le code suivant :

from flask import Flask, request, make_response
import sqlite3

app = Flask(__name__)

@app.route("/login", methods=["POST"])
def login():
username = request.form["username"]
password = request.form["password"]

conn = sqlite3.connect("users.db")
cursor = conn.cursor()
query = f"SELECT * FROM users WHERE username = '{username}' AND password = '{password}'"
cursor.execute(query)
user = cursor.fetchone()
conn.close()

if user:
resp = make_response(f"Welcome {username}")
resp.set_cookie("username", username)
return resp
else:
return "Invalid credentials", 401

@app.route("/profile")
def profile():
username = request.cookies.get("username")
return f"<h1>Profile for {username}</h1>"

if __name__ == "__main__":
app.run(debug=True)
info

Ce code contient plusieurs vulnérabilités intentionnelles :

  • Injection SQL (requête non paramétrée)
  • Stockage de mot de passe en clair
  • Cookie non sécurisé
  • XSS possible via le nom d’utilisateur affiché sans échappement

Étape 3 – Lancer une session d’analyse avec Ollama

Dans un terminal, démarrez une session interactive avec le modèle :

ollama run codellama

Copiez-collez ensuite le contenu du fichier vulnerable_api.py dans le prompt d’Ollama, puis tapez la consigne suivante :

Analyse ce code Flask et identifie les failles de sécurité potentielles. Propose des corrections.

Étape 4 – Lister les vulnérabilités détectées

Listez les problèmes identifiés par l’IA et pour chaque vulnérabilité, expliquez :

  • Quelle est la faille ?
  • Pourquoi est-ce un problème ?
  • Quel est le risque pour l’utilisateur ou le serveur ?

Exemple :

1. Injection SQL
- Le code construit une requête SQL avec des chaînes non échappées.
- Cela permet à un utilisateur malveillant d’injecter du SQL arbitraire.
- Risque : accès ou suppression de données, contournement d’authentification.

2. XSS
- Le nom d’utilisateur est affiché sans échappement HTML.
- Un utilisateur peut injecter du JavaScript malveillant.
- Risque : vol de session, redirection vers un site malveillant.

3. Cookie non sécurisé
- Le cookie de session n’est pas marqué comme HttpOnly ou Secure.
- Risque : vol de cookie via XSS, session hijacking.

Étape 5 – Corriger le code

Dupliquez le fichier en vulnerable_api_corrige.py et appliquez les correctifs proposés par l’IA (et/ou ceux que vous jugez pertinents).

Vous pouvez :

  • Ajouter des vérifications sur les entrées utilisateur
  • Utiliser des requêtes SQL paramétrées
  • Échapper les sorties HTML
  • Ajouter une authentification rudimentaire
  • Sécuriser les cookies de session
📌 Une solution

Étape 6 – Ré-analyser la version corrigée

Relancez ollama run codellama, collez le contenu du fichier vulnerable_api_corrige.py et demandez :

Peux-tu vérifier si ce code est toujours vulnérable ? Si oui, indique les problèmes restants.

L’IA devrait confirmer que la majorité des problèmes ont été corrigés.

Elle pourrait néanmoins suggérer :

  • D’utiliser un ORM comme SQLAlchemy
  • De chiffrer les mots de passe avec bcrypt
  • D’ajouter des tests automatisés