iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 2
1
Security

我是誰?我在哪?系列 第 2

什麼是身分驗證?

本鐵人賽的主題是「身分驗證」,那第一步得先來定義一下什麼是「身分驗證」。

引用 OpenID Connect Core 1.0 所提到的術語(terminology)解釋:

Process used to achieve sufficient confidence in the binding between the Entity and the presented Identity.

直譯起來大概是:綁定(binding)使用者所宣稱的身分(identity)到某個實體(entity)的過程,且此過程與結果是可靠的。

直譯可能不好理解,可以進一步來看看這些關鍵字所代表的意義為何。

什麼是實體?

實體是一個抽象概念,它代表的是系統上的某個身分,比方說資料庫裡面的某個會員,或是 Linux 系統裡面的某個 user,甚至現實生活的「人」或「法人」,都是類似的概念。

而像 guest 或 anonymous 等,則是比較像角色(role),而不像實體一般的有存在感。

什麼是綁定?

綁定指的是使用者表明了他的身分,且在資料庫裡找到對應的實體,並信任使用者代表這個實體的過程,即為上文所稱的綁定。

並不是表明身分與找到實體就能信任,通常還要經過盤問(challenge)或類似的過程,才能真正地信任該使用者確實是他所宣稱的身分。

小範例

舉一個最簡單的例子:MySQL root 沒設定密碼。因為沒有密碼,因此只要使用者提出要登入 root「實體」的請求,MySQL 就能通過身分驗證,並信任該使用者為 root。

上面的例子可能太誇張,再舉個相較安全的例子:Linux root 有設定密碼,代表有權限使用 root 實體的使用者,必須要知道對應的密碼,系統才會信任該使用者為 root。但如果開放 ssh 登入 root,對攻擊者而言,只要了解 Linux 系統,即會知道系統必定有個「實體」叫 root,接著 ssh 登入方法是使用帳號密碼,這意味著帳號為 root,只剩下猜密碼即可完成綁定,並讓系統信任攻擊者為 root。

註:輸入 root 密碼的過程,即為「盤問」。

再舉現代行動裝置比較常見的驗證方法:生物辨識技術(biometrics)是從生物體(如人類)取得獨一無二的特徵,來提供系統做為辨識目前使用者身分的資訊。比方說 iPhone 的 Touch ID 要知道操作者是不是持有者的方法,可以取得指紋,並在資料庫尋找對應的實體做綁定;或是三星手機提供的虹膜認證,也是從虹膜掃描,取得資訊再到資料庫找對應的實體做綁定。

安全疑慮

現實生活會發生的偽造文書,如攜帶他人的證件提領他人的財產,即意圖冒充他人身分取得資源保護者的資源(銀行的錢)。這在電腦通訊領域有類似或更多偽造的問題。常見的登入系統大多使用帳號密碼驗證,包括銀行也是類似的介面,但事實上,一些常見的攻擊手法如:

這幾個攻擊手法有一個共同的特色是:無法確保訊息來源的可靠性。像「重送攻擊」是利用 server 無法確保訊息來源真的是該訊息持有人的前提下,所能做的攻擊;「網路釣魚」剛好相反,使用者無法確保網頁真的是 server 所提供的內容;「中間人攻擊」就更不用說了,兩邊都不知道中間有個人在搞鬼。

因此,在討論網頁的身分驗證時,確認請求是真的請求,回應是真的回應,是常會思考的安全性問題。如:

  • 請求真的是該使用者所發出的請求?有沒有可能被竄改?有沒有機會造假?
  • 回應真的是 server 的回應?有沒有可能被竄改?有沒有機會造假?

參考資料


上一篇
定義範圍
下一篇
簡介 HTTP 協定
系列文
我是誰?我在哪?30

2 則留言

0
Wen Chien
iT邦新手 5 級 ‧ 2019-09-18 11:45:05

朝聖

0

我要留言

立即登入留言