[发明专利]Android设备内核漏洞的修补系统及方法有效
申请号: | 201710405313.9 | 申请日: | 2017-05-31 |
公开(公告)号: | CN107273750B | 公开(公告)日: | 2021-03-16 |
发明(设计)人: | 张媛媛;张雪雯;束骏亮;李卷孺;谷大武 | 申请(专利权)人: | 上海交通大学 |
主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F8/65;G06F9/445;G06F11/07 |
代理公司: | 上海交达专利事务所 31201 | 代理人: | 王毓理;王锡麟 |
地址: | 200240 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | android 设备 内核 漏洞 修补 系统 方法 | ||
1.一种基于Android设备内核漏洞的修补系统的内核漏洞的修补方法,其特征在于,所述的修补系统包括:修复信息采集模块、启发式匹配模块、内核页表处理模块和修复模块,其中:修复信息采集模块与启发式匹配模块相连并传输CVE信息,启发式匹配模块与修复模块相连并传输漏洞点位置,即修补代码的插入点位置,内核页表处理模块与修复模块相连并传输分配的可执行内存信息,修复模块根据分配的可执行内存信息和漏洞点位置实现漏洞的修复;
所述的修补方法,包括以下步骤:
步骤1)从Google每月发布的安全通告中获取CVE相关的修复信息;
步骤2)选取某一不常用的syscall的内核页表,进行写权限改写和代码改写,触发系统调用进行可执行内存分配,最后恢复内核页表;
所述的写权限改写是指:根据不同厂商采用的不同防护手段,对内核页表权限进行修改,使放置该syscall的内核代码区域可写;
所述的代码改写是指:重写syscall代码,根据内核符号信息得到的syscall内核代码位置重写一段分配可执行内存的shellcode,使得在调用该syscall时能够得到内核中一段用于未来放置修补代码的可执行区域;该syscall的调用结果将返回可执行区域的地址;
所述的内核符号信息,通过从Android设备上的/proc/kallsyms读取由kallsyms存储的内核的所有函数地址和名称;
步骤3)根据修补信息以及内核符号信息定位存在漏洞的函数,然后通过启发式匹配策略搜索定位漏洞点以及相关的漏洞修补信息;
所述的定位是指:通过访问内核虚拟内存的路径/dev/kmem定位存在漏洞的函数;
所述的漏洞修补信息是指:修补代码涉及到的存储相关变量的寄存器或内存地址;
步骤4)根据启发式匹配策略定位的漏洞点以及相关修补信息,生成修补代码,并进行漏洞点重写修补,将修补代码放置于及步骤2得到的可执行区域上;
所述的启发式匹配策略根据以下特征进行匹配:助记符和操作符、常数、调用约定关系、结构体的相对偏移、ARM体系的汇编代码特征;
所述的启发式匹配策略中,匹配的特征包括:助记符和操作符、常数、调用约定关系、结构体的相对偏移以及ARM体系的汇编代码特征;
所述的修补信息包括:该CVE中的具有漏洞的函数以及修复代码;
所述的重写修补:
1)对于内核,有以下两种方式来是使内核代码只读;一种是CONFIG DEBUG RODATA选项,会对页表采用单层映射;另一种是高通的CONFIG_STRICT_MEMORY_RWX选项,采用页映射;
2)重写页表后,直接修改内核代码会crash;通过研究分析,每个进程在建立的时候会拷贝内核页表的区域,所以通过新启动一个进程来进行代码修改;
3)选取的syscall的短期修改不影响系统的正常使用;
所述的漏洞点重写修补,具体包括以下步骤:
A)对漏洞点代码段的页表权限进行修改增加写权限;
B)在漏洞点处重写跳转指令,将其指向可执行区域地址;
C)在可执行区域中写入修补代码;
D)将漏洞点代码段的页表权限恢复至修改前状态。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海交通大学,未经上海交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710405313.9/1.html,转载请声明来源钻瓜专利网。