Design better password pattern for self & server farm

New photo by WuNan Lin / Google Photos

最近幫自己的工作經驗進行些總結分享

System Administration or Site Reliability Engineering 的職能可貴於資訊安全的把持與掌握

密碼之於資訊生活息息相關,所以

1. 定期更換密碼 (Password Rotation)
2. 不要使用簡易密碼 (Do not Use Weak Password)
3. 密碼分類 (EX: Server Farm or Public Services)
4. 增加密碼複雜度

以下分享一些自己常用的密碼規則與原則

1. 定期更換密碼

據我目前所知,目前沒有任何密碼可以能成功防禦任何攻擊

換句話說,根據科技與演算法的演進,任何密碼都有機率被擊破,都是時間長短的問題

所以定期更換密碼讓攻擊重洗牌是一個有益無害的好方法


2. 不要使用簡易密碼

這邊說的是懶人密碼,或是已知字典檔的清單與規則

順手將密碼加個大寫或者符號,都能有效延長密碼被擊破的時間


3. 密碼分類 (EX: Server Farm or Public Services)
Server Farm:

以 Ubuntu 設計,你沒辦法使用 Root 登入機器,但可以透過 (#sudo -i) 拿到 Root 的權限

我覺得這很重要,任何 Server Farm 的服務都不應該以 Root 權限進行,應使用各自的 User:Group 執行

EX: www, www-data, mysql, etc.

記得 User:Group nologin 也很重要,服務專用的 User:Group 專心在機器上執行運作就好,跟 Root 一樣不應該被拿來登入維運

Public Services:
(EX: Google Mail, iTunes, Forum, etc.)

外部服務大家經常密碼會這樣用,慣用的帳號,慣用的密碼,甚至在瀏覽器上記錄密碼。

Ref: Have I been pwned?

很方便沒錯,但當密碼被紀錄的同時,密碼遭外洩的機會也就隨之增加。

所以我的建議是,盡量使用 OTP (One Time Password)

當慣用密碼外洩時,至少還有 OTP (One Time Password) 的密碼強度再多一層的防護

當然,這邊的慣用密碼也是不應該出現的訊息

第四點會提到如何改善避免使用相同的慣用密碼


4. 增加密碼複雜度
Server Farm:
OTP (One Time Password) + ACL (Access Control List)

最主要的權限,密碼最好連自己都不知道,需要使用的時候密碼重設就好

我的作法會建議 使用 timestamp 作為 seed 進行處理

root@work:~# time +%s | openssl sha256
(stdin)= e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

雖然當下的 timestamp 範圍還是有可能被蒐集,並交給 openssl 處理,所以這段密碼是可逆的

我們可以針對字串直接加工,排在一起比較看得出差異

Before:
(stdin)= e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
After:
(stdin)= e3B0c44298fc1c149afbf4c8996fb9242&ae41e4649b934ca495991b7852b855

如果這段密碼沒有被記錄起來,我的習慣是,15 分鐘內我會完全沒有印象

這也是我對主要權限定義的 OTP

ACL (Access Control List) 顧名思義就是設定那些授權存取來源

常見是從 IP 管理,有蠻多節點可以介入 (EX: Network, Load Balance, Firewall, Server, etc.)

怎麼使用則見仁見智了

Public Services:

中文好用的地方在於母語與英語的鍵盤對應,產生的亂數組合就已經夠複雜了

EX: “三重本城伍” <=> “n0 tj/61p3t/6j3”

這邊已經加入符號了,數字也可以做些文章,例如最後一個字的音節加 Shift 按鍵

EX: “三重本城伍” <=> “n0 tj/61p3t/6j#”

當密碼強度出來後,養成好習慣不要一套密碼讓所有的系統使用,所以我會用作為 prefix or suffix

EX: “三重本城伍” @ Eyny <=> “n0 tj/61p3t/6j#eyny” or “eynyn0 tj/61p3t/6j#”

當每個網站的密碼都不同,相同的慣用密碼就不容易在網際網路的服務間流通共用,還能保有一定的密碼使用習慣

—-
祝大家密碼都不要被偷,系統資安強度沒漏洞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *