def on_message(identifier, channel, payload): if channel == "thug.events": fpath = os.path.join(OUTDIR, str(time.strftime("%Y%m%d-%H%M%S", time.gmtime()) + ".xml")) with open(fpath, "wb") as fd: fd.write(payload) sd = functions.getthugevents(payload) if str(sd) != "{}": # log.info(len(str(sd))) log.info(str(sd)) functions.jsonsend("localhost", 9999, json.dumps(sd)) else: log.info("cannot send sd to logstash: sd={}") if channel == "thug.files": try: decoded = json.loads(str(payload)) except: decoded = {"raw": payload} sd = functions.getthugfiles(decoded, thugOUTDIR) if str(sd) != "{}": logthug.info(str(sd)) functions.jsonsend("localhost", 9999, json.dumps(sd))
def on_message(identifier, channel, payload): try: decoded = json.loads(str(payload)) except: decoded = {'raw': payload} if channel == 'dionaea.capture': csv = ', '.join(['{0} = {1}'.format(i, decoded[i]) for i in ['url', 'daddr', 'saddr', 'dport', 'sport', 'md5', 'sha512']]) outmsg = 'PUBLISH channel = %s, identifier = %s, %s' % (channel, identifier, csv) log.info(outmsg) occurrence = datetime.datetime.now().isoformat() event={'saddr':decoded['saddr'], 'sport':decoded['sport'], 'daddr':decoded['daddr'], 'dport':decoded['dport']} APIKEY = functions.getconf('virustotal', 'APIKEY') vtresult= functions.vt_getreport(decoded['md5'], APIKEY) md5list={'md5':decoded['md5'], 'malurl':decoded['url'], 'malhostname':urlparse(decoded['url']).hostname, 'malscheme':urlparse(decoded['url']).scheme, 'vtresult':vtresult} geoinfo = functions.geohostname(urlparse(decoded['url']).hostname) hostnamelist = {'hostname':urlparse(decoded['url']).hostname, 'underpath':[urlparse(decoded['url']).path], 'scheme':urlparse(decoded['url']).scheme, 'geoinfo':geoinfo} sd = { "occurrence" : occurrence, "startURL" : decoded['url'], "event" : event, "md5List" : md5list, "hostnameList": hostnamelist } functions.jsonsend("localhost", 8888, json.dumps(sd)) return if channel == 'mwbinary.dionaea.sensorunique': md5sum = hashlib.md5(payload).hexdigest() fpath = os.path.join(OUTDIR, md5sum) try: with open(fpath, 'wb') as fd: fd.write(payload) except: outfd = open(OUTFILE, 'a') print >>outfd, '{0} ERROR could not write to {1}'.format(datetime.datetime.now().ctime(), fpath) outfd.flush()
"md5" : malitem, "basic" : basic, "scans" : scans, "network" : network } return sd if __name__ == '__main__': sd = {} malfiles = es_getmd5('2013-10-30', '2013-10-30') for md5item in malfiles: for urlitem in md5item['malurlList']: geoinfo = functions.geohostname(urlparse(urlitem['malurl']).hostname) hostnamelist = {'hostname':urlparse(urlitem['malurl']).hostname, 'scheme':urlparse(urlitem['malurl']).scheme, 'geoinfo':geoinfo} urlitem.update(hostnamelist) sd.update({'malurlList': md5item['malurlList']}) try: sdvt = vt_private_getallinfo(md5item['md5']) if sdvt != None : sd.update(sdvt) functions.jsonsend("localhost", 3333, json.dumps(sd)) except simplejson.decoder.JSONDecodeError: continue