本指南收集了一系列技术,用于提高运行当前支持的 macOS 版本的 Apple 芯片 Mac 计算机的安全性和隐私性。使用配备 Intel CPU 的 Mac 会让您面临 Apple 无法修补的硬件级别的安全漏洞。 Apple 芯片 Mac 是最低推荐,但一般来说,更新的芯片总是更安全。
本指南面向希望采用企业标准安全性的高级用户,但也适合有兴趣提高 Mac 隐私和安全性的新手用户。
如果您要保护组织的计算机,请使用适用于 macOS 的官方 NIST 指南。
系统的安全性取决于其管理员的能力。没有任何一种单一的技术、软件或技术能够保证完美的计算机安全;现代操作系统和计算机非常复杂,需要进行大量渐进式更改才能有意义地改善安全和隐私状况。
本指南按“原样”提供,不提供任何形式的保证。如果您按照本指南破坏了任何东西或遇到任何麻烦,只有您自己负责。
要提出改进建议,请发送拉取请求或提出问题。
一般安全最佳实践适用:
创建威胁模型
保持系统和软件最新
softwareupdate
命令行实用程序 - 两者都不需要注册 Apple 帐户。加密敏感数据
确保数据可用性
仔细点击
安全和隐私的第一步也是最重要的一步是创建威胁模型。你需要了解你的对手才能防御他们。每个人都有自己的需求,因此每个人的威胁模型都会不同。随着情况的变化,威胁模型往往会随着时间的推移而演变,因此请务必定期重新评估您的威胁模型。
这可能包括很多东西:您的手机、笔记本电脑、设备上存储的密码、互联网浏览历史记录等。从要保护的最重要的资产开始列出一个列表。您可以根据它们的重要性将它们分类:公开、敏感或秘密。
定义你要防御的对象。首先定义他们攻击您的资产的动机。例如,经济利益是许多攻击者的一大动机。
为了对抗你的对手,你需要了解他们能做什么和不能做什么。将对手从完全不复杂到非常先进进行排名。比如说,一个普通的小偷,他的手段并不高明;他们可能会被一些基本的东西阻止,比如在你的设备上设置密码和驱动器加密。像国家行为者这样的非常高级的对手可能需要在不使用时完全关闭您的设备,以清除 RAM 中的密钥和长骰子软件密码。
现在是您决定应对每种威胁的最佳方法的时候了。您可能会避免将密码写在纸上,这样您的室友就找不到它们,或者您可以对计算机上的驱动器进行加密,这样小偷就无法从中获取数据。平衡安全性和可用性很重要;每一种缓解措施都应该对抗对手的某些能力,否则你可能会给自己的生活带来不便,但几乎没有任何好处。如果您想不出对手可能拥有的更多功能,并且您已经对所有这些功能实施了缓解措施,那么您的工作就完成了。
以下是您应该为要保护的每项资产创建的表类型的示例:
对手 | 动机 | 能力 | 减轻 |
---|---|---|---|
室友 | 查看私人聊天或浏览历史记录 | 距离很近;可以看到屏幕或观看输入密码 | 使用生物识别技术、使用隐私屏幕、不使用手机时将其锁定 |
贼 | 解锁手机并窃取个人信息并耗尽银行账户,出售手机以换取金钱 | 通过浏览查看密码,在登录时不查看时窃取设备 | 始终将手机放在视线范围内或在人身边,不使用时保持锁定状态,使用生物识别技术避免在公共场合输入密码,使用“查找我的”或类似服务来跟踪/远程禁用被盗设备 |
刑事 | 金融的 | 社会工程、容易获得的恶意软件、密码重用、利用漏洞 | 使用沙箱,启用操作系统中的安全功能,保持操作系统和所有软件更新并打开自动更新 |
公司 | 用户数据营销 | 遥测和行为数据收集 | 阻止网络连接、重置唯一标识符、避免添加支付数据 |
民族国家/APT | 有针对性的监视 | 互联网基础设施的被动监控,用于破解数据包加密/分析的先进计算机 | 使用开源 e2ee、对设备使用强骰子软件密码、使用具有安全元件的硬件进行安全加密、在不使用设备时关闭设备、软件 tripwire/honeypot/canary 令牌 |
在此处阅读有关威胁建模的更多信息。
macOS 在采用 Apple 芯片的 Apple 硬件上运行最为安全。 Mac 越新越好。避免黑客攻击和不支持最新 macOS 的 Mac,因为 Apple 不会修补非最新版本中的所有漏洞。
当您购买 Mac 时,您可能希望避免将其链接回您。根据您的威胁模型,您应该亲自以现金支付,而不是在线订购或使用信用卡/借记卡购买,这样就不会将任何识别信息链接到您的购买。
如果您想使用无线键盘、鼠标、耳机或其他配件,最安全的选择是 Apple 的,因为它们会由您的系统自动更新。它们还支持最新的蓝牙功能,例如 BLE Privacy,它可以随机化您的蓝牙硬件地址以防止跟踪。对于第三方配件,这并不能保证。
安装 macOS 有多种方法。从可用选项中选择您喜欢的方法。
您应该安装与您的 Mac 兼容的最新版本的 macOS 。较新的版本具有旧版本所缺乏的安全补丁和其他改进。
作为 Apple 防盗系统的一部分,每次重新安装 macOS 时,Apple 芯片 Mac 都需要通过 Apple 服务器进行激活,以检查被盗或激活锁定 Mac 的数据库。
您可以在此处详细了解此过程的工作原理。
使用 macOS 不需要创建 Apple 帐户。创建Apple帐户需要一个电话号码,并且默认情况下它会将大量数据同步到Apple的云存储服务iCloud。如果您想要或为 iCloud 数据启用端到端加密,您可以稍后禁用同步。
您可以控制与您的 Apple 帐户关联的数据或将其完全删除。
需要 Apple 帐户才能访问 App Store 并使用大多数 Apple 服务,如 iCloud、Apple Music 等。
Mac App Store 是一个精选的软件存储库,需要使用应用程序沙箱和强化运行时,并提供与您的系统集成的自动更新。
App Store 为 macOS 上的软件提供了最大的安全保证,但它要求您使用 Apple 帐户登录,Apple 将能够将您的 Apple 帐户链接到您下载的应用程序。
您可以使用 UTM 在虚拟机中轻松本地运行 macOS。它在他们的网站上是免费的,但如果您从 App Store 购买它,您将获得自动更新。
按照他们的文档,只需点击几下即可安装 macOS VM。
另一个选择是 VMware Fusion。您可以阅读他们的文档以了解如何安装 macOS VM。
当 macOS 首次启动时,您将看到设置助手。
创建第一个帐户时,请在没有提示的情况下使用强密码。
如果您在帐户设置过程中输入您的真实姓名,请注意您的计算机名称和本地主机名将包含该名称(例如John Appleseed 的 MacBook ),因此将出现在本地网络和各种首选项文件中。
两者都应根据需要在“系统设置”>“关于”中进行验证和更新,或者在安装后使用以下命令进行验证和更新:
sudo scutil --set ComputerName MacBook
sudo scutil --set LocalHostName MacBook
第一个用户帐户始终是管理员帐户。管理员帐户是 admin 组的成员,可以访问sudo
,这允许他们篡夺其他帐户,特别是 root,并赋予他们对系统的有效控制权。管理员执行的任何程序都可能获得相同的访问权限,从而构成安全风险。
sudo
等实用程序存在一些弱点,可以被同时运行的程序利用。
Apple 认为最佳做法是使用单独的标准帐户进行日常工作,并使用管理员帐户进行安装和系统配置。
并不严格要求必须通过 macOS 登录屏幕登录管理员帐户。当终端命令需要管理员权限时,系统将提示进行身份验证,然后终端继续使用这些权限。为此,Apple 提供了一些隐藏管理员帐户及其主目录的建议。这可能是一个优雅的解决方案,可以避免出现可见的“幽灵”帐户。
/Applications
(本地目录)中安装应用程序。 Finder 和安装程序将通过身份验证对话框提示标准用户。许多应用程序可以安装在~/Applications
中(可以创建该目录)。根据经验:不需要管理员访问权限或不会抱怨未安装在/Applications
中的应用程序应安装在用户目录中,其余应用程序应安装在本地目录中。 Mac App Store 应用程序仍安装在/Applications
中,不需要额外的身份验证。sudo
在标准用户的 shell 中不可用,需要使用su
或login
进入管理员帐户的 shell。这可能会使一些操作变得更加棘手,并且需要一些命令行界面的基本经验。open
实用程序来执行。可以在系统偏好设置中创建和管理帐户。在固定系统上,创建第二个管理员帐户然后降级第一个帐户通常更容易。这避免了数据迁移。新安装的系统也可以只添加一个标准帐户。
降级帐户可以通过系统偏好设置中的新管理员帐户(另一个帐户必须注销)或通过执行这些命令来完成(可能不需要同时执行这两个命令,请参阅问题 179):
sudo dscl . -delete /Groups/admin GroupMembership <username>
sudo dscl . -delete /Groups/admin GroupMembers <GeneratedUID>
要查找帐户的GenerateUID :
dscl . -read /Users/<username> GeneratedUID
另请参阅这篇文章,了解有关 macOS 如何确定组成员身份的更多信息。
您应该检查固件安全设置是否设置为完全安全,以防止篡改您的操作系统。这是默认设置。
所有采用 Apple 芯片的 Mac 型号均默认加密。启用 FileVault 后,您需要输入密码才能访问驱动器上的数据。 EFF 有一份关于生成强密码的指南。
您的 FileVault 密码还充当固件密码,可防止不知道密码的人从指定启动磁盘以外的任何设备启动、访问恢复以及使用 DFU 模式恢复它。
FileVault 会要求您设置恢复密钥,以防您忘记密码。将此密钥存放在安全的地方。您可以选择使用您的 iCloud 帐户来解锁您的磁盘;但是,任何有权访问您的 iCloud 帐户的人都可以解锁它。
macOS 提供锁定模式,这是一种安全功能,可禁用整个操作系统的多项功能,从而显着减少攻击者的攻击面,同时保持操作系统可用。您可以详细了解禁用的内容,并自行决定您是否可以接受。
锁定模式打开后,您可以在受信任站点上的 Safari 中针对每个站点禁用它。
有多种类型的防火墙可用于 macOS。
内置的基本防火墙仅阻止传入连接。此防火墙无法监视或阻止传出连接。
可以通过“系统设置”中“网络”的“防火墙”选项卡进行控制,或者使用以下命令。
启用具有日志记录和隐身模式的防火墙:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setloggingmode on
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
计算机黑客扫描网络,以便尝试识别要攻击的计算机。您可以使用隐秘模式来阻止计算机响应其中一些扫描。启用隐身模式后,您的计算机不会响应 ICMP ping 请求,也不会响应来自关闭的 TCP 或 UDP 端口的连接尝试。这使得攻击者更难找到您的计算机。
为了防止内置软件以及代码签名、下载的软件自动列入白名单:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsigned off
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsignedapp off
由有效证书颁发机构签名的应用程序会自动添加到允许的应用程序列表中,而不是提示用户对其进行授权。 macOS 中包含的应用程序由 Apple 签名,并且在启用此设置时允许接收传入连接。例如,由于 iTunes 已经经过 Apple 签名,因此会自动允许它通过防火墙接收传入连接。
如果您运行未在防火墙列表中列出的未签名应用程序,则会出现一个对话框,其中包含允许或拒绝该应用程序的连接选项。如果您选择“允许”,macOS 会对应用程序进行签名并自动将其添加到防火墙列表中。如果您选择“拒绝”,macOS 会将其添加到列表中,但会拒绝用于此应用程序的传入连接。
与socketfilterfw
交互后,通过发送线路挂断信号来重新启动进程:
sudo pkill -HUP socketfilterfw
Little Snitch、Radio Silence 和 LuLu 等程序在可用性和安全性之间实现了良好的平衡。
这些程序能够监视和阻止传入和传出的网络连接。但是,它们可能需要使用闭源系统扩展。
如果允许/阻止网络连接的选择数量过多,请在允许连接的情况下使用静默模式,然后定期检查配置以了解应用程序及其正在执行的操作。
值得注意的是,这些防火墙可以被以root身份运行的程序或通过操作系统漏洞 (pdf) 绕过,但它们仍然值得拥有 - 只是不要指望绝对的保护。然而,如果安装了 Little Snitch 或其他安全软件,某些恶意软件实际上会自行删除并且不会执行。
内核中存在高度可定制、功能强大但也是最复杂的防火墙。可以用pfctl
和各种配置文件来控制。
pf 也可以通过 GUI 应用程序(例如 Murus)进行控制。
有很多关于 pf 防火墙主题的书籍和文章。这只是通过 IP 地址阻止流量的一个示例。
将以下内容添加到名为pf.rules
的文件中:
wifi = "en0"
ether = "en7"
set block-policy drop
set fingerprints "/etc/pf.os"
set ruleset-optimization basic
set skip on lo0
scrub in all no-df
table <blocklist> persist
block in log
block in log quick from no-route to any
block log on $wifi from { <blocklist> } to any
block log on $wifi from any to { <blocklist> }
antispoof quick for { $wifi $ether }
pass out proto tcp from { $wifi $ether } to any keep state
pass out proto udp from { $wifi $ether } to any keep state
pass out proto icmp from $wifi to any keep state
然后使用以下命令来操作防火墙:
sudo pfctl -e -f pf.rules
启用防火墙并加载配置sudo pfctl -d
禁用防火墙sudo pfctl -t blocklist -T add 1.2.3.4
将 IP 地址添加到阻止列表sudo pfctl -t blocklist -T show
查看阻止列表sudo ifconfig pflog0 create
用于日志记录的接口sudo tcpdump -ni pflog0
查看过滤后的数据包除非您已经熟悉数据包过滤,否则不建议花费太多时间配置 pf。如果您的 Mac 位于私人家庭网络上的 NAT 之后,也可能没有必要。
可以使用 pf 防火墙阻止对整个网络地址范围的网络访问,例如对整个组织的网络访问:
查询 Merit RADb 以获取自治系统(例如 Facebook)正在使用的网络列表:
whois -h whois.radb.net '!gAS32934'
将返回的网络列表复制并粘贴到 blocklist 命令中:
sudo pfctl -t blocklist -T add 31.13.24.0/21 31.13.64.0/24 157.240.0.0/16
确认地址已添加:
$ sudo pfctl -t blocklist -T show
No ALTQ support in kernel
ALTQ related functions disabled
31.13.24.0/21
31.13.64.0/24
157.240.0.0/16
确认这些地址的网络流量被阻止(DNS 请求仍然有效):
$ dig a +short facebook.com
157.240.2.35
$ curl --connect-timeout 5 -I http://facebook.com/
* Trying 157.240.2.35...
* TCP_NODELAY set
* Connection timed out after 5002 milliseconds
* Closing connection 0
curl: (28) Connection timed out after 5002 milliseconds
$ sudo tcpdump -tqni pflog0 ' host 157.240.2.35 '
IP 192.168.1.1.62771 > 157.240.2.35.80: tcp 0
IP 192.168.1.1.62771 > 157.240.2.35.80: tcp 0
IP 192.168.1.1.62771 > 157.240.2.35.80: tcp 0
IP 192.168.1.1.62771 > 157.240.2.35.80: tcp 0
IP 192.168.1.1.162771 > 157.240.2.35.80: tcp 0
传出的 TCP SYN 数据包被阻止,因此无法建立 TCP 连接,从而在 IP 层有效地阻止网站。
请参阅 drduh/config/scripts/pf-blocklist.sh 以获取更多灵感。
macOS 上的服务由launchd管理。请参阅 launchd.info。
您可以在系统设置中管理和查看有关登录时运行的软件的更多信息。您还可以在系统设置中查看已安装的系统、快速查看、Finder 和其他扩展。
launchctl list
查看正在运行的用户代理sudo launchctl list
查看正在运行的系统守护进程launchctl list com.apple.Maps.mapspushd
defaults read
来检查/System/Library/LaunchDaemons
和/System/Library/LaunchAgents
中的作业 plistman
和strings
来了解有关代理/守护进程的更多信息例如,要了解系统启动守护进程或代理的作用,请从以下内容开始:
defaults read /System/Library/LaunchDaemons/com.apple.apsd.plist
查看Program
或ProgramArguments
部分以查看运行的是哪个二进制文件,在本例中apsd
。要查找更多相关信息,请查看man apsd
的手册页
注意系统服务受 SIP 保护,不要只是为了修补系统服务而禁用 SIP,因为 SIP 是 macOS 安全性不可或缺的一部分。禁用系统服务可能会导致损坏和不稳定的行为!
查看服务状态:
find /var/db/com.apple.xpc.launchd/ -type f -print -exec defaults read {} ; 2>/dev/null
此存储库中包含启动守护程序和代理的注释列表、执行的相应程序以及程序的哈希和。
阅读有关 launchd 的更多信息以及在 Apple 网站上可以找到登录项的信息。
Apple 正在转向对许多 Siri 功能进行设备上处理,但当您使用 Siri 建议或 Spotlight 时,某些信息仍会发送给 Apple。您可以阅读 Apple 的隐私政策,准确了解发送的内容以及如何禁用它。
如果您的程序无法通过 App Store 获取,您可以考虑使用 Homebrew。
重要的! Homebrew 要求您授予终端“应用程序管理”(或“完全磁盘访问”)权限。这是一个坏主意,因为它会让您再次容易受到这些攻击:任何非沙盒应用程序都可以通过向(例如)~/.zshrc 添加恶意命令来使用终端的 TCC 权限执行代码。向您的终端授予“应用程序管理”或“完整磁盘访问权限”应被视为与完全禁用 TCC 相同。
请记住定期在受信任且安全的网络上运行brew upgrade
来下载和安装软件更新。要在安装前获取有关软件包的信息,请运行brew info <package>
并在线检查其公式。您可能还希望启用其他安全选项,例如HOMEBREW_NO_INSECURE_REDIRECT=1
根据 Homebrew 的匿名分析,Homebrew 收集匿名分析并将这些分析报告给自托管的 InfluxDB 实例。要选择退出 Homebrew 的分析,您可以在环境或 shell rc 文件中设置export HOMEBREW_NO_ANALYTICS=1
,或者使用brew analytics off
macOS 11 引入了“DNS 配置文件”来配置加密 DNS、过滤域和使用 DNSSEC。
DNS 配置文件可以从 Quad9、AdGuard 和 NextDNS 等提供商处创建或获取。
使用主机文件阻止已知的恶意软件、广告或其他不需要的域。
以 root 身份编辑主机文件,例如使用sudo vi /etc/hosts
要通过A
记录阻止域,请将以下任意一行附加到/etc/hosts
:
0 example.com
0.0.0.0 example.com
127.0.0.1 example.com
注意IPv6 使用AAAA
DNS 记录类型,而不是A
记录类型,因此您可能还希望通过包含::1 example.com
条目来阻止这些连接,如此处所示。
在线有许多可用的域列表,您可以粘贴到其中,只需确保每行以0
、 0.0.0.0
、 127.0.0.1
开头,并且包含127.0.0.1 localhost
行。
以下是一些流行且有用的主机列表:
使用tee
附加主机列表:
curl https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | sudo tee -a /etc/hosts
如果您使用像 Little Snitch 这样的防火墙,则可以使用 StevenBlack/hosts 从 leohidalgo/little-snitch---rule-groups 存储库导入规则,这些规则每 12 小时从 StevenBlack/hosts 存储库更新一次。
要加密 DNS 流量,请考虑使用 DNSCrypt/dnscrypt-proxy。与dnsmasq和DNSSEC结合使用,可以显着提高DNS流量的完整性。
从 Homebrew 安装 DNSCrypt 并按照说明配置和启动dnscrypt-proxy
:
brew install dnscrypt-proxy
如果与 Dnsmasq 结合使用,请通过运行找到文件homebrew.mxcl.dnscrypt-proxy.plist
brew info dnscrypt-proxy
这将显示类似/usr/local/etc/dnscrypt-proxy.toml
的位置
在文本编辑器中打开它,找到以listen_addresses =
开头的行并编辑该行以在 53 以外的端口(例如 5355)上使用 DNScrypt:
listen_addresses = ['127.0.0.1:5355', '[::1]:5355']
启动 DNSCrypt:
sudo brew services restart dnscrypt-proxy
确认 DNSCrypt 正在运行:
$ sudo lsof +c 15 -Pni UDP:5355
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dnscrypt-proxy 15244 nobody 7u IPv4 0x1337f85ff9f8beef 0t0 UDP 127.0.0.1:5355
dnscrypt-proxy 15244 nobody 10u IPv6 0x1337f85ff9f8beef 0t0 UDP [::1]:5355
dnscrypt-proxy 15244 nobody 12u IPv4 0x1337f85ff9f8beef 0t0 UDP 127.0.0.1:5355
dnscrypt-proxy 15244 nobody 14u IPv6 0x1337f85ff9f8beef 0t0 UDP [::1]:5355
默认情况下,dnscrypt-proxy 在本地主机 (127.0.0.1)、端口 53 上运行,平衡一组解析器之间的流量。如果您想更改这些设置,则必须编辑配置文件:$HOMEBREW_PREFIX/etc/dnscrypt-proxy.toml
注意应用程序和程序可以使用自己提供的服务器解析 DNS。如果使用 dnscrypt-proxy,则可以使用以下 pf 规则禁用所有其他非 dnscrypt DNS 流量:
block drop quick on ! lo0 proto udp from any to any port = 53
block drop quick on ! lo0 proto tcp from any to any port = 53
另请参阅什么是 DNS 泄漏和 ipv6-test.com
除其他功能外,dnsmasq 还能够缓存回复、防止对不合格名称的上游查询以及阻止整个顶级域。
与 DNSCrypt 结合使用以额外加密 DNS 流量。
如果您不想使用 DNSCrypt,您至少应该使用非 ISP 提供的 DNS。两种流行的替代方案是 Google DNS 和 OpenDNS。
可选的DNSSEC 是一组 DNS 扩展,它向 DNS 客户端(解析器)提供 DNS 数据的原始身份验证、经过身份验证的拒绝存在和数据完整性。来自 DNSSEC 保护区的所有答案都经过数字签名。签名记录通过信任链进行身份验证,从 DNS 根区域的一组经过验证的公钥开始。当前的根区域信任锚可以从 IANA 网站下载。 DNSSEC 上有很多资源,但最好的资源可能是 dnssec.net 网站。
安装 Dnsmasq:
brew install dnsmasq --with-dnssec
下载并编辑 drduh/config/dnsmasq.conf 或默认配置文件。
有关按域阻止服务的附加示例,请参阅 drduh/config/domains。
安装并启动程序(需要 sudo 绑定特权端口 53):
sudo brew services start dnsmasq
要将 dnsmasq 设置为本地 DNS 服务器,请打开系统偏好设置>网络并选择活动接口,然后在DNS选项卡中选择+并添加127.0.0.1
,或使用:
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
确认 Dnsmasq 已配置:
$ scutil --dns | head
DNS configuration
resolver #1
search domain[0] : whatever
nameserver[0] : 127.0.0.1
flags : Request A records, Request AAAA records
reach : 0x00030002 (Reachable,Local Address,Directly Reachable Address)
$ networksetup -getdnsservers " Wi-Fi "
127.0.0.1
注意某些 VPN 软件会覆盖连接时的 DNS 设置。请参阅第 24 期和 drduh/config/scripts/macos-dns.sh。
可选测试签名区域的 DNSSEC 验证 - 回复应具有NOERROR
状态并包含ad
标志:
$ dig +dnssec icann.org | head
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47039
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
对于签名不正确的区域,测试 DNSSEC 验证失败 - 回复应具有SERVFAIL
状态:
$ dig www.dnssec-failed.org | head
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 15190
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
macOS 附带了 100 多个根授权证书,这些证书来自 Apple、Verisign、Thawte、Digicert 等公司以及来自中国、日本、荷兰、美国等国家的政府机构!这些证书颁发机构 (CA) 能够为任何域颁发 TLS 证书、代码签名证书等。当 CA 被证明不可信时,Apple 会阻止这些证书。他们还对受信任的 CA 必须满足严格的要求。
有关详细信息,请参阅 CA/浏览器论坛的网站。
在“系统根”选项卡下的“钥匙串访问”中或使用security
命令行工具和/System/Library/Keychains/SystemRootCertificates.keychain
文件检查系统根证书。
您可以通过“钥匙串访问”手动禁用证书颁发机构,方法是将它们标记为“从不信任”并关闭窗口:
警告:当您使用这些 CA 签名的证书访问网站时,这将导致您的浏览器发出警告,并可能导致其他软件损坏。不要不信任 Apple 根证书,否则会导致 macOS 出现大量损坏!
中间人攻击(系统信任的强制或受损的证书颁发机构颁发虚假/流氓 TLS 证书)的风险相当低,但仍有可能。
考虑使用 Privoxy 作为本地代理来过滤 Web 流量。
使用 Homebrew 安装并启动 privoxy:
brew install privoxy
brew services start privoxy
或者,可以从其网站或 Sourceforge 获取 Privoxy 的签名安装包。签名包比 Homebrew 版本更安全,并得到 Privoxy 项目的支持。
默认情况下,Privoxy 侦听本地 TCP 端口 8118。
为活动网络接口127.0.0.1
和8118
设置系统HTTP代理:
sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 8118
设置系统HTTPS代理:
sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 8118
这也可以通过系统偏好设置 > 网络 > 高级 > 代理来完成
确认代理已设置:
$ scutil --proxy
<dictionary> {
ExceptionsList : <array> {
0 : *.local
1 : 169.254/16
}
FTPPassive : 1
HTTPEnable : 1
HTTPPort : 8118
HTTPProxy : 127.0.0.1
}
尽管当今大多数 Web 流量都是加密的,但 Privoxy 对于按域名模式进行过滤以及升级不安全的 HTTP 请求仍然很有用。
例如,以下规则会阻止除.net
和github.com
以及所有apple
域之外的所有流量:
{ +block{all} }
.
{ -block }
.apple.
.github.com
.net
或者只是阻止 Facebook 域,例如:
{ +block{facebook} }
.facebook*.
.fb.
.fbcdn*.
.fbinfra.
.fbsbx.
.fbsv.
.fburl.
.tfbnw.
.thefacebook.
fb*.akamaihd.net
还支持通配符。
有关其他 Privoxy 示例,请参阅 drduh/config/privoxy/config 和 drduh/config/privoxy/user.action。编辑user.action
过滤规则后无需重新启动 Privoxy。
要验证流量是否被阻止或重定向,请在浏览器中使用 curl 或 http://pp 上提供的 Privoxy 界面:
ALL_PROXY=127.0.0.1:8118 curl example.com -IL | head
HTTP/1.1 403 Request blocked by Privoxy
Content-Length: 9001
Content-Type: text/html
Cache-Control: no-cache
Pragma: no-cache
ALL_PROXY=127.0.0.1:8118 curl github.com -IL | head
HTTP/1.1 302 Local Redirect from Privoxy
Location: https://github.com/
Content-Length: 0
HTTP/1.1 200 Connection established
HTTP/2 200
server: GitHub.com
注意macOS 代理设置不是通用的;应用程序和服务可能不遵循系统代理设置。确保您想要代理的应用程序配置正确,并验证连接不会泄漏。此外, pf可以配置为透明代理某些端口上的流量。
Web 浏览器可能带来最大的安全和隐私风险,因为它的基本工作是从互联网下载和执行不受信任的代码。
现代浏览器的一个重要属性是同源策略 (SOP),它可以防止一个页面上的恶意脚本通过文档对象模型 (DOM) 访问另一个网页上的敏感数据。如果 SOP 受到损害,整个浏览器的安全性就会受到损害。
许多浏览器漏洞利用都是基于社会工程作为获得持久性的手段。始终注意打开不受信任的网站,下载新软件时尤其要小心。
关于浏览器安全性的另一个重要考虑因素是扩展。这是一个影响 Firefox 和 Chrome 的问题。浏览器扩展的使用应仅限于由值得信赖的开发人员发布的至关重要的扩展。
Mozilla Firefox、Google Chrome、Safari 和 Tor 浏览器都是出于其独特和个人目的而推荐的浏览器。
Mozilla Firefox 是一种流行的开源浏览器。 Firefox 在 Quantum 和 Photon 项目下替换了其基础设施和代码库的主要部分。 Quantum 项目的一部分是用 Rust 替换 C++ 代码。 Rust 是一种系统编程语言,专注于安全性和线程安全。预计 Rust 的采用将大大改善 Firefox 的整体安全状况。
Firefox 提供了与 Chrome 类似的安全模型:它有一个错误赏金计划,尽管它的利润不那么高。 Firefox 的发布周期为四个星期。
Firefox 支持用户提供的配置文件。请参阅 drduh/config/firefox.user.js 和 arkenfox/user.js 了解推荐的首选项和强化措施。另请参阅 NoScript,这是一个允许选择性脚本阻止的扩展。
Firefox 注重用户隐私。它支持隐私浏览模式下的跟踪保护。可以为默认帐户启用跟踪保护,尽管这可能会破坏某些网站的浏览体验。处于严格跟踪保护模式的 Firefox 会随机化您的指纹,以挫败基本的跟踪脚本。 Firefox 提供单独的用户配置文件。您可以使用多帐户容器在配置文件内分隔您的浏览。
Firefox 仅通过 Web Extension Api 支持 Web Extensions,这与 Chrome 非常相似。在 Firefox 中提交 Web 扩展是免费的。 Firefox 中的 Web 扩展大多数时候都是开源的,尽管某些 Web 扩展是专有的。
Google Chrome 基于开源 Chromium 项目,具有某些专有组件:
Chrome 提供多个设备之间的帐户同步。部分同步数据包括网站的凭据。数据使用账户密码进行加密。
Chrome的网站用于扩展商店需要5美元的终身费才能提交扩展。低成本允许开发许多优质的开源网络扩展,这些扩展名无法通过使用而获利。
Chrome在全球使用情况下占最大份额,并且是大多数开发人员的首选目标平台。主要技术基于Chrome的开源组件,例如使用Chrome的V8发动机和电子框架的Node.js,该框架基于Chromium and Node.js。 Chrome的庞大用户群使其成为威胁参与者和安全研究人员的最吸引人的目标。尽管持续攻击,Chrome多年来一直保持着令人印象深刻的安全往绩记录。这不是一项小壮举。
Chrome提供单独的配置文件,强大的沙箱,频繁的更新,并带有令人印象深刻的凭证。此外,Google还提供了一个非常有利可图的赏金计划,用于报告漏洞,以及其自己的项目零团队。这意味着,许多高度才华横溢和有动力的人在不断审核和保护Chrome代码。
创建单独的镀铬配置文件,以降低XSS风险并将cookie/Identition分隔化。在每个配置文件中,要么在Chrome设置中禁用JavaScript,并允许启动配置。您还应该禁用使用JavaScript进一步减少攻击表面的站点的V8优化器。转到设置- >隐私和安全性- >安全性- >管理V8安全性- >不允许站点使用V8 Optimizer
在此处阅读有关禁用此问题的好处的更多信息。
您可以用Ublock Origin Lite阻止跟踪器。
将默认搜索引擎从Google更改,以减少其他跟踪。
禁用DNS预取(另请参见DNS预取及其隐私含义(PDF))。请注意,Chrome可能会尝试使用Google的8.8.8.8
和8.8.4.4
公共名称服务器来解决DNS。
阅读铬安全性和铬隐私以获取更多信息。阅读Google的隐私政策,以了解如何收集和使用个人信息。
Safari是MacOS上的默认浏览器。它也是最优化的浏览器,用于减少电池的使用。像Chrome一样,Safari都具有开源和专有组件。 Safari基于开源Web Engine WebKit,该引擎在MacOS生态系统中无处不在。 WebKit由Apple应用程序(例如邮件,iTunes,iBooks和App Store)使用。 Chrome的Blink Engine是Webkit的叉子,两个发动机都具有许多相似之处。
Safari支持某些有益于用户安全和隐私的独特功能。内容阻滞剂可以在不使用JavaScript的情况下创建内容阻止规则。这种基于规则的方法大大改善了内存的使用,安全性和隐私。 Safari 11引入了智能跟踪预防,该预防措施在用户从跟踪器的网站上删除了一段不相互作用的跟踪数据。野生动物园可以随机将指纹随机,以减少跟踪。出于安全和隐私原因,Safari不支持某些功能,例如WebUSB或电池API。野生动物园中的私人标签具有隔离的cookie和缓存,当您关闭标签时会被销毁。 Safari还支持配置文件,相当于Firefox的多门容器,用于分离cookie和浏览。可以通过锁定模式使Safari更加安全,该模式可以禁用。阅读有关Safari中预防预防的更多信息。
Safari提供了一个仅邀请赏金计划,用于向选定数量的安全研究人员报告错误。赏金计划是在Apple在Blackhat 2016上的演讲中宣布的。
除Web扩展API外,Safari中的Web扩展还有一个附加的选择,可以在Safari的沙盒环境中使用本机代码。 Safari中的Web扩展也通过Apple的App Store分发。 App Store提交带有Apple审核Web扩展代码的附加优势。另一方面,App Store提交的成本很高。年度开发人员订阅费用为100美元(与Chrome的5美元费用和Firefox的免费提交相反)。对于大多数开源开发人员而言,高成本高昂。结果,野生动物园几乎没有扩展。但是,安装扩展时,应该牢记高成本。预计大多数Web扩展名将具有某种方式通过使用方式来支付开发人员成本。警惕未打开源代码的Web扩展名。
Safari将用户首选项和密码与iCloud键链同步。为了用纯文本查看,用户必须输入当前设备的帐户密码。这意味着用户可以在设备上同步数据,并增加安全性。
野生动物园的发布周期比Chrome和Firefox慢(每年3-4个次要版本,1个主要发布)。稳定频道采用较新的功能。 Safari中的安全更新独立于稳定发布时间表处理,并通过App Store安装。
另请参见EL1T/UBLOCK-SAFARI,以禁用超链接审核信标。
不建议使用许多铬来源的浏览器。它们通常是封闭的来源,维护不佳,并提出可疑的主张以保护隐私。
在本指南中未评估其他杂项浏览器,例如勇敢者,因此既不建议也不劝阻使用。
Web浏览器以多种方式揭示信息,例如通过导航器接口,其中可能包括浏览器版本,操作系统,站点权限和设备电池级别等信息。许多网站还使用帆布指纹识别在跨课程中唯一识别用户。
有关有关安全意识浏览的更多信息,以及您的浏览器发送了哪些数据,请参见Howto:隐私和安全意识浏览,browserleaks.com,我是独一无二的吗? EFF涵盖您的轨道资源。
为了阻碍第三方跟踪器,建议完全禁用第三方Cookies 。默认情况下,Safari,Firefox和Chrome都将第三方Cookie阻止。第三方cookie是与用户当前查看的文件相关的文件相关的cookie。在大多数情况下,第三方Cookie用于通过在网络上跟踪用户的运动来创建浏览配置文件。禁用第三方Cookie可阻止其他域中的HTTP响应和脚本设置Cookie。此外,将cookie从请求删除到不是文档原始域的域,因此cookie仅发送到正在查看的当前站点。
还要注意WebRTC,它可能会揭示您的本地或公众(如果连接到VPN)IP地址。在Firefox和Chrome/Chromium中,可以通过诸如Ublock Origin之类的扩展来禁用。锁定模式在Safari中禁用WEBRTC。
TOR是一个匿名网络,可用于浏览网络附加隐私。 TOR浏览器是Firefox的修改版本,其代理可以访问TOR网络。
从TOR Project下载Tor浏览器。
不要尝试配置其他浏览器或应用程序以使用TOR,因为您可能会犯错,这会损害匿名性。
同时下载dmg
和asc
签名文件,然后验证磁盘图像已由TOR开发人员签名:
$ cd ~ /Downloads
$ file Tor *
TorBrowser-8.0.4-osx64_en-US.dmg: bzip2 compressed data, block size = 900k
TorBrowser-8.0.4-osx64_en-US.dmg.asc: PGP signature Signature (old)
$ gpg Tor * asc
[...]
gpg: Can't check signature: No public key
$ gpg --recv 0x4E2C6E8793298290
gpg: key 0x4E2C6E8793298290: public key "Tor Browser Developers (signing key) <[email protected]>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1
$ gpg --verify Tor * asc
gpg: assuming signed data in 'TorBrowser-8.0.4-osx64_en-US.dmg'
gpg: Signature made Mon Dec 10 07:16:22 2018 PST
gpg: using RSA key 0xEB774491D9FF06E2
gpg: Good signature from "Tor Browser Developers (signing key) <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290
Subkey fingerprint: 1107 75B5 D101 FB36 BC6C 911B EB77 4491 D9FF 06E2
确保Good signature from "Tor Browser Developers (signing key) <[email protected]>"
出现在输出中。关于未获得认证的密钥的警告是良性的,因为尚未被分配信任。
查看如何验证TOR浏览器的签名?了解更多信息。
要完成安装TOR浏览器,请打开磁盘映像并将其拖动到应用程序文件夹中,或使用:
hdiutil mount TorBrowser-8.0.4-osx64_en-US.dmg
cp -r /Volumes/Tor Browser/Tor Browser.app/ ~/Applications/
使用spctl -a -v
和/或pkgutil --check-signature
命令:验证TOR Project的Apple Developer ID MadPsayn6T的Apple Developer ID MADPSAYN6T验证TOR应用程序的签名:
$ spctl -a -vv ~ /Applications/Tor Browser.app
/Users/drduh/Applications/Tor Browser.app: accepted
source=Developer ID
origin=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)
$ pkgutil --check-signature ~ /Applications/Tor Browser.app
Package "Tor Browser.app":
Status: signed by a certificate trusted by Mac OS X
Certificate Chain:
1. Developer ID Application: The Tor Project, Inc (MADPSAYN6T)
SHA1 fingerprint: 95 80 54 F1 54 66 F3 9C C2 D8 27 7A 29 21 D9 61 11 93 B3 E8
-----------------------------------------------------------------------------
2. Developer ID Certification Authority
SHA1 fingerprint: 3B 16 6C 3B 7D C4 B7 51 C9 FE 2A FA B9 13 56 41 E3 88 E1 86
-----------------------------------------------------------------------------
3. Apple Root CA
SHA1 fingerprint: 61 1E 5B 66 2C 59 3A 08 FF 58 D1 4A E2 24 52 D1 98 DF 6C 60
您还可以使用codesign
命令检查应用程序的代码签名:
$ codesign -dvv ~ /Applications/Tor Browser.app
Executable=/Users/drduh/Applications/Tor Browser.app/Contents/MacOS/firefox
Identifier=org.torproject.torbrowser
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=229 flags=0x0(none) hashes=4+3 location=embedded
Library validation warning=OS X SDK version before 10.9 does not support Library Validation
Signature size=4247
Authority=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Signed Time=Dec 10, 2018 at 12:18:45 AM
Info.plist entries=24
TeamIdentifier=MADPSAYN6T
Sealed Resources version=2 rules=12 files=128
Internal requirements count=1 size=188
要查看签名应用程序的完整证书详细信息,请用codesign
提取它们,然后用openssl
进行解码:
$ codesign -d --extract-certificates ~ /Applications/Tor Browser.app
Executable=/Users/drduh/Applications/Tor Browser.app/Contents/MacOS/firefox
$ file codesign *
codesign0: data
codesign1: data
codesign2: data
$ openssl x509 -inform der -in codesign0 -subject -issuer -startdate -enddate -noout
subject= /UID=MADPSAYN6T/CN=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)/OU=MADPSAYN6T/O=The Tor Project, Inc/C=US
issuer= /CN=Developer ID Certification Authority/OU=Apple Certification Authority/O=Apple Inc./C=US
notBefore=Apr 12 22:40:13 2016 GMT
notAfter=Apr 13 22:40:13 2021 GMT
$ openssl x509 -inform der -in codesign0 -fingerprint -noout
SHA1 Fingerprint=95:80:54:F1:54:66:F3:9C:C2:D8:27:7A:29:21:D9:61:11:93:B3:E8
$ openssl x509 -inform der -in codesign0 -fingerprint -sha256 -noout
SHA256 Fingerprint=B5:0D:47:F0:3E:CB:42:B6:68:1C:6F:38:06:2B:C2:9F:41:FA:D6:54:F1:29:D3:E4:DD:9C:C7:49:35:FF:F5:D9
TOR流量已加密到出口节点(即无法通过被动网络窃听器读取),但是可以识别使用TOR的使用 - 例如,TLS握手“ HostNames”将以专明显示:
$ sudo tcpdump -An " tcp " | grep " www "
listening on pktap, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
.............". ...www.odezz26nvv7jeqz1xghzs.com.........
.............#.!...www.bxbko3qi7vacgwyk4ggulh.com.........
.6....m.....>...:.........|../* Z....W....X=..6...C../....................................0...0..0.......'....F./0.. *.H........0%1#0!..U....www.b6zazzahl3h3faf4x2.com0...160402000000Z..170317000000Z0'1%0#..U....www.tm3ddrghe22wgqna5u8g.net0..0..
有关更多信息,请参见TOR协议规范和TOR/TLSHASTORY。
您可能希望使用可插入的运输方式额外混淆TOR交通。
这可以通过设置自己的TOR继电器或找到现有的私人或公共桥作为混淆条目节点来完成。
要获得额外的安全性,请在虚拟盒或VMware虚拟化GNU/Linux或OpenBSD实例中使用TOR。
最后,请记住TOR网络提供匿名性,这不一定是隐私的代名词。 TOR网络不能保证能够防止能够进行流量分析和相关性的全球观察者。另请参见在Internet Panopticon(PDF)中寻求匿名性,以及由现实的对手(PDF)在TOR上的流量相关性。
另请参阅无形的互联网项目(I2P)及其TOR比较。
选择VPN服务或自己设置时,请务必研究使用的协议,密钥交换算法,身份验证机制和使用的加密类型。某些协议(例如PPTP)应避免使用Linux VM上的OpenVPN或基于Linux的Wireguard或通过一组跨平台工具。
当VPN中断或断开连接时,一些客户可能会通过下一个可用界面发送流量。有关如何仅在VPN上允许流量的示例,请参见SCY/8122924。
有一个更新的指南,可以在虚拟机(HWDSL2/setup-ipsec-vpn)或Docker容器(HWDSL2/Docker-ipsecec-vpn-Server)上设置IPSEC VPN。
可能值得考虑VPN提供商的地理位置。请参阅第114期中的进一步讨论。
另请参阅此技术概述的MACOS内置VPN L2TP/IPSEC和IKEV2客户端。
PGP是签署和加密数据(尤其是电子邮件)端到端的标准,因此只有发件人和收件人才能访问它。
GPG或GNU隐私保护卫队是符合PGP标准的GPL许可的开源程序。
GPG用于验证您下载和安装软件的签名,以及对称或不对称的加密文件和文本。
从Homebrew和brew install gnupg
安装。
如果您喜欢图形应用程序,请下载并安装GPG套件。
下载drduh/config/gpg.conf使用建议的设置:
curl -o ~/.gnupg/gpg.conf https://raw.githubusercontent.com/drduh/config/master/gpg.conf
请参阅drduh/Yubikey guide,以牢固生成和存储GPG密钥。
阅读在线指南,并练习加密和解密给您自己和您的朋友的电子邮件。让他们对这些东西感兴趣!
XMPP是由IETF开发的开放标准,允许跨平台联合消息传递。客户有很多选择。考虑使用一个基于浏览器的客户端来利用浏览器的沙箱。
根据提供商的不同,您可能不需要除用户名和密码以设置您的帐户。
XMPP不是E2EE,默认情况下,您需要使用Omemo加密,因此请确保您的客户端支持它。
Signal是一个高级E2EE Messenger,其双重键盘协议由无数其他Messenger(包括WhatsApp,Google Messages和Facebook Messenger)使用。
信号需要一个电话号码以注册,您需要先在手机上安装它,然后才能在桌面上使用它。
iMessage是苹果的第一个聚会使者。它需要一个Apple帐户才能使用它。
确保启用联系密钥验证并与您发给的任何人进行验证,以确保您向合适的人发送消息。
您可以将iMessage与电话号码或电子邮件一起使用,因此请选择您可以看到的联系人的iMessage。
注意:默认情况下,启用了iCloud备份,该备份将在没有E2EE的Apple服务器上存储您的消息加密键的副本。禁用iCloud备份或启用高级数据保护以防止这种情况。还要记住告诉您的消息合作伙伴也这样做!
野外有大量的MAC恶意软件。 Mac不能免于病毒和恶意软件!
一些恶意软件捆绑了合法软件,例如Java Bundling Ask工具栏,以及一些具有非法软件的软件,例如Mac.backdoor.i虫与盗版程序捆绑在一起。
请参阅Mac OS X(PDF)上的恶意软件持久性方法,以及OS X优胜美地的恶意软件持久性,以了解花园变化的恶意软件的功能。
在MALWAREBYTES博客上订阅最新MAC安全新闻的更新。
还可以查看MACOS的黑客团队恶意软件:MacOS的根安装,Mac代理的支持驱动程序和Mac的RCS代理,这是具有躲藏功能的高级恶意软件的一个很好的例子(例如, ps
, ls
)。有关更多
仅从App Store或Apple公证的程序运行程序将有助于减轻恶意软件。 Apple对恶意软件的公证应用程序进行了自动扫描。 App Store应用程序经历了审查过程以捕获恶意软件。
否则,从直接从开发人员的网站或GitHub中获取可信赖来源的程序。始终确保您的浏览器/终端在下载任何程序时都使用HTTP。
您还应该避免计划要求大量权限和第三方封闭的源计划。开源代码允许任何人审核并检查代码是否有安全/隐私问题。
通过运行以下命令运行以下命令,请检查程序是否使用App Sandbox:
codesign -dvvv --entitlements - <path to your app>
如果启用了App Sandbox,您将看到
[Key] com.apple.security.app-sandbox
[Value]
[Bool] true
另外,您可以通过打开活动监视器并添加“沙盒”列在应用程序运行时检查。
所有应用商店应用都需要使用应用程序沙箱。
注意:像Google Chrome这样的浏览器使用自己的沙箱,因此他们不使用App Sandbox。
在使用以下命令运行之前,请检查程序是否使用硬化运行时:
codesign --display --verbose /path/to/bundle.app
如果启用了硬化的运行时,您将看到flags=0x10000(runtime)
。 “运行时”意味着启用了硬化的运行时。可能还有其他标志,但是运行时标志是我们在这里寻找的。
您可以在活动监视器中启用一个称为“限制”的列,该列是防止程序通过MacOS的动态链接器注入代码的标志。理想情况下,这应该说“是”。
需要公证的应用程序使用硬化运行时。
要扫描具有多个AV产品的应用程序并检查其行为,请在运行之前将其上传到Virustotal。
MacOS带有一个名为XProtect的内置AV程序。 Xprotect会在后台自动运行,并更新其用于检测恶意软件的签名,而无需您做任何事情。如果它检测到已经运行的恶意软件,它将像其他任何AV程序一样可将其删除和减轻。
诸如BlockBlock或MacLaunch.SH之类的应用程序可能有助于防止持续的恶意软件。
本地安装的防病毒计划通常是一把双刃剑:它们可能会捕获“花园品种”恶意软件,但由于其特权操作模式,它们可能会增加成熟对手的攻击表面。他们通常还会致电回家发送样品以捕获最新的恶意软件。这可能是隐私问题。
参见Sophail:针对Antivirus(PDF)的应用攻击,对ESET脆弱性的分析和剥削,流行的安全软件遭到了无情的NSA和GCHQ攻击,以及以色列如何抓住俄罗斯黑客为我们提供秘密的俄罗斯黑客。
Gatekeeper试图防止非通知应用程序运行。
如果您尝试运行一个不陈述的应用程序,看门人会给您警告。如果您进入隐私和安全性,请轻松绕过这一点,请向下滚动到底部,然后单击应用程序上的打开。然后,网守将允许您运行它。
Gatekeeper并不涵盖所有二进制文件,只有应用程序,因此在运行其他文件类型时要小心。
要验证SIP已启用,请使用命令csrutil status
,该状态应返回: System Integrity Protection status: enabled.
否则,通过恢复模式启用SIP。
MacOS将元数据(APFS扩展属性)附加到下载的文件,可以使用mdls
和xattr
命令查看:
$ ls -l@ ~ /Downloads/TorBrowser-8.0.4-osx64_en-US.dmg
-rw-r--r--@ 1 drduh staff 63M Jan 1 12:00 TorBrowser-8.0.4-osx64_en-US.dmg
com.apple.metadata:kMDItemWhereFroms 46B
com.apple.quarantine 57B
$ mdls ~ /Downloads/TorBrowser-8.0.4-osx64_en-US.dmg
kMDItemContentCreationDate = 2019-01-01 00:00:00 +0000
kMDItemContentCreationDate_Ranking = 2019-01-01 00:00:00 +0000
kMDItemContentModificationDate = 2019-01-01 00:00:00 +0000
kMDItemContentType = "com.apple.disk-image-udif"
kMDItemContentTypeTree = (
"public.archive",
"public.item",
"public.data",
"public.disk-image",
"com.apple.disk-image",
"com.apple.disk-image-udif"
)
kMDItemDateAdded = 2019-01-01 00:00:00 +0000
kMDItemDateAdded_Ranking = 2019-01-01 00:00:00 +0000
kMDItemDisplayName = "TorBrowser-8.0.4-osx64_en-US.dmg"
kMDItemFSContentChangeDate = 2019-01-01 00:00:00 +0000
kMDItemFSCreationDate = 2019-01-01 00:00:00 +0000
kMDItemFSCreatorCode = ""
kMDItemFSFinderFlags = 0
kMDItemFSHasCustomIcon = (null)
kMDItemFSInvisible = 0
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery = (null)
kMDItemFSLabel = 0
kMDItemFSName = "TorBrowser-8.0.4-osx64_en-US.dmg"
kMDItemFSNodeCount = (null)
kMDItemFSOwnerGroupID = 5000
kMDItemFSOwnerUserID = 501
kMDItemFSSize = 65840402
kMDItemFSTypeCode = ""
kMDItemInterestingDate_Ranking = 2019-01-01 00:00:00 +0000
kMDItemKind = "Disk Image"
kMDItemWhereFroms = (
"https://dist.torproject.org/torbrowser/8.0.4/TorBrowser-8.0.4-osx64_en-US.dmg",
"https://www.torproject.org/projects/torbrowser.html.en"
)
$ xattr -l ~ /Downloads/TorBrowser-8.0.4-osx64_en-US.dmg
com.apple.metadata:kMDItemWhereFroms:
00000000 62 70 6C 69 73 74 30 30 A2 01 02 5F 10 4D 68 74 |bplist00..._.Mht|
00000010 74 70 73 3A 2F 2F 64 69 73 74 2E 74 6F 72 70 72 |tps://dist.torpr|
00000020 6F 6A 65 63 74 2E 6F 72 67 2F 74 6F 72 62 72 6F |oject.org/torbro|
[...]
com.apple.quarantine: 0081;58519ffa;Google Chrome.app;1F032CAB-F5A1-4D92-84EB-CBECA971B7BC
元数据属性也可以使用-d
标志删除:
xattr -d com.apple.metadata:kMDItemWhereFroms ~/Downloads/TorBrowser-8.0.4-osx64_en-US.dmg
xattr -d com.apple.quarantine ~/Downloads/TorBrowser-8.0.4-osx64_en-US.dmg
xattr -l ~/Downloads/TorBrowser-8.0.4-osx64_en-US.dmg
在目录~/Library/Preferences/
/Library/Preferences
找到其他元~/Library/Containers/<APP>/Data/Library/Preferences
和工件以下。
~/Library/Preferences/com.apple.sidebarlists.plist
包含所附卷的历史列表。要清除它,请使用命令/usr/libexec/PlistBuddy -c "delete :systemitems:VolumesList" ~/Library/Preferences/com.apple.sidebarlists.plist
/Library/Preferences/com.apple.Bluetooth.plist
包含蓝牙元数据,包括设备历史记录。如果不使用蓝牙,则可以清除元数据:
sudo defaults delete /Library/Preferences/com.apple.Bluetooth.plist DeviceCache
sudo defaults delete /Library/Preferences/com.apple.Bluetooth.plist IDSPairedDevices
sudo defaults delete /Library/Preferences/com.apple.Bluetooth.plist PANDevices
sudo defaults delete /Library/Preferences/com.apple.Bluetooth.plist PANInterfaces
sudo defaults delete /Library/Preferences/com.apple.Bluetooth.plist SCOAudioDevices
/var/spool/cups
包含杯子打印机工作缓存。要清除它,请使用命令:
sudo rm -rfv /var/spool/cups/c0*
sudo rm -rfv /var/spool/cups/tmp/*
sudo rm -rfv /var/spool/cups/cache/job.cache*
要清除连接的iOS设备列表,请使用:
sudo defaults delete /Users/$USER/Library/Preferences/com.apple.iPod.plist "conn:128:Last Connect"
sudo defaults delete /Users/$USER/Library/Preferences/com.apple.iPod.plist Devices
sudo defaults delete /Library/Preferences/com.apple.iPod.plist "conn:128:Last Connect"
sudo defaults delete /Library/Preferences/com.apple.iPod.plist Devices
sudo rm -rfv /var/db/lockdown/*
可以使用qlmanage -r cache
命令清除快速浏览缩略图数据,但是在Quicklook Directories中写入文件resetreason
,并指出手动清除了快速look Cache。使用qlmanage -r disablecache
禁用缩略图缓存
也可以通过使用getconf DARWIN_USER_CACHE_DIR
和sudo getconf DARWIN_USER_CACHE_DIR
获取目录名称来清除它,然后将其删除:
rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/exclusive
rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/index.sqlite
rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/index.sqlite-shm
rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/index.sqlite-wal
rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/resetreason
rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/thumbnails.data
同样,对于root用户:
sudo rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/thumbnails.fraghandler
sudo rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/exclusive
sudo rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/index.sqlite
sudo rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/index.sqlite-shm
sudo rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/index.sqlite-wal
sudo rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/resetreason
sudo rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/thumbnails.data
sudo rm -rfv $(getconf DARWIN_USER_CACHE_DIR)/com.apple.QuickLook.thumbnailcache/thumbnails.fraghandler
另请参阅“ Quicklook”缓存可能会泄漏加密数据。
清除Finder偏好:
defaults delete ~/Library/Preferences/com.apple.finder.plist FXDesktopVolumePositions
defaults delete ~/Library/Preferences/com.apple.finder.plist FXRecentFolders
defaults delete ~/Library/Preferences/com.apple.finder.plist RecentMoveAndCopyDestinations
defaults delete ~/Library/Preferences/com.apple.finder.plist RecentSearches
defaults delete ~/Library/Preferences/com.apple.finder.plist SGTRecentFileSearches
可以在以下目录中找到其他诊断文件 - 但应在删除任何问题之前谨慎,因为它可能会破坏日志记录或引起其他问题:
/var/db/CoreDuet/
/var/db/diagnostics/
/var/db/systemstats/
/var/db/uuidtext/
/var/log/DiagnosticMessages/
MacOS在NVRAM中存储了首选Wi-Fi数据(包括凭证)。要清除它,请使用以下命令:
sudo nvram -d 36C28AB5-6566-4C50-9EBD-CBB920F83843:current-network
sudo nvram -d 36C28AB5-6566-4C50-9EBD-CBB920F83843:preferred-networks
sudo nvram -d 36C28AB5-6566-4C50-9EBD-CBB920F83843:preferred-count
MACOS可能会收集有关您输入的内容的敏感信息,即使用户字典和建议已关闭。要删除它们,并防止它们再次创建,请使用以下命令:
rm -rfv "~/Library/LanguageModeling/*" "~/Library/Spelling/*" "~/Library/Suggestions/*"
chmod -R 000 ~/Library/LanguageModeling ~/Library/Spelling ~/Library/Suggestions
chflags -R uchg ~/Library/LanguageModeling ~/Library/Spelling ~/Library/Suggestions
Quicklook应用程序支持元数据可以通过以下命令清除并锁定:
rm -rfv "~/Library/Application Support/Quick Look/*"
chmod -R 000 "~/Library/Application Support/Quick Look"
chflags -R uchg "~/Library/Application Support/Quick Look"
文档修订元数据存储在/.DocumentRevisions-V100
中,可以通过以下命令清除并锁定 - 应谨慎行事,因为这可能会破坏某些核心Apple应用程序:
sudo rm -rfv /.DocumentRevisions-V100/*
sudo chmod -R 000 /.DocumentRevisions-V100
sudo chflags -R uchg /.DocumentRevisions-V100
保存的应用状态元数据可以用以下命令清除并锁定:
rm -rfv ~/Library/Saved Application State/*
rm -rfv ~/Library/Containers/<APPNAME>/Data/Library/Saved Application State
chmod -R 000 ~/Library/Saved Application State/
chmod -R 000 ~/Library/Containers/<APPNAME>/Data/Library/Saved Application State
chflags -R uchg ~/Library/Saved Application State/
chflags -R uchg ~/Library/Containers/<APPNAME>/Data/Library/Saved Application State
可以用以下命令清除AutoSave元数据并锁定:
rm -rfv "~/Library/Containers/<APP>/Data/Library/Autosave Information"
rm -rfv "~/Library/Autosave Information"
chmod -R 000 "~/Library/Containers/<APP>/Data/Library/Autosave Information"
chmod -R 000 "~/Library/Autosave Information"
chflags -R uchg "~/Library/Containers/<APP>/Data/Library/Autosave Information"
chflags -R uchg "~/Library/Autosave Information"
即使禁用了Siri发射代理,也可以使用以下命令清除并锁定Siri Analytics数据库,即使Siri启动代理也可以被清除并锁定:
rm -rfv ~/Library/Assistant/SiriAnalytics.db
chmod -R 000 ~/Library/Assistant/SiriAnalytics.db
chflags -R uchg ~/Library/Assistant/SiriAnalytics.db
~/Library/Preferences/com.apple.iTunes.plist
包含iTunes元数据。最近的iTunes搜索数据可以通过以下命令清除:
defaults delete ~/Library/Preferences/com.apple.iTunes.plist recentSearches
如果您不使用Apple帐户链接服务,则可以使用以下命令清除以下密钥:
defaults delete ~/Library/Preferences/com.apple.iTunes.plist StoreUserInfo
defaults delete ~/Library/Preferences/com.apple.iTunes.plist WirelessBuddyID
所有在Quicktime播放器中播放的媒体都可以在以下方式找到:
~/Library/Containers/com.apple.QuickTimePlayerX/Data/Library/Preferences/com.apple.QuickTimePlayerX.plist
以下文件中可能存在其他元数据:
~/Library/Containers/com.apple.appstore/Data/Library/Preferences/com.apple.commerce.knownclients.plist
~/Library/Preferences/com.apple.commerce.plist
~/Library/Preferences/com.apple.QuickTimePlayerX.plist
使用urandom
和tr
生成强密码:
tr -dc '[:graph:]' < /dev/urandom | fold -w 20 | head -1
密钥链访问中的密码助理也可以生成安全的凭据。
考虑使用Diceware来记住密码。
GNUPG也可用于管理密码和其他加密文件(请参阅Drduh/Pusse和Drduh/pwd.sh)。
确保所有合格的在线帐户都具有多因素身份验证。多因素身份验证的最强形式是WebAuthn,其次是基于应用程序的身份验证器,基于SMS的代码最弱。
Yubikey是一个负担得起的硬件令牌,并提供WebAuthn支持。它也可用于存储加密密钥进行GNUPG加密和SSH身份验证 - 请参见Drduh/Yubikey -guide。
在将文件备份到外部媒体或在线服务之前,请在本地加密文件。
如果您的威胁模型允许,则应遵循CISA概述的3-2-1备份模型。保留3份副本:原始和两个备份。在2种不同的媒体类型上保留备份,例如本地驱动器和云存储。存储1个副本异地。
Time Machine是用于处理MACOS上备份的内置工具。获取外部驱动器或网络驱动器以备份并加密备份。
GNUPG可以与静态密码或公钥一起使用(并使用存储在Yubikey上的私钥)。
使用密码加压和加密目录:
tar zcvf - ~/Downloads | gpg -c > ~/Desktop/backup-$(date +%F-%H%M).tar.gz.gpg
解密并解压缩目录:
gpg -o ~/Desktop/decrypted-backup.tar.gz -d ~/Desktop/backup-*.tar.gz.gpg
tar zxvf ~/Desktop/decrypted-backup.tar.gz
也可以使用磁盘实用程序或hdiutil
创建加密量:
hdiutil create ~/Desktop/encrypted.dmg -encryption -size 50M -volname "secretStuff"
hdiutil mount ~/Desktop/encrypted.dmg
cp -v ~/Documents/passwords.txt /Volumes/secretStuff
hdiutil eject /Volumes/secretStuff
提供备份的其他应用程序和服务包括:
MacOS记得它已连接的访问点。像所有无线设备一样,Mac将每次寻找网络时(例如从睡眠中醒来时)广播它记得的所有访问点名称(例如Myhomenetwork )。
这是一种隐私风险,因此在不再需要的时候从系统偏好>网络> “高级”中删除网络。
还可以看到人群中的信号:通过智能手机探针(PDF)揭示社会关系。
可以在/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
中找到保存的Wi-Fi信息(SSID,最后连接等)
您可以为每个网络具有不同的随机MAC地址,以随着时间的推移旋转。随着时间的推移,这将有助于防止您在网络和同一网络上进行跟踪。
MacOS将Wi-Fi SSID和密码存储在NVRAM中,以便恢复模式访问Internet。请确保从Apple帐户中清除NVRAM或对您的Mac进行验证,该帐户将清除NVRAM,然后再通过Mac。重置SMC将清除一些NVRAM,但不是全部。
最后,无线网络上的WEP保护不安全,您只能在可能的情况下连接到WPA3受保护的网络。
对于传出的SSH连接,请使用硬件或受密码保护的密钥,设置远程主机并考虑将其放置以增加隐私。有关推荐的客户端选项,请参见drduh/config/ssh_config。
您也可以使用SSH创建一个加密的隧道来发送流量,类似于VPN。
例如,使用在远程主机端口8118上运行的Propoxy:
ssh -C -L 5555:127.0.0.1:8118 [email protected]
sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 5555
sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 5555
或将SSH连接用作袜子代理:
ssh -NCD 3000 [email protected]
默认情况下,MACOS没有启用SSHD或远程登录名。
启用SSHD并允许传入的SSH连接:
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
或使用系统首选项>共享菜单。
如果启用SSHD,请确保禁用密码身份验证并考虑进一步硬化您的配置。有关建议的选项,请参见Drduh/config/sshd_config。
确认SSHD是否正在运行:
sudo lsof -Pni TCP:22
始终保持MAC的身体安全,不要在公开场合无人看管。
具有无监督物理访问的熟练攻击者可以安装硬件键盘记录器,以记录所有击键。使用带有内置键盘或蓝牙键盘的MAC使此攻击的许多现成版本旨在插入USB键盘和计算机之间。
为了防止在使用过程中进行物理盗窃,您可以使用抗飞质工具(例如Buskill或SwiftGuard)(使用图形用户界面更新USBKILL)。所有响应USB事件,如果您的设备与您物理分开或连接未经授权的设备,则可以立即关闭计算机。
考虑购买隐私屏幕/过滤器,以便在公共场所使用。
可以将指甲油和防篡改密封件应用于组件以检测篡改。
MACO具有强大的OpenBSM(基本安全模块)审核功能。您可以使用它来监视过程执行,网络活动等。
要尾部审核日志,请使用praudit
实用程序:
$ sudo praudit -l /dev/auditpipe
header,201,11,execve(2),0,Thu Sep 1 12:00:00 2015, + 195 msec,exec arg,/Applications/.evilapp/rootkit,path,/Applications/.evilapp/rootkit,path,/Applications/.evilapp/rootkit,attribute,100755,root,wheel,16777220,986535,0,subject,drduh,root,wheel,root,wheel,412,100005,50511731,0.0.0.0,return,success,0,trailer,201,
header,88,11,connect(2),0,Thu Sep 1 12:00:00 2015, + 238 msec,argument,1,0x5,fd,socket-inet,2,443,173.194.74.104,subject,drduh,root,wheel,root,wheel,326,100005,50331650,0.0.0.0,return,failure : Operation now in progress,4354967105,trailer,88
header,111,11,OpenSSH login,0,Thu Sep 1 12:00:00 2015, + 16 msec,subject_ex,drduh,drduh,staff,drduh,staff,404,404,49271,::1,text,successful login drduh,return,success,0,trailer,111,
请参阅/etc/security
中的audit
, praudit
, audit_control
和其他文件的手册页
注意,尽管man audit
表示-s
标志将同步审计配置,但似乎有必要重新启动以进行更改以生效。
有关更多信息,请参见iLostmynotes.blogspot.com和derflounder.wordpress.com上的文章。
注意系统完整性保护会干扰DTRACE,因此不可能在最近的MacOS版本中使用它而不会禁用SIP。
iosnoop
监视磁盘I/Oopensnoop
监控文件打开execsnoop
监视过程执行errinfo
显示器失败的系统调用dtruss
监视所有系统调用有关更多信息,请参见man -k dtrace
。
ps -ef
列出了有关所有运行过程的信息。
您还可以使用活动监视器查看过程。
launchctl list
和sudo launchctl list
列表已加载,运行的用户以及系统启动守护程序和代理。
列出打开网络文件:
sudo lsof -Pni
列出了各种与网络相关数据结构的内容:
sudo netstat -atln
Wireshark可以从带有tshark
的命令行中使用。
监视DNS查询和答复:
tshark -Y "dns.flags.response == 1" -Tfields
-e frame.time_delta
-e dns.qry.name
-e dns.a
-Eseparator=,
监视HTTP请求和响应:
tshark -Y "http.request or http.response" -Tfields
-e ip.dst
-e http.request.full_uri
-e http.request.method
-e http.response.code
-e http.response.phrase
-Eseparator=/s
监视X509(SSL/TLS)证书:
tshark -Y "ssl.handshake.certificate" -Tfields
-e ip.src
-e x509sat.uTF8String
-e x509sat.printableString
-e x509sat.universalString
-e x509sat.IA5String
-e x509sat.teletexString
-Eseparator=/s -Equote=d
Google/Santa是为Google公司Macintosh机队开发的安全软件,并开源。
圣诞老人是MacOS的二进制和文件访问授权系统。它由一个系统扩展程序组成,该系统扩展程序监视执行,这是一个守护程序,该守护程序根据本地数据库的内容做出执行决策,GUI代理,在块决策中通知用户,以及用于管理系统和系统和系统和管理系统的命令行实用程序将数据库与服务器同步。
圣诞老人使用内核授权API来监视和禁止/禁止在内核中执行二进制文件。二进制文件可以被唯一的哈希或签名开发人员证书列入白色或黑色。圣诞老人只能用于仅允许可信赖的代码执行,也可以通过在Mac上执行黑名单的恶意软件,类似于Windows的Bit9软件。
注意,圣诞老人当前没有用于管理规则的图形用户界面。以下说明仅适用于高级用户!
要安装圣诞老人,请访问发布页面并下载最新的磁盘映像,安装它并安装包含的软件包:
hdiutil mount ~/Downloads/santa-0.9.20.dmg
sudo installer -pkg /Volumes/santa-0.9.20/santa-0.9.20.pkg -tgt /
默认情况下,圣诞老人以“监视器”模式安装(意味着什么都没有被阻止,只有记录),并带有两个规则:一个用于Apple二进制文件,另一种用于圣诞老人软件本身。
验证圣诞老人正在运行,其内核模块已加载:
$ santactl status
>>> Daemon Info
Mode | Monitor
File Logging | No
Watchdog CPU Events | 0 (Peak: 0.00%)
Watchdog RAM Events | 0 (Peak: 0.00MB)
>>> Kernel Info
Kernel cache count | 0
>>> Database Info
Binary Rules | 0
Certificate Rules | 2
Events Pending Upload | 0
$ ps -ef | grep " [s]anta "
0 786 1 0 10:01AM ?? 0:00.39 /Library/Extensions/santa-driver.kext/Contents/MacOS/santad --syslog
$ kextstat | grep santa
119 0 0xffffff7f822ff000 0x6000 0x6000 com.google.santa-driver (0.9.14) 693D8E4D-3161-30E0-B83D-66A273CAE026 <5 4 3 1>
创建一个黑名单规则以防止iTunes执行:
$ sudo santactl rule --blacklist --path /Applications/iTunes.app/
Added rule for SHA-256: e1365b51d2cb2c8562e7f1de36bfb3d5248de586f40b23a2ed641af2072225b3.
尝试启动iTunes-将被阻止。
$ open /Applications/iTunes.app/
LSOpenURLsWithRole() failed with error -10810 for the file /Applications/iTunes.app.
删除规则:
$ sudo santactl rule --remove --path /Applications/iTunes.app/
Removed rule for SHA-256: e1365b51d2cb2c8562e7f1de36bfb3d5248de586f40b23a2ed641af2072225b3.
打开iTunes:
$ open /Applications/iTunes.app/
[iTunes will open successfully]
创建一个新的示例C程序:
$ cat << EOF > foo.c
> # include <stdio.h>
> main () { printf( " Hello Worldn”); }
> EOF
用GCC编译程序(需要安装XCode或命令行工具):
$ gcc -o foo foo.c
$ file foo
foo: Mach-O 64-bit executable x86_64
$ codesign -d foo
foo: code object is not signed at all
运行它:
$ ./foo
Hello World
将圣诞老人切入“锁定”模式,该模式仅允许授权的二进制文件运行:
$ sudo defaults write /var/db/santa/config.plist ClientMode -int 2
尝试运行未签名的二进制文件:
$ ./foo
bash: ./foo: Operation not permitted
Santa
The following application has been blocked from executing
because its trustworthiness cannot be determined.
Path: /Users/demouser/foo
Identifier: 4e11da26feb48231d6e90b10c169b0f8ae1080f36c168ffe53b1616f7505baed
Parent: bash (701)
要授权二进制,请确定其SHA-256总和:
$ santactl fileinfo /Users/demouser/foo
Path : /Users/demouser/foo
SHA-256 : 4e11da26feb48231d6e90b10c169b0f8ae1080f36c168ffe53b1616f7505baed
SHA-1 : 4506f3a8c0a5abe4cacb98e6267549a4d8734d82
Type : Executable (x86-64)
Code-signed : No
Rule : Blacklisted (Unknown)
添加一个新规则:
$ sudo santactl rule --whitelist --sha256 4e11da26feb48231d6e90b10c169b0f8ae1080f36c168ffe53b1616f7505baed
Added rule for SHA-256: 4e11da26feb48231d6e90b10c169b0f8ae1080f36c168ffe53b1616f7505baed.
运行它:
$ ./foo
Hello World
它被允许和工作!
开发人员证书也可以允许申请。例如,下载并运行Google Chrome-将在“锁定”模式下被圣诞老人阻止:
$ curl -sO https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg
$ hdiutil mount googlechrome.dmg
$ cp -r /Volumes/Google Chrome/Google Chrome.app /Applications/
$ open /Applications/Google Chrome.app/
LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Google Chrome.app.
通过开发人员证书(签名链中的第一项)授权该申请:
$ santactl fileinfo /Applications/Google Chrome.app/
Path : /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
SHA-256 : 0eb08224d427fb1d87d2276d911bbb6c4326ec9f74448a4d9a3cfce0c3413810
SHA-1 : 9213cbc7dfaaf7580f3936a915faa56d40479f6a
Bundle Name : Google Chrome
Bundle Version : 2883.87
Bundle Version Str : 55.0.2883.87
Type : Executable (x86-64)
Code-signed : Yes
Rule : Blacklisted (Unknown)
Signing Chain:
1. SHA-256 : 15b8ce88e10f04c88a5542234fbdfc1487e9c2f64058a05027c7c34fc4201153
SHA-1 : 85cee8254216185620ddc8851c7a9fc4dfe120ef
Common Name : Developer ID Application: Google Inc.
Organization : Google Inc.
Organizational Unit : EQHXZ8M8AV
Valid From : 2012/04/26 07:10:10 -0700
Valid Until : 2017/04/27 07:10:10 -0700
2. SHA-256 : 7afc9d01a62f03a2de9637936d4afe68090d2de18d03f29c88cfb0b1ba63587f
SHA-1 : 3b166c3b7dc4b751c9fe2afab9135641e388e186
Common Name : Developer ID Certification Authority
Organization : Apple Inc.
Organizational Unit : Apple Certification Authority
Valid From : 2012/02/01 14:12:15 -0800
Valid Until : 2027/02/01 14:12:15 -0800
3. SHA-256 : b0b1730ecbc7ff4505142c49f1295e6eda6bcaed7e2c68c5be91b5a11001f024
SHA-1 : 611e5b662c593a08ff58d14ae22452d198df6c60
Common Name : Apple Root CA
Organization : Apple Inc.
Organizational Unit : Apple Certification Authority
Valid From : 2006/04/25 14:40:36 -0700
Valid Until : 2035/02/09 13:40:36 -0800
在这种情况下, 15b8ce88e10f04c88a5542234fbdfc1487e9c2f64058a05027c7c34fc4201153
是Google的Apple Developer(团队ID EQHXZ8M8AV)的SHA -256-
$ sudo santactl rule --whitelist --certificate --sha256 15b8ce88e10f04c88a5542234fbdfc1487e9c2f64058a05027c7c34fc4201153
Added rule for SHA-256: 15b8ce88e10f04c88a5542234fbdfc1487e9c2f64058a05027c7c34fc4201153.
Google Chrome现在应该启动,只要代码签名证书不更改或过期,该应用程序的随后更新将继续工作。
禁用“锁定”模式:
sudo defaults delete /var/db/santa/config.plist ClientMode
请参阅/var/log/santa.log
监视允许并拒绝执行决策。
Zentral提供了圣诞老人的日志和配置服务器,Zentral是一个开源事件监视解决方案和Osquery和Santa的TLS服务器。
Zentral将在监视和锁定操作模式下支持圣诞老人。客户需要注册与Sync Santa规则的TLS连接,所有端点的圣诞老人事件均已汇总并在Zentral登录。圣诞老人事件可以触发Zentral框架内的动作和通知。
请注意, Python,Bash和其他口译员已获得授权(因为它们是由Apple的开发人员证书签名的),因此Santa将无法阻止此类脚本执行。因此,一个潜在的非二进制程序禁用圣诞老人是一个弱点(不是脆弱性,因为它是设计的)。
禁用诊断和使用数据。
如果您想播放音乐或观看视频,请使用MacOS中的内置媒体播放器QuickTime Player。它使用应用程序沙箱,硬化的运行时,并从签名的系统量中获得益处,作为基本系统的一部分。
如果您想使用洪流,请使用免费和开源的传输(注意:像所有软件一样,甚至开源项目,恶意软件仍然可能会进入)。您可能还希望使用一个块列表来避免凝视已知的坏主机 - 请参阅《传输》和Johntyree/3331662的最佳区块列表。
管理默认文件处理程序。
使用控制台应用程序或syslog -w
或/usr/bin/log stream
命令进行监视系统日志。
屏幕保护程序启动后,将屏幕设置为锁定:
defaults write com.apple.screensaver askForPassword -int 1
defaults write com.apple.screensaver askForPasswordDelay -int 0
在Finder中公开隐藏的文件和库文件夹:
defaults write com.apple.finder AppleShowAllFiles -bool true
chflags nohidden ~/Library
显示所有文件名扩展(因此“ evil.jpg.app”不能轻易伪装)。
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
不要默认将文档保存到iCloud:
defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
在终端中启用安全键盘条目(除非您使用Yubikey或诸如TextExpander之类的应用程序)。
禁用崩溃记者(应用程序崩溃后出现的对话框并提示向Apple报告该问题):
defaults write com.apple.CrashReporter DialogType none
禁用Bonjour多播广告:
警告:这将导致空中播放和气印问题!
sudo defaults write /Library/Preferences/com.apple.mDNSResponder.plist NoMulticastAdvertisements -bool YES
如果不需要,请禁用交接和蓝牙功能。
检查您的应用程序是否在活动监视器中打了沙箱。
MacOS在/etc/sudoers
中附带了这一行:
Defaults env_keep += "HOME MAIL"
当您提升特权时,这会阻止Sudo更改家庭变量。这意味着当您运行“ sudo zsh”时,它将以root zsh dotfiles的root执行。建议您发表这一行,以避免使用恶意软件或本地攻击者升级特权的潜在简单方法。
如果您想保留具有非root用户主目录的根用户的便利性,则可以将导出线附加到/var/root/.zshrc,例如:
export HOME=/Users/blah
设置一个自定义透明:
sudo launchctl config user umask 077
重新启动,在Finder中创建文件并验证其权限(MACOS默认值允许“组/其他”读取访问):
$ ls -ld umask *
drwx------ 2 kevin staff 64 Dec 4 12:27 umask_testing_dir
-rw-------@ 1 kevin staff 2026566 Dec 4 12:28 umask_testing_file