在 Web 应用程序中,通常有两个参与者:客户端和服务器。第三个大多数时候不被注意的实体是通信渠道。该通道可以是有线连接或无线连接。可以有一台或多台服务器以最有效的方式将您的请求转发到目标服务器。这些被称为代理服务器。
当网络中有不需要的代理拦截和修改请求/响应时,这个代理被称为中间人。据说该网络受到中间人攻击。有趣的一点在于,这个流氓代理经常被另一个端点误解为通信中的合法端点。 (它作为客户端的服务器和服务器的客户端)。
例如,假设您已连接到 WiFi 网络并与您的银行进行交易。攻击者也连接到同一个 WiFi。攻击者执行以下操作:
- 攻击者在网络中发送恶意 ARP 数据包,将接入点的 IP 地址映射到攻击者设备的 MAC 地址。
- 网络中连接的每个设备都会缓存流氓数据包中包含的条目。
- 您的设备使用 ARP 将发往银行 Web 服务器的数据包发送到接入点(这是网络的默认网关)。
- 数据包被发送到攻击者的机器。
- 攻击者现在可以在转发数据包之前读取和修改包含在数据包中的请求。
这样,攻击者就可以适当地位于您和您的银行服务器之间。攻击者可以看到您发送到服务器的每一位敏感数据,包括您的登录密码。 ARP 缓存中毒是执行 MITM 攻击的众多方法之一;其他方式是——
- DNS 欺骗。
- IP 欺骗。
- 设置恶意 WiFi AP。
- SSL 欺骗。等等。
使用 SSL 可以防止这些攻击成功。由于数据是加密的,只有合法的端点才有解密它的密钥,攻击者即使可以访问数据,也能从数据中做很少的事情。
(SSL 只有在正确设置的情况下才有用,也有一些方法可以绕过这种保护机制,但它们很难执行)。但是,如果用户与之交互的 Web 应用程序不使用称为 nonce 的东西,攻击者仍然可以造成很多损害。攻击者可以捕获整个会话的加密请求,然后小心地重新发送用于登录的请求。这样攻击者就可以在不知道密码的情况下访问您的帐户。使用 nonce 可以防止这种“重放攻击”。 nonce 是服务器在登录前发送给客户端的唯一编号。它与用户名和密码一起提交,并在一次使用后失效。
可以采取一些措施来避免成为 MITM和相关攻击的受害者。一个应该:
- 始终使用受信任的网络和设备登录敏感网站。
- 避免连接到打开(未加密)的 WiFi。
- 保护网络免受不必要的外部访问。
- 如果您必须使用公共计算机,请检查其浏览器是否存在任何恶意证书,并确保不存在。也检查主机的文件。
- 当连接到公共网络或使用公共计算机时,对您要访问的网站执行跟踪路由,并查看数据包所采用的路由是否有任何可疑之处。例如,数据包到达的 IP 与最后一个八位字节为 1 的 IP(网关的 IP)不同。