51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

请解释Windows内核中的结构化异常处理(SEH)机制的工作原理,并分析如何利用SEH进行提权攻击,以及360安全卫士如何通过技术手段(如内核补丁检测、行为监控)来防御这类攻击?

360安全研究员(Windows方向)难度:中等

答案

1) 【一句话结论】Windows内核的SEH机制通过异常记录和链表捕获程序异常,攻击者可利用漏洞劫持异常处理流程实现提权,360通过内核补丁检测(监控SEH链表非法修改)和行为监控(分析异常处理程序行为)防御此类攻击。

2) 【原理/概念讲解】SEH是Windows内核的异常处理机制,用于捕获程序运行中的异常(如访问非法内存、除零错误)。核心组件包括:

  • 异常记录(Exception Record):每个线程的异常处理链表头,结构为:
    struct _EXCEPTION_RECORD {
        DWORD ExceptionCode;      // 异常类型编码(如0xC0000005表示访问非法内存)
        PVOID ExceptionAddress;   // 异常发生地址
        DWORD NumberParameters;    // 参数数量
        DWORD ExceptionFlags;      // 标志位
        PVOID ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; // 参数
        PEXCEPTION_RECORD NextExceptionRecord; // 指向下一个记录的指针
    }
    
    每个异常记录包含异常类型、发生地址、处理程序地址等关键信息。
  • 异常处理程序(Exception Handler):函数指针,处理异常的代码(通常在栈中,地址由异常记录中的ExceptionAddress指向)。
  • 异常处理链表(Exception Handler Chain):每个线程的异常处理程序链表,按优先级排列(从栈顶向下,即最近被设置的异常处理程序优先)。

当异常发生时,内核会遍历异常处理链表:

  1. 内核获取当前线程的异常记录(链表头);
  2. 检查异常类型(如EXCEPTION_ACCESS_VIOLATION);
  3. 遍历链表中的每个异常处理程序地址,调用匹配的处理程序(如异常处理函数);
  4. 若链表为空或无匹配处理程序,内核终止线程(程序崩溃)。

类比:异常处理就像“异常的快递处理流程”——异常记录是“异常的包裹信息(含异常类型、地址)”,异常处理程序是“负责处理异常的快递员(代码)”,异常处理链表是“快递员的工作链(按优先级排列,先找最近的快递员处理)”。例如,程序访问非法内存时,内核触发异常,将异常信息填入记录,遍历链表找到第一个能处理的快递员(处理程序),执行其代码;若链表为空则程序崩溃。

3) 【对比与适用场景】

对比项SEH提权攻击360防御手段
定义利用堆栈溢出等漏洞,覆盖异常处理链表指针,劫持异常处理流程,跳转到恶意代码实现提权通过内核补丁检测(监控SEH链表是否被非法修改)和行为监控(检测异常处理程序是否执行提权系统调用)防御攻击
工作原理堆栈溢出覆盖SEH指针(位于栈中),修改为恶意代码地址;异常发生时,内核遍历链表,跳转到恶意代码内核驱动实时监控异常处理链表指针变化,对比正常状态;行为分析模块检测异常处理程序是否调用系统调用(如NtCreateProcess、NtSetInformationProcess)
使用场景漏洞利用(如堆栈溢出、缓冲区溢出、格式化字符串漏洞)防御漏洞利用,保护系统安全,防止提权
注意点需精确覆盖SEH指针,避免破坏栈结构;需触发异常(如访问非法内存)使内核进入异常处理流程需实时监控,避免误报(如合法的异常处理程序,如调试器);需结合行为分析,提高检测准确率

4) 【示例】
伪代码展示SEH提权攻击:

void vulnerable_function() {
    char buffer[8];
    strcpy(buffer, "a" * 12); // 堆栈溢出,覆盖SEH指针
}

int main() {
    // 假设SEH指针在栈中,地址为0x7ffdf000(x86下,偏移-8相对于EBP)
    // 溢出后,SEH指针被覆盖为恶意代码地址0xdeadbeef
    vulnerable_function();
    // 异常发生时,内核遍历链表,跳转到0xdeadbeef的shellcode
    // shellcode执行系统调用(如NtCreateProcess),提升权限
}

解释:当vulnerable_function执行strcpy时,输入字符串长度超过8,覆盖栈中的SEH指针,将其指向恶意代码。当后续发生异常(如访问非法内存),内核触发异常,跳转到恶意代码,执行提权操作(如创建系统进程、修改进程权限),实现提权。

5) 【面试口播版答案】
“SEH是Windows内核的异常处理机制,核心是通过异常记录和链表来捕获程序运行中的异常。攻击者可以利用堆栈溢出等漏洞,覆盖异常处理链表指针,劫持异常处理流程,跳转到恶意代码实现提权。360通过内核补丁检测,实时监控异常处理链表是否被非法修改;通过行为监控,检测异常处理程序是否执行系统调用(如创建进程、提权),从而有效防御这类攻击。”

6) 【追问清单】

  • 问:SEH与硬件异常(如页面错误)的区别?
    答:硬件异常由CPU直接触发,处理流程由硬件和内核共同完成;SEH是软件异常处理,由程序触发,内核通过异常记录和链表处理。
  • 问:360的内核补丁检测具体如何实现?
    答:通过内核驱动监控异常处理链表的变化,对比正常状态,识别异常修改;结合行为分析,判断是否为恶意操作。
  • 问:行为监控如何识别异常?
    答:通过分析异常处理程序的执行上下文,检测是否执行了系统调用(如NtCreateProcess、NtSetInformationProcess),结合上下文判断是否为攻击。
  • 问:SEH提权攻击的常见漏洞类型?
    答:堆栈溢出、缓冲区溢出、格式化字符串漏洞等,这些漏洞可覆盖SEH指针,实现异常处理流程劫持。

7) 【常见坑/雷区】

  • SEH指针位置:错误认为SEH指针在栈帧的固定位置,实际上可能因编译器优化(如栈帧布局调整、函数调用约定)而变化,需考虑栈布局。
  • 异常触发时机:错误认为只要修改SEH指针就能成功,实际上需要触发异常(如访问非法内存)使内核进入异常处理流程。
  • 360防御误报:合法的异常处理程序(如调试器)可能修改SEH链表,导致误报;或攻击者使用隐蔽方式(如直接调用异常处理程序,不修改链表),导致漏报。
  • 内核补丁检测兼容性:假设360的内核补丁检测可能影响系统性能或兼容性,实际需平衡检测效果与系统稳定性。
  • 攻击中的异常类型:错误认为所有异常都能被SEH捕获,实际上某些硬件异常(如页面错误)可能绕过SEH,攻击者需选择合适的异常类型。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1