官术网_书友最值得收藏!

  • 0day安全
  • 王清主編
  • 3446字
  • 2019-01-01 12:26:02

1.1 漏洞概述

1.1.1 bug與漏洞

隨著現代軟件工業的發展,軟件規模不斷擴大,軟件內部的邏輯也變得異常復雜。為了保證軟件的質量,測試環節在軟件生命周期中所占的地位已經得到了普遍重視。在一些著名的大型軟件公司中,測試環節(QA)所耗費的資源甚至已經超過了開發。即便如此,不論從理論上還是工程上都沒有任何人敢聲稱能夠徹底消滅軟件中所有的邏輯缺陷——bug。

在形形色色的軟件邏輯缺陷中,有一部分能夠引起非常嚴重的后果。例如,網站系統中,如果在用戶輸入數據的限制方面存在缺陷,將會使服務器變成SQL注入攻擊和XSS(Cross Site Script,跨站腳本)攻擊的目標;服務器軟件在解析協議時,如果遇到出乎預料的數據格式而沒有進行恰當的異常處理,那么就很可能會給攻擊者提供遠程控制服務器的機會。

我們通常把這類能夠引起軟件做一些“超出設計范圍的事情”的bug稱為漏洞(vulnerability)。

(1)功能性邏輯缺陷(bug):影響軟件的正常功能,例如,執行結果錯誤、圖標顯示錯誤等。

(2)安全性邏輯缺陷(漏洞):通常情況下不影響軟件的正常功能,但被攻擊者成功利用后,有可能引起軟件去執行額外的惡意代碼。常見的漏洞包括軟件中的緩沖區溢出漏洞、網站中的跨站腳本漏洞(XSS)、SQL注入漏洞等。

1.1.2 幾個令人困惑的安全問題

也許您有一定的計算機知識,但仍然經常費解于下面這些安全問題。

(1)我從不運行任何來歷不明的軟件,為什么還會中病毒?

如果病毒利用重量級的系統漏洞進行傳播,您將在劫難逃。因為系統漏洞可以引起計算機被遠程控制,更何況傳播病毒。橫掃世界的沖擊波蠕蟲、slammer蠕蟲等就是這種類型的病毒。

如果服務器軟件存在安全漏洞,或者系統中可以被RPC遠程調用的函數中存在緩沖區溢出漏洞,攻擊者也可以發起“主動”進攻。在這種情況下,您的計算機會輕易淪為所謂的“肉雞”。

(2)我只是點擊了一個URL鏈接,并沒有執行任何其他操作,為什么會中木馬?

如果您的瀏覽器在解析HTML文件時存在緩沖區溢出漏洞,那么攻擊者就可以精心構造一個承載著惡意代碼的HTML文件,并把其鏈接發給您。當您點擊這種鏈接時,漏洞被觸發,從而導致HTML中所承載的惡意代碼(shellcode)被執行。這段代碼通常是在沒有任何提示的情況下去指定的地方下載木馬客戶端并運行。

此外,第三方軟件所加載的ActiveX控件中的漏洞也是被“網馬”所經常利用的對象。所以千萬不要忽視URL鏈接。

(3)Word文檔、Power Point文檔、Excel表格文檔并非可執行文件,它們會導致惡意代碼的執行嗎?

和html文件一樣,這類文檔本身雖然是數據文件,但是如果Office軟件在解析這些數據文件的特定數據結構時存在緩沖區溢出漏洞的話,攻擊者就可以通過一個精心構造的Word文檔來觸發并利用漏洞。當您在用Office軟件打開這個Word文檔的時候,一段惡意代碼可能已經悄無聲息地被執行過了。

(4)上網時,我總是使用高強度的密碼注冊賬戶,我的賬戶安全嗎?

高強度的密碼只能抵抗密碼暴力猜解的攻擊,具體安全與否還取決于很多其他因素:

密碼存在哪里,例如,存本地計算機還是遠程服務器。

密碼怎樣存,例如,明文存放還是加密存放,什么強度的加密算法等。

密碼怎樣傳遞,例如,密鑰交換的過程是否安全,網絡通訊是否使用SSL等。

這些過程中如果有任何一處失誤,都有可能引起密碼泄漏。例如,一個網站存在SQL注入漏洞,而您的賬號密碼又以明文形式存在Web服務器的數據庫中,那么無論您的密碼多長,包含多少奇怪的字符,最終仍將為腳本注入攻擊者獲取。

此外,如果密碼存在本地,即使使用高強度的Hash算法進行加密,如果沒有考慮到CRACK攻擊,驗證機制也很可能被輕易突破。

您也許閱讀過很多本網絡安全書籍,所以經常看到端口掃描、網絡監聽、密碼猜解、DOS等名詞。雖然這些話題在網絡安全技術中永遠都不會過時,但閱讀完本書之后,您將發現漏洞利用技術才是實施有效攻擊的最核心技術,才是突破安全邊界、實施深度入侵的關鍵所在。

1.1.3 漏洞挖掘、漏洞分析、漏洞利用

利用漏洞進行攻擊可以大致分為漏洞挖掘、漏洞分析、漏洞利用三個步驟。這三部分所用的技術有相同之處,比如都需要精通系統底層知識、逆向工程等;同時也有一定的差異。

1.漏洞挖掘

安全性漏洞往往不會對軟件本身功能造成很大影響,因此很難被QA工程師的功能性測試發現,對于進行“正常操作”的普通用戶來說,更難體會到軟件中的這類邏輯瑕疵了。

由于安全性漏洞往往有極高的利用價值,例如,導致計算機被非法遠程控制,數據庫數據泄漏等,所以總是有無數技術精湛、精力旺盛的家伙在夜以繼日地尋找軟件中的這類邏輯瑕疵。他們精通二進制、匯編語言、操作系統底層的知識;他們往往也是杰出的程序員,因此能夠敏銳地捕捉到程序員所犯的細小錯誤。

尋找漏洞的人并非全是攻擊者。大型的軟件企業也會雇用一些安全專家來測試自己產品中的漏洞,這種測試工作被稱做Penetration test(攻擊測試),這些測試團隊則被稱做Tiger team或者Ethic hacker。

從技術角度講,漏洞挖掘實際上是一種高級的測試(QA)。學術界一直熱衷于使用靜態分析的方法尋找源代碼中的漏洞;而在工程界,不管是安全專家還是攻擊者,普遍采用的漏洞挖掘方法是Fuzz,這實際是一種“灰”盒測試。

我們會在第3篇的相關章節中進一步介紹漏洞挖掘與產品安全性測試方面的知識。

2.漏洞分析

當fuzz捕捉到軟件中一個嚴重的異常時,當您想透過廠商公布的簡單描述了解漏洞細節的時候,您就需要具備一定的漏洞分析能力。一般情況下,我們需要調試二進制級別的程序。

在分析漏洞時,如果能夠搜索到POC(proof of concept)代碼,就能重現漏洞被觸發的現場。這時可以使用調試器觀察漏洞的細節,或者利用一些工具(如Paimei)更方便地找到漏洞的觸發點。

當無法獲得POC時,就只有廠商提供的對漏洞的簡單描述了。一個比較通用的辦法是使用補丁比較器,首先比較patch前后可執行文件都有哪些地方被修改,之后可以利用反匯編工具(如IDA Pro)重點逆向分析這些地方。

漏洞分析需要扎實的逆向基礎和調試技術,除此以外還要精通各種場景下的漏洞利用方法。這種技術更多依靠的是經驗,很難總結出通用的條款。本書將在第5篇中用若干個實際的分析案例來幫助您體會漏洞分析的過程,希望能夠起到拋磚引玉的效果。

3.漏洞利用

漏洞利用技術可以一直追溯到20世紀80年代的緩沖區溢出漏洞的利用。然而直到Aleph One于1996年在Phrack第49期上發表了著名的文章《Smashing The Stack For Fun And Profit》,這種技術才真正流行起來。

隨著時間的推移,經過無數安全專家和黑客們針鋒相對的研究,這項技術已經在多種流行的操作系統和編譯環境下得到了實踐,并日趨完善。這包括內存漏洞(堆棧溢出)和Web應用漏洞(腳本注入)等。

本書將從攻防兩個角度著重介紹Windows平臺下內存漏洞利用技術的方方面面。由于手機安全及Web應用中的腳本注入攻擊所使用的技術與Windows平臺下緩沖區溢出相差較大,且自成體系,本書只做原理性簡單介紹,如有機會將單獨著書以述之。本書將在第1篇與第2篇中由淺入深地集中介紹這部分內容。

1.1.4 漏洞的公布與0day響應

漏洞公布的流程取決于漏洞是被誰發現的。

如果是安全專家、Pen Tester、Ethic Hacker在測試中發現了漏洞,一般會立刻通知廠商的產品安全中心。軟件廠商在經過漏洞確認、補丁測試之后,會正式發布漏洞公告和官方補丁。

然而事情總是沒有那么簡單,如果漏洞被攻擊者找到,肯定不會立刻通知軟件廠商。這時漏洞的信息只有攻擊者自己知道,他可以寫出exploit利用漏洞來做任何事情。這種未被公布、未被修復的漏洞往往被稱做0day。

0day漏洞是危害最大的漏洞,當然對攻擊者來說也是最有價值的漏洞。

0day畢竟只是被少數攻擊者掌握,并且大多數情況下也不會有人浮躁到寫出蠕蟲來攻擊整個Internet。但有時0day漏洞會被曝光,那意味著全世界的黑客都知道這個漏洞,也懂得怎么去利用它,在廠商的官方補丁發布前,整個Internet的網絡將處于高危預警狀態。

0day曝光屬于嚴重的安全事件,一般情況下,軟件廠商都會進入應急響應處理流程,以最快的速度修復漏洞,保護用戶的合法權利。

公布漏洞的權威機構有兩個。

(1)CVE (Common Vulnerabilities and Exposures)http://cve.mitre.org/截至目前,這里收錄了兩萬多個漏洞。CVE會對每個公布的漏洞進行編號、審查。CVE編號通常也是引用漏洞的標準方式。

(2)CERT(Computer Emergency Response Team)http://www.cert.org/計算機應急響應組往往會在第一時間跟進當前的嚴重漏洞,包括描述信息、POC的發布鏈接、廠商的安全響應進度、用戶應該采取的臨時性防范措施等。

此外,微軟的安全中心所公布的漏洞也是所有安全工作者和黑客們最感興趣的地方。微軟每個月第二周的星期二發布補丁,這一天通常被稱為“Black Tuesday”,因為會有許多攻擊者通宵達旦地去研究這些補丁patch了哪些漏洞,并寫出exploit。因為在補丁剛剛發布的一段時間內,并非所有用戶都能及時修復,故這種新公布的漏洞也有一定利用價值。有時把攻擊這種剛剛被patch過的漏洞稱為1day攻擊。(patch發布后1天,叫做1day,5天叫做5day,未發patch統稱0day)

主站蜘蛛池模板: 汕头市| 安阳县| 伽师县| 聊城市| 怀安县| 大冶市| 肇州县| 阿勒泰市| 昂仁县| 碌曲县| 滁州市| 环江| 乐至县| 浮山县| 兰溪市| 封开县| 万山特区| 沅陵县| 开原市| 铁力市| 漯河市| 海南省| 桐梓县| 修水县| 益阳市| 增城市| 兴隆县| 黄龙县| 江孜县| 宝鸡市| 中超| 东阳市| 象州县| 东莞市| 错那县| 馆陶县| 吉安市| 革吉县| 太和县| 贡嘎县| 宝丰县|