zamana AntiMalware 是windows平台上的一款反恶意软件(轻量级),其核心模块amsdk.sys实现了内核层的功能;amsdk.sys没有加壳/混淆,而且还有很多调试信息,这有利用我们理解其开发流程和细节。
(分析环境:win 11 64,zamana AntiMalware 免费版)
以下从其六个主要的功能模块展开分析:
1,authentication manager (进程认证管理)
2,mini filter (文件过滤功能)
3,self guard (自我保护)
4,protect registry (注册表保护)
5,hook manager (hook管理)
6,irp_mj_device_control (用户层接口)
一,进程认证管理
这个模块主要通过PsSetCreateProcessNotifyRoutine注册函数来监控进程的创建与结束事件,其在回调函数中,如果是进程创建,就输出对应的调试信息;如果是进程结束,会判断其是否是已经认证过的进程,如果是,则将其从对应的数组中删除。(进程认证的接口在irp_mj_device_control对应的函数中,相关分析放在该部分)相关代码截图如下:
二 ,文件过滤功能
这个模块相当于集成了一个文件过滤驱动,用来对文件读写内容包含以下字符串“X5O!P%@AP[4\PZX54(P^)7CC)7”的操作进行控制---不知道要干什么 (这个字符串是欧洲反恶意软件的测试文件内容)。通过FltRegisterFilter来注册过滤器,对create/write操作进行监控,如下图所示:
其效果如下:
三,自我保护
通过PsSetLoadImageNotifyRoutine注册函数来监控加载的镜像并加以验证,来实现对恶意镜像加载的拦截:首先,判断当前加载镜像的进程是否是已经通过一模块中认证过;然后,如果当前进程和其父进程都是没有认证过的镜像,获取其IMAGE_NT_HEADERS中的五个数据:
NtHeaders.FileHeader.NumberOfSection //节区数
NtHeaders.FileHeader.TimeDateStamp //时间戳
NtHeaders.OptionalHeader.AddressOfEntryPoint //镜像入口偏移
NtHeaders.OptionalHeader.SizeOfImage //镜像大小
NtHeaders.OptionalHeader.CheckSum //文件校验和
如下图:
通过自定义的计算函数,将以上五个dword 数据生成一个dword;最后,在其可配置的黑名单中查找,确定是否是不安全的镜像文件。
镜像拦截,通过修改其入口点的代码。让其直接返回。支持32/64位文件。
四,注册表保护
通过CmRegisterCallback注册回调函数,来保护白名单中的注册表不被修改/删除。
参考函数文档:https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-cmregistercallback
对RegSetValueKey操作进行过滤。
五,hook管理
检查并修复可能被hook的以下函数:
IofCallDriver,IofCompleteRequest,IoCallDriver,IoCompleteRequest,
NtOpenProcess,NtQuerySystemInformation
在某些条件下,hook ExQueueWorkItem 使watchdogs失效。
六,irp_mj_device_control 用户层接口
实现的功能列表如下:
IOCTL_CREATE_FILE_BYPASS_FILTERS
IOCTL_CHECK_DRIVER_DISPATCH_ROUTINES
IOCTL_FIX_DRIVER_DISPATCH_ROUTINES
IOCTL_REGISTER_PROCESS
IOCTL_SCSI_READ
IOCTL_SCSI_WRITE
IOCTL_OPEN_PHYSICAL_DRIVE
IOCTL_GET_KERNEL_IMAGE_INFORMATION
IOCTL_DUMP_MINIPORT_INFORMATION
IOCTL_FIX_CRITICAL_KERNEL_FUNCTIONS
IOCTL_DELETE_FILE
IOCTL_ENUM_PROCESSES
IOCTL_ENUM_PROCESS_MODULES
IOCTL_CREATE_KEY
IOCTL_DELETE_KEY
IOCTL_PROTECT_REGISTRY
IOCTL_SAVE_MINIPORT_FIX
IOCTL_TERMINATE_PROCESS
IOCTL_OPEN_PROCESS
IOCTL_BLOCK_UNSAFE_DLL
IOCTL_GET_DRIVER_PROTOCOL
IOCTL_DELETE_VALUE
IOCTL_QUERY_DIRECTORY_FILE
IOCTL_OPEN_THREAD
等等。
总结
通过其调试信息可以快速的摸清功能架构,分析完感觉少了点什么似的,可能不是会员版。