最近作者發現了一個針對LastPass的釣魚攻擊,其允許攻擊者竊取一個LastPass用戶的郵箱、密碼甚至二次驗證的驗證碼,這就使得攻擊者可以完全獲取到用戶存儲在LastPass上的密碼和文檔。
這個對LastPass的釣魚攻擊被命名為“LostPass”,其利用代碼可以在 Github上面找到。
LostPass之所以能成功攻擊。是因為LastPass在瀏覽器內顯示的信息都可以被攻擊者所偽造。而用戶是無法找出偽造的LostPass消息和真正的有什么不同,因為它們本來就沒有區別——它們擁有“像素級相似”的通知和登錄界面。
像素級釣魚
幾個月前,LastPass 在我的瀏覽器中推送了一個消息,表示我的會話已經過期需要重新登錄。而我在過去的幾小時內都沒有使用LastPass也沒有做過任何能導致賬號登出的操作。當我點擊消息通知時,我發現了一些東西:它顯示到了瀏覽器窗口內。
任何惡意網站都可以發出這樣的通知。因為 LastPass 讓用戶習慣瀏覽器窗口內彈出的通知,這使得用戶對此毫無防范——LastPass 登錄界面和二次驗證窗口都是顯示在瀏覽器內的。
由于LastPass 有一個可以遠程訪問的 API,這時一種攻擊思路就出現在了我的腦海中。
攻擊
下面是 LostPass 的攻擊步驟。
訪問惡意網站
讓目標用戶訪問看起來正規的惡意網站或者一個存在 XSS 漏洞的正規網站,讓他訪問到我們部署的 lostpass.js。不同于別的釣魚攻擊,用戶不會對正規網站產生太大警惕,也許他們訪問的就是一段搞笑的視頻或圖片在或者其他有趣的東西。
檢測LastPass并推送通知
如果用戶安裝有 LastPass 則推送登錄過期的通知并注銷用戶的 LastPass。LastPass 存在一個注銷賬戶的 CSRF 漏洞,利用這個漏洞任何網站任何用戶都可以注銷 LastPass。這樣在用戶看來他們的會話真的是過期需要重新登錄了。
向用戶展示登錄界面
一旦用戶點擊了偽造的通知,就將會跳轉到一個攻擊者控制的偽造的登錄界面。下圖是Chrome中顯示的登錄界面:
注意域名"chrome-extension.pw"。這與 Chrome 真實的擴展協議 "chrome-extension"非常相似。這里有一個關于這個問題的 討論。
獲取用戶憑證
用戶隨后會輸入自己的密碼,而這些密碼會發送到攻擊者的服務器上。隨后攻擊者的服務器會通過調用 LastPass 的 API 驗證接收到的憑證是否正確。如果 API 提示需要進行二次驗證,那么會在推送通知用戶。
如果用戶輸入的用戶名和密碼不正確,那么會被定位回到惡意網站,但這回 LossPass 的通知會提示“密碼無效”。
如果需要進行二次驗證,會定位到如下頁面:
下載用戶數據
一旦攻擊者確認了正確的用戶名和密碼(還有二次驗證的口令),會通過 LastPass 的 API 從服務器上下載受害者所有的信息。同樣攻擊者也可以通過緊急聯絡功能安裝一個后門,禁用二次驗證功能,將攻擊者的服務器加入“信任設備”中,或其他任何他們想做的事情。
啟示
LossPass 的攻擊步驟是完全鏡像 LastPass 正常步驟的。下面說明為什么攻擊會如此有效:
1. 很多人對于釣魚的反應是“培訓好用戶意識”,因為是他們自己犯錯被釣魚的。但在這里不是很有用,因為 LostPass 和 LastPass 僅有細微的很能察覺的區別;
2. LassPass 的登錄過程非常復雜也比較混亂。有時它會要求用戶從瀏覽器進行登錄,有時又會要求用戶從彈出的窗口登錄;
3. 很容易定位到 LastPass 通知和登錄頁面的 HTML 和 CSS 文件;
4. 因為也會對二次驗證進行釣魚,所以二次驗證也沒有任何幫助。
具體代碼請讀者自己到Github上面查看吧。
*原文地址:seancassidy,FB小編xiaix編譯,轉自須注明來自FreeBuf黑客與極客(FreeBuf.COM)