中间人攻击
1.什么是中间人攻击
中间人攻击是指一个攻击者使用公钥交换来拦截消息并转发它们,然后取代他自己的公钥发送给被请求的一方,原始双方表面上看来仍相互通信,攻击者从球类游戏中得到它的名字,即两个人试图相互直接仍一个球给对方,然而在这两个人中间有一个人试图去抓住这个球。在这个MITMA中入侵者使用一个表面上看起来是从服务器到客户端但看起来又像是从客户端到服务器端的应用程序。这种攻击可能被使用在简单的获得访问消息的权利,或者能使得攻击者在转发消息之前先修改消息。
MITMA有的时候也叫做消防队攻击(FBA,fire brigade attack),这个术语起源于这种救灾时排成长龙以传水救火的队列方法,即在水源和火灾之间的一个人到另一个人之间使用手工传递一桶一桶的水地方法来扑灭火灾的方法。
2.中间人攻击的方式
信息篡改
当主机A、和主机B通信时,都由主机C来为其“转发”,如图一,而A、B之间并没有真正意思上的直接通信,他们之间的信息传递同C作为中介来完成,但是A、B却不会意识到,而以为它们之间是在直接通信。这样攻击主机在中间成为了一个转发器,C可以不仅窃听A、B的通信还可以对信息进行篡改再传给对方,C便可以将恶意信息传递给A、B以达到自己的目的。
信息窃取
当A、B通信时,C不主动去为其“转发”,只是把他们的传输的数据备份,以获取用户网络的活动,包括账户、密码等敏感信息,这是被动攻击也是非常难被发现的。
实施中间人攻击时,攻击者常考虑的方式是ARP欺骗或DNS欺骗等,将会话双方的通讯流暗中改变,而这种改变对于会话双方来说是完全透明的。以常见的DNS欺骗为例,目标将其DNS请求发送到攻击者这里,然后攻击者伪造DNS响应,将正确的IP地址替换为其他IP,之后你就登陆了这个攻击者指定的IP,而攻击者早就在这个IP中安排好了一个伪造的网站如某银行网站,从而骗取用户输入他们想得到的信息,如银行账号及密码等,这可以看作一种网络钓鱼攻击的一种方式。对于个人用户来说,要防范DNS劫持应该注意不点击不明的连接、不去来历不明的网站、不要在小网站进行网上交易,最重要的一点是记清你想去网站的域名,当然,你还可以把你常去的一些涉及到机密信息提交的网站的IP地址记下来,需要时直接输入IP地址登录。
要防范MITM攻击,可以将一些机密信息进行加密后再传输,这样即使被“中间人”截取也难以破解,另外,有一些认证方式可以检测到MITM攻击。比如设备或IP异常检测:如果用户以前从未使用某个设备或IP访问系统,则系统会采取措施。还有设备或IP频率检测:如果单一的设备或IP同时访问大量的用户帐号,系统也会采取措施。更有效防范MITM攻击的方法是进行带外认证,具体过程是:系统进行实时的自动电话回叫,将二次PIN码发送至SMS(短信网关),短信网关再转发给用户,用户收到后,再将二次PIN码发送到短信网关,以确认是否是真的用户。带外认证提供了多种不同的认证方式及认证渠道,它的好处是:所有的认证过程都不会被MITM攻击者接触到。例如MITM是通过中间的假网站来截获敏感信息的,相关的“带外认证”就是指通过电话认证或短信认证等方式确认用户的真实性,而MITM攻击者却不能得到任何信息。当然,这种方式麻烦些。
许多抵御中间人攻击的技术基于以下认证技术:
公钥基础建设
在PKI方案中,主要防御中间人攻击的方案就是PKI的相互认证的机制。使用这样的机制并由应用程序验证用户,用户设备验证应用程序。但在某些流氓应用的情况下,这不是很有用,所以需要注意对流氓软件应与正规软件进行区分。
更强壮的相互认证 ,例如:
密钥(通常是高信息熵的密钥,从而更安全),或
密码(通常是低的信息熵的密钥,从而降低安全性)
延迟测试,例如使用复杂加密哈希函数进行计算以造成数十秒的延迟;如果双方通常情况下都要花费20秒来计算,并且整个通讯花费了60秒计算才到达对方,这就能表明存在第三方中间人。
第二(安全的)通道的校验
一次性密码本可以对中间人攻击免疫,这是在对一次密码本的安全性和信任上建立的。
公钥体系的完整性通常必须以某种方式得到保障,但不需要进行保密。密码和共享密钥有额外的保密需求。 公钥可以由证书颁发机构验证,这些公钥通过安全的渠道(例如,随Web浏览器或操作系统安装)分发。 公共密钥也可以经由Web在线信任进行在线验证 ,可以通过安全的途径分发公钥(例如,通过面对面的途径分发公钥)。
查看密钥交换协议以了解不同类别的使用不同密钥形式或密码以抵御中间人攻击的协议。
3.中间人攻击的示例
假设A希望与B通信。同时, C希望拦截窃会话以进行窃听并可能在某些时候传送给B一个虚假的消息。
首先,A会向B索取他的公钥。如果将他的公钥发送给A,并且此时C能够拦截到这个公钥,就可以实施中间人攻击。C发送给A一个伪造的消息,声称自己是B,并且附上了C自己的公钥(而不是B的)。
A收到公钥后相信这个公钥是B的,于是A将她的消息用C的公钥(A以为是B的)加密,并将加密后的消息回给B。C再次截获A回给B的消息,并使用C自己的私钥对消息进行解密,如果C愿意,她也可以对消息进行修改,然后C使用B原先发给A的公钥对消息再次加密。当B收到新加密后的消息时,他会相信这是从A那里发来的消息。
1、A发送给B一条消息,卻被C截获:
A “嗨,B,我是A。给我你的公钥” --> C B
2、C将这条截获的消息转送给B;此时B並無法分辨这条消息是否从真的A那里发来的:
A C “嗨,B,我是A。给我你的公钥” --> B
3. B回应A的消息,并附上了他的公钥:
A C <-- [B的公钥]-- B
4、C用自己的密钥替换了消息中B的密钥,并将消息转发给A,声称这是B的公钥:
A <-- [C的公钥]-- C B
5、A用她以为是B的公钥加密了她的消息,以为只有B才能读到它:
A “我们在公共汽车站见面!”--[使用C的公钥加密] --> C B
6、然而,由于这个消息实际上是用C的密钥加密的,所以C可以解密它,阅读它,并在愿意的时候修改它。他使用B的密钥重新加密,并将重新加密后的消息转发给B:
A C “在家等我!”--[使用B的公钥加密] --> B
7、B认为,这条消息是经由安全的传输通道从A那里传来的。
这个例子显示了A和B需要某种方法来确定他们是真正拿到了属于对方的公钥,而不是拿到来自攻击者的公钥。否则,这类攻击一般都是可行的,在原理上,可以针对任何使用公钥——密钥技术的通讯消息发起攻击。
4.中间人攻击的取证
从被怀疑是中间人攻击的链接中捕捉网络数据包并进行分析可以确定是否存在中间人攻击。 在进行网络分析并对可疑的SSL中间人攻击进行取证时,重要的分析证据包括:
远程服务器的IP地址
DNS域名解析服务器
X.509证书服务器
证书是自签名证书吗?
证书是由信任的颁发机构颁发的吗?
证书是否已被吊销?
证书最近被更改过吗?
在互联网上的其他的客户端是否也得到了相同的证书?