當前位置:
首頁 > 最新 > 前Google高級軟體工程師:我為什麼建議你把賬戶管理外包給大公司?

前Google高級軟體工程師:我為什麼建議你把賬戶管理外包給大公司?

作者介紹:Mike Hearn是一名軟體開發人員,之前是Google的高級軟體工程師和Gmail的反垃圾技術負責人,在反垃圾和登錄安全方面有著八年的工作經驗。

以下是譯文:

我在谷歌期間參與一個統一賬戶系統(特別是反劫持anti-hijacking)的項目。登錄是大多數網站的一部分,而本文也是我對如何構建安全登錄的一些思考與建議。

1.自己最好不要做登錄系統

無論你的業務是什麼,用戶身份驗證都不是你的核心能力。因為現在的登錄系統需要做很多,密碼只是開始。如果想要讓登錄安全,你最終還要添加不少登錄設置功能:

忘記密碼的恢復;

電子郵件地址驗證;

註銷賬號;

密碼暴力的強制保護;

通過簡訊,手機應用程序和硬體密鑰的雙重身份驗證;

賬戶劫持保護(當攻擊者已經知道正確的密碼並且用戶沒有修改時);

地區/語言/名稱/個人資料照片偏好;

支持移動/桌面登錄;

隨著用戶對系統體驗期望的提高且攻擊者變得愈加厲害,繼續努力變得不切實際。幸運的是,你可以將認證外包給使用OAuth(OAUTH協議為用戶資源的授權提供了一個安全的、開放而又簡易的標準)的公司。

2.使用電子郵件/電話號碼來識別用戶

登錄系統來識別用戶身份的方式莫過於兩種,用戶的電子郵箱或者電話號碼。如果你想讓用戶使用與顯示名稱不同的名稱,公司應該單獨去做這項工作,為什麼呢?

無論如何,電子郵箱是最方便的;

如果用戶名成為你服務中的一種自我展示形式,用戶會時不時地想改變它;

用戶容易忘記用戶名,而不會忘記電子郵箱/電話號碼;

優質的用戶名總是有限的;

將用戶名與顯示名稱分開將減少用戶對名稱設置的限制,如禁止使用空格。

3.根本不使用密碼

如果你還沒有準備好100%地依賴第三方ID提供商,那麼至少支持用戶不使用密碼。

因為你已經要求用戶提供他們的電子郵箱,然後你在登錄系統添加的的第一個功能將會是密碼恢復,那麼這就可以通過電子郵件向用戶發送可點擊的鏈接來工作。因此,任何可以閱讀用戶電子郵件的人都可以以任何方式登錄,而你自己的站點密碼不會增加額外的安全性。

可能會有人說,這樣會缺少密碼輸入框,用戶會感到困惑。但現在Google登錄就是要求用戶提供他們的電子郵件地址,因此可以看出這不太可能讓用戶感到困惑,而且其中的好處是巨大的。

這種方法還需要考慮的問題是:一些用戶有電話號碼,但沒有電子郵箱。所以,你最終需要支持那些只能通過手機接收代碼來登錄的用戶。這樣的賬戶沒有密碼,所以如果你假定所有的用戶都有密碼,那麼你需要添加許多安全敏感的代碼路徑的特殊情況,然而這就很容易導致致命的錯誤。

4.不要使用隱私問題

如果你使用了密碼,但是至少不要讓用戶使用隱私的問題和答案來恢復忘記密碼;

隱私問題的答案往往是簡單的猜測,用戶會發現這些問題的答案不只是他們知道;

預先提供的問題會使猜測問題變得更簡單;

預先提供的問題通常具有可猜測性(例如,「你在什麼地方上的高中?」);

有很多高調的黑客,通過濫用密碼恢複流來工作。

這裡有一些例子:

問:最喜歡的食物?

答:披薩。

答案總是披薩,你只需猜一次就可以猜中約20%的說英語的賬戶。只要10次猜測,你可以猜中三分之一以上有這個問題的所有說英語的賬戶。對於韓國賬戶,你可以在10次猜中所有賬戶的43%。

問:我結婚的日期?答:星期四。

一個自定義的問題,但也是致命的缺陷。攻擊者只需要猜測5次(這樣太少以至於不能被視為暴力強制嘗試。)

問:我出生在哪個城市?

答:首爾。

在一些國家,幾乎每個人都住在少數幾個大城市。觀察ID驗證用戶界面所使用的語言可以大大縮小可能城市的範圍。對於韓國賬戶,你只需要10次猜測即可猜中使用此問題40%的賬戶。

毫無疑問,專業賬戶系統並不都是使用隱私問題來允許用戶恢復賬戶,這僅僅是其中的一個例子。用戶不會在小於2%的機會下寫一些足夠複雜的東西來得到恢復密碼的權力。這就是為什麼Google將Q / As逐步轉向支持簡訊(SMS)恢復的原因。雖然基於SMS的恢復有其自身的問題,但它仍然比隱私問題好很多。

5.避免使用驗證碼(CAPTCHA)

驗證碼是許多登錄表單的常用功能,但是目前驗證碼的價值非常低。

需要了解是,驗證碼只能對自動攻擊施加非常基本的限制,而不會保護你的賬戶系統免受批量註冊。除了賬戶安全,還需要解決Google註冊濫用的問題。我們經常看到垃圾郵件發送者解決數千萬個我們最難破解的驗證碼,因為有一些專業的驗證碼破解公司,比如DeathByCaptcha,他們是將OCR和人工解決結合起來。普通驗證碼還有一個問題就是會阻止盲人註冊,而基於語音識別的驗證碼必需得由計算機解決,無法由人工解決。

驗證碼對阻止暴力的強制嘗試密碼是最有用的,有的人可能需要數十萬次或數百萬次針對賬戶的嘗試才能找到正確的密碼。為了防止用戶這種無盡的失敗嘗試的簡單方法就是放棄驗證碼。而且即使簡單的驗證碼也足以將一個小的延遲投入到bot循環中。

驗證碼在停止批量賬戶註冊方面的用處不大。構建系統來檢測和阻止這是一件困難的事,要了解它有多困難,請訪問buyaccs.com,並觀察地下賬戶賣家收取的巨大價格變化。較高的價格有更好的防禦系統,除非你是五大網站,否則你將無法戰勝在賬戶註冊安全方面所做的工作,這也是將登錄系統外包給專門的公司的另一個理由。

如果你仍想使用驗證碼,請使用重複驗證碼並確保你的驗證碼已足以防禦反覆攻擊。不要試圖使用自己做的或你在GitHub上找到的用具包。這些驗證碼總是會被現在的OCR解決,且除了降低客戶註冊的成功率外,什麼做不了。

PS:有人工智慧加持的網易雲易盾驗證碼服務可以有效解決這個問題,具體可以參閱這篇文章:應對羊毛黨的老手段不管用了,但有些公司依然有辦法,他們是怎麼做的?

6.外包雙重認證(2-factor authentication)

目前,雙重身份驗證是一項非常普遍的功能。而且做好這個很難,你不要想著自己實現它。

SMS是不可靠的,特別是某些國家。恢復代碼偶爾不會顯示出來。因此,你最終會希望通過語音合成實現電話呼叫,因為電話呼叫更可靠,所以現在你需要多語言語音合成引擎;

人們無法一直使用他們的電話號碼。如果你依賴電子郵件地址,你的密碼恢複流程可能非常容易。但一旦引入了實用的2FA,密碼恢復就成為系統中最薄弱的一點。因為如果你不升級它,攻擊者就會一直纏著它;

2FA可能會被攻擊者濫用,攻擊者會將其添加到被他們盜用或被黑客入侵的賬戶中。這是為了阻止真正的用戶找回這些賬戶;

電話號碼很容易移植攻擊,因此就是要求用戶設置移動應用程序或安全密鑰。實施這些很麻煩,而且這也不能萬無一失,並且你最終還需要一些用戶支持這個設置的實現;

正如你所想的那樣,2FA增加了大量的手動客戶支持工作,那是因為你不會再讓用戶使用電子郵件或基於私密問題的密碼恢復。

其中一些問題是根本性的,但其中大部分問題已經被大公司解決了,他們將免費為你代付手機費用和客戶支持人員!不過,如果你不想使用它們,這裡也有些初創公司會為你解決2FA的小部分難題。

7.不要強制更改密碼

不要因為密碼使用有些久遠就要求用戶更改密碼。

有些用戶不會完成整個過程,然後你就會流失用戶;

有些用戶會比你更聰明,使用一些技巧比如改變密碼(一次、兩次、三次),然後立即將密碼更改回原來的密碼,這意味著你需要存儲最近密碼的歷史,以防止這種行為;

無論如何它並沒有提高安全性。

8.記得註銷

在未成熟的賬戶系統中,註銷錯誤非常普遍。聽起來很簡單,但最常用做法是有問題的。

簡單地刪除會話cookie對於用戶來說很方便,但意味著你無法從XSS恢復。一旦找到XSS,你希望被盜的會話cookie失效,但如果退出只是「請求瀏覽器刪除cookie」,那麼你是無法做到這一點的;

為cookie添加時間戳,然後設置「最後註銷時間」需要每個操作都檢查賬戶資料庫以發現用戶的會話是否失效。此外,這樣做也意味著需要用戶退出瀏覽器或設備,然而這並不是用戶所期望的。

做到這一點的正確方法是保留使用內存緩存的失效會話cookie列表。但是對於大多數公司來說,有一種成本較低且足夠好的方法:讓用戶的註銷鏈接僅僅是清除會話cookie的一種方式,而不會讓會話cookie失效,但會每5分鐘左右自動更換一次。更換失效會話cookie的行為會查詢資料庫以查看管理員是否強制註銷。如果用戶正在呈現失效的cookie,則他們需要重新登錄。這樣在cookie被盜後進行清理是相對罕見的事件。

9.將賬戶電子郵件與營銷郵件分開

發送密碼恢復鏈接,註冊驗證等來自你公司的主要電子郵件伺服器。不幸的是,貴公司的一些人正試圖通過這個向用戶發送他們不想要的商業郵件來與用戶建立「關係」。

即使用戶同意在賬戶註冊期間收到這些郵件,但是他們中的許多人不希望一直這樣,然後有些人會通過將其設置為垃圾郵件來解決此問題。

不幸的是,這種完全正常的行為將降低電子郵件域的聲譽,然後你的賬戶系統中的郵件可能會開始進入用戶的垃圾郵件文件夾。這就是為什麼我們都看到了註冊或密碼恢複流程中的警告,要求我們檢查我們的垃圾郵件文件夾。

解決這個問題的一種方法是購買一個單獨的頂級域名來發送你的賬戶郵件並確保配置DKIM。但是一些用戶會注意到不匹配,並將你的電子郵件報告為網路釣魚。最好的解決方案是將你的營銷郵件從不同的DKIM領域發送出去,但這可能會涉及到與負責產品的同事進行競爭。

10.保持密碼資料庫的安全

如果你的資料庫裡面有密碼,你就會有一個資料庫攻擊者。他們不直接關心你的公司,他們只是想要密碼,以便他們可以嘗試更高價值的目標。然而,數據泄露是令人尷尬,即使對客戶的直接影響較低,也可能帶來很大的代價。OAuth令牌資料庫對攻擊者而言價值遠低於此值,因此受攻擊的可能性要小得多。

結論

關於賬戶系統的信息還有很多,這個任務看起來很大。這就是為什麼我一直建議把你的賬戶管理外包給大的公司。擺弄驗證碼不是你的核心業務;編寫「註銷」設計文檔不是你的核心業務;診斷你為什麼會流失忘記密碼的用戶不是你的核心業務;診斷為什麼簡訊傳送到對方不可靠不是你的核心業務。你在這些東西上浪費精力與費用時,你的對手們正在核心業務上下功夫。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 網易易盾 的精彩文章:

AI網路安全實戰:生成對抗網路

TAG:網易易盾 |