天天看點

在Amazon EC2 Linux主機上保障SSH安全

曾經在初創企業當中工作過的朋友一定很清楚,建立客戶信任是業務發展當中的關鍵性一步。時至今日,使用者對于技術及安全性的了解越來越深入,他們希望供應商能夠為資料提供嚴格保護,同時確定服務堅實可靠。除此之外,客戶的心态往往反複無常,而且通常會在發現現有方案存在安全隐患時毫不猶豫地投向競争對手的懷抱。為了避免這種情況的發生,大家采取的第一項舉措應當是從基于AWS的業務流程下手,鎖定指向Amazon EC2——也就是負責運作業務應用程式的AWS服務——的通路活動。

AWS共享安全模式與Amazon EC2

AWS共享安全模式的一大關鍵性組成部分在于其以安全方式通路Amazon EC2執行個體的能力。在Linux伺服器當中,遠端通路通常意味着通過SSH協定建立一條通往目标伺服器的連接配接。其驗證機制主要分為兩種,要麼要求使用者提供使用者名與密碼組合,要麼提供一套指向伺服器中公共密鑰以實作驗證的私人密鑰。在預設情況下,大部分Amazon EC2執行個體都會使用後種方式實作使用者驗證:當大家第一次啟動自己的EC2執行個體時,系統會要求各位以可選項目方式為其配置設定一條密鑰對。除了使用者名之外,AWS還會為該密鑰對配置設定一個PEM檔案,旨在同伺服器進行驗證并開啟一個SSH會話。

在今天的文章中,我們将共同探讨與通過SSH通路運作在AmazonEC2之上的Linux伺服器相關的安全議題。此外,我們還将深入了解多項示例,看看如何利用以下兩套解決方案将雙因素驗證引入SSH會話當中:即TOTP配合谷歌Authenticator與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)

谷歌Authenticator能夠利用RFC 6238實作TOTP算法。當大家将谷歌Authenticator應用程式安裝在自己的Amazon EC2執行個體當中時,AWS會自動生成一條密鑰。這一密鑰随後會根據大家的具體選擇并共享至第二台裝置當中,例如通過運作在智能手機之上的某款應用程式。當我們利用該移動應用程式掃描由谷歌Authenticator所生成的二維碼時,密鑰的交換過程也就借此完成了。

一旦密鑰被儲存在移動應用當中,它會利用加密散列功能将自身與目前時間戳加以結合,進而生成一次性密碼(即OTP)。這條OTP正是第二項驗證因素,大家會在成功輸入使用者名/密碼或者提供PEM檔案之後被要求将其輸入。OTP内容很難被破解,這是因為它會随着時間推移而自動變更——這一時間周期通常為30秒——而且由大家大多數情況下随身攜帶着的移動裝置(例如智能手機)負責生成。

大家可以從一系列TOTP相容移動應用當中作出自己的選擇,利用它來儲存TOTP密鑰并生成OTP。在今天的文章中,我們将展示如何利用谷歌Authenticator與AWS Virtual MFA來實作這一目标:前者運作在伺服器端,後者則作為TOTP相容移動應用負責生成驗證所需的OTP。當然,其它高人氣TOTP相容移動應用還包括谷歌Authenticator的官方移動應用、Duo Security的移動應用Duo Mobile以及Authy等等。

如何利用谷歌Authenticator與AWS VirtualMFA為Amazon Linux環境實作雙因素驗證

1.  在我們的手機上安裝AWS Virtual MFA或者其它任何TOTP相容性移動應用程式

2.  啟用一項Amazon Linux EC2執行個體

3. 安裝谷歌Authenticator:

sudo yuminstall google-authenticator –y

4. 啟用谷歌Authenticator

[[email protected]–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. 打開由谷歌Authenticator所生成的URL,以顯示我們可以利用移動應用程式掃描并下載下傳對應密鑰内容的二維碼。例如:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/[email protected]%3Fsecret%12345ABCDE

這時我們的新密鑰為: 12345ABCDE

在Amazon EC2 Linux主機上保障SSH安全

7.下面說說其它選項。由于Amazon EC2執行個體在預設情況下會利用可靠的NTP伺服器進行時間同步,是以我們不需要另行調整時間差。多次使用與頻率限制則屬于可選方案;當然,我建議大家保持其啟用,因為這樣能夠進一步提升安全效果。

8. 在預設情況下,Amazon Linux執行個體上的SSH會利用可插拔驗證子產品(簡稱PAM)實作驗證,是以我們需要配置該sshd PAM子產品才能正常使用谷歌Authenticator。大家須在谷歌Authenticator的執行個體當中編輯/etc/pam.d/sshd,找到“auth substack password-auth”行并添加以下指令以指定要使用的谷歌Authenticator PAM子產品:

auth        required     pam_sepermit.so

auth        required     pam_google_authenticator.so

# auth      substack     password-auth

9. 我們還需要確定其它驗證類型同樣調用谷歌Authenticator,例如“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配置檔案,這樣谷歌Authenticator就會作為第二種驗證因素被正确調用。首先,将以下選項變更為“yes”:

ChallengeResponseAuthenticationyes

11. 接下來,在檔案最末處将以下内容添加為新的一行:

AuthenticationMethodspublickey,keyboard-interactive

12. 最後,在伺服器上重新啟動該SSH程序。為了安全起見,我們可以開始一個新的終端視窗以保證目前連接配接不被關閉,進而測試一切是否按照預期進行:

sudo/etc/init.d/sshd restart

現在大家的Amazon Linux EC2執行個體已經得到了嚴格保護,谷歌Authenticator開始成為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移動應用進行通知推送、電話呼叫或者令牌資訊等。值得一提的是,令牌資訊适用于不具備蜂窩網絡或者網際網路連接配接條件的偏僻環境。

作為面向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主機進行正确的雙因素驗證機制部署,大家能夠降低風險并顯示提升安全水準。目前可供選擇的雙因素驗證實作手段很多,但谷歌Authenticator與Duo UNIX加PAM這兩類組合擁有易于部署外加安全性高兩大優勢,是以非常适合那些希望對指向自身AmazonEC2執行個體的通路請求加以控制的初創企業。

原文連結:

https://medium.com/aws-activate-startup-blog/securing-ssh-to-amazon-ec2-linux-hosts-18e9b72319d4

核子可樂譯

繼續閱讀