Linux核心即時入侵檢測安全增強-防止緩衝區溢位的核心補丁(轉)
Linux核心即時入侵檢測安全增強-防止緩衝區溢位的核心補丁(轉)[@more@]三.防止緩衝區溢位的核心補丁
冰塊
這一部分我們來描述一個對系統安全有很大危害的緩衝區溢位的Linux核心補丁。
3.1 緩衝區溢位漏洞攻擊
在C語言中對佇列資源的限制很容易讓一個記憶體溢位。有很多廣為人知的方法來利用緩衝區溢位的漏洞來對系統進行攻擊。他們可以利用緩衝區溢位的漏洞來向系統內插入一些惡意的系統命令操作,就可以得到一個特權的shell,從而對系統進行控制。主要就是利用攻擊由root或是administrator執行的程式,插入一些命令,而這些命令就有了root的執行許可權。
一個root的程式可以劃分為以下的幾種型別:
互動式的:這是一個標準的超級使用者程式。使用者ID(UID)和有效使用者ID(SUID)都為0。對於這個使用者沒有什麼許可權問題,因為使用者已經取得了對系統的所有控制許可權。
後臺:這個主要是指在系統啟動的時候生成的root使用者級別執行的程式後臺程式。雖然對這方面的技術比較複雜,但是大多數時候也可以利用來進行緩衝區溢位漏洞的攻擊。
Setuid程式:這樣的程式有一隊使用者的標記(UID,EUID),並且值都應該是大於-的。所以一個setuid到root的程式表明下面的一個宏定義。
#define IS_SETUID_TO_ROOT(proc) !((proc)->euid)&&(proc)->uid
對於這個宏不同的系統可能有不同的定義。
在下面的內容裡,我們將會討論在核心中什麼樣的root程式可以被馬上識別出來。
3.2 後臺的root程式
只有一個Unix系統才會有root程式在後臺執行。大多數情況下,系統管理員不會去直接開啟他們也不會控制他們的執行,所以,象我們前面提到的一樣,這樣的特權程式就會被當作緩衝區溢位漏洞攻擊的主要目標。大概可以分成下面幾種型別:
後臺程式都是在系統系統的時候直接由初始化指令碼執行的。就象網路伺服器中的inetd超級伺服器程式那樣,裡面有web伺服器,mail伺服器(主要是sendmail)就是利用這樣的方式來啟動的。另外一個這樣的例子就是syslogd後臺程式。
網路伺服器由inetd超級伺服器啟動來履行如遠端訪問(telnet),檔案傳輸(ftp)等等的服務。
程式執行啟動一個特定的後臺程式,大多數都是在系統啟動的時候執行。(屬於型別級別1。)
程式是在未來的特定時間用at命令來啟動的。實際上這些程式可以認為是特定型別的級別分類。
程式是在互動的會話時刻在後臺執行的。這些都是某些特定的原因才應用的。
這些程式一般來說都沒有一個控制終端。為了告訴它們不在程式互動的模式下執行,我們可以利用下面的宏定義。
#define IS_A_ROOT_RAEMON(proc) !((proc)->euid)&&((proc)->tty==NULL)
這裡,我們首先檢查程式是否是以root級別來執行的,然後我們檢查這個程式是否有一個控制終端。
3.3 系統呼叫的工具
為了防止危險的緩衝區溢位漏洞的攻擊,有一些簡單的簡單程式碼加入到以下的幾個系統呼叫中去。
Execve(executable-file,…):這個系統呼叫允許一個嵌入的setuid程式來呼叫一個互動的shell外殼。為了阻止這樣的呼叫和其他的簡單攻擊,我們定義了一個原始的檢查,來確定這個呼叫的程式是不是擁有root的許可權。如果沒有,就不再繼續進行檢查,這個系統呼叫可以繼續執行,就忽略擷取系統呼叫的其他動作。如果呼叫的系統呼叫有root的許可權,進一步的,setuid為root,那麼這個訪問控制資料庫就要決定證明是否這個引數executable-file是否可以被setuid程式呼叫。如果接受了的話,這個呼叫就繼續進行。除非這個呼叫被入侵處理的子系統禁止拋棄。其他情況下,這些呼叫的情況都會記錄在一個日誌檔案裡面。
Setuid:我們認為任何一個setuid為root或是在後臺以root許可權的程式都是可以作為一個潛在的攻擊目標。對這樣的程式我們用特定的檢查程式來過濾這些系統呼叫。一個setuid的程式是可以在互動模式下,在呼叫其他避免執行setuid程式的系統呼叫之前來執行setuid(0)呼叫的。透過這樣的方式,我們可以跳過所有的我們介紹過的檢查。因為這個原因,我們必須載入一段程式碼來補充setuid系統呼叫來阻止一個setuid程式得到 root的UID許可權。
Chmod:當我們呼叫一個setuid的程式。使用者可以應用Chmod來取得對敏感檔案的寫許可權。(如,密碼檔案)。阻止這樣的和其他相關的攻擊,一個檢查程式碼加到chmod系統呼叫程式碼裡來阻止一個setuid程式對一般檔案或目錄訪問許可權的修改。
Chown:當呼叫一個setuid程式的時候,chown可以用來改變一個可執行檔案的擁有者為root。Chown是一個非常的呼叫,尤其是當他和 chmod一起應用的時候。基於這個原因,我們也加入了一段檢查的程式碼到chown系統呼叫裡面去,來阻止一個setuid程式修改常規檔案或目錄的擁有權。
Chgrp:和chown一樣,來利用chgrp改變組使用者來取得一定的訪問許可權來攻擊系統
冰塊
這一部分我們來描述一個對系統安全有很大危害的緩衝區溢位的Linux核心補丁。
3.1 緩衝區溢位漏洞攻擊
在C語言中對佇列資源的限制很容易讓一個記憶體溢位。有很多廣為人知的方法來利用緩衝區溢位的漏洞來對系統進行攻擊。他們可以利用緩衝區溢位的漏洞來向系統內插入一些惡意的系統命令操作,就可以得到一個特權的shell,從而對系統進行控制。主要就是利用攻擊由root或是administrator執行的程式,插入一些命令,而這些命令就有了root的執行許可權。
一個root的程式可以劃分為以下的幾種型別:
互動式的:這是一個標準的超級使用者程式。使用者ID(UID)和有效使用者ID(SUID)都為0。對於這個使用者沒有什麼許可權問題,因為使用者已經取得了對系統的所有控制許可權。
後臺:這個主要是指在系統啟動的時候生成的root使用者級別執行的程式後臺程式。雖然對這方面的技術比較複雜,但是大多數時候也可以利用來進行緩衝區溢位漏洞的攻擊。
Setuid程式:這樣的程式有一隊使用者的標記(UID,EUID),並且值都應該是大於-的。所以一個setuid到root的程式表明下面的一個宏定義。
#define IS_SETUID_TO_ROOT(proc) !((proc)->euid)&&(proc)->uid
對於這個宏不同的系統可能有不同的定義。
在下面的內容裡,我們將會討論在核心中什麼樣的root程式可以被馬上識別出來。
3.2 後臺的root程式
只有一個Unix系統才會有root程式在後臺執行。大多數情況下,系統管理員不會去直接開啟他們也不會控制他們的執行,所以,象我們前面提到的一樣,這樣的特權程式就會被當作緩衝區溢位漏洞攻擊的主要目標。大概可以分成下面幾種型別:
後臺程式都是在系統系統的時候直接由初始化指令碼執行的。就象網路伺服器中的inetd超級伺服器程式那樣,裡面有web伺服器,mail伺服器(主要是sendmail)就是利用這樣的方式來啟動的。另外一個這樣的例子就是syslogd後臺程式。
網路伺服器由inetd超級伺服器啟動來履行如遠端訪問(telnet),檔案傳輸(ftp)等等的服務。
程式執行啟動一個特定的後臺程式,大多數都是在系統啟動的時候執行。(屬於型別級別1。)
程式是在未來的特定時間用at命令來啟動的。實際上這些程式可以認為是特定型別的級別分類。
程式是在互動的會話時刻在後臺執行的。這些都是某些特定的原因才應用的。
這些程式一般來說都沒有一個控制終端。為了告訴它們不在程式互動的模式下執行,我們可以利用下面的宏定義。
#define IS_A_ROOT_RAEMON(proc) !((proc)->euid)&&((proc)->tty==NULL)
這裡,我們首先檢查程式是否是以root級別來執行的,然後我們檢查這個程式是否有一個控制終端。
3.3 系統呼叫的工具
為了防止危險的緩衝區溢位漏洞的攻擊,有一些簡單的簡單程式碼加入到以下的幾個系統呼叫中去。
Execve(executable-file,…):這個系統呼叫允許一個嵌入的setuid程式來呼叫一個互動的shell外殼。為了阻止這樣的呼叫和其他的簡單攻擊,我們定義了一個原始的檢查,來確定這個呼叫的程式是不是擁有root的許可權。如果沒有,就不再繼續進行檢查,這個系統呼叫可以繼續執行,就忽略擷取系統呼叫的其他動作。如果呼叫的系統呼叫有root的許可權,進一步的,setuid為root,那麼這個訪問控制資料庫就要決定證明是否這個引數executable-file是否可以被setuid程式呼叫。如果接受了的話,這個呼叫就繼續進行。除非這個呼叫被入侵處理的子系統禁止拋棄。其他情況下,這些呼叫的情況都會記錄在一個日誌檔案裡面。
Setuid:我們認為任何一個setuid為root或是在後臺以root許可權的程式都是可以作為一個潛在的攻擊目標。對這樣的程式我們用特定的檢查程式來過濾這些系統呼叫。一個setuid的程式是可以在互動模式下,在呼叫其他避免執行setuid程式的系統呼叫之前來執行setuid(0)呼叫的。透過這樣的方式,我們可以跳過所有的我們介紹過的檢查。因為這個原因,我們必須載入一段程式碼來補充setuid系統呼叫來阻止一個setuid程式得到 root的UID許可權。
Chmod:當我們呼叫一個setuid的程式。使用者可以應用Chmod來取得對敏感檔案的寫許可權。(如,密碼檔案)。阻止這樣的和其他相關的攻擊,一個檢查程式碼加到chmod系統呼叫程式碼裡來阻止一個setuid程式對一般檔案或目錄訪問許可權的修改。
Chown:當呼叫一個setuid程式的時候,chown可以用來改變一個可執行檔案的擁有者為root。Chown是一個非常的呼叫,尤其是當他和 chmod一起應用的時候。基於這個原因,我們也加入了一段檢查的程式碼到chown系統呼叫裡面去,來阻止一個setuid程式修改常規檔案或目錄的擁有權。
Chgrp:和chown一樣,來利用chgrp改變組使用者來取得一定的訪問許可權來攻擊系統
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958305/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux核心即時入侵檢測安全增強-介紹(轉)Linux
- Linux核心即時入侵檢測安全增強-後語(轉)Linux
- Linux核心即時入侵檢測安全增強-系統呼叫執行步驟(轉)Linux
- Linux核心入侵檢測安全增強實現(下)(轉)Linux
- Linux核心入侵檢測安全增強實現(上)(轉)Linux
- 緩衝區溢位實驗
- 緩衝區溢位小程式分析
- IMail SMTP 緩衝區溢位漏洞 (APP,缺陷) (轉)AIAPP
- C 標準庫IO緩衝區和核心緩衝區的區別
- 駭客中級技術--緩衝區溢位攻擊(轉)
- 怎樣為linux核心打補丁(轉)Linux
- Redis緩衝區溢位及解決方案Redis
- linux 核心安全增強 — stack canaryLinux
- 緩衝區溢位漏洞的原理及其利用實戰
- 一個緩衝區溢位漏洞的簡易教程
- 淺談C#緩衝區溢位的祕密C#
- pwntools緩衝區溢位與棧沒對齊
- Linux核心搶佔補丁的基本原理(轉)Linux
- linux 核心安全增強(一)— stack canaryLinux
- 核心補丁熱更新ceph核心模組
- Torvalds給Linux核心打補丁抵禦病毒(轉)Linux
- 緩衝區溢位漏洞那些事:C -gets函式函式
- 如何增強 Linux 核心中的訪問控制安全Linux
- ASLR 是如何保護 Linux 系統免受緩衝區溢位攻擊的Linux
- Linux 4.1核心熱補丁成功實踐Linux
- SYMANTEC防火牆核心溢位利用之非安全返回法二(轉)防火牆
- 緩衝區溢位攻擊初學者手冊(更新版)
- Linux入侵檢測(轉)Linux
- MPU:鴻蒙輕核心的任務棧的溢位檢察官鴻蒙
- 快取區溢位檢測工具BED快取
- MikroTik RouterOS 中發現了可遠端利用的緩衝區溢位漏洞ROS
- 剛裝的Redhat linux 9.0核心2.4.20,關於補丁的問題(轉)RedhatLinux
- 解決呼叫DBMS_OUTPUT時出現緩衝器溢位的錯誤
- CVE-2010-2883-CoolType.dll緩衝區溢位漏洞分析
- Python經典棧緩衝區溢位獲取root許可權Python
- CMD.EXE中dir超長字串緩衝區溢位原理學習字串
- Linux穩定版核心撤回嚴重影響效能的Spectre補丁Linux
- python執行時強制重新整理緩衝區Python