WEB服務端安全---認證會話與訪問控制


一、認證與會話管理

  認證:簡而言之就是通過一定的憑證認出用戶是誰。認證過程中按憑證數量可簡單分為 ‘單因素認證’、‘雙因素認證’或多因素認證。一般來說,多因素認證強度更高,但是用戶體驗上會比單因素認證麻煩些。

  1、單因素認證(密碼認證)

  密碼是最常見的認證手段,持有正確密碼的人被認為是可信的。其優勢在於使用成本低,認證過程實現起來簡單,但屬於一種比較弱的安全方案,可能被猜出。因此密碼的設定需要一定的策略。

  目前還沒有標准的密碼策略,可以看看OWASP(開放式Web應用程序安全項目)推薦的一些最佳實踐做一些密碼策略的總結:

  密碼長度:

    普通密碼要求長度為6位以上;

    重要的密碼要求長度為8位以上;

  密碼復雜度:

    密碼區分大小寫;

    密碼為大寫字母、小寫字母,字數,特殊符號中兩張以上的組合;

    不要有連續的數字 如:1234546abcd

    盡量避免出現重復的字符

  除此之外還要注意不要使用用戶公開的數據或與隱私相關的數據作為密碼。

  密碼保存

  密碼要以不可逆的加密算法,或單向散列函數算法,加密后存儲在數據庫中。

  目前黑客廣泛使用的破解MD5后密碼的方法是 ’彩虹表‘。彩虹表思路是盡可能多的手機多的密碼明文和明文對應的MD5值,這樣只需要查詢MD5值就可能找到MD5值對應的明文。為了避免密碼哈希值泄露后,黑客能夠通過彩虹表查詢出密碼明文,在計算密碼明文的哈希值時,增加一個“Salt”。可以增加明文的復雜度,使彩虹表這一類的攻擊失效如: MD5(username + password + salt) 其中 salt 為隨機字符串,需要保到服務器相關位置,妥善保管。

 

  2、多因素認證

    很多重要的系統,如網上銀行和網上支付平台在用單一的密碼認證明顯是不夠的,一般都需要采用雙因素或多因素認證。如支付寶提供的認證手段:除了支付密碼外,手機動態口令、數字證書、寶令、支付盾、第三方證書等都可以用於用戶認證。這些不同認證手段可以相互結合,使得證書的過程更安全。

    多因素認證提高了攻擊的門檻,比如 一個支付交易使用了密碼和數字證書認證雙因素認證,攻擊者除了盜取到密碼外還必須想辦法在用戶電腦上完成支付,這樣大大提高了攻擊的成本。

 

 

  3、session與認證

    密碼證書等認證手段,一般都是用於登錄過程的。當完成登錄后,用戶訪問網站的頁面不可能每次都去使用登錄認證手段進行認證,因此當用戶認證后就需要替換一個對用戶透明的憑證。這個憑證就是SessionID。

    當用戶登錄完成后,在服務器端就會創建一個新的會話(Session),會話中保存用戶的信息和狀態。服務器端維護所有在線用戶的Session,此時的認證,只需要知道是哪個用戶在瀏覽當前頁面即可。為了告訴服務器應該使用哪個session 瀏覽器需要把當前用戶持有的SessionID告知服務器。

    最常見的做法就是把SessionID加密后保存在Cookie中,因為Cookie會隨着HTTP請求頭發送,且受到瀏覽器同源策略的保護。 

    SessionID一旦在生命周期中被竊取,就等同於賬戶失竊。

    Session劫持就是一種通過竊取用戶SessionID后,使用該SessionID登錄進目標賬戶的攻擊方法。此時攻擊者實際上是使用了目標賬戶的有效Session。

    如果SessionID是保存在Cookie中的,則這種攻擊可以稱為Cookie劫持。

    SessionID除了可以保存在Cookie中外,還可以保存在URL中,作為請求的一個參數。 但是這種方式的安全性難以經受考驗。

    在生成SessionID時,需要保證足夠的隨機性,比如采用足夠強的偽隨機數生成算法。

 

    Session Fixation攻擊

    賣車,不換鎖的例子。 

    這個沒有換“鎖”而導致的安全問題,就是Session Fixation問題。

    在用戶登錄網站的過程中,如果登錄前后用戶的SessionID沒有發生變化,則會存在Session Fixation問題。

    解決Session Fixation的正確做法:在登錄完成后,重寫SessionID

  

    Session保持攻擊

    Session如果一直未能失效,會導致什么問題呢? 

      a 如果攻擊者能一直持有一個有效的Session,而服務器對於活動的Session也一直不銷毀的話,攻擊者就能通過此有效Session,一直使用用戶的賬戶,成為一個永久的“后門”

    攻擊者如何永久地持有一個Session? 

      a 攻擊者可以通過不停地發起訪問請求,讓Session一直“活”下去。

      b Cookie是可以完全由客戶端控制的,通過發送帶有自定義Cookie頭地HTTP包。

      c 有一種做法是服務器端不維護Session,而把Session放在Cookie中加密保存。 

         Cookie的Expire時間是完全可以由客戶端控制的。 

          ① 篡改這個時間,並使之永久有效,就有可能獲得一個永久有效的Session,而服務器端完全無法察覺。

          ② 攻擊者甚至可以為Session Cookie增加一個Expire時間,使之持久化地保存在本地,變成一個第三方Cookie。

    如何對抗這種Session保持攻擊? 

      a 在一定時間后,強制銷毀Session

      b 當用戶客戶端發生變化時,要求用戶重新登錄。 如IP、UserAgent等信息。

      c 每個用戶只允許擁有一個Session。

 

  4、單點登錄(Single Sign On,SSO)

    單點登陸,希望用戶只需要登錄一次,就可以訪問所有的系統

    SSO的優點:在於風險集中化,就只需要保護好這一點。

    SSO的缺點:因為風險集中了,所以單點一旦被攻破的話,后果會非常嚴重,影響的范圍將涉及所有使用單點登錄的系統。降低這種風險的辦法:在一些敏感的系統里,再單獨實現一些額外的認證機制。

    目前最為開放和流行的單點登錄系統時OpenID。

      OpenID模式仍然存在一些問題

      OpenID的提供者服務水平也有高有低

 

二、訪問控制

  訪問控制也可以說是權限控制,是某個主體對某個客體需要實施某種操作,而系統對這種操作的限制就是權限控制。

  在一個安全系統中,確定主題的身份是 ’認證‘ 解決的問題;而客體是一種資源,是主體發起請求的對象。在主體對客體的操作過程中,系統控制主體不能 無限制 的對客體進行操作,這個過程就是 訪問控制。

  1、垂直權限管理

    垂直權限管理實際就是 基於角色的權限管理(RBAC模型)。

    不同角色的權限有高低之分。高權限角色訪問低權限角色的資源往往是被允許的,而低權限角色訪問高權限角色資源通常是被禁止的。若一個本屬於低權限的用戶通過一些方法能夠獲得高權限角色的能力,則發生了“越權訪問”。在配置權限時,應當使用“最小權限原則”,並使用“默認拒絕”的策略,只對有需要的主體單獨配置“允許“的策略。這在很多時候能夠避免發生”越權訪問“。

  2、水平權限管理

    水平權限管理可以看成 基於數據的訪問控制

    相對於垂直權限管理來說,水平權限問題處在同意角色上,系統只驗證了能訪問數據的角色,既沒有對角色內的用戶進行細分,也沒有對數據的子集做細分,因此缺乏一個用戶到數據的對應關系。

  3、OAuth

    OAuth 是在不提供用戶名和密碼的情況下,授權第三方應用訪問web資源的安全協議。可實現不同網站之間的互通。

    常見應用OAuth的場景,一般是某個網站想要獲取一個用戶在第三方網站中的某些資源或服務。

    OAuth 目前已到了OAuth2,具體原、流程、應用可具體學習。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM