Mon objectif est d'analyser les journaux du réseau (par exemple, Apache, syslog, audit de sécurité Active Directory, etc.) à l'aide de la détection de cluster / anomalie à des fins de détection d'intrusion.
Dans les journaux, j'ai beaucoup de champs de texte comme l'adresse IP, le nom d'utilisateur, le nom d'hôte, le port de destination, le port source, etc. (au total 15-20 champs). Je ne sais pas s'il y a des attaques dans les journaux et je veux mettre en évidence les événements les plus suspects (valeurs aberrantes).
Habituellement, la détection d'anomalies marque les points avec une faible probabilité / fréquence comme des anomalies. Cependant, la moitié des enregistrements de journal contiennent une combinaison unique de champs. Ainsi, la moitié des enregistrements de l'ensemble de données auront la fréquence la plus basse possible.
Si j'utilise la détection d'anomalies basée sur le clustering (par exemple, trouver des clusters puis sélectionner des points éloignés de tous les centres de cluster), j'ai besoin de trouver la distance entre différents points. Puisque j'ai 15-20 champs, ce sera un espace multidimensionnel, où les dimensions sont le nom d'utilisateur, le port, l'adresse IP, etc. Cependant, la distance de Mahalanobis ne pouvait être appliquée qu'aux entités normalement distribuées. Cela signifie qu'il n'y a aucun moyen de trouver la distance entre les points de données et de construire des clusters ...
Par exemple, imaginons que j'ai des utilisateurs Alice, Bob, Carol, Dave, Eve et Frank dans l'ensemble de données de 20 enregistrements. Ils pourraient avoir le nombre d'occurrences suivant dans la base de données: 2,5,2,5,1,5. Si je mappe simplement les noms d'utilisateur aux nombres, par exemple
Alice --> 1
Bob --> 2
Carol --> 3
Dave --> 4
Eve --> 5
Frank --> 6
Ensuite, ma distribution de probabilité pour les noms d'utilisateur se présentera comme suit:
p (1) = 0,1, p (2) = 0,25, p (3) = 0,1, p (4) = 0,25, p (5) = 0,05, p (6) = 0,25
Bien sûr, ce n'est pas une distribution normale, et cela n'a pas beaucoup de sens, car je pourrais mapper les noms d'utilisateur de manière différente ...
Ainsi, un simple mappage de champs tels que nom d'utilisateur, action, numéro de port, adresse IP, etc., vers des numéros n'apporte rien.
Par conséquent, je voudrais demander comment les champs de texte sont traités / les fonctionnalités construites habituellement pour rendre possible la détection d'anomalies / de valeurs aberrantes non surveillée?
EDIT: structure des données.
J'ai environ 100 colonnes dans la table de base de données, contenant des informations sur les événements Active Directory. À partir de ces 100 colonnes, je sélectionne les plus importantes (de mon point de vue): SubjectUser, TargetUser, SourceIPaddress, SourceHostName, SourcePort, Computer, DestinationIPaddress, DestinationHostName, DestinationPort, Action, Status, FilePath, EventID, WeekDay, DayTime.
Les événements sont des événements Active Directory, où EventID définit ce qui a été enregistré (par exemple, création d'un ticket Kerberos, ouverture de session utilisateur, fermeture de session utilisateur, etc.).
L'échantillon de données ressemble à ceci:
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | Ordinateur | DestinationIPaddress | DestinationHostName | DestinationPort | Action | Status | FilePath | EventID | WeekDay | DayTime | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 171390673 |? |? |? |? |? | domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |? | / Authentification / Vérifier | / Succès |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 173348232 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Authentification / Vérifier | / Succès |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 180176916 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Authentification / Vérifier | / Succès |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 144144725 |? | John.Doe | 3.3.3.3 | domaincontroller3.domain.com | 2407 | domaincontroller3.domain.com | 3.3.3.4 | domaincontroller3.domain.com |? | / Authentification / Vérifier | / Succès |? | 4624 | 3 | 12345 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - +
Au total, j'ai environ 150 millions d'événements. Différents événements ont différents champs remplis et tous les événements ne sont pas liés à la connexion / déconnexion de l'utilisateur.
la source
Réponses:
Je ne suis certainement pas un expert en détection d'anomalies . Cependant, c'est un domaine intéressant et voici mes deux cents. Tout d'abord, compte tenu de votre note selon laquelle "la distance de Mahalanobis ne peut être appliquée qu'aux entités normalement distribuées". J'ai parcouru certaines recherches qui soutiennent qu'il est toujours possible d'utiliser cette métrique dans les cas de données non normales . Jetez un œil par vous-même à ce document et à ce rapport technique .
J'espère également que vous trouverez utiles les ressources suivantes sur la détection d'anomalies non surveillées (AD) dans le contexte de la sécurité des réseaux informatiques , en utilisant diverses approches et méthodes: cet article , présentant un cadre géométrique pour AD non supervisé; cet article , qui utilise une approche de clustering basée sur la densité et la grille ; cette présentation diapositives , qui mentionnent l'utilisation de cartes auto-organisées pour AD.
Enfin, je vous suggère de jeter un œil à mes réponses suivantes, qui, selon moi, sont pertinentes pour le sujet et, par conséquent, pourraient être utiles: réponse sur les approches de clustering , réponse sur le clustering non basé sur la distance et réponse sur les options logicielles pour AD .
la source
Tout d'abord, je pense qu'il y a des choses auxquelles vous devrez peut-être vous résigner.
Une contrainte importante que je vois sur ce problème est que vous devriez probablement être prêt à avoir un taux de faux positifs assez élevé. Pour autant que je sache, le taux de base des enregistrements faisant partie d'une anomalie de réseau est assez faible (citation nécessaire). Appelons cela des cotes de 1000: 1, pour le bien de l'argument. Ensuite, même si vous observez un modèle qui est 100 fois plus susceptible de se produire si l'enregistrement est une intrusion, alors s'il est légitime, la règle de Bayes dit que les chances postérieures sont de 10: 1 que le trafic est toujours légitime.
L'autre problème est que certaines intrusions sont difficiles à détecter, même en principe . Par exemple, si quelqu'un m'engageait socialement à leur donner mon ordinateur, puis se connectait à ce service et téléchargeait un fichier top secret sur lequel je travaillais, ce serait assez difficile à trouver. Fondamentalement, un attaquant suffisamment déterminé peut rendre son comportement intrusif presque arbitrairement proche du comportement normal du système.
De plus, vos adversaires sont des processus intelligents et non statistiques, donc si vous commencez à détecter un schéma et à le supprimer, ils peuvent simplement répondre en ne suivant plus ce schéma. C'est pourquoi, par exemple, vous verrez beaucoup de messages de spam avec des espaces entre toutes les lettres (vous offrant "
V I A G R A
" ou autre). Les filtres anti-spam ont compris que la chaîne "viagra" était du spam, donc les attaquants ont juste commencé à faire autre chose.Pour cette raison, je pense que cela vaut la peine de réfléchir assez durement aux types d'intrusions que vous pensez que cela vaut la peine d'être détecté. Il y a certainement des fruits à portée de main ici, alors ne laissez pas le parfait être l'ennemi du bien et essayez de trouver un algorithme qui puisse détecter toutes les intrusions.
Cela mis à part, parlons des fruits bas. Ici, je pense qu'il pourrait être productif pour vous de déplacer votre unité d'analyse des enregistrements individuels vers un groupe d'enregistrements.
Par exemple, vous avez dit que la moitié de tous les enregistrements ont des combinaisons uniques de champs. Mais sans doute, par exemple, la plupart des adresses IP source apparaissent dans plusieurs enregistrements - ce sont les autres champs de la demande qui changent et rendent la combinaison unique. Si vous groupez les demandes par IP, vous pouvez alors poser des questions comme:
Vous pouvez faire des choses similaires pour d'autres groupes, comme le nom d'utilisateur:
Je ne connais aucun classificateur standard qui semble particulièrement adapté à cela, car le comportement potentiel de vos utilisateurs est si varié et vous êtes probablement principalement intéressé par les changements de comportement au fil du temps. Cela signifie que vous voulez probablement construire une sorte de modèle de ce que chaque utilisateur / IP / tout ce qui est susceptible de faire à l'avenir, et signaler tout écart par rapport à ce modèle. Mais c'est un processus assez intensif si vos utilisateurs ont des comportements différents!
En raison de cette difficulté, je pense que pour l'instant, il pourrait être plus productif de faire le type d'analyse en mode exploratoire que j'ai décrit ci-dessus. Cela vous informera probablement des types de modèles les plus intéressants, puis vous pourrez commencer à utiliser des algorithmes statistiques sophistiqués pour détecter ces modèles.
la source
Je pense qu'en premier lieu, vous devez avoir un ensemble de données qui enregistre les données pendant une période sans attaques. Cet ensemble de données doit capturer les variations inhérentes à un système se comportant normalement. Je voudrais souligner le fait qu'il ne s'agit pas d'avoir un ensemble de données annoté.
Ensuite, j'essayerais de combiner toutes (ou un sous-ensemble) de métriques en une seule. Cette nouvelle métrique devrait refléter la quantité de "surprise". Par exemple, une valeur faible signifie que le système fonctionne normalement, un pic / plateau de valeur élevée signifie qu'il y a un changement rapide. Ici, je pense aux diagrammes de style de graphique CUSUM ou Shewhart.
Pouvez-vous fournir quelques exemples des données disponibles? S'agit-il principalement de chaînes, de chiffres, d'indicateurs 1/0?
la source
Une possibilité est d'apprendre un réseau bayésien entre les fonctionnalités étant donné quelques données de fond sans attaques. L'apprentissage d'un réseau bayésien est utile car il met en évidence l'indépendance conditionnelle entre les fonctionnalités. Par conséquent, vous ne traitez pas avec toutes les combinaisons possibles de fonctionnalités. Par exemple, si la fonctionnalité A affecte B et C et que les fonctionnalités B et C affectent ensemble D, alors vous apprenez seulement un modèle pour la façon dont A affecte B, comment affecte C et comment B et C affectent conjointement D. Ce modèle nécessitera beaucoup moins paramètres que la distribution de probabilité entière et est la principale raison pour laquelle les réseaux bayésiens sont utilisés au lieu de simplement stocker la distribution de probabilité conjointe entière. Pour tester une anomalie dans un réseau bayésien, calculez la probabilité d'un point de données entrant à l'aide du modèle de réseau bayésien appris. Si la probabilité est très faible,
la source
J'ai pensé que la réponse de Ben Kuhn était pragmatique et perspicace.
Maintenant, mes propres antécédents incluent la classification de texte, les systèmes experts, le clustering et la sécurité. Dans ce contexte, je tiens à penser que je pourrais avoir quelque chose à ajouter à la conversation. Mais les déclarations précédentes de Ben Kuhn soulignent que des approches simples peuvent produire de nombreux faux positifs. Le personnel informatique, lorsqu'il est confronté à de nombreux faux positifs, «se désengage» généralement parce qu'il n'a tout simplement pas le temps de chasser les faux positifs tout le temps.
Alors que faire?
Certes, les journaux avec des attaques pourraient être utiles, mais nous avons un catch-22 à moins que les entreprises ne partagent en quelque sorte les données d'attaque. Alors que certaines start-up de la Silicon Valley pourraient poursuivre un tel partage des menaces, que pouvons-nous faire d'autre?
Une approche possible consiste à créer une simulation du réseau, puis à trouver un moyen de générer des attaques contre la simulation. Autrement dit, supposons que nous créons une simulation où les chapeaux noirs (également simulés) ne sont pas connus à l'avance pour les chapeaux blancs. Compte tenu de ces attaques, nous pouvons alors tenter de créer des algorithmes qui devraient découvrir ces attaques. Si les chapeaux noirs fonctionnent indépendamment des chapeaux blancs, alors nous aurons une vraie bataille qui se jouera. Si les attaquants pénètrent dans le système ou ne sont pas détectés, les chapeaux blancs ont, dans une certaine mesure, échoué.
On pourrait même avoir une structure incitative lorsque les analystes sécurité de l'équipe black hat sont récompensés pour leurs succès (culottes ou attaques non découvertes). De même, le groupe comprenant les chapeaux blancs est récompensé pour l'arrêt de la culotte et / ou la détection des attaques.
Il n'y a rien de parfait dans cet arrangement. De toute évidence, les vrais chapeaux noirs pourraient dépasser les talents de l'équipe "amicale" des chapeaux noirs. Néanmoins, en tant que personne qui a une bonne quantité d'analyse de données, il me semble qu'il est très difficile de quantifier le succès des chapeaux blancs sans une meilleure compréhension des chapeaux noirs. En bout de ligne, c'est ça. Si nous ne pouvons pas savoir ce que font les vrais chapeaux noirs, la prochaine meilleure chose est les chapeaux noirs amicaux.
J'ai aussi une idée assez inhabituelle. Supposons qu'en plus des chapeaux noirs amicaux et des chapeaux blancs, il y ait une équipe de chapeaux gris. Que signifie être un chapeau gris? L'idée est simple. Les chapeaux gris sont autorisés à regarder ce que font les chapeaux noirs amicaux et les chapeaux blancs. Mais pourquoi?
Supposons que les chapeaux noirs amis lancent des attaques en utilisant les approches A, B et C, et les chapeaux blancs ne découvrent jamais aucune de ces trois approches. Eh bien, les chapeaux gris sont autorisés à regarder ce que font à la fois les chapeaux noirs amicaux et les chapeaux blancs, et ils essaient de réfléchir aux principes qui pourraient être utilisés pour découvrir ces attaques non détectées. Si le chapeau gris trouve de tels principes, l'équipe du chapeau gris peut alors partager ces principes avec l'équipe du chapeau blanc sans décrire en détail les attaques exactes.
L'espoir est que ces "indices" fournis par l'équipe du chapeau gris poussent l'équipe du chapeau blanc dans la bonne direction sans trop en révéler.
Rétrospectivement, je m'excuse si ma réponse ne concerne vraiment pas des techniques spécifiques. Évidemment, ma réponse ne concerne pas des techniques spécifiques. Mais d'après mon expérience, de nombreux problèmes d'apprentissage automatique - y compris ceux liés à la sécurité - échouent souvent parce que les données sont insuffisantes. Cette approche, utilisant des chapeaux blancs, des chapeaux gris et des chapeaux noirs, pourrait aider à produire les données qui permettraient à une entreprise de sécurité (ou au personnel informatique) non seulement de quantifier l'efficacité de leurs défenses, mais également de fournir une structure organisationnelle qui pousse l'équipe des chapeaux blancs d'améliorer progressivement leurs défenses et leur suivi.
Je n'ai vraiment aucune idée si l'approche que je propose est originale. Je n'ai jamais entendu parler de chapeaux gris, mais je pense en fait que le rôle des chapeaux gris pourrait être essentiel pour faire avancer l'équipe blanche, sans en révéler trop.
Remarque: mon utilisation du terme "chapeau gris" ici n'est pas standard. Voir http://www.howtogeek.com/157460/hacker-hat-colors-explained-black-hats-white-hats-and-gray-hats/ . Donc, un autre terme, peut-être "chapeau rayé" devrait être utilisé à la place.
Mais l'idée reste la même: un chapeau rayé peut aider à arbitrer le travail des chapeaux noirs amicaux et des défenseurs (chapeaux blancs), de sorte que certaines idées et astuces peuvent être judicieusement partagées avec les chapeaux blancs.
la source
Depuis que j'ai posté la question d'origine, j'ai effectué de nombreuses recherches sur ce sujet et je peux maintenant fournir mes résultats comme réponse.
Tout d'abord, dans notre laboratoire, nous développons un système SIEM qui utilise des algorithmes de détection d'anomalies. La description du système et des algorithmes est disponible dans mon article Vers un système d'analyse complexe des événements de sécurité dans les réseaux à grande échelle
En plus de cela, j'ai écrit un bref résumé sur la façon de traiter ces données dans ma réponse à une question similaire sur Cross Validated
la source