diff --git a/lib/hawat/blueprints/design_bs3/templates/_macros_chart.html b/lib/hawat/blueprints/design_bs3/templates/_macros_chart.html index f484bb29ce69e01b01337ed30eb4120f083eeeea..ea5b462190f94c665e364f3b92a57d20576b1de1 100644 --- a/lib/hawat/blueprints/design_bs3/templates/_macros_chart.html +++ b/lib/hawat/blueprints/design_bs3/templates/_macros_chart.html @@ -814,6 +814,7 @@ ('detectorsws', _('detector software')), ('detector_types', _('detector tags')), ('sources', _('sources')), + ('targets', _('targets')), ('source_ports', _('source ports')), ('target_ports', _('target ports')), ('protocols', _('protocols')), @@ -923,6 +924,13 @@ 'multi', 'ips' ), + ( + 'targets', + _('Number of events per target IP'), + _('This view shows total numbers of IDEA events aggregated according to a <em>target IP address</em>. Because an event may contain multiple <em>target IP addresses</em>, the total numbers in these charts may differ from the total number of events displayed in the table above.'), + 'multi', + 'ips' + ), ( 'source_ports', _('Number of events per source port'), diff --git a/lib/hawat/blueprints/timeline/__init__.py b/lib/hawat/blueprints/timeline/__init__.py index 500395caf1116c1cfc862262278dce2886ee74d9..6bf2701d98216a47118b7507700f40b4fcca1872 100644 --- a/lib/hawat/blueprints/timeline/__init__.py +++ b/lib/hawat/blueprints/timeline/__init__.py @@ -47,7 +47,7 @@ BLUEPRINT_NAME = 'timeline' AGGREGATIONS = ( (mentat.stats.idea.ST_SKEY_CATEGORIES, {}, {"aggr_set": "category"}), (mentat.stats.idea.ST_SKEY_SOURCES, {}, {"aggr_set": "source_ip"}), - # ('', {"aggr_set": "target_ip"}), + (mentat.stats.idea.ST_SKEY_TARGETS, {}, {"aggr_set": "target_ip"}), (mentat.stats.idea.ST_SKEY_SRCPORTS, {}, {"aggr_set": "source_port"}), (mentat.stats.idea.ST_SKEY_TGTPORTS, {}, {"aggr_set": "target_port"}), (mentat.stats.idea.ST_SKEY_SRCTYPES, {}, {"aggr_set": "source_type"}), diff --git a/lib/mentat/stats/idea.py b/lib/mentat/stats/idea.py index 94c6065df793de8b065cda8a64a9396d69eb8fae..de25327b06a0acd6e4d12f39850a81d90bba7b7b 100644 --- a/lib/mentat/stats/idea.py +++ b/lib/mentat/stats/idea.py @@ -40,6 +40,7 @@ ST_OVERALL = 'stats_overall' # Literal constants for keywords of calculated statistics. # ST_SKEY_SOURCES = 'sources' +ST_SKEY_TARGETS = 'targets' ST_SKEY_IP4S = 'ip4s' ST_SKEY_IP6S = 'ip6s' ST_SKEY_ANALYZERS = 'analyzers' @@ -91,6 +92,7 @@ LIST_STAT_GROUPS = ( LIST_AGGREGATIONS = ( [ST_SKEY_SOURCES, ('Source.IP4', 'Source.IP6'), KEY_UNKNOWN], + [ST_SKEY_TARGETS, ('Target.IP4', 'Target.IP6'), KEY_UNKNOWN], #[ST_SKEY_IP4S, ('Source.IP4',), KEY_UNKNOWN], #[ST_SKEY_IP6S, ('Source.IP6',), KEY_UNKNOWN], [ST_SKEY_ANALYZERS, ('Node[#].SW',), KEY_UNKNOWN], diff --git a/lib/mentat/stats/test_idea.py b/lib/mentat/stats/test_idea.py index 9674579b133dabc3ecfda5a40cd7dd335f274789..acd99a02ab42c5f72fdb97dbcf2bfd8fc7389e47 100644 --- a/lib/mentat/stats/test_idea.py +++ b/lib/mentat/stats/test_idea.py @@ -40,6 +40,12 @@ class TestMentatStatsIdea(unittest.TestCase): "IP6": ["2001:db8::ff00:42:0/112"] } ], + "Target": [ + { + "IP4": ["192.168.1.2-192.168.1.5", "192.168.1.0/25"], + "IP6": ["2001:db8::ff01:42:0/112"] + } + ], "Node": [ { "Name": "org.example.kippo", @@ -92,6 +98,12 @@ class TestMentatStatsIdea(unittest.TestCase): "IP6": ["2001:db8::ff00:42:0/112"] } ], + "Target": [ + { + "IP4": ["192.168.1.2-192.168.1.5", "192.168.1.0/25"], + "IP6": ["2001:db8::ff01:42:0/112"] + } + ], "Node": [ { "Name": "org.example.dionaea", @@ -137,6 +149,11 @@ class TestMentatStatsIdea(unittest.TestCase): "IP4": ["192.168.0.109", "192.168.0.200"] } ], + "Target": [ + { + "IP4": ["192.168.1.109", "192.168.1.200"] + } + ], "Node": [ { "Name": "org.example.labrea", @@ -400,6 +417,14 @@ class TestMentatStatsIdea(unittest.TestCase): '192.172.0.200': 1, '2001:db8::ff00:42:0/112': 3 }, + 'targets': { + '192.168.1.2-192.168.1.5': 2, + '192.168.1.0/25': 2, + '2001:db8::ff01:42:0/112': 2, + '192.168.1.109': 1, + '192.168.1.200': 1, + '__unknown__': 3 + }, 'list_ids': ['msg01', 'msg02', 'msg03', 'msg04', 'msg05', 'msg06'], 'severities': {'__unknown__': 6} }) @@ -429,6 +454,7 @@ class TestMentatStatsIdea(unittest.TestCase): 'cz.cesnet.holly/Beekeeper': 1, 'org.example.kippo/Kippo': 2}, 'sources': {'192.168.0.0/25': 3, '192.168.0.2-192.168.0.5': 3, '__REST__': 9}, + 'targets': {'__unknown__': 3, '192.168.1.0/25': 2, '__REST__': 6}, 'severities': {'__unknown__': 6} } ) @@ -457,6 +483,7 @@ class TestMentatStatsIdea(unittest.TestCase): 'org.example.kippo/Kippo': 2, 'org.example.labrea/LaBrea': 1}, 'sources': {'192.168.0.0/25': 3, '__REST__': 12}, + 'targets': {'__unknown__': 3, '__REST__': 8}, 'severities': {'__unknown__': 6} } ) @@ -510,6 +537,8 @@ class TestMentatStatsIdea(unittest.TestCase): 'Source': [{'IP4': ['192.168.0.2-192.168.0.5', '192.168.0.0/25'], 'IP6': ['2001:db8::ff00:42:0/112'], 'Type': ['Phishing']}], + 'Target': [{'IP4': ['192.168.1.2-192.168.1.5', '192.168.1.0/25'], + 'IP6': ['2001:db8::ff01:42:0/112']}], '_Mentat': {'ResolvedAbuses': ['abuse@cesnet.cz']} }, { @@ -538,6 +567,8 @@ class TestMentatStatsIdea(unittest.TestCase): 'Source': [{'IP4': ['192.168.0.2-192.168.0.5', '192.168.0.0/25'], 'IP6': ['2001:db8::ff00:42:0/112'], 'Type': ['Phishing']}], + 'Target': [{'IP4': ['192.168.1.2-192.168.1.5', '192.168.1.0/25'], + 'IP6': ['2001:db8::ff01:42:0/112']}], '_Mentat': {'ResolvedAbuses': ['abuse@cesnet.cz']} }, { @@ -551,6 +582,7 @@ class TestMentatStatsIdea(unittest.TestCase): 'Tags': ['Protocol', 'Honeypot']}], 'Source': [{'IP4': ['192.168.0.109', '192.168.0.200'], 'Type': ['Exploit']}], + 'Target': [{"IP4": ["192.168.1.109", "192.168.1.200"]}], '_Mentat': {'ResolvedAbuses': ['abuse@cesnet.cz']} } ], @@ -567,6 +599,8 @@ class TestMentatStatsIdea(unittest.TestCase): 'Source': [{'IP4': ['192.168.0.2-192.168.0.5', '192.168.0.0/25'], 'IP6': ['2001:db8::ff00:42:0/112'], 'Type': ['Phishing']}], + 'Target': [{'IP4': ['192.168.1.2-192.168.1.5', '192.168.1.0/25'], + 'IP6': ['2001:db8::ff01:42:0/112']}], '_Mentat': {'ResolvedAbuses': ['abuse@cesnet.cz']} }, { @@ -595,6 +629,8 @@ class TestMentatStatsIdea(unittest.TestCase): 'Source': [{'IP4': ['192.168.0.2-192.168.0.5', '192.168.0.0/25'], 'IP6': ['2001:db8::ff00:42:0/112'], 'Type': ['Phishing']}], + 'Target': [{'IP4': ['192.168.1.2-192.168.1.5', '192.168.1.0/25'], + 'IP6': ['2001:db8::ff01:42:0/112']}], '_Mentat': {'ResolvedAbuses': ['abuse@cesnet.cz']} }, { @@ -620,6 +656,7 @@ class TestMentatStatsIdea(unittest.TestCase): 'Tags': ['Protocol', 'Honeypot']}], 'Source': [{'IP4': ['192.168.0.109', '192.168.0.200'], 'Type': ['Exploit']}], + 'Target': [{'IP4': ['192.168.1.109', '192.168.1.200']}], '_Mentat': {'ResolvedAbuses': ['abuse@cesnet.cz']} }, { @@ -699,6 +736,12 @@ class TestMentatStatsIdea(unittest.TestCase): '192.172.0.109': 3, '192.172.0.200': 3, '2001:db8::ff00:42:0/112': 9}, + 'targets': {'192.168.1.2-192.168.1.5': 6, + '192.168.1.0/25': 6, + '2001:db8::ff01:42:0/112': 6, + '192.168.1.109': 3, + '192.168.1.200': 3, + '__unknown__': 9}, 'severities': {'__unknown__': 18} } )