Spaces:
Running
Running
| # Workshop 1 : Analyse de Journaux Système avec un Modèle NVIDIA LLM | |
| ## Utilisation des Modèles LLM pour la Détection d'Anomalies en Cybersécurité | |
| ## Introduction | |
| Ce TP a pour objectif de vous initier à l’utilisation des modèles de langage (LLM) open-source dans le domaine de la cybersécurité. Nous allons utiliser le modèle **LLaMA-3.1-Nemotron-70B-Instruct** fourni par NVIDIA pour analyser des journaux système, détecter des anomalies et générer des recommandations de sécurité. | |
| --- | |
| ## Objectifs | |
| 1. Comprendre comment utiliser l’API NVIDIA pour exploiter un modèle de langage avancé. | |
| 2. Apprendre à analyser des journaux système avec un modèle LLM. | |
| 3. Automatiser la génération de rapports de sécurité. | |
| --- | |
| ## Prérequis | |
| 1. **Compte NVIDIA NGC** : Créez un compte [ici](https://www.nvidia.com/ngc). | |
| 2. **Clé API NVIDIA** : Générez une clé API dans votre tableau de bord NVIDIA NGC. | |
| 3. **Google Colab** : Utilisez une instance Colab pour exécuter ce TP. | |
| 4. **Documentation de l'API NVIDIA** : Consultez [ce lien](https://build.nvidia.com/nvidia/llama-3_1-nemotron-70b-instruct). | |
| --- | |
| ## Étape 1 : Configuration de l’API NVIDIA | |
| ### 1.1 Installation des Bibliothèques | |
| Exécutez la cellule suivante dans Google Colab pour installer les dépendances : | |
| ```python | |
| !pip install openai | |
| ``` | |
| ### 1.2 Configuration de l’API | |
| Créez un client pour interagir avec l’API NVIDIA. | |
| ```python | |
| from openai import OpenAI | |
| # Configurer le client NVIDIA | |
| client = OpenAI( | |
| base_url="https://integrate.api.nvidia.com/v1", | |
| api_key="VOTRE_API_KEY" # Remplacez par votre clé API NVIDIA | |
| ) | |
| print("API NVIDIA configurée avec succès.") | |
| ``` | |
| **Remarque** : Remplacez `VOTRE_API_KEY` par votre clé API NVIDIA. | |
| --- | |
| ## Étape 2 : Chargement des Journaux Système | |
| ### 2.1 Simulation de Journaux | |
| Créez une liste contenant des journaux système simulés : | |
| ```python | |
| # Journaux système simulés | |
| logs = [ | |
| "2025-01-10 12:00:01 User 'admin' logged in from IP 192.168.1.10", | |
| "2025-01-10 12:15:23 Failed login attempt for user 'root' from IP 10.0.0.15", | |
| "2025-01-10 12:20:45 User 'john' downloaded sensitive file 'confidential.pdf'", | |
| "2025-01-10 12:35:50 Unusual traffic detected from IP 10.0.0.20", | |
| "2025-01-10 12:50:10 User 'admin' performed a password reset for user 'guest'" | |
| ] | |
| print("Journaux système chargés :") | |
| for log in logs: | |
| print(log) | |
| ``` | |
| --- | |
| ## Étape 3 : Analyse des Journaux avec NVIDIA LLM | |
| ### 3.1 Préparer le Prompt | |
| Le prompt est une instruction que nous envoyons au modèle pour effectuer une analyse. | |
| ```python | |
| # Créer un prompt pour le modèle | |
| prompt = f""" | |
| Voici une liste de journaux système : | |
| {chr(10).join(logs)} | |
| 1. Identifiez les événements suspects ou inhabituels. | |
| 2. Expliquez pourquoi ces événements sont problématiques. | |
| 3. Proposez des recommandations pour éviter ces problèmes à l'avenir. | |
| """ | |
| print("Prompt créé pour le modèle.") | |
| ``` | |
| ### 3.2 Envoyer le Prompt à l’API | |
| Utilisez l’API NVIDIA pour analyser les journaux. | |
| ```python | |
| # Envoyer la requête à l’API NVIDIA | |
| completion = client.chat.completions.create( | |
| model="nvidia/llama-3.1-nemotron-70b-instruct", | |
| messages=[{"role": "user", "content": prompt}], | |
| temperature=0.5, | |
| top_p=1, | |
| max_tokens=1024, | |
| stream=True | |
| ) | |
| # Afficher la réponse en continu | |
| print("\n### Résultat d'analyse ###") | |
| for chunk in completion: | |
| if chunk.choices[0].delta.content is not None: | |
| print(chunk.choices[0].delta.content, end="") | |
| ``` | |
| --- | |
| ## Étape 4 : Sauvegarder le Rapport | |
| ### 4.1 Enregistrer le Rapport | |
| Les résultats générés par le modèle peuvent être sauvegardés pour une analyse ultérieure. | |
| ```python | |
| # Sauvegarder le rapport généré | |
| rapport = "" | |
| for chunk in completion: | |
| if chunk.choices[0].delta.content is not None: | |
| rapport += chunk.choices[0].delta.content | |
| with open("rapport_securite.txt", "w") as file: | |
| file.write(rapport) | |
| print("\nLe rapport a été sauvegardé sous 'rapport_securite.txt'.") | |
| ``` | |
| --- | |
| ## Discussions et Questions | |
| ### Questions pour les étudiants | |
| 1. Quels événements ont été identifiés comme suspects ? | |
| 2. Les recommandations sont-elles pertinentes ? | |
| 3. Comment pourrait-on améliorer l’analyse pour des systèmes réels ? | |
| ### Suggestions d’amélioration | |
| 1. Ajouter des journaux système réels pour tester la robustesse. | |
| 2. Personnaliser les modèles avec des données d’entraînement spécifiques. | |
| 3. Automatiser la classification des événements par gravite : critique, moyenne, faible. | |
| --- | |
| ## Conclusion | |
| Ce TP vous a permis de : | |
| - Configurer un modèle LLM NVIDIA. | |
| - Analyser des journaux système et détecter des anomalies. | |
| - Générer un rapport automatisé de sécurité. | |
| Si vous avez des questions ou souhaitez explorer d’autres cas d’usage, n’hésitez pas à les poser à la fin du workshop. | |