基本簡介
安全漏洞(security hole)
安全漏洞是指受限制的計算機、組件、應用程式或其他在線上資源的無意中留下的不受保護的入口點。漏洞是硬體軟體或使用策略上的缺陷,他們會使計算機遭受病毒和黑客攻擊。
漏洞特性
漏洞是在硬體、軟體、協定的具體實現或系統安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權的情況下訪問或破壞系統。具體舉例來說,比如在Intel Pentium晶片中存在的邏輯錯誤,在Sendmail早期版本中的編程錯誤,在NFS協定中認證方式上的弱點,在Unix系統管理員設定匿名Ftp服務時配置不當的問題都可能被攻擊者使用,威脅到系統的安全。因而這些都可以認為是系統中存在的安全漏洞。
漏洞與具體系統環境之間的關係及其時間相關特性
漏洞會影響到很大範圍的軟硬體設備,包括作系統本身及其支撐軟體,網路客戶和伺服器軟體,網路路由器和安全防火牆等。換而言之,在這些不同的軟硬體設備中都可能存在不同的安全漏洞問題。在不同種類的軟、硬體設備,同種設備的不同版本之間,由不同設備構成的不同系統之間,以及同種系統在不同的設定條件下,都會存在各自不同的安全漏洞問題。
漏洞問題是與時間緊密相關的。一個系統從發布的那一天起,隨著用戶的深入使用,系統中存在的漏洞會被不斷暴露出來,這些早先被發現的漏洞也會不斷被系統供應商發布的補丁軟體修補,或在以後發布的新版系統中得以糾正。而在新版系統糾正了舊版本中具有漏洞的同時,也會引入一些新的漏洞和錯誤。因而隨著時間的推移,舊的漏洞會不斷消失,新的漏洞會不斷出現。漏洞問題也會長期存在。
因而脫離具體的時間和具體的系統環境來討論漏洞問題是毫無意義的。只能針對目標系統的作系統版本、其上運行的軟體版本以及服務運行設定等實際環境來具體談論其中可能存在的漏洞及其可行的解決辦法。
同時應該看到,對漏洞問題的研究必須要跟蹤當前最新的計算機系統及其安全問題的最新發展動態。這一點如同對計算機病毒發展問題的研究相似。如果在工作中不能保持對新技術的跟蹤,就沒有談論系統安全漏洞問題的發言權,即使是以前所作的工作也會逐漸失去價值。
常見安全漏洞
代碼注入。包括SQL注入在內的廣義攻擊,它取決於插入代碼並由應用程式執行。
會話固定。這是一種會話攻擊,通過該漏洞攻擊者可以劫持一個有效的用戶會話。會話固定攻擊可以在受害者的瀏覽器上修改一個已經建立好的會話,因此,在用戶登錄前可以進行惡意攻擊。
路徑訪問,或者“目錄訪問”。該漏洞旨在訪問儲存在Web根檔案外的檔案或者目錄。
弱密碼,字元少、數字長度短以及缺少特殊符號。這種密碼相對容易破解。
硬編碼加密密鑰,提供一種虛假的安全感。一些人認為在存儲之前將硬編碼密碼分散可以有助於保護信息免受惡意用戶攻擊。但是許多這種分散是可逆的過程。
系統關係
漏洞與計算機系統的關係
漏洞問題與不同安全級別計算機系統之間的關係
計算機系統安全的分級標準一般都是依據“橘皮書”中的定義。橘皮書正式名稱是“受信任計算機系統評量基準”(Trusted Computer System Evaluation Criteria)。橘皮書中對可信任系統的定義是這樣的:一個由完整的硬體及軟體所組成的系統,在不違反訪問許可權的情況下,它能同時服務於不限定個數的用戶,並處理從一般機密到最高機密等不同範圍的信息。
橘皮書將一個計算機系統可接受的信任程度加以分級,凡符合某些安全條件、基準規則的系統即可歸類為某種安全等級。橘皮書將計算機系統的安全性能由高而低劃分為A、B、C、D四大等級。其中:
D級——最低保護(Minimal Protection),凡沒有通過其他安全等級測試項目的系統即屬於該級,如Dos,Windows個人計算機系統。
C級——自主訪問控制(Discretionary Protection),該等級的安全特點在於系統的客體(如檔案、目錄)可由該系統主體(如系統管理員、用戶、應用程式)自主定義訪問權。例如:管理員可以決定系統中任意檔案的許可權。當前Unix、Linux、Windows NT等作系統都為此安全等級。
B級——強制訪問控制(Mandatory Protection),該等級的安全特點在於由系統強制對客體進行安全保護,在該級安全系統中,每個系統客體(如檔案、目錄等資源)及主體(如系統管理員、用戶、應用程式)都有自己的安全標籤(Security Label),系統依據用戶的安全等級賦予其對各個對象的訪問許可權。
A級——可驗證訪問控制(Verified Protection),而其特點在於該等級的系統擁有正式的分析及數學式方法可完全證明該系統的安全策略及安全規格的完整性與一致性。 '
可見,根據定義,系統的安全級別越高,理論上該系統也越安全。可以說,系統安全級別是一種理論上的安全保證機制。是指在正常情況下,在某個系統根據理論得以正確實現時,系統應該可以達到的安全程度。
系統安全漏洞是指可以用來對系統安全造成危害,系統本身具有的,或設定上存在的缺陷。總之,漏洞是系統在具體實現中的錯誤。比如在建立安全機制中規劃考慮上的缺陷,作系統和其他軟體編程中的錯誤,以及在使用該系統提供的安全機制時人為的配置錯誤等。
安全漏洞的出現,是因為人們在對安全機制理論的具體實現中發生了錯誤,是意外出現的非正常情況。而在一切由人類實現的系統中都會不同程度的存在實現和設定上的各種潛在錯誤。因而在所有系統中必定存在某些安全漏洞,無論這些漏洞是否已被發現,也無論該系統的理論安全級別如何。
所以可以認為,在一定程度上,安全漏洞問題是獨立於作系統本身的理論安全級別而存在的。並不是說,系統所屬的安全級別越高,該系統中存在的安全漏洞就越少。
可以這么理解,當系統中存在的某些漏洞被入侵者利用,使入侵者得以繞過系統中的一部分安全機制並獲得對系統一定程度的訪問許可權後,在安全性較高的系統當中,入侵者如果希望進一步獲得特權或對系統造成較大的破壞,必須要克服更大的障礙。
安全漏洞與系統攻擊的關係
安全漏洞與系統攻擊之間的關係
系統安全漏洞是在系統具體實現和具體使用中產生的錯誤,但並不是系統中存在的錯誤都是安全漏洞。只有能威脅到系統安全的錯誤才是漏洞。許多錯誤在通常情況下並不會對系統安全造成危害,只有被人在某些條件下故意使用時才會影響系統安全。
漏洞雖然可能最初就存在於系統當中,但一個漏洞並不是自己出現的,必須要有人發現。在實際使用中,用戶會發現系統中存在錯誤,而入侵者會有意利用其中的某些錯誤並使其成為威脅系統安全的工具,這時人們會認識到這個錯誤是一個系統安全漏洞。系統供應商會儘快發布針對這個漏洞的補丁程式,糾正這個錯誤。這就是系統安全漏洞從被發現到被糾正的一般過程。
系統攻擊者往往是安全漏洞的發現者和使用者,要對於一個系統進行攻擊,如果不能發現和使用系統中存在的安全漏洞是不可能成功的。對於安全級別較高的系統尤其如此。
系統安全漏洞與系統攻擊活動之間有緊密的關係。因而不該脫離系統攻擊活動來談論安全漏洞問題。了解常見的系統攻擊方法,對於有針對性的理解系統漏洞問題,以及找到相應的補救方法是十分必要的。
常見方法
常見攻擊方法與攻擊過程的簡單描述
系統攻擊是指某人非法使用或破壞某一信息系統中的資源,以及非授權使系統喪失部分或全部服務功能的行為。
通常可以把攻擊活動大致分為遠程攻擊和內部攻擊兩種。隨著網際網路的進步,其中的遠程攻擊技術得到很大發展,威脅也越來越大,而其中涉及的系統漏洞以及相關的知識也較多,因此有重要的研究價值。
尋找客戶端漏洞
目標:客戶端的漏洞?
客戶端易受攻擊:IE,Outlook,Firefox,MSN,Yahoo etc.
黑客利益的驅使:Botnet,Visa,CD-Key,DDOS etc.
發現漏洞較容易(More 0day?):較容易發現,新的領域
為什麼挖掘圖像格式中的漏洞?
Windows,Linux等作業系統支持多種圖像格式:Bmp, GIF, JPG, ANI, PNG etc.檔案格式眾多,代碼複雜易找到漏洞
Windows中很多圖像格式解析的實現方式與開原始碼及其相似,經常發現同一bug;(Why?)
黑客們並沒有在每種格式中發現漏洞,沒有足夠的“eyes”關注
從安全人員的角度:
格式眾多,算法複雜容易出現漏洞
影響範圍極廣跨套用跨平台,例如:
Windows 平台上任何解析jpg 的套用,office,outlook,IE...GDIPLUS.dll
Windows 核心實現對Ani 的支持,通過ie 不需要用戶互動操作。誰會懷疑網頁上的指針檔案?
PNG Msn, libpng 很多開源軟體
隱蔽性嚴重威脅用戶安全
從黑客的角度:
如果利用圖像格式觸發的漏洞,會降低了受害者的警覺性,易利用社會工程學。蠕蟲傳播可能利用一些非常容易讓人警惕的檔案格式,但我們討論的是圖片格式jgp, png, ani...不容易讓人引起懷疑
多種攻擊媒介,利於黑客攻擊:通過網頁,郵件可以穿越防火牆的保護,IDS不易檢查,需要對各種格式,協定進行解析才能檢查出漏洞攻擊。
圖像的基本格式
流格式由很多段構成,段裡面又由標記,參數(漏洞點),數據段構成
還可能有段裡面再嵌套段(漏洞點)
Gif,Ani可能包含很多幀,刷新率,幀的索引(漏洞點)
可能會有標記圖形模式的bit-map,可能會有邏輯上的錯誤png
JPG格式中的漏洞
先來一個實際的例子:
GDIPlus.DLL漏洞MS04-028 Nick DeBaggis
影響巨大,攻擊很多
漏洞產生原因:
JPEG格式中的注釋段(COM)由0xFFFE開始(標記)+2位元組得注釋段位元組數(參數) +注釋(數據)構成。因為位元組數這個參數值包含了本身所占的2位元組,所以GDIPLUS.dll在解析jpg格式檔案中的注釋段時會把這個值減去2,如果這個值設定成0,1就會產生整數溢出。
JPG格式中的漏洞
是不是覺得很相似?
2000 Solar Designer 發現了Netscape 瀏覽器的JPEG 解析漏洞,與Nick DeBaggis 發現的漏洞原理是相同的。
另一個相似的例子
Stefan Esser發現的XBOX Dashboard local vulnerability,該漏洞存在於XBOX Dashboard對.wav格式和.xtf格式檔案的解析上,雖然說不是圖形格式但漏洞原理卻相同。
細節:同樣存在一個size參數這次是它本身的大小是4位元組,所以當size值為0-3時就會發生整數溢出。
疑問:為什麼有些人從偶blog轉文章就不寫出處呢 也算是我翻來搜去搞來的文章呀bY FIRef0x
疑問:為什麼會一再出現同類型的漏洞?
是否程式設計師們從概念上忽略了某些問題?
為什麼都是整數溢出漏洞?
此類漏洞的本質是什麼?
是否還有這種漏洞?
問題的本質
這些檔案格式是由很多“段”構成的數據流,而每個段由:標記,參數,數據等結構構成,在程式解析這些檔案格式的時候會依據“標記”來確認段,並讀勸參數” 進行一定的運算,再依據這些參數來處理隨後緊跟的“數據”。以上提到的幾個漏洞的產生原因就是在對參數進行運算的時候相信了檔案輸入的參數沒有進行確認而導致的。
思維擴展
不要相信用戶的輸入,同樣不要相信檔案的輸入;
包括標記,錯誤的標記也會導致問題
包括參數,詳細檢查輸入參數
包括數據,數據裡面可能還嵌套著另一個“段”
思維擴展的結果
Venustech AD-Lab:Windows LoadImage API Integer Buffer overflow
影響極為廣泛: bmp,cur,ico,ani格式的檔案都受影響。
描述:
WINDOWS的USER32庫的LoadImage系統API 存在著整數溢出觸發的緩衝區溢出漏洞,這個API允許載入一個bmp,cur,ico,ani格式的圖示來進行顯示,並根據圖片格式里說明的大小加4來進行數據的拷貝,如果將圖片格式里說明的大小設定為0xfffffffc-0xffffffff,則將觸發整數溢出導致堆緩衝區被覆蓋。攻擊者可以構造惡意的bmp,cur,ico,ani格式的檔案,嵌入到HTML頁面,郵件中,傳送給被攻擊者,成功利用該漏洞則可以獲得系統的許可權。
LoadImage API 整數溢出漏洞分析
代碼:
.text:77D56178 mov eax, [ebx+8] //Direct read our size here:P
.text:77D5617B mov [ebp+dwResSize], eax
.text:77D5617E jnz short loc_77D56184
.text:77D56180 add [ebp+dwResSize], 4 //add 4 int overflow...
.text:77D56184
.text:77D56184 loc_77D56184: ; CODE XREF: sub_77D5608F+EF_j
.text:77D56184 push [ebp+dwResSize] //allocate a wrong size
.text:77D56187 push 0
.text:77D56189 push dword_77D5F1A0
.text:77D5618F call ds:RtlAllocateHeap
總結:轉換思路後找到這個加4的漏洞,同樣的類型,信任“檔案”輸入。
思維擴展的結果
EEYE 2004:Windows ANI File Parsing Buffer Overflow
堆疊漏洞極易利用,攻擊方法隱蔽。
原理:
相信“ 檔案” 輸入參數,沒做檢查直接用作memcpy 的參數。
PNG漏洞,不同的模式
邏輯問題1:
EEYE PNG (Portable Network Graphics) Deflate Heap Corruption Vulnerability
原因:對 Length 碼 #286 and #287沒有做正確的處理,導致解壓程式認為長度是0
do { *dest = *src; ++dest; ++src; } while (--len);
邏輯問題2:libPNG 1.2.5堆疊溢出
代碼:
if (!(png_ptr->mode & PNG_HAVE_PLTE)) {
/* Should be an error, but we can cope with it */
g_warning(png_ptr, "Missing PLTE before tRNS"); }
else if (length > (png_uint_32)png_ptr->num_palette) {
g_warning(png_ptr, "Incorrect tRNS chunk length");
g_crc_finish(png_ptr, length);
return;
}
分析:代碼編寫的邏輯錯誤,錯誤的使用了else if.
相似漏洞:MSN png 漏洞,Media player png 漏洞
邏輯問題的總結
非常容易出現在複雜的檔案格式處理中
容易出現在壓縮,解壓代碼中:需要處理很多長度,大小相關的參數。
這種漏洞不一定是緩衝區溢出,也可能是越界訪問等等
想像漏洞
發現漏洞有時候是一種想像的過程
例子1:
Venustech ADLab:Microsoft Windows Kernel ANI File Parsing Crash Vulnerability
介紹:ANI是WINDOWS 支持的動畫游標格式,在ANI是由多個普通的游標檔案組成一個動畫,其中ANI檔案的頭處會標記是幾個圖示frame,WINDOWS 的核心在顯示游標的時候並未對該值進行檢查,如果將這個數字設定為0,會導致受影響的WINDOWS系統計算出錯誤的游標的地址並加以訪問,觸發了核心的藍屏崩潰。不僅僅是套用使用ANI檔案時會觸發,只要在EXPLORER下打開ANI檔案存在的目錄就會觸發。攻擊者也可以傳送游標的檔案,引誘用戶訪問含有惡意游標顯示的頁面,以及傳送嵌入游標的HTML郵件,導致被攻擊者系統藍屏崩潰。
原理:在計算frame地址的時候失敗。
例子2:
Venustech ADLab:Microsoft Windows Kernel ANI File Parsing DOS Vulnerability
介紹:ANI是WINDOWS 2000支持的動畫游標格式,在ANI是由多個普通的游標件組成一個動畫,其中ANI檔案的頭處會標記每FRAME切換的頻率,該值越小切換的速度越快,WINDOWS 的核心在切換游標FRAME的時候並未對該值進行檢查,如果將這個數字設定為0,受影響的WINDOWS的核心會陷入核心的死鎖,不再回響任何用戶界面的操作。該漏洞觸發必須要在使用ANI檔案的套用中才能觸發,攻擊者引誘用戶訪問含有惡意游標顯示的頁面,以及傳送嵌入游標的HTML郵件,導致被攻擊者系統核心死瑣。
原因:沒有考慮刷新頻率是0的情況。
總結
下溢:Size參數小於自身所占大小
上溢:Size加上一個正整數值產生上溢
直接作為參數輸入memcpy類函式
非法參數導致地址訪問越界
多種邏輯上的錯誤
充分發揮想像:刷新率?
總結
安全提示:
檔案格式是攻擊者的另一種輸入渠道,同樣不要信任從檔案讀取的數據
解析檔案格式時應該對參數進行充分的檢查
同樣需要想像力,需要考慮到每種可能的情況
檢查方法
前期準備
建立安全模型
1、熟悉軟體功能、功能實現,配置等;
如:IIS的虛擬目錄、腳本映射;
2、根據功能,分析安全需求,建立安全模型;
IIS外掛,檔案類型識別,目錄正確識別;目錄限制;
外掛的特點;許可權不是在檔案對象上,需要自己識別檔案,所以需要識別出同一個檔案的所有檔案名稱;
3、根據安全需求,分析編程應注意的地方,重點檢查。
IIS要對"../"進行檢測,連線檔案的處理,識別出正確的目錄、檔案名稱;編程接口完全按接口實現;
代碼分析
1、通讀原代碼;
2、安全需求裡面重點需要檢測的地方;
3、搜尋容易有問題的函式調用,如strcpy、strcat、*printf、free、strncpy等;
4、常見一些編程問題;一些變數類型,如長度變數用int,注意一些函式非直接返回賦值問題等,一些邊界條件,記數從0開始還是從1開始。
5、分析緩衝區使用的代碼;
6、輸入輸出合法檢測;
7、編程接口調用;了解作業系統、基本檔案、進程調用等的特性;
8、數據結構;
9、安全領域的最小原則;
二進分析
1、測試;
(1)、熟悉輸入輸出;
(2)、根據需要編寫測試程式;
(3)、輸入輸出各種特殊情況測試,特殊字元、長串;
(4)、安全需求需要檢測的一些條件測試;
2、反彙編分析;
(1)、閱讀理解反彙編代碼;
(2)、安全需求檢測的代碼分析;
(3)、調用接口代碼分析;
(4)、sub esp,xxx 代碼分析緩衝;
(5)、strcpy、strcat、*printf、free、strncpy等調用分析;
(6)、輸入輸出檢測;
3、跟蹤調試;
(1)、異常的攔截分析;
(2)、一些字元串的流向,讀寫斷點;
總結提高
1、分析總結各種漏洞、漏洞原因、編程問題,補丁修補方法,編程怎么避免。
2、對漏洞歸納分類,全面考慮;
分類
用戶群體
大眾類軟體的漏洞。如Windows的漏洞、IE的漏洞等等。
專用軟體的漏洞。如Oracle漏洞、Apache漏洞等等。
數據角度
能讀按理不能讀的數據,包括記憶體中的數據、檔案中的數據、用戶輸入的數據、資料庫中的數據、網路上傳輸的數據等等。
能把指定的內容寫入指定的地方(這個地方包括檔案、記憶體、資料庫等)
輸入的數據能被執行(包括按機器碼執行、按Shell代碼執行、按SQL代碼執行等等)
作用範圍
遠程漏洞,攻擊者可以利用並直接通過網路發起攻擊的漏洞。這類漏洞危害極大,攻擊者能隨心所欲的通過此漏洞操作他人的電腦。並且此類漏洞很容易導致蠕蟲攻擊,在Windows。
本地漏洞,攻擊者必須在本機擁有訪問許可權前提下才能發起攻擊的漏洞。比較典型的是本地許可權提升漏洞,這類漏洞在Unix系統中廣泛存在,能讓普通用戶獲得最高管理員許可權。
觸發條件上看可以分為:
主動觸發漏洞,攻擊者可以主動利用該漏洞進行攻擊,如直接訪問他人計算機。
被動觸發漏洞,必須要計算機的操作人員配合才能進行攻擊利用的漏洞。比如攻擊者給管理員發一封郵件,帶了一個特殊的jpg圖片檔案,如果管理員打開圖片檔案就會導致看圖軟體的某個漏洞被觸發,從而系統被攻擊,但如果管理員不看這個圖片則不會受攻擊。
操作角度
檔案操作類型,主要為操作的目標檔案路徑可被控制(如通過參數、配置檔案、環境變數、符號連結燈),這樣就可能導致下面兩個問題:
寫入內容可被控制,從而可偽造檔案內容,導致許可權提升或直接修改重要數據(如修改存貸數據),這類漏洞有很多,如歷史上Oracle TNS LOG檔案可指定漏洞,可導致任何人可控制運行Oracle服務的計算機;
內容信息可被輸出,包含內容被列印到螢幕、記錄到可讀的日誌檔案、產生可被用戶讀的core檔案等等,這類漏洞在歷史上Unix系統中的crontab子系統中出現過很多次,普通用戶能讀受保護的shadow檔案;
記憶體覆蓋,主要為記憶體單元可指定,寫入內容可指定,這樣就能執行攻擊者想執行的代碼(緩衝區溢出、格式串漏洞、PTrace漏洞、歷史上Windows2000的硬體調試暫存器用戶可寫漏洞)或直接修改記憶體中的機密數據。
邏輯錯誤,這類漏洞廣泛存在,但很少有範式,所以難以查覺,可細分為:
條件競爭漏洞(通常為設計問題,典型的有Ptrace漏洞、廣泛存在的檔案操作時序競爭)
策略錯誤,通常為設計問題,如歷史上FreeBSD的Smart IO漏洞。
算法問題(通常為設計問題或代碼實現問題),如歷史上微軟的Windows 95/98的共享口令可輕易獲取漏洞。
設計的不完善,如TCP/IP協定中的3步握手導致了SYN FLOOD拒絕服務攻擊。
實現中的錯誤(通常為設計沒有問題,但編碼人員出現了邏輯錯誤,如歷史上博彩系統的偽隨機算法實現問題)
外部命令執行問題,典型的有外部命令可被控制(通過PATH變數,輸入中的SHELL特殊字元等等)和SQL注入問題。
時序
已發現很久的漏洞:廠商已經發布補丁或修補方法,很多人都已經知道。這類漏洞通常很多人已經進行了修補,巨觀上看危害比較小。
剛發現的漏洞:廠商剛發補丁或修補方法,知道的人還不多。相對於上一種漏洞其危害性較大,如果此時出現了蠕蟲或傻瓜化的利用程式,那么會導致大批系統受到攻擊。
0day:還沒有公開的漏洞,在私下交易中的。這類漏洞通常對大眾不會有什麼影響,但會導致攻擊者瞄準的目標受到精確攻擊,危害也是非常之大。
漏洞利用
如果一個缺陷不能被利用來乾“原本”不能幹的事(安全相關的),那么就不能被稱為安全漏洞,所以安全漏洞必然和漏洞利用緊密聯繫在一起。
漏洞利用的視角有:
數據視角:訪問本來不可訪問的數據,包括讀和寫。這一條通常是攻擊者的核心目的,而且可造成非常嚴重的災難(如銀行數據可被人寫)。
許可權視角:主要為許可權繞過或許可權提升。通常許可權提升都是為了獲得期望的數據操作能力。
可用性視角:獲得對系統某些服務的控制許可權,這可能導致某些重要服務被攻擊者停止而導致拒絕服務攻擊。
認證繞過:通常利用認證系統的漏洞而不用受權就能進入系統。通常認證繞過都是為許可權提升或直接的數據訪問服務的。
代碼執行角度:主要是讓程式將輸入的內容作為代碼來執行,從而獲得遠程系統的訪問許可權或本地系統的更高許可權。這個角度是SQL注入、記憶體指針遊戲類漏洞(緩衝區溢出、格式串、整形溢出等等)等的主要驅動。這個角度通常為繞過系統認證、許可權提升、數據讀取作準備的。
發掘方法
首先必須清楚安全漏洞是軟體BUG的一個子集,一切軟體測試的手段都對安全漏洞發掘實用。現在”黑客“用的各種漏洞發掘手段里有模式可循的有:
fuzz測試(黑盒測試),通過構造可能導致程式出現問題的方式構造輸入數據進行自動測試。
源碼審計(白盒測試),現在有了一系列的工具都能協助發現程式中的安全BUG,最簡單的就是你手上最新版本的C語言編譯器。
IDA反彙編審計(灰盒測試),這和上面的源碼審計非常類似,唯一不同的是很多時候你能獲得軟體,但你無法拿到源碼來審計,但IDA是一個非常強大的反彙編平台,能讓你基於彙編碼(其實也是源碼的等價物)進行安全審計。
動態跟蹤分析,就是記錄程式在不同條件下執行的全部和安全問題相關的操作(如檔案操作),然後分析這些操作序列是否存在問題,這是競爭條件類漏洞發現的主要途徑之一,其他的污點傳播跟蹤也屬於這類。
補丁比較,廠商的軟體出了問題通常都會在補丁中解決,通過對比補丁前後檔案的源碼(或反彙編碼)就能了解到漏洞的具體細節。
以上手段中無論是用哪種都涉及到一個關鍵點:需要通過人工分析來找到全面的流程覆蓋路徑。分析手法多種多樣,有分析設計文檔、分析源碼、分析反彙編代碼、動態調試程式等。
等級評定
考察漏洞的危害性應該緊密的和利用該漏洞帶來的危害相關,並不是通常大家認識的所有緩衝區溢出漏洞都是高危漏洞。以遠程漏洞為例,比較好的劃分方法為:
1 可遠程獲取OS、應用程式版本信息。
2 開放了不必要或危險得服務,可遠程獲取系統敏感信息。
3 可遠程進行受限的檔案、數據讀取。
4 可遠程進行重要或不受限檔案、數據讀取。
5 可遠程進行受限檔案、數據修改。
6 可遠程進行受限重要檔案、數據修改。
7 可遠程進行不受限得重要檔案、數據修改,或對普通服務進行拒絕服務攻擊。
8 可遠程以普通用戶身份執行命令或進行系統、網路級的拒絕服務攻擊。
9 可遠程以管理用戶身份執行命令(受限、不太容易利用)。
10 可遠程以管理用戶身份執行命令(不受限、容易利用)。
本地漏洞幾乎都是導致代碼執行,歸入上面的10分制可以為:
遠程主動觸發代碼執行(如IE的漏洞).
遠程被動觸發代碼執行(如Word漏洞/看圖軟體漏洞).
過程分析
一個防火牆隔離(只允許運維部的人訪問)的網路里運行一台Unix伺服器;作業系統中只有root用戶和oracle用戶可登入,作業系統中運行了Apache(nobody許可權)、Oracle(oracle用戶許可權)等服務。
一個攻擊者的目的是修改Oracle資料庫中的帳單表的數據。
其可能的攻擊步驟為:
1.接入運維部的網路,獲得一個運維部的IP位址從而能通過防火牆訪問被保護的Unix伺服器。
2.利用Apache服務的某遠程緩衝區溢出漏洞直接獲得一個nobody許可權的shell訪問。
3.利用作業系統某suid程式的漏洞將自己的許可權提升到root許可權。
4.用Oracle的sysdba登入進入資料庫(本地登入不需要密碼)。
5.修改目標表的數據。
以上5個過程分析下來為:
第1步:認證繞過
第2步:遠程漏洞、代碼執行(機器碼)、認證繞過
第3步:許可權提升、認證繞過
第4步:認證繞過
第5步:數據寫
5個最危險安全漏洞
注入漏洞
在應用程式將不可信的數據傳送給解釋器時,就有可能產生注入漏洞。這種漏洞很普遍,會影響到大量方案。最普遍的注入漏洞會影響到SQL、LDAP、XPath、XML解析器和程式參數。
其實,通過分析代碼是可以發現注入漏洞的,但是,如果已經將系統部署到了生產環境中了,在測試期間就很難發現這些漏洞。
利用劫持漏洞的網路攻擊帶來的後果可能有:敏感數據被泄露、拒絕服務等。
攻擊者可以運行劫持攻擊,從而完全破壞目標系統,並獲得其控制權。
注入漏洞可以影響多種軟體,其影響依賴於有漏洞的應用程式的傳播範圍或傳播水平。注入漏洞可能帶來的一個典型影響就是Bash Bug漏洞。紅帽子的安全團隊在Linux 中的 Bash shell 中發現了一個危險的安全漏洞“Bash Bug”。對於用戶的正常訪問,該漏洞允許攻擊者的代碼如同在外殼 中一樣被執行,這就為各種各樣的攻擊打開了方便之門。
這種類型的漏洞可能帶來大規模影響,例如,物聯網設備(例如,智慧型儀表,路由器,網路攝像機等設備)就有可能遭受這種漏洞的威脅。
緩衝區溢出
如果應用程式試圖將超過緩衝區容量的數據存放在其中時,就產生了緩衝區溢出漏洞的條件。從外部寫入到緩衝區可以使攻擊者覆蓋鄰近記憶體塊的內容,從而導致數據遭到破壞,程式崩潰,甚至可以執行任何惡意代碼。
緩衝區溢出攻擊難以發現,但與注入攻擊相比,也更難以利用。攻擊者需要了解目標套用的記憶體管理,並且知道修改其內容運行攻擊的方法。
在典型的攻擊中,攻擊者將數據傳送給一個應用程式,而後者是一個將數據存儲在小容量的堆疊緩衝區的程式,這會導致覆蓋調用堆疊上的信息,其中包括函式的返回指針。通過這種方法,在合法的功能完成之後,攻擊者就可以運行自己的惡意代碼,並且可以將控制交給包含攻擊者數據的漏洞利用代碼。
由於針對SCADA的攻擊日益增多,所以這種緩衝區溢出漏洞被利用的頻率也會越來越高。
敏感數據泄露
數據可以存儲在系統中,或在兩個實體(如伺服器或瀏覽器)之間傳輸,如果缺乏足夠的保護,就會發生敏感數據泄露的問題。
敏感數據的泄露可涉及到訪問靜態數據、正在傳輸數據,其中也包括備份和用戶正在瀏覽的數據。
攻擊者有多種選擇,例如,如果要竊取或攻擊數據存儲器,他可以使用基於惡意軟體的攻擊,通過中間人攻擊截獲伺服器和瀏覽器之間的數據,或者欺騙Web應用程式做出一些動作(例如,改變電子商務應用程式中購物車的內容,或者提升特權)等。
敏感數據泄露主要是由於敏感數據缺少加密造成的,但是即使實施了加密機制,其他事件也會造成信息泄露。密鑰的生成和管理及算法等不夠強健在許多行業和套用中是很普遍的事情。
近一年來發生的有許多事件都表明這種漏洞的嚴重性,特別是在兩方面表面尤為突出:一是實施了錯誤的加密算法,二是移動和雲的方案缺乏加密。
2014年九月,美國計算機緊急事件回響小組協調中心(CERT/CC)的專家對一些沒有能夠正確驗證SSL證書的安卓套用進行了測試,並發布了測試報告。
CERT的報告認為,許多套用正使用有漏洞的庫,如Flurry庫。因此,安卓用戶就會暴露在這種攻擊中,並僅有少量公司採取措施保障其產品的安全。
攻擊者往往並不直接破解加密,而是利用敏感數據的泄露缺陷。這就意味著攻擊者會竊取加密密鑰,運行中間人攻擊,從伺服器或用戶的瀏覽器上竊取正在傳輸的明文數據。
注意,敏感數據泄露往往是攻擊活動第一階段的一個組成部分,也就是說攻擊者隨後會利用其它黑客技術。
管理敏感數據的每家企業都有可能遭受攻擊,特別是那些有大量用戶的企業,很多用戶都有可能為網路攻擊打開大門。
認證和會話管理攻擊
如果攻擊者利用了認證或會話管理過程的漏洞或缺陷(例如,賬戶、口令、會話ID被泄露等),並假冒其他用戶,就會發生認證和會話管理攻擊。
這種攻擊非常常見,許多黑客組織都利用這些漏洞訪問受害者賬戶,實施網路間諜活動,或者竊取信息用於犯罪活動。
一個主要的威脅問題與認證和會話管理機制的自定義實施有關,在多數情況下,這種機制會導致攻擊活動。這種漏洞影響到WEB應用程式,如用戶登出、口令管理、逾時、網站登錄的“記住我”功能等,而且賬戶的更新也受到認證漏洞攻擊影響。
最大的問題是,如果這種漏洞被成功地利用,攻擊者就假冒受害者,用其獲得的特權從事任何活動。
不幸的是,由於大量的認證機制是由每個不同的受害者實施的,所以認證和會話管理的攻擊漏洞是很難對付的。認證和會話管理系統往往並不一致,這就使得大規模地採用最佳方法並非易事。
攻擊者有多種方法可以繞過認證機制,其中包括使用SQL注入攻擊對目標賬戶實施蠻力攻擊、從URL中恢復會話標誌、利用會話逾時、重新利用已經使用的會話令牌,或者破壞用戶的瀏覽器,等等。
最常見的攻擊依靠會話,而認證機制往往基於伺服器上與每個會話有關的的令牌。取得會話標誌的攻擊者能夠假冒受害者而無需再次提供登錄憑據。
SQL注入
像Hibernate這樣的對象到關係映射(ORM)庫可以提供了一些保護,通過吸引開發人員遠離直接操作的資料庫查詢,來防止SQL注入漏洞。然而,大多數ORM庫允許開發人員創建自由格式的查詢,但這仍給應用程式的開放留下了注入攻擊。
跨站漏洞(XSS)
.NET框架提供了一些開箱即用的XSS的保護,通過ValidateRequest屬性可用。這很有用,但因為它依賴於一個已知的無效負載黑名單,這可能會被繞過。因此,開發人員仍然需要正確地編碼數據,以防止XSS漏洞。
跨站點請求偽造(CSRF)
Tomcatservlet容器的最新版本CSRF保護過濾器,它提供很多保護來防止CSRF攻擊。
安全配置錯誤
這種漏洞其實是最常見也是最危險的。錯誤配置的伺服器和應用程式在網路上數量眾多,這為網路攻擊打開了大門。
下面是一些典型的安全配置錯誤:
· 運行過時的軟體
· 生產環境中的應用程式和產品仍運行在調試模式,或者仍包含調試模組。
· 在系統中運行不必要的服務。
· 沒有配置對伺服器資源和服務的訪問,導致泄露敏感信息,或者導致攻擊者破壞或竊取這些信息。
· 沒有改變出廠設定(例如,默認密鑰和口令)
· 不正確的異常管理,導致將系統信息泄露給攻擊者。
· 使用默認賬戶。
最新新聞
IE瀏覽器曝安全漏洞 黑客可竊取密碼
電腦安全研究者日前表示,微軟廣泛流行的IE瀏覽器存在漏洞,黑客可以通過竊取證書,從而進入Facebook、Twitter和其它網站。研究者將這種技術叫做“cookiejacking”。義大利獨立網際網路安全研究者羅薩里奧·瓦羅塔(Rosario Valotta)說:“任何網站,任何Cookie,範圍之廣只能想像。”黑客可以利用漏洞進入到瀏覽器保存的數據中,也就是“Cookie”,它保存了登錄名和密碼。
一旦黑客竊取到Cookie,就可以進入到相同的網站,專家將這種技術叫“cookiejacking”。
漏洞在所有IE版本上都存在,包括最新的IE 9,也存在於所有Windows作業系統中。
要利用該漏洞,黑客必須先使受害者在PC顯示屏上拖放一個目標,然後才能黑用戶的電腦。聽起來這個任務比較難,但是瓦羅塔說他能相當容易做到。他建立了一個程式放在Facebook上,用戶來挑戰:讓一個美女裸體。
瓦羅塔說:“我在Facebook上發布遊戲,不到三天,超過80個Cookies就傳回我的伺服器。我只有150個朋友。”
微軟表示,在真正的cookiejacking騙局中成功幾乎不可能。微軟新聞發言人傑瑞·布萊恩特(Jerry Bryant)說:“考慮到需要用戶互動,我們不認為這個問題有很高的風險。要受到可能的影響,用戶必須先訪問惡意網站,被說服去點擊和拖動網頁上的目標,黑客才能從網上攻擊用戶曾登錄的Cookie。”