閱讀210 返回首頁    go 阿裏雲 go 技術社區[雲棲]


50 種係統免遭黑客侵襲的方法 [2017 年版]

“你剛剛從後頭熘出去了,傑克”

1、 備份你的數據。如果你不幸被勒索軟件光顧,那麼你就不用支付贖金,因為你做了備份。

2、 當你需要在公共場所為你的手機充電,那就使用 sysncstop吧,或者你也可以用你的備份電池。(LCTT 譯注:sysncstop 是一種可以在公共場所安全充電的 USB 設備。在公共場所充電的風險,你知道的。)

3、 利用好你的審計係統,裏頭有好多很酷的工具可以幫助你監控係統。如果你確實遭到了入侵,那麼審計係統也許就可以告訴你發生了什麼,以及攻擊者做了些什麼。

4、 說到日誌,把日誌定向到集中式服務器上總是一個不錯的想法,因為如果某個黑客侵入你的係統裏,他首先要攻擊的就是日誌係統以便隱藏他的蹤跡。構建一個好的入侵檢測係統來監控日誌,這對於防範黑客也很有幫助。

“做份新的計劃吧,斯坦”

5、 以強製模式運行 SELinux(見 StopDisablingSelinux.com)。不要覺得我現在還在喋喋不休地說這個可笑。SELinux 可以防止 0day 漏洞的影響。當破殼漏洞出現的時候,SELinux 曾是唯一的防護手段。

6、 如果可能,在 SELinux 沙盒中運行應用程序吧——在容器火遍全球前,它就已經是容器了。同時,請關注 Flatpack 開發,這個工具很快會開發沙盒功能。

7、 不要安裝或者使用 Flash。Firefox 不再支持它了,同時也希望大多數 web 服務器正在遠離它。

8、 使用受約束的 SELinux 用戶來控製用戶在你的係統中所能做的事。如果你正運行著一台共享登錄的係統,設置用戶為 guest_t

“你不必害羞,羅伊”

9、 利用 systemd 工具的能力來幫助你提升係統安全。大多數係統攻擊是通過那些監聽著網絡的服務來實現的,而 Systemd 提供了一些很棒的方法來鎖定服務。例如,使用 PrivateTmp=yes 。Privatemp 利用掛載命名空間來為服務器的 /tmp 設置一個私有的 tmpfs 掛載,這可以阻止被入侵的服務訪問到主機 /tmp 中的內容,以及針對係統中基於監聽 /tmp 的服務的潛在攻擊。

10、 InaccessibleDirectories=/home 是一個 systemd 單元的選項,它使用掛載命名空間的方式使從服務的角度看不到 /home 目錄(或者其它任何目錄),這會使得被入侵的服務攻擊到數據更為困難。

11、 ReadOnlyDirectories=/var 是另外一個 systemd 單元的選項,它使用掛載命名空間的方式來將目錄內容變成隻讀模式。基本上你總是可以讓 /usr 運行在隻讀模式。這可以阻止一個被入侵的應用程序重寫二進製文件,因為那可以在下次服務重啟時,該服務依舊是被入侵的。

12、 降低服務權限(CapabilityBoundingSet=CAP_CHOWN CAP_KILL)。在內核中,特權服務被分解成一些列不同的權限。大多數服務不需要很多權限(如果需要一些的話),而 systemd 提供了一個簡單的開關來從服務中剝離這些權限。

13、 如果服務不使用網絡,那麼你可以使用 PrivateNetwork=yes 來為該服務關閉網絡功能。隻需在服務的單元文件中開啟該選項,就可以享受它帶來的好處,關閉服務所有可用的網絡。黑客常常並不是真的想破壞你的機器——他隻是想用它作為攻擊服務器來攻擊其它機器。如果服務連不上網絡,那麼就不會受到攻擊。

14、 控製服務可用的設備。 Systemd 提供了 DeviceAllow 配置,它控製了該服務可用的設備。DeviceAllow=/dev/null rw 將訪問限製為 /dev/null,且僅可訪問該設備節點,不允許對其它任何設備節點的訪問。該功能實現於設備的 cgroup 控製器頂端。

15、 Systemd 係統即將迎來的一個新功能是 ProtectSystem Strict,該功能可以開啟所有這些命名空間以完全鎖定服務運行的環境。

“剛剛重獲自由”

16、 不要使用沒有運行著 SELinux(SEAndroid)強製模式的手機。幸運的是,我聽說目前超過 90% 的安卓手機都運行著 SEAndroid 的強製模式,這真讓我高興。現在要是我們能讓那些果粉們使用 SELinux 就好了。

17、 隻從受信源安裝軟件。不要安裝你從因特網找來的危險東西,對於你的手機、計算機係統、虛擬機以及容器等等也一樣。

18、 我不會在我的手機上進行網上銀行操作——我隻在我的 Linux 計算機上做這事兒。如果黑客偷了我的信用卡,也許我就丟了那麼 50 美元;而如果他黑進我的銀行賬戶,那我丟的錢就會更多。我想我是個老古板。(“滾出我的地盤。”——那些老古板都會這樣說。)

19、 我用我手機做的一件很酷的事情,就是設置讓我的信用卡公司每次在我的信用卡消費時給我發送短信。那樣的話,如果賬號被盜,我會更快地知道。

20、 當你需要安全地通訊,請使用 Signal 安全信息應用

“搭個便車,格斯”

21、 在你的計算機係統上運行 Linux。當我第一次想用計算機聯絡我的父親時,在他的計算機中毒前,我很少回家。我回去給他的係統安了個 Linux,而他從那以後就一直運行著它。我相信 Linux 大體上說是一個更加安全的係統,因為它的設計方式。而且我也相信這個桌麵被黑的可能性也相對較小,因為用它的人相對較少。有些人或許要持反對意見了,他們會說 Windows 在過去幾年中已經有了很大的改進了,但對於我而言,我仍然堅持己見。

22、 隻運行那些有安全響應團隊進行安全監管的發行版。企業軟件及其重要。

23、 運行一個企業級內核。在容器中,單點故障往往是內核。如果你想要保證它安全,那麼就使用一個企業級內核,即便它不是一個最新的版本,但也包含了最新的安全補丁。記住,最新的內核雖然帶來了最新的安全補丁,但是它也帶來了大量的新代碼,這些代碼可能存在漏洞。

“你不要說太多”

24、 大多數非法入侵都是通過社會工程學實施的——例如,電子郵件鏈接、web 瀏覽器攻擊,以及電話。對於此,最好的選擇是接受相關教育,並且對一切留個心眼兒。沒有哪個來自尼日利亞的家夥會給你錢,國稅局也不會打電話到你家問你要錢。如果你電子郵件收到了來自你銀行的電子郵件,裏麵包含有到某個網站的鏈接,那麼不要直接去點擊那個鏈接,在 web 瀏覽器中輸入那個地址來打開。

25、 總是把你的係統打上最新的安全補丁。已知有安全漏洞以及過時的係統的數量十分可怕,腳本小子們依賴於你更新係統。

26、 當連接到網絡上的服務時,請始終使用 HTTPS。Chrome 和 Firefox 現在有個強製開啟 HTTPS 的模式。到 2016 年為止,那些還不支持安全通訊的網站可能就不值得你們訪問。

27、 在你的容器中使用 seccomp,這會將攻擊限製在內核之外,內核是個單點故障。限製什麼進程可以具體討論。

“就把那鑰匙丟下吧,李”

28、 使用 YubiKey 來存儲私鑰。

29、 加密你係統上的數據。至少對於筆記本而言,應該把家目錄以及你的其它數據目錄加密。幾年前,我正乘坐在倫敦的地鐵上,我的筆記本就成了某些人的目標——我下了車,車門關上了,而我發現我的筆記本不見了。此時,地鐵已經駛出了站台。幸運的是,我把磁盤加密了。

30、 給你的所有網站用上 Let's Encrypt 吧,沒有任何理由不再運行 HTTPS 了。

31、 絕不要在不同 web 服務器上使用相同的密碼。雖然這個很難不落入陷阱,但是像 Let's Encrypt這樣的工具會有很大幫助。如果你使用 ssh 密鑰來登錄進係統,這會更好。

32、 使用雙因素認證(2FA)。密碼變得無關緊要,使用 Yubikey 以及諸如此類的工具可以使得雙因素認證很方便,我們都有手機。在大腦中記一個密碼,並在手機中生成一個密鑰,總是比一個密碼來得更好。

33、 網站總要我注冊個帳號,沒有比這更激怒我的事情了——我們就不能做得更好點?對於網站密碼,始終都要使用密碼生成工具來生成。我是個保守派:我使用 Password Safe 來生成密碼,然後剪切粘貼到 web 瀏覽器中。我聽說,其他人使用 LastPass,或者其它整合在手機和 web 服務中的工具也用著不錯。

34、 配置像 FreeIPA 之類的服務用於身份認證。使用像 Kerberos 之類的工具來認證和授權,會使得跟蹤雇員及其對係統的訪問更為簡便(而且它也有很酷的加密服務)。使用活動目錄也很不錯,或許我有點偏頗。

35、 如果你經常輸入密碼,那就使用一個容易記憶的句子,而不是一個單詞。我所偏好的用於記憶密碼的方式,就是使用有幾個單詞並且易於輸入的詞組。

“讓自己自由”

36、 使用 USBGuard 來保護你的係統免遭流氓 USB 設備破壞。

37、 在過去幾年中,我一直工作於容器方麵,讓我們來說說容器的安全吧。首先,讓它們在開啟強製模式的 SELinux 的係統中運行。如果你的係統不支持 SELinux,那就換個支持它的版本吧。SELinux 是使用文件係統來保護容器免遭破壞的最佳工具。

38、 如果可能,在容器中跑你的服務吧。我相信,使用 OCI 鏡像格式 和 Linux 容器技術是應用的未來。用 runC、OCID、RKT、Systemd-nspawn 等等來啟動這些容器。雖然我常常說“容器並不包容“,但是不要在容器外麵運行這些服務更好一些。

39、 在虛擬機中運行容器。虛擬機提供比容器更好的隔離機製,在虛擬機中跑像容器之類的東西,更加靈活有彈性,並且互相隔離。

40、 在不同的虛擬機中,按不同的安全需求跑容器應用。你可以在 DMZ 中的虛擬機上跑 web 服務容器,而在 DMZ 外的虛擬機上跑數據容器。

41、 同時,記得在不同的物理機上跑需要最高安全性的虛擬機,並且容器放在不同虛擬機上(這也叫深度防護)(LCTT 譯注:此處原文有誤,根據理解修改)。

42、 以隻讀模式跑容器。開發環境中的容器需要能夠寫入到 /usr,但是生產環境中的容器隻能寫入到 tmpfs,並且將卷掛載到容器中。

43、 降低容器權限。不管是在容器中,還是在容器外,我們都以比它們所需的更多的“權限”跑它們的進程,你可以通過降低權限來讓你的進程更加安全。

44、 不要以 root 身份在容器中跑進程。大多數服務都不需要 root 特權,或者它們需要該權限來綁定到低於 1024 的端口,然後切換到非 root 用戶。我建議你始終以非 root 身份來跑應用。

45、 給你的容器打上最新的 CVE 補丁。使用像 OpenShift 這樣的工具來構建並維護你的容器鏡像是個不錯的主意,因為它會在新的安全補丁出現時自動重構容器鏡像。

46、 我的一個同事說 “Docker 就是用來在你的主機上以 root 身份運行來自因特網的隨機代碼的。”從一個受信源獲取軟件,不要抓取你在 docker.io 上隨便找到的第一個 Apache 應用。操作係統有重要關係

47、 在一台受限的容器化優化的主機上跑生產環境容器,例如在一台原子主機上,它開啟了所有安全特性,為運行中的容器而優化,帶有限製攻擊層和原子級更新。有什麼不喜歡的嗎?

48、 使用像 OpenScap 這樣的工具來掃描你係統的漏洞。糟糕的是,新的漏洞總是層出不窮,所以你得時刻更新你的掃描器。(也可以看看 原子掃描,用於掃描你的容器。)

49、 OpenScap 也具有掃描安全配置的功能,如 STIG(安全技術部署指南)。

50、 為你孩子收到的所有那些聖誕物聯網設備設置一個特別的客戶網絡。我鍾愛我的 Amazon Echo,還有自動化燈以及電源開關(“Alexa,打開聖誕燈“),但是所有這些都是由可能存在安全問題的 Linux 操作係統控製。

原文發布時間為:2017-01-21

本文來自雲棲社區合作夥伴“Linux中國”

最後更新:2017-05-27 10:02:26

  上一篇:go  能否打開人工智能的“黑箱”?
  下一篇:go  如何將 Linux 命令的輸出賦值給變量