王江為
摘要:隨著ASP技術(shù)的發(fā)展,網(wǎng)絡上基于ASP技術(shù)開發(fā)的網(wǎng)站越來越多。與此同時,ASP木馬被上傳至網(wǎng)站后,其后果也是災難性的。由于ASP木馬不同于普通的可執(zhí)行程序木馬,它與正常的ASP文件并無本質(zhì)不同,只是程序代碼具有惡意性,因此很容易進行偽裝、修改,且由于各種原因,ASP木馬很容易被惡意上傳,導致非常經(jīng)典的ASP上傳漏洞。該文就是基于對ASP木馬上傳漏洞的原理予以詳細分析和研究,找出問題的根源所在,并提出徹底解決這種上傳漏洞的合理化建議。
關(guān)鍵詞:文件路徑;文件名稱;上傳漏洞;策略研究
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2012)33-7899-04
隨著基于ASP技術(shù)建立的動態(tài)網(wǎng)站越來越多,由于網(wǎng)站的交互功能,導致ASP木馬被上傳至網(wǎng)站的可能性也越來越大。而ASP木馬與正常的ASP文件并無本質(zhì)不同,夾雜在正常ASP文件中難以分辨。當服務器被上傳ASP木馬并執(zhí)行后,黑客可以對文件進行創(chuàng)建、修改、刪除、上傳、下載,服務器數(shù)據(jù)毫無安全可言。ASP木馬甚至可以運行命令行程序,創(chuàng)建用戶賬號,安裝后門程序,利用系統(tǒng)漏洞可將用戶權(quán)限提升為管理員權(quán)限,其高度的隱蔽性和難查殺性,對網(wǎng)站的安全造成了嚴重的威脅。
所謂上傳漏洞是指利用程序開發(fā)者在開發(fā)過程中的一些漏洞,將ASP、JSP、PHP等格式的木馬上傳至網(wǎng)站目錄內(nèi),進而取得WEBSHELL,甚至管理員權(quán)限的一種方法。對于上傳漏洞的分析和研究,應該從上傳文件的文件路徑(FilePath)和文件名稱(FileName)的源代碼兩個方面入手。
1文件路徑(FilePath)上傳漏洞分析
文件路徑(FilePath)上傳漏洞主要是由于上傳文件的路徑(FILEPath)過濾不嚴引起的。比如動網(wǎng)程序、動易程序等上傳文件的源碼都存在這類漏洞,而且采用這種上傳方式的網(wǎng)站大有人在,在此分析一下其部分源碼:
在這段源碼中,最關(guān)鍵的就這兩句:
◆formPath=upload.form("filepath")
◆filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&fileExt
下面來看一下上傳漏洞是如何形成的。在第一句代碼中,從變量filepath中獲取文件的保存路徑,然后在第二句中,用路徑變量formPath加隨機生成的數(shù)字及經(jīng)過判斷的擴展名合成為一個新的變量,這個變量Filename就是上傳文件保存的路徑及名稱。比如選擇“a.jpg”文件上傳,在上傳過程中,隨文件一起上傳的還有一個FilePath變量,假設其值為“image”,當這些值傳到upfile.asp中,filename就變成了“image/201210190820944973.jpg”,上傳成功后,該a.jpg就被保存到image文件夾內(nèi),文件名字也被改成了“201210190820944973.jpg”。
這是設計者的想法,似乎無懈可擊。但細細研究,就會發(fā)現(xiàn)問題,其突破點就在變量身上。如果將FilePath值改為“image/b.asp_”(“_”表示二進制的00的意思),這樣,該變量提交入upfile.asp后,F(xiàn)ilename值就變成了“image/b.asp_/201210190820944973.jpg”,服務器在讀取這段變量時,因為“_”是二進制的00,認為該變量語句已經(jīng)結(jié)束了,于是“_”后面的字符也就被忽略掉了,這樣一來Filename就成了“image/b.asp”,程序再用file.SaveAs進行保存,這個文件就保存成了b.asp文件,這種上傳文件路徑(FilePath)漏洞就出現(xiàn)了,隨之而來的嚴重后果在此就不分析了。
2文件名稱(FileName)上傳漏洞分析
文件名稱(FileName)上傳漏洞主要是上傳文件名稱(FileName)過濾不嚴謹造成的。筆者收集并閱讀了大量的上傳程序源碼,發(fā)現(xiàn)上傳文件名稱過濾不嚴的形式是多種多樣的,但其核心問題的表現(xiàn)形式基本差不多,在此以一段最典型的代碼進行分析說明,其部分源碼如下:
上面代碼中正常運行所涉及到參數(shù)主要包括:
◆FixName()函數(shù),其接下來的源碼為:
從上面代碼可以看出,系統(tǒng)中asp.dll文件映射的類型(asp、asa、cer、cdx、htr、shtml等)全部被過濾了,除此之外,還有小數(shù)點、單引號也被過濾,甚至連Chr(0)都過濾了(這兒的Chr(0)是16進制的00,表示為二進制是00000000,就是前面在文件路徑上傳漏洞中大顯神通的空字符)。
◆CheckFileExt()函數(shù),源碼形式為:
這個函數(shù)對經(jīng)過FixName()函數(shù)審核后的文件擴展名再次判斷,共有三次檢查。第一次是判斷傳遞來的文件擴展名是否為空;第二次是判斷文件擴展名是否屬于asp、asa等四種禁止傳的文件類型;第三次就是用該擴展名同后臺自定義的上傳擴展名進行對比,符合就允許上傳。
下面上傳一個文件來看其流程。比如上傳文件為“c.cer”,用“FileExt=FixName(File.FileExt)”過濾這個文件時,因為cer屬于fixName()函數(shù)的過濾范圍,所以擴展名cer就成了空。當把這個空的擴展名傳遞給CheckFileExt()函數(shù),在其進行到“IfFileExt=""orIsEmpty(FileExt)”語句時,就會因為FileExt為空而退出交互,拒絕上傳。
這種設計思路,多重的判斷的審核,好像非常嚴謹,但是只要認真琢磨,一樣會發(fā)現(xiàn)問題,其突破點就在FixName()函數(shù)中。從上面上傳“c.cer”文件時我們知道,“cer”會被過濾為空,但如果我們把上傳文件擴展名改為ccerer,同時在后臺自定義上傳類型中增加“ccerer”、“cer”。這樣,擴展名為ccerer的文件在經(jīng)過第一步FixName()函數(shù)過濾后,變成了cer(中間的cer字符被過濾為空),傳遞此值到CheckFileExt()函數(shù)時,可以通過第一個關(guān)卡(擴展名不為空),再通過第二個限制類型的關(guān)卡,最后到對比后臺上傳類型關(guān)卡,順利通過CheckFileExt()的三次的判斷,并給定CheckFileExt=True,這樣就把這個擴展名ccerer的文件上傳到服務器中了,并且上傳后的擴展名是“cer”。由于cer文件同asp文件一樣,可以被執(zhí)行,這就是典型的文件名稱(FileName)上傳漏洞了。
在此,有讀者可能會問:如果上傳擴展名為aaspsp_或aaspsp.格式的文件,經(jīng)過FixName()函數(shù)的過濾,變成了asp_或asp.文件,而這兩種格式同樣不在限制的范圍,只要在后臺中加上這幾種類型,是不是就可以把上傳的文件保存為asp格式?經(jīng)過筆者仔細研究分析,發(fā)現(xiàn)事實并不是這樣。先說小數(shù)點,在FixName()中,有這么一句:FixName=Replace(FixName,".",""),將小數(shù)點過濾為空,所以aaspsp.這條路就斷了。再來看空格,雖然FixName()中沒有過濾空格,但在CheckFileExt()讀取后臺上傳類型時有這么一句:“IfFileExt=Trim(Forumupload(i))Then”,其中有個Trim(),Trim的作用是刪除字符串開始和尾部的空格。雖然在后臺能寫入了asp_類型,但在讀取時,卻會被Trim()過濾成asp,而aaspsp_通過層層關(guān)卡到了此處,已變成了asp_,同樣被拒絕上傳。
3解決對策與方案
通過前面對上傳漏洞產(chǎn)生原理的詳細分析,我們很容易得到解決此類問題的思路,主要應該從源代碼的編寫、非法上傳的文件檢測查殺以及服務器配置這三個方面進行解決。由于上文已經(jīng)對上傳文件名稱(FileName)漏洞和上傳文件路徑(FilePath)漏洞的源碼進行了分析,所以從源代碼入手解決這類漏洞,在此不再作詳述,只要大家針對上述問題對代碼略作補丁,使源代碼過濾更加嚴格就可解決此類問題,下面主要從另外二個角度進行分析。
3.1對上傳文件進行檢測查殺
其解決的原理是:不管別人是利用何種漏洞,上傳至服務器的文件我們一律給以檢測,判斷上傳的圖片格式是否合法。即:判斷該文件是否符合圖像的規(guī)范,如果是木馬偽裝的圖片肯定是不合法的,然后用FSO刪除即可。這兒結(jié)合著代碼,給大家解析:
以上的代碼表明,假設你利某種漏洞,“合理”地將該“偽圖像”文件上傳了,而我們接著再使用自定義函數(shù)來對此“偽圖像”文件進行甄別,判斷該文件是否符合圖像的規(guī)范,若符合圖像的規(guī)范則通過,若是木馬偽裝的圖像文件則FSO做出刪除該文件的操作,以此來達到阻止木馬文件上傳目的。
3.2對服務器進行優(yōu)化配置
這是假設我們無法阻止asp木馬文件上傳至服務器,那么應該對IIS進行規(guī)范設置,對訪問用戶權(quán)限進行嚴謹分配,對重要文件夾(易被asp木馬上傳的目的文件夾)進行充分限權(quán),讓上傳進來的asp木馬無用武之地。
1)規(guī)范設置IIS
在IIS的運用程序配置中,刪除不需要的程序映射,這是避免因為過濾不夠被攻擊者上傳了某些特殊類型的木馬進行攻擊的辦法。應當只留下.asp、.asa、.aspx三個映射,去掉.cer、.config等其他映射。這樣,就是別人傳上去了.cer等格式文件,也是一種無用的木馬。
2)嚴控訪問權(quán)限
互聯(lián)網(wǎng)用戶一般都以“Internet來賓賬戶”訪問Web站點的,因此嚴格控制Internet來賓賬戶的訪問權(quán)限是非常重要的。應該在Web站點必要的目錄,去掉“執(zhí)行”權(quán)限,即將執(zhí)行權(quán)限改為“無”,也就是這個目錄下的文件,只能讀取,不能運行。尤其是上傳目錄,比如UploadFiles這樣的目錄,還有圖片目錄,一定要設置為只讀。這樣設置以后,黑客即使利用安全漏洞上傳了ASP木馬,但由于沒有執(zhí)行權(quán)限而無法運行,同樣可以起到保護的作用。
3)隱藏或刪除無關(guān)組件
為防范ASP木馬對服務器操作系統(tǒng)的入侵,可以刪除或隱藏不安全的組件。ASP木馬利用的常用組件分別是:FileSystemObject組件、WScript.Shell組件、Shell.Application組件、WScript.Network組件等,對于不需要的組件可以用RegSrv32/u命令刪除,需要的組件可以通過修改注冊表將組件改名,同樣可以阻止ASP木馬上傳的作用。
4結(jié)束語
總之,ASP木馬程序在管理員嚴格的權(quán)限控制之下,是可以防范的。我們要從源代碼編寫這個源頭入手,對上傳文件進行嚴格審核,并及時更新系統(tǒng)補丁,嚴格控制“Internet來賓帳戶”訪問權(quán)限,盡可能避免ASP木馬被非法上傳,通過細致的網(wǎng)站目錄執(zhí)行權(quán)限控制,避免大部分ASP木馬的運行,采用不安全組件的隱藏、刪除及訪問權(quán)限設置,可以將ASP木馬運行后的危害大大降低。嚴格、綜合、全面的權(quán)限體系將使黑客利用ASP木馬入侵Web站點的陰謀無法輕易得手。
參考文獻:
[1]張明.ASP建網(wǎng)策略與案例[M].北京:科學出版社,2011.
[2]杜方冬,吳珊,胡宇峰.徹底捍衛(wèi)數(shù)據(jù)安全[M].濟南:山東電子音像出版社,2011.
[3]張濤,胡銘曾,云曉春.計算機網(wǎng)絡安全性分析建模研究[J].通信學報,2011,26(12):100-109.