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

Daniel J Walsh發表於2017-01-21

Paul Simon 概括了“與愛人分手的 50 法”,而這裡,我們提供了提高系統安全性的 50 種方法。

當我還是小孩子,耳畔縈繞著 Paul Simon 的流行歌“與愛人分手的 50 法”。當我漸漸地長大,突然受歌的啟發,收集了 50 種方法,免得你——門內漢和門外漢——遭受駭客侵襲啊:

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

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 作業系統控制。

“一定還有著另外 50 種免遭駭客侵害的方法”

你會為這個列表新增點什麼呢?在下面的評論中告訴我們吧。

Josh Bressers 對本文作出貢獻。


作者簡介:

Daniel J Walsh - Daniel Walsh 已經致力於電腦保安領域將近 30 年。Dan 在 2001 年 8 月份加入 Red Hat。

 


via: https://opensource.com/article/17/1/yearbook-50-ways-avoid-getting-hacked

作者:Daniel J Walsh 譯者:GOLinux 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章