iMonitorSDK
一款为终端、主机提供系统行为监控的开发套件
旨在帮助终端安全、管控、审计、零信任、主机安全等行业应用可以快速实现必要功能,而不用关心底层驱动的开发、维护和兼容性问题,让其可以专注于业务开发
累计为20+家企业提供优质服务
功能特性
完善的监控
支持进程、文件、注册表、网络、HTTP等多种事件的监控、拦截和自保护
丰富的交互
事件不仅可以拦截,也可以修改事件的参数,或者结束操作进程、注入动态库
良好的兼容性
使用标准规范实现方式,兼容性好,同时支持XP到Win11的所有系统
规则引擎
内置强大的规则引擎,不需要写代码也可以实现强大的功能
使用场景
零信任
终端管控
行为审计
主机安全
主动防御(HIPS)
终端检测与响应(EDR)
数据防泄密(DLP)
上网行为管理
快速入门
示例一:进程启动拦截实现
class MonitorCallback : public IMonitorCallback
{
public:
void OnCallback(IMonitorMessage* Message) override
{
if (Message->GetType() != emMSGProcessCreate)
return;
cxMSGProcessCreate* msg = (cxMSGProcessCreate*)Message;
//
// 禁止进程名 cmd.exe 的进程启动
//
if (msg->IsMatchPath(L"*\\cmd.exe"))
msg->SetBlock();
}
};
int main()
{
MonitorManager manager;
MonitorCallback callback;
HRESULT hr = manager.Start(&callback);
if (hr != S_OK) {
printf("start failed = %08X\n", hr);
return 0;
}
cxMSGUserSetMSGConfig config;
config.Config[emMSGProcessCreate] = emMSGConfigSend;
manager.InControl(config);
WaitForExit("禁止进程名 cmd.exe 的进程启动");
return 0;
}
示例二:sysmon
class MonitorCallback : public IMonitorCallback
{
public:
void OnCallback(IMonitorMessage* msg) override
{
printf("%S ==> %S\n", msg->GetTypeName(), msg->GetFormatedString(emMSGFieldCurrentProcessPath));
for (ULONG i = emMSGFieldCurrentProcessCommandline; i < msg->GetFieldCount(); i++) {
printf("\t%30S : %-30S\n", msg->GetFieldName(i), msg->GetFormatedString(i));
}
}
};
int main()
{
MonitorManager manager;
MonitorCallback callback;
HRESULT hr = manager.Start(&callback);
if (hr != S_OK) {
printf("start failed = %08X\n", hr);
return 0;
}
cxMSGUserSetMSGConfig config;
for (int i = 0; i < emMSGMax; i++) {
config.Config[i] = emMSGConfigPost;
}
manager.InControl(config);
WaitForExit("");
return 0;
}

示例三:上网行为管理(基于网络重定向的方式实现,支持https,详细参考http_access_control例子)

示例四:任意时刻对进程注入动态库
class MonitorCallback : public IMonitorCallback
{
public:
void OnCallback(IMonitorMessage* Message) override
{
if (Message->GetType() != emMSGImageLoad)
return;
cxMSGImageLoad* msg = (cxMSGImageLoad*)Message;
if (!msg->IsMatchCurrentProcessName(L"notepad.exe"))
return;
if (msg->IsMatchPath(L"*\\kernel32.dll")) {
msg->SetInjectDll(L"D:\\test.dll");
}
}
};
int main()
{
MonitorManager manager;
MonitorCallback callback;
HRESULT hr = manager.Start(&callback);
CheckSignError(hr);
if (hr != S_OK) {
printf("start failed = %08X\n", hr);
return 1;
}
manager.InControl(cxMSGUserSetGlobalConfig());
cxMSGUserSetMSGConfig config;
config.Config[emMSGImageLoad] = emMSGConfigSend;
manager.InControl(config);
WaitForExit("模块注入:在notepad.exe启动加载kernel32.dll过程中,让其强制加载D:\\test.dll");
return 0;
}
监控扩展
iMonitorSDK不仅仅提供了核心位置的监控,同时也提供了一整套的监控框架,基于这个框架,可以很简单的自己实现扩展的监控点。
比如进程启动的演示代码如下:
do {
cxProcessPtr process(ProcessId);
if (!process)
break;
cxMSGProcessCreate msg;
if (!msg.IsEnable())
break;
msg.ProcessId = process->m_ProcessId;
msg.Path = process->m_Path;
msg.Commandline = process->m_Commandline;
msg.CreateTime = process->m_CreateTime;
...
msg.Dispatch();
if (msg.IsDeny()) {
// Disable Process Create
}
}
根据IDL自动生成cxMSGProcessCreate对象,设置好cxMSGProcessCreate的各个字段后,调用Dispatch后就会跟应用层通信(根据应用层设置的配置,可以是同步,也可以是异步),如果是同步的,可以通过应用层设置回来Action,然后做出相应的反馈(比如禁止、注入、重定向等等)。