機會教育:從中華民國總統府網站被發現 XSS 漏洞講起

  分享到噗浪!

昨晚從黑暗執行緒那邊得知中華民國總統府網站已經淪陷了,看到總統府新聞稿一直在跳 Sorry Sorry 舞蹈,雖然只是網友惡搞,但估計這個 Cross-Site Script (XSS) 弱點可能會遭受駭客利用,騙那些好奇的鄉民點選觀看,也許背地裡會潛藏木馬或病毒在其中,各位千萬要小心啊!

總統府網站新聞稿的頁面使用了非常糟糕的設計法,導致可以讓頁面插入任意標籤(Tag Injection),雖然無法直接插入 <script> 標籤,但是至少可以插入 IFRAME 嵌入任意網頁,而且 IFRAME 只要加上 onload 屬性就等於可以執行 JavaScript 了,危險程度「極高」!

此網站可能引發的潛在危機包括:

我個人認為這已經是一個高危險性的網站了,我的 IE8 雖然有內建防止 XSS 攻擊的保護功能,但我還是將該網站網址加入「網際網路選項」的「限制的網站」,以確保不會遭受攻擊,設定方式如下圖:

「網際網路選項」的「限制的網站」

除此之外,我以 2007 年 OWASP 公佈的 Web 十大弱點, 分析總統府網站還有以下問題存在:

OWASP Top 10 在總統府就包辦 6 項,這真是一場給 Web 開發人員絕佳的機會教育阿!

依我個人的經驗判斷,該總統府網站可能有以下特點:

  • 採用 PHP 程式語言,版本竟然是 4.3.2 版,實在太舊太舊了!
    • 這種古董級的 PHP 漏洞少說也上百個,而且版本號還沒隱藏,這簡直是駭客的春藥。
    • 這也代表該網站已經年久失修了,應該是多年前完成的案子,搞不好連維護廠商都沒了。
    • 從網址列判斷這裡的 PHP 應該是以 CGI 的方式運作,非常吃系統資源,要是被 DoS 一下網站應該就會關了。
  • 採用 AIX 或 Linux 或 FreeBSD 或 Solaris 平台
    • 以 PHP 的版本研判,OS 版本也不會多新才對。
  • 採用 Apache 網站伺服器 ( 版本號已被隱藏,這點值得鼓勵 )
    • 以 PHP 的版本研判,Apache 版本也不會多新才對。
  • 採用 MySQL 資料庫,目前好像只有 MySQL 有 limit 語法,從錯誤訊息就看的出來
    • 以 PHP 的版本研判,MySQL 版本也不會多新才對。

我個人寫 PHP 的經驗約有 9 年,我知道 PHP 很容易上手,開發網站也很快,但就是缺乏工具與架構,雖然目前市面上已經有不少工具與架構可選擇,但舊有的網站還是很多,很難一口氣修正所有的缺點,相對的網站弱點也是非常多,這是個難解的問題,需要時間與金錢才能徹底解決。

最後,我有以下建議:

廣大使用者

  • 不要好奇點選任何來路不明的連結
  • 不要開啟任何來路不明的郵件或附件

所有Web開發人員

  • 要將撰寫安全的程式(Write Secure Code)的技能練到跟呼吸一樣自然,安全的程式永遠比高效能的程式來的重要,千萬不能本末倒置。
  • 多吸收些安全相關的知識,瞭解攻擊方法預防被攻擊一樣重要,一把刀兩面刃,不要做壞事就對了。

PHP 開發人員

  • 以我的個人經驗,修正弱點很容易也很快,難的是「知道弱點在哪裡」!
  • PHP 真的很容易寫出有漏洞的程式,我很難給你們建議,連我自己寫的 PHP 程式都被攻陷過,我個人認為需要「原始碼檢測軟體」才能較快的找到弱點所在,並且一口氣修復所有安全弱點。
  • 近期我們公司應該會提供這類的顧問服務,有需要這類檢測服務的人可以跟我聯絡。

總統府網站相關人員

  • 第一步:先關閉網站
  • 第二步:修正網站「已知」的弱點後再開站  [ 備註: 今天早上總統府網站已經緊急修復該弱點了 ]
  • 第三步:修正網站「未知」的弱點,透過「原始碼檢測軟體」找出所有弱點並一次修復
    • 對知名網站來說,這是最經濟實惠的策略!
    • 我相信總統府的網站一定有防火牆設備,但請不要花大錢再買更高階的防火牆了,程式碼安全更重要。
  • 第四步:找到對的廠商將網站改版
    • 總統府網站應該不複雜,重新製作一遍不用幾個月就完成了。
    • 改版不代表「安全」,先有安全的常識與觀念才會有安全的網站。
    • 建議汰換現有的所有軟硬體,連作業系統也要升級

總統府網站的建置廠商或系統管理者

  • 隱藏所有軟體版本資訊 ( Linux, Apahce, MySQL, PHP, … )
  • 隨時更新作業系統、網站伺服器、資料庫伺服器、PHP 的版本,任何已知的patch都需要定時更新
  • 不要信任所有從 Browser 端傳來的資料,對所有網路輸入的參數進行檢核 ( QueryString, POST Data, Cookies, All HTTP Headers )
  • 對所有輸出到網頁的資料進行 HTML Encode 或 URL Encode
  • 隱藏所有可能會揭露網站技術細節的資訊
  • 將前、後台區分兩個不同的網域(Domain) => 不是 Active Directory 那種網域喔!

這篇文章原本昨天晚上就寫好了,想說等等看今天早上問題會不會修復,不然若文章發出去可能就有一堆人想 try 總統府網站,那我就是罪人了。

還好總統府網站今天一早睡醒就已經修復完畢,雖然目前已經看不到原本的弱點頁面會再跳出訊息,且從弱點被發現到解決的時間雖然不到 12 小時,但漏洞存在的時間確實有很長一段時間,況且還有哪些弱點目前還不知道,不過依照目前的程式寫法來說,弱點一定還會有,所以還是小心一點為妙。

此文章由 will 發表於 2009/8/28 上午 09:17:00

永久連結 | 評論 (18) | 此文章的RSSRSS comment feed |

分類: Web | PHP | Security

標籤: , , ,

評論

八月 28. 2009 12:16

t7yang

但是至少可以插入 IFRAME 入任意網頁
是嵌入吧!

t7yang

八月 28. 2009 12:26

will

多謝,錯字已修正

will Taiwan

八月 28. 2009 14:34

coco

總統府網站也頗有馬式風格....

coco Taiwan

八月 29. 2009 02:31

張旭

受教!

張旭 Taiwan

八月 29. 2009 14:51

Sean Liu

好文章,加油!

Sean Liu Taiwan

九月 1. 2009 14:14

請輸入你的暱稱

光是看到那個最佳解析度 800x600 也會吐血....

請輸入你的暱稱 Taiwan

九月 1. 2009 20:24

just-Ha

內容似似而非,花了一點時間看完,也一條一條回了。太多貼不上,請看  http://blog.udn.com/justgps/3278700

just-Ha Taiwan

九月 1. 2009 20:25

陳試

感謝分享
我將引用到部落格中 http://blog.yam.com/tp6g4
並會在第一行註明原出處

陳試 Taiwan

九月 1. 2009 20:39

demo

給樓上的 just-Ha 看了你的回應,個人感覺你懂的還太少,相當感謝你在我加班時間給我那麼有趣的笑話看。

demo Taiwan

九月 1. 2009 21:06

請輸入你的暱稱

護馬連 總統府網站都護阿

真是大開眼界XD

請輸入你的暱稱 Taiwan

九月 1. 2009 22:37

JC

PHP 4.3.2 確實是還蠻舊的版本,不過也還算好用,很多公司行號如果是外包給外頭的人架站,通常後續維護不太會包括PHP和MySQL、Apache升級.....業界的小悲哀啊.....不過雖然PHP 4.3.2確實有漏洞(事實上沒有一套系統是沒漏洞的,說老實話,所以每種程式經常性的要修補安全性),不過如果php.ini和 .htaccess有寫好、設定好,關掉一些比較危險的功能例如全域變數,還是可以有不差的安全性。就看寫程式的人功力如何了。

個人覺得最奇怪的是,公家機關的網站怎麼都常常還是會外包啊?雖然很多單位都有自己的資訊人員,但很多時候很多功能、很多網站的某些部分都還是外包,這樣大雜燴實在有點危險,品質跟安全性感覺不太保險。希望政府單位能想通,好好的建立一個「資訊安全部」之類的跨部會部門,由該部門來審核各單位的資訊安全性或者統一管理,別再每個單位單兵作戰、動不動就外包了。

以上觀點非關政治,因為這類型問題存在已久,跟執政黨、總統是誰無關,只是希望未來會更好。

JC Taiwan

九月 2. 2009 11:04

Parnpahn

回應==>just-Ha
有時候無知也是一種幸福
你的文章讓我忍不住想講些甚麼
但又覺得想要點醒你,是一種浪費和可惜
浪費了我的口水,和可惜了你的存在價值
雖然我超討厭你這種批評專業的非專業人事外加斷章取義

Parnpahn Taiwan

一月 25. 2010 17:53

JonesLai

LAMP在Linux作業系統上,作業系統本來就可以設定檔案夾、檔案權限,ASP比較好設定?
這講法怪怪的。

JonesLai Taiwan

一月 25. 2010 18:03

Will 保哥

JonesLai: 這裡講的是 URL Authorization,不是 File Permission

Will 保哥 Taiwan

三月 24. 2010 10:22

JonesLai

在Linux上Apache通常會掛在某個群組上,群組的檔案權限還是會影響到WEB端的存取,比如說是限定網頁資料夾以下,Apache的群組全部不准寫入且不准執行,是ASP.NET在WINDOWS上對使用者群組的概念很薄弱才會靠HTTP-SERVER管控為主吧!

不然就是用了所謂的"WAMP",WINDOWS+Apache+MySQL+PHP,我看過有公司花錢買的公司網頁是這樣搞的,裡面的安全權限設定真是令人咋舌,Apache設定的不好,Apache是掛在ADM跑起來的,沒防火牆直接對外。

JonesLai Taiwan

三月 24. 2010 14:36

Will 保哥

JonesLai: Windows/NTFS 對使用者群組的概念一點也不薄弱,而且比 Linux 更複雜更細,是「人」對 Windows 群組的觀念很薄弱。

說實在的,預設安裝 "WAMP" 真的通常是用 Administrator 身份執行 (如果你用 Administrator 身份安裝的話),我也很替他們擔心。

Will 保哥 Taiwan

七月 1. 2010 12:56

TonyQ

我直覺也是想到 owasp 2007 中提到的xss/phishing 議題,
不過沒想到google第一篇的人也提到這些議題,這該說 owasp 2007 真的讓大家印象很深刻嗎XD

TonyQ Taiwan

七月 17. 2010 12:43

佳佳

好文章

借轉到我部落格喔

佳佳 Taiwan

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading