更新之後,httpd 可以啟動了,然而新的問題是 DR 網站裡一個叫做「document.gif」的圖檔被擋住了,查看 error.log 發現又是 mod_secuity 所為:
[Thu Nov 12 00:26:05 2009] [error] [client 61.64.173.115] ModSecurity: Warning. Operator GE matched 5 at TX:anomaly_score. [file "/etc/httpd/modsecurity.d/base_rules/modsecurity_crs_60_correlation.conf"] [line "41"] [msg "Transactional Anomaly Score (score 20): Detects very basic XSS probings"] [hostname "darkranger.no-ip.org"] [uri "/image/document.gif"] [unique_id "SvrlnX8AAAEAAC0TRNwAAAAA"]
查了一下什麼是 XSS,原來就是傳說中的「跨網站指令碼攻擊」,但是這個圖檔非常單純,憑什麼擋下來?所以 DR 做了點實驗,把 document.gif 重新命名為 document2.gif,竟然就過了,這規則也太腦殘了吧?然而 DR 的網頁都是手工的 HTML,為了一條有問題的規則動輒挖出所有網頁改內容,儘管用批次處理做得到卻不太應該,應該還是要從規則著手才是。
最後 DR 把問題丟到 Core Rule Set 的 mailing list,得到以下的回覆:其實要檢查的是 modsec_audit.log,裡頭可以找到究竟是哪裡的規則把它擋下來,於是 DR 參照 log,鎖定 modsecurity_crs_41_phpids_filters.conf 這個檔案,將裡頭的一條規則註解掉解決,在還沒搞清楚如何撰寫規則前就先這樣處理了。
補充資料,以 mod_security 的中文文件來說,以下這篇是 DR 目前為止找到最「好看」的:
最近兩週 DR 又稍微研究了一下隨身碟防毒的相關工具與方案,首先是 gaptx 的 usbprotector(勿跟 Wow! USB Protector 搞混),不過這工具不太 OK……然後是知名防毒軟體廠商 Panda Security 的 USB Vaccine(疫苗),這個工具就比較有趣,首先它兼具系統和隨身碟的免疫方法,系統的部份由於 DR 先前就整理過可行的免疫方法(針對 Autorun),詳情可參考此文章,因此該工具對於系統的免疫功能就暫不研究。
DR 有興趣的是:它怎麼做到對於隨身碟本身的免疫?於是就安裝了 Panda USB Vaccine,然後插入一支隨身碟給它用用看。只見它在隨身碟裡放入一個隱藏的 autorun.inf - 這乍看之下跟網路上流傳的那些腦殘方法相差無幾,然而 DR 馬上發現這個檔案無法被開啟、被刪除、或者重新命名,無論是用 explorer、命令行介面還是其它工具皆無法,意指這個 autorun.inf 完全無法被 Windows 讀取,這就非常有趣了。
接下來 DR 免不其然的要確認:這個狀況是否完全針對 Windows,還是其它作業系統也是如此?於是把隨身碟拿到 Linux 底下開啟,有趣的是這個 autorun.inf 在 Linux 底下要殺要剮非常容易,還可以直接打開來看裡頭有什麼,但也發現檔案本身並無任何異狀。究竟為何在不同作業系統有不同的存取狀況?又是如何辦到的?
這時 DR 回想起來 Panda USB Vaccine 在安裝時有詢問是否選擇 NTFS 支援(beta),而當時是沒有勾選的,於是 DR 便把隨身碟從 FAT 格式化為 NTFS,再執行看看,果然它就沒有辦法進行免疫動作了。這顯示 Panda USB Vaccine 的免疫功能是從檔案系統層著手的,DR 在網路上的進一步搜尋也更說明了這點,雖然這並未解釋為何在不同作業系統(更精確的講是不同的檔案系統驅動)有不同狀況,並且既然 Linux 不受影響,那麼一個延伸問題是:這個方案算是合理使用,或者其實是鑽 Windows 的設計缺失?
若先不討論這些技術議題,就防治評價而言,建立完全無法讀取的 autorun.inf 算是蠻有效的防禦方案,因為既然無法開啟,那麼裡頭就算塞了 Autorun 指令也無法被 Windows 執行,並且除非更動檔案系統,否則病毒也沒有能力去覆蓋它。
那、那跟 DR 自製的 Removable Malware Removal 有什麼關係?由於 r-m-removal 預設是逢隱藏 autorun.inf 必刪,而 DR 評估了一下,既然有這樣「防毒式」的 autorun.inf 存在, 那麼程式有必要加些判定讓使用者能夠分辨是否具有威脅(何況這種 autorun.inf 還砍不掉)。於是 DR 在 1.6 版加了一段簡單的開檔程式,成功開啟就刪除,而無法開啟就屬於防毒式的 autorun.inf,再回報給使用者。
網路討論區上,總還是三不五時會有些使用者反應:使用 Linux 連 ADSL 時,出現含有「/sbin/adsl-start」、「Terminated」、「/dev/null」這類字串所組成的錯誤訊息,並且無法連線。而遇到這類問題,會想到的原因通常是 ADSL 連線設定有誤、或者網路卡(驅動)有問題。但 DR 今天卻意外挖掘出一個新的原因(以及解法)……
話說 DR 二號機上的 Linux(Fedora),其實也有著相同的問題,連 ADSL 時會出現前文所述的錯誤訊息,但 DR 之所以不太在乎的原因是因為雖然它連第一次會出錯,但連第二次卻又可以連上,並且同樣在二號機上的 Windows 連 ADSL 就完全沒問題,因此既然它終究還是可以連線,DR 也就沒太放在心上。不過就在今天,DR 因為整理機器的關係,將二、三號機的線路對調,竟然發現狀況也跟著對調了,大驚之餘把網路線和 switch 接孔交叉測試,才發現原來改插另一個 switch 接孔就解決了。
至於為什麼 DR 會提到這款工具呢?故事是這樣的,話說 DR 最近接到一台灌了 Windows Vista 的筆電,症狀是「不能上網」,於是 DR 檢查了一下,首先網路硬體應該沒有問題,可以順利撥上線,但網路瀏覽器、即時通訊都處於無法順利連線的狀況 - 這就蠻符合惡意軟體的特徵了。這台筆電可以看得出來原本灌了 Symantec 的某款防毒軟體,但又被移除掉,只留下了些許可見的「程式殘渣」(找不到其它形容詞……),於是 DR 灌了小紅傘(Avira AntiVir),並且搭配其它惡意軟體掃描工具進行清理。然而整個掃描下來只有一個結論:這台筆電乾淨到爆,一丁點惡意軟體的痕跡都沒有。雖然找不到兇手,但症狀總還是要處理吧,於是 DR 就開始用 Windows 的 netsh 工具進行網路設定的復原。結果卻無效,還是不能上網 - 呃,怎能有這事呢?!
DR 花很長的時間左思右想想不出個所以然:首先這台筆電就 DR 的認知來看真的是非常乾淨,並且以 Vista 預設的權限設定而言,要中毒也非易事,再者,DR 還真的沒碰過用 netsh 無法解決的惡意軟體,只好在網路上大量搜尋類似的討論,但都沒有吻合的環境與狀況。找著找著,DR 逐漸迷濛的眼睛突然在討論串中抓到一段字句,提到 Norton 防毒要先砍乾淨,對吼,這不是一開始就看到的嗎?於是 DR 飛快的把本次的標題:Norton Removal Tool 找來用,一切解決,可以上網了……