昨晚從黑暗執行緒那邊得知中華民國總統府網站已經淪陷了,看到總統府新聞稿一直在跳 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 小時,但漏洞存在的時間確實有很長一段時間,況且還有哪些弱點目前還不知道,不過依照目前的程式寫法來說,弱點一定還會有,所以還是小心一點為妙。