Simovits

Effektivisera incidenthantering med Responders i TheHive

James har sedan tidigare skrivit ett antal inlägg om incidentresponse-verktyget TheHive. Det är ett kraftfullt hjälpmedel till alla som arbetar med incidenthantering. En av de mest användbara funktionerna är Analyzers och Responders, och i det här inlägget tittar vi närmare på Responder-funktionerna.

En Responder är någonting som kan appliceras på antingen ett case eller observable i TheHive för att utföra en automatisk åtgärd. En responder kan alltså utföra en valfri åtgärd utifrån information som finns i ett objekt i TheHive. Det kan exempelvis vara att den skickar ett mail baserat på innehållet i ett case, skicka ett ärende till ett annat ärendehanteringssystem, lägga till ett värde baserat på en observable i en vit- eller svartlista eller egentligen skicka data till ett valfritt API. Möjligheterna är oändliga!

I detta exempel har jag använt Python för att skapa ett skelett till en responder, som tar emot ett case och utför någon åtgärd. Detta är bara ett skelett, så ni får själv fylla i själva vad den egentligen ska göra.
För att skapa en responder behövs tre filer och om du gör det i Python kan du ladda ner cortexutils till din Cortex-server. De filer som behövs är:
• Pythonscriptet som är din responder
• En gränssnittsdefinition i json-format
• En fil som innehåller eventuella beroenden som ditt python-script använder sig av i filen requirements.txt
I detta fall finns inga dependencies men om det skulle behövas i din implementation kan du lägga till dem i requirements.txt.


DummyResponder.json
{
    "name": "DummyResponder",
    "version": "0.1",
    "author": "Demo Author",
    "license": "AGPLv3",
    "url": "",
    "description": "Add a demo responder tag to a case",
    "dataTypeList": ["thehive:case"],
    "baseConfig": "DummyResponder",
    "command": "DummyResponder/DummyResponder.py",
    "configurationItems": [
      {
        "name": "test_tag",
        "description": "Tag to add to case",
        "type": "string",
        "multi": false,
        "required": true
      }
    ]
  }


DummyResponder.py

#!/usr/bin/env python
# encoding: utf-8

from cortexutils.responder import Responder

class DummyResponder(Responder):
    def __init__(self):
        Responder.__init__(self)
        # Get the configurations set in Cortex
        self.test_tag = self.get_param('config.test_tag', 'test_tag')

    # Run your custom responder code
    def run(self):
        # This is the responder code - for this demo nothing is done
        Responder.run(self)
        
        # Add any error handling 
        # self.error('Some error')

        self.report({'message': 'DummyResponder executed'})

    # Return value to TheHive
    def operations(self, raw):
        return [self.build_operation('AddTagToCase', tag=self.test_tag)]

if __name__ == '__main__':
    DummyResponder().run()

För att aktivera din responder behöver du uppdatera application.conf för Cortex så att den hittar dina responders, och tänk också på att ge användaren Cortex behörigheter till att köra scriptet. Sen ska du bara behöva aktivera den i Cortex och vips så har du effektiviserat din incidentresponse!