Applocker:Windows网络保护之应用程序控制策略

摘要

应用白名单是一个很强大的技术,可以保护我们电脑免受未知的恶意软件的侵害,但它从来没有被真正地使用。其中一个主要原因是很难配置和维护,另一个则是有相当多的绕过技术,因此它无法很好的阻止那些被确定的攻击者。今天我们就来看看windows内置的AppLocker技术,它免费提供了一些基本功能。

应用白名单是一个很强大的技术,可以保护我们电脑免受未知的恶意软件的侵害,但它从来没有被真正地使用。其中一个主要原因是很难配置和维护,另一个则是有相当多的绕过技术,因此它无法很好的阻止那些被确定的攻击者。今天我们就来看看windows内置的AppLocker技术,它免费提供了一些基本功能。

配置

首先你需要启用相应的服务让AppLocker运行。

通过GPO操作:

Computer Configuration →Policies → Windows Settings → System Services

把Application Identity服务设置为自动:

Applocker:Windows网络保护之应用程序控制策略

然后去应用程序控制策略配置。

其实有两种类型的白名单是可以用的——以前的微软限制策略和新的AppLocker。

你可以用AppLocker设置以下内容:

可执行文件 MSI安装文件 脚本 动态链接库文件(dll)

然后,你要以下三个情况下设置允许或拒绝:

路径——很简单,必须从文件夹执行允许或拒绝。 文件的哈希值——要基于文件哈希来允许或拒绝。这个不是很有用,因为它需要计算哈希文件本身,你也不能就不依靠文件本身而停止这个MD5哈希。 发行商——需要基于数字证书发行来允许或拒绝执行。

你也可以在规则里添加额外的,比如你可以创建一个规则除了cmd.exe以外允许所有东西都放在C:/ Windows里。

用法

基本上AppLocker有两个方法——要么只允许白名单要么你允许除了黑名单上的所有。

白名单:

Applocker:Windows网络保护之应用程序控制策略

黑名单:

Applocker:Windows网络保护之应用程序控制策略

附加信息源是使用AppLocker最有效的。即使你不想使用AppLocker,你也可以配置并在监视模式下使用。这样,你就会得到在系统上执行的每个可执行文件、动态链接库和脚本的信息:

Applocker:Windows网络保护之应用程序控制策略

哈希隐藏在XML版本的日志里。不过,AppLocker使用SHA256 Authenticode而不是EXE and DLL的哈希文件,这对我们来说没什么用。你无法在VirusTotal或其他地方看到。

分块

如果你想分块,你需要记住:

你必须要注意如果你在规则里让发行商=微软就意味着Sysinternals之类的工具也同时启用了。 你在使用路径的时候需要对该文件夹的访问权限进行监视。如果任何人都可以写入你所信任的文件夹,AppLocker就会因为没有任何意义而被绕过了。 如果你试图给临时文件夹里的执行分块,AppLocker确实能按要求做到。但是它也会为你的用户打破很多东西,所以你需要先测试一下。你还需要把那些从AppData文件运行的软件列个白名单出来——比如Dropbox和Chrome。还有,别忘了给C:/temp, C:/ProgramData、回收站和其它几个可写的文件夹分块。就我个人而言,我觉得要找出所有需要从TEMP运行的软件工作量很大,不过你可以尝试一下。 本地管理员和AppLocker不能混起来用。如果你的用户有管理员权限,那么他们可以自己绕过任何你所设置的限制添加规则覆盖AppLocker的。

AppLocker的局限性

AppLocker无法控制内存中正在运行的。

它不能控制Office宏 它不能控制HTML应用程序

默认规则没有你想象的那样安全。一般情况下确实会认为用户无法写入Windows文件夹,但是有一些文件夹是允许用户写入从而轻松绕过默认规则。用这个脚本或Sysinternals的accesschk检查系统 – accesschk.exe -d -w paranoid C:/Windows/*

Applocker:Windows网络保护之应用程序控制策略

脚本不是严格控制的,所以如果解释器允许运行,你可以复制粘贴文本文件的命令并以这种方式运行脚本。我在三台不同的机器上做了测试,Windows 7的系统由于某种原因PowerShell脚本并没有在默认设置下分区,还不知道为什么。不过Windows 8.1能够如期运行。

绕过 AppLocker

还有不少AppLocker绕过导致AppLocker失效:

如果你有本地管理员权限,你可以添加一个本地规则允许所有的东西都可以执行。这就会重写所有基于域的策略。

你可以随便使用可写权限,随便将可执行文件移动到C:/Windows的某个地方。这都可以绕过所有的限制与默认规则。

Applocker:Windows网络保护之应用程序控制策略

你可以使用HTML应用程序(HTA)。这里有个关于使用PowerShell的HTA例:

Applocker:Windows网络保护之应用程序控制策略

你可以使用rundll32执行各种在这里提到的操作系统功能。甚至你还可以通过rundll32调用javascript代码并执行任意代码。臭名昭著的Poweliks恶意软件使用的就是这个方法,而且我记得最早看到是一个著名的APT团队把这个使用在自己的恶意软件。不过可惜的是它不能被分区。

Applocker:Windows网络保护之应用程序控制策略

你可以直接使用解释器(用于PowerShell和VBS的相同策略):

Applocker:Windows网络保护之应用程序控制策略

Applocker:Windows网络保护之应用程序控制策略

内存有效负载不会受到影响,所以如果没有保存到硬盘上就不会受到AppLocker的影响。于是,利用一些可信的进程或使用反射注入技术就可以做到绕过。

除非你有严格的DLL AppLocker规则,否则你就可以DLL劫持信任的应用程序。

还有一些需要特定的.NET应用程序的绕过,这里就不详写了。

缓解旁路绕过

一些绕过可以通过正确的配置来改善:

撤销Windows文件夹和Program Files里用户的可写权限或者把所有用户可写文件添加到Exceptions里。

Applocker:Windows网络保护之应用程序控制策略

Applocker:Windows网络保护之应用程序控制策略

给mshta.exe分块,可以终止HTML应用程序的执行。

Applocker:Windows网络保护之应用程序控制策略

如果你和你的用户都不使用任何需要用到powershell.exe,CMD.EXE,Cscript.exe的脚本,给它们分块也会起到作用,但如果需要,就不要这样做,因为可能会破坏到登录脚本或一些自动化的功能。注意一下,PowerShell可以通过任何网络应用程序直接调用,所以也给PowerShell的dll分块(C:/Program Files (x86)/Reference。 Assemblies/Microsoft/WindowsPowerShell/3.0/System.Management.Automation.dll)或给未知的可执行文件和powershell.exe分块。

虽然rundll32不能被分块,但如果你启用了命令行日志记录,你就可以很轻松地捕获,然后在JavaScript上注意rundll32.exe。不过我不清楚那些合法的行为会不会通过rundll32调用JavaScript。

*参考来源:dfir,FB小编江湖小吓编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: