經(jīng)過第一,二部分的學(xué)習(xí)我們已經(jīng)了解到了IIS+MySQL+PHP的基本配置過程和Windows的基本權(quán)限設(shè)置。這一部分我們需要討論php的安全配置還有Web目錄的安全配置,當(dāng)然也必須有IIS的變態(tài)安全配置了。我這里先廢話幾句。
我們最終的目標(biāo)是Web站點(diǎn)只運(yùn)行php,不支持asp不支持asp.net,讓特定的目錄或者子網(wǎng)站不能執(zhí)行php腳本,例如圖片目錄,我們對它設(shè)置成不能運(yùn)行php,這樣就算您的網(wǎng)站被“黑客”登錄了后臺,能上傳文件。但是最終他也不能執(zhí)行webshell。
就算拿到了webshell,他也不能讀目錄或者文件,不能執(zhí)行命令。換句大話就是說強(qiáng)大的webshell在黑客手上沒有任何的利用價值,讓黑客最終直接抓狂而死。呵呵!其實(shí)做到這一點(diǎn)不是非常的難,跟隨我的腳步來吧。學(xué)完本文章你就能獨(dú)立的完成這樣的變態(tài)的服務(wù)器配置了。
一、php.ini文件變態(tài)配置
我們?yōu)槭裁窗裵hp.ini放在最前面寫呢,因?yàn)槲覀兊腤eb網(wǎng)站是php的,所以很多默認(rèn)的選項是不安全的。給黑客留下了非常多的可利用機(jī)會,所以第一步我們必須要把php.ini設(shè)置的變態(tài)些,這樣就能阻止一般腳本黑客的攻擊了。
我們首先來了解一些php.ini的基本概念性?瞻鬃址鸵苑痔栭_始的行被簡單地忽略。設(shè)置指令的格式如下:directive = value 指令名(directive)是大小寫敏感的!所以"foo=bar"不同于"FOO=bar"。值(value)可以是:
1. 用引號界定的字符串(如:"foo")
2. 一個數(shù)字(整數(shù)或浮點(diǎn)數(shù),如:0,1,34,-1,33.55)
3. 一個PHP常量(如:E_ALL,M_PI)
4. 一個INI常量(On,Off,none)
5. 一個表達(dá)式(如:E_ALL & ~E_NOTICE)
還有另外一個是設(shè)置布爾值,1為On就是開啟,0為Off就是關(guān)閉。php.ini分了很多部分,例如:模塊部分,php全局配置,數(shù)據(jù)庫配置,等等。如圖1所示是一個基本的php.ini的例子。了解了基本的概念以后我們就可以開始變態(tài)配置之旅。
|
圖1 |
第一個重要的參數(shù)是register_globals. 這個配置影響到php如何接收傳遞過來的參數(shù),說白了register_globals的意思就是注冊為全局變量,所以當(dāng)該參數(shù)為值On的時候,傳遞過來的值會被直接的注冊為全局變量直接使用,而當(dāng)該參數(shù)值為Off的時候,我們需要到從特定的數(shù)組里去得到它。從www.milw0rm.com很多的php漏洞來看一大部分是因?yàn)镽egister_Globals為On的時候被利用的,所以強(qiáng)烈推薦將這個參數(shù)修改成Off,php目前的最高版中此參數(shù)都是默認(rèn)是Off的,沒啥說的了,如果你用的版本比較老的話一定要修改這里。
第二個重要的參數(shù)是magic_quotes_gpc。如果你把magic_quotes_gpc設(shè)置成了Off,那么php就不會對4種字符' (單引號), " (雙引號), \ (反斜線) 和 空字符進(jìn)行轉(zhuǎn)義,那這樣的話就會造成服務(wù)器可能會被非法注入的可能。但是如果你把Magic_quotes_gpc設(shè)置成On的話,php就會給$_POST,$_GET,$_COOKIE提交的變量中如果有上面四種字符的話就會加上\反斜扛.這樣就會大大地提高php的安全性。強(qiáng)烈推薦將Magic_quotes_gpc設(shè)置為On。
第三個比較重要的是display_errors。為什么說這個參數(shù)重要呢,因?yàn)闆]有不會犯錯誤的開發(fā)者,php的display_errors參數(shù)就是幫助開發(fā)者定位和確定這些錯誤的。可是如果php提供的這些信息被黑客了解到的話,這就不妙了。如圖2所示為某國庫的網(wǎng)站,因?yàn)閷isplay_errors沒有進(jìn)行設(shè)置,導(dǎo)致web目錄泄露。這對于黑客來說可是非常重要的信息,因?yàn)楹芏鄷r候的滲透都需要知道web目錄,例如webshell的寫入等等。所以我們強(qiáng)烈推薦大家把這個參數(shù)設(shè)置成Off。
|
圖2 |
第四個重要的參數(shù)就是safe_mode,就是我們常說的安全模式。php的安全模式是個非常重要的內(nèi)嵌的安全機(jī)制,能夠控制一些php中的函數(shù),比如system()等函數(shù),同時把很多文件操作函數(shù)進(jìn)行了權(quán)限控制,也不允許對某些關(guān)鍵文件的訪問,比如/etc/passwd,但是默認(rèn)的php.ini是沒有打開安全模式的,我們把它打開。safe_mode = on。
第五個參數(shù)是open_basedir,使用open_basedir選項能夠控制PHP腳本只能訪問指定的目錄,這樣能夠避免PHP腳本訪問不應(yīng)該訪問的文件,一定程度上限制了webshell的危害,我們一般可以設(shè)置為只能訪問網(wǎng)站目錄(假設(shè)網(wǎng)站目錄為E:\test):open_basedir = E:\test 第六個參數(shù)是disable_functions,使用disable_functions可以限制一些對于系統(tǒng)來說威脅很大的函數(shù)。
例如,我們在第一部分中看到的有phpinfo()函數(shù)的網(wǎng)頁中可以看到關(guān)于php的環(huán)境變量等。還有可以利用system,exec等函數(shù)來執(zhí)行系統(tǒng)命令等等。這里我們推薦過濾的函數(shù)如下。disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server。大家如果對某個函數(shù)不了解的話,可以google搜索得到函數(shù)的作用,然后來決定您自己的服務(wù)器是否禁止掉。
第七個參數(shù)是Com組件。Windows平臺下的PHP腳本平臺存在一個安全漏洞,使得PHP設(shè)置即使在安全模式下(safe_mode),仍舊允許攻擊者使用COM()函數(shù)來創(chuàng)建系統(tǒng)組件來執(zhí)行任意命令。漏洞出現(xiàn)的原因是由于在安全模式下的PHP平臺雖然system();pathru()函數(shù)被禁止,但是com.allow_dcom的設(shè)置依舊是為true。以至于攻擊者可以使用COM()函數(shù)創(chuàng)建系統(tǒng)組件對象來運(yùn)行系統(tǒng)命令。
如果是默認(rèn)的Apache設(shè)置或者Web服務(wù)器以Loacalsystem權(quán)限或Administrators權(quán)限運(yùn)行,攻擊者可以使用這個漏洞來提升權(quán)限。所以我們必須要關(guān)閉掉com.allow_dcom這個參數(shù)默認(rèn)是True,我們需要吧這個參數(shù)修改成com.allow_dcom=false。第八個參數(shù)是expose_php。這個參數(shù)決定是否暴露 PHP 被安裝在服務(wù)器上。如圖3所示,如果這個參數(shù)設(shè)置為On的話就會把php的版本等泄露出來了。我們的推薦值是Off。
|
圖3 |
基本上的參數(shù)我們就介紹完了,當(dāng)然php.ini還需要配置,大部分設(shè)置跟安全是沒有關(guān)系的,很大一部分都跟PHP運(yùn)行的效果(例如優(yōu)化)等有關(guān)系,如果大家有興趣的話可以自己參考一下php的官方手冊來具體了解一下。注意:修改完php.ini以后,必須重新啟動IIS,不然你設(shè)置的內(nèi)容不會即時生效。
二、 IIS變態(tài)配置
我們配置完了php.ini,雖然已經(jīng)算是相當(dāng)安全了。但是畢竟最重要的設(shè)置還是在IIS上面,IIS可以限制某些用戶的登錄,同時也可以為數(shù)據(jù)增加SSL(安全套接層)來增強(qiáng)數(shù)據(jù)在傳輸過程中的安全性?梢岳肐IS限制某些應(yīng)用程序例如php的執(zhí)行規(guī)則,例如,讓php只能運(yùn)行在指定的目錄中,其他的目錄是不能執(zhí)行php的。下面舉個例子就好理解了,例如:www.sina.com這個網(wǎng)站,大家都知道的,這個是新浪的。
新浪每天的訪問量是非常大的,所以他不可能把所有的東西都放在一個服務(wù)器上面,這個時候可能就會把特定的資源例如圖片,視頻等放到一個專門的服務(wù)器上。這個時候,新浪的安全管理員就做了個非常變態(tài)的策略,就是在這些提供特定資源的服務(wù)器上面不能運(yùn)行任何的腳本,例如不能執(zhí)行php等,當(dāng)然我這里只是舉個例子,因?yàn)榇蟛糠值男吕说姆⻊?wù)器都是Linux系列的,在他上面跑的可能是Nginx或者是apache,apache的這部分設(shè)置我們會在以后的教程中涉及。
所以希望大家關(guān)注我寫的文章啊,呵呵!第一個變態(tài)的服務(wù)器配置.我們繼續(xù)來討論IIS.基本的配置請參考第一部分的文章,這里我們就不多說廢話了,我們第一個實(shí)現(xiàn)的功能是特定的php目錄或者是網(wǎng)站不能運(yùn)行php。如圖4所示是我們的網(wǎng)站和網(wǎng)站的資源。劃線部分是我們的目錄,這里我新建一個目錄例如images目錄,然后在images目錄下建立一個2009.php的文件,內(nèi)容是phpinfo,如圖5說明我們正常執(zhí)行了。我們要達(dá)到的目的是讓這個目錄不支持php的執(zhí)行.下面我們來看一下如何實(shí)現(xiàn)的。我們有兩種辦法。
第一種是首先打開IIS信息服務(wù)管理器,打開我們的網(wǎng)站,然后找到我們剛才新建的目錄,右鍵點(diǎn)擊目錄屬性,如圖6所示。我們看劃紅線的地方,這里有三個選項,分別是無,純腳本,還有一個是腳本和可執(zhí)行文件。這里我們選擇無,然后單擊“確定”按鈕。如圖7所示,我們再刷新一下就會看到2009.php不可以運(yùn)行了。
第二種辦法是利用應(yīng)用程序池來配置,具體的實(shí)現(xiàn)方法為:如圖8所示,我們選擇畫紅線的部分,然后就創(chuàng)建了一個和網(wǎng)站名字一樣的應(yīng)用程序池,然后我們單擊“配置”按鈕出現(xiàn)如圖9所示的畫面,我們這里把.php的擴(kuò)展去掉。如圖10所示,我們的腳本不能運(yùn)行了,出現(xiàn)了404的錯誤,但是我們訪問圖片還是一樣可以訪問,如圖11所示。當(dāng)然上面的配置也可以用于特定的服務(wù)器,例如,您的公司規(guī)模比較大,需要建立一個專門的圖片服務(wù)器來緩解主服務(wù)器的負(fù)載,就可以使用這個很變態(tài)的方法。
|
圖4 |
|
圖5 |
|
圖6 |
|
圖7 |
|
圖8 |
|
圖9 |
|
圖10 |
|
圖11 |
第二個變態(tài)的服務(wù)器配置相信一部分人都知道就是給特定的目錄上集成Windows 2003的身份驗(yàn)證功能,例如后臺的設(shè)置。一個很常見的場景如下:如果我的后臺目錄是admin的話,我這里有2個驗(yàn)證用戶和密碼。
第一道防護(hù)是服務(wù)器上的集成身份驗(yàn)證,就是給服務(wù)器上添加一個用戶,然后設(shè)置一個非常變態(tài)的密碼。
第二道防護(hù)就是網(wǎng)站本身的用戶名和密碼,當(dāng)然這兩道防護(hù)的密碼一定不能相同,不然跟沒用一樣。下面,我們來實(shí)現(xiàn)一下這個功能。例如,我們要配置的目錄是admin,右鍵點(diǎn)擊admin的屬性,如圖12所示,我們單擊“身份驗(yàn)證和訪問控制”下的“編輯”按鈕,彈出如圖13所示的對話框,我們選擇“集成windows身份驗(yàn)證”就可以了,同時去掉“啟用匿名”前面的對勾,然后單擊“確定”按鈕。我們再次訪問后臺目錄就會出現(xiàn)了如圖14所示的畫面,要求我們輸入windows服務(wù)器上的用戶名和密碼。
我們現(xiàn)在新建一個本地的用戶,然后把他的權(quán)限設(shè)置為最小的。我們單擊開始菜單 -> 運(yùn)行 -> 輸入cmd,然后在cmd中輸入net user test test /add。添加一個用戶,這一步?jīng)]啥說的。下面講解如何降低test用戶的權(quán)限,右鍵點(diǎn)擊“我的電腦”,選擇“管理”,彈出“計算機(jī)管理”對話框,如圖15所示,選擇右鍵單擊剛才新建的test用戶選擇“屬性”,我們選擇用戶“密碼永不過期”,然后選擇撥入選擇拒絕訪問.點(diǎn)確定,回到剛才的目錄中,我們輸入我們新建的用戶就可以查看了。
|
圖12 |
|
圖13 |
|
圖14 |
|
圖15 | 第三個配置就是服務(wù)器只支持php其他任何腳本都不支持。這個很容易就實(shí)現(xiàn)了,我們不說廢話,如圖16所示就可以搞定了,只留下php就可以了,其他全部刪除。當(dāng)然如果您的服務(wù)器需要支持asp和asp.net的話只留下asp,asp.net和php就行了。其他全部刪除即可。
|
圖16 |
三、web目錄的變態(tài)權(quán)限配置
其實(shí)我們在第2部分的時候已經(jīng)涉及到了基本的權(quán)限配置原則等,這里我們只是做一些擴(kuò)展。例如,我們的網(wǎng)站的目錄是E:\test。右鍵單擊目錄,選擇“屬性”,彈出如圖17所示對話框,我們把IUSR_計算機(jī)名添加進(jìn)來,這個賬號是IIS匿名用戶的訪問賬號。
注意畫長方形的地方一定不要選擇。不然黑客就能上傳webshell到你的目錄了。但是這樣設(shè)置的話是不行的,例如你的網(wǎng)站需要上傳圖片的時候,這樣你自己也不能上傳了,這個時候我們需要把圖片目錄設(shè)置成可寫的,如圖18所示。同時結(jié)合我們第2部分中學(xué)習(xí)的IIS變態(tài)設(shè)置,把這個目錄設(shè)置成不能執(zhí)行php的。這樣就達(dá)到了目錄的變態(tài)配置目的了。
|
圖17 |
|
圖18 |
四、總結(jié)
到這里我們已經(jīng)把Windows+PHP+IIS+MYSQL的變態(tài)安全課程講完了,縱觀本文章,我們可以了解到IIS+MYSQL+PHP的基本配置,NTFS的安全配置等安全配置。這樣我們就得到了一個比較高水平的而且安全的服務(wù)器了,但是僅這些內(nèi)容是遠(yuǎn)遠(yuǎn)不夠的,因?yàn)閃indows系列不僅包含web服務(wù),還有很多其他的服務(wù),例如FTP的安全,還有組策略等我們都沒有涉及。
如果以后有機(jī)會的話,我絕對會跟大家繼續(xù)討論有關(guān)于Windows整體安全性。謝謝大家的關(guān)注,如果您有什么問題或者是建議的話請聯(lián)系我,我在安天365論壇(http://www.antian365.com/bbs)的ID是cnbird。【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請注明出處及作者!】
|