網站安全攻與防的啟示錄
背景 黑客文化的變遷
黑客技術的出現像計算機出現一樣長久,黑客通過對系統重配置或者重編程獲得本來沒有的權限。早期的黑客因為對計算機的神秘功能著迷,本著自由的精神在計算機世界里流連而不能自拔。這種自由精神一方面吸引了大批聰明的青年學生投入其中,從而在早期推動了計算機的飛速發展。
在上世紀六十年代,他們利用一些技術破壞計算機網絡的使用范圍,七十年代因為特殊的美國的那種背景,他們提出了計算機應該為人民所用的口號,他們是電腦史上的英雄。到了八十年代,PC已經很便宜了,美國與歐洲的經濟得到了長足的發展,黑客們開始為信息共享而奮斗,當時美蘇爭霸,他們認為應該使兩國處于平衡狀態,任何一個國家都不能過分強大,否則就會給新的和平帶來威脅,他們就積極聯絡各國,把通過黑客技術拿到的資料賣給各國,一方面自己獲得了經濟收入,另一方面他們也認為有助于世界的和平,認為自己為世界和平作出了貢獻。九十年代可以說是黑客的災難和混亂時期,作為信息共享的產物,INTERNET一方面為我們提供了極大的便利,另一方面,使用的人多了,技術不再是少數人的專有權力,越來越多的人都掌握了這些,導致了黑客的概念與行為都發生了很大的變化。
到了二十一世紀,隨著互聯網的高速發展以及網民爆發式的增長,一個黑客市場已經形成。境外情報機構、企業公司和犯罪團伙都愿意付錢買下有關安全漏洞——以及如何加以利用——的信息。各種網絡犯罪每天充斥在我們生活當中,黑客們通過入侵各類網站論壇進行盜取用戶數據,并掛上網頁木馬繼續盜取訪問網站用戶的個人虛擬財產等等。
2011年度網絡犯罪調查報告顯示,全球每天就有100萬人成為網絡犯罪的受害者,全球因網絡犯罪造成的直接損失每年達 1140 億美元。因處理網絡犯罪問題而浪費的時間價值是2740億。因此,網絡犯罪導致的損失約為3880億美元,遠遠超過了大麻、可卡因和海洛因全球黑市的交易總額(2880億美元)。從網絡犯罪受害者人數來看,中國地區的網絡犯罪相較于全球可能更加惡劣:去年,全球有4.31億成人遭受過網絡犯罪的侵害,這其中就有差不多一半的受害者(1.96億人)來自中國。黑客的網絡犯罪已經達到了一個前所未有的高度。#p#
一、互聯網的安全威脅
從1969年區域性的大學主機相連而構成的互聯網發展到今天覆蓋全球點點滴滴的強大互聯網,特別在是互聯網的經濟與科技領域取得的顯著成果,給互聯網披上的神話般的面紗。如今,互聯網豐富了我們的生活,這所有的一切都來源于Web,Web系統是互聯網的重要組成部分,形形色色的Web系統正在改變著我們的生活互聯網應用已經滲透我們生活的方方面面,我們可以通過百度在線搜索想要的資料、可以通過網上銀行完成在線購物和支付、可以通過微博和博客發表自己的“聲音”、可以通過在線交友網站交到朋友。
但是由于這些WEB應用在設計時是允許任何人、從任何地方登陸進入訪問,因而也成為了通往隱藏在深處的重要數據的橋梁。據推算,互聯網至少每39秒就有一次攻擊。
國家互聯網應急響應中心發布的《2011年中國互聯網網絡安全態勢報告》
2011年年底的CSDN泄密門事件導致國內600萬程序員的個人信息被盜取,雖然CSDN及時修復了漏洞,警方也及時抓住了犯罪嫌疑人,但今年依然有犯罪分子通過去年CSDN泄漏的帳號密碼偷竊國內知名電商“京東商城”的用戶賬戶,通過賬戶里的剩余資金大量購買商品。
這些曝光的安全泄密事件僅僅是個警鐘,被公開的這些網站的數據庫很早之前就被黑客拖庫,而且轉手買來賣去,眼下所見的都是被人榨干最后一滴水的陳年資料。誰能保證隱藏在暗處中的黑客們還有其他更多未曝光的資料呢。
那么,黑客們是如何獲取我們的重要信息,網站又是如何被拖庫的呢?#p#
二、黑客攻擊WEB典型案例分解
下面我們為大家分解黑客入侵者的滲透WEB網站的主流手段。
假設目標站點http://192.168.40.21/是一個大型綜合類網站,會員數目眾多。
1.鎖定目標、搜集信息
黑客入侵一個目標站點的時候,首先要看該站點是否存在利益價值。目前黑客入侵者的商業攻擊主要針對在線購物網站、社交網站、網絡游戲、大型論壇、慈善機構、電子政務、金融證券網站等網站。這些網站可以竊取會員用戶信息進行社工欺騙,比如利用獲取的身份信息對用戶親屬進行電話詐騙、利用大部分人習慣用同一個帳號密碼的習慣去嘗試登錄其他網站,并且這些會員信息可以多次出售專賣;黑客入侵者還可以通過入侵政府網站掛“黑鏈”,因為政府網站在搜索引擎中占據的權重較高,攻擊者可以通過此方法使自己指定的網站插入到政府網站頁面中,從而提供其在搜索引擎中的排名靠前并盈利。
黑鏈是SEO手法中相當普遍的一種手段,籠統地說,它就是指一些人用非正常的手段獲取的其它網站的反向鏈接,最常見的黑鏈就是通過各種網站程序漏洞獲取搜索引擎權重或者PR較高的網站的WEBSHELL,進而在被黑網站上鏈接自己的網站,其性質與明鏈一致,都是屬于為高效率提升排名,而使用的作弊手法。
#p#
在確定目標后,黑客入侵者就會搜集該目標站點的相關信息,一次入侵的成功與前期的信息收集關系很大。搜集信息可以讓入侵起到事半功倍的效果,只經過一些簡單的操作就可以得到一些服務器的Webshell,甚至于系統管理權限,搜集信息一般分為三種:
①工具掃描:黑客入侵者會使用各種掃描工具對入侵目標進行大規模掃描,得到系統信息和運行的服務信息,如對方所使用的操作系統、開放了哪些端口、存在哪些漏洞。典型的掃描工具有:
Nmap掃描目標網站端口開放信息
②社會工程攻擊:利用各種查詢手段得到與被入侵目標相關的一些信息,通常通過這種方式得到的信息,會被社會工程學這種入侵手法用到,而且社會工程學入侵手法也是最難察覺和防范的。
社會工程學(Social Engineering):通常是利用大眾的疏于防范的詭計,讓受害者掉入陷阱。該技巧通常以交談、欺騙、假冒或口語用字等方式,從合法用戶中套取敏感的信息,例如:用戶名單、用戶密碼及網絡結構,即使很警惕很小心的人,一樣也有可能被高明的社會工程學手段損害利益,可以說是防不勝防。網絡安全是一個整體,對于某個目標在久攻不下的情況下,黑客會把矛頭指向目標的系統管理員,因為人在這個整體中往往是最不安全的因素,黑客通過搜索引擎對系統管理員的一些個人信息進行搜索,比如電子郵件地址、MSN、QQ等關鍵詞,分析出這些系統管理員的個人愛好,常去的網站、論壇,甚至個人的真實信息。然后利用掌握的信息與系統管理員拉關系套近乎,騙取對方的信任,使其一步步落入黑客設計好的圈套,最終造成系統被入侵。這也就是我們常說的“沒有絕對的安全,只有相對的安全,只有時刻保持警惕,才能換來網絡的安寧”。
③公開域信息:主要通過Google Hacking和Whios等手段獲取信息。
Google Hacking:指利用Google Google搜索引擎搜索信息來進行入侵的技術和行為,不少入侵者利用Google強大的搜索功能來搜索某些關鍵詞,找到有系統漏洞和Web漏洞的服務器,打造成自己的肉雞。
敏感的信息包括:
目標站點的信息
已丟失信息的追回
存儲密碼的文件
后臺管理和上傳文件的 Web 頁
數據庫
特定擴展名的文件
特定的Web程序,如論壇
Whios:Whois協議,是一種信息服務,通過向服務器的TCP端口43建立一個連接后,對輸入的關鍵詞進行查詢,能夠提供有關所有DNS域和負責各個域的系統管理員數據,其中記錄著每個互連網站點的詳細信息,其中包括域名、服務器地址、聯絡人、電話號碼和地址。我們可以以Web方式查詢,比如到http://whois.www.net.cn/或者http://whois.webhosting.info查詢,假設我們要查詢www.baidu.com的域名信息,我們到http://whois.www.net.cn/查詢的結果如圖:
通過上面的介紹我們對黑客攻擊前的踩點和信息搜集有了認識,目前我們已經得知目標站點http://192.168.40.21/主要開放了HTTP 80端口,遠程登錄RDP 3389端口;服務器采用的WINDOWS系統,中間件使用的Apache Tomcat,網站腳本語言用的JSP。#p#
2、深入攻擊階段
利用SQL注入“拖庫”
在深入攻擊的過程中,首先攻擊者需要找到一個動態鏈接的URL看是否存在SQL注入漏洞,例如現在找到一個http://192.168.40.21/news.jsp?id=127,通過簡單的注入嘗試語句發現該URL確實存在SQL注入漏洞,攻擊者一般為了節省時間都會使用工具來促進效率。
通過工具攻擊者獲取到了服務器的環境變量,數據庫結構,并且獲取了該網站的所有用戶數據,共7580條用戶數據信息,這個獲取用戶數據的過程就是我們常說的“拖庫”。
拖庫:拖庫一詞多用于數據庫程序員專業人士使用,語意:從數據庫導出數據。很多時候數據庫的資料需要導出來在別的地方使用,并且數據庫資料可以導出好幾種格式,例如:TXT,XLS等格式。黑客攻擊者拖庫最簡單的形式就是找SQL注入點直接寫工具拖。
拖庫的危害:根據資料顯示部分網民習慣為郵箱、微博、游戲、網上支付、購物等帳號設置相同密碼,一旦數據庫被泄漏,所有的用戶資料被公布于眾,任何人都可以拿著密碼去各個網站去嘗試登錄,對一些敏感的金融行業是致命的危害,對普通用戶可能造成財產,個人隱私的損失或泄漏。
“拖庫”完成后如果還想擴大攻擊范圍,我們可以繼續嘗試其他攻擊手段,獲取WEBshell。
WEBshell:“web”的含義是顯然需要服務器開放web服務,“shell”的含義是取得對服務器某種程度上操作權限。webshell常常被稱為匿名用戶(入侵者)通過網站端口對網站服務器的某種程度上操作的權限。由于webshell其大多是以動態腳本的形式出現,也有人稱之為網站的后門工具。#p#
利用FCKeditor編輯器漏洞獲取WEBshell
現在打開網站先注冊一個會員賬戶testweb,在用戶管理中信——投稿管理——發布稿件的地方發現該網站使用了一款名為FCKeditor在線編輯器。FCKeditor是一款在線編輯器,能夠在線進行文字和圖片的編輯等工作,通常會作為一個編輯部件嵌入其他的一些程序中。我們平時泡論壇,寫博客,經常可以在網頁中對我們的文字或圖片進行簡單的編輯。FCKeditor的應用十分廣泛,但是漏洞也非常多。
現在來測試下FCKeditor最為普遍的上傳漏洞。打開圖片上傳選項,然后選擇準備好的JSP木馬上傳,發現被禁止上傳圖片文件格式以外的文件。不過它在上傳文件判斷的時候采用的是本地驗證后綴名方式,所以攻擊者可以通過代理工Burpsuitepro來進行上傳,先修改JSP木馬的后綴為JPG圖片格式,比如把1.jsp改為2.jpg;然后Burpsuitepro抓包阻斷上傳的內容,把上傳的2.jpg再改回1.jsp,從而繞過網站編輯器本地驗證的過程,成功上傳文件得到一個Webshell。
圖 利用工具抓包修改上傳內容
圖 成功上傳JSP木馬,得到一個WEBshell
#p#
利用WEBshel獲取服務器系統權限
利用WEBshell先查看下網站的配置文件,看是否有可以利用的資源。
圖 網站配置文件
上圖的配置文件可以看到網站的數據庫服務器的地址及帳號密碼,如果數據庫服務器沒有做安全防護配置,攻擊者就可以直接通過獲取到的信息鏈接到數據庫服務器導出網站的全部數據。
現在再看看網站的賬戶權限,在WEBshell中執行cmd命令:whoami
得到的反饋結果是“nt authority\system”,現在可以判斷網站本身的權限是服務器系統管理員權限,攻擊者就可以執行添加系統用戶的命令:
◆Net user hacker hacker /add 添加用戶名是hacker密碼也是hacker的普通用戶
◆Net localgroup administrators hacker /add 講hacker賬戶的權限提升為管理員權限
圖 添加帳號hacker
圖 提升hacker的權限
之前在搜集信息的時候就得知網站服務器開放了遠程登錄3389端口,現在攻擊者就用剛剛添加的管理員hacker帳號登錄服務器。
現在攻擊者已經成功登錄網站服務器。
#p#
惡意篡改網頁
現在整個網站和服務器都在攻擊者的掌控之中,攻擊者可以隨意刪除、修改、增加網頁,插入網頁木馬等。現在假設攻擊者要令網站首頁成為黑頁。
黑頁:一些計算機被入侵后,入侵者為了證明自己的存在,對網站主頁(在服務器開放WEB服務的情況下) 進行改寫,從而公布入侵者留下的信息,這樣的網頁通常稱為黑頁。
入侵者對網站主頁的破壞,無疑會給網站帶來經濟、信譽等等方面的損失。
同時另一方面傳播著入侵者留下的帶有負面影響的信息或者病毒,嚴重影響網絡安全。#p#
三、WEB應用安全與數據庫安全的防護
前面我們已經了解了黑客是如何入侵竊取我們的數據并破壞網站的過程,所以我們對WEB應用安全的威脅應該采取積極防御并及時解決的態度。
首先我們要了解為什么網站會出現這么多的問題這么多的漏洞:由于某些開發人員犯了非常低級的編程錯誤,比如:應用ID只能被應用使用,而不能被單獨的用戶或是其它進程使用。但是開發人員不這么做,他們給予了應用程序更多的數據訪問權限。這就類似于醫生因沒有洗手而傳播了傳染病,從而導致各種漏洞的出現。
我們必須接受已經存在的應用缺陷和漏洞。通過發揮數據庫管理員的安全職責去阻止因為應用缺陷和漏洞所造成的不良后果。如果開發人員不重視應用與數據交互的安全性,堅持最小權限原則,數據庫管理員則有權在這場互動中占取主動,不給開發人員全權委托,數據庫管理員可以不允許那么多的交互被授權;為了阻止黑客的滲透攻擊從不可避免的網絡程序應用漏洞中占便宜,數據庫管理員也有權進行其他有效的安全控制。并且數據庫管理員應對數據庫進行加密保護,如密碼不能使用明文保存;對所有應用層和數據層通信的審計監控將有助于快速識別和解決問題以及準確地判斷任何安全事件的范圍,直到實現安全風險最小化的目標。
假如出現數據外泄事件(如2011年年底的CSDN等網站的用戶數據信息泄密事件),責任也不止是在數據庫管理員身上,開發人員也需要共同承擔責任。其中一個非常重要的方面,開發人員能做的就是在用戶能輸入的地方最好過濾危險字符,這樣可以防止黑客通過諸如SQL注入攻擊獲取到數據庫的敏感信息。目前在各類行業網站上,各種WEB應用漏洞隨處可見,可以被黑客們檢測到(他們一般會用軟件同時掃描數千個網站)。
開發人員在完成一套新的應用程序后應使用安全檢測工具對其進行反復白盒測試,有條件的情況下可以請信息安全人員模擬黑客進行黑盒滲透測試,盡可能的發現應用程序的弱點并進行修補。如果想實現更完整的解決方案,更多有關的保護數據和數據庫是應當實施源代碼分析。這是一項冗長的處理過程,可以請安全服務提供商用專業的源碼審計軟件對應用程序代碼進行詳細的分析處理,這些工具會直接查找出更精確的缺陷結果。
同時應該與開發商或者安全廠商合作并確保能提供安全解決方案,這對于任何致力于部署網絡應用數據庫正常安全訪問的用戶都至關重要,WEB應用安全測試對于確保數據庫的安全性有至關重要的作用。
一款好的工具可以有助于加快進度并且提供更好的檢測結果和解決方案,以提供應用程序更好的的安全性,關鍵是進行反復評估以確保管理工作正常,對結果實施驗證并加固,確保風險一經發現立即補救,并保證管理人員能夠了解到相關問題的存在。#p#
黑盒測試
黑盒測試是一種把軟件產品當成是一個黑箱的測試技術,這個黑箱有入口和出口,測試過程中只需要了解黑箱的輸入和輸出結果,不需要了解黑箱里面具體是怎樣操作的。這當然很好,因為測試人員不用費神去理解軟件里面的具體構成和原理,測試人員只需要像用戶一樣看待軟件產品就行了。
例如,銀行轉賬系統提供給用戶轉賬的功能,則測試人員在使用黑盒測試方法時,不需要知道轉賬的具體實現代碼是怎樣工作的,只需要把自己當成用戶,模擬盡可能多的轉賬情況來檢查這個軟件系統能否按要求正常實現轉賬功能即可。
如果只像用戶使用和操作軟件一樣去測試軟件黑盒測試可能存在一定的風險。例如,某個安全性要求比較高的軟件系統,開發人員在設計程序時考慮到記錄系統日志的必要性,把軟件運行過程中的很多信息都記錄到了客戶端的系統日志中,甚至把客戶端連接服務器端的數據庫連接請求字符串也記錄到了系統日志中,像下面的一段字符串:
"Data Source=192.168.100.99;Initial Catalog=AccountDB;User ID=sa;PassWord=123456;
那么按照黑盒測試的觀點,這是程序內部的行為,用戶不會直接操作數據庫的連接行為,因此檢查系統日志方面的測試是不會做的。這明顯構成了一個Bug,尤其是對于安全性要求高的軟件系統,因為它暴露了后臺數據庫賬號信息。
有人把黑盒測試比喻成中醫,做黑盒測試的測試人員應該像一位老中醫一樣,通過“望、聞、問、切”的方法,來判斷程序是否“有病”。這比單純的操作黑箱的方式進了一步,這種比喻給測試人員一個啟示,不要只是簡單地看和聽,還要積極地去問,積極地去發現、搜索相關的信息。應該綜合應用中醫看病的各種“技術”和理念來達到找出軟件“病癥”的目的,具體作法如下:
“望”,觀察軟件的行為是否正常;
“聞”,檢查輸出的結果是否正確;
“問”,輸入各種信息,結合“望”、“聞”來觀察軟件的響應程度;
“切”,像中醫一樣給軟件“把脈”,敲擊一下軟件的某些“關節”。
#p#
白盒測試
如果把黑盒測試比喻成中醫看病,那么白盒測試無疑就是西醫看病了。測試人員采用各種儀器和設備對軟件進行檢測,甚至把軟件擺上手術臺解剖來看個究竟。白盒測試是一種以理解軟件內部結構和程序運行方式為基礎的軟件測試技術,通常需要跟蹤一個輸入經過了哪些處理,這些處理方式是否正確。
在很多測試人員,尤其是初級測試人員看來,白盒測試是一種只有非常了解程序代碼的高級測試人員才能做的測試。熟悉代碼結構和功能實現的過程當然對測試有很大的幫助,但是從黑盒測試與白盒測試的區別可以看出,有些白盒測試是不需要測試人員懂得每一行程序代碼的。
如果把軟件看成一個黑箱,那么白盒測試的關鍵是給測試人員戴上一副X光透視眼鏡,測試人員通過這副X光透視眼鏡可以看清楚輸入到黑箱中的數據是怎樣流轉的。
一些測試工具就像醫院的檢測儀器一樣,可以幫助了解程序的內部運轉過程。例如,對于一個與SQL Server數據庫連接的軟件系統,可以簡單地把程序的作用理解為:把用戶輸入的數據通過SQL命令請求后臺數據庫,數據庫把請求的數據返回給程序的界面層展示給用戶。可以把SQL Server自帶的工具事件探查器當成是一個檢查SQL數據傳輸的精密儀器,它可以記錄軟件客戶端與服務器數據庫之間交互的一舉一動,從而讓測試人員可以洞悉軟件究竟做了哪些動作。
在測試過程中,應該綜合應用黑盒測試方法和白盒測試方法,按需要采用不同的技術組合。不要用黑盒測試方法和白盒測試方法來劃分自己屬于哪一類測試人員,一名優秀的測試人員應該懂得各種各樣的測試技術和查找Bug的手段。
最后我們談談新的防火墻問題。到目前為止,我們都是側重于預防措施。但在現實世界中,我們不可能總是改編程序和環境,所以我們必須采用其他技術措施。這就是為什么會產生新的防火墻。
防火墻用于應用程序或者監控流量的運行監控,也可以在執行運行時進行分析。防火墻可以找出攻擊,并阻止嘗試或修改的要求,來確保WEB服務器和數據庫服務器的安全運行。
目前不光有WEB應用防火墻和網絡防火墻能防范攻擊者透過應用層和網絡層的攻擊;“數據庫防火墻”也于這兩年在不斷的數據庫泄密事件中出現在公眾的視線里,國內稱之為“數據庫審計”產品,這些產品能給數據庫提供實時的網絡存儲與訪問的安全。
任何一個好的數據庫安全策略都應包括監控和審計,以確保保護對象正常運行,并且運行在正確的位置上,這也是個非常耗時的過程。由于缺乏時間和工具,大多數用戶對于數據庫配置的檢查往往也僅是抽查而已。
這里還需要指出的是目前多數人認為“數據庫審計”等同于數據庫安全,事實上,數據庫安全遠遠不是數據庫審計可以搞定的,數據庫審計只是數據庫安全的一個很小的方面,之所以有時候對等起來,一方面是由于市場宣傳導致的誤導,另一方面的確是這個部分的問題比較容易產品化/工具化,技術實現相對比較成熟。數據庫安全應該包括:數據庫資產管理、數據庫配置加固、職責分離、特權用戶控制、數據庫弱點掃描和補丁管理、數據庫加密、數據庫審計。
最后,我們還是回到應用程序的安全以及與數據庫之間的相互作用問題上。即我們必須要考慮到的問題是應用程序的安全以及與數據庫之間的相互作用,尤其是對于當今流行的高度動態的和互動的網絡應用程序而言。理解數據庫與應用程序和系統環境之間的作用可以更加提升數據的安全性。