當前位置:首頁 » 操作系統 » linux緩沖區溢出

linux緩沖區溢出

發布時間: 2022-02-13 15:14:48

A. linux里 釋放一個包是什麼意思

Linux釋放內存的命令:
sync
echo 1 > /proc/sys/vm/drop_caches

drop_caches的值可以是0-3之間的數字,代表不同的含義:
0:不釋放(系統默認值)
1:釋放頁緩存
2:釋放dentries和inodes
3:釋放所有緩存

釋放完內存後改回去讓系統重新自動分配內存。
echo 0 >/proc/sys/vm/drop_caches

free -m #看內存是否已經釋放掉了。

如果我們需要釋放所有緩存,就輸入下面的命令:
echo 3 > /proc/sys/vm/drop_caches

######### Linux釋放內存的相關知識 ###############

在Linux系統下,我們一般不需要去釋放內存,因為系統已經將內存管理的很好。但是凡事也有例外,有的時候內存會被緩存佔用掉,導致系統使用SWAP空 間影響性能,例如當你在linux下頻繁存取文件後,物理內存會很快被用光,當程序結束後,內存不會被正常釋放,而是一直作為caching。,此時就需 要執行釋放內存(清理緩存)的操作了。

Linux系統的緩存機制是相當先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁碟塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操作。但是在進行了大量文件操作之後,緩存會把內存資源基本用光。但實際上我們文件操作已經完成,這部分 緩存已經用不到了。這個時候,我們難道只能眼睜睜的看著緩存把內存空間占據掉嗎?所以,我們還是有必要來手動進行Linux下釋放內存的操作,其實也就是 釋放緩存的操作了。/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段.也就是說可以通過修改 /proc中的文件,來對當前kernel的行為做出調整.那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。要達到釋 放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就 是不釋放緩存。

一般復制了文件後,可用內存會變少,都被cached佔用了,這是linux為了提高文件讀取效率的做法:為了提高磁碟存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁碟塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。"

釋放內存前先使用sync命令做同步,以確保文件系統的完整性,將所有未寫的系統緩沖區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。

[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 7979 7897 82 0 30 3918
-/ buffers/cache: 3948 4031
Swap: 4996 438 4558

第一行用全局角度描述系統使用的內存狀況:
total 內存總數
used 已經使用的內存數,一般情況這個值會比較大,因為這個值包括了cache 應用程序使用的內存
free 空閑的內存數
shared 多個進程共享的內存總額
buffers 緩存,主要用於目錄方面,inode值等(ls大目錄可看到這個值增加)
cached 緩存,用於已打開的文件

第二行描述應用程序的內存使用:
-buffers/cache 的內存數:used - buffers - cached
buffers/cache 的內存數:free buffers cached
前個值表示-buffers/cache 應用程序使用的內存大小,used減去緩存值
後個值表示 buffers/cache 所有可供應用程序使用的內存大小,free加上緩存值

第三行表示swap的使用:
used 已使用
free 未使用

可用的內存=free memory buffers cached。

為什麼free這么小,是否關閉應用後內存沒有釋放?
但實際上,我們都知道這是因為Linux對內存的管理與Windows不同,free小並不是說內存不夠用了,應該看的是free的第二行最後一個值:-/ buffers/cache: 3948 4031 ,這才是系統可用的內存大小。
實際項目中的經驗告訴我們,如果因為是應用有像內存泄露、溢出的問題,從swap的使用情況是可以比較快速可以判斷的,但free上面反而比較難查看。我覺得既然核心是可以快速清空buffer或cache,但核心並沒有這樣做(默認值是0),我們不應該隨便去改變它。
一般情況下,應用在系統上穩定運行了,free值也會保持在一個穩定值的,雖然看上去可能比較小。當發生內存不足、應用獲取不到可用內存、OOM錯 誤等問題時,還是更應該去分析應用方面的原因,如用戶量太大導致內存不足、發生應用內存溢出等情況,否則,清空buffer,強制騰出free的大小,可 能只是把問題給暫時屏蔽了,所以說一般情況下linux都不用經常手動釋放內存。

B. 怎麼設置 linux 的串口緩沖區的大小,以防止數據丟失

一般的嵌入式操作系統的串口緩沖區需要設置
否則可能會產生溢出
linux下串口怎麼操作的不太清楚
沒看過內核
不過好像沒見過設置串口緩沖區大小的!

C. 在Linux下使用緩沖區溢出提權

看安全網站,很多被牆了的安全網站都有全套的資料。

不過,Linux 的更新速度很快,而且軟體差異導致的漏洞也不同。所以找到了漏洞攻擊辦法後,你還要找針對的 Linux 版本、以及要求的設置才能實現漏洞攻擊過程。
--------------------
醒醒,Linux 沒有 admin 這種管理員 ID 。
印象里一般也沒有 guest 的來賓 ID 。

D. 怎麼檢測linux 內核 tcp發送緩沖區溢出

內核,是一個操作系統的核心。它負責管理系統的進程、內存、設備驅動程序、文件和網路系統,決定著系統的性能和穩定性。Linux作為一個自由軟體, 在廣大愛好者的支持下,內核版本不斷更新。新的內核修訂了舊內核的bug,並增加了許多新的特性。

E. 如何防範Linux操作系統下緩沖區溢出攻擊 黑客武林

雖然Linux病毒屈指可數,但是基於緩沖區溢出(BufferOverflow)漏洞的攻擊還是讓眾多Linux用戶大吃一驚。所謂「世界上第一個Linux病毒」??reman,嚴格地說並不是真正的病毒,它實質上是一個古老的、在Linux/Unix(也包括Windows等系統)世界中早已存在的「緩沖區溢出」攻擊程序。reman只是一個非常普通的、自動化了的緩沖區溢出程序,但即便如此,也已經在Linux界引起很大的恐慌。

緩沖區溢出漏洞是一個困擾了安全專家30多年的難題。簡單來說,它是由於編程機制而導致的、在軟體中出現的內存錯誤。這樣的內存錯誤使得黑客可以運行一段惡意代碼來破壞系統正常地運行,甚至獲得整個系統的控制權。

Linux系統特性

利用緩沖區溢出改寫相關內存的內容及函數的返回地址,從而改變代碼的執行流程,僅能在一定許可權范圍內有效。因為進程的運行與當前用戶的登錄許可權和身份有關,僅僅能夠製造緩沖區溢出是無法突破系統對當前用戶的許可權設置的。因此盡管可以利用緩沖區溢出使某一程序去執行其它被指定的代碼,但被執行的代碼只具有特定的許可權,還是無法完成超越許可權的任務。

但是,Linux(包括Unix)系統本身的一些特性卻可以被利用來沖破這種許可權的局限性,使得能夠利用緩沖區溢出獲得更高的、甚至是完全的許可權。主要體現在如下兩方面:

1.Linux(包括Unix)系統通過設置某可執行文件的屬性為SUID或SGID,允許其它用戶以該可執行文件擁有者的用戶ID或用戶組ID來執行它。如果該可執行文件的屬性是root,同時文件屬性被設置為SUID,則該可執行文件就存在可利用的緩沖區溢出漏洞,可以利用它以root的身份執行特定的、被另外安排的代碼。既然能夠使得一個具有root許可權的代碼得以執行,就能夠產生一個具有超級用戶root許可權的Shell,那麼掌握整個系統的控制權的危險就產生了。

2.Linux(包括Unix)中的許多守護進程都是以root許可權運行。如果這些程序存在可利用的緩沖區溢出,即可直接使它以root身份去執行另外安排的代碼,而無須修改該程序的SUID或SGID屬性。這樣獲得系統的控制權將更加容易。

隨著現代網路技術的發展和網路應用的深入,計算機網路所提供的遠程登錄機制、遠程調用及執行機制是必須的。這使得一個匿名的Internet用戶有機會利用緩沖區溢出漏洞來獲得某個系統的部分或全部控制權。實際上,以緩沖區溢出漏洞為攻擊手段的攻擊佔了遠程網路攻擊中的絕大多數,這給Linux系統帶來了極其嚴重的安全威脅。

途徑分析

通常情況下攻擊者會先攻擊root程序,然後利用緩沖區溢出時發生的內存錯誤來執行類似「exec(sh)」的代碼,從而獲得root的一個Shell。為了獲得root許可權的Shell,攻擊者需要完成如下的工作:

1.在程序的地址空間內安排適當的特定代碼。一般使用如下兩種方法在被攻擊的程序地址空間內安排攻擊代碼。

2.通過適當地初始化寄存器和存儲器,使程序在發生緩沖區溢出時不能回到原來的執行處,而是跳轉到被安排的地址空間執行。

當攻擊者找到一種途徑可以變原程序的執行代碼和流程時,攻擊的危險就產生了。

共2頁: 1 [2]

內容導航

第 1 頁:Linux系統特性

防範措施

Linux下的緩沖區溢出攻擊威脅既來自於軟體的編寫機制,也來自於Linux(和Unix)系統本身的特性。實際上,緩沖區溢出攻擊及各種計算機病毒猖獗的根本原因在於現代計算機系統都是採用馮?諾依曼「存儲程序」的工作原理。這一基本原理使得程序和數據都可以在內存中被繁殖、拷貝和執行。因此,要想有效地防範緩沖區溢出攻擊就應該從這兩個方面雙管其下。

確保代碼正確安全

緩沖區溢出攻擊的根源在於編寫程序的機制。因此,防範緩沖區溢出漏洞首先應該確保在Linux系統上運行的程序(包括系統軟體和應用軟體)代碼的正確性,避免程序中有不檢查變數、緩沖區大小及邊界等情況存在。比如,使用grep工具搜索源代碼中容易產生漏洞的庫調用,檢測變數的大小、數組的邊界、對指針變數進行保護,以及使用具有邊界、大小檢測功能的C編譯器等。

基於一定的安全策略設置系統

攻擊者攻擊某一個Linux系統,必須事先通過某些途徑對要攻擊的系統做必要的了解,如版本信息等,然後再利用系統的某些設置直接或間接地獲取控制權。因此,防範緩沖區溢出攻擊的第二個方面就是對系統設置實施有效的安全策略。這些策略種類很多,由於篇幅有限只列舉幾個典型措施:

(1)在裝有Telnet服務的情況下,通過手工改寫「/etc/inetd.conf」文件中的Telnet設置,使得遠程登錄的用戶無法看到系統的提示信息。具體方法是將Telnet設置改寫為:

telnet stream tcp nowait root /usr/sbin/tcpd/in.telnetd -h

末尾加上「-h」參數可以讓守護進程不顯示任何系統信息,只顯示登錄提示。

(2)改寫「rc.local」文件。默認情況下,當登錄Linux系統時系統運行rc.local文件,顯示該Linux發行版本的名字、版本號、內核版本和伺服器名稱等信息,這使得大量系統信息被泄露。將「rc.local」文件中顯示這些信息的代碼注釋掉,可以使系統不顯示這些信息。

一種方法是在顯示這-些信息的代碼行前加「#」:

……# echo 「」>/etc/issue# echo 「$R」>>/etc/issue#echo」Kernel $ (uname -r)on $a $(uname -m)」>>/etc/issue##echo>>/etc/issue……

另一種方法是將保存有系統信息的文件/etc/issue.net和issue刪除。這兩個文件分別用於在遠程登錄和本地登錄時向用戶提供相關信息。刪除這兩個文件的同時,仍需要完成方法一中的注釋工作,否則,系統在啟動時將會自動重新生成這兩個文件。

(3)禁止提供finger服務。在Linux系統中,使用finger命令可以顯示本地或遠程系統中目前已登錄用戶的詳細信息。禁止提供finger服務的有效方法是,通過修改該文件屬性、許可權(改為600)使得只有root用戶才可以執行該命令。

(4)處理「inetd.conf」文件。Linux系統通過inetd(超級伺服器)程序根據網路請求裝入網路程序。該程序通過「/etc/inetd.conf」文件獲得inetd在監聽哪些網路埠,為每個埠啟動哪些特定服務等信息。因此,該文件同樣會泄露大量的敏感信息。解決問題的方法是,通過將其許可權改為600隻允許root用戶訪問,並通過改寫「/etc/inetd.conf」文件將不需要的服務程序禁止掉,最後修改該文件的屬性使其不能被修改。

總結

緩沖區溢出攻擊之所以能成為一種常見的攻擊手段,其原因在於緩沖區溢出漏洞太普遍,且易於實現攻擊,因此緩沖區溢出問題一直是個難題。

所幸的是,OpenBSD開發組為解決這一安全難題採用了三種新的有效策略。相信不久的將來,Linux用戶可以不再為緩沖區溢出攻擊而寢食難安了。

RAR文件在Linux下用起來

要在Linux下處理.rar文件,需要安裝RARforLinux。該軟體可以從網上下載,但要記住,它不是免費的。大家可從http://www.onlinedown.net/sort/125_1.htm下載RARforLinux 3.2.0,然後用下面的命令安裝:

# tar -xzpvf rarlinux-3.2.0.tar.gz

# cd rar

# make

安裝後就有了rar和unrar這兩個程序,rar是壓縮程序,unrar是解壓程序。它們的參數選項很多,這里只做簡單介紹,依舊舉例說明一下其用法:

# rar a all *.mp3

這條命令是將所有.mp3的文件壓縮成一個rar包,名為all.rar,該程序會將.rar 擴展名將自動附加到包名後。

# unrar e all.rar

這條命令是將all.rar中的所有文件解壓出來。

F. 怎樣處理Android中的防緩沖區溢出技術

Android系統提供了非常嚴格的多層次的安全保護措施,包括代碼。為了防止惡意用戶採用惡意軟體進行緩沖區溢出攻擊或者進行「越獄」操作,自Android 4.0版本之後,內核就引入了ASLR技術來對代碼進行保護,本文將詳細介紹Android中的防緩沖區溢出技術的來龍去脈。

1、什麼是ASLR?

ASLR(Address space layout randomization)是一種針對緩沖區溢出的安全保護技術,通過對堆、棧、共享庫映射等線性區布局的隨機化,通過增加攻擊者預測目的地址的難度,防止攻擊者直接定位攻擊代碼位置,達到阻止溢出攻擊的目的。通常情況下,黑客會利用某個特定函數或庫駐存在特定內存位置的這一事實,通過在操縱堆或其他內存錯誤時調用該函數來發動攻擊。ASLR則能夠避免這種情況,因為它能確保系統和應用程序的代碼每次被載入時不會出現在同一個存儲位置。蘋果的iOS系統自iOS 4.3以後就支持ASLR技術;雖然Comex在7月份發布的「iPhone越獄」軟體就已攻克這一防禦措施。而Android已經在4.0中應用了ASLR技術。

據研究表明ASLR可以有效的降低緩沖區溢出攻擊的成功率,如今Linux、FreeBSD、Windows等主流操作系統都已採用了該技術。

2、緩沖區溢出攻擊原理

緩沖區溢出是一種非常普遍、非常危險的漏洞,在各種操作系統、應用軟體中廣泛存在。利用緩沖區溢出攻擊,可以導致程序運行失敗、系統宕機、重新啟動等後果。更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權,進而進行各種非法操作。

緩沖區溢出(圖1)是指當計算機向緩沖區內填充數據位數時超過了緩沖區本身的容量溢出的數據覆蓋在合法數據上,理想的情況是程序檢查數據長度並不允許輸入超過緩沖區長度的字元,但是絕大多數程序都會假設數據長度總是與所分配的儲存空間相匹配,這就為緩沖區溢出埋下隱患.操作系統所使用的緩沖區 又被稱為"堆棧". 在各個操作進程之間,指令會被臨時儲存在"堆棧"當中,"堆棧"也會出現緩沖區溢出。

在當前網路與分布式系統安全中,被廣泛利用的50%以上都是緩沖區溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩沖區溢出中,最為危險的是堆棧溢出,因為入侵者可以利用堆棧溢出,在函數返回時改變返回程序的地址,讓其跳轉到任意地址,帶來的危害一種是程序崩潰導致拒絕服務,另外一種就是跳轉並且執行一段惡意代碼,比如得到shell,然後為所欲為。

歷史上最著名的緩沖區溢出攻擊可能要算是1988年11月2日的Morris Worm所攜帶的攻擊代碼了。這個網際網路蠕蟲利用了fingerd程序的緩沖區溢出漏洞,給用戶帶來了很大危害。此後,越來越多的緩沖區溢出漏洞被發現。從bind、wu-ftpd、telnetd、apache等常用服務程序,到Microsoft、Oracle等軟體廠商提供的應用程序,都存在著似乎永遠也彌補不完的緩沖區溢出漏洞。

G. linux nginx堆緩沖區溢出漏洞怎麼檢測出

pmap PID #查看靜態內存使用情況 top #按shift+m 按照內存使用情況進行排序。 ps -ef | grep nginx #查看PID 比如是1234 cat /proc/1234/status #查看詳細的信息

H. 怎麼用msf攻擊linux環境下web伺服器的緩沖區溢出漏洞

緩沖區溢出是一種非常普遍、非常危險的漏洞,在各種操作系統、應用軟體中廣泛存在。利用緩沖區溢出攻擊,可以導致程序運行失敗、系統當機、重新啟動等後果。更為嚴重的是,

I. linux的緩沖區溢出,使用什麼payload

8.1 緩沖區溢出攻擊原理
1. 局部變數與堆棧的關系
在一個程序中,會聲明各種變數。靜態全局變數是位於數據段並且在程序開始運行的時候被初始化,而局部變數則在堆棧中分配,只在該函數內部有效。
如果局部變數使用不當,會造成緩沖區溢出漏洞。例如,以下程序將命令行的第1個參數拷貝到buf局部變數中。
int main(int argc, char **argv)
{
char buf[80];
strcpy(buf, argv[1]);
}
在一次函數調用中,堆棧中將被依次壓入:參數、返回地址。如果函數有局部變數,接下來,就在堆棧中開辟相應的空間(SUB ESP,x)以構造變數。函數執行結束時,恢復堆棧到函數調用的地址,彈出返回地址到EIP以繼續執行程序。
例如,調用函數main(int argc, char **argv)時,堆棧的使用情況如圖8-1所示。



ESP→

← buf →



















寄存器

寄存器

寄存器

ESP→

EIP

EIP

ESP→

EIP

EIP



argc

argc

argc

ESP→

argc

argv

argv

argv

ESP→

1)調用之前 2)參數、EIP壓棧 3)寄存器壓棧 4)釋放局部變數 5)返回
分配局部變數 寄存器出棧

圖8-1 函數調用與堆棧
從上述main函數的反匯編代碼中,第3步對應的代碼為00401000H~00401003H,指令「sub esp,50h」在堆棧中分配了80個位元組作為局部變數buf的內存空間。
00401000 push ebp
00401001 mov ebp,esp
00401003 sub esp,50h
00401006 mov eax,dword ptr [ebp+0Ch]
00401009 mov ecx,dword ptr [eax+4]
0040100C push ecx
0040100D lea edx,[ebp-50h]
00401010 push edx
00401011 call 00401020
00401016 add esp,8
00401019 mov esp,ebp
0040101B pop ebp
0040101C ret
打開bomain工程,在Release模式下編譯。如圖8-2所示,選擇菜單Project→Settings…下,在「Win32 Release」的「Debug」頁中,設定「Program arguments」為字元串「This is test result of buffer overflow demo code.」。加雙引號的目的是將整個字元串作為一個參數,即argv[1],否則,這個字元串將被分解為多個參數,argv[1]=This,argv[2]=is等等。

圖8-2 設定程序運行參數
程序在Release模式下編譯、運行,不能直接在源程序中設置斷點。編譯完成後,按F11鍵,VC提示沒有調試信息,按「OK」按鈕繼續運行。這時,按Ctrl+G,在左側選擇「Address」,編輯框內輸入00401000,顯示main函數所在地址的匯編代碼,如圖8-3所示。

圖8-3 顯示指定地址處的匯編代碼
在「00401019」一行按F9設置斷點,按F5執行程序,執行到「00401019」處程序進入斷點,EIP、ESP、EBP寄存器的值為:
EIP = 00401019 ESP = 0012FF30 EBP = 0012FF80
在內存窗口的地址欄輸入ESP,顯示堆棧中的內容為:
0012FF30 54 68 69 73 20 69 73 20 74 65 73 74 20 72 65 73 This is test res
0012FF40 75 6C 74 20 6F 66 20 62 75 66 66 65 72 20 6F 76 ult of buffer ov
0012FF50 65 72 66 6C 6F 77 20 64 65 6D 6F 20 63 6F 64 65 erflow demo code
0012FF60 2E 00 FF FF 8D 16 F5 77 69 1E 40 00 00 00 37 00 [email protected].
0012FF70 00 00 00 00 88 49 37 00 00 00 00 00 61 12 40 00 .......7.....a.@.
0012FF80 C0 FF 12 00 C4 11 40 00 02 00 00 00 80 0E 41 00 [email protected].
buf的地址為0012FF30,可以看到argv[1]的內容已經被拷貝到buf中。
後面一行中,「00000002」為堆棧中的argc,「00410E80」為堆棧中的argv,「004011C4」為堆棧中的
0012FF80 0012FFC0 004011C4 00000002 00410E80

熱點內容
輕應用伺服器適合搭建網站嗎 發布:2024-11-15 11:36:08 瀏覽:246
c語言的百分號 發布:2024-11-15 11:34:24 瀏覽:31
一加五安卓8什麼時候推送 發布:2024-11-15 11:19:40 瀏覽:854
暗影騎士擎有哪些配置 發布:2024-11-15 11:13:46 瀏覽:598
方舟主機專用伺服器是什麼意思 發布:2024-11-15 11:12:23 瀏覽:8
創維最早的伺服器是什麼 發布:2024-11-15 11:11:35 瀏覽:864
手機配置太低怎麼下載原聲 發布:2024-11-15 11:03:31 瀏覽:905
21款奧迪a6配置有哪些 發布:2024-11-15 11:03:20 瀏覽:120
sql內連接外連接 發布:2024-11-15 11:03:19 瀏覽:601
學完python基礎 發布:2024-11-15 11:01:56 瀏覽:63