本文將介紹Cookie和Session的基本原理及其在網路世界中所扮演的角色。為了更具體地探討其安全性問題,還會實際演練DVWA的Weak Session ID等級Low、Meduim和High的範例題目,重點講解Session ID的常見問題及其破解方法,揭示Weak Session ID所帶來的安全風險。
在整個網路發展中,Cookie與Session都是不可或缺的技術,它們為使用者上網的體驗帶來顯著的提升。根據知名網站技術調查網站W3Tech統計,全球有超過40%的網站使用Cookie技術,其存在使得網站能夠提供使用者個性化的設定,並且在跨頁面操作時提升使用者體驗,例如維持登入狀態和保存購物車內容。但是很多人對這項技術的認識較為模糊,尤其對於其安全性及隱私風險方面的了解更是微乎其微。因此,歐盟於2016年起制定一般資料保護規範(GDPR),該規範講述要求一個網站在讓使用者清楚地知情並同意後,才能儲存非必要儲存的資料,這也是在很多的網站上都會出現類似是否接受Cookie的提示。
然而,第三方的Cookie尤其引人爭議,因為其允許廣告商進行跨網站的追蹤,建立使用者的喜好清單。但事實上,瀏覽器開發商也注意到隱私上的問題,如Chrome、Safari都開始限制第三方Cookie的存取,廣告和資料分析產業也慢慢進入「無Cookie時代」的轉型期,迫使業界找尋更注重隱私的替代追蹤方案。因此,了解Cookie與Session的原理,區分它們的類型與功能,對於現代網站的開發者或使用者都至關重要。
本文將會針對Cookie和Session的基礎原理、潛在風險進行詳細探討,並透過情境化演練與實際操作,使讀者更直觀地了解兩大機制運作原理。
相關背景知識說明
首先,介紹相關的背景知識。
無狀態的超文本傳輸協定(HTTP)
首先要了解HTTP(Hyper Text Transfer Protocol)本身是無狀態的,這讓伺服器無法分辨是哪位使用者在瀏覽這個網頁,同時每次的請求都是獨立的,伺服器不會記得使用者之前的狀態,如圖1所示。這帶來了一個問題:假設有一個網站在使用者登入會員後,每次切換頁面時,由於伺服器都無法知道這位使用者已經登入,使得每次切換頁面時都要重新登入來驗證身分。
圖1 無狀態的HTTP。
為了解決這個困擾,伺服器引入了Cookie機制,藉由在使用者瀏覽器上存放小文字檔案,使得伺服器能夠記住使用者的狀態。
Cookie與Session的基本原理
接著,分別說明Cookie與Session的基本原理。
Cookie是一種儲存在使用者瀏覽器的小型文字檔案。在基礎的Cookie運作中,當瀏覽器連接伺服器時,伺服器會回傳一個Set-Cookie的回應標頭,然後瀏覽器會儲存這個Cookie。之後,每次發送請求到同一個伺服器時,瀏覽器便會自動攜帶這Cookie。例如,使用者第一次登入後,伺服器會生成並回傳一個代表登入者身分的標頭。之後的每次請求中,瀏覽器會自動附帶該Cookie,伺服器藉此確認使用者的身分,Cookie運作原理如圖2所示。
圖2 Cookie的運作原理。
Cookie的類別主要分為第一方Cookie和第三方Cookie兩類,說明整理如表1所示。
Session是一種由伺服器端儲存客戶狀態的一種機制,常用於使用者與網站之間維持狀態,如登錄資訊、購物車內容等。通常與Cookie搭配使用。它在處理使用者敏感資料(如銀行系統或後台管理系統)時尤為重要。
Session與Cookie不同,它將使用者狀態儲存在伺服器端,透過唯一的Session ID標識使用者身分。Session ID通常存放於Cookie中,伺服器端透過比對Session ID驗證使用者身分,此機制能大幅減少敏感資料洩漏至客戶端的風險,運作原理如圖3所示。
圖3 Session的運作原理。
瀏覽器每次請求時攜帶這個Session ID,伺服器根據Session ID對應的資料判斷使用者狀態。使用者登出時,伺服器刪除這筆Session資料,Session ID即失效。如果Session規律明顯,容易被預測,這種容易被預測的Session ID產生方式被稱之為Weak Session ID。
以表2來說明Cookie和Session的主要差異。
Cookie的主要安全問題
由於Cookie是儲存在瀏覽器端,且每次會將請求自動發送到伺服器,使其成為眾多攻擊的目標,特別用於儲存維持登入狀態之Session ID的Cookie。以表3整理Cookie常見的威脅攻擊。
防範Cookie安全問題
伺服器在回應請求,可以在回應中加入Set-Cookie標頭,該標頭會告知瀏覽器儲存Cookie,則Set-Cookie標頭中也細分成不同的屬性以實現Cookie的安全性,在表4中針對不同的屬性設定做介紹。
DVWA之Weak Session ID 實戰教學
接下來,以DVWA(Damn Vulnerable Web Application)之Weak Session ID的Low、Medium、High等三種難度的題目作為範例,了解錯誤的Weak Session ID產生方式是怎麼出現資安漏洞,以及有心人士可能會用什麼方法來破解。
級別:Low
從圖4中的程式碼可以看出last_session_id不存在時預設為0,反之則加1,並設置為dvwaSession。根據以上分析,可以推測出級別Low的Session ID產生方式是用+1做遞增。
圖4 DVWA級別Low範例程式碼。
級別:Medium
圖5中程式碼與上一題基本相同,差別在於為了產生Session單一性不重複,加上時間來運算。這個範例中的dvwaSession是透過時間戳來形成,可以透過線上的時間戳工具來破解,如timestamp工具,網址為「https://www.epochconverter.com/」。
圖5 DVWA級別Medium範例程式碼。
級別:High
如圖6所示,當Session + 1後以使用MD5的方式轉換成雜湊值(Hash),使用線上Hash破解工具進行爆破(https://crackstation.net/),如圖7所示,觀察爆破後的結果,可以發現依舊是1, 2 ,3 ,4…,該值只不過是Session經過雜湊函數轉換後的結果。
圖6 DVWA級別High範例程式碼。
圖7 透過線上Hash解密工具識別dvwaSession。
實際情境演練
以下透過模擬使用者登入頁面,演示幾種網路技術的實際運作以及潛在風險。
無狀態HTTP
在無設置網站的模擬環境中,輸入正確的帳號密碼進行登入操作,登入畫面如圖8所示。成功登入後,如圖9所示,按下〔F12〕鍵可以觀察到Cookie中並未儲存任何資料。
圖8 登入介面。
圖9 登入成功。
這是因為HTTP是一種無狀態的協議,每次的請求都是獨立的。每當頁面重新整理時,伺服器無法記住使用者的登入狀態,因此將瀏覽器導回尚未登入的頁面,如圖10所示。
圖10 原始尚未登入的介面。
Cookie(無加密)
再次成功登入後進入使用者頁面,此時可以發現Cookie中儲存了使用者的基本資料。Cookie是在第一次請求後產生的記錄,後續請求只須攜帶該記錄,伺服器即可理解使用者的狀態,如圖11所示。
圖11 使用Basic Cookie登入成功。
以生活實例來說,健忘的早餐店的老闆儘管記不住客人的習慣,但當你把要點的餐點寫在衣服上,老闆就能快速提供服務。然而,由於Cookie儲存在瀏覽器端,因此使用者可以直接修改其內容。
以下示範了修改Cookie中儲存使用者ID,成功登入其他人的使用者頁面,這是未加密Cookie所造成的重大資安漏洞,如圖12所示。
圖12 修改Cookie中儲存使用者ID並成功登入其他人的使用者頁面。
Session-Based Authentication
為解決上述問題,伺服器可將Session(如登入狀態)資料加密後儲存於Cookie中,如圖13所示,並由伺服器端負責解密。使用者登入後,伺服器將加密的Session資料回傳給瀏覽器。每次請求時,瀏覽器會攜帶這份加密的Cookie,而伺服器解密後檢查使用者狀態。
圖13 session_data和其值。
範例中,經過加密後的Cookie是一段亂碼,解密後可得到:
{"id": "1111727", "name": "王小明"}
此方法雖提升了安全性,但加密與解密運算會增加伺服器負擔,加密後的Cookie也會占用更多傳輸空間,影響效率。
Session Data Storage
使用者在登入成功後,伺服器會在資料庫中建立一筆Session資料,並生成一個sid,回傳給瀏覽器並儲存於Cookie內,如圖14所示。
圖14 生成一個sid,並儲存在瀏覽器Cookie中。
以生活實例來說,這相當於點餐後獲得號碼牌(sid)。該號碼牌只是用於查詢的編號,對應於使用者點的餐,但他人僅憑號碼牌無法獲知具體內容,因為資料存儲在店家內部。
然而,若sid的生成方式不夠隨機,例如直接以+1遞增,則會導致Session ID易被預測。例如,陳大明的sid是2,而根據王小明的sid是1,可推測ID是按遞增方式生成,如圖15所示。此類容易被預測的方式被稱為Weak Session ID,極易被攻擊者利用以盜取他人Session。
圖15 陳大明的sid為2。
結語
隨著網際網路技術的發展,Cookie和Session在提升網站性能與使用者體驗方面發揮著至關重要作用。Cookie可以保存使用者的偏好設定、登入狀態等,然而Cookie儲存在客戶端(瀏覽器)中,若未經妥善管理或加密,可能會遭受竄改或盜用。另一方面,Session作為伺服器端的會話工具,具有更高的安全性,但仍存在Weak Session ID的風險,攻擊者可透過觀察Session ID產生的規律竊取Session ID來冒充使用者。使用者應該提高對Cookie和Session相關技術的認識,定期清理不必要的Cookie,爾後上網在碰到Cookie提示後,也可以思考其必要性,避免在不安全的網站上不慎將個人隱私外洩出去。
<本文作者:社團法人台灣E化資安分析管理協會(ESAM, https://www.esam.io/)元智大學多媒體安全與影像處理實驗室(Multimedia Security and Image Processing Lab)由黃正達博士率領成員們致力數位多媒體應用與研究,其領域包含但不限於密碼學(Cryptography)、偽裝學(Steganography)、醫學影像應用(Medical Image Application)、機器學習/深度學習(Machine/Deep Learning Application)、混合實境(MR, Mixed Reality)技術。>