PoisonTap PoisonTap是一款制作成本仅为5美元的设备,它主要使用的是极客圈著名的Raspberry Pi Zero(树莓派)。只需要一根USB数据线和一张SD存储卡,我们就可以将其当作USB Armory和LAN Turtle这样的USB设备来使用了。 发布时间:2016年11月16日 源代码下载地址:https://github.com/samyk/poisontap 联系方式:@SamyKamkar // https://samy.pl 当PoisonTap(Raspberry Pi Zero + Node.js)插入一台受密码保护的计算机(锁定状态)之后,它将会进行以下操作: 1. 模拟一个USB接口的以太网设备(或Thunderbolt接口); 2. 劫持设备上的所有网络通信流量; 3. 利用Web浏览器嗅探并存储Alexa网站排名前十万的网站HTTP cookie和session(会话); 4. 将网络内部路由暴露给攻击者,攻击者将可以通过WebSocket和DNS rebinding技术远程访问目标路由; 5. 在大量网站的HTTP cache中安装持久化的Web后门; 6. 允许攻击者远程控制用户发送HTTP请求,并强行将用户cookies信息发送至攻击者所控制的服务器; 7. 所有操作可以在一台锁定的计算机中运行,无需进行解锁操作; 8. 移除PoisonTap设备之后,后门和远程访问权限仍然存在; PoisonTap可以绕过以下安全机制: 1. 计算机锁屏密码; 2. 路由表优先级和网络接口服务次序; 3. 同源策略; 4. X-Frame-Options; 5. HttpOnly Cookies; 6. SameSite cookie属性; 7. 双因素/多因素身份验证(2FA/MFA); 8. DNS Pinning; 9. 跨域资源共享(CORS) 10. HTTPS cookie的安全保护功能; 演示视频 PoisonTap的工作机制 PoisonTap可以利用目标设备或网络中现有的可信机制(例如USB、Thunderbolt、DHCP、DNS和HTTP)来引起一系列滚雪球式的连锁反应。它可以获取到目标网络的访问权,安装半持久化的恶意后门,并从目标系统中提取数据。 简而言之,PoisonTap可以执行下列操作: 网络劫持 1. 将PoisonTap插入一台处于锁定状态的计算机; 2. PoisonTap会模拟出一个以太网设备。默认配置下,Windows、macOS和Linux都可以识别以太网设备,然后自动将该设备加载为低优先级的网络设备并向其发送DHCP请求,即使计算机当前处于锁定状态。 3. PoisonTap会响应DHCP请求,然后向计算机提供一个IP地址。但是这个DHCP响应会告诉计算机整个IPv4地址空间都属于PoisonTap本地网络,而不仅仅只是其中的一部分子网,例如192.168.0.0-192.168.0.255。 -一般来说,插入其他的网络设备之后是不会影响计算机的网络通信的,因为新插入的设备优先级会比之前可信任的网络设备优先级低,因此新设备无法取代当前网络流量的网关。但是… -由于“局域网流量”的优先级高于“互联网流量”的优先级,因此路由表、网关优先级和网络接口服务顺序之类的安全机制都将会被绕过。 -PoisonTap正是利用了这种机制,因为“低优先级网络设备的子网”其优先级要高于“高优先级网络设备的网关”。 -这也就意味着,如果流量的目标地址为1.2.3.4,那么PoisonTap就可以捕获到这个流量,因为PoisonTap的本地网络的子网中包含1.2.3.4。 -正因如此,即便计算机中使用了其他高优先级的网络设备,即使网关设置正确,所有的互联网流量仍然会经过PoisonTap。 Cookie嗅探 1. 只要Web浏览器能够在后台运行,其中的一个Web页面就可以在后台通过AJAX或动态脚本/iframe标签发送HTTP请求。 2. 此时,因为所有的流量都会流经PoisonTap设备,PoisonTap就可以利用DNS欺骗来返回它自身的地址,从而让所有的HTTP请求都发送至PoisonTap的Web服务器中(Node.js)。 3. 当Web服务器接收到HTTP请求之后,PoisonTap将会返回一段可以被解析为HTML或JavaScript的响应数据,大多数浏览器都可以正确地解析这类返回数据。 4. 返回的HTML或JS将会生成很多带有“hidden”属性的iframe,每一个iframe都与Alexa排名前一百万的网站域名有关。 -网站的“X-Frame-Options”安全机制都会被绕过,因为PoisonTap现在就是HTTP服务器,它可以选择发送至客户端的HTTP header。 -此时,HTTP cookie会被浏览器发送至已被PoisonTap劫持的“公共IP地址”,而PoisonTap就可以记录下用户的cookie和身份验证信息了。 -“HttpOnly”(cookie安全保护机制)已经被绕过了。 -跨域资源共享和同源策略也已经被绕过了。 -因为我们捕捉到的是cookie,而不是用户的凭证数据,因此网站所采用的双因素或多因素身份验证也会被绕过,因为攻击者可以使用cookie来进行登录。这是因为我们并没有调用网站的登录功能,我们只是继续进行着一个已经存在的登录会话,这是不会触发双因素身份验证的。 -如果服务器使用的是HTTPS,但cookie没有设置Secure标签的话,HTTPS保护机制仍然会被绕过,而cookie数据依然会被发送至PoisonTap。 远程访问Web后门 1. 当PoisonTap生成了大量iframe之后,它会迫使浏览器加载这些iframe。此时它们就不是空白页面了,而是HTML+JavaScript的Web后门。 2. 因为PoisonTap可以对这些后门进行缓存,此时这些后门也就相当于跟网站进行了绑定。这样一来,攻击者就可以使用这些网站cookie来发起“同源”请求了。 -比如说,当http://nfl.com/PoisonTap这个iframe被加载之后,Poisontap将会接收到这个网络流量,然后通过Node服务器对这个请求进行响应。 3. 此时,用户收到的响应数据其实就是HTML与JavaScript的组合数据,它们将会生成一个持久化的WebSocket。 内部路由后门&远程访问 1. PoisonTap无法劫持的一种网络就是真实网络接口中的局域网子网。比如说,如果用户WiFi的子网为192.168.0.x,那么这个网络就不会受PoisonTap影响。但是… 2. Poisontap可以强迫主机缓存一个Web后门,尤其是当目标路由的IP地址后面加上“.ip.samy.pl”之后(例如“192.168.0.1.ip.samy.pl”),此时将会产生持久化的DNS rebinding攻击。 3. DNS pinning和DNS rebinding将会被绕过。 4. 现在后门已经被缓存至了http://192.168.0.1.ip.samy.pl/PoisonTap。这也就意味着,如果我们通过Web后门在一个iframe中远程加载http://192.168.0.1.ip.samy.pl/PoisonTap的话,我们就可以在内部路由中执行任意的AJAX GET/POST请求了。 其他功能 1. 除此之外,PoisonTap还可以修改大量常见的CDN文件,它会在正确的代码后面添加一个后门。这样一来,当目标网站加载了受感染的CDN文件之后,攻击者就可以获取到目标的远程访问权了。 2. 因为后门会被安装在每一个域中,所以攻击者就可以让浏览器来发送“同源”请求了(AJAX GET/POST)。 针对PoisonTap的缓解方案 服务器端的安全建议 如果你运行着一台Web服务器,那么你可以采用以下几种简单的方法来保证服务器的安全: 1. 使用HTTPS,至少要在处理身份验证数据的时候使用HTTPS; 2. 确保开启了cookie的Secure标签,以防止HTTPS cookie的数据发生泄漏; 3. 当你需要加载远程JavaScript资源时,使用Subresource Integrity(子资源完整性)标签。 4. 使用HSTS来防止HTTPS遭到攻击 桌面端的安全建议 1. 在你每次离开电脑时,关闭你的浏览器; 2. 禁用你的USB或Thunderbolt接口; 3. 经常清理浏览器的缓存数据; 4. 对于数据存储介质采用全盘加密,如果它具备休眠模式,则应该开启该模式; 5. 在不使用电脑时,让电脑进入休眠状态而不是睡眠状态,在休眠状态中,电脑中所有的进程都将停止工作,安全性更高 |