50 種系統免遭黑客侵襲的方法 [2017 年版]
當我還是小孩子,耳畔縈繞著 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
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive