mirror of https://github.com/MISP/PyMISP
commit
7195c6580a
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Export IOC's from MISP in CEF format
|
||||
# Based on cef_export.py MISP module by Hannah Ward
|
||||
|
||||
import sys
|
||||
import datetime
|
||||
from pymisp import PyMISP, MISPAttribute
|
||||
from keys import misp_url, misp_key
|
||||
|
||||
cefconfig = {"Default_Severity":1, "Device_Vendor":"MISP", "Device_Product":"MISP", "Device_Version":1}
|
||||
|
||||
cefmapping = {"ip-src":"src", "ip-dst":"dst", "hostname":"dhost", "domain":"destinationDnsDomain",
|
||||
"md5":"fileHash", "sha1":"fileHash", "sha256":"fileHash",
|
||||
"filename|md5":"fileHash", "filename|sha1":"fileHash", "filename|sha256":"fileHash",
|
||||
"url":"request"}
|
||||
|
||||
mispattributes = {'input':list(cefmapping.keys())}
|
||||
|
||||
|
||||
def make_cef(event):
|
||||
for attr in event["Attribute"]:
|
||||
if attr["to_ids"] and attr["type"] in cefmapping:
|
||||
if '|' in attr["type"] and '|' in attr["value"]:
|
||||
value = attr["value"].split('|')[1]
|
||||
else:
|
||||
value = attr["value"]
|
||||
response = "{} host CEF:0|{}|{}|{}|{}|{}|{}|msg={} customerURI={} externalId={} {}={}".format(
|
||||
datetime.datetime.fromtimestamp(int(attr["timestamp"])).strftime("%b %d %H:%M:%S"),
|
||||
cefconfig["Device_Vendor"],
|
||||
cefconfig["Device_Product"],
|
||||
cefconfig["Device_Version"],
|
||||
attr["category"],
|
||||
attr["category"],
|
||||
cefconfig["Default_Severity"],
|
||||
event["info"].replace("\\","\\\\").replace("=","\\=").replace('\n','\\n') + "(MISP Event #" + event["id"] + ")",
|
||||
misp_url + 'events/view/' + event["id"],
|
||||
attr["uuid"],
|
||||
cefmapping[attr["type"]],
|
||||
value,
|
||||
)
|
||||
print(str(bytes(response, 'utf-8'), 'utf-8'))
|
||||
|
||||
|
||||
def init_misp():
|
||||
global mymisp
|
||||
mymisp = PyMISP(misp_url, misp_key)
|
||||
|
||||
|
||||
def echeck(r):
|
||||
if r.get('errors'):
|
||||
if r.get('message') == 'No matches.':
|
||||
return
|
||||
else:
|
||||
print(r['errors'])
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def find_events():
|
||||
r = mymisp.search(controller='events', published=True, to_ids=True)
|
||||
echeck(r)
|
||||
if not r.get('response'):
|
||||
return
|
||||
for ev in r['response']:
|
||||
make_cef(ev['Event'])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
init_misp()
|
||||
find_events()
|
Loading…
Reference in New Issue