Loki 简单 IOC 扫描器
官方地址https://www.bsk-consulting.de/loki-free-ioc-scanner/
下载地址https://github.com/Neo23x0/Loki
LOKI 是一款免费开源简单扫描器IOC,相当于THOR的社区版。简单学习一下实现方式。
简介
四个检测方式
- 文件名 IOC:使用正则表达式匹配路径/名字
- Yara Rule 检测:使用 Yara 签名匹配文件数据和处理内存
- Hash 检测:扫描文件时比较恶意软件的Hash (MD5,SHA1,SHA256)
- C2回连检测:比较断点之间的连接使用C2 IOCs
额外的检测方式
- Regin 木马文件检测
- 进程异常检测
- SWF 解压缩检测
- SAM 转储 检测
- DoublePulsar 后门检测(445 和 338 端口)
- PE-Sieve 进程检测
细节介绍
scan_path
递归遍历文件
如果是linux 或者macos系统 还会判断文件类型
mode = os.stat(filePath).st_mode
if stat.S_ISCHR(mode) or stat.S_ISBLK(mode) or stat.S_ISFIFO(mode) or stat.S_ISLNK(mode) or stat.S_ISSOCK(mode):
continue
'''
stat.S_ISCHR 字符设备
stat.S_ISBLK 块设备
stat.S_ISFIFO 命名管道
stat.S_ISLNK 链接文件
stat.S_ISSOCK 套接字文件
'''
- 使用文件IOC集合进行判断 filename_iocs
- 检测文件名和系统文件名字的Levenshtein(莱文斯坦距离: 两个字符串之间距离。由一个字符串转换成另一个字符串最少需要的编辑操作次数),判断和系统名字相似之处
- 检测文件类型,通过判断常见的文件头信息来判断文件类型
- 读全部数据对文件进行 md5, sha1, sha256 检测
- 检测 regin 木马,查看是否是 regin文件系统
- 脚本文件自动检测,文件大写字母 大于 小写字母的0.9; 符号数大于字母数;操作符(
^{}"<>;
)大于字母数的0.05 - 对 MDMP 文件和 SWF 文件进行 yara 规则检查
scan_processes
进程扫描
在Linux kernel中,0号进程是scheduler,1号进程是init/systemd(所有user thread的祖先),2号进程是[kthreadd]
sqlserver 一般占用pid 4
- 使用wmi.WMI().Win32_Process获取所有进程
- 正则匹配检查 psexec .* [a-fA-F0-9]{32}
- 进程文件名 检查 filename_ioc, ioc 文件中自带分值,依照危险程度 记录日志 alert,warning
- 使用Yara规则 对进程检查,只查100mb以下的进程
- 使用 PESieve 扫描 https://hshrzd.wordpress.com/pe-sieve/
- 检查进程通信 check_process_connections,如果状态为LISTEN:对监听所有IP的进程进行warning; 如果状态为ESTABLISHED:对连接的IP进行C2检测
- 对部分已知文件的特征pid 进行检测,(pid=4,System),(parent_pid=4,smss.exe),(priority=11,smss.exe)
check_rootkit
只检查了 Double Pulsar SMB Backdoor
TODO:
- yara 规则积累
- PESieve 的实现原理学习
- 可以将基本的应急响应步骤使用脚本实现