“2016年6月23日,Google Project Zero的成员Jann
Horn发现了一种能绕过SELinux的W^X页保护机制的方法,通常aio_澳门新葡亰,setup_ring()的调用只会允许RW(读和写)权限,但只需要在调用前先调用一次personality(READ_IMPLIES_EXEC)就可以绕过SELinux的保护,这个缺陷是由于不正确的实现导致的,已经于2016年9月15日Linux内核社区修复,W^X页保护最早的实现来自PaX的MPROTECT,这种绕过方法对于PaX/Grsecurity无效。

科普 | 你必须了解的漏洞利用缓解及对抗技术

随着软件系统越来越复杂,软件漏洞变得无法避免。业界逐渐推出了让漏洞无法利用或利用难度提高的方法,简称漏洞缓解技术。我们简单介绍下Android和iOS中广泛使用的一些漏洞缓解及可能的绕过技术。当然这里也包含一些相关联的安全限制,而非真正意义的缓解技术。

根据Google的漏洞公布策略,所有的漏洞都会在首次报告给Google后的3个月公开,就在这个漏洞信息公开的几天后的2016年9月25日,SELinux的沙箱机制被发现可以逃逸,攻击者仅需要通过TIOCSTI的ioctl()把字符串传递给终端的输入缓冲区即可实现。这次SELinux缺陷离Sebastian
Krahmer揭露SELinux的绕过方法仅间隔几个月的时间。”

缓解及绕过技术点

User Permission

每个app有自己uid,selinux_context,只有申请并且用户允许才有权限做它想做的事。要突破这些限制,可以考虑通过每个app合理的权限相互结合后产生的不合理性来入手。或者App之间交互的漏洞,如Android的FileProvider,先拿下此app等。

SELinux、MAC、Sandbox

SELinux是Security Enhanced
Linux缩写,可解释为“安全加固型Linux内核”,MAC是Mandatory Access
Control的缩写,意为强制访问控制。Sandbox即沙盒。它们含了一套很复杂的权限管理策略。基本采用白名单模式,默认禁止任意进程的绝大部分的行为,限制文件访问,限制系统调用及调用参数。即限制了每个app的行为,也减少了被攻击面。要突破这些限制,比较可行的方法是攻击如内核关闭等。

PIE、ASLR、KALSR

PIE是Position Independent Executable的缩写,与PIC,Position Independent
Code一样。ALSR是Address Layout Space
Randomization增强内存地址空间分配的随机度。可执行文件和动态加载的库之间的间隔,前后顺序均不同,更没有规律。准确地址未知的情况下攻击者几乎不可能完成攻击,相当于战场上目标都没有找到。KALSR中的K是kernel的缩写,保证每次设备启动内核的虚拟地址是不同的。要突破这些限制,可采用堆喷射等喷射加各种类型的滑板,提高利用成功几率。信息泄漏漏洞,如泄漏内存,泄漏文件,获取内存地址。

DEP、PXN

DEP是Data Execution
Protection的缩写数据不可执行,意味着攻击者不能直接执行自己的代码,使攻击难度变高。PXN是Privileged
Execute
Never的缩写,内核态无法运行用户态可执行数据。要突破这些限制,可利用ROP(Return
Orient Program),JOP(Jump Orient Program),stack
pivot技术,用程序自己的代码做攻击者想做的事。原理是利用现在ABI(Application
Binary
Interface)的特点,改写程序的栈,控制多个函数返回地址从而形成链,将原有程序自己的代码片段连起来做攻击者想做的事。类似生物上的病毒。浏览器的话可以改写JIT(Just
In
Time)编译器所用的内存。Android用户态mprotect,mmap系统调用,把内存改成可执行。

Trust Zone

可信空间,完成指纹、支付、解锁、DRM和其他认证最保险的一步。即使是操作系统内核也无法访问其内存。它完成签名,加密等工作。要突破这些限制,先考虑拿下有权限访问的service进程drmservie,gatekeeper。通过Fuzz接口找漏洞。如果拿到代码执行的权限的话,就可以跳过指纹验证悄悄的扣款了。

平滑升级

App自动更新,系统自动下载并提醒开关机时候升级,保证及时修复bug,我们也将此列入到漏洞缓解中。要突破这些限制,可以考虑使用Google的app之间彼此信任,先拿下Google的一个app。让这个app向Google
Play发送安装请求。

Code Sign

对代码进行签名,保证代码从商店到用户手机上不会有变化,防止被恶意植入代码,也防止执行未被苹果公司审核的代码。绕过方法这里就不阐述了。

Secure Boot、Verifying Boot

Secure
Boot是iOS中的、Verifying
Boot是Android中的,它们保证系统代码不被修改,保证完美越狱、完美root无法实现。还有一些手机厂商自定义的缓释措施,如Android的system分区强制只能只读挂载,需要修改部分驱动中的数据才能实现对system分区的修改

网站地图xml地图