| |
|
|
| |
| |
| |
| |
|
|
| from lib.alerttask import AlertTask |
| from mozdef_util.query_models import SearchQuery, TermMatch, ExistsMatch, TermsMatch |
|
|
|
|
| class AlertMultipleIntelHits(AlertTask): |
| def main(self): |
| search_query = SearchQuery(minutes=2) |
|
|
| search_query.add_must([ |
| TermMatch('category', 'bro'), |
| TermMatch('source', 'intel'), |
| ExistsMatch('details.seenindicator'), |
| TermsMatch('hostname', ['sensor1', 'sensor2', 'sensor3']) |
| ]) |
|
|
| self.filtersManual(search_query) |
|
|
| |
| self.searchEventsAggregated('details.seenindicator', samplesLimit=10) |
| |
| self.walkAggregations(threshold=10) |
|
|
| |
| def onAggregation(self, aggreg): |
| |
| |
| |
| category = 'bro' |
| tags = ['nsm,bro,intel'] |
| severity = 'NOTICE' |
| hostname = aggreg['events'][0]['_source']['hostname'] |
|
|
| summary = '{0} {1} {2} on {3}'.format(aggreg['count'], hostname, ' Bro intel match for indicator:', aggreg['value']) |
|
|
| summary += ' sample hosts that hit it: ' |
| for e in aggreg['events'][:3]: |
| if 'details' in e['_source'] \ |
| and 'sourceipaddress' in e['_source']['details'] \ |
| and 'seenwhere' in e['_source']['details']: |
| interestingaddres = '' |
| |
| |
| |
| if ('Conn::IN_RESP' in e['_source']['details']['seenwhere'] or |
| 'HTTP::IN_HOST_HEADER' in e['_source']['details']['seenwhere'] or |
| 'DNS::IN_REQUEST' in e['_source']['details']['seenwhere']): |
| interestingaddres = e['_source']['details']['sourceipaddress'] |
| elif ('Conn::IN_ORIG' in e['_source']['details']['seenwhere'] or |
| 'HTTP::IN_X_CLUSTER_CLIENT_IP_HEADER' in e['_source']['details']['seenwhere'] or |
| 'HTTP::IN_X_FORWARDED_FOR_HEADER' in e['_source']['details']['seenwhere']): |
| interestingaddres = e['_source']['details']['destinationipaddress'] |
|
|
| summary += '{0} in {1} '.format(interestingaddres, e['_source']['details']['seenwhere']) |
|
|
| |
| return self.createAlertDict(summary, category, tags, aggreg['events'], severity) |
|
|