一、概述

本文档以macOS 10.14系统为基础,提供针对macOS Mojave的基本加固指南,以增强系统安全性。在本加固指南中,不包含一些可能影响操作系统功能并且需要进一步测试的设置。我们对每个条目进行了标注,分为“重要”和“可选”两类。其中的“可选”条目,我们也建议应用此设置,但系统的某些功能将会在应用设置后变为不可用,因此需要各位用户自行评估。

重要说明:本安全加固指南在加固过程中,将指导用户强制禁用SIP(系统完整性保护)。在加固完成后,请务必确保再次启用SIP。

二、常规建议

2.1 安全启动

在2018年的MacBook主机中,通过TouchBar内部新安装的T2芯片(包括Secure Enclave),支持安全启动(Secure Boot)功能。要检查是否已经启用安全启动,需要在开机时同时按下COMMAND + R键。在输入固件密码后,可以访问菜单栏中的“启动安全实用程序”(Startup Security Utility)。如果MacBook中带有T2芯片(TouchBar),则可以看到“安全启动”(Secure Boot)和“外部启动”(External Boot)两个选项。我们强烈建议,在需要保证较高安全性的情况下,应选择“安全启动”。在禁止从外部介质启动时,应选择“外部启动”。

2.2 终端保护

默认情况下,macOS已经具有保护机制,例如:XProtect(恶意软件检测)、Secure Boot、代码签名验证、沙箱应用程序和系统完整性保护。此外,如果启用了MDM(例如在macOS服务器上),则可以通过不同的策略配置设备和管理设备。如果需要安装其他终端保护工具,应该评估该工具是否支持macOS设备。

2.3 日志和事件收集

管理员可以根据实际需要,配置macOS的审计框架。通过/Applications/Utilities/Console.app,可以查看到整合后的日志。默认情况下,macOS支持以syslogd守护程序,通过UDP/514端口发送日志。但是,由于缺乏对TLS/SSL的支持,建议不要使用此项功能,预计Apple很快就会弃用这项功能。如果您所在的企业环境中不支持包含代理的macOS SISM,建议可以从本地整合日志,并且避免通过网络发送未经加密的日志。借助macOS提供的日志实用程序,可以以安全的方式获取此类日志,只需日志收集服务器的接收端打开TCP端口(需支持TLS/SSL)。例如,在MacBook上执行以下命令,可以通过加密通道将每个失败的sudo尝试发送到日志服务器:

log stream --style syslog --predicate 'process == "sudo" and eventMessage contains "incorrect password"' | openssl s_client -host <RemoteServer> -port <Port>

日志服务器将收到类似的日志消息,如下所示:

Filtering the log data using "process == "sudo" AND composedMessage CONTAINS "incorrect password""
Timestamp                       (process)[PID]
2018-10-24 17:23:33.842651+0200  localhost sudo[2002]:   MacBook_ERNW : 2 incorrect password attempts ; TTY=ttys002 ; PWD=/Users/MacBook_ERNW ; USER=root ; COMMAND=su

可以使用macOS登录项,来自动启动日志流。此外,管理员可以根据需要,使用过滤器来过滤实际需要的日志。

2.4 移动设备管理

将MacBook与移动设备管理系统(MDM,如macOS服务器)连接,可以强制操作系统必须部署指定的策略。此外,可以通过MDM解决方案来实现部署证书和连接到活动目录(Active Directory)。

三、认证

3.1 确保标准帐户和默认帐户的安全性

macOS会始终强制用户创建新帐户。即使用户以管理员权限帐户运行,也不会拥有与“root”相同的权限,这就是macOS称之为系统完整性保护(SIP)的机制。SIP将拒绝使用者对系统目录(例如:/System)的任何更改。

3.2 用户权限分离

建议用户使用不同的帐户,分别进行管理和日常活动。并且,应该为特殊任务和系统维护创建一个具有管理员权限的帐户,为日常使用过程创建一个普通帐户,从而避免攻击者快速提升权限。

3.3 确保密码安全

应确保所有用户都使用强密码,强密码的具体定义如下:

最小密码长度至少为8个字符;

密码必须同时包含小写字母、大写字母、数字和特殊字符;

不得使用任何默认密码;

密码必须具有6个以上不同的字符;

同一个密码最多使用180天;

用户名不得作为密码的一部分;

新设置的密码,与最近5次设置的历史密码不能相同。

3.4 强制密码安全策略(重要)

管理员可以使用命令行工具pwpolicy,来强制实施密码策略。以下命令可以强制执行上述策略:

pwpolicy -u -setpolicy "minChars=8 requiresAlpha=1 requiresNumeric=1 maxMinutesUntilChangePassword=259200 usingHistory=5 usingExpirationDate=1 passwordCannotBeName=1 requiresMixedCase=1 requiresSymbol=1"

3.5 双因素身份验证(可选)

从macOS 10.11和iOS 9开始,这些Apple设备就内置了双因素身份验证机制,可以保护用户的Apple ID。如果访问了任何需要登录Apple ID的内容,身份验证码就会被推送到另一台安装了macOS 10.11以上版本或iOS 9以上版本系统的设备上。这一过程可能会影响用户的macOS安装,因为可以通过Apple ID重置设备的密码。如果用户需要使用Apple ID执行各种任务,那么建议使用双因素身份验证。

3.6 自动登录和用户列表(重要)

建议禁用用户列表,这样会降低攻击者正确猜测登录凭据的可能性。

在“系统偏好设置”(System Perferences)中,选择“用户和组”(Users & Groups),选择“登录选项”(Login Options),将“自动登录”(Automatic Login)设置为禁用,将“显示登录窗口”(Display Login Window)设置为“用户名和密码”(Name and Password),并禁用密码提示(Password Hints)。

3.7 登录导语(可选)

可以设置登录导语(Login Banner),从而在登录时显示包含策略的信息。

sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText “text”

3.8 访客帐户(重要)

应该始终禁用访客帐户的所有内容,并且停用访客账户。

在“系统偏好设置”中,选择“用户和组”,确保已经禁用访客账户(Guest Users)。

3.9 限制Sudoers文件(重要)

要限制宽限期(Grace Period)并限制为单个ttys,应使用visudo命令,编辑/etc/sudoers,添加以下内容:

Defaults timestamp_timeout=0
Defaults tty_tickets

3.10 自动锁定登录钥匙串(可选)

打开钥匙串访问(Keychain Access),选择登录钥匙串。选择“编辑”(Edit),更改钥匙串设置“登录”。将“不活动[…]分钟后锁定”(Lock after […] minutes)的数值设置为10。勾选“睡眠时锁定”(Lock when sleeping)选项。

注意:自动锁定钥匙串将会影响用户体验,每个锁定守护进程(例如:Wi-Fi服务)都需要解锁。因此,Wi-Fi环境下的自动夜间备份将会受到影响。

四、通用配置

4.1 修复当前系统漏洞(重要)

在执行本指南中的加固措施之前,强烈建议先将当前系统升级到最新且已经安装补丁的状态。可以通过“Apple菜单” – “App Store” – “升级”(Updates)来检查当前系统的更新情况。

或者,也可以在命令行中输入以下命令:

$ softwareupdate -l

4.2 自动更新(重要)

建议始终启用自动更新,以自动向系统提供最新的安全修复程序。可以通过以下命令检查是否启用此设置:

$ defaults read /Library/Preferences/com.apple.SoftwareUpdate AutomaticallyInstallMacOSUpdates
1

如果启用了自动更新,则返回值应该为1,如上面输出所示。如果该设置不存在,可以通过以下命令来手动设置:

sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate AutomaticallyInstallMacOSUpdates -int 1

4.3 Gatekeeper(重要)

Gatekeeper将检查应用程序是否使用有效的Apple证书进行签名。通过以下方式来检查应用程序是否具有签名:

spctl –a /Applications/test.app

如果要将其添加到Gatekeeper,可以使用如下命令:

spctl --add test.app

或者直接执行下面的操作:

右键单击,选择“打开”。

注意:在一些情况下,系统可能仍然会拒绝打开应用程序。这时,我们可以强行启动:

点击“系统偏好设置”,选择“安全和隐私”(Security & Privacy),选择“常规”(General)。然后打开应用程序。

4.4 执行代码签名机制(重要)

可以编辑/etc/sysctl.conf,在其中添加以下行:

vm.cs_force_kill=1  # Kill process if invalidated
vm.cs_force_hard=1  # Fail operation if invalidated
vm.cs_all_vnodes=1  # Apply on all Vnodes
vm.cs_enforcement=1 # Globally apply code signing enforcement

注意:此项更改需要禁用系统完整性保护,在加固后请手动启用。在新安装的系统上,sysctl.conf可能不存在,管理员可以创建该文件并重新启动系统。

4.5 禁用元数据文件创建(重要)

建议禁止在macOS在远程卷(例如:网络存储、USB存储)上创建临时文件。下面的命令可以阻止此类行为:

defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true

4.6 禁用保存到iCloud(重要)

以下命令可以阻止macOS将文件直接保存到任何iCloud服务器:

sudo defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false

4.7 禁用诊断(重要)

要避免向Apple或App Developers发送数据,请禁用以下内容:

在“系统偏好设置”中,选择“安全和隐私”,选择“隐私”(Privacy),选择“诊断和使用”(Diagnostics & Usage)。取消选中“向Apple发送诊断和使用数据”(Send diagnostic & usage data to Apple),取消选中“与应用开发者共享崩溃数据”(Share crash data with app developers)。

4.8 禁用Handoff(重要)

Apple Handoff是一项保持工作区同步的功能,但该功能需要向Apple发送数据,建议禁用这一功能。

在“系统首选项”(System Preferences)中,选择“常规”(General),取消选中“允许在此Mac和iCloud设备之间切换”(Allow Handoff between this Mac and your iCloud devices),并将“最近项目”设置为“无”(None)。

4.9 FileVault(重要)

建议启动FileVault,以在设备上启用完整磁盘加密。该功能应该已经默认启用。但是,在安装macOS之后再打开FileVault会更加安全,因为此时的伪随机数生成器会具有更加随机的种子。

点击“系统偏好设置” – “安全和隐私” – “FileVault”,选择“启用FileVault”。

*可选设置:

如果要在休眠时,从内存中删除加密密钥,并从内存中断电,可以使用以下命令:

sudo pmset -a destroyfvkeyonstandby 1 hibernatemode 25

注意:这项操作可能会对用户体验产生影响,因为必须要在每次合盖/开盖后解密磁盘。因此,启动过程最多可能需要10秒钟时间。我们建议对安全性要求较高的计算机设置此选项,其首选设置如下:

sudo pmset -a powernap 0
sudo pmset -a standby 0
sudo pmset -a standbydelay 0
sudo pmset -a autopoweroff 0

4.10 防火墙(重要)

建议启用具有完整功能的防火墙,并阻止所有传入流量。

点击“系统偏好设置” – “安全和隐私” – “防火墙”,点击“打开防火墙”(Turn on Firewall)。选择“防火墙选项”(Firewall Options),设置“阻止所有传入连接”(Block All Incoming Connections),设置“启用隐身模式”(Enable Stealth Mode)。

4.11 需要管理员密码(重要)

建议始终要求在验证管理员密码后才能访问系统设置。

4.12 屏幕保护程序和解锁(重要)

建议在不活动时,自动锁定屏幕。

点击“系统偏好设置” – “桌面和屏幕保护程序”(Desktop & Screensaver) – “屏幕保护程序”(Screensaver)。根据需要调整时间范围,我们建议将其设置为5分钟。

点击“系统偏好设置” – “安全和隐私” – “常规”,设置“睡眠或屏幕保护程序开始后立即需要密码”(Require password immediately after sleep or screen saver begins)。

4.13 文件扩展名(重要)

要始终掌握用户正在处理的文件类型,建议开启显示文件扩展名。

打开“访达”(Finder),选择“设置”(Settings) – “高级”(Advanced),选择“显示所有文件扩展名”(Show all filename extensions)。

4.14 阻止Safari打开已知类型文件(重要)

如果用户使用Safari作为主要的浏览器,建议阻止Safari在下载文件后打开已知文件类型的文件。

打开Safari,选择“首选项”(Preferences),选择“常规”(General),取消“下载后打开安全文件”(Open safe files after downloading)。

4.15 设置严格的全局Umask(可选)

严格限制全局Umask默认使用用户将来创建的任何文件或目录的权限。我们可以使用以下命令来调整全局Umask:

sudo launchctl config system umask 027

注意:这可能会破坏依赖于较少限制的umask的其他软件安装。

4.16 禁用远程Apple事件(重要)

建议禁用远程Apple事件服务(默认禁用)。该服务可用于通过网络对另一台Mac上的软件执行操作。因此,它应该始终被禁用。下面的命令可以检查是否启用了远程Apple事件:

sudo systemsetup –getremoteappleevents

应确保输出为:

Remote Apple Events: Off

如果启用,那么可以使用以下命令来禁用:

sudo systemsetup -setremoteappleevents off

五、特定配置

5.1 禁用蓝牙(可选)

由于此前存在一些针对蓝牙配对和身份检测的攻击方法,因此建议在不需要使用蓝牙时禁用蓝牙。

点击“系统偏好设置” – “蓝牙”(Bluetooth),选择“停用蓝牙”(Deactivate Bluetooth)。

注意:取消激活蓝牙,将会断开蓝牙键盘、蓝牙鼠标或蓝牙耳机等外接设备。

5.2 固件密码(重要)

要防止单用户模式(Single User Mode)和可引导设备,建议设置足够复杂的固件密码。

在Mac启动时,按下Command + R,将Mac启动到恢复模式(Recovery Mode)。选择“实用程序”(Utilities) – “固件密码实用程序”(Firmware Password Utility),然后设置一个足够复杂的密码。

注意:忘记此密码,可能会导致Mac完全不可用,并阻止计算机起动因此,存储该密码的密码管理器是一个有效的解决方案。此外,无论MacBook的实际键盘布局如何,当尝试访问固件安全组件时,将始终映射英语的默认设置。

5.3 Setuid和Setgid(可选)

改变二进制文件的Setuid位,是比较重要的一个设置。这可能会影响这些二进制文件的功能,但管理员始终可以撤销这些步骤。使用以下命令,可以获取所有SUID二进制文件的列表:

sudo find / -perm -04000 -ls
sudo find / -perm -02000 –ls

在这里,过滤掉我们认为“代码质量较差”或通常不信任的应用程序(例如:鼠标外接设备驱动程序)。以下命令可以取消设置文件和目录的描述权限:

chmod u-s #file
chmod g-s #file

5.4 禁用核心转储(重要)

要限制内核信息泄露,请禁用核心转储功能。可以编辑/etc/sysctl.conf中的以下行:

kern.coredump=0

注意:此项更改需要禁用系统完整性保护,在加固后请手动启用。在新安装的系统上,sysctl.conf可能不存在,管理员可以创建该文件并重新启动系统。

由于Kerneldumps可以帮助进行调试,因此可以暂时启用:

sudo sysctl -w kern.coredump=1

5.5 禁用USB/蓝牙和其他大容量存储设备(可选)

在某些情况下,需要禁用将任何大容量存储插入系统。这一点可以通过删除KEXT驱动程序或使用企业级MDM工具来实现。

要完全禁用USB大容量存储设备,可以删除/System/Library/Extensions中的KEXT驱动程序IOUSBMassStorageClass.kext(必须禁用SIP)。也可以通过删除前面所提到的文件夹中的IOBlueToothFamily来完全禁用蓝牙。删除KEXT驱动程序后,需要在目录上执行以下命令,以重建kernelcache:

touch /System/Library/Extensions

注意:由于无法插入大容量存储设备,可能会影响MacBook的可用性。但是,USB键盘仍然有效。

此外,一些商业软件(例如:https://www.endpointprotector.com/products/endpoint-protector)可以执行类似的端口阻止,但我们还没有对其进行过任何测试。

六、网络和通信安全

6.1 高级防火墙(可选)

建议管理员更加准确地监控应用了就溜。软件防火墙可以为不同位置和不同网络生成自己的规则集。我们推荐一个更高级的防火墙,例如“Little Snitch”、“Radio Silence”和“Handoff”,这些都是完全成熟的本地防火墙(收费)。如果管理员希望使用免费的防火墙,可以查看精简版的“Murus”。

· https://www.obdev.at/products/littlesnitch/index-de.html

· https://www.oneperiodic.com/products/handsoff/

· https://radiosilenceapp.com/

· http://www.murusfirewall.com/

6.2 禁用LAN唤醒(重要)

选择“系统偏好设置” – “节能”(Energy Saver),取消“网络访问唤醒”(Wake for network access)。

6.3 禁用Apple文件协议AFP(重要)

这一协议相当于SMB协议,在macOS 10.11上默认被禁用。管理员可以在以下位置进行验证:

选择“系统偏好设置” – “共享”(Sharing),选择“文件共享”(File Sharing) – “选项”(Options),取消设置“使用AFP共享文件和文件夹”(Share Files and folders using AFP)。

注意:也可以通过命令行实现禁用:

sudo launchctl unload -w /System/Library/LaunchAgents/AppleFileServer.plist

6.4 禁用不必要的服务(可选)

管理员可以使用以下命令,禁用不必要的服务:

sudo launchctl unload -w /System/Library/LaunchAgents/<Service

注意:这可能会破坏系统的原有功能。要重新加载这些服务,只需将上述命令中的“unload”替换为“load”。

我们在本文的最后,补充了一个可能是不必要服务的清单。

更多服务(Plistfiles)可以在以下目录中找到:

/System/Library/LaunchDaemons
/System/Library/LaunchAgents
/Library/LaunchDaemons
/Library/LaunchAgents
/Users//Library/LaunchDaemons
/Users//Library/LaunchAgents

6.5 禁用共享(重要)

默认情况下,会禁用共享。管理员可以在这里进行验证:

点击“系统偏好设置” – “共享”,取消其中所有不需要的选项。

6.6 通过NTP启用网络时间同步(重要)

系统时钟对于日志文件来说非常重要。要确保时钟始终正确,并且未被损坏,可以使用以下命令:

sudo systemsetup -setnetworktimeserver "time.euro.apple.com"
sudo systemsetup -setusingnetworktime on
echo "restrict default ignore" >> /etc/ntp.conf

七、隐私

7.1 计算机名/主机名(重要)

建议平布主机名称,因为其中包含用户名和当前操作系统信息(MacBook → Mac OS)。因此,可以使用以下命令来更改通过网络显示的名称:

sudo scutil --set ComputerName ExampleName
sudo scutil --set LocalHostName ExampleName

7.2 限制广告追踪(重要)

要限制设备的追踪,请禁用以下内容:

点击“系统偏好设置” – “安全和隐私” – “隐私” – “广告”(Advertising),选中“限制广告追踪”(Limit Ad Tracking)。

7.3 追踪服务(重要)

建议禁用追踪服务。如果用户决定使用追踪服务,则可以仅禁用Spotlight建议。

点击“系统偏好设置” – “安全和隐私” – “隐私” – “位置服务”(Location Services),选择“系统服务”(System Services) – 详细信息(Details),取消选中“Spotlight建议”(Spotlight Suggestions)。

附录:建议禁用的服务清单

下面列出了服务文件以及建议禁用的相应功能。如果没有特殊需要,不建议启用下面的服务。

com.apple.AppleFileServer.plist  AFP
ftp.plist  FTP
org.apache.httpd.plist  HTTP Server
epcc.plist       Remote Apple Events
com.apple.xgridagentd.plist       Xgrid
com.apple.xgridcontrollerd.plist        Xgrid
com.apple.InternetSharing.plist  Iternet Sharing
com.apple.dashboard.advisory.fetch.plist  Dashboard Auto-Update
com.apple.UserNotificationCenter.plist     User notifications
com.apple.RemoteDesktop.PrivilegeProxy.plist       ARD
com.apple.RemoteDesktop.plist        ARD
com.apple.IIDCAssistant.plist      iSight
com.apple.blued.plist   Bluetooth
com.apple.RemoteUI.plist   Remote Control
com.apple.gamed.plist        Game Center
本文翻译自:https://github.com/ernw/hardening/blob/master/operating_system/osx/10.14/ERNW_Hardening_OS_X_Mojave.md如若转载,请注明原文地址: http://www.4hou.com/system/15780.html
源链接

Hacking more

...