国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

圖書館局域網(wǎng)緩沖區(qū)溢出漏洞原理分析

2012-10-13 13:19:56黃惠烽
關(guān)鍵詞:字符串子程序緩沖區(qū)

黃惠烽

(四川民族學(xué)院 圖書館,四川 康定 626001)

圖書館局域網(wǎng)緩沖區(qū)溢出漏洞原理分析

黃惠烽

(四川民族學(xué)院 圖書館,四川 康定 626001)

隨著數(shù)字圖書館的發(fā)展,圖書館局域網(wǎng)的安全工作越來越受到大家的重視,近年出現(xiàn)的緩沖區(qū)溢出漏洞也成為了網(wǎng)絡(luò)攻擊中最常用、最典型的攻擊漏洞.本文通過講述緩沖區(qū)溢出漏洞的原理,介紹了預(yù)防緩沖區(qū)溢出漏洞的相關(guān)方法,使得圖書館局域網(wǎng)盡量避免緩沖區(qū)溢出漏洞的攻擊.

局域網(wǎng);緩沖區(qū)溢出漏洞;原理;預(yù)防

隨著數(shù)字圖書館的不斷發(fā)展,圖書館局域網(wǎng)的安全也越來越受到人們的重視,圖書館管理系統(tǒng)中的讀者信息、圖書借還信息、藏書目錄和電子資源數(shù)據(jù)等信息都是圖書館的核心數(shù)據(jù),一旦這些數(shù)據(jù)遭遇丟失或損壞將會嚴(yán)重影響圖書館各部門的工作,嚴(yán)重時將導(dǎo)致圖書館工作的癱瘓.因此圖書館局域網(wǎng)安全工作不容刻緩.

現(xiàn)在的很多操作系統(tǒng)和應(yīng)用軟件或多或少都存在著各種安全隱患,從UNIX到Microsoft操作系統(tǒng)無一例外,只不過是這些系統(tǒng)的漏洞被發(fā)現(xiàn)時間的早晚不同,對系統(tǒng)造成的危害程度不同而已.作為網(wǎng)絡(luò)管理員應(yīng)該熟悉這些漏洞,并掌握這些漏洞的原理還和補(bǔ)救方法.

因編程缺陷或程序設(shè)計語言中的問題造成的緩沖區(qū)溢出問題是一種廣泛存在的安全漏洞,人們對緩沖區(qū)溢出的漏洞早已有所了解,這方面的漏洞在圖書館局域網(wǎng)中也是時有發(fā)生的,但是直到近幾年,才引起了人們的重視,因此研究圖書館局域網(wǎng)中的緩沖區(qū)溢出漏洞非常必要.

1 緩沖區(qū)溢出簡介

緩沖區(qū)溢出英文叫Buffer overflow,它是一個非常危險而又常見的漏洞,它能在windows、Unix等操作系統(tǒng)存在,也可以在SQL sever、日歷程序、計算器程序和游戲程序等應(yīng)用軟件中存在.1988年發(fā)生的Morris“蠕蟲”事件就是利用緩沖區(qū)溢出漏洞的“杰作”之一,著名紅色代碼網(wǎng)絡(luò)病毒是根據(jù)微軟提供的因特網(wǎng)服務(wù)軟件IIS4.0、5.0中的一個緩沖區(qū)溢出漏洞傳播的.據(jù)統(tǒng)計,緩沖區(qū)溢出漏洞占了已確認(rèn)漏洞的20%.這種漏洞被認(rèn)為是輸入驗(yàn)證漏洞的子集,輸入驗(yàn)證漏洞則幾乎占了已確認(rèn)漏洞的50%.對于軟件使用者來說,緩沖區(qū)溢出是最可怕的漏洞.它經(jīng)常會引起網(wǎng)絡(luò)蠕蟲、有助于利用的能動性的工具和入侵嘗試.但是,我們可以這樣說,發(fā)生緩沖區(qū)溢出的基本都是那些結(jié)構(gòu)比較差的軟件程序產(chǎn)品,它們基本上都存在一些不足之處.那么什么是緩沖區(qū)溢出呢?緩沖區(qū)溢出為什么能產(chǎn)生這么大的危害呢?

緩沖區(qū)溢出顧名思義就是緩沖區(qū)太小,裝不了足夠多的數(shù)據(jù),多出來的部分跑出來了.產(chǎn)生緩沖區(qū)溢出的主要原因是,當(dāng)向一個有限的緩沖區(qū)拷貝了過長的字符串時,這將導(dǎo)致過長的字符串覆蓋相鄰的存儲單元,從而引起程序運(yùn)行失敗,個別人甚至可以惡意利用這種漏洞去執(zhí)行任意命令,取得系統(tǒng)的特權(quán),從而進(jìn)行系統(tǒng)的攻擊和破壞.

2 緩沖區(qū)溢出漏洞的原理

我們需要知道什么是緩沖區(qū),一般來說,緩沖區(qū)就是分配的一塊存儲空間,其中可以存儲某種類型的文本或者數(shù)據(jù).程序員利用緩沖區(qū)的一塊或多塊數(shù)據(jù)提供系統(tǒng)預(yù)先制定的空間.例如,用C語言編寫程序時會經(jīng)常用到緩沖區(qū)來存放用戶輸入的姓名,程序員必須首先判斷姓名緩沖區(qū)要求有多少字符,該字段允許多少字符,或者用戶在給定的字段可以敲多少下鍵,這稱為字符緩沖區(qū)的大小.

一個程序通常由多個子程序(模塊)組成,程序規(guī)模越大,模塊就越多.當(dāng)對一個程序編譯以后,在內(nèi)存中劃分三種區(qū)域,分別存放程序代碼區(qū)、數(shù)據(jù)區(qū)和堆棧區(qū).其中程序中定義的各種變量和緩沖區(qū)存放在數(shù)據(jù)區(qū),調(diào)用子程序的返回地址存放在堆棧區(qū),當(dāng)控制從子程序返回時,按照堆棧頂指示的地址返回到主控程序.

在利用C語言編寫程序時一般要用到輸入函數(shù)來獲得用戶輸入的姓名.當(dāng)用戶試圖將超過緩沖區(qū)能夠處理的更多的姓名字符輸入到緩沖區(qū)時,程序中如果沒有緩沖區(qū)越界檢查機(jī)制,當(dāng)超長的字符串輸入后,就會產(chǎn)生緩沖區(qū)的溢出.例如,如果程序員編寫的程序中定義:char name[15],當(dāng)輸入超過15個字節(jié)長的字符串后,就會溢出字符緩沖區(qū).

在C語言中它是假定了緩沖區(qū)的長度是足夠的,所以數(shù)組是不進(jìn)行邊界檢查的.但是實(shí)踐中往往會出現(xiàn)特殊情況,當(dāng)向局部變量拷貝了一個超過定義長度的字符串時,這時候其他的變量空間將會被超出的字符串所覆蓋,這時變量就會出現(xiàn)異常情況.另一種情況下,由于超出的字符串覆蓋了子程序的返回地址,子程序返回時便可能轉(zhuǎn)向一個未知的地址,從而使程序發(fā)生錯誤.

讓我們來看看另一個例子:

這個程序的函數(shù)明顯有一個內(nèi)存緩沖區(qū)編碼錯誤.這個函數(shù)出現(xiàn)錯誤的主要原因,一是因?yàn)闆]有進(jìn)行邊界檢查就復(fù)制了字符串,二是錯誤地使用了strcpy()而沒有使用strncpy().所以運(yùn)行這個程序就會產(chǎn)生段錯誤,strcpy()將*str的內(nèi)容(lars[])復(fù)制到bf[]里,到在字符串中碰到一個空字符.顯然,*s比 bf[]大得多,bf[]只有26個字節(jié),而 *s有356個字節(jié)的內(nèi)容.當(dāng)程序執(zhí)行到這個地方時,bf之后的堆棧中330個字節(jié)將會全被覆蓋.當(dāng)函數(shù)返回時,程序嘗試讀取返回地址的下一個指令,此時就會得到一個段錯誤.

在網(wǎng)絡(luò)上最常見的是通過制造緩沖區(qū)溢出使程序運(yùn)行一個用戶shell,再通過shell執(zhí)行其它命令.如果該程序?qū)儆趓oot且有suid權(quán)限的話,攻擊者就獲得了一個有root權(quán)限的shell,可以對系統(tǒng)進(jìn)行任意操作了.在執(zhí)行溢出的電腦打開DOS(shell).只要很簡單的一段程序:

只要到這里就獲得shell了,再通過shell執(zhí)行其它命令,黑客們可以激動地?fù)碛辛艘慌_“肉雞”,可以對這臺電腦為所欲為了.

下面我們再來看一下緩沖區(qū)溢出漏洞的攻擊過程:

首先對ROOT程序進(jìn)行試探性攻擊,然后執(zhí)行類似exec(sh)的執(zhí)行代碼來獲得具有root權(quán)限的shell.此步可再分二步走:a.植入一定的代碼到程序中b.初始化內(nèi)存和寄存器,使程序跳轉(zhuǎn)到預(yù)定的程序中去.步驟如下:

(1)植入一定的代碼到程序中.當(dāng)攻擊者輸入一個字符串到被攻擊程序時,這個字符串會被放到緩沖區(qū)里去.該字符串的相關(guān)信息就成為了可以運(yùn)行的一些指令序列.在這個時候攻擊代碼就可以存放在被攻擊程序的緩沖區(qū)中去.第二種是利用已經(jīng)存在的代碼.前提是攻擊者想要的代碼已經(jīng)在被攻擊的程序中了.這時候需要完成的任務(wù)是對代碼參數(shù)的傳遞.

(2)使程序跳轉(zhuǎn)到預(yù)定的程序中去方法.當(dāng)程序沒有通過緩沖區(qū)溢出檢查時,就會產(chǎn)生一個相應(yīng)的緩沖區(qū),它會影響程序的執(zhí)行順序,使得程序跳轉(zhuǎn)到一個未知的地址.

3 預(yù)防緩沖區(qū)溢出方法

目前預(yù)防緩沖區(qū)溢出的方法有很多種,但是基本有三種基本方法:

(1)通過給操作系統(tǒng)添加補(bǔ)丁等辦法,一旦某個漏洞被廠家的補(bǔ)丁程序修補(bǔ)了,那么針對該漏洞的攻擊手段也將失效,這樣緩沖區(qū)就不能執(zhí)行,攻擊代碼就不能寫入操作系統(tǒng).

(2)編寫程序時要使用正確的方法,避免所拷貝的字符串長度超過所定義的字符串長度,保證代碼的正確性.

(3)通過編譯器作為關(guān)卡,實(shí)現(xiàn)邊界檢查,這樣可以實(shí)現(xiàn)保護(hù)緩沖區(qū)的目的,避免了緩沖區(qū)的溢出.

但是不管編寫什么程序,做到?jīng)]有錯誤是極其困難的,即使最仔細(xì)的復(fù)查通常也會遺漏其中一些錯誤.開發(fā)安全程序的最重要方法之一是最小化特權(quán).那意味著程序的各個部分應(yīng)該具有它們需要的唯一特權(quán),一點(diǎn)也不能多.這樣即使程序具有缺陷,也可能會避免將該缺陷轉(zhuǎn)化為安全事故.

4 結(jié)束語

緩沖區(qū)溢出漏洞問題并不是一個新問題,許多常見的工具都容易受到緩沖區(qū)溢出的攻擊.但入侵者需要很高的技巧才能實(shí)現(xiàn)緩沖區(qū)溢出的攻擊.實(shí)際上也確實(shí)很少入侵者有高超的編程知識來做到這一點(diǎn).為了防止系統(tǒng)不受到緩沖區(qū)溢出攻擊,應(yīng)該要求程序員在編程時,限制緩沖區(qū)的輸入字符數(shù),使它們不超過緩沖區(qū)的定義長度,這樣就不會產(chǎn)生緩沖區(qū)溢出問題.

〔1〕Necula G C;Mc Peak S;Weimer W CCured:typesafe retrofitting of legacy code 2002.

〔2〕U Hermann Overview of pscan source package 2006.

〔3〕Z Lin;B Mao;L Xie LibsafeXP.A practical and transparent tool for run-time buffer over flow preventions 2006.

〔4〕Luk C;Cohn R;Muth R Pin:Building Customized Program Analysis Tools with Dynamic Instrumentation 2005.

〔5〕Taeho Oh.Advanced Buffer Overfiow Expioit [ EB/OL]。 http://postech.edu/ohhara,2004-09.

〔6〕Vendicator,StackShield:A stack smashing technique protection tool for Linux 2010.

〔7〕徐啟杰.基于Win32平臺的漏洞挖掘和漏洞利用技術(shù)研究[J].上海交通大學(xué)(學(xué)位論文),2007.

G250.73

A

1673-260X(2012)05-0131-02

猜你喜歡
字符串子程序緩沖區(qū)
嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設(shè)計與實(shí)現(xiàn)
淺談子程序在數(shù)控車編程中的應(yīng)用
關(guān)鍵鏈技術(shù)緩沖區(qū)的確定方法研究
子程序在數(shù)控車加工槽中的應(yīng)用探索
西門子840D系統(tǒng)JOG模式下PLC調(diào)用并執(zhí)行NC程序
一種新的基于對稱性的字符串相似性處理算法
依據(jù)字符串匹配的中文分詞模型研究
地理信息系統(tǒng)繪圖緩沖區(qū)技術(shù)設(shè)計與實(shí)現(xiàn)
電視技術(shù)(2012年1期)2012-06-06 08:13:58
簡化編程與子程序嵌套的應(yīng)用
科技傳播(2011年24期)2011-08-29 05:39:46
临清市| 湖口县| 家居| 克东县| 昌乐县| 呼和浩特市| 监利县| 吉林省| 固原市| 古丈县| 如皋市| 开江县| 宁远县| 稷山县| 长兴县| 澄迈县| 绥芬河市| 吉安县| 嘉兴市| 胶州市| 开封县| 犍为县| 水富县| 横山县| 黄石市| 湖口县| 通河县| 察雅县| 天峨县| 大悟县| 新竹县| 郴州市| 焉耆| 秭归县| 洛宁县| 谢通门县| 上虞市| 类乌齐县| 屏东县| 峨边| 孝义市|