elkserver/docker/redelk-base/redelkinstalldata/scripts/modules/alarm_lastline/module.py (45 lines of code) (raw):
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Part of RedELK
This alarm always triggers. It lists the last 2 redirtraffic lines as hit
Authors:
- Outflank B.V. / Mark Bergman (@xychix)
- Lorenzo Bernardi (@fastlorenzo)
"""
import logging
from modules.helpers import get_hits_count, get_initial_alarm_result, get_query
info = {
"version": 0.1,
"name": "lastline alarm module",
"alarmmsg": "ALARM GENERATED BY LASTLINE",
"description": "This alarm always triggers. It lists the last 2 redirtraffic lines as hit",
"type": "redelk_alarm-NOTINUSE",
"submodule": "alarm_lastline",
}
class Module:
"""lastline alarm module"""
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"] = [
"source.ip",
"source.cdn.ip",
"source.geo.country_name",
"source.as.organization.name",
"redir.frontend.name",
"redir.backend.name",
"infra.attack_scenario",
"tags",
"redir.timestamp",
]
ret["groupby"] = ["source.ip"]
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 IP's that aren't listed in any iplist* but do talk to c2* paths on redirectors"""
es_query = "*"
i = get_hits_count(es_query)
i = min(i, 10000)
es_result = get_query(es_query, i)
report = {}
report["hits"] = []
report["hits"].append(es_result[0])
report["hits"].append(es_result[1])
return report