后門程序知識的正確解析
以下的文章主要描述的是黑客中級技術 緩沖區溢出攻擊,緩沖區溢出是一種很危險的漏洞,在各種操作系統、應用軟件中存在很廣泛。利用緩沖區溢出攻擊,可以導致程序運行失敗、系統當機、重新啟動等后果。
更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權,進而進行各種非法操作。
緩沖區溢出是一種非常普遍、非常危險的漏洞,在各種操作系統、應用軟件中廣泛存在。利用緩沖區溢出攻擊,可以導致程序運行失敗、系統當機、重新啟動等后果。更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權,進而進行各種非法操作。緩沖區溢出攻擊有多種英文名稱:buffer overflow,buffer overrun,smash the stack,trash the stack,scribble the stack, mangle the stack, memory leak,overrun screw;它們指的都是同一種攻擊手段。第一個緩沖區溢出攻擊--Morris蠕蟲,發生在十年前,它曾造成了全世界6000多臺網絡服務器癱瘓。
本文將分析緩沖區溢出的原理;研究各種類型的緩沖區溢出漏洞和攻擊手段;最后,還將著重研究各種防御手段,用來消除這些漏洞所造成的影響。
一、 緩沖區溢出的原理
通過往程序的緩沖區寫超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,使程序轉而執行其它指令,以達到攻擊的目的。造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入的參數。例如下面程序:
void function(char *str) {
char buffer[16];
strcpy(buffer,str);
}
上面的strcpy()將直接吧str中的內容copy到buffer中。這樣只要str的長度大于16,就會造成buffer的溢出,使程序運行出錯。存在象strcpy這樣的問題的標準函數還有strcat(),sprintf(),vsprintf(),gets(),scanf()等。
當然,隨便往緩沖區中填東西造成它溢出一般只會出現“分段錯誤”(Segmentation fault),而不能達到攻擊的目的。最常見的手段是通過制造緩沖區溢出使程序運行一個用戶shell,再通過shell執行其它命令。如果該程序屬于root且有suid權限的話,攻擊者就獲得了一個有root權限的shell,可以對系統進行任意操作了。
緩沖區溢出攻擊之所以成為一種常見安全攻擊手段其原因在于緩沖區溢出漏洞太普遍了,并且易于實現。而且,緩沖區溢出成為遠程攻擊的主要手段其原因在于緩沖區溢出漏洞給予了攻擊者他所想要的一切:植入并且執行攻擊代碼。被植入的攻擊代碼以一定的權限運行有緩沖區溢出漏洞的程序,從而得到被攻擊主機的控制權。
在1998年Lincoln實驗室用來評估入侵檢測的的5種遠程攻擊中,有2種是緩沖區溢出。而在1998年CERT的13份建議中,有9份是是與緩沖區溢出有關的,在1999年,至少有半數的建議是和緩沖區溢出有關的。在Bugtraq的調查中,有2/3的被調查者認為緩沖區溢出漏洞是一個很嚴重的安全問題。
緩沖區溢出漏洞和攻擊有很多種形式,會在第二節對他們進行描述和分類。相應地防衛手段也隨者攻擊方法的不同而不同,將在第四節描述,它的內容包括針對每種攻擊類型的有效的防衛手段。
二、緩沖區溢出的漏洞和攻擊
緩沖區溢出攻擊的目的在于擾亂具有某些特權運行的程序的功能,這樣可以使得攻擊者取得程序的控制權,如果該程序具有足夠的權限,那么整個主機就被控制了。一般而言,攻擊者攻擊root程序,然后執行類似“exec(sh)”的執行代碼來獲得root權限的shell。為了達到這個目的,攻擊者必須達到如下的兩個目標:
1. 在程序的地址空間里安排適當的代碼。
2. 通過適當的初始化寄存器和內存,讓程序跳轉到入侵者安排的地址空間執行。
根據這兩個目標來對緩沖區溢出攻擊進行分類。在二.1節,將描述攻擊代碼是如何放入被攻擊程序的地址空間的。在二.2節,將介紹攻擊者如何使一個程序的緩沖區溢出,并且執行轉移到攻擊代碼(這個就是“溢出”的由來)。在二.3節,將綜合前兩節所討論的代碼安排和控制程序執行流程的技術。
二.1 在程序的地址空間里安排適當的代碼的方法
有兩種在被攻擊程序地址空間里安排攻擊代碼的方法:
1、植入法:
攻擊者向被攻擊的程序輸入一個字符串,程序會把這個字符串放到緩沖區里。這個字符串包含的資料是可以在這個被攻擊的硬件平臺上運行的指令序列。在這里,攻擊者用被攻擊程序的緩沖區來存放攻擊代碼。緩沖區可以設在任何地方:堆棧(stack,自動變量)、堆(heap,動態分配的內存區)和靜態資料區。
2、利用已經存在的代碼:
有時,攻擊者想要的代碼已經在被攻擊的程序中了,攻擊者所要
后門程序知識完全解析,后門程序又稱特洛伊木馬,其用途在于潛伏在電腦中,從事搜集信息或便于黑客進入的動作。后程序和電腦病毒最大的差別,在于后門程序不一定有自我復制的動作,也就是后門程序不一定會“感染”其他電腦。
什么是后門程序
后門程序又稱特洛伊木馬,其用途在于潛伏在電腦中,從事搜集信息或便于黑客進入的動作。后程序和電腦病毒最大的差別,在于后門程序不一定有自我復制的動作,也就是后門程序不一定會“感染”其他電腦。
后門是一種登錄系統的方法,它不僅繞過系統已有的安全設置,而且還 能挫敗系統上各種增強的安全設置。
后門是一種登錄系統的方法,它不僅繞過系統已有的安全設置,而且還能挫敗系統上各種增強的安全設置。
后門包括從簡單到奇特,有很多的類型。簡單的后門可能只是建立一個新的賬號,或者接管一個很少使用的賬號;復雜的后門(包括木馬)可能會繞過系統的安全認證而對系統有安全存取權。例如一個login程序,你當輸入特定的密碼時,你就能以管理員的權限來存取系統。
后門能相互關聯,而且這個 技術被許多黑客所使用。例如,黑客可能使用密碼破解一個或多個賬號密碼,黑客可能會建立一個或多個賬號。一個黑客可以存取這個系統,黑客可能使用一些 技術或利用系統的某個漏洞來提升權限。黑客可能使用一些技術或利用系統的某個漏洞庭湖來提升權限。黑客可能會對系統的配置文件進行小部分的修改,以降低系統的防衛性能。也可能會安裝一個木馬程序,使系統打開一個安全漏洞,以利于黑客完全掌握系統。
以上是在網絡上常見的對“后門”的解釋,其實我們可以用很簡單的一句話來概括它:后門就是留在計算機系統中,供某位特殊使用都通過某種特殊方式控制計算機系統的途徑!——很顯然,掌握好后門技術是每個網絡安全愛好者不可或缺的一項基本技能!它能讓你牢牢抓住肉雞,讓它永遠飛不出你的五指山!
下文將以筆者從事網絡安全多年的工作經驗為基礎,給廣大的網絡初級安全愛好者講解一些網絡上常 用的后門的種類和使用方法以及技巧,希望大家能在最短的時間內學習到最好的技術,提升自己的網絡安全技術水平!
后門的分類
后門可以按照很多方式來分類,標準不同自然分類就不同,為了便于大家理解,我們從技術方面來考慮后門程序的分類方法:
1.網頁后門
此類后門程序一般都是服務器上正常 的web服務來構造自己的連接方式,比如現在非常流行的ASP、cgi腳本后門等。
2。線程插入后門
利用系統自身的某個服務或者線程,將后門程序插入到其中,具體原理原來《黑客防線》曾具體講解過,感興趣的朋友可以查閱。這也是現在最流行的一個后門技術。
3擴展后門
所謂的“擴展”,是指在功能上有大的提升,比普通的單一功能的后門有很強的使用性,這種后門本身就相當于一個小的安全工具包,能實現非常多的常駐見安全功能,適合新手使用————但是,功能越強,個人覺得反而脫郭后門“隱蔽”的初衷,具體看法就看各位使用都的喜好了。
4.c/s后門
和傳統的木馬程序類似的控制方法,采用“客記端/服務端”的控制方式,通過某種特定的訪問方式來啟動后門進而控制服務器。
5.root kit 6o f3H3B
這個需要單獨說明,其實把它單獨列一個類在這里是不太恰當的,但是,root kit 的出現大大改變了后門程序的思維角度和使用理念,可以說一個好的root kit就是一個完全的系統殺手!后文我們講涉及到這方面,想念一定不會讓大家失望!
上面是按照技術做的分類,除了這些方面,正向連接后門、反向連接后門程序等分類也是很常見的,其實如何分類是編程者考慮的事,廣大的使用者就不用考慮那么多了,我們看重的,只是功能! Oi-)G!12
入侵法定————精品后門
上面的“廢話”想念大家都看累了吧?好,下面我們來看看現在網絡中滸的后門究竟長什么模樣想學習網絡安全并想提高的朋友看清楚了哦,這可是讓你的肉雞逃不出你的五指山的大好途徑! 66 _}=`W/k
1.網頁后門
近段時間網絡上針對系統漏洞的攻擊事件漸漸少了,因為大家在認識到網絡安全的重要性之后,最簡單卻又最有效的防護辦法:升級,都被大家所認同,所以系統漏洞在以后的歲月中存活的周期會越來越短,而從最近的趨勢來看,肢本漏洞已經漸漸取代了系統漏洞的地位,非常多的人開始研究起卻本漏洞來,sql注入也開始成為各大安全站點首要關注熱點,而說到腳本、網頁后門當然就是不得不說的重頭戲了,現在國內入侵的主流趨勢是先利用某種腳本漏洞上傳腳本后門,然后瀏覽服務器內安裝和程序,找到提升權限的突破口,進而拿到服務器的系統權限。
現在asp、CGI、PHP這三個腳本大類在網絡上的普遍運用帶來了腳本后門在這三方面的發展,下面我們一一道來:
海陽頂端ASP木馬
這是ASP腳本方面流傳非常廣的一個腳本后門了,在經過幾次大的改革后,推出了“海陽頂端ASP木馬XP版”、“海陽頂端ASP木馬紅粉佳人版”等功能強大、使用方便的后門,想念經常接解腳步本安全的朋友對這些都不會陌生。
類型:網頁木馬
使用范圍:支持ASP、WEB訪問
使用難度:★☆☆☆☆
危害程序:★★★☆☆
查殺難度:★★★☆☆
現在的服務器系統配置都相對安全,公開的系統漏洞存在的機會很少,于是腳本方面的漏洞就開始火起來。首先我們通過某種途徑獲得一個服務器的頁面權限(比如利用論壇上傳達室類型未嚴格設置、SQL注入后獲得ASP系統的上傳權限、對已知物理路徑的服務器上傳特定程序),然后我們可以通過簡單的上傳ASP程序或者是直接復制海陽項端的代碼,然后通過WEB訪問這個程序,就能很方便地查閱服務器上的資料了,下面舉個簡單的便子(由于只是簡單的介紹,下文便子不會太難或者太普遍,希望大家理解)。
運用舉便
leadbbs2.77曾經風靡網絡,它是個很典型的ASP論壇,屏蔽了很多可以SQL注入的寺方,但是很多傻瓜級別的網絡管理員總是喜歡默認安裝,然后啟用論壇,我們只需要很簡單地在IE中輸入:WWW。***。COM/BBS/DATA/LEADBBS。MDB就能夠直接下載該論壇的數據庫了,而且沒有MD5加密哦!,我們直接找到管理員的賬戶和密碼,然后登錄論壇,到管理界面將論壇的“聯系我們”、“幫助”等ASP文件替換成我們的海陽項端代碼,然后執行GUEST權限的CMD命令,方便的上傳/下載將定程序、遠程執行程序等,這樣一個隱藏的后門就建好了!取得服務器的SYSTEM權限就看大家自己的辦法了。
一般來講,海洋的功能是非常強大的,而且不容易被查殺(一個朋友采取的方式是:先利用某個腳本漏洞上傳網頁后門程序,再通過海洋上傳另一個后門到隱蔽的路徑,然后通過最后上傳的后門來刪除第一次上傳的海洋,這樣后門的存放路徑就可以放得非常深了,普通管理員是很難發現的),如果管理員覺得自己可能中了這里邊樣的后門,可以利用論壇備份來恢復自己的頁面系統,再配合系統日志、論壇日志等程序檢查系統,發現可疑ASP文件打開看看海洋是很好識別的,再刪除就可以了。
腳本方面的后門還有CGI和PHP兩面三刀大類,使用原理都差不多,這里就不再多介紹,在黑防論壇也收錄了這三種后門,大家可以下載后自己研究。
【編輯推薦】
做的只是對代碼傳遞一些參數。比如,攻擊代碼要求執行“exec (“/bin/sh”)”,而在libc庫中的代碼執行“exec (arg)”,其中arg使一個指向一個字符串的指針參數,那么攻擊者只要把傳入的參數指針改向指向”/bin/sh”。
二.2 控制程序轉移到攻擊代碼的方法
所有的這些方法都是在尋求改變程序的執行流程,使之跳轉到攻擊代碼。最基本的就是溢出一個沒有邊界檢查或者其它弱點的緩沖區,這樣就擾亂了程序的正常的執行順序。通過溢出一個緩沖區,攻擊者可以用暴力的方法改寫相鄰的程序空間而直接跳過了系統的檢查。
分類的基準是攻擊者所尋求的緩沖區溢出的程序空間類型。原則上是可以任意的空間。實際上,許多的緩沖區溢出是用暴力的方法來尋求改變程序指針的。這類程序的不同之處就是程序空間的突破和內存空間的定位不同。主要有以下三種: 1、活動紀錄(Activation Records):
每當一個函數調用發生時,調用者會在堆棧中留下一個活動紀錄,它包含了函數結束時返回的地址。攻擊者通過溢出堆棧中的自動變量,使返回地址指向攻擊代碼。通過改變程序的返回地址,當函數調用結束時,程序就跳轉到攻擊者設定的地址,而不是原先的地址。這類的緩沖區溢出被稱為堆棧溢出攻擊(Stack Smashing Attack),是目前最常用的緩沖區溢出攻擊方式。
2、函數指針(Function Pointers):
函數指針可以用來定位任何地址空間。例如:“void (* foo)()”聲明了一個返回值為void的函數指針變量foo。所以攻擊者只需在任何空間內的函數指針附近找到一個能夠溢出的緩沖區,然后溢出這個緩沖區來改變函數指針。在某一時刻,當程序通過函數指針調用函數時,程序的流程就按攻擊者的意圖實現了。它的一個攻擊范例就是在Linux系統下的superprobe程序。
3、長跳轉緩沖區(Longjmp buffers):
在C語言中包含了一個簡單的檢驗/恢復系統,稱為setjmp/longjmp。意思是在檢驗點設定“setjmp(buffer)”,用“longjmp(buffer)”來恢復檢驗點。然而,如果攻擊者能夠進入緩沖區的空間,那么“longjmp(buffer)”實際上是跳轉到攻擊者的代碼。象函數指針一樣,longjmp緩沖區能夠指向任何地方,所以攻擊者所要做的就是找到一個可供溢出的緩沖區。一個典型的例子就是Perl 5.003的緩沖區溢出漏洞;攻擊者首先進入用來恢復緩沖區溢出的的longjmp緩沖區,然后誘導進入恢復模式,這樣就使Perl的解釋器跳轉到攻擊代碼上了。
二.3代碼植入和流程控制技術的綜合分析
最簡單和常見的緩沖區溢出攻擊類型就是在一個字符串里綜合了代碼植入和活動紀錄技術。攻擊者定位一個可供溢出的自動變量,然后向程序傳遞一個很大的字符串,在引發緩沖區溢出,改變活動紀錄的同時植入了代碼。這個是由Levy指出的攻擊的模板。因為C在習慣上只為用戶和參數開辟很小的緩沖區,因此這種漏洞攻擊的實例十分常見。
代碼植入和緩沖區溢出不一定要在在一次動作內完成。攻擊者可以在一個緩沖區內放置代碼,這是不能溢出的緩沖區。然后,攻擊者通過溢出另外一個緩沖區來轉移程序的指針。這種方法一般用來解決可供溢出的緩沖區不夠大(不能放下全部的代碼)的情況。
如果攻擊者試圖使用已經常駐的代碼而不是從外部植入代碼,他們通常必須把代碼作為參數調用。舉例來說,在libc(幾乎所有的C程序都要它來連接)中的部分代碼段會執行“exec(something)”,其中somthing就是參數。攻擊者然后使用緩沖區溢出改變程序的參數,然后利用另一個緩沖區溢出使程序指針指向libc中的特定的代碼段。
三、 緩沖區溢出攻擊的實驗分析
2000年1月,Cerberus 安全小組發布了微軟的IIS 4/5存在的一個緩沖區溢出漏洞。攻擊該漏洞,可以使Web服務器崩潰,甚至獲取超級權限執行任意的代碼。目前,微軟的IIS 4/5 是一種主流的Web服務器程序;因而,該緩沖區溢出漏洞對于網站的安全構成了極大的威脅;它的描述如下:
瀏覽器向IIS提出一個HTTP請求,在域名(或IP地址)后,加上一個文件名,該文件名以“.htr”做后綴。于是IIS認為客戶端正在請求一個“.htr”文件,“.htr”擴展文件被映像成ISAPI(Internet Service API)應用程序,IIS會復位向所有針對“.htr”資源的請求到 ISM.DLL程序 ,ISM.DLL 打開這個文件并執行之。
瀏覽器提交的請求中包含的文件名存儲在局部變量緩沖區中,若它很長,超過600個字符時,會導致局部變量緩沖區溢出,覆蓋返回地址空間,使IIS崩潰。更進一步,在如圖1所示的2K緩沖區中植入一段精心設計的代碼,可以使之以系統超級權限運行。
四、緩沖區溢出攻擊的防范方法
緩沖區溢出攻擊占了遠程網絡攻擊的絕大多數,這種攻擊可以使得一個匿名的Internet用戶有機會獲得一臺主機的部分或全部的控制權。如果能有效地消除緩沖區溢出的漏洞,則很大一部分的安全威脅可以得到緩解。
目前有四種基本的方法保護緩沖區免受緩沖區溢出的攻擊和影響。在四.1中介紹了通過操作系統使得緩沖區不可執行,從而阻止攻擊者植入攻擊代碼。在四.2中介紹了強制寫正確的代碼的方法。在四.3中介紹了利用編譯器的邊界檢查來實現緩沖區的保護。這個方法使得緩沖區溢出不可能出現,從而完全消除了緩沖區溢出的威脅,但是相對而言。
【編輯推薦】