2014年5月4日 星期日

常見的 Web AP 安全漏洞

網頁應用程要設計的安全很不容易,因為網頁的原始碼會傳送到瀏覽器端,駭客可以從容地分析網頁原始碼、Request 及 Response 的標頭,可以嘗試各種不同的攻擊 payload! 有些弱點雖然專家一再提醒,但許多網頁(網站)卻一再出現,甚至許多程式設計師故意忽略這樣的弱點、或者不知如何修正這些弱點
底下是我幾年來參與黑白箱掃描及滲透測試的心得,是程式設計常疏忽的地方:
  1. 圖方便,用變數串接方式產製查詢字串或動態命令!
    使用變數串接可以簡化程式碼撰寫,所以程式設計師理所當然優先選擇這種撰寫方式,尤其涉及較多變數(參數)時,使用變數串接可節省更多程式碼,相對也省下許多時間。
    程式設計師圖一時方便,因此造就了 Injection  漏洞,當被發現系統存在這種漏洞時,有些程式設計師不思正統的寫法,反而自己撰寫過濾程式(見8.),當然不是自己寫作的機制就不好,只是沒有經過有效驗證,或許不如自己想像那麼強固!
  2. 以為使用者會乖乖輸入規定的資料格式
    許多新手設計師以為使用者會照著設計規格書上說明的輸入資料,甚至自己測試時,也只會輸入「合法」的資料來驗證功能,完全不在意「違規」的資料格式,不會適當處理違規的資料,因此提供駭客一道可敲測的通道! (駭客就是不按牌理出牌)
  3. 以為 javascript 可以實現資料驗證或授權
    這是我遇過最多的漏失(還有 4.),甚至有設計師跟我爭論他的系統已盡到相當完善的防護,還當場測試以驗證他的論點, 可惜他並不知曉許多瀏覽器的外掛(Plugins)都可以協助繞過javascript檢核,甚至駭客進行滲透是不用常規瀏覽器的! javascript 驗證或授權就像紙上畫的鎖,一般使用者會以為有鎖,但小偷卻毫不費力就可以突破。
  4. 以為使用者看不到隱藏欄位內容
    如同 3. 一樣,這種漏失也很常出現,其實只要「查看網頁源始碼」就可以看見隱藏欄位的內容,完全不需要特殊技巧, 所以不該利用隱藏欄位傳遞機敏資料。
  5. 不明白或故意忽略Cookie 防護的重要性
     很多設計師會利用Coolie 來儲存資料,以便在不同網頁間交換資料,卻不明白Cookie 的運作原理,其實Cookie 是以純文字模式儲存在 Client 端,有很多工具可以修改Cookie的內容,因此 Cookie 不是安全的儲存體,不該用 Cookie 來存放如帳號、密碼或角色等資訊,以免被篡改而不自知。
  6. 使用 WebService ,卻忘了每次叫用時都需求再認證
     初學用WebService的設計師會以為 WebService 不會獨自運作,一定是透過他的程式才會被呼叫(把WebService 跟一般的程式庫或物件API搞混了),其實只要 WebService 沒有適當防護,「任何人」都可以命令它工作,所以採用 WebService 機制比一般 Web AP 更需要費心在網頁安全上。所以在每一個WebService 方法的進入點都要執行身份驗證及授權
  7. 以為限制網頁欄位的輸入長度,可以防止複雜的注入攻擊指令
     如同 4. 一樣,屬於自以為...的心態,同樣的,瀏覽器的外掛或 Local Proxy 都可以繞過這層限制,而無限制的輸入(傳送)超長資料。
  8. 自認自己寫成的特殊符號過濾程式就可以達成防注入的功能
     是的,許多自負的設計師會自己開發濄濾程式,避掉特殊符號,以為這樣就可以防止注入攻擊,的確,過濾掉特殊符號可以防止9成以上的注入攻擊,可是剩下的1成才是駭客最常用的攻擊方式,如果可以,建議還是採取正統的撰寫模式。

上面提的這些只是常見的,幾乎用手動測試就可以發現的漏洞算是最基本網頁安全的課題,希望可以給程式設計師資安防護的基本參考,同時提供初入網頁滲透測試者基本的偵查方向。

沒有留言:

張貼留言