搜尋此網誌

2014年1月7日 星期二

[交戰守則] 避免造訪路徑攻擊 (Path Traversal Attack),免得成為下一個遠通電收

unnamed這幾天對開車族而言,一個很重要的新聞就是國道全面採用計程收費。而說到計程收費,就不得不提到  eTag 這個東西。一直以來,eTag 就充滿了各式各樣的爭議,不過爭議再多,終究還是一個既定的政策。只是開車族可能發現,eTag 本來提供了查詢的功能,但是從去年底全面上線以來,卻一直處於無法查詢的狀態。至於原因?從一開始說的系統轉移,到後來包含頻寬不足、受到駭客攻擊等說法,讓人摸不清真相。如果是一般的企業,敢承認自己被駭客攻擊,大概民眾都不太會去懷疑,畢竟這對公司的信譽可是會產生很嚴重的負面影響。但是對遠通電收這樣一家公司而言,反而有不少人懷疑這只是他們的推托之詞。

事情的真相,大概只有三個人知道。不過就在昨天,有人在 pastebin.com 貼了一個分享,網址是 http://www.fetc.net.tw/portal/front/staticPage?articleId=402880fd1eafaeee011eafefd1d60005&path=../../../../../../../../../../../../../../etc/passwd,內容是”疑似”遠通電收網站主機的 passwd 檔!雖然這個檔案實際上不包含密碼,但是這個安全漏洞的影響可大可小。如果稍有不慎 (其實已經很不慎了),別說是主機的密碼,就連資料庫的密碼也是整串帶走。在針對網站的攻擊手法中,這類攻擊稱之為造訪路徑攻擊,英文是 path traversal attack。又因為攻擊字串中往往帶有 ../ 字串,所以又稱為 dot-dot-slash attack。

嚴格來說,這並不是一種很新的攻擊手法,甚至已經可以算得上是老掉牙的東西。而要避免這種攻擊手法也不是很困難,在 OWASP 的網站上,針對造訪路徑攻擊有提到下列幾種防護手法:

  • Prefer working without user input when using file system calls
    不要把使用者的輸入帶入有關 file system 的函式呼叫參數中。
  • Use indexes rather than actual portions of file names when templating or using language files
    使用代號來表示檔案,而不要使用實際的檔案名稱/路徑。
  • Ensure the user cannot supply all parts of the path – surround it with your path code
    避免使用者可以輸入完整的檔案名稱與路徑。實務上,此點要做的好其實並不容易,務必要搭配下一個建議手法。
  • Validate the user’s input by only accepting known good – do not sanitize the data
    驗證使用者的輸入。不要使用清除非法字元的方式,而是只接受合法的輸入。
  • Use chrooted jails and code access policies to restrict where the files can be obtained or saved to
    使用 chroot 的機制以避免網站程式讀取到系統的其他檔案。除此之外,如果網站框架允許設定程式的權限,也可以用來避免此一問題。

以造訪路徑攻擊而言,其實也可用源碼檢測工具加以偵測,效果通常不錯。而黑箱工具,往往也可以達到一定的成效。可想而知,遠通電收應該是連這類工具都沒用就大膽上線。遠通電收不是第一個出包的網站,我相信也不會是最後一個。重點是,這種事情千萬不要發生在你跟我的身上。

About