Black Hat USA 2003 - Locking Down Mac OS X
三句話摘要
macOS 系統全面安全加固指南——從啟動保護到守護進程審計,防止未授權訪問的完整方法論。 macOS 安全加固是多維度工程,需從啟動、守護進程、網絡、權限、自動化等層層深入,才能在高風險環境中有效防御。 啟動安全是第一道防線 — 蘋果默認安全配置(如"不安全"模式)實測無效。需同時實施:開放固件密碼防止引導設備更改、在 rc.boot 中添加密碼檢查脫本保護單用戶模式、禁用 CD 啟動、關閉自動登入、隱藏登入界面的重啟按鈕。任何單一措施都可被繞過,必須多層防御。
重點整理
重點- 1
啟動安全是第一道防線 — 蘋果默認安全配置(如"不安全"模式)實測無效。需同時實施:開放固件密碼防止引導設備更改、在 rc.boot 中添加密碼檢查脫本保護單用戶模式、禁用 CD 啟動、關閉自動登入、隱藏登入界面的重啟按鈕。任何單一措施都可被繞過,必須多層防御。
- 2
守護進程審計與禁用 — 通過 /etc/hostconfig 控制系統服務啟動。筆記本可安全關閉:AUTOMOUNT(NFS 自動掛載會有延遲)、CUPS(打印守護進程)、TIMESYNC(時間同步可被網絡攻擊利用)、Rendezvous(mDNS 會主動向整個網絡廣播用戶信息,造成隱私泄露)。需逐一檢查 /System/Library/StartupItems/ 中每個腳本的功能,而非盲目關閉。
- 3
網絡暴露面最小化 — 用 netstat 和 lsof 識別所有監聽端口與對應進程。syslog 守護進程 514 端口存在遠程日志注入風險(手冊聲稱需 `-U` 標誌才監聽網絡,但實測仍在監聽),應用防火牆(ipfw)明確阻止。NetInfo 應僅監聽 localhost。每個監聽端口都需正當理由。
- 4
權限與 setuid 審計 — 系統上的 mount、ping、sudo 等 setuid 程序可成為權限提升跳板。創建受限用戶組限制特定程序的執行(如禁止 Web 服務器用戶執行 mount),即使服務被攻擊也無法提升權限。並審計全局可寫文件與目錄,防止符號鏈接或替換攻擊。
實用技巧與重點
乾貨- 啟動保護工具:
- 開放固件密碼:按 Option 鍵啟動 → `set-security-mode command` → `reset-all`
- 單用戶密碼:修改 rc.boot 腳本(第三方 OSX scripts.com/secure 提供 Perl 腳本自動添加)
- 禁用自動登入:系統偏好設置 > 帳戶 > 登入選項,或編輯 `/Library/Preferences/com.apple.loginwindow.plist`
- 守護進程配置文件:
- 主控文件:`/etc/hostconfig`
- 啟動腳本路徑:`/System/Library/StartupItems/` 和 `/Library/StartupItems/`
- hostconfig 選項:AUTOMOUNT、CUPS、NETWORKINFOSERVER、TIMESYNC、IPv6(設為 YES/NO/AUTOMATIC)
- 禁用方法:修改 hostconfig 值或在啟動腳本開頭添加 `exit 0`
- 重啟服務:`SystemStarter stop <service>` / `start` / `restart`
- 可關閉的服務(筆記本環境):
- AUTOMOUNT — NFS 自動掛載(除非使用 NFS 客戶端)
- CUPS — 打印守護進程(無打印機則關閉)
- TIMESYNC — 時間同步(防 NTPD 漏洞利用)
- Rendezvous/mDNS Responder — 文件共享與即時通訊廣播(隱私風險)
- 網絡審計命令:
- 監聽端口查詢:`netstat -np TCP` 和 `netstat -np UDP`
- 進程識別:`lsof -i TCP:port_number` 或 `lsof -i UDP:port_number`
- 常見端口:NetInfo (1033)、lookup daemon (49227)、syslog (514 UDP)、DHCP (68 UDP)
- Inetd/Xinetd 審計:
- inetd 配置:`/etc/inetd.conf` — 檢查未被註釋行
- xinetd 配置:`/etc/xinetd.d/` — 檢查每個服務的 `disable = yes/no` 設置
- Setuid 程序查找:
- 所有 setuid root 程序:`find / -perm -4000 -user root`
- Setgid 程序:`find / -perm -2000`
- 風險控制:創建受限用戶組,為特定用戶禁止執行某些 setuid 程序
- Cron 作業位置:
- 系統 cron:`/etc/periodic/daily`、`weekly`、`monthly`
- 自定義 cron:`/etc/periodic/daily.local`、`weekly.local`、`monthly.local`
- 用戶 cron:`crontab -l` 查看
- 防火牆與權限:
- macOS 使用 IP Filter (ipfw) 進行防火牆
- 權限審計:`find / -perm -002`(全局可寫文件)
- 加固自動化:編寫腳本在 /etc/rc.local 或系統啟動時運行,確保補丁不覆蓋配置
結論
結論“macOS 安全加固是多維度工程,需從啟動、守護進程、網絡、權限、自動化等層層深入,才能在高風險環境中有效防御。”
完整解析
詳細J Beal 在這場技術演講中,以 Defcon 等高風險環境為背景,完整展示如何加固 macOS 系統。他強調,蘋果系統看起來易用安全,但其底層基於 Unix(類似 FreeBSD),默認配置完全不足以應對威脅。
首先是啟動安全。macOS 使用 Darwin 內核和特殊引導流程:開放固件 → kernel → MachInit → rc.boot 與 rc 腳本。攻擊者可通過多個切入點侵入:按 Option 鍵進入開放固件、直接進入單用戶模式、從啟動 CD 運行密碼恢復工具。蘋果官方文檔推薦的設置經實測無效——修改 /etc/ttys 中的"不安全"選項並不能阻止單用戶訪問。解決方案需多層疊加:在 rc.boot 中插入密碼檢查腳本(標準方法是修改並在需要時提示;錯誤輸入三次則重啟),在開放固件中設置 `security-mode command` 密碼防止設備更改,禁用自動登入,隱藏登入界面的重啟按鈕。
其次是守護進程審計。/etc/hostconfig 是主控文件,決定 AUTOMOUNT、CUPS、TIMESYNC 等服務是否啟動。System Starter 會讀取 /System/Library/StartupItems/ 中各服務的啟動腳本與優先順序設置。講者逐一分析了應該禁用的服務:AUTOMOUNT 在筆記本上無需(NFS 自動掛載會導致延遲),CUPS 除非使用打印機,TIMESYNC 在不信任網絡中會暴露 NTP 漏洞,Rendezvous(mDNS 響應器)最危險——它會主動向整個網絡廣播用戶有文件分享、在即時通訊上,導致陌生人騷擾。講者親身經歷在地鐵上遭此困擾,因此強烈建議禁用。禁用方法可修改 hostconfig 或編輯啟動腳本添加 `exit 0`。
第三是網絡審計。運行 `netstat -np TCP/UDP` 獲取所有監聽端口列表,再用 `lsof -i TCP:port` 確定進程。理想情況下只有必要服務監聽:NetInfo(1033,須限制在 localhost)、lookup daemon(DNS/NIS 緩存)、DHCP(68)。514 端口的 syslog 成為問題——手冊頁聲稱無 `-U` 標誌不會監聽網絡,但實測仍在監聽,暴露遠程日志注入風險。講者建議用防火牆(ipfw)明確阻止。
第四,Inetd/Xinetd 審計。macOS 同時運行兩者但大多已禁用,需檢查 /etc/inetd.conf(未註釋行)和 /etc/xinetd.d/(disable 設置)。第五,Setuid 程序風險。mount、ping、sudo 等 setuid 程序是提權路徑。創建受限用戶組(如"humans"),為這些程序限制執行權限,使 Web 服務器等受限用戶無法執行,即使被攻擊也無法提升權限。第六,Cron 和權限審計——檢查 /etc/periodic/ 下的定期任務,查找 `find / -perm -002` 的全局可寫文件防止符號鏈接攻擊。
最後,講者強調加固自動化的必要性——編寫腳本在系統啟動時重新應用所有加固步驟,防止補丁更新覆蓋配置。他還提及正在進行的 Bastille Linux macOS 移植項目,可自動化許多步驟。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

