在 Conditional Access 條件下設置 Jamf Connect Login 的 MFA 挑戰

Mac 世界的零接觸話題,每年都可以有新的話題出現。圍繞著使用者體驗,讓用戶在拿到電腦的那一刻,就能自動化配置所有公司要求的設定,不需 IT 人員幫忙。這不僅是節省 IT 人員的時間而已,更是讓整個出機流程變得更為流暢。

除了軟體與設定可以全自動化部署以外,使用者帳號當然也可以自助化的設定在電腦裡,而且完全按照公司的規範。所以如果公司正在使用 Entra ID 這樣的目錄服務時,當然也可以把 Entra ID 上面的帳密同步化成電腦本機電腦上的帳密,減少人員帳密疲疺的風險。然而,要求更高等級的公司,可能會要求人員在登入 Entra ID 時必須通過兩階段驗證,而這可能就為同步密碼帶來挑戰。

以 Jamf Connect 來說,這一套軟體可以在 Mac 設備開箱時自動就安裝在電腦上,並且出現一個可客製化的登入視窗給用戶登入 Entra ID。剖析這套軟體,事實上是由兩個 OIDC 授權類別完成的,一個是 Authorization Code Grant,另外一個是 ROPG。

Jamf Connect Login 畫面,取自 Jamf 官網
  • Authorization Code Grant 是 Jamf Connect 用來創建 Mac 本地帳號時會使用到的授權類別。簡單來說,當用戶把公司帳密輸入在上方登入畫面時,Microsoft Entra ID 就會回傳一個 token,Jamf Connect 就可以利用這個 token 裡面的資料去創建本地帳號,例如使用者名稱等等。
  • ROPG 則是在本地帳號建立後,Jamf Connect 為了要確保本地帳戶的密碼與在 Microsoft Entra ID 上的使用者密碼一致,會再利用這個授權類別去確認兩邊密碼一致。

以上這些情況都沒有什麼問題。然而,當公司配置 Microsoft Conditional Access 在 Jamf Connect 上時就會出現問題了。假設配置的條件是必須完成 MFA 驗證才提供 Token,那麼 ROPG 這種授權類別就會難以進行。一是 ROPG 這個授權類別不會彈出一個畫面要使用者輸入兩階段驗證碼之類的東西,二是這種同步密碼的頻率可能是 15 分鐘一次,不可能每 15 分鐘就去挑戰使用者。

然而,當這個 ROPG 挑戰失敗,不只是密碼無法同步,也會留下一道登入失敗的紀錄在 Entra ID 上面,這對於風險控管會是另一個棘手的問題。所以,如何滿足登入時必須完成 MFA 挑戰,且密碼同步時不會留下錯誤紀錄並取得合法的 Token,就是這篇主要討論的問題。

我參考了 Jamf 工程師在 Github 上面的做法,成功解決了這個問題,過程略顯複雜,但是直到動筆的當下都還能用。簡約來說,這個做法大概拆成以下幾個步驟:

  1. 在 Entra ID 上面註冊兩個 Jamf Connect App,一個對外公開、一個做為內部呼叫使用。
  2. 在內部呼叫的 App 上面,另外去 Expose API,方便由對外公司的 App 呼叫。
  3. 設定 Microsoft Custom Security Attribute,稍候會套用到 All Cloud Apps 的排除清單裡。
  4. 在面向外部的 App 上面,連結已開放 API 的內部 App,並且套用剛才設定的 Custom Security Attribute
  5. 回到 Microsoft Entra Conditional Access 上面找出所有已設定 All Cloud apps 的政策,並且排除具有該 Secuiry Attribute 的 App
  6. 使用 Jamf Connect Configuration Tool 設定兩個 App 的 Client ID,並且實機測試。

設定內部呼叫的 Jamf Connect App

姑且稱這個 App 叫做 Jamf Connect API App 好了。首先前往 Microsoft Entra ID > App Registrations > New Registration,填完名字、選擇 Single Tenant 後按下註冊就好。

接著編輯剛才已經註冊好的 App,點選 Expose API > Application ID URI > Add,就會自動新增一個 URI。接著按下 Add a Scope。

在 Add a scope 裡面按照以下畫面填妥,Scope name 照圖填寫、並選擇 Admins only,最後 Add Scope。

結果就會長得像下面這張圖一樣,請把 Application ID URI 先抄下來,等一下會用到。

接著選擇左邊的 API Permissions,並且點選 Grant admin consent。

設定 Custom Security Extension Attribute

微軟預設是沒有把這項功能打開的(不是因為繳的錢不夠多),照微軟文件來看,你應該要加上這些角色權限才能使用:

  • Attribute Definition Reader
  • Attribute Definition Administrator
  • Attribute Assignment Reader
  • Attribute Assignment Administrator

你可以前往 Entra ID > Users > 選擇用戶 > Assigned Roles 裡面去確認一下

確定有權限後,前往 Entra ID > Custom Security Attributes > Add attribute set,自己取一個名字,例如叫做 JamfConnect。

然後再點選剛才建立的 Set > Add attribute,然後按照下圖輸入。意思是這個欄位的名字叫做 exempt,裡面只有一個選項是 exemptMFA,而且不允許使用多個值來設定這個欄位,而且不允許預設以外的值被設定。

特別留意一下,Custom Security Attribute 這個功能目前只能新增不能刪除,所以如果後來想刪掉的話…在執筆這篇文章時是做不到的。

設定對外公開的 App

再回到一次 Entra ID > App Registrations > New registration,這次取名為 Jamf Connect OIDC App。比較不一樣的是在下方的 Redirect URI 的地方,選擇 Public client...,值填入 https://127.0.0.1/jamfconnect

按下註冊後,再繼續編輯這個 App > API permissions > Add a permission > APIs my organization uses > 找到剛才建立的 Jamf Connect API,最後記得按一下 Grant admin consent for...

結果大概像下面這張圖:

接著前往 Entra ID > Enterprise Applications > 選擇剛才建立的 OIDC App > Custom Security Attribtes,並且新增一個 Assignment,就選擇剛才建立好的 Custom Security Attribute,值的話就選擇 ExemptMFA。(下方截圖是之前就已經做過的設定,所以值的名稱叫做 Exempt,而不叫做 ExemptMFA,但總之前面只有設定一個值在這個欄位裡,所以就選擇你設定的那個值就是了)

設定 All Cloud Apps 的 Conditional Access 政策

前往 Microsoft Entra Conditional Access > Policies,一條一條看有沒有任何的 Policy 是套用到 All Cloud Apps 的。如果有,請編輯該 Policy,並且新增 Exclude 條件。也就是說,如果 App 裡面帶有這個 Custom Security Attribute 的話,就略過套用這個 Policy。

設定 Jamf Connect Configuration

請按照圖片設定。關於 OpenID connect scopes 的內容,請參考剛才小抄的 Application ID URI,後面再加上 +openid+profile+email。

接下來只要把 Jamf Connect Login 與 Jamf Connect 這兩個設定檔安裝到電腦上面,就可以實機測試看看了,最後的 Entra ID Logs 應該會長得跟下面一樣。也就是使用者在登入電腦時仍然必須經過 MFA 挑戰,但是做為密碼驗證的 ROPG 不會被要求 MFA。

Read more

Apple 生態系的真實威脅—我們都可能是目標

Apple 生態系的真實威脅—我們都可能是目標

從一場分享開始的警醒 前陣子在 Jamf Nation Live Taipei 分享了 2024-2025 年 Apple 裝置威脅報告,深入探討了全球 Apple 生態系正面臨的資訊安全威脅。 許多人對 Apple 產品有一種根深蒂固的信心—拿著 Mac 或 iPhone,就像拿到了數位世界的「免死金牌」。說實話,Apple 在軟硬體整合上的安全設計確實領先業界,這不是誇大其詞。但也正因為這份信心,我開始想更深入地了解真實情況。 從 Jamf Security 360 報告開始,我觀察了全球情報機構(如 Citizen Lab、Google TAG、Kaspersky)揭露的真實案例。那時我才意識到一個有點殘酷的事實,也正好對應了同事最常對我說的那句話:Apple 設備並非堅不可摧,使用者自身往往才是最大的弱點。 為什麼 Apple 用戶成了高價值目標

By Glee Tsai

從 Jamf Pro 自定義註冊畫面帶使用者資訊至 Jamf Connect 失敗的處理方式

Jamf Pro 在設定裡面的 Enrollment Customization,本來可以設定在使用者完成設備註冊的當下,同步把 SAML 裡的資訊帶給後面的 Jamf Connect Login,這樣就可以減少一步使用者還需要登入的步驟。但在撰文的當下,Jamf Pro 11.1 仍在這個功能上有問題,在跟 Jamf Support Team 了解後,大概能用一種 Workaround 來解決,只是要特別留意以下事情: 1. 在 Jamf Pro 裡的 Enrollment Customization 不要再打勾 Enable Jamf Pro to pass user information to Jamf Connect 了(因為勾了也沒有用) 2. 確保

By Glee Tsai

在 Apple 零接觸部署下僅允許某個群組啟動設備

在 Jamf Pro 有整合 Single Sign On 的情況下,可以前往 Settings > Enrollment Customization 設定僅允許一個群組中的成員啟用設備。如果這個成員沒有在這個群組裡面的話,就不能夠開箱設備。如果以 Entra ID 為例,需要把 Object ID 填在下方的欄位即可。 對照到我在 Entra ID 上的群組設置: 至於如果不是 Entra ID,而是其它的 SSO Provider 的話,最好可以用 SAML Tracer 這一套 Google Chrome 外掛去看一下自己的 SAML 文件是如何表達群組的,例如下圖能看到這個使用者屬於以下五個群組。 接著有另外一個很重要的事情要提醒,如果你要阻擋註冊的成員,可以登入到 Jamf Pro

By Glee Tsai

搭配 Jamf Pro 設定 macOS Kerberos SSO

Apple 自 2019 年後直接在作業系統裡面內建了 macOS Kerberos SSO Extension 的整合,讓依賴 Microsoft Active Directory 地端環境的公司,現在也能利用 Kerberos SSOe 完成 SSO,這個功能必須要搭配 MDM 才能啟用,沒辦法透過 UI 或 Script 的方式開啟。 Jamf Pro 設定方式 前往 Computers > Configuration Profiles > Single Sign-On Extension,並將頁面切換成 Kerberos 後,完成相關的設定。例如: * Realm 就填入 AD 網域的名稱,應該是全大寫的 * Hosts

By Glee Tsai