在Amazon EC2 Linux主機上保障SSH安全,ec2ssh
曾經在初創企業當中工作過的朋友一定很清楚,建立客戶信任是業務發展當中的關鍵性一步。時至今日,使用者對於技術及安全性的理解越來越深入,他們希望供應商能夠為資料提供嚴格保護,同時確保服務堅實可靠。除此之外,客戶的心態往往反覆無常,而且通常會在發現現有方案存在安全隱患時毫不猶豫地投向競爭者的懷抱。為了避免這種情況的發生,大家採取的第一項舉措應當是從基於AWS的商務程序下手,鎖定指向Amazon EC2——也就是負責運行商務應用程式的AWS服務——的訪問活動。
AWS共用安全模式與Amazon EC2
AWS共用安全模式的一大關鍵性組成部分在於其以安全方式訪問Amazon EC2執行個體的能力。在Linux伺服器當中,遠端存取通常意味著通過SSH協議建立一條通往目標伺服器的串連。其驗證機制主要分為兩種,要麼要求使用者提供使用者名稱與密碼組合,要麼提供一套指向伺服器中公用密鑰以實現驗證的私人密鑰。在預設情況下,大部分Amazon EC2執行個體都會使用後種方式實現使用者驗證:當大家第一次啟動自己的EC2執行個體時,系統會要求各位以可選項目方式為其分配一條金鑰組。除了使用者名稱之外,AWS還會為該金鑰組分配一個PEM檔案,旨在同伺服器進行驗證並開啟一個SSH會話。
在今天的文章中,我們將共同探討與通過SSH訪問運行在AmazonEC2之上的Linux伺服器相關的安全議題。此外,我們還將深入瞭解多項樣本,看看如何利用以下兩套解決方案將雙因素驗證引入SSH會話當中:即TOTP配合GoogleAuthenticator與AWS Virtual MFA,以及來自Duo Security公司的Duo UNIX。
利用雙因素驗證機制降低安全風險
在啟用互動式登入機制的情況下,我們所操作的伺服器始終面臨著一定程度的風險——當然,具體程度有高有低。只要我們能夠充分保護好自己的PEM檔案,而EC2執行個體當中的SSH又得到了正確設定,那麼基於密鑰的驗證機制在安全性方面往往優於簡單的使用者名稱/密碼機制——這主要是由於前者更難受到暴力破解型攻擊的影響。遺憾的是,PEM檔案——比如密碼——能夠進行共用,而且有時會不慎泄露。考慮到這一點,加入一套以雙因素驗證為典型代表的額外安全層就顯得尤為重要。無論是使用使用者名稱/密鑰組合還是公用密鑰作為首選驗證因素,額外安全層的存在都能讓業務體系的保護水平更上一層樓。
雙因素驗證,或者說多因素驗證(簡稱MFA),要求使用者提供多種身份證明以實現對資源的訪問。舉例來說,大家可以對指向AWS管理主控台的訪問進行配置,要求使用者在輸入使用者名稱及密碼之外,同時提供來自硬體或者軟體MFA裝置的正確驗證碼。這類方案目前亦被越來越多地應用於為伺服器及工作站添加額外安全層。在此類方案中,除了提供私人密鑰或者使用者名稱/密碼之外,使用者還必須輸入來自MFA裝置的驗證碼,而後會話才會在作業系統之上得到開啟。
我們在現場親眼見證的用例之一就是將雙因素驗證引入到“跳轉”或者“堡壘”主機之上以提升EC2執行個體的安全水平,從而保證那些直接指向或者被重新置放至面向內部服務的SSH連接埠受到理想保護。另一類常見用例則是利用雙因素驗證對EC2執行個體進行配置,同時通過鎖定策略將其分配至AWS身份與訪問管理(簡稱AWS IAM)角色。在此基礎之上,支援人員與營運團隊能夠安全地接入這些EC2執行個體並使用AWS CLI及SDK,而不必再提供其它認證憑證。
限時單次密碼(簡稱TOTP)
GoogleAuthenticator能夠利用RFC 6238實現TOTP演算法。當大家將GoogleAuthenticator應用程式安裝在自己的Amazon EC2執行個體當中時,AWS會自動產生一條密鑰。這一密鑰隨後會根據大家的具體選擇並共用至第二台裝置當中,例如通過運行在智能手機之上的某款應用程式。當我們利用該行動裝置 App程式掃描由GoogleAuthenticator所產生的二維碼時,密鑰的交換過程也就藉此完成了。
一旦密鑰被儲存在行動裝置 App當中,它會利用加密散列功能將自身與目前時間戳加以結合,從而產生單次密碼(即OTP)。這條OTP正是第二項驗證因素,大家會在成功輸入使用者名稱/密碼或者提供PEM檔案之後被要求將其輸入。OTP內容很難被破解,這是因為它會隨著時間推移而自動變更——這一時間周期通常為30秒——而且由大家大多數情況下隨身攜帶著的行動裝置(例如智能手機)負責產生。
大家可以從一系列TOTP相容行動裝置 App當中作出自己的選擇,利用它來儲存TOTP密鑰並產生OTP。在今天的文章中,我們將展示如何利用GoogleAuthenticator與AWS Virtual MFA來實現這一目標:前者運行在伺服器端,後者則作為TOTP相容行動裝置 App負責產生驗證所需的OTP。當然,其它高人氣TOTP相容行動裝置 App還包括GoogleAuthenticator的官方行動裝置 App、Duo Security的行動裝置 AppDuo Mobile以及Authy等等。
如何利用GoogleAuthenticator與AWS VirtualMFA為Amazon Linux環境實現雙因素驗證
1. 在我們的手機上安裝AWS Virtual MFA或者其它任何TOTP相容性行動裝置 App程式
2. 啟用一項Amazon Linux EC2執行個體
3. 安裝GoogleAuthenticator:
sudo yuminstall google-authenticator –y
4. 啟用GoogleAuthenticator
[ec2-user@ip-10–0–1–205~]$ google-authenticator
Do you want authentication tokens to be time-based (y/n) y
5. 在提示“Do you want authentication tokens tobe time-based (y/n)”時,按下y鍵配置系統以使用基於時間的驗證標記。
6. 開啟由GoogleAuthenticator所產生的URL,以顯示我們可以利用行動裝置 App程式掃描並下載對應金鑰產製原料的二維碼。例如:
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/ec2-user@ip-10-0-1-205%3Fsecret%12345ABCDE
這時我們的新密鑰為: 12345ABCDE
7.下面說說其它選項。由於Amazon EC2執行個體在預設情況下會利用可靠的NTP伺服器進行時間同步,因此我們不需要另行調整時間差。多次使用與頻率限制則屬於可選方案;當然,我建議大家保持其啟用,因為這樣能夠進一步提升安全效果。
8. 在預設情況下,Amazon Linux執行個體上的SSH會利用可插拔驗證模組(簡稱PAM)實現驗證,因此我們需要配置該sshd PAM模組才能正常使用GoogleAuthenticator。大家須在GoogleAuthenticator的執行個體當中編輯/etc/pam.d/sshd,找到“auth substack password-auth”行並添加以下命令以指定要使用的GoogleAuthenticator PAM模組:
auth required pam_sepermit.so
auth required pam_google_authenticator.so
# auth substack password-auth
9. 我們還需要確保其它驗證類型同樣調用GoogleAuthenticator,例如“su”與“login”。按照以下命令編輯/etc/pam.d/system-auth:
authrequired pam_env.so
# auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_unix.so nullok try_first_pass
auth sufficient pam_google_authenticator.so
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
10. 現在要做的是編輯SSH設定檔,這樣GoogleAuthenticator就會作為第二種驗證因素被正確調用。首先,將以下選項變更為“yes”:
ChallengeResponseAuthenticationyes
11. 接下來,在檔案最末處將以下內容添加為新的一行:
AuthenticationMethodspublickey,keyboard-interactive
12. 最後,在伺服器上重新啟動該SSH進程。為了安全起見,我們可以開始一個新的終端視窗以保證當前串連不被關閉,從而測試一切是否按照預期進行:
sudo/etc/init.d/sshd restart
現在大家的Amazon Linux EC2執行個體已經得到了嚴格保護,GoogleAuthenticator開始成為SSH登入機制中的雙因素驗證方案。
Duo Security
隨著初創企業的不斷髮展,在眾多Amazon EC2執行個體之上對TOTP進行逐個配置也會逐漸成為一種負擔。微軟Active Directory與Windows Server使用者可能已經對RADIUS伺服器非常熟悉,亦瞭解如何利用它們實現並管理雙因素驗證機制。雖然這種方式同樣也能被擴充到Linux伺服器之上,但其實現難度極高而且很難被普遍推廣到其它需要使用雙因素驗證方案的系統之上。
有鑒於此,以Duo Mobile為代表的解決方案自然應運而生。DuoMobile是一款由Duo Security公司開發的移動驗證應用。順帶一提,Duo Security本身也是AWS服務支撐之下的初創企業,主要負責為多種系統平台提供雙因素驗證方案,其中包括VPN、UNIX裝置以及定製化軟體應用等等。這套產品允許企業使用者將自己的MFA管理體系統一起來,並針對多種系統提供報告,具體包括VPN、OWA、SSH、RDP、SSO、AWS API以及AWS管理主控台等等。Duo Mobile還支援多種不同驗證方法,例如簡訊驗證、通過Duo行動裝置 App進行通知推送、撥打電話或者令牌資訊等。值得一提的是,令牌資訊適用於不具備蜂窩網路或者互連網串連條件的偏僻環境。
作為面向Linux執行個體的雙因素驗證應用程式,Duo UNIX擁有兩套部署選項:“login_duo”與“pam_duo”。儘管login_duo在設定方面更為簡單,但卻無法為大家提供可與基於PAM的部署方式相媲美的出色靈活性。舉例來說:
· 如果大家希望利用SSH進行連接埠隧道或者轉寄,那麼將無法使用“login_duo”,這是因為OpenSSH會在Duo的雙因素機制介入前將其設定完成。換句話來說,如果大家使用了“login_duo”而且並沒有在自己的SSH配置當中禁用隧道與連接埠轉寄功能,那麼攻擊者將能夠藉此繞過雙因素驗證機制。
· 除了初始登入之外,PAM還允許大家將雙因素驗證應用到其它環節當中,特別是“sudo”與“su”。
· 上述能力在某些特定情況下極具實用價值,例如大家希望MFA能夠允許某些未授權訪問接入面向內部的主機,但又不想利用任何許可權提升命令來強制執行。
· 同樣的,大家可以利用Duo的整合PAM為MFA提供伺服器,從而使用諸如FTP這樣的其它常見協議。
Amazon Linux與Duo UNIX配合條件下的雙因素驗證方式
1. 在https://signup.duosecurity.com網址處登入Duo賬戶。
2. 建立新的UNIX整合以擷取整合密鑰、機密密鑰以及API主機名稱。
3. 在https://dl.duosecurity.com/duo_unix-latest.tar.gz網址處將Duo最新版本下載至Amazon EC2執行個體當中。
4. 利用“— with-pam”選項對下載到的Duo最新版本進行配置與安裝:
./configure--with-pam --prefix=/usr && make && sudo make install
5. 如果大家的EC2執行個體使用了基於密鑰的驗證機制,那麼請將/etc/ssh/sshd_config檔案修改為如下所示:
PubkeyAuthenticationyes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive
6. 編輯/etc/duo/pam_duo.conf並將我們的ikey(即整合密鑰)、skey(即機密密鑰)以及host(即API主機名稱)添加進去。另外,大家可能還希望添加“autopush=yes”選項,以確保雙因素驗證請求會被自動發送至登入工作階段當中,同時“prompts=1”用於在驗證成功後給出提示。具體內容如下所示:
[duo]
ikey = ABCDEFGHIJKLMNO1P234
skey = mYSeCreTkEy
host = api-ab12c3d4.duosecurity.com
autopush = yes
prompts = 1
7. 利用以下內容替換掉/etc/pam.d/system-auth PAM系統設定檔當中以“auth”開頭的部分:
auth required pam_env.so
auth requisite pam_unix.so nullok try_first_pass
auth sufficient pam_duo.so
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
8. 如果大家的EC2執行個體使用基於密鑰的驗證機制進行SSH訪問,那麼利用以下內容替換掉/etc/pam.d/sshd PAM sshd設定檔當中以“auth”開頭的部分:
auth required pam_sepermit.so
auth required pam_duo.so
9. 大家可以根據需要以同樣的方式利用其它命令對/etc/pam.d/下的PAM設定檔進行調整,例如“su”或者“sudo”。
現在您Amazon Linux EC2執行個體當中的SSH登入機制已經在Duo的協助下具備了雙因素驗證能力。如果大家需要更為具體的分步詳解與最新更新內容,請點擊此處查看Duo UNIX說明文檔。
總結
通過對自己的Amazon EC2 Linux主機進行正確的雙因素驗證機制部署,大家能夠降低風險並顯示提升安全水平。目前可供選擇的雙因素驗證實現手段很多,但GoogleAuthenticator與Duo UNIX加PAM這兩類組合擁有易於部署外加安全性高兩大優勢,因此非常適合那些希望對指向自身AmazonEC2執行個體的訪問請求加以控制的初創企業。
原文連結:
https://medium.com/aws-activate-startup-blog/securing-ssh-to-amazon-ec2-linux-hosts-18e9b72319d4
核子可樂譯