首页 > 编程知识 正文

Iintel CPU 漏洞科普和分析,软件漏洞分析技术

时间:2023-05-03 15:49:53 阅读:194171 作者:3463

场景模拟和漏洞科普:

有一个小区的物业非常认真负责,管理严格服务周到且值得信赖,物业拥有住户的所有信息,而且绝对不会允许一个住户查看另一住户的信息;

小区里面有两个业主A和B,不怀好意的业主A一直想打探一下住户B的车牌号,无奈物业既不允许查看他人财产信息,B行踪不定A也无法跟踪。来看一下业主A如何利用小区管理漏洞盗取业主B的车牌号:

物业对业主提出的诉求有着严格的权限检查,比如业主A提出要开走自己的车,物业需要核对业主身份证、车辆归属等一系列信息进行权限验证,确认车子归属于A后才可以放行。为了提升业主体验,物业通常会将车子提前发动,车主上车直接开走,省时省力。

另一方面,由于身份验证权限验证比较麻烦耗时较长,物业通常根据历史经验预判用户是否可靠,在接到业主诉求的时候(而不是所有权限验证完之后)采取一些动作(如发动汽车),只有在权限验证完成之后业主才能开走汽车,这看起来没有问题,因为只要最终权限验证不过没办法开走别人的车。业主A前100次过来要求开走自己的车,要求合情合理;基于之前的经验物业认为住户A是可靠的,后续A再来提诉求要开走B车的时候,物业先将B车发动,后续物业进行权限检查的时候发现车辆B不归属业主A,业主A没能开走车辆。但此时差异已经产生:业主B的车辆处于发动状态而其他所有车辆处于熄火状态,因此业主A只要在早高峰时段守在停车场,看哪一辆车驶离车位最快,就可以锁定业主B的汽车拿到车牌号了。

上述场景中物业对应操作系统,业主对应用户线程,物业的权限检查对应操作系统的访问控制,物业基于业主的历史可信程度协助发动汽车的服务类比于操作系统中根据条件判断语句历史上是否成立为下条语句做准备。

小区物业管理严格对应操作系统访问控制机制严格,每个进程要么遵守,要么被操作系统终止;服务周到对应于为提升软件执行速度所采取的一系列性能优化措施,如投机机制和缓存机制;值得信赖是因为这套机制以代码或者技术文档的方式对外开放,接受无数开发者的审查,很难存在明显的漏洞。但是在精心设计下,依然可以注入攻击。

攻击场景分析:

攻击代码如下所示:arrary1和arrary2是恶意用户定义的两个数组,其中arrary1数组为char类型,arrary2的数组元素大小与一个缓存单位相同;v表示存放密码的起始地址。发起攻击前先用x=0,1,2,3多次执行代码,欺骗系统的投机机制使其认为if判断总能成立,从而提前准备if条件下的语句,将相关信息读入缓存中。

发起攻击时,令x=v – arrary1,在系统判断出(x<4)是否成立之前,预取机制已经为执行y=arrary2[arrary1[x]]语句进行了某些准备,如越界取出arrary1[x]的值k(我们不知道k的值但是系统知道),以及缓存arrary2[k];后续权限检查过程中发现以x为下标访问数组arrary1越界,终止程序执行;但是此时arrary2[k]已被缓存。

psdmla1[4];

cache_sizearrary2[];

intx;

if(x < 4)

y=arrary2[arrary1[x]];

...



由于arrary2是恶意用户自己定义的数组,自然有权限访问;该恶意用户可以遍历访问arrary2中的每个元素并测量访问所需时间,由于只有arrary2[k]被缓存,访问arrary2[k]时要比访问其他元素快得多,据此就可以得到首位密码k的值。


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。