elkserver/docker/redelk-base/redelkinstalldata/scripts/modules/alarm_backendalarm/module.py (38 lines of code) (raw):
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Part of RedELK
This check queries for calls to backends that have alarm in their name
Authors:
- Outflank B.V. / Mark Bergman (@xychix)
- Lorenzo Bernardi (@fastlorenzo)
"""
import logging
from modules.helpers import get_initial_alarm_result, get_query
info = {
"version": 0.1,
"name": "backend alarm module",
"alarmmsg": "TRAFFIC TO ANY BACKEND WITH THE WORD ALARM IN THE NAME",
"description": "This check queries for calls to backends that have alarm in their name",
"type": "redelk_alarm", # Could also contain redelk_enrich if it was an enrichment module
"submodule": "alarm_backendalarm",
}
class Module:
"""backend alarm module
This check queries for calls to backends that have alarm in their name
"""
def __init__(self):
self.logger = logging.getLogger(info["submodule"])
def run(self):
"""Run the alarm module"""
ret = get_initial_alarm_result()
ret["info"] = info
ret["fields"] = [
"@timestamp",
"source.ip",
"http.headers.useragent",
"source.cdn.ip",
"redir.frontend.name",
"redir.backend.name",
"infra.attack_scenario",
]
ret["groupby"] = ["source.ip", "http.headers.useragent"]
report = self.alarm_check()
ret["hits"]["hits"] = report["hits"]
ret["hits"]["total"] = len(report["hits"])
self.logger.info(
"finished running module. result: %s hits", ret["hits"]["total"]
)
return ret
# pylint: disable=no-self-use
def alarm_check(self):
"""This check queries for calls to backends that have *alarm* in their name"""
es_query = f'redir.backend.name:*alarm* AND NOT tags:{info["submodule"]}'
es_results = get_query(es_query, 10000)
report = {"hits": es_results}
return report