Comment préparer / construire des fonctionnalités pour la détection d'anomalies (données de sécurité réseau)


9

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.


"Cependant, la distance de Mahalanobis ne pouvait être appliquée qu'aux entités normalement distribuées." En fait, de forme elliptique. Pouvez-vous publier les premières lignes de votre ensemble de données (ou quelques faux numéros mais ayant les mêmes fonctionnalités que la réalité)?
user603

Je suppose que la forme elliptique signifie le produit de deux caractéristiques normalement distribuées, avec des écarts moyens et standard différents, mais toujours normalement distribuées.
Andrey Sapegin

Non, une forme elliptique signifie une forme comme l'ombre d'un ballon de football en 2D, un ballon de football en 3D et en général un ballon de football de dimension D dans l'espace dimensionnel D.
user603

Par curiosité. Pourriez-vous partager certaines des données / avec quel ensemble de données vous travaillez? S'agit-il d'un ensemble de recherche public / universitaire?
sabalaba

Malheureusement, ce n'est pas un ensemble de données public et je ne suis pas en mesure de le partager. Cependant, il devrait exister un célèbre ensemble de données KDDCup 1999 ou un ensemble de données Scan34 de Honeynet ( old.honeynet.org/scans/scan34 ). Les deux ensembles de données ont des journaux (pas le trafic réseau) pour l'analyse (Apache, Snort, syslog, etc.). Dans l'ensemble de données que j'ai, la plupart des journaux sont des journaux Active Directory. Je ne sais pas s'il existe des événements AD / Windows publics disponibles pour l'analyse (plus tôt, j'utilisais un ensemble de données auto-généré en raison de l'absence du vrai). De plus, l'ensemble de données dont je dispose est très volumineux (150 millions d'enregistrements).
Andrey Sapegin

Réponses:


2

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 .


1
Merci pour les liens, ils sont très utiles. (1) Le premier article que vous avez mentionné est très intéressant. Il semble qu'il soit possible de transformer la distribution en normale pour appliquer la distance de Mahalanobis plus tard. J'essaierai d'y entrer. (2) Savez-vous s'il existe d'autres approches, par exemple des mesures de similitude comme la distance cousine, qui ne fonctionnent pas sur des distances? (3) Les diapositives de présentation que vous avez mentionnées se concentrent cependant sur les paquets de trafic réseau, pas sur les journaux.
Andrey Sapegin

1
En ce qui concerne d'autres approches, j'ai pensé à suivre 2: (1) SVM à une classe pourrait trouver une corrélation entre les caractéristiques, si un modèle à haut polinôme est utilisé; (2) les lignes du journal des menaces sous forme de phrases et utiliser la similitude de cousine pour les regrouper / les regrouper. Le premier, j'ai déjà essayé de l'implémenter, mais il fonctionne déjà plus d'une semaine sur 1 CPU (je forme d'abord un modèle sur la première moitié des données, et je l'applique sur la seconde. Puis vice versa). La deuxième approche implique un espace de grande dimension (par exemple, chaque valeur différente de nom d'utilisateur sera une caractéristique).
Andrey Sapegin du

1
@AndreySapegin: Si les résultats de vos tentatives actuelles ne sont pas assez bons, vous pouvez essayer d'autres approches, mentionnées dans les articles auxquels j'ai fait référence. C'était l'idée. Encore une chose - essayez le logiciel ML open source GraphLab (une partie de celui-ci est maintenant appelé Dato): dato.com/products/create/open_source.html . Le logiciel GraphLab est performant et très évolutif sur non seulement les cœurs de processeur, mais aussi les processeurs et même les machines.
Aleksandr Blekh

1
@AndreySapegin: Un article de mon collègue universitaire vient d'apparaître dans mon flux ResearchGate. Je pense que cela pourrait être très utile pour vous (utilise l'approche ANN pour détecter les intrusions - via la bibliothèque cool Encog ML, dont il est le créateur et le principal contributeur - Encog est également évolutif via le multicœur et le GPU). Voici l'article: researchgate.net/profile/Jeff_Heaton/publication/… . Voici des informations sur Encog: heatonresearch.com/encog .
Aleksandr Blekh

1
À quiconque a attribué la prime à ma réponse: j'apprécie votre générosité et je reconnais mes efforts pour des réponses de qualité.
Aleksandr Blekh

3

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:

  • Certaines adresses IP semblent-elles s'authentifier en tant qu'utilisateurs inhabituellement nombreux (ou inhabituellement peu nombreux)?
  • Certaines adresses IP ont-elles un nombre anormalement élevé d'échecs d'authentification?
  • Certaines adresses IP ont-elles un modèle inhabituel d'horaires d'accès (par exemple, beaucoup d'activité vers 3 heures du matin dans leur fuseau horaire, ou demandes toutes les 1 seconde tout au long de la journée)?

Vous pouvez faire des choses similaires pour d'autres groupes, comme le nom d'utilisateur:

  • Cet utilisateur s'authentifie-t-il à partir d'un autre ordinateur lorsqu'il utilisait auparavant le même ordinateur pour toutes les demandes?
  • Cet utilisateur touche-t-il soudainement une partie du système de fichiers qu'il n'a jamais touchée auparavant?

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.


2
Merci pour votre réponse, c'est un bon point. Si j'ai bien compris, vous proposez de vous concentrer sur une analyse plus simple que la détection d'anomalies. Du point de vue technique (industrie), vous avez raison. Cependant, je fais une recherche et je voudrais me concentrer sur l'analyse de l'apprentissage automatique. L'analyse basée sur les requêtes que vous avez proposée que nous avons déjà effectuée (peut-être pas exactement identique aux requêtes que vous avez proposées, mais similaire) ... Un autre argument pour le faire est que de nombreuses entreprises tentent actuellement de détecter les anomalies en plus de la `` normale '' ( plus simple, mais toujours conforme) requêtes et règles ...
Andrey Sapegin

2

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?


1

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,


Le problème est qu'il est extrêmement compliqué d'obtenir un échantillon de données sans attaques. Souvent, personne ne sait s'il y a des attaques dans l'ensemble de données.
Andrey Sapegin

0

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.


1
Il semble que vous ayez créé accidentellement un deuxième compte - voyez ici pour savoir comment les fusionner. Cela vous permettra de modifier vos propres messages.
Silverfish

0

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.