1
1
# -*- coding: utf-8 -*-
2
2
from collections import defaultdict
3
+ from datetime import datetime
3
4
from pymisp import MISPEvent , MISPObject
4
5
import json
5
6
import base64
25
26
'LegalCopyright' : 'legal-copyright' , 'OriginalFilename' : 'original-filename' ,
26
27
'ProductName' : 'product-filename' , 'ProductVersion' : 'product-version' ,
27
28
'Translation' : 'lang-id' }
29
+ process_object_fields = {'cmdline' : 'command-line' , 'name' : 'name' ,
30
+ 'parentpid' : 'parent-pid' , 'pid' : 'pid' ,
31
+ 'path' : 'current-directory' }
28
32
section_object_mapping = {'characteristics' : ('text' , 'characteristic' ),
29
33
'entropy' : ('float' , 'entropy' ),
30
34
'name' : ('text' , 'name' ), 'rawaddr' : ('hex' , 'offset' ),
@@ -43,6 +47,7 @@ def __init__(self, data):
43
47
44
48
def parse_joe (self ):
45
49
self .parse_fileinfo ()
50
+ self .parse_behavior ()
46
51
if self .references :
47
52
self .build_references ()
48
53
self .finalize_results ()
@@ -54,6 +59,24 @@ def build_references(self):
54
59
for reference in self .references [object_uuid ]:
55
60
misp_object .add_reference (reference ['idref' ], reference ['relationship' ])
56
61
62
+ def parse_behavior (self ):
63
+ self .parse_behavior_system ()
64
+ self .parse_behavior_network ()
65
+
66
+ def parse_behavior_network (self ):
67
+ network = self .data ['behavior' ]['network' ]
68
+
69
+ def parse_behavior_system (self ):
70
+ processes = self .data ['behavior' ]['system' ]['processes' ]['process' ][0 ]
71
+ general = processes ['general' ]
72
+ process_object = MISPObject ('process' )
73
+ for feature , relation in process_object_fields .items ():
74
+ process_object .add_attribute (relation , ** {'type' : 'text' , 'value' : general [feature ]})
75
+ start_time = datetime .strptime ('{} {}' .format (general ['date' ], general ['time' ]), '%d/%m/%Y %H:%M:%S' )
76
+ process_object .add_attribute ('start-time' , ** {'type' : 'datetime' , 'value' : start_time })
77
+ self .misp_event .add_object (** process_object )
78
+ self .references [self .fileinfo_uuid ].append ({'idref' : process_object .uuid , 'relationship' : 'calls' })
79
+
57
80
def parse_fileinfo (self ):
58
81
fileinfo = self .data ['fileinfo' ]
59
82
file_object = MISPObject ('file' )
0 commit comments