跳至主要內容

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,然后做出相应的反馈(比如禁止、注入、重定向等等)。