有一題講攻擊者疑似取得了一般使用者的帳號密碼,問接下來該加什麼控制,才能防止這個帳號被冒用。
選項裡有一個 PAM,全名 Privileged Access Management,名字裡就寫著存取管理,看起來最像在管帳號的那一個,我就選它。
正解是 MFA。
特權帳號指的是權限大到可以動整個環境的那幾個:AD的網域管理員、Linux 的 root、資料庫的 sa,還有跑排程與服務用的服務帳號。
這種帳號通常是共用的,密碼寫在某份文件裡或存在某個人腦袋裡。出事之後想查當時是誰登進去的,查到的只有一個 administrator,這對於 Accounting 來說是不利的。Accounting 是 AAA 裡的第三個 A,講的是誰在什麼時候做了什麼要留下紀錄,如果所有管理員都共用一個administrator帳號,出了事情根本搞不清楚是從哪裡被突破的,又或者出現Insider threat(內部威脅)時,到底該從誰查起,清白的人怎麼自證。
PAM 就是為了解決這件事的一套制度加工具。帳號的密碼收進一個保險庫,要用的時候提申請,寫清楚為什麼要用、用多久,核准了才放行,中間的連線側錄起來,用完把密碼換掉。
所以它守的是「誰可以動這台機器的根」,不是「登入的這個人是不是本人」。
一般使用者當然也是帳號,但它沒有特權,沒有哪個一般使用者登入之前會先去跟誰申請。所以跟這題的情境不符合。
我當時是被 Access Management 這兩個字蓋過去了,聽起來什麼帳號都包,但前面那個 Privileged 才是它的守備範圍。
BTW,現在 Linux 推行盡可能不使用 root 帳號,方法是讓某些帳號、群組取得他們該有的權限,當使用這些特權的時候,前面加一個 sudo,用的是手上的帳號,而不是 su - 然後 root 到底。這樣除了權限給得比較剛好,log 裡也留得下是誰執行的,剛好就是上面那個 Accounting。
帳號被冒用,講的是對方已經拿到帳號密碼,登進來的時候系統看到的每一項都是對的。
密碼外流一次就一直算數,而且是在哪裡外流的通常也不會有人通知你。所以要補的不是把密碼規則訂得更嚴,是在密碼之外再要一樣東西。
MFA 是 Multi-Factor Authentication,多因素驗證。因素分成三類:
Something you know:你知道的(密碼、PIN)
Something you have:你持有的(手機上收的OTP驗證碼、插在 USB 孔的實體金鑰)
Something you are:你本身的(指紋、臉)。
要湊到兩類不一樣的才算多因素。
密碼加上安全提示問題不算,那兩個都是你知道的東西,同一場外洩可以一起流出去。
手機上那組每三十秒換一次的六位數叫 TOTP,Time-based One-Time Password。那六位數不是伺服器傳過來的,是掃 QR code 的時候兩邊講好一把共用的種子,之後各自拿種子加上現在的時間去算,算出來一樣就放行。所以手機沒訊號也照樣跳號碼,現在就可以打開飛航模式後再打開自己手上的Authenticator,看他會不會照跳,數字是手機自己算出來的,不是等網路送過來。
也因為它是「把一串數字交出去」,MFA 擋得住拿到你的密碼的人,擋不住你以為是真的網站,就照常輸入進去,然後中獎。這也是實體金鑰跟 passkey 後來被推的原因。
我會錯這題,是因為在我腦袋裡 PAM、MFA、SSO、Zero Trust 這些東西放在一起,像一排功能表,但我一開始沒有深究,分別在做甚麼事。
後來我是這樣分的。
SSO(Single Sign-On)解的是同一個人要記十組密碼。登入一次,後面那幾個系統就都認了。它省的是登入次數,不是安全性本身,帳號被冒用的時候 SSO 反而讓對方一次通吃。
Federation(聯合身分)是把 SSO 這件事跨出自己家。你的員工拿公司的帳號去登別人家的服務,中間需要兩邊互信。負責驗身分的那一方叫 IdP(Identity Provider),密碼是在它那裡比對的;接受結果、提供服務的那一方叫 SP(Service Provider)或 RP(Relying Party),它自己不存密碼。
最常碰到的就是網站上那顆「用 Google 帳號登入」。點下去瀏覽器會跳到 Google,密碼是打在 Google 的頁面上,驗完再跳回原本那個網站。Google 是 IdP,那個網站是 RP,它從頭到尾沒看過你的密碼,收到的只是 Google 簽給它的一張憑據。「用 Apple 登入」「用 LINE 登入」都是同一套。
反過來說,Google 帳號被拿走的時候,掛在它底下那一串服務會一起出事。信任集中在同一個地方,方便跟風險是同一件事。
而 Federation 要成立,兩邊得講同一種語言,常見的是下面這三個。
SAML(Security Assertion Markup Language,安全斷言標記語言),現在在用的是 2.0 版。IdP 驗完之後用 XML 包一份「斷言」(assertion),裡面寫著這個人是誰、屬於哪些群組,簽章之後透過使用者的瀏覽器轉交給 SP。跨過兩個組織信任邊界的就是這份斷言。公司帳號登入外面的 SaaS,像 Salesforce、Workday 這類,大多還是走它。
OAuth(Open Authorization),現在講的都是 2.0 版。它做的其實不是驗身分,是授權委派:你允許某個 App 去拿你在另一個服務裡的某些資料,服務發一張 access token 給它,上面寫著能拿什麼、有效多久。「這個 App 想讀取你的 Google 雲端硬碟」就是它。拿 OAuth 來當登入用是後來被硬套上去的,也因為這樣出過一批漏洞,重導向的環節被劫走,就變成冒用別人的身分。
OpenID Connect(OIDC)是架在 OAuth 上面,把「這個人是誰」補回來的那一層。多了一張 ID Token,JWT 格式,裡面寫著使用者是誰、由誰簽發、什麼時候驗的。現在網頁、手機 App、API 這一側大多是它,上面那顆 Google 按鈕背後就是。
順帶一提,OpenID 跟 OpenID Connect 不是同一個東西。OpenID 2.0 是二十年前那一代、已經停用的舊協定,現在文件裡寫 OpenID 幾乎都在指 OIDC。
Zero Trust 是一個架構原則,不是買得到的東西。它拿掉的是「連線來自內網就先信任你」這個前提,改成每一次存取都回頭問身分跟情境。我的理解是它的零件大概是這幾個:一個強大的身分來源驗證、一個決定放不放行的策略引擎、網路上的微分段、還有持續驗證。
ZTNA(Zero Trust Network Access)才是產品那一格,照著上面那個原則做的遠端存取。跟傳統 VPN 的差別是 VPN 連上去人就在內網裡了,ZTNA 是一次只放行一個應用。旁邊還有 CASB(站在使用者跟雲服務中間,看得到大家在用哪些雲、資料往哪跑)跟 SWG(上網流量的過濾閘道),這兩個常跟 ZTNA 擺在一起賣,但它們管的不是身分。
| 這是哪一類 | 舉例 | 它在解什麼 |
|---|---|---|
| 功能 | SSO、MFA | 少記幾組密碼/光有密碼還不夠 |
| 協定 | SAML、OAuth、OpenID Connect | 把「這個人是誰」從一邊傳到另一邊 |
| 架構原則 | Zero Trust | 不因為連線來自內網就給信任 |
| 產品 | ZTNA、CASB、SWG | 裝得起來、買得到的那一層 |
| 治理制度 | PAM、RBAC | 誰能拿到什麼權限、怎麼核准與留痕 |
| PAM | MFA | |
|---|---|---|
| 守的是誰的帳號 | 管理員、root、服務帳號 | 所有使用者,客戶也算 |
| 在解什麼問題 | 權限太大、共用、事後查不出是誰 | 密碼被拿走就等於帳號被拿走 |
| 長什麼樣 | 申請、簽核、側錄、用完換密碼的一套制度 | 登入的時候多驗一樣東西 |
我後來是先讀被盯上的是誰的帳號。是客戶或一般員工,往多加一道驗證那邊看;是管理員或服務帳號,才輪到特權那一套。
自己的帳號就是現成的教材。
打開 Google 帳號的安全性頁面,進「兩步驟驗證」,看目前掛了哪幾種方式,再把每一種對回上面那三類因素。簡訊驗證碼、驗證器的六位數、Passkey 都算你持有的,只是被攔截的難度差很多,官方說明在這裡。
往下拉還有一個「備用驗證碼」,十組一次性的數字,是手機不在手上的時候唯一的路。
這邊建議這驗證碼不要就明文丟在桌面,寫下來,找個自己找得到的地方保存好,千萬不要就貼在螢幕旁邊還是辦公桌上,這樣太危險。
同一個地方還有一區與 Google 帳戶建立關聯的應用程式,列的就是這些年點過「用 Google 登入」的每一個網站,旁邊寫著各自拿到了什麼權限。不用的順手解除,帳號底下掛越少東西越好,現在可以打開來看一下,清一清那些已經好久沒去過的網站。
:::danger
要換驗證方式之前,先把備用驗證碼存好。手機掉了又沒有備用碼,等於自己把自己鎖在門外,這時候能不能救回來看的是那個服務的申訴流程,不是你的技術。
:::