ASP.NET木馬及Webshell安全解決方案 ASP木馬、Webshell之安全防范解決辦法正文內(nèi)容: 引子:大家都知道網(wǎng)上出現(xiàn)過(guò)諸如《asp.net虛擬主機(jī)的重大隱患》等類(lèi)似介紹Asp.Net的漏洞以及相應(yīng)的黑客攻擊辦法的文章,以及諸如Webadmin.aspx類(lèi)Asp.Net的Webshell,如果您拿去到您的asp.net虛擬主機(jī)上測(cè)試時(shí)您就知道,這東東對(duì)C盤(pán)有讀取權(quán)限,以及對(duì)整個(gè)硬盤(pán)都有 修改、刪除權(quán)限;那這樣的話(huà),我們的網(wǎng)站、我的服務(wù)器還有什么安全可言?在黑客頻頻攻擊的今天,我們不能不為我們的服務(wù)器而擔(dān)憂(yōu)... 漏洞原因:大家知道ASP中常用的標(biāo)準(zhǔn)組件:FileSystemObject,這個(gè)組件為ASP提供了強(qiáng)大的文件系統(tǒng)訪(fǎng)問(wèn)能力,可以對(duì)服務(wù)器硬盤(pán)上的任何有權(quán)限的目錄 和文件進(jìn)行讀寫(xiě)、刪除、改名等操作。FSO對(duì)象來(lái)自微軟提供的腳本運(yùn)行庫(kù)scrrun.dll中。而在Asp.Net中這個(gè)問(wèn)題仍然存在,并且更加難以解決;因?yàn)?Net中對(duì)系統(tǒng)IO操作功能更加強(qiáng)大,如:組件不再需要用Regsvr32來(lái)注冊(cè),而是直接在bin目錄下就可以直接用了,所以這些功能對(duì)開(kāi)發(fā)Asp.Net程序有很大方便是,但卻使安全變得更為復(fù)雜了....(需進(jìn)一步了解可參考《asp.net虛擬主機(jī)的重大隱患》原文) 解決方案: 一、在IIS6.0中,WEB應(yīng)用程序的工作進(jìn)程為以進(jìn)程標(biāo)識(shí)“Network Service”運(yùn)行。而在IIS5.0中,進(jìn)程外WEB應(yīng)用程序則是以“IWAM_服務(wù)器名”用戶(hù)運(yùn)行行,這個(gè)User是普通的本地Guests用戶(hù)。網(wǎng)上有部份人提出針對(duì)此問(wèn)題用Microsoft .NET Framework Configration設(shè)置System.io的對(duì)目錄讀取的權(quán)限,但很遺憾經(jīng)過(guò)我們測(cè)試沒(méi)有成功,可能是.net framework1.1機(jī)制改了? Network Service 是Windows Server 2003中的內(nèi)置帳戶(hù)。了解IIS5.0上的本地用戶(hù)帳戶(hù)(IUSR和IWAM)與這個(gè)內(nèi)置帳戶(hù)之間的區(qū)別是非常重要的。Windows操作系統(tǒng)中的所有帳戶(hù)都分配了一個(gè)SID(安全標(biāo)識(shí):Security ID)。服務(wù)器是根據(jù) SID,而不是與SID相關(guān)的名稱(chēng)來(lái)識(shí)別服務(wù)器上所有帳戶(hù)的,而我們?cè)谂c用戶(hù)界面進(jìn)行交互時(shí),則是使用名稱(chēng)進(jìn)行交互的。服務(wù)器上創(chuàng)建的絕大部分帳戶(hù)都是本地帳戶(hù),都具有一個(gè)唯一的 SID,用于標(biāo)識(shí)此帳戶(hù)隸屬于該服務(wù)器用戶(hù)數(shù)據(jù)庫(kù)的成員。由于SID只是相對(duì)于服務(wù)器是唯一的,因此它在任何其他系統(tǒng)上無(wú)效。所以,如果您為本地帳戶(hù)分配了針對(duì)某文件或文件夾的 NTFS 權(quán)限,然后將該文件及其權(quán)限復(fù)制到另一臺(tái)計(jì)算機(jī)上時(shí),目標(biāo)計(jì)算機(jī)上并沒(méi)有針對(duì)這個(gè)遷移SID的用戶(hù)帳戶(hù),即使其上有一個(gè)同名帳戶(hù)也是如此。這使得包含NTFS權(quán)限的內(nèi)容復(fù)制可能出現(xiàn)問(wèn)題。內(nèi)置帳戶(hù)是由操作系統(tǒng)創(chuàng)建的、一類(lèi)較為特別的帳戶(hù) 或組,例如System帳戶(hù)、Network Service和Everyone 組。這些對(duì)象的重要特征之一就是,它們?cè)谒邢到y(tǒng)上都擁有一個(gè)相同的、眾所周知的SID。當(dāng)將分配了NTFS權(quán)限的文件復(fù)制到內(nèi)置帳戶(hù)時(shí),權(quán)限在服務(wù)器之間是有效的,因?yàn)閮?nèi)置帳戶(hù)的SID在所有服務(wù)器上都是相同的。Windows Server 2003 服務(wù)中的 Network Service 帳戶(hù)是特別設(shè)計(jì)的,專(zhuān)用于為應(yīng)用程序提供訪(fǎng)問(wèn)網(wǎng)絡(luò)的足夠權(quán)限,而且在IIS 6.0中,無(wú)需提升權(quán)限即可運(yùn)行Web 應(yīng)用程序。這對(duì)于IIS安全性來(lái)說(shuō),是一個(gè)特大的消息,因?yàn)椴淮嬖诰彌_溢出,懷有惡意的應(yīng)用程序無(wú)法破譯進(jìn)程標(biāo)識(shí),或是對(duì)應(yīng)用程序的攻擊不能進(jìn)入System用戶(hù)環(huán)境。更為重要的一點(diǎn)是,再也不能形成針對(duì)System帳戶(hù)的“后門(mén)”,例如,再也無(wú)法通InProcessIsapiApps元數(shù)據(jù)庫(kù)項(xiàng)利用加載到Inetinfo的應(yīng)用程序。我們已經(jīng)簡(jiǎn)單的介紹了一下ASP.NET中關(guān)于文件IO系統(tǒng)的漏洞的防治方法,這一方法有些繁瑣,但是卻可以從根本上杜絕一些漏洞,我們討論的只是很少的一部分,更多的解決放法需要大家共同來(lái)探索、學(xué)習(xí)。(AD^_^:游刃在技術(shù)鬼神邊緣,打造服務(wù)器安全神話(huà)!創(chuàng)世紀(jì)網(wǎng)絡(luò)技術(shù)前瞻,成就互聯(lián)網(wǎng)革命先驅(qū)!服務(wù)器安全討論區(qū)[S.S.D.A]) Network Service帳戶(hù)在創(chuàng)建時(shí)不僅僅考慮了在IIS6.0中的應(yīng)用。它還具有進(jìn)程標(biāo)識(shí)W3WP.exe的絕大部分(并不是全部)權(quán)限。如同ASPNET用戶(hù)為了運(yùn)行ASP.net應(yīng)用程序,需要具有IIS6.0服務(wù)器上某些位置的訪(fǎng)問(wèn)權(quán)限,進(jìn)程標(biāo)識(shí) W3WP.exe 也需要具有類(lèi)似位置的訪(fǎng)問(wèn)權(quán)限,而且還需要一些默認(rèn)情況下沒(méi)有指派給內(nèi)置組的權(quán)限。 二、為了管理的方便,在安裝IIS6.0時(shí)創(chuàng)建了"IIS_WPG"組(也稱(chēng)為IIS工作進(jìn)程組,IIS Worker Process Group),而且它的成員包括Local System (本地系統(tǒng))、Local Service(本地服務(wù))、Network Service(網(wǎng)絡(luò)服務(wù))和IWAM帳戶(hù)。IIS_WPG 的成員具有適當(dāng)?shù)腘TFS的Acls權(quán)限和必要的用戶(hù)權(quán)限,可以充當(dāng)IIS 6.0中工作進(jìn)程的進(jìn)程標(biāo)識(shí)。 三、因此,Network Service帳戶(hù)提供了訪(fǎng)問(wèn)上述位置的權(quán)限,具有充當(dāng) IIS 6 工作進(jìn)程的進(jìn)程標(biāo)識(shí)的充足權(quán)限,以及具有訪(fǎng)問(wèn)網(wǎng)絡(luò)的權(quán)限。Msdn上說(shuō):在Windows Server 2003中,用戶(hù)上下文稱(chēng)為NETWORK SERVICE。這些用戶(hù)帳戶(hù)是在 .NET Framework安裝過(guò)程中創(chuàng)建的,它具有唯一的不易破解的密碼,并僅被授予有限的權(quán)限。ASPNET或NETWORK SERVICE用戶(hù)只能訪(fǎng)問(wèn)運(yùn)行Web應(yīng)用程序所需的特定文件夾,如Web應(yīng)用程序存儲(chǔ) 已編譯文件的\bin 目錄。要將進(jìn)程標(biāo)識(shí)設(shè)置為特定用戶(hù)名,以取代ASPNET或NETWORK SERVICE用戶(hù)標(biāo)識(shí),您提供的用戶(hù)名和密碼都必須存儲(chǔ)在machine.config 文件中。但是根據(jù)實(shí)際情況,asp.net的system.io可以無(wú)限制訪(fǎng)問(wèn)不設(shè)防的服務(wù)器路徑。不知道這算不算一個(gè)ms的重大漏洞。而且根本不能使iis以machine.config的用戶(hù)執(zhí)行asp.net程序。 四、如何解決呢?答案就是—應(yīng)用程序池。 工作進(jìn)程隔離模式利用IIS 6.0的重新設(shè)計(jì)的體系結(jié)構(gòu)并且使用工作進(jìn)程的核心組件。IIS 5.0隔離模式用于依賴(lài)IIS 5.0的特定功能和行為的應(yīng) 用程序。該隔離模式由IIs5Isolation ModeEnabled配置數(shù)據(jù)庫(kù)屬性指定。 您所選擇的IIS應(yīng)用程序隔離模式對(duì)性能、可靠性、安全性和功能可用性都會(huì)產(chǎn)生影響。工作進(jìn)程隔離模式是IIS 6.0操作的推薦模式,因?yàn)樗鼮?應(yīng)用程序提供了更可靠的平臺(tái)。工作進(jìn)程隔離模式也提供了更高級(jí)別的安全性,因?yàn)檫\(yùn)行在工作進(jìn)程中的應(yīng)用程序的默認(rèn)標(biāo)識(shí)為NetworkService。 以IIS 5.0隔離模式運(yùn)行的應(yīng)用程序的默認(rèn)標(biāo)識(shí)為L(zhǎng)ocalSystem,該標(biāo)識(shí)允許訪(fǎng)問(wèn)并具有更改計(jì)算機(jī)上幾乎所有資源的能力。
由此可見(jiàn),我們只能使用工作進(jìn)程隔離模式解決.net的安全問(wèn)題。默認(rèn)情況下,IIS 6.0在工作進(jìn)程隔離模式下運(yùn)行,在這種模式中,對(duì)于每一個(gè)Web應(yīng)用,IIS 6.0都用一個(gè)獨(dú)立的w3wp.exe的實(shí)例來(lái)運(yùn)行它。w3wp.exe也稱(chēng)為工作進(jìn)程(Worker Process),或W3Core。 可靠性和安全性??煽啃缘奶岣呤且?yàn)橐粋€(gè)Web應(yīng)用的故障不會(huì)影響到其他Web應(yīng)用,也不會(huì)影響http.sys,每一個(gè)Web應(yīng)用由W3SVC單獨(dú)地監(jiān)視 其健康狀況。安全性的提高是由于應(yīng)用程序不再象IIS 5.0和IIS 4.0的進(jìn)程內(nèi)應(yīng)用那樣用System帳戶(hù)運(yùn)行,默認(rèn)情況下,w3wp.exe的所有實(shí)例都在一個(gè)權(quán)限有限的“網(wǎng)絡(luò)服務(wù)”帳戶(hù)下運(yùn)行,必要時(shí),還可以將工作進(jìn)程配置成用其他用戶(hù)帳戶(hù)運(yùn)行。 五、解決辦法操作步驟: 2、依次打開(kāi)"計(jì)算機(jī)管理器"→"系統(tǒng)管理工具"→"本地用戶(hù)和組"→"用戶(hù)",然后新增兩個(gè)用App__User與IUSR__User密碼分別為:App_與IUSR_。選擇“用戶(hù)不能更改密碼”與“密碼永不過(guò)期”,然后分別把App__User添加到iis_wpg組,把IUSR__User添加到Guests組。將用戶(hù)趕出其它組成員。 3、然后,打開(kāi)IIS管理員器新建相應(yīng)的應(yīng)用程序池。依次打開(kāi)Internet 信息服務(wù)→本地計(jì)算機(jī)→應(yīng)用程序池→新建→應(yīng)用程序池,新建一個(gè)名字為App_的應(yīng)用程序池。 4、編輯App_應(yīng)用程序池的屬性→標(biāo)示→配置→用戶(hù)名→瀏覽→把用戶(hù)名改為我們剛才建立的App__Use并輸入相應(yīng)的密碼App_。 5、然后再建立相應(yīng)的網(wǎng)站。依次打開(kāi)Internet 信息服務(wù)→本地計(jì)算機(jī)→網(wǎng)站→新建→的網(wǎng)站,目錄為E:\Vhost\^_^→編輯網(wǎng)站的屬性→主目錄→應(yīng)用程序池→App_ →目錄安全性→身份驗(yàn)證和訪(fǎng)問(wèn)控制→編輯,選擇我們剛才建立的IUSR__User,并輸入相應(yīng)的密碼IUSR_r→保存并退出。 6、最后設(shè)定IIS的站點(diǎn)目錄權(quán)限Acls以及整個(gè)服務(wù)器系統(tǒng)的安全,這里就不再詳細(xì)討論,關(guān)于服務(wù)器的整體系統(tǒng)安全可以參考下本人的Win Server 2003服務(wù)器整體安全技術(shù)白皮書(shū)。(IIS站點(diǎn)權(quán)限參考《FSO安全隱患解決辦法》與《ASP木馬Webshell之安全防范解決辦法》這兩篇進(jìn)行;關(guān)于IIS的運(yùn)行權(quán)限請(qǐng)參考《IIS 6.0所需要的默認(rèn)ACLs權(quán)限[即NTFS的硬盤(pán)權(quán)限]》此文進(jìn)行) 好了,我們已經(jīng)簡(jiǎn)單的介紹了一下ASP.NET中關(guān)于文件IO系統(tǒng)的漏洞的防治方法,這一方法雖然有些繁瑣,但是卻可以從根本上杜絕一些漏洞,這里我們討論的只是很少的一部分,更多的解決放法需要大家共同來(lái)探索、學(xué)習(xí)。當(dāng)然如果你發(fā)現(xiàn)了更好的辦法可別忘了告訴我喲^_^ 筆者后記:這里為大家介紹的僅僅是本人在處理ASP.NET木馬、Webshell上的一些心得體會(huì)。在下一篇中將為大家介紹如何簡(jiǎn)簡(jiǎn)單單的對(duì)系統(tǒng)某些相應(yīng)的服務(wù)進(jìn)行降權(quán)處理,以防止溢出、提權(quán)等攻擊、加強(qiáng)服務(wù)器系統(tǒng)的安全。其實(shí)服務(wù)器、系統(tǒng)的安全是個(gè)整體的概念;遠(yuǎn)遠(yuǎn)不止這些,可能你其中有一小點(diǎn)的疏忽就可以讓你的網(wǎng)站、甚至服務(wù)器淪陷。因此安全策略必需走防患未然的道路,任何一個(gè)小地方都不能馬虎、今天關(guān)于防Asp.Net安全隱患小技巧就為大家介紹到這里... 關(guān)于本文版權(quán):本文版權(quán)歸服務(wù)器安全研究專(zhuān)家小組與服務(wù)器安全討論區(qū)共同所有,您可以任意轉(zhuǎn)載,但務(wù)必請(qǐng)保留文章的完整性以及來(lái)源與作者信息;請(qǐng)珍惜別人的知識(shí)版權(quán)! |
|
來(lái)自: xnet > 《我的圖書(shū)館》