AppLocker
1. 什么是AppLocker
AppLocker 是 Microsoft 提供的一种 应用程序控制策略,它允许系统管理员通过定义规则来控制用户和组可以运行哪些应用程序。AppLocker 是 Windows 的一部分,通常用于增强安全性和防止未经授权的软件运行。比如限制程序和脚本只能从特定的目录下运行(如 C:\Windows\*或 C:\Program Files\*),但这些目录通常都是需要高权限才能写入的
2. AppLocker 的主要功能
- 限制应用程序运行:管理员可以通过规则阻止或允许特定的可执行文件(如
.exe)、脚本(如.ps1)、安装包(如.msi)、DLL、以及 Windows 应用商店应用的运行。 - 基于规则的控制:规则可以根据文件路径、文件哈希值或发行者证书进行定义,确保只有经过验证的应用可以运行。
- 提高安全性:有效防止恶意软件、未知程序或未经授权的工具运行,降低系统受到攻击的风险。
- 审核模式:AppLocker 提供了一个审核模式,允许管理员在不影响用户的情况下测试规则设置,查看规则的潜在影响。
2.1. 文件类型
受限制的文件类型
可执行文件:.exe,.comWindows 安装文件:.msi,.msp脚本:.js、.ps1、.vbs、.cmd、.bat打包应用:.aappx动态链接库:.dll
但是DLL通常不受到限制,因为处于系统性能考虑,在开启此功能集合的时候,微软会有警告提示
每种文件类型都有 Microsoft 提供的默认规则集。例如, executable files 的默认规则集包含以下三条规则:
Everyone可以运行位于%PROGRAMFILES%\*的executable filesEveryone可以运行位于%WINDIR%\*的executable filesAdministrators可以运行位于任何位置的可执行文件
尝试运行不被 AppLocker 规则集允许的文件会导致以下错误消息之一
3. 枚举AppLocker
因为一个域中的AppLocker策略可以被配置为本地和跨域的策略,所以这里直接看最后的effective 策略即可
#枚举applocker
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
或者
Get-AppLockerPolicy -Effective -Xml
<SNIP>
<FilePathRule Id="921cc481-6e17-4653-8f75-050b80acca20" Name="(Default Rule) All files located in the Program Files folder" Description="Allows members of the Everyone group to run applications that are located in the Program Files folder." UserOrGroupSid="S-1-1-0" Action="Allow"> <Conditions>
<FilePathCondition Path="%PROGRAMFILES%\*" />
</Conditions>
</FilePathRule>
<SNIP>
默认规则之一: 允许 Everyone group (SID: S-1-1-0) 的成员在 %PROGRAMFILES%\*中执行 executable files
不执行文件的情况下测试文件能否运行
PS C:\Users\max> Get-AppLockerPolicy -Effective | Test-AppLockerPolicy -Path C:\Tools\SysinternalsSuite\procexp.exe -User mike
FilePath PolicyDecision MatchingRule
-------- -------------- ------------
C:\Tools\SysinternalsSuite\procexp.exe DeniedByDefault
PS C:\Users\max> Get-AppLockerPolicy -Effective | Test-AppLockerPolicy -Path C:\Tools\SysinternalsSuite\procexp.exe -User john
FilePath PolicyDecision MatchingRule
-------- -------------- ------------
C:\Tools\SysinternalsSuite\procexp.exe Allowed (Default Rule) All files
4. 绕过方式
4.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
4.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"'
5. 用户可写文件
在某些情况下,文件可由用户写入,并可用于绕过 AppLocker。
一种已知的情况是 C:\windows\system32\AppLocker 下的 3 个文件,称为:
- AppCache.dat
- AppCache.dat.LOG1
- AppCache.dat.LOG2
这些文件可由将 AppLocker 部署到计算机后登录到计算机的第一个用户写入。更多详情请见:https://oddvar.moe/2019/05/29/a-small-discovery-about-applocker/



