HOME 回資訊服務處首頁 Login
2010年第16期
簡訊
近日發現釣魚郵件 請提高警覺勿受騙
第八屆「兩岸三院資訊技術交流與數位資源共享研討會」9/6-8舉辦
「本院基礎地理圖資共享平台」網站上線
完成生多中心及學人宿舍大樓光纖骨幹網路建置案驗收
歡迎參加「資訊安全基本概念與資訊安全管理系統介紹」課程
持續參加「臺灣OCLC管理成員館聯盟」第4年計畫案
「2010台北電腦應用展」8/5-9假世貿展出
資訊應用
SkyDrive免費網路儲存空間
資訊安全
Web Security網站安全基礎篇(二)
 
資訊安全 >
上一篇 | 返回電子報
 
Web Security網站安全基礎篇(二)
 
翁浩正

(文續2010年第15期)

前言
 
 我們在前篇已經有介紹一些駭客的思維以及攻擊手法,接下來我們要介紹身為開發者的我們,要如何去確保自己的網站應用程式是安全無虞的。透過網路上OWASP組織提供的防護方法以及弱點介紹,我們可以很快地檢視自己的網站是否有安全弱點。以下我們會介紹OWASP Top 10十大網站安全弱點,以十項最常見的弱點來介紹網站的安全問題。

Open Web Application Security Project 開放網站應用程式安全計畫
 
 OWASP是一個開放社群的非營利組織,致力於改善網站應用程式的安全性。
 OWASP Top 10揭露常見的網站應用程式弱點,以供軟體開發安全參考。

OWASP Top 10 

 通常我們會針對OWASP Top 10來進行基本的網站安全風險說明。目前OWASP Top 10釋出2010年版。十大風險如下:   

 A1 – Injection(注入攻擊)
 A2 – Cross Site Scripting (XSS)(跨站腳本攻擊)
 A3 – Broken Authentication and Session Management(身分驗證功能缺失)
 A4 – Insecure Direct Object References(不安全的物件參考)
 A5 – Cross Site Request Forgery (CSRF)(跨站冒名請求)
 A6 – Security Misconfiguration(安全性設定疏失)
 A7 – Failure to Restrict URL Access(限制URL存取失敗)
 A8 – Unvalidated Redirects and Forwards(未驗證的導向)
 A9 – Insecure Cryptographic Storage(未加密的儲存設備) 
 A10 – Insufficient Transport Layer Protection(傳輸層保護不足)
 
 以下針對這十大風險做一個簡單的介紹。

A1 – Injection(注入攻擊)
 
 網站應用程式執行來自外部包括資料庫在內的惡意指令,SQL Injection與Command Injection等攻擊包括在內。因為駭客必須猜測管理者所撰寫的方式,因此又稱「駭客的填空遊戲」。
 
 舉例來說,原本管理者設計的登入頁面資料庫語法如下:
 
$str = "SELECT * FROM Users WHERE Username='“.$user."' and
Password=‘”.$pass."'“;

 
 如果說$user以及$pass變數沒有做保護,駭客只要輸入「’ or ‘‘=’」字串,就會變成以下:
 
$str = “SELECT * FROM Users WHERE Username='' or ''='' and Password= '' or
‘’=‘’”;

 
 如此一來,這個SQL語法就會規避驗證手續,直接顯示資料。
 
 簡述駭客攻擊流程:

  1. 找出未保護變數,作為注入點
  2. 猜測完整Command並嘗試插入
  3. 推測欄位數、Table名稱、SQL版本等資訊
  4. 完整插入完成攻擊程序 

 防護建議:

  • 使用Prepared Statements,例如Java PreparedStatement(),.NET SqlCommand(), OleDbCommand(),PHP PDO bindParam()
  • 使用Stored Procedures
  • 嚴密的檢查所有輸入值
  • 使用過濾字串函數過濾非法的字元,例如mysql_real_escape_string、addslashes
  • 控管錯誤訊息只有管理者可以閱讀
  • 控管資料庫及網站使用者帳號權限為何

A2 – Cross Site Scripting ( XSS )(跨站腳本攻擊)
 
 網站應用程式直接將來自使用者的執行請求送回瀏覽器執行,使得攻擊者可擷取使用者的Cookie或Session資料而能假冒直接登入為合法使用者。 
 
 此為目前受災最廣的攻擊。簡稱XSS攻擊。攻擊流程如下圖:

  1. 受害者登入一個網站
  2. 從Server端取得Cookie
  3. 但是Server端上有著XSS攻擊,使受害者將Cookie回傳至Bad Server
  4. 攻擊者從自己架設的Bad Server上取得受害者Cookie
  5. 攻擊者取得控制使用受害者的身分

 防護建議:

A3 – Broken Authentication and Session Management(身分驗證功能缺失)
 
 網站應用程式中自行撰寫的身分驗證相關功能有缺陷。例如,登入時無加密、SESSION無控管、Cookie未保護、密碼強度過弱等等。

 例如: 
 應用程式SESSION Timeout沒有設定。使用者在使用公用電腦登入後卻沒有登出,只是關閉視窗。攻擊者在經過一段時間之後使用同一台電腦,卻可以直接登入。
 
 網站並沒有使用SSL / TLS加密,使用者在使用一般網路或者無線網路時,被攻擊者使用Sniffer竊聽取得User ID、密碼、SESSION ID等,進一步登入該帳號。
 
 這些都是身分驗證功能缺失的例子。
 
 管理者必須做以下的檢查:

  • 所有的密碼、Session ID、以及其他資訊都有透過加密傳輸嗎?
  • 憑證都有經過加密或hash保護嗎?
  • 驗證資訊能被猜測到或被其他弱點修改嗎?
  • Session ID是否在URL中暴露出來?
  • Session ID是否有Timeout機制?

 防護建議:

  • 使用完善的COOKIE / SESSION保護機制
  • 不允許外部SESSION
  • 登入及修改資訊頁面使用SSL加密
  • 設定完善的Timeout機制
  • 驗證密碼強度及密碼更換機制 

A4 – Insecure Direct Object References(不安全的物件參考)
 
 攻擊者利用網站應用程式本身的檔案讀取功能任意存取檔案或重要資料。進一步利用這個弱點分析網站原始碼、系統帳號密碼檔等資訊,進而控制整台主機。
 
 例如:http://example/read.php?file=../../../../../../../c:\boot.ini。
 
 防護建議:

  • 避免將私密物件直接暴露給使用者
  • 驗證所有物件是否為正確物件
  • 使用Index / Hash等方法,而非直接讀取檔案

A5 – Cross Site Request Forgery (CSRF)(跨站冒名請求)
 
 已登入網站應用程式的合法使用者執行到惡意的HTTP指令,但網站卻當成合法需求處理,使得惡意指令被正常執行。
 
 舉例來說,攻擊者在網站內放置了 <img src=”http://server.com/send.asp?to=...”> ,受害者讀取到此頁面之後,就會去server.com主機執行send.asp惡意行為。
 
 例如Web 2.0時代的社交網站等等,都是CSRF攻擊的天堂。
 
 防護建議:

  • 確保網站內沒有任何可供XSS攻擊的弱點
  • 在Input欄位加上亂數產生的驗證編碼
  • 在能使用高權限的頁面,重新驗證使用者
  • 禁止使用GET參數傳遞防止快速散佈
  • 使用Captcha等技術驗證是否為人為操作 

 或者參考OWASP所提供的CSRF Solution

A6 – Security Misconfiguration(安全性設定疏失)
 
 系統的安全性取決於應用程式、伺服器、平台的設定。因此所有設定值必須確保安全,避免預設帳號、密碼、路徑等。甚至被Google Hacking直接取得攻擊弱點。

 防護建議:

  • 軟體、作業系統是否都有更新到最新版本?是否都有上最新Patch?
  • 不需要的帳號、頁面、服務、連接埠是否都有關閉?
  • 預設密碼是否都有更改?
  • 安全設定是否都完備?
  • 伺服器是否都有經過防火牆等設備保護? 

 各種設備、系統的預設密碼,都可以在網路上找到一些整理資料。

 http://www.phenoelit-us.org/dpl/dpl.html
 http://www.routerpasswords.com/
 http://www.defaultpassword.com/

A7 – Failure to Restrict URL Access(限制URL存取失敗)
 
 網頁因為沒有權限控制,使得攻擊者可透過網址直接存取能夠擁有權限或進階資訊的頁面。例如管理介面、修改資料頁面、個人機敏資訊頁面洩漏等等。

 舉例來說,
 /admin
 /backup
 /logs
 /phpmyadmin
 /phpinfo.php
 /manage

 這些都是常見的路徑及檔案。攻擊者只要猜測到,就可以操弄主機。

 防護建議:

  • HTTP Service直接限制來源IP
  • 使用防火牆阻擋
  • 密碼授權加密頁面
  • 網站架構最佳化

A8 – Unvalidated Redirects and Forwards(未驗證的導向)
 
 網頁應用程式經常將使用者Forward或Redirect至其他頁面或網站,沒有驗證的機制。攻擊者可將受害者導向至釣魚網站或惡意網站,甚至存取受限制的資源。

 例如:

 http://example.cc/redir.jsp?url=evil.com
 http://example.cc/func.jsp?fwd=admin.jsp 
 http://g.msn.com/9SE/1?http://xxx.com

 防護建議:

  • 非必要時避免使用Redirect及Forward
  • 驗證導向位置及存取資源是合法的 

A9 – Insecure Cryptographic Storage(未加密的儲存設備) 
 
 網站應用程式沒有對敏感性資料使用加密、使用較弱的加密演算法或將金鑰儲存於容易被取得之處。加密演算法是安全防護的最後一道防線,當駭客取得了帳號密碼,可以簡單地使用一些破解軟體甚至線上服務進行破解。例如Cain & Abel,MD5 Reverse Lookup等。

 防護建議:

  • 使用現有公認安全的加密演算法
  • 減少使用已有弱點的演算法,例如MD5 / SHA-1,甚至更簡單的加密法
  • 安全的保存私鑰

A10 – Insufficient Transport Layer Protection(傳輸層保護不足)
 
 網頁應用程式未在傳輸機敏資訊時提供加密功能,或者是使用過期、無效的憑證,使加密不可信賴。

 例如:攻擊者竊聽無線網路,偷取使用者cookie;網站憑證無效,使用者誤入釣魚網站。

 防護建議:

 Cookie Secure Flag設定:

  • PHP setcookie ("TestCookie", "", time() - 3600, “/", ".example.com", 1); 
  • JSP cookie.setSecure(true);
  • ASP.NET cookie.Secure = True;

小結

 以上OWASP Top 10包含了大部分常見的網站安全弱點,但並不是只有這些。管理者必須時時注意最新的資安消息,並且對自己的主機定時進行更新,檢查系統記錄檔,絕不可有僥倖之心。如此一來,才能確保主機處於安全的狀態。(註:本文轉載自第151期自由軟體鑄造場電子報》,經取得同意轉載)(完)

附錄
 
 以下附上常見的弱點資料庫以及網站淪陷資料庫,管理者可以定期瀏覽最新的資訊安全消息,並且檢查自己的網站有沒有在淪陷資料庫榜上有名。
 
弱點資料庫

CVE - Common Vulnerabilities and Exposures (CVE)
SecurityFocus
National Vulnerability Database
VUPEN Security

網站淪陷資料庫

TW網站淪陷資料庫
Zone-H
</xssed>




上一篇 | 返回電子報
 
 本電子報所有文字、圖片版權為中央研究院所有 。 電子報出版系統由中央研究院資訊服務處開發。