[賀賽娜 李洪波 張湘東 徐昊]
在信息化社會中,網(wǎng)絡(luò)已深入到軍事、政治、金融、商業(yè)、人們的生活和工作等方方面面,成為了社會不可缺少的一部分。擁有如此重要地位的網(wǎng)絡(luò)若不能保障其安全性,這將給生產(chǎn)、經(jīng)營、個人資產(chǎn)、個人隱私等帶來嚴(yán)重?fù)p害,甚至?xí){到金融安全、國防安全以及國家安全。近年來公安部持續(xù)推出護(hù)網(wǎng)行動,以戰(zhàn)養(yǎng)兵,推進(jìn)關(guān)鍵信息基礎(chǔ)設(shè)施的安全監(jiān)測、應(yīng)急響應(yīng)等保障能力?!白o(hù)網(wǎng)行動”是國家為了應(yīng)對網(wǎng)絡(luò)安全問題、為了在當(dāng)今復(fù)雜的國際形勢中具備能打硬仗的網(wǎng)絡(luò)安全能力,所做的重要布局之一。為積極響應(yīng)護(hù)網(wǎng)行動,做好安全防守工作,本文以某運營平臺為例,記錄了多種安全檢測方法發(fā)現(xiàn)的重點問題。在實際開發(fā)過程中,通過解決安全問題,獲得了一個安全性更強健的運營平臺。
某運營平臺部署了4臺云主機,其中2臺服務(wù)主機、1臺主數(shù)據(jù)庫機器和1臺從數(shù)據(jù)庫機器。該平臺采用CentOS系統(tǒng),涉及到的應(yīng)用有Tomcat、MySql等。如圖1所示,本文將主要描述4種安全檢測方法:
圖1 4種安全檢測方法在某平臺上的使用
(1)基線掃描:主要檢測操作系統(tǒng)、應(yīng)用程序、數(shù)據(jù)庫的不合規(guī)配置問題,這些配置問題大致分類為:賬號口令、認(rèn)證授權(quán)、日志審計、協(xié)議安全等方面,均可通過修改配置進(jìn)行解決、規(guī)避;
(2)源代碼缺陷檢測:顧名思義就是針對項目的源碼做針對性檢測,通過這種檢測可以發(fā)現(xiàn)由于編寫不規(guī)范、工程師編寫時不細(xì)心等原因造成的隱形bug。從而實現(xiàn)提高代碼的質(zhì)量、優(yōu)化代碼的結(jié)構(gòu);
(3)滲透測試:主要用于驗證在當(dāng)前的安全防護(hù)措施下網(wǎng)絡(luò)、系統(tǒng)抵抗黑客攻擊的能力。利用各種主流的攻擊技術(shù)對網(wǎng)絡(luò)、系統(tǒng)做模擬攻擊測試,以發(fā)現(xiàn)網(wǎng)絡(luò)、系統(tǒng)中存在的安全漏洞和風(fēng)險點;
(4)安全漏洞掃描:針對應(yīng)用的版本漏洞、遠(yuǎn)程訪問協(xié)議等進(jìn)行檢測,發(fā)現(xiàn)漏洞。
通常來說,在一個項目周期中安全檢測主要集中在開發(fā)尾聲、產(chǎn)品上線之前。產(chǎn)品上線之后也會根據(jù)實際需要進(jìn)行定期的安全檢測,確保發(fā)現(xiàn)隱蔽的問題、或保證產(chǎn)品符合新的安全規(guī)定。項目成員可以利用流行的網(wǎng)絡(luò)安全工具進(jìn)行檢測掃描,也可以使用專業(yè)的網(wǎng)絡(luò)安全公司提供的檢測服務(wù),減少項目組的工作量。本文主要基于第三方網(wǎng)絡(luò)安全公司對某運營平臺上線之前進(jìn)行安全檢測的結(jié)果,從上述4種安全檢測中,抽取典型、常見問題進(jìn)行描述,并提供常見解決方案。
操作系統(tǒng)、應(yīng)用程序和數(shù)據(jù)庫級的賬戶信息一旦暴露,或者用戶操作了不該具備權(quán)限的操作,很可能給系統(tǒng)造成不可想象的后果。因此要對賬戶的口令、操作權(quán)限等做嚴(yán)格限制,確保賬戶的安全。下面列出了具體的一些賬戶口令相關(guān)的安全限制:
(1)限制口令長度、口令過期天數(shù);
(2)限制賬戶的口令不能為空;
(3)限制口令中大寫字母、小寫字母、數(shù)字、特殊字符的個數(shù);
(4)刪除與設(shè)備運行、維護(hù)工作等無關(guān)的賬號;
(5)非wheel組內(nèi)的用戶不能su到root;
(6)檢查是否按用戶分配賬號,避免賬號共享;
(7)檢查是否以普通賬戶安全運行應(yīng)用程序,禁止超級用戶、管理員賬號啟用、運行應(yīng)用程序(eg:mysql、tomcat等)。
為了實現(xiàn)規(guī)范化管理,有必要對用戶的登錄、訪問文件目錄做出限制,避免因跨權(quán)限訪問造成系統(tǒng)文件、產(chǎn)品機密信息泄露:
(1)針對新建文件及目錄,應(yīng)設(shè)置默認(rèn)的訪問權(quán)限,防止因未設(shè)置訪問權(quán)限,導(dǎo)致所有用戶都可以訪問;
(2)當(dāng)賬戶登錄服務(wù)器時,應(yīng)限制用戶的登錄超時時間,超過該時間則會話結(jié)束;
(3)禁止root用戶遠(yuǎn)程ssh登錄;
(4)針對web應(yīng)用程序,應(yīng)禁用其manager功能。
從安全的角度考慮,必要的日志能幫助用戶了解掌握系統(tǒng)的安全運行狀態(tài)。有助于識別惡意攻擊以及來自內(nèi)部的違規(guī)和信息泄露,能夠為事后的問題分析和調(diào)查取證提供有力信息:
(1)啟用必要的日志功能,例如Linux系統(tǒng)的syslog日志審計、cron行為日志功能
(2)限制日志文件非全局可寫限制,限制other用戶不可寫日志文件;
(3)有條件的話,可以配置遠(yuǎn)程日志功能,防止本地日志文件丟失;
(4)對于應(yīng)用程序,配置必要的日志,例如為Tomcat配置訪問日志,為mysql配置通用日志、慢查詢?nèi)罩尽㈠e誤日志、更新日志、二進(jìn)制日志等。
對于使用不同協(xié)議訪問的用戶,應(yīng)做一些安全限制,確保用戶以不同協(xié)議訪問系統(tǒng)時不具備權(quán)限泄露信息、做出危險的操作,從而進(jìn)一步保證系統(tǒng)的安全性。
(1)禁止匿名WU-FTP用戶登錄服務(wù)器;
(2)禁止匿名VSFTP用戶登錄服務(wù)器;
(3)禁止root登錄VSFTP;
(4)禁止root登錄WU-FTP;
(5)應(yīng)配置ssh協(xié)議,并安全配置sshd;
(6)應(yīng)禁用telnet協(xié)議;
(7)為Tomcat配置HTTPS加密協(xié)議。
跨站點請求偽裝漏洞是指攻擊者偽造成用戶,訪問曾被用戶瀏覽器認(rèn)證過的網(wǎng)站并進(jìn)行一些惡意操作,通常會在以下情況下發(fā)生:
(1)Web應(yīng)用程序使用會話cookie。
(2)應(yīng)用程序未驗證請求是否經(jīng)過用戶同意便處理HTTP請求。
Nonce是隨請求消息一起發(fā)送的加密隨機值,可證明請求消息來源,達(dá)到防止跨站請求攻擊的目的。如果請求消息沒有包含這段nonce,則處理該請求的代碼將無法證明其來源的真實性,無法判斷該請求消息是不是跨站點請求偽裝攻擊。這意味著使用會話cookie的Web應(yīng)用程序必須采取特殊的預(yù)防措施,確保攻擊者無法誘騙用戶提交偽請求。HTTP請求中包含用戶特有的機密信息,是防止攻擊者發(fā)出未經(jīng)授權(quán)的請求的有效方法。這些信息可以是隨機請求標(biāo)識符、nonce,或者由當(dāng)前會話的session id生成的唯一token,以達(dá)到驗證、確定請求來源的真實性、篩除偽造請求的目的。
空指針引用,通常是由于程序員的疏忽,在引用之前沒有對可能為空的函數(shù)返回值做判斷,直接錯誤引用空指針、或者間接使用Null對象中的屬性和方法??罩羔樢玫膯栴}比較常見,且極易導(dǎo)致程序奔潰。代碼邏輯比較復(fù)雜時,空指針引用的問題不容易被發(fā)現(xiàn);有些空指針引用只在特定條件下才會觸發(fā)問題,正常情況很難排查。
針對這類問題,則要求程序員在代碼編寫過程中足夠細(xì)心仔細(xì),或借助檢測工具檢索到空指針引用的情況,對于可能存在空指針引用的對象做好判斷,避免因為一個疏忽造成后續(xù)的潛在隱患。
(1)缺少統(tǒng)一錯誤處理頁面
當(dāng)攻擊者瀏覽網(wǎng)站尋找漏洞時,站點提供信息越多,攻擊者可以從這些信息中找到的漏洞越多,越容易攻擊成功。應(yīng)用程序應(yīng)通過指定默認(rèn)的錯誤頁面,確保永遠(yuǎn)不會向攻擊者泄漏錯誤消息。處理標(biāo)準(zhǔn)HTTP錯誤代碼是一種簡單、有效、安全的做法;完善的配置還會定義一個用于補救的錯誤處理程序,來捕獲應(yīng)用程序可能拋出的所有異常。
當(dāng)產(chǎn)生403、404、500等錯誤時,可配置統(tǒng)一的自定義錯誤頁面,并且不在錯誤頁面中顯示服務(wù)器版本信息、站點信息、異常錯誤信息詳情、數(shù)據(jù)庫連接信息、SQL語句或者敏感文件的路徑等內(nèi)容。
(2)過度會話超時
當(dāng)會話處于活動狀態(tài)時,攻擊者可能會強力攻擊用戶的密碼、破解用戶的無線加密密鑰或者通過打開的瀏覽器強占會話。而一個用戶的訪問會話持續(xù)時間越長,攻擊者就會有更多時間危害用戶帳戶,用戶帳戶被攻破的概率就越大。如果創(chuàng)建大量的會話,較長的會話超時時間還會阻止系統(tǒng)釋放內(nèi)存,并最終導(dǎo)致denial of service。
可在web.xml文件中將會話超時間隔設(shè)置為30分鐘或更少,可以保證用戶在一段時間內(nèi)與應(yīng)用程序互動的前提下,又提供了一個限制窗口攻擊的合理時間范圍。
跨站腳本攻擊XSS(Cross Site Script)發(fā)生的原因惡意攻擊者往Web頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執(zhí)行,導(dǎo)致網(wǎng)站將用戶輸入的內(nèi)容輸出到頁面上,從而達(dá)到惡意攻擊的目的。
對于XSS跨站漏洞,需要嚴(yán)格檢測所有用戶輸入的數(shù)據(jù)、對所有輸出數(shù)據(jù)進(jìn)行適當(dāng)?shù)木幋a,以防止任何已成功注入的腳本在瀏覽器端運行才能有效避免攻擊。具體如下:
(1)輸入驗證:某個數(shù)據(jù)被接受為可被顯示或存儲之前,使用標(biāo)準(zhǔn)輸入驗證機制,驗證所有輸入數(shù)據(jù)的長度、類型、語法以及業(yè)務(wù)規(guī)則。
(2)輸出編碼:數(shù)據(jù)輸出前,確保用戶提交的數(shù)據(jù)已被正確進(jìn)行entity編碼,建議對所有字符進(jìn)行編碼而不僅局限于某個子集。
(3)明確指定輸出的編碼方式:不允許攻擊者為你的用戶選擇編碼方式。
(4)注意黑名單驗證方式的局限性:僅僅查找或替換一些字符(如尖括號<、>或類似"script"的關(guān)鍵字),很容易被XSS變種攻擊繞過驗證機制。
(5)警惕規(guī)范化錯誤:驗證輸入之前,必須進(jìn)行解碼及規(guī)范化以符合應(yīng)用程序當(dāng)前的內(nèi)部表示方法。對客戶端提交的數(shù)據(jù)進(jìn)行過濾,一般建議過濾掉雙引號(")、尖括號(<、>)等特殊字符,或者對其中包含的特殊字符進(jìn)行實體轉(zhuǎn)換,比如將雙引號(")轉(zhuǎn)換成其實體形式",<轉(zhuǎn)換成<,<轉(zhuǎn)換成>。
暴力破解登錄密碼是通過對已知的用戶名,進(jìn)行對其登錄口令的大量嘗試,或者對常見弱口令進(jìn)行用戶名的大量嘗試。一旦黑客窮舉出了一份用戶名-密碼對,則可偽裝成該用戶獲取信息、進(jìn)行違法違規(guī)操作。
防止暴力攻擊的一些方法如下:
(1)賬戶鎖定
賬戶鎖定是很有效的方法,因為暴力破解程序在5-6次的探測中猜出密碼的可能性很小。但是同時也拒絕了正常用戶的使用。如果攻擊者的探測是建立在用戶名探測成功之后的行為,那么會造成嚴(yán)重的拒絕服務(wù)攻擊。
(2)適當(dāng)?shù)难訒r
檢查密碼的時候適當(dāng)?shù)牟迦胍恍和?,可以減緩攻擊,但是可能對用戶造成一定的影響。
(3)封鎖多次登錄的IP地址
這種方法也是有缺點的,因為攻擊者可以定時更換自己的IP。
(4)驗證碼
驗證碼是阻止暴力攻擊的好方法,但設(shè)計不好的驗證碼是可以繞過的,而且對于特定目標(biāo)的手工探測來說驗證碼是沒有作用的。
弱口令指容易被猜測、被破解的口令,這樣的口令不能確保用戶的安全性。認(rèn)證登錄環(huán)節(jié)存在弱口令時,要在修改密碼時通過限制口令的長度和復(fù)雜性解決,如下列出了幾個常見的強口令標(biāo)準(zhǔn):
(1)賬號和口令嚴(yán)禁使用出廠默認(rèn)、易被猜測的字符串;
(2)口令長度至少8位,系統(tǒng)最高權(quán)限通行字口令長度至少應(yīng)為12位;
(3)口令應(yīng)包含數(shù)字、大小寫字母,特殊字符中至少三類;
(4)口令不應(yīng)包含用戶名的信息,例如口令不得包含賬號完整字符,大小寫變位或形似變換的字符串;
(5)口令設(shè)置應(yīng)避免鍵盤排序密碼。
系統(tǒng)在處理用戶的輸入內(nèi)容的時候,傳輸過程中需對用戶密碼等敏感信息進(jìn)行加密,避免信息在傳輸過程中“裸奔”。建議按照網(wǎng)站的密級要求,在傳輸過程中對用戶的敏感信息使用加密方式傳輸。
可以使用HTTPS加密的方式,但這種方式或許會影響用戶體驗。即使使用了HTTPS訪問,也會有明文傳輸?shù)膯栴}。這是因為在敏感信息在客戶端的應(yīng)用層往傳輸層傳送時未做加密,當(dāng)客戶端被攻破或者存在病毒時,用戶名密碼等敏感信息是可能被竊取到的。這時在網(wǎng)站前端做加密處理后再進(jìn)行傳輸,就顯得很有必要。
安全漏洞掃描主要側(cè)重于因應(yīng)用的版本漏洞、未限制遠(yuǎn)程訪問協(xié)議等引起的安全問題,這些安全問題很可能為攻擊者提供潛在攻擊信息,間接助力攻擊者進(jìn)行攻擊。下面列出了幾條這種類型的問題及解決方法:
(1)安裝的應(yīng)用程序存在安全漏洞時,要及時升級補丁、升級版本;
(2)遠(yuǎn)程主機會回復(fù)ICMP_TIMESTAMP查詢并返回它們系統(tǒng)的當(dāng)前時間,這可能允許攻擊者攻擊一些基于時間認(rèn)證的協(xié)議。建議在防火墻上過濾外來的ICMP timestamp報文以及外出的ICMP timestamp回復(fù)報文;
(3)攻擊者可以利用Traceroute探測來獲取掃描器與遠(yuǎn)程主機之間的路由信息,通過這些路由信息來了解目標(biāo)網(wǎng)絡(luò)的網(wǎng)絡(luò)拓。建議在防火墻中禁用Time Exceeded類型的ICMP包;
(4)檢測遠(yuǎn)端HTTP Server信息或通過HTTPS獲取遠(yuǎn)端HTTP服務(wù)器信息,這可能使得攻擊者了解遠(yuǎn)程系統(tǒng)類型以便進(jìn)行下一步的攻擊。建議改變HTTP服務(wù)器的缺省banner。
在某運營平臺上線之前,第三方網(wǎng)絡(luò)安全公司分別就上文的四種檢測方法進(jìn)行了安全檢測。我們對檢測報告中出現(xiàn)的絕大部分問題進(jìn)行了修改,僅因項目需要保留了極小部分低風(fēng)險問題。表1所示為安全問題解決前后,4種檢測方法的報告對比圖??梢钥闯?,經(jīng)過安全整改后,系統(tǒng)的安全性達(dá)到了令人滿意的提升。
表1 針對某運營平臺整改前后的4種檢測報告對比
在某運營平臺的開發(fā)過程中,采用幾種常見的安全檢測方法對其進(jìn)行檢測,對檢測到的安全問題及隱患提前做出處理,大大減少了工作量、讓部署交付及時完成。本文結(jié)合該平臺修復(fù)安全問題的實踐經(jīng)歷,收集檢測過程中出現(xiàn)的典型安全問題,論述了常見的可行解決策略。希望在以后的開發(fā)過程中減少這些安全問題的出現(xiàn),避免因安全問題造成人力物力的浪費、交付期限的推遲,響應(yīng)護(hù)網(wǎng)行動,建設(shè)能打硬仗、網(wǎng)絡(luò)安全的運營平臺。