如何防止恶意的第三方DLL注入到进程

发布时间:2021-08-05 16:52:01 作者:Leah
来源:亿速云 阅读:1291
# 如何防止恶意的第三方DLL注入到进程

## 引言

在Windows系统安全领域,DLL注入(Dynamic-Link Library Injection)是一种常见的技术手段。攻击者通过将恶意DLL加载到目标进程内存空间,能够窃取数据、篡改行为或绕过安全检测。本文将深入探讨防护策略,从原理到实践提供系统化解决方案。

---

## 一、DLL注入的常见技术原理

### 1.1 基本注入流程
- **远程线程注入**:通过`CreateRemoteThread`在目标进程创建线程执行`LoadLibrary`
- **APC注入**:利用异步过程调用(APC)队列强制加载DLL
- **注册表劫持**:修改`AppInit_DLLs`或`KnownDLLs`实现持久化
- **COM劫持**:通过组件对象模型劫持CLSID加载路径

### 1.2 现代注入技术演进
```c
// 典型远程线程注入代码片段
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
LPVOID pDllPath = VirtualAllocEx(hProcess, NULL, strlen(dllPath)+1, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, pDllPath, (LPVOID)dllPath, strlen(dllPath)+1, NULL);
CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pDllPath, 0, NULL);

二、主动防御技术方案

2.1 进程权限限制

2.2 内存保护机制

技术 作用描述 API示例
DEP/NX 阻止数据页执行 SetProcessDEPPolicy
ASLR 随机化内存布局 SetProcessMitigationPolicy
CFG 控制流完整性保护 SetProcessGuardPolicy
Arbitrary Code Guard 禁止非映像内存执行 PROCESS_CREATION_MITIGATION_POLICY

2.3 加载时检测

DLL白名单校验方案:

bool VerifyDllSignature(LPCWSTR lpDllPath) {
  WINTRUST_FILE_INFO fileInfo = { sizeof(fileInfo) };
  fileInfo.pcwszFilePath = lpDllPath;
  WINTRUST_DATA trustData = { sizeof(trustData) };
  trustData.dwUIChoice = WTD_UI_NONE;
  trustData.fdwRevocationChecks = WTD_REVOKE_NONE;
  trustData.dwUnionChoice = WTD_CHOICE_FILE;
  trustData.pFile = &fileInfo;
  return WinVerifyTrust(NULL, &WINTRUST_ACTION_GENERIC_VERIFY_V2, &trustData) == ERROR_SUCCESS;
}

三、运行时监控方案

3.1 API Hook监控

关键拦截点: - LoadLibraryExW - LdrLoadDll - NtMapViewOfSection

MinHook实现示例:

typedef NTSTATUS(NTAPI* pLdrLoadDll)(PWCHAR, ULONG, PUNICODE_STRING, PHANDLE);
pLdrLoadDll originalLdrLoadDll;

NTSTATUS HookedLdrLoadDll(PWCHAR PathToFile, ULONG Flags, PUNICODE_STRING ModuleFileName, PHANDLE ModuleHandle) {
  if(IsMaliciousDll(ModuleFileName->Buffer)) {
    return STATUS_ACCESS_DENIED;
  }
  return originalLdrLoadDll(PathToFile, Flags, ModuleFileName, ModuleHandle);
}

MH_Initialize();
MH_CreateHook(&LdrLoadDll, &HookedLdrLoadDll, reinterpret_cast<LPVOID*>(&originalLdrLoadDll));
MH_EnableHook(MH_ALL_HOOKS);

3.2 ETW实时监控

配置DLL加载事件捕获:

<!-- eventman.manifest -->
<provider name="Microsoft-Windows-Kernel-Process" 
          guid="{22FB2CD6-0E7B-422B-A0C7-2FAD1FD0E716}">
  <events>
    <event value="10" symbol="DllLoad" level="win:Informational"/>
  </events>
</provider>

四、系统级加固措施

4.1 组策略配置

  1. 启用软件限制策略 → 路径规则禁止%Temp%\*.dll
  2. 配置受控文件夹访问(CFA)保护关键目录
  3. 禁用远程线程创建
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\MitigationOptions]
    "MitigationOptions_FontBocking"=hex:10000000000010000000000000001
    

4.2 驱动级防护

WFP过滤器示例:

FWPM_FILTER_CONDITION cond[1] = {
  { FIELD_ALE_APP_ID, FWP_MATCH_EQUAL, { .byteBlob = &targetAppBlob }}
};
FwpmFilterAdd0(engine, &filter, NULL, NULL);

五、应急响应建议

  1. 检测阶段

    • 使用Process Explorer检查异常DLL依赖
    • 通过tasklist /m <dllname>定位加载进程
  2. 清除阶段

    :: 强制卸载DLL
    handle64.exe -p <PID> -a <DLL基址> -f
    
  3. 溯源分析

    • 检查DLL导出函数表
    • 分析时间戳和数字证书

结语

防御DLL注入需要纵深防御体系: 1. 开发阶段集成安全SDLC 2. 部署时启用所有内存保护机制 3. 运行时实施最小权限原则 4. 持续监控异常模块加载行为

通过组合技术手段与管理措施,可有效降低恶意注入风险。建议定期进行红队对抗测试验证防护有效性。

扩展阅读
- 《Windows Internals》第七版
- MITRE ATT&CK T1055
- OWASP DLL Injection Defense Cheat Sheet “`

该文档包含以下技术要点: 1. 覆盖从用户态到内核态的完整防护链条 2. 提供可直接集成的代码片段 3. 包含注册表/组策略等系统配置建议 4. 强调检测与响应并重的理念 5. 引用权威技术参考资料

可根据实际需求调整技术细节深度,建议在实施前进行充分测试验证兼容性。

推荐阅读:
  1. 防止恶意代码注入XSS(cross site scripting)
  2. 实现HOOK其他进程的Messagebox(2) DLL注入工具(2)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

dll

上一篇:Linux内核工作队列是什么

下一篇:如何解决某些HTML字符打不出来的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》