Travaillé du 2021-01-14 au 2021-12-06

🏷 Mots clés

🚦 Status

Terminé

Un microservice de détection du comportement des ransomwares utilisant l’apprentissage automatique et les logs de Windows SYSMON avec une exactitude de 99,18 %, une précision de 98,29 % et un rappel de 98,85 %.

Description

Ce projet était mon projet principal pour ma dernière année à l’Université d’Ottawa pour mon baccalauréat en génie logiciel avec Bell Canada comme client. J’ai travaillé sur ce projet avec Zainab Al Showely pendant deux semestres.

Architecture

Voici l’architecture globale du projet :

Microservice Architecture Diagram
Légende :
Diagram Legend

Tout repose sur Kafka pour le flux de données dans le microservice. Les journaux sont envoyés du client à un sujet Kafka spécifique (peut être fait avec Winlogbeat sur un serveur distant.

Sur le serveur, le service d’apprentissage automatique traite les journaux à un intervalle défini (30 secondes par défaut) et analyse les journaux d’un intervalle plus long (10 minutes par défaut) dans le passé. Il utilise Spark et un modèle Random Forest entraîné avec un ensemble de données SYSMON. Si les journaux sont détectés comme malveillants, ils sont transmis au sujet Kafka malveillant, où notre Bell prendra les mesures appropriées pour bloquer cette menace.

Voici l’architecture utilisée pour tester les journaux et former un nouveau modèle. Il s’agit d’un processus d’apprentissage automatique assez générique.

Machine Learning Architecture Diagram

CI/CD

Notre client utilise des serveurs OpenShift, nous avons donc décidé de tout dockeriser, ce qui facilite l’exécution et le développement. Les actions GitHub sont utilisées pour lint, exécuter des tests et construire l’image Docker.

GitHub Actions CI

Une fois les images construites, elles sont stockées dans un registre de conteneurs GitHub privé, afin d’être utilisées par notre client.

GitHub Container Registry

Surveillance

Cette application étant principalement destinée aux développeurs/analystes, nous voulions leur faciliter l’interface avec notre microservice et leur simplifier la vie. C’est pourquoi nous avons construit un tableau de bord Grafana personnalisé où vous pouvez jeter un coup d’œil rapide sur les logs, ainsi que sur les SYSMON logs malveillants (s’il y en a).

Grafana Machine Learning Service Dashboard

Traçage

Puisque le ransomware est un problème de temps, nous voulions que notre microservice soit aussi rapide que possible et nous voulions également être en mesure de détecter toute partie lente dans notre projet. Nous avons mis en place le traçage Jaeger pour visualiser le temps passé dans les fonctions de notre code ainsi que les logs.

Jaeger Trace Example

Nous avons créé un simple décorateur Python qui crée un nouveau span pour la fonction et lie tous les logs à ce span le plus actif. Avec le décorateur créé, pour faire le traçage d’une fonction, il est aussi simple que d’ajouter ce qui suit avant la fonction.

@trace

Or

@trace(service="train_model")

Améliorations

Comme nous avons dû passer des logs PROCMON aux logs SYSMON au milieu du projet, nous avons perdu du temps à modifier toutes les fonctionnalités créées.

De plus, le modèle est peut être biaisé car nous n’avions pas beaucoup de données et avec l’agrégation des processus (faite dans la génération des attributs), nous avons pu nous retrouver avec encore moins de données. Par conséquent, une façon d’améliorer cela serait d’obtenir plus de données pour créer un nouveau modèle plus performant.

Démonstration

Voici la démo finale du projet de fin d’études qui explique les technologies utilisées, leur fonctionnement et une petite démo de détection avec APTSimulator :

🛠 Technologies

Langues

Cadriciels