應用安全思維之如何保護密碼才安全
近幾年,國內一些企業的后臺用戶信息被黑客公布,相信大家都有耳聞,這只是公布了的,沒公布的呢?還有多少,你想想諸多中國互聯網企業保存了多少用戶的數據,它們往往都是黑客們的“余糧”,這些事件導致的損失咱就不聳人聽聞了,在類似事件當中,有諸多的用戶隱私信息,其中最敏感的莫過于密碼本身了,今天就講講對于企業應用來說,如何保護用戶的密碼才安全。
使用“安全思維”一詞,源于我認為這些原則不需要背誦,而是你應用安全思維形成后的信手拈來。
密碼保護的原則:
1. 永遠不要在數據庫、會話及本文當中保存明碼密碼,中間臨時的變量存儲用完后要及時清空
2. 在正式的產品線上運行的產品,任何人不應該有渠道獲取到用戶密碼的明碼,包括但不限于產品開發人員、產品維運人員及技術支持人員
3. 用戶密碼只采用sha2-256或者更高版本更多數位的算法進行哈希,而不是用諸如AES算法進行加密
4. 任何用戶的密碼在哈希時必需包括但不限于:1)可配置長串Key 2)用戶設置密碼時動態隨機生成隨機串 3)用戶密碼本身
5. 永遠不要以任何形式log用戶的密碼,無論你是想做問題的調試還是用戶信息的收集,密碼的明碼都是不能碰的
6. 不要認為以上1-5 block你的業務邏輯實現,那是你的實現方法不對,以上的原則是正確的
7. 企業應用系統必需嚴格的log任何人的對用戶敏感信息的操作
可能有人會問“帳戶泄漏不是因為以下可能的原因導致的嗎“?
1)應用層的漏洞,諸如:SQL Injection導致非授權數據被查詢出來
2) HTTP 伺服器(e.g. Apache\Tomcat...)實現時用的程序語言導致緩沖區溢出、業務邏輯導致的緩沖區溢出等導致遠程代碼注入與執行從而進入后臺直接擰取數據庫內容
3)網絡操作系統實現時用的程序語言導致緩沖區溢出、業務邏輯導致的緩沖區溢出等導致遠程代碼注入與執行從而進入后臺直接擰取數據庫內容
4)數據庫伺服器(e.g. MySql)實現時用的程序語言導致緩沖區溢出、業務邏輯導致的緩沖區溢出等導致遠程代碼注入與執行從而進入后臺直接擰取數據庫內容
......
是的,以上往往是爆庫的直接原因,但是在這里我建議您想想這三個概念:攻擊者、受害者、責任者,對于以上的原因,只有原因1)本身的責任者是產品的主人,而各種服務端軟件提供者、操作系統往往并不被企業直接進行代碼級維護,你是可以通過安全設置與配置進行安全設置,但是它的體系何止你了解的那么一丁點兒? 對于做產品應用的企業來說,最佳的原則是:即便一整套系統被人搬走了,我也能最大限度的保護用戶的隱私及敏感信息!
OK,我們繼續解讀以上7原則。
原則1. 這一條很容易理解,明碼意味著總有人有渠道去獲取,這個人現在可能是朋友,將來也可能是敵人,所以有明碼密碼的地方就是孽源,呵呵
原則2. 如剛才所說,哈希后的密碼也不應該通過簡單的反向算法就可以恢復到原文,如果這樣,對于企業的開發人員來說等于沒有加密,還是那句話:在保護用戶敏感信息上,沒有可以相信的人,只有正確的方法。
原則3. 我一直在避免說“加密”二字,這兩個字容易讓人聯想到能加就能解的事兒,所以容易習慣性的使用加密算法對密碼進行加密存儲,這樣產品的實現者比較容易通過逆向的方法獲取到用戶密碼
原則4. 可配置的Key可以有效的避免產品的開發與測試人員用同樣的方法在正式產品線上通過逆向的方式破解用戶敏感信息,隨機Key的目的是讓正式產品線上的維護者也較難通過逆向的方法來破解用戶信息,更重要的是避免在用戶信息表里具有相同密碼的用戶們擁有相同的哈希值! 具體如何實現嘛,辦法肯定有,需要智慧喲~_~
原則5. 許多公司的通病,就是開發與測試人員為了自己的方便常把諸多信息寫到LOG里,以方便自己的調試與問題跟蹤,有了這個口子,一切安全措施都變成徒勞了,千萬不要這么做!
原則6. 說這一條就是為了堵住具體實現人員的嘴,呵呵,沒有實現不了的,只有你沒想到的。原則有了,實現方法一定會有,沒有直線的方法,可以有曲線的方法,總之一定有。具體產品具體業務邏輯具體對待,沒有統一的方法,能統一的,我就告訴你了~_~,但是整體思想是一致的。
原則7. 記錄企業產品的管理員、維運人員、技術支持人員的敏感操作(包括但不限于),對于一些重大安全事件的追蹤相當有意義,最終有一種“鎖”機制,如果敏感log不能寫成功,那操作就不能執行,敏感操作的log最好放在相對獨立的服務器上,以防止被毀尸滅跡~_~。本人就有一個大膽的猜想:諸多企業的爆庫事件,至少有一種可能就是來自企業內部,而并非一定來自“真正意義上的黑客”,大家千萬別攻擊我,我只是說至少有一種可能。
做應用安全的過程就如你從剛接觸自行車到最終可以熟練的駕馭的過程。當你首次接觸自行車的時候,通常有一種困惑就是:兩個輪子為什么不會倒?甚至因此質疑自己到底能不能學會。當你學會了以后,你就不需要再考慮它倒不倒的事兒了,任何一個要倒的傾向,你都會在不經意間化險為夷,這就是你已經領會它的神了,植入了你的潛意識。應用安全的思維也是這么形成的,只是過程要漫長的多。我們學任何知識,最終能終身受益的往往不是知識本身,而是它的思維方式,比如:數學讓你有推理的思維習慣,歷史讓你有反思的思維習慣,哲學讓你有透過現象看本質的思維習慣等等,大學畢業數年了,如果你不從事相關職業,讓你去考試,你能考幾分?但這并不表明你學的東西都忘記了,其實最有價值的東西還保存著呢,那就是:思維方式。應用安全也一樣。祝您早日駕馭應用安全!