目前,我国自主开发的操作系统具有许多实际应用环境和场景,特别是重要服务器、核心设备等关键环节,因此挖掘和修复其核心漏洞非常重要。目前,该行业的漏洞挖掘技术基本上是局部的、人工的和技术手段,缺乏广义的、全面的、算法水平的思想和方法。在已知源代码的基础上,提出了以函数为粒度的自动变换、自动跟踪和自动分析验证算法。实现操作系统内核函数运行时的监控和调用序列分析,实时发现利用内核漏洞的入侵,准确定位漏洞的源代码,阻碍漏洞入侵代码的运行。
词法分析代码,包括隐函数和虚函数的提取、识别和转换。C语言实现了操作系统的源代码。根据C语言的规范,所有代码都由函数组成,每个函数都有统一的语法和词法特征。因此,通过对源代码的语法分析,可以提取所有函数,自动改造每个函数,插入函数级监控和分析代码。函数调用关系序列的分析和描述可以从源代码中确定函数之间的调用关系和上下文。虽然一个函数可以被多个函数调用,一个函数也可以调用多个函数,包括递归调用,但每个调用必须在源代码中明确定义。任何函数的调用者列表、被调用者列表和调用序列表都可以从代码中轻松确定。这样就可以建立一个以函数名为索引的调用关系表。操作系统中所有函数的数量都在10万以上,每个函数的平均调用者数量和被调用者数量都在100以内,所以整个调用关系库的大小应该在4MB左右,并且是恒定的,可以永久放在内存中,供函数调用时实时比对验证分析,不会影响系统内存的占用。
函数调用监控技术。
通过改造每个函数,在函数头部插入一小段代码,比较函数的调用者和调用上下文是否与调用关系库一致,可以判断调用函数是否合法,进而确定是否存在漏洞。然后通过全息日志分析漏洞的原因,同时阻塞函数的运行,确保它们不会造成伤害。由于函数名称已被标记为整数,可以直接作为搜索索引查询调用关系库,因此它是一个直接定位的全内存操作,无需锁定,相当于每个函数操作几十个指令,因此对系统运行效率的影响很小。