Créer une détection personnalisée
Les détections personnalisées vous permettent de spécifier les critères qui génèrent des détections sur le système ExtraHop. Les détections basées sur l'apprentissage automatique et les règles capturent les comportements inhabituels et les menaces courantes, mais en créant une détection personnalisée, vous pouvez vous concentrer sur les appareils et les comportements qui sont critiques pour votre réseau.
Lors de la création d'une détection personnalisée, vous devez créer un déclencheur qui identifie l'événement système et les conditions que le système doit surveiller, puis vous pouvez assigner le déclencheur aux appareils ou groupes d'appareils spécifiques que vous souhaitez surveiller. Lorsque l'événement se produit, une détection est générée.
Dans ce guide, nous fournissons les étapes et un exemple de script qui génère une détection personnalisée lorsque des connexions suspectes sont effectuées vers des sites web spécifiés via Windows PowerShell.
Before you begin
- Vous devez être familiarisé avec ExtraHop Déclencheurs. En particulier, tenez compte des meilleures pratiques suivanteslors de la rédaction de votre script et de l'attribution des déclencheurs.
- Vous devez disposer d'un compte utilisateur doté des privilèges requis pour créer des déclencheurs.
- Si vous disposez d'une console, créez un déclencheur sur la console et le déclencheur s'exécutera sur tous les capteurs connectés.
Créer un déclencheur pour générer des détections personnalisées
Les déclencheurs génèrent des détections personnalisées en appelant la fonction commitDetectiondans le script du déclencheur.
Dans l'exemple suivant, le déclencheur génère une détection personnalisée lorsqu'un client PowerShell se connecte à un site web connu pour être un site de stockage de données exfiltrées.
Le déclencheur identifie les connexions PowerShell en recherchant les hachages JA3 du client SSL qui appartiennent à des clients PowerShell connus.
Si la connexion SSL est établie entre un client PowerShell et un hôte suspect, le déclencheur génère une détection. La détection inclut la version de PowerShell qui a initié la connexion, l'adresse IP du serveur et l'adresse IP du client.
Remarque : | Pour plus d'informations sur la fonction commitDetection, consultez la Référence API du déclencheur. |
Création d'un type de détection personnalisé
Après avoir créé un déclencheur pour générer votre détection personnalisée, vous pouvez créer un type de détection personnalisé dans le catalogue des détections afin d'ajouter des informations supplémentaires à votre détection.
Afficher les détections personnalisées
Vous pouvez afficher des détections personnalisées sur la page Détections avec d'autres détections intégrées.
Regrouper la page des détections par type. Toutes les détections de la liste des détections sont regroupées par type de détection.
Par exemple, si le nom d'affichage de votre détection est [custom]Segmentation Breach, l'entrée apparaîtra dans la liste des détections comme dans l'illustration suivante :
Dans le coin supérieur gauche de la page, sélectionnez MITRE Map. Les techniques MITRE liées à la détection personnalisée sont mises en évidence dans la matrice.
Prochaines étapes
Créer une règle de notification de détection. Vous pouvez, par exemple, configurer le système ExtraHop pour qu'il vous envoie un courrier électronique lorsque votre détection personnalisée se produit.
Exemple de déclencheur de détection personnalisé
Le script suivant est l'exemple PowerShell/JA3 complet auquel il est fait référence tout au long de ces instructions.
// Si le serveur est interne, quitter si ( ! Flow.server.ipaddr.isExternal ) { return ; } // Si le nom d'hôte SSL n'est pas défini, quitter si(SSL.host === null) { return ; } // Continuer seulement si le nom d'hôte SSL appartient à l'un des sites suspects if(SSL.host.match(/pastebin/i) || SSL.host.match(/raw.githubusercontent.com/i) || SSL.host.match(/githack/i)) { // Liste des hachages PowerShell JA3 courants let suspect_ja3_hashes = cache('suspect_ja3_hashes', () => ({ '13cc575f247730d3eeb8ff01e76b245f' : 'PowerShell/BitsAdmin/PowerShell 4.0 Windows Server 2012RT', '5e12c14bda47ac941fc4e8e80d0e536f' : 'PowerShell/BitsAdmin/PowerShell 4.0 Windows Server 2012RT', '2c14bfb3f8a2067fbc88d8345e9f97f3':'PowerShell/BitsAdmin Windows Server 2012RT', '613e01474d42ebe48ef52dff6a20f079':'PowerShell/BitsAdmin Windows Server 2012RT', '05af1f5ca1b87cc9cc9b25185115607d':'BitsAdmin/PowerShell 5.0 Windows 7 64 bit enterprise', '8c4a22651d328568ec66382a84fc505f':'BitsAdmin/PowerShell 5.0 Windows 7 64 bit enterprise', '235a856727c14dba889ddee0a38dd2f2':'BitsAdmin/PowerShell 5.1 Server 2016', '17b69de9188f4c205a00fe5ae9c1151f':'BitsAdmin/PowerShell 5.1 Server 2016', 'd0ec4b50a944b182fc10ff51f883ccf7':'PowerShell/BitsAdmin (Microsoft BITS/7.8) Server 2016', '294b2f1dc22c6e6c3231d2fe311d504b':'PowerShell/BitsAdmin (Microsoft BITS/7.8) Server 2016', '54328bd36c14bd82ddaa0c04b25ed9ad':'BitsAdmin/PowerShell 5.1 Windows 10', 'fc54e0d16d9764783542f0146a98b300':'BitsAdmin/PowerShell 5.1 Windows 10', '2863b3a96f1b530bc4f5e52f66c79285':'BitsAdmin/PowerShell 6.0 Windows Server 2012RT', '40177d2da2d0f3a9014e7c83bdeee15a':'BitsAdmin/PowerShell 6.0 Windows Server 2012RT', '36f7277af969a6947a61ae0b815907a1':'PowerShell/BitsAdmin Windows 7 32 bit enterprise', })) ; // Stocker le hachage JA3 du client dans une variable const hash = SSL.ja3Hash ; // Interroger chaque hachage JA3 PowerShell for ( let ja3 in suspect_ja3_hashes ) { // Si le hachage JA3 du client provient de PowerShell, // valider la détection if ( hash.includes(ja3) ) { commitDetection('PowerShell_JA3', { categories : ['sec.caution'], title : "PowerShell / BitsAdmin Suspicious Connection", // Spécifiez l'auteur de l'infraction comme étant l'objet de l'appareil du client participants : [ { role : 'offender', object : Flow.client.device } ], description : "Ce client SSL correspond à une variante de PowerShell". + "\n "+ "Examiner les autres comportements du client sur l'hôte de la victime." + "\n-"+"- ** Correspondance client PowerShell/BitsAdmin JA3**" + "\n "+ "- **Client IP:** " + Flow.client.ipaddr + "\n "+ "- **Server IP:** " + Flow.server.ipaddr + "\n "+ "- **JA3 Client Value:** " + ja3 + "\n "+ "- **JA3 Client Match:** " + suspect_ja3_hashes[ja3], // Créer la clé d'identité en combinant l'adresse IP du serveur, l'adresse IP du client et le hachage PowerShell JA3 identityKey : [ Flow.server.ipaddr, Flow.client.ipaddr, hash ].join('!!'), riskScore : 60, identityTtl : 'hour' }) ; } } }
Nous vous remercions pour vos commentaires. Pouvons-nous vous contacter pour vous poser des questions complémentaires ?