在基於Linux的服務器上,我遵循以下基本做法:
- 使管理員帳戶密碼足夠長且足夠複雜(即,從理論上講,密碼不能在合理的時間內被破解)。
- 監視所有進入管理文件的網絡流量。
- 要從上面的#2擴展保護層,請監視本地文件更改(尤其是那些包含需要 sudo 特權的命令。)
- 驗證 all 用戶輸入,以確保所有用戶輸入都是安全的。 ol>
作為一名新手開發人員,我不理解如果服務器管理員執行上述操作,黑客入侵甚至是可行的。
在基於Linux的服務器上,我遵循以下基本做法:
作為一名新手開發人員,我不理解如果服務器管理員執行上述操作,黑客入侵甚至是可行的。
不確定是否已應用所有安全更新?請記住,作為後衛,您必須 100%的時間獲勝。黑客只需要贏一次。
您列出的步驟說起來容易做起來難(除密碼之外……但人們仍然選擇可怕的密碼!)。
2)另外,面向公眾的Web服務器的“可信來源”是什麼?整個互聯網?整個互聯網,沒有中國/俄羅斯(/一些/其他/國家/地區)?自動化系統可以檢測多種類型的攻擊,但是就像防病毒一樣,它們只能走得更遠。
3)監視本地文件是好的,但是,這並不是萬靈藥。如果攻擊者設法將代碼注入到Web服務器中,然後使用內核錯誤將代碼獲取到內核中……而無需將文件寫入磁盤,該怎麼辦?那時,他們可以將文件寫入磁盤,並使用根工具包來防止大多數(理論上為 all )在線掃描都注意到系統的任何變化。
即使他們僅設法利用Web服務器,他們也可以做Web服務器可以做的一切(這可能是攻擊者感興趣的全部)。
4)您應該始終驗證用戶輸入。大多數開發人員都知道這一點(許多人嘗試這樣做)。可悲的是,說起來容易做起來難,這就是為什麼我們繼續看到用戶輸入未經適當驗證的問題。您將永遠不能保證任何真實的軟件正確都可以驗證所有用戶輸入。閱讀有關StackOverflow的一些PHP + MySQL問題,以了解有多少人認為 mysqli_real_escape_string()
可以防止所有SQL注入攻擊(“ where ID =”。$ val
容易受到攻擊,即使 $ val
是 mysqli_real_escape_string
!的輸出!)。
即使您可以(不能)確保每個已知的攻擊媒介都受到防範,您也只能做些什麼,除了在黑暗中狂野地向未知和未知的攻擊(好吧,不斷教育自己會有所幫助)。
舉個例子,您的防禦措施什麼也做不了,我正在參加一個安全課程,在那裡我們正在做“戰爭遊戲”。我能夠通過從另一台計算機上獲得他們的用戶密碼之一來根植對方團隊的服務器(其中一個被搞砸了,然後錯誤地將其輸入bash作為命令,他們從沒想過從 .bash_history
中刪除它)。
從那裡,我欺騙了他們通常從其登錄並通過SSH輸入其用戶名和密碼的計算機的IP。我對系統的訪問受到限制。然後,我運行 sudo vim
,再次輸入相同的密碼,並讓vim生成了一個bash shell。多田從可信來源進行根訪問,無需以不尋常的方式修改任何本地文件,無需利用弱密碼(這很糟糕,但即使是世界上最好的密碼也無濟於事),也無需依賴未經驗證的用戶輸入。
那時,我很調皮,我手動修改了與我的合法登錄名有關的所有日誌文件,並刪除了它們的IDS(我敢打賭,它們不會足夠注意以至於我發現我替換了所有其二進製文件帶有 / bin / true
的副本!)。一個“真正的”黑客可能會準備得更好,以確保更警惕的管理員不會發現他們的活動,但是我已經實現了我的目標,我中的一小部分希望他們發現有人發現了它。
如果我可能會破壞Schneier的定律:
任何人,從最無能為力的業餘愛好者到最好的系統管理員,都可以創建他自己無法破解的安全系統。
簡而言之,正確防禦不是一件容易的事,因為...
在輸入中快速刺穿->
讓管理員帳戶密碼變長...
僅用肩膀衝浪就不會對使用強密碼的行為產生任何影響。
如果您的密碼存儲機制較弱(易於SQL注入,不安全的哈希機製或最糟糕的純文本密碼存儲),您仍然容易受到攻擊。
監控每個傳入的網絡流量
您將監控大量流量。確保您不會錯過某些重要內容的保證是什麼?那麼零時呢?
加密流量呢?您將對此進行監視嗎?
...並且僅允許可信來源。
如果您的可靠來源會怎麼樣?受到入侵/被黑客入侵?然後它們不再是可信的,但是您(系統管理員)不知道這一點!
...監視本地文件更改...驗證每個用戶輸入。 ..
同樣,您可以監視多少,並且您可以分析多少日誌...
此外,假設至少有一些服務正在運行機器,服務中的漏洞可能會成為您的機器受到威脅的原因。
我希望我能使您了解 的可行性:)
Ack:圖片取自www.quotesparade.com
如果您可以“適當地”進行防禦,那麼黑客將永遠無法進入。問題是這種情況下的正確含義。
您可以關閉服務器,然後將其密封在地面下半英里的混凝土中,它非常安全,對嗎?但這是無法使用的。並且如果所包含內容的價值足夠高,則攻擊者可能會嘗試對其進行挖掘。因此,您已經可以從這個極端的例子中看到安全是一種平衡。它需要適當-仍然允許使用服務器。
在這種情況下,您會發現以下問題:
簡單地說-您可以將預算固定到一定水平。根據您要保護的內容來決定您願意花費多少。接受會有一些殘留風險。
然後計劃出現問題的地方-有時安全性將被破壞,您需要知道如何應對。對於簡單的文件服務器,此過程可能只是擦除操作並從備份中重新安裝,但是對於更複雜的操作,您可能需要通知用戶,利益相關者,監管者等,存儲證據,進行法醫複製,重建,重新配置或以某種形式進行補救事件...然後從中學到的經驗來重新評估您的安全計劃。
...然後...重新做一遍。定期重新評估您的安全性和安全需求,因為世界瞬息萬變!
假設您有一台Web服務器,它需要一個命令:
GET /helloworld.txt
然後返回,非常簡單,“ Hello,World!”
這是世界上最容易編寫的代碼,對吧?假設您接受輸入,請檢查字符串“ GET /helloworld.txt”,然後執行正確的操作,然後忽略其他任何內容,遭到黑客攻擊的可能性有哪些?沒有?
好。您的命令緩衝區有多大? 20個字節?剛好足以接受該命令?如果有人給出的命令長兩個字節怎麼辦?如果他們給出的命令長2000字節怎麼辦?您實際上如何收到命令?什麼與網卡有關?包解碼是什麼?如果字符以兩個數據包發送,並且字節之間沒有NUL終止怎麼辦?
簡而言之,即使是這種甚至不需要密碼訪問的“最簡單”的網絡程序也可能具有很多安全性缺陷。
簡單來說,這與復雜性有關。每次引入變量時,可能的攻擊向量的數量呈指數增長。並非所有這些都是攻擊媒介,但是它們一定會成為攻擊媒介,因此,如果您要保證安全的話,則必須將它們全部掩蓋。
如果沒有經過全面審核,完全單元測試的情況,這幾乎是不可能的。按合同設計,甚至是經過數學驗證的系統。據我所知,不存在這樣的系統。 OpenBSD可能會接近,但我懷疑它會一直存在。
非常簡短的答案是:對於安全性,請始終假設最壞的情況。知道自己很脆弱,並採取適當謙虛的態度行事,並儘可能地降低風險,這比僅僅因為無法想到可能的攻擊媒介而假定自己安全就更聰明。
如果您做的所有事情都做得正確,可以防止許多不同的攻擊。不幸的是,黑客攻擊不只是直接攻擊登錄/訪問。
很大一部分包括繞過您的保護,因此攻擊者不必知道密碼。社會工程是另一個重要部分。如果攻擊者知道密碼,則密碼不會保護任何內容。此外,不僅僅是獲得管理面板的訪問權限,還有更多破壞性攻擊和目標。如果有人不想讓您經營一個網上商店,因為他擁有自己的商店並想讓他的客戶(和您破產),那麼您想如何防止DDoS攻擊,或者僅僅是有人拔掉了服務器上的插頭房間? (只是清潔工,只是想給主板上的灰塵?;))
此外,監視並不能真正幫助預防攻擊。
有不同類型的保護,防篡改,防篡改和防篡改系統。防篡改系統希望降低攻擊速度(例如長密碼)。篡改響應會告訴您是否發生了攻擊(例如,IDS檢測到一些SQL注入字符串時發出警報,),並且篡改證據系統會向您顯示實際攻擊的發生方式(例如日誌文件)
黑客試圖破解或避免這些保護,因此,您要邁出第一步。當然,這非常困難,因為您幾乎不知道服務器軟件中的任何安全漏洞,這可能使攻擊者無需密碼即可訪問根信息。通常,攻擊者會首先發現這些類型的弱點,這是您的工作,它需要照顧好您的系統並放慢其攻擊速度,直到問題解決。
使管理員帳戶密碼足夠長且足夠複雜(即,從理論上講,密碼不能在合理的時間內被破解)。
被蠻力破解了嗎?否。被社會工程學破解了嗎?是的如果很多人都知道密碼,那麼通過社會工程學獲取密碼並不難。 (只要一個以上的人知道密碼,就有可能有效地使用模擬來獲取密碼)。如果只有您可以訪問,那麼仍然可以通過社會工程實現物理訪問。但是,這很難管理,您需要懷疑這是否真的值得。
監視每個進入管理文件的網絡流量。
這並不能保護您免受DDoS的侵害。而且,如果您想免受DDoS的攻擊,將會有太多誤報用戶被不公正地阻止。
即使您的密碼很長,殭屍網絡也可能會闖入。如果您有某種限制,密碼嘗試失敗的次數,然後他們可以將您鎖定。
此外,驗證碼不再那麼安全,有許多實體為此付費
要從上面的#2擴展保護層,請監視本地文件更改(尤其是那些具有要求sudo權限的命令的人)。
您無法完全監視所有文件更改。信息太多。大多數程序在運行時會對文件造成很多混亂。您如何區分程序更新和惡意文件?
驗證每個用戶輸入,以確保所有用戶輸入都是安全的。
請確保您在此服務器端進行操作。
最後,零日漏洞利用總是會成為問題。如果有人在您使用的框架中發現一個安全漏洞,那麼您將陷入沉思。為避免這種情況,請使用廣泛使用的框架並希望最好。
防止黑客入侵就像試圖保護充滿鈉的水下掩體一樣。您認為有很多地方需要修補。您可以將它們全部修補。但這並不意味著您安全-所要做的只是在您沒有檢查所有東西墜落的地方發生小洩漏。
“正確防禦”的意思是:“我的代碼沒有錯誤;我都不使用任何工具”。但是軟件有錯誤;硬件有錯誤;沒有人知道如何保證不平凡的軟件或硬件中的錯誤不存在(聲稱相反的錯誤或欺騙,或兩者兼有)。有關討論,請參見上一個問題。
發生攻擊的實際方式是,攻擊者發現或獲悉可以利用的漏洞,並在系統所有者之前被發現。從列表中了解並修復它。
對管理員鍵入密碼的密碼未感染某些鍵盤記錄器惡意軟件。
監視主要用於事後分析;它不能阻止攻擊,但是可以幫助您確定發生了什麼,利用了什麼錯誤,以便可以在下一次修復該問題。
有沒有“保證安全的用戶輸入”之類的東西。存在“已被驗證符合一組特定規則的用戶輸入,這應意味著可以在給定結構中使用所述用戶輸入而不會遇到不方便的情況”。例如,一段文本可以“安全地包含在HTML文件中”(其中不包含某些會觸發高級處理的HTML特殊字符,例如“ <”和“ &”),但對於包含在SQL查詢中(HTML安全字符可以編碼完全不安全的SQL查詢)。
只需添加以下幾點:
使管理員帳戶密碼足夠長且足夠複雜(即,從理論上講,密碼不能在合理的時間內被破解)。
長而復雜的密碼雖然很好,但是卻增加了寫下它們的可能性。與必須經常更改的密碼相同。尤其是如果有多個人需要密碼,或者是不經常使用的密碼。
監視所有進入管理文件的網絡流量。
要從上面的#2擴展保護層,請監視本地文件更改(尤其是那些具有命令要求的文件) sudo權限)。
更好,但特權升級攻擊可能允許某人上傳二進製文件,並在其中添加suid / sgid粘性位。不會在您的文件列表中。
驗證所有用戶輸入,以確保所有用戶輸入都是安全的。
您將為此付出多少努力?清理用戶輸入永遠不會100%有效。
基本上,問題的關鍵在於,您所做的某些事情會比未解決的問題引起更多的問題,總有解決方法,只要盡力而為,希望你不要犯一個愚蠢的錯誤。像消毒劑一樣。您只能殺死99%的問題。
“可能犯下任何錯誤而仍然會失敗。這不是弱點,而是生命。” -皮卡德
您尚未定義服務器被黑客入侵的含義。
第一步是定義對系統進行合法訪問的範圍。用戶是誰,系統需要為用戶提供哪些保護?
如果系統專用於非常特定的有限功能(例如為特定的分佈式應用程序提供服務),並且攻擊者可以僅通過網絡訪問該系統,然後幾乎就是該應用程序必須安全,再加上系統的網絡暴露部分:LAN適配器,其驅動程序和網絡堆棧。
真正的挑戰當人們幾乎完全使用系統時,他們可以登錄操作系統帳戶並直接運行應用程序。在Linux這樣的操作系統中,安全性是如何使OS在多用戶情況下無法被黑客入侵的。
A系統可以發生安全事件,而不會損害超級用戶帳戶。假設您有一個完美的Linux系統。但是,用戶 joe
安裝了不安全的應用程序 / home / joe / bin
。該應用程序打開了一個惡意文檔,該文檔利用了該應用程序中的一個缺陷,通過該缺陷,惡意代碼可以在 joe
的安全性上下文中執行任意代碼。惡意代碼會破壞 joe
的數據,並且還會從計算機中竊取CPU時間。 (儘管嘗試一下,但由於計算機“不可破解”,因此它無法獲得超級用戶執行特權)。
被黑客入侵了嗎?還是不被黑客入侵?從用戶 joe
的角度來看如何。 joe
是否關心在事件中從未損害過 root
?
如果人們(或至少是您的管理員)從未犯過錯誤,並且計算機程序始終都是100%無錯誤的,那麼從理論上講您是正確的。但是不幸的是,這些都不是真的,攻擊者在這些時候很容易進行攻擊。
即使配置完美,由於錯誤,該軟件也無法一直進行配置。在適當的條件下,有可能使該軟件做一些不應做的事情。
類似地,社交工程可能是最常見的黑客形式。當您可以簡單地欺騙對手以提供所需的東西時,就無需採取複雜的技術措施。偷偷摸摸地瀏覽密碼,在管理員使用的計算機上安裝鍵盤記錄程序或誘騙管理員運行惡意軟件都是偷偷摸摸的可能。
您可以補償很多通過將服務器鎖定在沒有Internet連接的房間中,並且僅允許管理員在房間裡有門衛的情況下使用系統來實現此目的,實際上,這是由許多高安全性政府網絡運營的,但是它帶來了巨大的負擔
最終,安全性完全是關於平衡可用性和風險。您概述的步驟需要大量降低可用性,才能安全地實施這些步驟,因此無法在現實情況下自行工作。安全性是一個複雜且不斷變化的領域,需要及時了解威脅,檢查新威脅的防禦並確保監視可能在0天之內出現的威脅。
近十年來,我一直在嘗試構建防彈系統。我必須學習高安全性設計技術(例如EAL7),隱蔽渠道,顛覆攻擊等。老實說,大多數係統設計者或管理員都不具備使機器完全免受已知攻擊的知識或資源。考慮到業務限制,這幾乎是不可能的。大多數安全決策都反映了成本,功能,可用性,舊版兼容性,可能的攻擊者配置文件等之間的折衷。
如果您想知道,這是我針對各種安全級別和問題進行的簡化分解之一。 (這不是一本書的大小8)。這封信給了一個認為頂級編碼器可以編寫安全程序的人,但是您可以對編碼器進行分管理員,結果仍然相同。就像在INFOSEC社區中一樣,您無需重複歷史記錄,就可以盡情享受並學習課程。 ;)
http://www.schneier.com/blog/archives/2013/01/essay_on_fbi-ma.html#c1102869
向上評論有許多鏈接,可追溯歷史,政府因素,發展要求等。我還列出了大量示例係統和過程。每個產品都有潛在的缺陷,但比普通產品激發更多的信心。
http://www.schneier.com/blog/archives/2013/01/essay_on_fbi-ma.html#c1105156
系統僅與最弱的鏈接一樣強大
這是一個經常重複的短語,您應該記住,無論密碼有多強-這都是一個重點失敗,暴力破解者 將能夠在某個時候突破。
此外,如果您的系統管理員決定接受一筆可觀的回報以意外刪除文件負載怎麼辦?
德國人認為謎團是無法破解的,有人認為,他們對這種單一加密方法的依賴和信任使他們付出了戰爭的代價-過度依賴單一系統或資源(人力或其他資源)最糟糕可能危害安全的罪行。
當有人問這樣的事情時,通常不會出現一些人性化的方面。
尤其是2-4歲的人們對進入系統的熱情異常高漲。有時#1變成2-4。公司必須付錢給人以保護服務器,並且要花費大量金錢,研究和工時,才能阻止這類人的軍隊對其進行攻擊
可能是因為大多數係統和軟件最初都不了解安全性。安全對於講授,理解和更新(新聞,新的攻擊媒介等)而言是挑剔的。
這就是為什麼它沒有完整而廣泛地講授。例如,沒有像ISO規範那樣的安全規範。也是因為這是家庭安全(防病毒)的潛在市場。
當計算機變得更加普遍時,也許有一天它將成為一件值得關注的事情。在將來,每個人可能擁有100台或更多台計算機。
如果您真的考慮過這一點,我們就不會真正依靠計算機來擔心Internet安全(至少我認為,或者至少要妥善保管至關重要的部分。