2009年11月9日 星期一

副檔名的危機(Crisis of Filename Extension)

副檔名這個東西,就跟命令提示字元(文字模式)一樣,雖然漸漸地被人所遺忘,但是它們的重要性卻是依然存在,如果你的電腦少了這個副檔名的支援,我想很多程式應該都會直接變成半殘,因為關聯的檔案全部都找不到該用何種程式執行,不過,從早期只能夠支援3個字元的副檔名,一直到現在可以有256個字元,但是實際能夠做為檔案格式的判斷時,依然只有3個字元有效。


【Windows預設會隱藏副檔名的顯示】


不過,現在的Windows大多數都會直接「隱藏已知副檔名」,以免使用者混淆或是在更改檔名時,還得多按副檔名的名稱,可是這麼一來只要稍微動點手腳,基本上就可以讓使用者誤觸機關而不自知,尤其實再加上「autorun.inf」的威力,就算微軟已經透過安全性更新,將這個檔案自動執行的功能給停用,但是,不代表它就完全沒有辦法誘使你去點擊,至少我先前就有看到類似的欺騙手法。

也因為副檔名被隱藏了之後,使用者都很單純地以「圖示(Icon)」做為檔案的類型,忘記圖示是可以被更改的,所以惡意的執行檔,也可以偽裝成資料夾的模樣,讓使用者來協助它們執行惡意程式。


【MS-DOS 批次檔案的圖示變成了資料夾】

這個部分只需要修改一下登錄檔(Registry)的這個位置,就可以達到你想要的效果:

reg add HKCU\batfile\DefaultIcon /ve /t reg_expand_sz /d %%SystemRoot%%\System32\shell32.dll,3 /f
或是把最後面的路徑(/d之後,到/f之前),設定成你所指定的某個exe檔的圖示(D:\123.exe,0),一樣也可以自己修改成想要的圖示。


【上述的reg檔匯入後,就可以改變成此內容】

如此一來,惡意程式的撰寫者,只要先把你原本的資料夾隱藏唯讀之後,接著再把自己的惡意程式經過這樣子的修改,讓它替代你原本使用的資料夾,使用者就會自己乖乖地去執行惡意程式,後果會怎樣,就全都看惡意程式怎麼運作而定,所以副檔名和圖示的變更,一樣可以讓使用者上當。

如果眼尖一點的人或許會發現我在上圖中的(test_folder)測試資料夾,有兩個檔案,一個是MS-DOS 批次檔案、一個是文字檔,為什麼僅有文字檔列出副檔名呢?(我已經在設定中,要求系統顯示已知的副檔名

其實,就算是在設定中已經要求系統顯示副檔名的名稱,只要惡意程式的撰寫者,在特定檔案格式的登錄檔中,加上「NeverShowExt」的字串,它的副檔名就會直接被隱藏,如此一來就算你在資料夾選項中,打開副檔名的顯示,一樣無法更動該項設定。

reg add HKCU\batfile /v NeverShowExt /t reg_sz /f

我想,這樣子的說明跟解釋,應該可以解決一些狀況,當然...千萬別用這手法去害別人,我只是想分享一下這些小細節可能會帶來的風險,如果拿來做壞事的話,可不要牽拖到我身上才好,工具人人會用,各有巧妙不同而已。