众所周知,某些信息安全事件其实并不高明,如icould艳照门黑客通过暴力破解攻击不断尝试登录用户的账号名和密码,最终获取好莱坞明星的iCloud账号。什么是暴力破解攻击?怎样检测暴力破解攻击以及怎样防护呢?
一、什么是暴力破解攻击?
暴力破解攻击是指攻击者通过系统地组合所有可能性(例如登录时用到的账户名、密码),尝试所有的可能性破解用户的账户名、密码等敏感信息。攻击者会经常使用自动化脚本组合出正确的用户名和密码。
对防御者而言,给攻击者留的时间越长其组合出正确的用户名和密码的可能性就越大。这就是为什么时间在检测暴力破解攻击时是如此的重要了。
二、怎样检测暴力破解攻击?
暴力破解攻击是通过巨大的尝试次数获得一定成功率的的。因此在web(应用程序)日志上,你会经常发现有很多的登录失败条目,而且这些条目的IP地址通常还是同个IP地址。有时你又会发现不同的IP地址会使用同一个账户、不同的密码进行登录。
大量的暴力破解请求会导致服务器日志中出现大量异常记录,从中你会发现一些奇怪的进站前链接(referring urls),比如:
http://user:password@website.com/login.html。
有时,攻击者会用不同的用户名和密码频繁的进行登录尝试,这就给主机入侵检测系统或者记录关联系统一个检测到他们入侵的好机会。当然这里头会有一些误报,需要我们排除掉。例如,同一个IP地址用同一个密码重复登录同一个账户,这种情况可能只是一个还未更新密码或者未获得正确认证的Web/移动应用程序而已,应排除掉这种干扰因素。
三、怎样防御暴力破解攻击?
尽管暴力破解攻击并不是很复杂的攻击类型,但是如果你不能有效的监控流量和分析的话,它还是会有机可乘的。因此,你需要对用户请求的数据做分析,排除来自用户的正常访问并根据优先级排列出最严重最紧急的威胁,然后做出响应。
当然,更令人讨厌的是某些一直存在的固有漏洞,比如最近爆出的全系列CPU漏洞
四、这次的漏洞是啥?
我们先从机制说起来。这次曝光的漏洞一组三个,基本原理都是一样的。
1. 缓存(Cache)
CPU执行指令,最大的速度瓶颈不在计算,而在于内存访问。
为了降低内存访问需要的时间,现代CPU全部都设计了缓存。
通俗地说,就是把曾经读过的内存,备一份在速度更快的缓存里。
下次再读同一块数据的时候就可以直接从缓存里取,就会更快。
2. 乱序执行(OOO)
因为有访存瓶颈,指令之间的执行时间差距可能非常大。
一条普通的计算指令1拍结束。一条访存指令如果缓存命中,需要10到100拍;如果缓存不命中,到内存里取,需要上万拍甚至更多。
如果上一条指令被访存卡了十万拍,后面其他的指令只能等着吗?不可能的,所以现代CPU全部都设计了乱序执行的特性。
把指令比做人的话,顺序执行就是排队入场,先来后到,一直保持同一个顺序。前边的人停下了,后边所有人都必须跟着停。
乱序执行就好象逛超市,大家排着队进场每人发个编号,之后自由乱逛,到结账的地方如果你前边编号的还有人没出去,你就在出口坐着等会儿,最终实现大家出去的时候仍然按进入的顺序排成一队。
坐着等前边人回来的那个地方,你可以想象有几排椅子的等候区,有个保安看着给大家排号,这个机构学名叫做ROB。
3. 异常
计算机只有一块内存,这块内存上既存着某个不知名应用的运行信息,也存着你的支付宝密码。
怎么样防止不知名小程序看到你的支付宝密码呢?当程序读内存的时候,CPU会帮忙检查读的地址是否属于这个程序。如果不属于,就是非法访问,CPU会在这条指令上产生一个异常,报操作系统枪毙。
操作系统为了处理异常,有一个要求:如果出现异常,那么异常指令之前的所有指令都已经执行完,异常指令之后的所有指令都尚未执行。
但是我们已经乱序执行了啊,怎么办?所以ROB承担起这个责任。
指令乱序执行的时候,要修改什么东西都暂且记着,不真正修改。只有在从ROB里排队出去的时候,才真正提交修改,维持指令之间的顺序关系。
如果一条指令产生了异常,那么它会带着异常来到ROB排队。ROB按顺序把之前的正常指令全部提交了,看到这条指令带有异常之后就封锁出口,异常指令和其后其他指令会被抛弃掉,不予提交。
4. 用现实的例子来解释的话
- kfc里卖的有薯条、鸡块、汉堡、可乐。
- 李小璐去kfc点了个汉堡,吃完走了。
- 狗仔队a狗仔排在李小璐后面的后面,和点餐小姐姐说:我要点和李小璐一样的。
- 点餐小姐姐说,不好意思您前面还有一位,稍等下,但是后厨听到了,麻溜的做了个汉堡。
- 轮到a狗仔点餐了,点餐小姐姐说。不能这样点哦,侵犯人家隐私了,保安把这个狗仔滚粗去!
- b狗仔排在a狗仔后面,给小姐姐说:我薯条、鸡块、汉堡、可乐各点一份,饿死了饿死了,哪个快先把哪个给我!
- b狗仔先拿到了“汉堡”!
- b狗仔知道了李小璐今天在kfc买了个汉堡!
一定要提防!