使用篡改防护保护 macOS 安全设置

适用于:

希望体验 Defender for Endpoint? 注册免费试用版

macOS 中的篡改保护有助于防止未经授权的用户对安全设置进行不必要的更改。 篡改防护有助于防止在 macOS 上未经授权删除 Microsoft Defender for Endpoint。 此功能还有助于防止重要的安全文件、进程和配置设置被篡改。

重要

从 2023 年 3 月开始,macOS 上的 Microsoft Defender for Endpoint 遵循在 Microsoft Defender 门户 (https://security.microsoft.com) 中的高级设置下通过全局防篡改开关应用的篡改防护选择。 建议) 使用移动设备管理 (MDM) 解决方案(如 Intune 或 JAM (F)选择强制实施 (阻止/审核/禁用) 自己的 macOS 篡改防护设置。 如果未通过 MDM 强制实施篡改保护设置,则本地管理员可以继续使用以下命令手动更改设置: sudo mdatp config tamper-protection enforcement-level --value (chosen mode)

可以在以下模式下设置篡改防护:

文章 说明
Disabled 篡改防护已完全关闭。
Audit 会记录篡改操作,但不会阻止。 此模式是安装后的默认模式。
阻止 防篡改已打开;篡改操作被阻止。

当篡改防护设置为审核或阻止模式时,可以预期以下结果:

审核模式

  • 卸载 Defender for Endpoint 代理的操作记录 (审核)
  • 对 Defender for Endpoint 文件的编辑/修改记录 (审核)
  • 在 Defender for Endpoint 位置下创建新文件会记录 (审核)
  • ) 审核 (记录删除 Defender for Endpoint 文件
  • 将记录 Defender for Endpoint 文件的重命名 (审核)

阻止模式

  • 阻止卸载 Defender for Endpoint 代理的操作
  • 阻止编辑/修改 Defender for Endpoint 文件
  • 阻止在 Defender for Endpoint 位置下创建新文件
  • 已阻止删除 Defender for Endpoint 文件
  • 阻止重命名 Defender for Endpoint 文件
  • 用于停止代理 (wdavdaemon) 失败的命令

下面是响应阻止操作的系统消息示例:

操作已阻止消息的屏幕截图。

可以通过提供模式名称作为强制级别来配置篡改防护模式。

注意

  • 模式更改将立即应用。
  • 如果在初始配置期间使用了 JAMF,则还需要使用 JAMF 更新配置。

开始之前

  • 支持的 macOS 版本:Big Sur (11) 或更高版本
  • Defender for Endpoint 所需的最低版本: 101.70.19

重要

Microsoft 建议使用权限最少的角色。 这有助于提高组织的安全性。 全局管理员是一个权限很高的角色,应仅限于在无法使用现有角色的紧急情况下使用。

强烈建议的设置:

  • 启用系统完整性保护 (SIP) 。 有关详细信息,请参阅 禁用和启用系统完整性保护

  • 使用移动设备管理 (MDM) 工具配置 Microsoft Defender for Endpoint。

  • 确保 Defender for Endpoint 具有 完全磁盘访问 授权。

    注意

    启用 SIP 和通过 MDM 完成所有配置都不是必需的,但对于完全受保护的设备是必需的,否则本地管理员仍可以进行 macOS 管理的篡改更改。 例如,通过 Intune 等移动设备管理解决方案启用 TCC (透明度、同意 & 控制) ,将消除全局管理员撤消本地管理员完全磁盘访问授权的风险。

在 macOS 设备上配置篡改防护

Microsoft Defender 按以下顺序评估这些设置。 如果配置了更高的优先级设置,则忽略其余部分:

  1. 托管配置文件 (篡改保护/enforcementLevel 设置) :

  2. 使用) 手动mdatp config tamper-protection enforcement-level --value { disabled|audit|block } 配置 (

  3. 如果在 Microsoft Defender 门户中启用了篡改防护,则预览版 (使用“阻止”模式;并非所有客户) 可用。

    • 如果设备已获得许可,则默认使用“审核”模式。
    • 如果设备未获得许可,则篡改防护处于“阻止”模式。

开始之前

确保设备已获得许可且正常运行, (相应的值报告 true) :

mdatp health
healthy                                     : true
health_issues                               : []
licensed                                    : true
...
tamper_protection                           : "audit"

tamper_protection 报告有效强制级别。

Manual configuration - 手动配置

  1. 使用以下命令切换到限制性最高的模式:
sudo mdatp config tamper-protection enforcement-level --value block

手动配置命令的图像

注意

必须使用通过 MDM) 在生产设备上部署的托管配置文件 (。 如果本地管理员通过手动配置更改了篡改防护模式,他们可以随时将其更改为限制性较低的模式。 如果通过托管配置文件设置了篡改保护模式,则只有全局管理员才能撤消该模式。

  1. 验证结果。
healthy                                     : true
health_issues                               : []
licensed                                    : true
engine_version                              : "1.1.19300.3"
app_version                                 : "101.70.19"
org_id                                      : "..."
log_level                                   : "info"
machine_guid                                : "..."
release_ring                                : "InsiderFast"
product_expiration                          : Dec 29, 2022 at 09:48:37 PM
cloud_enabled                               : true
cloud_automatic_sample_submission_consent   : "safe"
cloud_diagnostic_enabled                    : false
passive_mode_enabled                        : false
real_time_protection_enabled                : true
real_time_protection_available              : true
real_time_protection_subsystem              : "endpoint_security_extension"
network_events_subsystem                    : "network_filter_extension"
device_control_enforcement_level            : "audit"
tamper_protection                           : "block"
automatic_definition_update_enabled         : true
definitions_updated                         : Jul 06, 2022 at 01:57:03 PM
definitions_updated_minutes_ago             : 5
definitions_version                         : "1.369.896.0"
definitions_status                          : "up_to_date"
edr_early_preview_enabled                   : "disabled"
edr_device_tags                             : []
edr_group_ids                               : ""
edr_configuration_version                   : "20.199999.main.2022.07.05.02-ac10b0623fd381e28133debe14b39bb2dc5b61af"
edr_machine_id                              : "..."
conflicting_applications                    : []
network_protection_status                   : "stopped"
data_loss_prevention_status                 : "disabled"
full_disk_access_enabled                    : true

请注意, tamper_protection 现在已设置为 block

JAMF

通过添加以下设置,在 Microsoft Defender for Endpoint 配置文件中配置篡改防护模式:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>tamperProtection</key>
    <dict>
      <key>enforcementLevel</key>
      <string>block</string>
    </dict>
  </dict>
</plist>

注意

如果已有 Microsoft Defender for Endpoint 的配置文件,则需要 向其添加 设置。 不应创建第二个配置文件。

Intune

设置目录

可以创建新的设置目录配置文件来添加篡改防护配置,也可以将其添加到现有配置。 可以在类别“Microsoft Defender”和子类别“篡改防护”下找到“强制级别”设置。 之后,选择所需的级别。

自定义配置文件

作为替代方法,还可以通过自定义配置文件配置篡改保护。 有关详细信息,请参阅 在 macOS 上设置 Microsoft Defender for Endpoint 的首选项

注意

对于 Intune 配置,可以创建新的配置文件配置文件来添加篡改防护配置,也可以将这些参数添加到现有配置文件。 选择所需的级别。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1">
    <dict>
        <key>PayloadUUID</key>
        <string>C4E6A782-0C8D-44AB-A025-EB893987A295</string>
        <key>PayloadType</key>
        <string>Configuration</string>
        <key>PayloadOrganization</key>
        <string>Microsoft</string>
        <key>PayloadIdentifier</key>
        <string>com.microsoft.wdav</string>
        <key>PayloadDisplayName</key>
        <string>Microsoft Defender for Endpoint settings</string>
        <key>PayloadDescription</key>
        <string>Microsoft Defender for Endpoint configuration settings</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadEnabled</key>
        <true/>
        <key>PayloadRemovalDisallowed</key>
        <true/>
        <key>PayloadScope</key>
        <string>System</string>
        <key>PayloadContent</key>
        <array>
            <dict>
                <key>PayloadUUID</key>
                <string>99DBC2BC-3B3A-46A2-A413-C8F9BB9A7295</string>
                <key>PayloadType</key>
                <string>com.microsoft.wdav</string>
                <key>PayloadOrganization</key>
                <string>Microsoft</string>
                <key>PayloadIdentifier</key>
                <string>com.microsoft.wdav</string>
                <key>PayloadDisplayName</key>
                <string>Microsoft Defender for Endpoint configuration settings</string>
                <key>PayloadDescription</key>
                <string/>
                <key>PayloadVersion</key>
                <integer>1</integer>
                <key>PayloadEnabled</key>
                <true/>
                <key>tamperProtection</key>
                <dict>
                             <key>enforcementLevel</key>
                             <string>block</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

检查状态

运行以下命令,检查篡改防护状态:

mdatp health --field tamper_protection

如果启用了篡改防护,则结果显示“阻止”:

块模式下的篡改防护图像

还可以运行 full mdatp health 并在输出中查找“tamper_protection”。

有关篡改防护状态的扩展信息,请运行 mdatp health --details tamper_protection

验证防篡改防护功能

可以通过各种方式验证篡改保护是否已启用。

验证块模式

Microsoft Defender 门户中引发篡改警报

Microsoft Defender 门户中引发的篡改警报的屏幕截图。

验证块模式和审核模式

  • 使用高级搜寻时,会显示篡改警报
  • 可以在本地设备日志中找到篡改事件: sudo grep -F '[{tamperProtection}]' /Library/Logs/Microsoft/mdatp/microsoft_defender_core.log

篡改防护日志的屏幕截图。

DIY 方案

  • 将篡改防护设置为“阻止”后,尝试不同的方法来卸载 Defender for Endpoint。 例如,将应用磁贴拖动到回收站或使用命令行卸载篡改防护。

  • 尝试停止 Defender for Endpoint 进程 (终止) 。

  • 尝试删除、重命名、修改和移动 Defender for Endpoint 文件 (类似于恶意用户) 执行的操作,例如:

    • /Applications/Microsoft Defender.app/
    • /Library/LaunchDaemons/com.microsoft.fresno.plist
    • /Library/LaunchDaemons/com.microsoft.fresno.uninstall.plist
    • /Library/LaunchAgents/com.microsoft.wdav.tray.plist
    • /Library/Managed Preferences/com.microsoft.wdav.ext.plist
    • /Library/Managed Preferences/mdatp_managed.json
    • /Library/Managed Preferences/com.microsoft.wdav.atp.plist
    • /Library/Managed Preferences/com.microsoft.wdav.atp.offboarding.plist
    • /usr/local/bin/mdatp

关闭篡改防护

可以使用以下任一方法关闭篡改防护。

Manual configuration - 手动配置

使用以下命令:

sudo mdatp config tamper-protection enforcement-level --value disabled

JAMF

enforcementLevel配置文件中的值更改为“disabled”,并将其推送到设备:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>tamperProtection</key>
    <dict>
      <key>enforcementLevel</key>
      <string>disabled</string>
    </dict>
  </dict>
</plist>

Intune

在 Intune 配置文件中添加以下配置:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1">
    <dict>
        <key>PayloadUUID</key>
        <string>C4E6A782-0C8D-44AB-A025-EB893987A295</string>
        <key>PayloadType</key>
        <string>Configuration</string>
        <key>PayloadOrganization</key>
        <string>Microsoft</string>
        <key>PayloadIdentifier</key>
        <string>com.microsoft.wdav</string>
        <key>PayloadDisplayName</key>
        <string>Microsoft Defender for Endpoint settings</string>
        <key>PayloadDescription</key>
        <string>Microsoft Defender for Endpoint configuration settings</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadEnabled</key>
        <true/>
        <key>PayloadRemovalDisallowed</key>
        <true/>
        <key>PayloadScope</key>
        <string>System</string>
        <key>PayloadContent</key>
        <array>
            <dict>
                <key>PayloadUUID</key>
                <string>99DBC2BC-3B3A-46A2-A413-C8F9BB9A7295</string>
                <key>PayloadType</key>
                <string>com.microsoft.wdav</string>
                <key>PayloadOrganization</key>
                <string>Microsoft</string>
                <key>PayloadIdentifier</key>
                <string>com.microsoft.wdav</string>
                <key>PayloadDisplayName</key>
                <string>Microsoft Defender for Endpoint configuration settings</string>
                <key>PayloadDescription</key>
                <string/>
                <key>PayloadVersion</key>
                <integer>1</integer>
                <key>PayloadEnabled</key>
                <true/>
                <key>tamperProtection</key>
                <dict>
                  <key>enforcementLevel</key>
                  <string>disabled</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

排除项

注意

在版本 101.98.71 或更高版本中可用。

篡改防护可防止任何 macOS 进程更改Microsoft Defender 的资产或停止Microsoft Defender 的进程。 受保护的资产包括安装和配置文件。

在内部,Microsoft Defender 在某些情况下对某些 macOS 进程发出例外。 例如,如果篡改防护验证了包的真实性,则 macOS 可以升级 Defender 的包。 还有其他排除项。 例如,macOS MDM 进程可以替换Microsoft的 Defender 托管配置文件。

在某些情况下,全局管理员需要在所有或某些托管设备上重启 Defender。 通常,可以通过创建并运行 JAMF 的策略来完成,该策略在远程设备上运行脚本, (或类似操作的其他 MDM 供应商。)

为了避免标记这些策略启动的操作,Microsoft Defender 会检测 JAMF 和 Intune 的这些 MDM 策略进程,并允许对其进行篡改操作。 同时,如果从本地终端启动,则篡改防护会阻止同一脚本重启 Microsoft Defender。

但是,这些策略运行进程特定于供应商。 虽然 Microsoft Defender 为 JAMF 和 Intune 提供内置排除项,但无法为所有可能的 MDM 供应商提供这些排除项。 相反,全局管理员可以添加自己的排除项来防篡改。 排除只能通过 MDM 配置文件完成,不能通过本地配置完成。

为此,需要首先找出运行策略的 MDM 帮助程序进程的路径。 可以通过遵循 MDM 供应商的文档执行此操作。 还可以启动篡改测试策略,在安全门户中获取警报,检查发起攻击的进程层次结构,并选择类似于 MDM 帮助程序候选的进程。

确定进程路径后,对于如何配置排除项,几乎没有选择:

  • 通过路径本身。 这是你已有此路径的最简单 () 和最不安全的方法,换句话说,不建议这样做。
  • 通过运行 codesign -dv --verbose=4 path_to_helper “查找标识符”和“TeamIdentifier” (,从可执行文件(TeamIdentifier 或签名标识符)获取签名 ID,后者不适用于 Apple 自己的工具。)
  • 或者使用这些属性的组合。

示例:

codesign -dv --verbose=4 /usr/bin/ruby
Executable=/usr/bin/ruby
Identifier=com.apple.ruby
Format=Mach-O universal (x86_64 arm64e)
CodeDirectory v=20400 size=583 flags=0x0(none) hashes=13+2 location=embedded
Platform identifier=14
VersionPlatform=1
VersionMin=852992
VersionSDK=852992
Hash type=sha256 size=32
CandidateCDHash sha256=335c10d40db9417d80db87f658f6565018a4c3d6
CandidateCDHashFull sha256=335c10d40db9417d80db87f658f6565018a4c3d65ea3b850fc76c59e0e137e20
Hash choices=sha256
CMSDigest=335c10d40db9417d80db87f658f6565018a4c3d65ea3b850fc76c59e0e137e20
CMSDigestType=2
Executable Segment base=0
Executable Segment limit=16384
Executable Segment flags=0x1
Page size=4096
Launch Constraints:
  None
CDHash=335c10d40db9417d80db87f658f6565018a4c3d6
Signature size=4442
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
Signed Time=Apr 15, 2023 at 4:45:52 AM
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=64

配置 首选项,例如 JAMF:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>tamperProtection</key>
    <dict>
      <key>enforcementLevel</key>
      <string>block</string>
      <key>exclusions</key>
      <array>
        <dict>
          <key>path</key>
          <string>/usr/bin/ruby</string>
          <key>teamId</key>
          <string/>
          <key>signingId</key>
          <string>com.apple.ruby</string>
          <key>args</key>
          <array>
            <string>/usr/local/bin/global_mdatp_restarted.rb</string>
          </array>
        </dict>
      </array>
    </dict>
  </dict>
</plist>

请注意,将脚本解释器 ((如 Ruby)从上面的示例中排除) 而不是编译的可执行文件是不安全的,因为它可以运行 任何脚本,而不仅仅是全局管理员使用的脚本。

为了最大程度地降低风险,我们建议使用 extra args 来仅允许特定脚本与脚本解释器一起运行。 在上面的示例中,仅 /usr/bin/ruby /usr/local/bin/global_mdatp_restarted.rb 允许重启 Defender。 但是,例如, /usr/bin/ruby /Library/Application Support/Global Manager/global_mdatp_restarted.rb 甚至 /usr/bin/ruby /usr/local/bin/global_mdatp_restarted.rb $USER 不允许。

警告

始终使用最严格的条件来防止意外攻击!

排查配置问题

问题:篡改保护报告为禁用

如果运行命令 mdatp health 报告篡改保护已禁用,即使已启用它并且自载入以来已超过一小时,则可以通过运行以下命令来检查是否具有正确的配置:

mdatp health --details tamper_protection
tamper_protection                           : "audit"
exclusions                                  : [{"path":"/usr/bin/ruby","team_id":"","signing_id":"com.apple.ruby","args":["/usr/local/bin/global_mdatp_restarted.rb"]}] [managed]
feature_enabled_protection                  : true
feature_enabled_portal                      : true
configuration_source                        : "local"
configuration_local                         : "audit"
configuration_portal                        : "block"
configuration_default                       : "audit"
configuration_is_managed                    : false
  • tamper_protection有效 模式。 如果此模式是你打算使用的模式,则你已设置好。
  • configuration_source 指示如何设置篡改防护强制级别。 它必须与你配置篡改防护的方式匹配。 (如果通过托管配置文件设置其模式,并 configuration_source 显示不同的内容,则很可能配置了配置文件。)
    • mdm - 它通过托管配置文件进行配置。 只有全局管理员可以通过更新配置文件来更改它!
    • local - 配置了 mdatp config 命令
    • portal - 安全门户中设置的默认强制级别
    • defaults - 未配置,使用默认模式
  • 如果 feature_enabled_protection 为 false,则不会为组织启用篡改防护, (Defender 未报告“许可”)
  • 如果 feature_enabled_portal 为 false,则尚未启用通过安全门户设置默认模式。
  • configuration_localconfiguration_portal指示 configuration_default 将使用的模式( 如果使用了相应的配置通道)。 (例如,可以通过 MDM 配置文件将篡改防护配置为“阻止”模式,并 configuration_default 告知你 audit。它仅意味着 ,如果删除 配置文件,并且未使用 mdatp config 或通过安全门户设置模式,则它使用默认模式,即 audit.)

注意

需要检查 Microsoft Defender 的日志,以获取版本 101.98.71 之前的相同信息。 下面是一个示例。

$ sudo grep -F '[{tamperProtection}]: Feature state:' /Library/Logs/Microsoft/mdatp/microsoft_defender_core.log | tail -n 1

提示

想要了解更多信息? 在技术社区中与 Microsoft 安全社区互动: Microsoft Defender for Endpoint 技术社区