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