
1) 【一句话结论】在360安全卫士开发中,通过动态分析API调用链,识别绕过安全检查的间接调用路径,分析调用上下文后,修改安全检查逻辑以覆盖所有可能绕过路径,成功修复API调用链漏洞。
2) 【原理/概念讲解】API调用链漏洞是指程序通过间接调用(如调用中间函数后间接调用目标API)绕过安全检查,因为安全检查通常仅验证直接调用的API是否被允许。类比:就像安检只检查直接携带的物品,而通过中间人传递物品绕过检查,需要安检也检查中间传递的环节。
3) 【对比与适用场景】
| 方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 静态分析 | 分析二进制代码,无需运行程序 | 速度快,可分析所有代码路径 | 识别代码结构、API调用位置 | 难以分析运行时调用上下文,易遗漏间接调用 |
| 动态分析 | 运行程序并监控API调用 | 能捕获运行时调用链、上下文 | 定位实际绕过路径、验证修复 | 耗时,需模拟真实场景 |
4) 【示例】
伪代码示例(假设安全检查函数仅检查直接调用CreateFile):
// 原程序调用链
void SomeFunction() {
FunctionA();
}
void FunctionA() {
FunctionB();
}
void FunctionB() {
HANDLE hFile = CreateFile("c:\\test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
// ... 使用hFile
}
// 安全检查函数
BOOL CheckSecurity(HANDLE hFile) {
// 仅检查直接调用CreateFile的情况
return FALSE; // 模拟拦截
}
通过动态分析发现FunctionB调用CreateFile时,CheckSecurity未被触发,从而定位漏洞。
5) 【面试口播版答案】
在360安全卫士的开发过程中,我们遇到了一个通过API调用链绕过安全检查的漏洞。首先,我们使用动态分析工具(如API Monitor)监控所有API调用,发现程序通过调用链(如调用FunctionA后间接调用CreateFile)绕过安全检查。分析调用上下文后,发现安全检查函数只验证直接调用的API,而中间函数的调用未被检查。于是,我们在安全检查函数中增加对调用链中所有相关API的检查,确保所有可能的绕过路径都被拦截。最终修复了漏洞,并通过动态测试验证了修复效果,确保了安全检查的完整性。
6) 【追问清单】
7) 【常见坑/雷区】