Android设备内核漏洞的修补系统及方法与流程

文档序号:11775155阅读:891来源:国知局
Android设备内核漏洞的修补系统及方法与流程

本发明涉及的是一种计算机领域的技术,具体是一种针对老式android设备的内核漏洞的修补系统及方法。



背景技术:

如今在android上发现的大多数内核漏洞都是易于在源代码上进行修补重新编译的逻辑漏洞。但实际上google只为自己的nexus设备推送补丁更新。当google发布一个新的安全更新时,对于其他厂商来说往往需要大量的时间使更新兼容移动设备。在某些情况下,一些厂商甚至会忽略某些更新或者只对自己最新的设备进行更新。因此在这种情况下,大量的android设备将面临漏洞长期无法修复的情况。

对于android系统进行安全更新最大的障碍之一来自于android系统碎片化。与ios设备相比,android系统有着大量不同的厂商,因而产生了各种各样的二进制文件。而且大多数厂商将自己设备相关的代码闭源,各厂商基于源码进行了大量修改或删除相关函数来生成自己某一固定的版本,此外有些厂商使用不同的编译器或编译选项对二进制代码进行优化,在这种情况`下,二进制代码多样化,差异尤其明显。此外修复涉及到二进制重写等工作,针对于内核代码不同厂商采用了不同的防护手段(内核代码只读,kernelmodule校验,kernelmodule白名单,pxn等),对于重写工作造成了一定的困难。



技术实现要素:

本发明针对现有技术存在的上述不足,提出一种android设备内核漏洞的修补系统及方法,通过启发式匹配策略来进行匹配定位漏洞点,在深入分析、理解内核页表的基础上,修改页表权限达到插入修补代码的目的。

本发明是通过以下技术发明实现的:

本发明涉及一种android设备内核漏洞的修补系统,包括:修复信息采集模块、启发式匹配模块、内核页表处理模块和修复模块,其中:修复信息采集模块与启发式匹配模块相连并传输cve(commonvulnerabilities&exposures,公共漏洞和暴露)信息,启发式匹配模块与修复模块相连并传输漏洞点位置,即修补代码的插入点位置,内核页表处理模块与修复模块相连并传输分配的可执行内存信息,修复模块根据分配的可执行内存信息和漏洞点位置实现漏洞的修复。

所述的android设备是指:版本低于6.0的安卓系统设备。

所述的内核漏洞,是指安卓系统内核相关的cve漏洞。

本发明涉及上述系统的内核漏洞的修补方法,包括:

步骤1)通过从google的androidsecuritybulletin每月发布android最新的cve信息中获取相关的修复信息以及从待修复的android设备上获取内核符号信息。

所述的修复信息包括:该cve中的具有漏洞的函数以及修复代码。

所述的获取内核符号信息是指:从android设备上的/proc/kallsyms读取由kallsyms存储的内核的所有函数地址和名称,即内核符号信息。

步骤2)选取某一不常用的syscall(系统调用)的内核页表,进行写权限改写和代码改写,触发系统调用进行可执行内存分配,最后恢复内核页表。

所述的不常用syscall包括:sys_sched_yield等。

所述的写权限修改是指:根据不同厂商采用的不同防护手段,对内核页表权限进行修改,使放置该syscall的内核代码区域可写。

所述的代码改写是指:重写syscall代码,根据内核符号信息得到的syscall内核代码位置重写一段分配可执行内存的shellcode(壳代码),使得在调用该syscall时能够得到内核中一段用于未来放置修补代码的可执行区域。该syscall的调用结果将返回可执行区域的地址。

步骤3)根据漏洞修补信息以及内核符号信息定位存在漏洞的函数,然后通过启发式匹配策略搜索定位漏洞点以及漏洞修补信息。

所述的定位是指:通过访问内核虚拟内存的路径/dev/kmem定位存在漏洞的函数。

所述的漏洞修补信息是指:修补代码涉及到的存储相关变量的寄存器或内存地址。

所述的启发式匹配策略,可以帮助修复系统可适应性地定位漏洞点及漏洞修补信息。该启发式匹配定位策略根据以下特征进行匹配:助记符和操作符、常数、调用约定关系、结构体的相对偏移、arm体系的汇编代码特征,例如return,jump相关指令等。

步骤4)根据启发式匹配策略定位的漏洞点以及相关修补信息,生成修补代码,并进行漏洞点重写修补,将修补代码放置于及步骤2得到的可执行区域上。

所述的漏洞点重写修改,具体包括以下步骤:

a)对漏洞点代码段的页表权限进行修改增加写权限;

b)在漏洞点处重写跳转指令,将其指向可执行区域地址;

c)在可执行区域中写入修补代码。

d)将漏洞点代码段的页表权限恢复至修改前状态。

附图说明

图1为本发明流程图;

图2为本发明系统示意图。

具体实施方式

如图2所示,本实施例包括:修复信息采集模块、启发式匹配模块、内核页表处理模块和修复模块,其中:修复信息采集模块与启发式匹配模块相连并传输cve信息,启发式匹配模块与修复模块相连并传输漏洞点位置,即修补代码的插入点位置,内核页表处理模块与修复模块相连并传输分配的可执行内存信息,修复模块根据分配的可执行内存信息和漏洞点位置实现漏洞的修复。

如图1所示,本实施例涉及上述系统的修补方法,包括以下步骤:

步骤1)从google每月发布的安全通告中获取cve相关的修复信息;

步骤2)选取某一不常用的syscall的内核页表,进行写权限改写和代码改写,触发系统调用进行可执行内存分配,最后恢复内核页表。

步骤3)根据修补信息以及内核符号信息定位存在漏洞的函数,然后通过启发式匹配策略搜索定位漏洞点以及相关的漏洞修补信息。

步骤4)根据启发式匹配策略定位的漏洞点以及相关修补信息,生成修补代码,并进行漏洞点重写修补,将修补代码放置于及步骤2得到的可执行区域上。

所述的启发式匹配策略中,匹配的特征包括:助记符和操作符、常数、调用约定关系、结构体的相对偏移以及arm体系的汇编代码特征,例如return,jump相关指令等。

所述的重写修改:

1)对于内核,有以下两种方式来是使内核代码只读。一种是configdebugrodata选项,会对页表采用单层映射。另一种是高通的config_strict_memory_rwx选项,采用页映射。

2)重写页表后,直接修改内核代码会crash。通过研究分析,每个进程在建立的时候会拷贝内核页表的区域,所以通过新启动一个进程来进行代码修改。

3)选取的syscall的短期修改不影响系统的正常使用。

通过以上的策略,本发明在没有源码的情况下直接对内核代码进行动态修复。相较以前的研究发明以及对现实的移动设备情况的调研,能够修复大多数6c.0以下的设备。

上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现发明均受本发明之约束。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1