From 9124f617f526e1fda20775291e73ec60bbde6af1 Mon Sep 17 00:00:00 2001 From: huoji Date: Mon, 5 Sep 2022 17:33:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0mimikatz=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加mimikatz检测 --- Image/14.png | Bin 0 -> 79250 bytes README.md | 7 +- .../mimikazt_detect/mimikatz_detect.py | 64 ++++++++ .../uac_bypass_detect/prcoess_chain_detect.py | 4 +- doc_rule.md => doc_day0_rule.md | 0 doc_day1_plugin.md | 148 ++++++++++++++++++ 6 files changed, 219 insertions(+), 4 deletions(-) create mode 100644 Image/14.png create mode 100644 Server/plugins/mimikazt_detect/mimikatz_detect.py rename doc_rule.md => doc_day0_rule.md (100%) create mode 100644 doc_day1_plugin.md diff --git a/Image/14.png b/Image/14.png new file mode 100644 index 0000000000000000000000000000000000000000..10b02eee57caaa400d32ae3f749a015c5922c821 GIT binary patch literal 79250 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

t<8|eM9?gI<) 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%0D8I0x=ssGf~K2qF!2$%Cx7C%+xT8v0(GD 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 OfKZZGlPi-ohy5P|bxYa+ literal 0 HcmV?d00001 diff --git a/README.md b/README.md index e91512f..bb3380e 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,8 @@ https://key08.com/index.php/2022/08/09/1505.html ### 最新新闻 2022/9/5: 增加规则编写教程: -https://github.com/RoomaSec/RmEye/blob/main/doc_rule.md +https://github.com/RoomaSec/RmEye/blob/main/doc_day0_rule.md +增加`mimikatz`检测 2022/8/31: 增加进程白名单系统,现在能给进程加白名单了.在打开进程链后,点击某个进程加入白名单即可 @@ -52,6 +53,8 @@ offic宏钓鱼: ![image](Image/6.png) uac提权检测: ![image](Image/7.png) +mimikatz检测: +![image](Image/14.png) ### 待做列表 1. 更好的前端(目前是VUE-CDN模式,不太好,想换成VUE-CLI) 已经完成 @@ -141,7 +144,7 @@ rule_engine: 分数代表的是本次规则给进程链所增加的分数,报警是根据前面的MAX_THREAT_SCORE设置的 规则编写教程请移步: -https://github.com/RoomaSec/RmEye/blob/main/doc_rule.md +https://github.com/RoomaSec/RmEye/blob/main/doc_day0_rule.md 规则引擎的语法请移步: https://github.com/zeroSteiner/rule-engine diff --git a/Server/plugins/mimikazt_detect/mimikatz_detect.py b/Server/plugins/mimikazt_detect/mimikatz_detect.py new file mode 100644 index 0000000..a14f2e3 --- /dev/null +++ b/Server/plugins/mimikazt_detect/mimikatz_detect.py @@ -0,0 +1,64 @@ +import global_vars +import process + +rm_plugs_config = { + "enable": True, + "author": "huoji", + "description": "检测mimikatz", + "version": "0.0.1" +} + +mimikatz_dll_list = [ + 'c:\\windows\\system32\\advapi32.dll', + 'c:\\windows\\system32\\crypt32.dll', + 'c:\\windows\\system32\\cryptdll.dll', + 'c:\\windows\\system32\\gdi32.dll', + 'c:\\windows\\system32\\imm32.dll', + 'c:\\windows\\system32\\kernel32.dll', + 'c:\\windows\\system32\\kernelbase.dll', + 'c:\\windows\\system32\\msasn1.dll', + 'c:\\windows\\system32\\msvcrt.dll', + 'c:\\windows\\system32\\ntdll.dll', + 'c:\\windows\\system32\\rpcrt4.dll', + 'c:\\windows\\system32\\rsaenh.dll', + 'c:\\windows\\system32\\samlib.dll', + 'c:\\windows\\system32\\sechost.dll', + 'c:\\windows\\system32\\secur32.dll', + 'c:\\windows\\system32\\shell32.dll', + 'c:\\windows\\system32\\shlwapi.dll', + 'c:\\windows\\system32\\sspicli.dll', + 'c:\\windows\\system32\\user32.dll', + 'c:\\windows\\system32\\vaultcli.dll', +] + + +def rule_new_process_create(current_process: process.Process, host, raw_log_data, json_log_data): + # 服务端提供了一个 plugin_var 变量用于存放当前进程插件的上下文 + current_process.plugin_var['mimikatz_matched_num'] = 0 + current_process.plugin_var['mimikatz_detected'] = False + return global_vars.THREAT_TYPE_NONE + + +def rule_new_process_action(current_process: process.Process, host, raw_log_data, json_log_data): + global mimikatz_dll_list + # 如果日志的action是imageload(dll加载) + if json_log_data['action'] == 'imageload' and current_process.plugin_var['mimikatz_detected'] == False: + # 把日志中的dll路径取出来 + dll_path = json_log_data['data']['imageloaded'] + + # 如果dll的路径在mimikatz的路径里面,进程上下文+1 + if dll_path in mimikatz_dll_list: + current_process.plugin_var['mimikatz_matched_num'] += 1 + if current_process.plugin_var['mimikatz_matched_num'] >= len(mimikatz_dll_list): + current_process.set_score(300, "[mimikatz]检测到疑似mimikatz进程") + current_process.plugin_var['mimikatz_detected'] = True + return global_vars.THREAT_TYPE_PROCESS + return global_vars.THREAT_TYPE_NONE + + +def rule_init(): + pass + + +def plugin_init(): + print('mimikatz检测插件 2022/9/5 by huoji') diff --git a/Server/plugins/uac_bypass_detect/prcoess_chain_detect.py b/Server/plugins/uac_bypass_detect/prcoess_chain_detect.py index 1c0cb0d..f1835bb 100644 --- a/Server/plugins/uac_bypass_detect/prcoess_chain_detect.py +++ b/Server/plugins/uac_bypass_detect/prcoess_chain_detect.py @@ -42,8 +42,8 @@ def rule_new_process_action(current_process, host, raw_log_data, json_log_data): def rule_init(): - print('[helloworld plugin] rule init') + pass def plugin_init(): - print('[helloworld plugin] plugin init') + print('uac提权插件 2022/8/15 by huoji') diff --git a/doc_rule.md b/doc_day0_rule.md similarity index 100% rename from doc_rule.md rename to doc_day0_rule.md diff --git a/doc_day1_plugin.md b/doc_day1_plugin.md new file mode 100644 index 0000000..52761c6 --- /dev/null +++ b/doc_day1_plugin.md @@ -0,0 +1,148 @@ +### 编写插件用于检测需要复杂上下文的威胁 + +在本章开始前,请先阅读: + +https://github.com/RoomaSec/RmEye/blob/main/doc_day0_rule.md + +rmeye提供了一个简陋的插件接口,用于检测需要上下文帮助的威胁.本文以检测mimikatz为例,编写一个插件: + +mimikatz一定会加载如下dll: + +```C +C:\Windows\System32\advapi32.dll +C:\Windows\System32\crypt32.dll +C:\Windows\System32\cryptdll.dll +C:\Windows\System32\gdi32.dll +C:\Windows\System32\imm32.dll +C:\Windows\System32\kernel32.dll +C:\Windows\System32\KernelBase.dll +C:\Windows\System32\msasn1.dll +C:\Windows\System32\msvcrt.dll +C:\Windows\System32\ntdll.dll +C:\Windows\System32\rpcrt4.dll +C:\Windows\System32\rsaenh.dll +C:\Windows\System32\samlib.dll +C:\Windows\System32\sechost.dll +C:\Windows\System32\secur32.dll +C:\Windows\System32\shell32.dll +C:\Windows\System32\shlwapi.dll +C:\Windows\System32\sspicli.dll +C:\Windows\System32\user32.dll +C:\Windows\System32\vaultcli.dll +``` + +当有这些的DLL在一个程序被加载的时候,我们就要注意了.但是我们之前的规则是单条的,没有上下文,因此需要通过插件系统实现,本文默认你已经给sysmon增加了以上的datasoruce + +### 插件编写 + +在服务端`plugins`目录下新建文件夹`mimikazt_detect`然后新建一个文件`mimikatz_detect.py`,如下是模板: + +```python +import global_vars +import process + +rm_plugs_config = { + "enable": True, #是否启用插件 + "author": "huoji", + "description": "检测mimikatz", + "version": "0.0.1" +} + +#新进程启动 +def rule_new_process_create(current_process: process.Process, host, raw_log_data, json_log_data): + return global_vars.THREAT_TYPE_NONE + +#进程动作 +def rule_new_process_action(current_process: process.Process, host, raw_log_data, json_log_data): + return global_vars.THREAT_TYPE_NONE + +#规则初始化 +def rule_init(): + pass + +#插件初始化 +def plugin_init(): + print('mimikatz检测插件 2022/9/5 by huoji') + +``` + +为了检测,我们需要记录每一个dll加载的行为并且保存到进程上下文中,具体看代码 + +```python +import global_vars +import process + +rm_plugs_config = { + "enable": True, + "author": "huoji", + "description": "检测mimikatz", + "version": "0.0.1" +} + +mimikatz_dll_list = [ + 'c:\\windows\\system32\\advapi32.dll', + 'c:\\windows\\system32\\crypt32.dll', + 'c:\\windows\\system32\\cryptdll.dll', + 'c:\\windows\\system32\\gdi32.dll', + 'c:\\windows\\system32\\imm32.dll', + 'c:\\windows\\system32\\kernel32.dll', + 'c:\\windows\\system32\\kernelbase.dll', + 'c:\\windows\\system32\\msasn1.dll', + 'c:\\windows\\system32\\msvcrt.dll', + 'c:\\windows\\system32\\ntdll.dll', + 'c:\\windows\\system32\\rpcrt4.dll', + 'c:\\windows\\system32\\rsaenh.dll', + 'c:\\windows\\system32\\samlib.dll', + 'c:\\windows\\system32\\sechost.dll', + 'c:\\windows\\system32\\secur32.dll', + 'c:\\windows\\system32\\shell32.dll', + 'c:\\windows\\system32\\shlwapi.dll', + 'c:\\windows\\system32\\sspicli.dll', + 'c:\\windows\\system32\\user32.dll', + 'c:\\windows\\system32\\vaultcli.dll', +] + + +def rule_new_process_create(current_process: process.Process, host, raw_log_data, json_log_data): + # 服务端提供了一个 plugin_var 变量用于存放当前进程插件的上下文 + current_process.plugin_var['mimikatz_matched_num'] = 0 + current_process.plugin_var['mimikatz_detected'] = False + return global_vars.THREAT_TYPE_NONE + + +def rule_new_process_action(current_process: process.Process, host, raw_log_data, json_log_data): + global mimikatz_dll_list + # 如果日志的action是imageload(dll加载) + if json_log_data['action'] == 'imageload' and current_process.plugin_var['mimikatz_detected'] == False: + # 把日志中的dll路径取出来 + dll_path = json_log_data['data']['imageloaded'] + + # 如果dll的路径在mimikatz的路径里面,进程上下文+1 + if dll_path in mimikatz_dll_list: + current_process.plugin_var['mimikatz_matched_num'] += 1 + if current_process.plugin_var['mimikatz_matched_num'] >= len(mimikatz_dll_list): + current_process.set_score(300, "[mimikatz]检测到疑似mimikatz进程") + current_process.plugin_var['mimikatz_detected'] = True + return global_vars.THREAT_TYPE_PROCESS + return global_vars.THREAT_TYPE_NONE + + +def rule_init(): + pass + + +def plugin_init(): + print('mimikatz检测插件 2022/9/5 by huoji') + +``` + + + +### 测试 + +运行mimikatz: +![](Image/14.png) + +当然还会有其他的情况的误报!这需要你完善插件. + +如果遇到不懂的地方,可以提issue.欢迎提问