警告
只是个人研究,数据不涉密,并且跟公司产品无关
前言
前几个月一直在折腾DS的落地,不得不说,DS只需要一个极低的成本(1w以内)就能落地部署。DS出来后,就想搭建一个AI SOC用于做自动AI告警研判/关单.但是DS毕竟不是做网络安全的模型,对安全能力有点差,而且也不了解业务(比如EDR的告警是什么).所以花了点时间微调,微调后目前来看效果非常不错,所以在这里写一些经验供大家参考
模型选择-越大不是越好
这里提供的第一个经验是,模型并不是越大越好 目前来看,70B的能力实际上和32B没什么区别,14B和32B的区别也差别不大
从官方的数据来看,差别也不是很大,实际用只有一个问题,14B会 因为文件名字产生幻觉.(比如病毒名字叫 机密文件.exe,这玩意就觉得,嗯是机密,产生告警是正常的)
如果预算不够,可以用14B的模型,如果预算够,建议使用32B进行微调.
数据准备
戎码的EDR数据沙箱(一个沙箱环境,装了EDR然后专门跑病毒跑行为.)
每天都在自动跑病毒,这块会产生很多的日志与告警.在微调之前,需要把这些日志和告警全部导入给DS满血版(有条件可以导给其他优秀模型,但是目前来看,实际上claude,chatgpt对这些威胁的研判还不如DeepSeek)
这块需要严格注意数据安全,不建议直接用生产数据,会造成泄漏风险,这块我用的都是我们这边的分析沙箱数据.
这些告警,按照经验给了以下数据:
-
IOA列表 -
RAG数据(包括进程链/IOA然后标记这个是什么) -
进程链+进程详细信息(来自rm的数据,比如进程的命令行,进程加载什么模块,进程是否进行联网)
让AI进行研判后,再次人工修正(非常重要).把AI研判错的,人工写think部分以及最终结论,并且让AI规范输出,只输出JSON
得到大概500条数据:
{"messages": [{"role": "system", "content": "你是个windows威胁事件分析专家"}, {"role": "user", "content": "(这块是我们的数据,比较保密,就不展示了)"}, {"role": "assistant", "content": "<think>好的,我现在需要分析这个EDR告警数据。首先,看一下告警列表,只有一个“内存加载PE文件”。这通常表示一个可执行程序使用了手动加载的方式,可能用来隐藏其行为。nn接下来看进程树,根节点是services.exe,它启动了一个xxxxx.exe,然后又启动了一系列的xxxxx.exe和多个xxxxx.exe。这些进程看起来像是系统服务的一部分,没有高风险网络行为或加载恶意镜像,这说明它们的行为相对正常。nn参考历史周报,发现类似情况通常是没有问题的,比如“xxxxx.exe”启动其他服务的情况常见于正常的系统操作中。此外,这次告警没有其他异常行为,如注册表修改或网络通信,所以排除了恶意攻击的可能性。nn综合来看,这个告警很可能是误报,因为进程树显示的是正常的服务运行,并且没有触发其他高风险的IOA特征。</think>nn{n "title": "误报: KMS引起的误报",n "result": "正常行为",n "reason": "该事件中的告警由内存加载PE文件引起,结合进程链分析发现系统中存在正常的系统服务启动流程。所有相关进程如xxxx.xxxx.xxx.xxx.exe均未表现出恶意行为特征,且没有触发其他高风险的IOA入侵特征。根据历史周报研判数据,这类告警通常为误报,可能是由于程序加载方式异常引起的安全监控系统误判。"n}"}]}
.....
注意:
最好黑白数据1:1,并且AI思考错了,需要人工修正think部分,并且告诉AI,软件是什么意思,一般会出现在什么地方.需要注意什么.
开始微调
感谢现在的科技,再也不用跟之前一样租服务器搁那跑脚本了,现在直接选择在线微调服务,比如我选择的是阿里云的PAI:
https://pai.console.aliyun.com/
只需要三步,非常无脑简单
-
把json数据放到OSS里面 -
打开PAI,这样选: -
点 训练
这里选OSS的那个JSON
这里选OSS的输出目录 -
超参那里, max length默认是512,远远不够,我这边是8K,我就调整到8192了
-
然后点训练,大概要60分钟,一次大约30元.然后从OSS下文件回来就行.毫无难度.全傻瓜化.
基本上就得到这些模型文件了:
基本上就得到这些模型文件了:
转换格式
下载下来的模型,是safetensors的模型,我这边用llm studio跑的推理,所以还需要转换
下载llama.cpp
https://github.com/ggml-org/llama.cpp
下载完后,使用convert_hf_to_gguf.py转为llm studio/ollama支持的大模型文件:
python ./convert_hf_to_gguf.py ../../merged_model_32b --outfile ../../rm_ds_32b_raw.gguf
量化
得到的模型是原始的模型,没有量化,可以看到很大:
我们使用llama.cpp的量化工具,量化一下模型
./llama-quantize.exe ../rm_ds_32b_raw.gguf ../rm_ds_32b_q4.gguf Q4_K_M
就可以了:
可以看到,小了很多,也足够用了
这边有几个选择:
Q2/Q3-> 基本别用,量化后成垃圾了
Q4 -> 不要用,这个跟Q4_K_M还不一样,性价比不高而且模型也有点智障
Q4_K_M -> 非常推荐,默认这个性能和性价比最好
Q5系列:如果有条件,预算高,显存大,就用这个.但是其实跟Q4高不了多少
其他: 不考虑,如果能跑其他的预算了,DS满血版本也不是不可以了.为什么非要盯着32B的模型?
实际测试
量化后直接丢llm studio or llama.cpp 就能跑了,这里不推荐ollama,ollama要写配置项,很麻烦.
这里过程就不说了,看看实际效果:
内存反射注入:
{'title': '检测到未知恶意程序注入', 'result': '恶意攻击', 'reason': 'EDR告警显示PE文件ManualMap、线程启动地址中有不寻常的Shellcode以及云端机器学习检测到恶意文件。进程树显示explorer.exe加载了inject.x64.exe,该进程无网络或磁盘活动,但结合历史数据和当前告警信息,判断为恶意攻击行为。'}
经典款wannacry:
{'title': '检测到Wannacry勒索软件', 'result': '恶意攻击', 'reason': 'EDR事件显示云端机器学习检测到恶意文件,并发现wannacry启动,疑似勒索软件大范围修改文件。进程树中出现@[email protected],这是Wannacry的典型特征。此外,利用reg.exe进行注册表修改和wmic删除卷影备份的行为进一步确认了攻击意图。'}
银狐:
{'title': '检测到Ghost远控木马攻击', 'result': '恶意攻击', 'reason': 'EDR事件显示svchost.exe被注入shellcode,并且存在异常进程注入和远程RPC指令接收等行为,结合历史数据中的类似告警,判断为ghost远控木马活动。'}
xred蠕虫:
{'title': '检测到DarkKomet蠕虫木马攻击', 'result': '恶意攻击', 'reason': 'EDR告警显示存在多个高风险网络行为和进程异常。svchost.exe和synaptics.exe尝试连接已知的恶意域名xred.mooo.com,这与DarkKomet蠕虫木马的行为相符。此外,隐藏文件被执行、修改登录注册表以及不寻常的程序路径进一步支持了恶意攻击的可能性。'}
其他一些;
cobaltstrike::
{'title': '检测到CobaltStrike恶意攻击', 'result': '恶意攻击', 'reason': "EDR告警显示存在疑似CobaltStrike的shellcode,并且有隐藏文件被执行的情况。进程树中explorer.exe启动cmd.exe,进而执行了一个名为'xxxxxxxxxxxx.exe'的可疑进程。这些行为与已知的恶意攻击模式相符,尤其是CobaltStrike远控木马通常用于APT活动中的信息窃取和持久化建立。"}
lumma stealer:
{'title': '检测到powershell.exe恶意文件', 'result': '恶意攻击', 'reason': 'EDR事件中检测到通过attrib.exe隐藏文件、云端机器学习检测到恶意文件以及镜像checksum异常等行为。进程树显示有cmd.exe启动了attrib.exe和powershell.exe,这些工具常被用于恶意活动。虽然没有高风险网络行为或注册表修改,但多个告警指标表明可能存在潜在威胁'}
不知道是啥远控木马:
{'title': '检测到未知远控木马', 'result': '恶意攻击', 'reason': 'EDR事件中存在多个高风险告警:http流量包含可疑特征、执行摘钩操作以及云端机器学习检测到恶意文件。进程树显示explorer.exe启动了三个随机命名的子进程,这些子进程可能用于隐藏真实行为或与远程命令控制服务器通信。结合攻击模式演进和异常进程关联分析,此事件很可能涉及远控木马活动。'}
误报1:
{'title': '误报:xxxxx', 'result': '正常行为', 'reason': '进程树显示为winlogon.exe -> userinit.exe -> explorer.exe -> xxxxxxxx.exe,这些均为系统或已知应用程序的正常启动流程。触发文件为xxxxxxxx.exe,其网络和磁盘信息无异常,且未执行任何高风险操作。参考历史误判案例(如KMS、番茄助手等),此告警可能属于误报。'}
KMS,番茄助手这些是在训练的数据集里面
误报2:
{'title': '误报:执行摘钩操作', 'result': '正常行为', 'reason': '检测到的进程树显示为合法的Windows Defender组件活动,无恶意网络或文件行为。'}
误报3:
{'title': '误报:win解压缩程序正常行为', 'result': '正常行为', 'reason': '该事件由用户初始化.exe启动explorer.exe,并进一步启动win解压缩程序,整个进程链未显示高风险网络行为或异常文件操作。根据历史数据,此类解压程序的启动通常为正常软件行为,因此判断此告警为误报。'}
目前来看,微调前AI准确率只有90% 微调后,准确率到了非常惊人的99%.微调后人只需要确定一次AI的结果就行.实际上已经具有实践落地的能力了。
经验总结
这边给一些经验的总结,希望大家别踩走过的坑:
-
模型不是越大越好,32B是最有性价比的
-
推理机器上,MAC的内存大于32G的都可以,不想用MAC可以用4090也足够了.但是注意,MAC选一定要选PRO,否则推理非常慢.4090不存在这种微调,据说20系列魔改大内存版也很给力,没试过.
-
巧妇难于无米之炊,其实在这边微调DS的成功之前,EDR已经做的足够好了,很大程度上,AI研判的准确率,离不开EDR的遥测模块以及日志模块和IOA模块,翼龙的EDR的搜集已经非常细致,而且误报很少,漏报约等于0,如果自己的产品误报非常多,幻想用AI压误报,这个是不现实的.
-
自己产品遥测模块很差,日志搜集能力很差(如sysmon套皮之类的),喂给AI,AI也研判不出来.所以能接入AI自动化的第一步应该是, 自己的产品足够好. 而不要幻想AI能给自己产品带来拯救性的成果,记住我们用AI是辅助自己,要以产品为核心,而不是在AI上打造了一个产品.
-
目前不能直接交给AI自动化,AI最多做到分析辅助研判.必须人工确认.尤其是安全这个行业,AI可以帮你在海量数据日志里面找到异常,但是不代表完全依赖AI.AI犯错概率只有1%也不能只依赖AI,尤其是网络安全行业,不加以人工确认到最后会变成,AI犯的错,你坐的牢.
后续展望
后续还可以利用DS的推理能力做非常多有意思的:
-
自动AI写报告,遇到威胁后能自动分析,自动出报告.这块相信微调后只是时间问题 -
按月微调,跟人记忆一样,每次微调让AI更加理解业务,更加聪明,其实这块更像是人睡觉,人每天睡觉也是为了把记忆写在脑子里面,按月微调也是一样. -
AI自动处理,可以让AI根据安全产品的日志给处置方案,甚至是自己调用工具处置 -
AI工具链,还可以让AI自动调用威胁情报接口,丰富研判和推理过程.
原文始发于微信公众号(冲鸭安全):微调deepseek让它变成网安的业务模型
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论