21
21
from app .models import FileScanRequest
22
22
from app .rabbitmq_sender import send_message
23
23
24
+ def match_multiple_rules (* rule_file_lists ):
25
+ """
26
+ 여러 YARA 룰셋의 파일 경로를 병합하고 컴파일된 하나의 룰셋을 반환하는 함수.
27
+ """
28
+ all_rule_files = {}
29
+ rule_index = 0
30
+
31
+ # 각 룰셋의 파일 경로 리스트에서 유효한 룰 파일들을 수집
32
+ for rule_files in rule_file_lists :
33
+ for i , rule_file in enumerate (rule_files ):
34
+ all_rule_files [str (rule_index + i )] = rule_file
35
+ rule_index += len (rule_files )
36
+
37
+ if all_rule_files :
38
+ try :
39
+ # 여러 YARA 룰 파일을 하나의 룰셋으로 컴파일
40
+ compiled_rules = yara .compile (filepaths = all_rule_files )
41
+ return compiled_rules
42
+ except yara .Error as e :
43
+ logging .error (f"Failed to compile merged YARA rules: { e } " )
44
+ return None
45
+ else :
46
+ logging .info ("No valid YARA rule files found for merging." )
47
+ return None
48
+
24
49
25
50
def load_yara_rules (directory ):
26
51
rule_files = []
@@ -30,7 +55,6 @@ def load_yara_rules(directory):
30
55
logging .info (f"Scanning directory: { root } " ) # 현재 디렉토리 로그에 남기기
31
56
for file in files :
32
57
if file .endswith (".yar" ):
33
- logging .info (f"Scanning file: { file } " ) # 현재 디렉토리 로그에 남기기
34
58
rule_files .append (os .path .join (root , file ))
35
59
36
60
# YARA 룰 컴파일
@@ -54,16 +78,17 @@ def load_yara_rules(directory):
54
78
logging .info (
55
79
f"Compiled { len (valid_rule_files )} YARA rules from { directory } "
56
80
)
57
- return compiled_rules
81
+ return compiled_rules , valid_rule_files
58
82
except yara .Error as e :
59
83
logging .info (f"Failed to compile YARA rules: { e } " )
60
- return None
84
+ return None , valid_rule_files
61
85
else :
62
86
logging .info (f"No valid YARA rule files found in { directory } " )
63
- return None
87
+ return None , []
64
88
else :
65
89
logging .info (f"No YARA rule files found in { directory } " )
66
- return None
90
+ return None , []
91
+
67
92
68
93
69
94
def stream_file_from_s3 (s3_key ):
0 commit comments