安全不僅僅是技術問題,而是人的問題。許多低級錯誤竟然經常是由那些應該懂更多的人犯的:系統管理員或其他IT員工。
Intermedia公司《2015內部風險報告》發現:IT專業人士才是最有可能進行“危險”安全操作的人群,比如說共享密碼/登錄、重復使用個人密碼登錄業務應用,或者將個人賬戶憑證交給他人。
有鑒于系統管理員對神一般的控制權限,這類過失發生在他們身上比發生在普通用戶身上危險得多。IT專業人士和普通用戶一樣容易被網絡釣魚、惡意軟件和其他攻擊攻陷,被盜取的有特權的系統管理員憑證幾乎總是能造成嚴重得多的安全事故。管理員犯錯比用戶犯錯危害大得多。下面給您列出十大常見的安全錯誤,以及它們的補救措施:
1. 萬事用sudo
當你用root登錄,你就對面前的金屬小盒子擁有了完全控制權。這是極端危險的,因為只要你的憑證被盜,攻擊者可以對你的系統為所欲為。
用Windows的說法,只要不執行管理員級的任務就沒必要用管理員賬戶登錄。你可以用個人賬戶登錄,然后在需要執行特定命令的時候用sudo,而不是直接以root賬戶登錄系統。
一不小心,故態復萌簡直不要太容易。只要一條命令需要sudo,整個腳本就會執行失敗——全部都得從頭再來。如果你不能搞清哪些命令需要特權而哪些不需要,就很可能又退回到萬事用sudo的狀態。
2. 運行來源不明的腳本
安裝第三方Linux應用是另一個sudo可能被濫用的地方。你要做的僅僅是直接往終端里復制和粘貼命令來啟動安裝腳本——命令早已設置為利用sudo來執行了。腳本里的每一條命令都將以特權權限執行。
舉例如下,直接從網頁上復制過來的(URL隱去了):
sudo -v && wget -nv -O- https://xxx/xxx/linux-installer.py | sudo python -c “import sys; main=lambda:sys.stderr.write(‘Download failed\n’); exec(sys.stdin.read()); main()”
這條命令給網上其他地方托管的東西賦予了sudo權限,以及本地運行Python的權限。極端不建議這么做!!Windows系統管理員面臨同樣的潛在災難——執行下載的PowerShell腳本。
即使你信任源,千萬別假設從互聯網上下載的腳本是安全的。一定要先仔細檢查腳本的內容,確認執行這些命令不會引發不良行為。
3. 以root運行特權服務
應用程序永遠不應該以root運行。為機器上運行的每個應用程序和服務都創建單獨的具有特定權限的服務賬戶。
服務賬戶通常都缺少主目錄,如果以服務賬戶登錄,對文件系統的操作通常都是受限的。即使攻擊者攻陷了服務賬戶,他/她仍然需要搞定一個本地漏洞利用才能獲取更多的權限來執行代碼。
每個應用程序都必須使用定制的賬戶訪問數據庫,而不是用root或管理員個人賬戶訪問。網頁應用應該歸屬于恰當的組和用戶。給Windows應用程序分配域權限時,不要給予管理員級別的權限。
主流Linux版本都默認使用服務賬戶,但如果管理員手動配置第三方包,很容易就會犯錯。要記得在所有的安裝和配置都結束后切換許可,確保root或管理員個人賬戶不再是該應用程序的所有者。
4. 重復使用密碼
瞪大雙眼準備接受下一波驚嚇吧!我們都聽過太多在不同網站、系統和應用間重復使用密碼的罪惡。但事實總是殘酷的,這一問題到了今天依然是個大問題,而系統管理員們也不能免俗。
最近,Mozilla稱某未知攻擊者闖入了一名特權用戶的Bugzilla漏洞跟蹤數據庫賬戶,盜取了大約33個關鍵漏洞的信息。事情真相是:該“特權用戶”在另一個網站上重復使用了他的Bugzilla密碼,而該密碼已經在那個網站的泄露事件中被曝光了。
太多太多次,服務器被設置了弱管理員密碼或與該網絡中其他機器的密碼相同。用常見密碼和字典進行暴力攻擊會奏效就是因為有足夠多的人依然在犯這種低級錯誤。當多臺機器密碼相同,問題便疊加了。
系統管理員們不應該在所有機器上都設置相同的root密碼,而應該選擇使用密鑰文件。每臺服務器都應有個公鑰文件而系統管理員的工作站上應該放有與該公鑰文件相關聯的私鑰。采用這種方式,系統管理員可以訪問網絡上部署的所有機器,而在網絡中橫向移動的攻擊者只要沒有有效密鑰便不能登錄。而且也攔截不到密碼了。
5. 共享管理員賬戶
管理員賬戶——諸如訪問數據庫和管理頁面的,常常會在網絡內共享。不通過設置環境以便管理員能在需要的時候請求特權,而是亂七八糟地共享管理員賬戶,那根本就是在自找麻煩。
理想狀態下,應該是采用獨立賬戶:一個root賬戶,然后每個管理員分發一個單獨的賬戶。管理員賬戶不應該一開始就分配最高級別的訪問權限——可以在執行特殊任務時請求特別訪問權。Intermedia的報告發現32%的IT專業人員將自己的登錄和密碼憑證給了其他員工。
不清楚到底是誰在用管理員賬戶就已經夠糟的了,更糟的是:這些密碼在管理員離任后竟然還不帶改的。由于密碼沒有經常更換,前同事大模大樣地殺回來,造成破壞后從容離去無跡可尋的場景也不是不可能發生。Intermedia的調查發現,1/5的IT專業人士承認自己會在離職后還去訪問原公司的信息。密碼修改策略不僅僅針對終端用戶。要定期修改密碼,尤其是管理員和服務賬戶密碼。而且,無論何時,只要管理員離任,請務必重置密碼。
6. 故障診斷完后甩手不管
故障診斷的時候,你執行各種花招和試驗來找尋并修復問題。在進行這些嘗試的時候,你很可能會繞過那些常規的處理過程。問題往往出現在你修復了已發現的問題而進行到下一個任務的時候。管理員總是很匆忙,有可能忘了恢復現場而令事情陷入混亂——給潛在的濫用以可乘之機。
比如說,在試圖找出為什么一個應用程序沒有響應的時候,你有可能在防火墻中開啟了一些端口。當問題修復,你得在這些被臨時開啟的端口被攻擊者利用之前關上它們。同樣地,如果你由于SELinux干擾了故障診斷而暫時關閉了它,記得在你完工之后重新啟動它。
故障診斷之時,記錄下你所做的改動,這樣便能在之后將各種設置恢復到原始的狀態——除了你真的需要做出的那些修改。
7. 未能跟蹤日志文件
日志文件很有用,尤其是在故障診斷的時候,因為它們能讓你看到最細粒度層次上發生的事情。當你不再需要這些日志文件,請停止產生它們的進程。相信我,你最不想看到的事情之一,就是調試進程一直開啟,不停產生那些包含了可能對攻擊者也有用的信息的日志文件。
作為最佳實踐,要記得總是記錄下有哪些日志被創建了,做到對其中的信息類型心中有數。
8. 在文本文件中存儲密碼
要記的密碼太多時,很容易就會把它們都記在文本文件中。對四處窺探的攻擊者而言,這簡直就是叩開各種系統的天賜神物。這種做法的后果十分明顯,但大家基本都聽說過那么一兩個將所有重要密碼記錄到文本文件中的例子。
如果密碼必須以明文保存到某個文件中(比如某個應用程序的數據庫憑證),設置文件權限以限制能查看該文件內容的用戶。另外,確保數據庫賬戶是一個只有最低權限的服務賬戶。
9. 留下閑置賬戶
過期的,限制的賬戶就是些礙事的東西。可能有軟件僅僅是評測了一下就卸載了,但作為安裝進程的一部分而添加的賬戶卻一直留在系統中。別那么干。攻擊者很可能利用這類被遺忘的賬戶,尤其是它們還保留有默認密碼的時候。
對那些需要留存在系統中但未來不會被使用的賬戶,可以通過修改密碼文件,用一串字符串替換掉賬戶密碼來禁用該賬戶。顯然,當員工離職,必然要進行的一步就是立即撤銷他們的賬戶。
10. 疏于打補丁
金科玉律:安全更新一出,即刻安裝(當然,備份好受影響的系統先)。太多太多的服務器不是因為零日漏洞利用被攻陷,而是因為經年的補丁從未打上。
即使是關鍵服務器,一小段計劃維護的停機時間也遠比被攻擊者成功入侵后的數小時乃至數天的宕機時間要好得多。補丁發布就應立即測試并創建推出更新的計劃任務。
然而,不幸的是,在立即打補丁這件事上你很可能會感到挫敗——通常是由于該補丁會讓某個遺留應用崩潰。這種情況下,不要簡單地聳聳肩,甩一句“太糟了”了事。應及時將情況上報恰當的利益相關者。升級該問題。或許就有方法將服務器隔離至最小風險或者采用新技術降低對遺留產品的依賴呢。
在實際生活中,打補丁有可能就跟政治泥潭一樣恐怖。如果有級別比你高的經理級人物下令不對系統進行更新,要確保每個人都知道不打補丁的風險。
不要吝惜您的安全技術
一般情況下,安全技術能幫助阻擋已知慣犯,并在事情變得不正常時幫助將問題暴露出來。或許會有在某個特別的工作站或服務器上不宜運行反病毒或防火墻的情況,但這種情況相當罕見。
考慮到當下有多種DDoS惡意軟件肆虐,就因為Linux Web服務器沒有工具阻攔壞東西的入侵而感染這些服務器,安全技術應該被部署到所有終端以保護所有用戶——高層管理人員、一線工人、系統管理員和其他有著特殊權限的個人,不受攻擊的侵害。
盡量保持機器的干凈清潔。卸載那些你用不著的應用程序以便在機器上不留下被遺忘的賬戶或工具。我們的目標是讓系統盡可能地干凈以最小化攻擊界面。僅僅需要一個小錯,一瞬間的疏忽大意,所有努力都可能付諸東流。
安全工具能幫你看清網絡中正在發生的事件。可以使用Nmap掃描那些可能在故障診斷會話中被打開的端口。檢查哪些機器缺失了哪些補丁,制訂出修復計劃。
有工具可以告訴你哪兒出了問題,給你在攻擊者乘虛而入之前修復問題的機會。但世界上所有的安全技術都幫不了你——如果系統管理員不以身作則遵守那些他們為大家制定的規則的話。