智能应用控制和目录签名

智能应用控制和目录签名
智能应用控制和目录签名


智能应用控制

和目录签名




前言

智能应用控制和目录签名

Windows 11中新引入了一个新的安全机制叫做智能应用控制,本文将对其开启方法、工作原理和主要功能进行简单的介绍,最后会针对其系统运行软件的影响介绍一下目录签名。首先我们先来了解一下智能应用控制是什么。




01

智能应用控制简介


智能应用控制,英文为Smart App Control ,简称SAC,是一个新型应用执行控制功能,它是在Windows 11 22H2(2022年秋季)或更高版本增加的,它利用微软的智能云安全服务和Windows代码完整性功能来保护用户免受不可信或潜在危险代码的侵害,智能应用控制通过阻止恶意或不受信任的应用运行的方式,为系统添加了重要的保护。同时,智能应用控制还有助于阻止可能不需要的应用,这些应用可能会导致设备运行缓慢、显示广告、提供不需要的额外软件或者执行其他不期望的事情等等。

智能应用控制必须通过重新安装Windows 11 22H2及以上的操作系统才能正常使用,仅仅通过Windows系统升级的方式得到的智能应用控制默认为“关闭”模式,如下图所示:

智能应用控制和目录签名

而从“关闭”模式是无法切换为“打开”模式的,因此,通过系统升级方式是无法启用智能应用控制功能的。

接下来介绍一下如何打开智能应用控制的界面,首先,同时按Win键+I组合键打开Windows设置,进入隐私和安全性->打开Windows安全中心->应用和浏览器控制->智能应用控制设置,打开步骤如下图所示:

智能应用控制和目录签名

这样就可以打开智能应用控制的界面了,其界如下图所示:

智能应用控制和目录签名

从上图可以看到智能应用控制默认为“评估”模式,下面分别介绍一下这三种模式的功能以及切换关系。

首先是“评估”模式,在此模式下,Windows 将检查使用的应用,确定智能应用控制是否可以开启同时又不会引起其他问题,如果运行良好,智能应用控制将自动打开,但如果会引起问题,那么它会自行关闭。在“评估”模式下,智能应用控制不会阻止任何应用的运行。

其次是“打开”模式,用户可以手动从“评估”模式切换到“打开”模式,但这是一个单向开关,如果用户想再切回到“评估”模式,那么就只能通过重新安装操作系统或重置操作系统才行。当切换到此模式后,智能应用控制的功能就被打开了,它的具体功能我们后面再做介绍。“打开”模式如下图所示:

智能应用控制和目录签名

最后是“关闭”模式,用户可以手动从“评估”模式或“打开”模式切换到“关闭”模式,但是“关闭”模式是单向的,也就是说,此模式无法再切换到“评估”模式或“打开”模式,如果用户想再切回到“评估”模式,那么就只能通过重新安装操作系统或重置操作系统才行,因为在这种模式下,系统无法保证在智能应用控制处于关闭状态下的系统完整性。在“关闭”模式下,智能应用控制不会阻止任何应用的运行。“关闭”模式如下图所示:

智能应用控制和目录签名

介绍完智能应用控制三种模式后,接下来介绍一下智能应用控制的具体功能,其功能必须是处于“打开”模式下才能生效。





02

智能应用控制功能


智能应用控制使用微软的智能云安全服务进行安全检测,并使用Windows的代码完整性功能来识别和阻止不受信任(未签名)或潜在危险的二进制文件或应用程序。当启动一个二进制文件或应用程序时,智能应用控制首先会通过智能云安全服务检测此二进制文件或应用程序的安全性,如果智能云安全服务无法确定其安全性,那么,智能应用控制接下来通过Windows的代码完整性功能来检查此二进制文件或应用程序是否具有有效的签名,如果签名无效,那么系统就会阻止此二进制文件或应用程序的启动,从而确保系统的安全。从上面的检测逻辑可以看出,智能云安全服务的检测比验证签名优先级更高,因此,即便是具备有效签名的恶意程序,如果当智能云安全服务检测到其不安全,依然会被智能应用控制阻止启动,同时,对于声誉良好的未签名应用程序,比如一些知名的开源程序(OpenSSL.exe、Newtonsoft.Json.dll等),智能云安全服务会判定其为安全的,从而可以正常启动。下面我们通过一些例子来具体看一下智能应用控制的功能。


例1:双击启动不安全的exe程序

通过双击运行的方式启动不安全的exe程序时,在桌面上会弹出警示框,如下图所示:

智能应用控制和目录签名


例子2:通过powershell或cmd启动不安全的exe程序

通过powershell或cmd启动不安全的exe程序时,在命令提示窗口输出警告性文字,同时在桌面右下角弹出提示框,如下图所示:

智能应用控制和目录签名

以上拦截事件都可以在Windows事件查看器中找到,路径为:应用程序和服务日志->Microsoft->Windows->CodeInterity,下图为例子1对应的拦截事件。

智能应用控制和目录签名







03

目录签名


前文中提到,如果智能云安全服务无法确定二进制文件或应用程序安全性,那么智能应用控制接下来会通过Windows的代码完整性功能,来检查此二进制文件或应用程序是否具有有效的签名,如果没有,那么系统就会阻止此二进制文件或应用程序的启动,但是这些被阻止的二进制文件或应用程序本身可能是安全的,也就是说智能应用控制也会存在误报问题。而这些程序通常是没有有效的数字签名的,因此首先想到的就是给这些被误拦截的文件签名,但是在某些情况下无法对此类文件进行直接签名,比如某些开源二进制文件或者其他公司的二进制文件,因为直接签名这类文件可能会对文件归属权产生影响。那如何解决这些文件的签名问题呢,这就用到了目录签名的方法,简单来说就是不要把数字签名签到文件本身,而是签到.cat文件(目录文件)上。下面具体来说说什么是目录签名以及使用方法。

cat即英文单词“catalog”的缩写,中文为“目录”的意思,.cat文件为目录文件,此文件可以用作任意文件集合的数字签名,因为目录文件就是这些文件哈希的集合,在目录文件中的每个哈希对应于这些文件中的某一个文件,Windows通过使用这些哈希来验证这些文件是否被篡改。双击打开一个cat文件,其安全目录信息如下图所示:

智能应用控制和目录签名

接下来介绍一下如何生成.cat文件,首先创建目录定义文件.cdf (catalog definition file),示例如下:

[CatalogHeader]Name=cattest.cat                 # 目录文件的名称PublicVersion=0x0000002          # 公共版本号CatalogVersion=2                 # 目录文件版本号HashAlgorithms=SHA256            # 使用的哈希算法EncodingType=0x00010001          # 编码类型CATATTR1=0x10010001:OSAttr:2:6.0 # 目录文件的属性[CatalogFiles]<hash>test_files/Test.exe=test_files/Test.exe  #文件1<hash>test_files/Test.dll=test_files/Test.dll  #文件2

下面对每个字段进行说明,首先是CatalogHeader字段,其包含目录文件的元数据和配置信息,这些信息定义了目录文件的基本属性,如名称、版本和使用的哈希算法等,详细说明如下:

Name: 目录文件的名称,用户可以自定义。

PublicVersion: 公共版本号,通常不需要更改。

CatalogVersion: 目录文件版本号,可以根据需要设置。

HashAlgorithms: 指定使用的哈希算法,建议使用更安全的 SHA256。

EncodingType: 编码类型,通常使用默认值 0x00010001。

CATATTR1: 目录文件的属性,可以根据需要添加多个属性。


接着是CatalogFiles字段,其用于列出需要包含在目录文件中的文件,这些文件会被计算哈希并记录在目录文件中,以便后续验证其完整性,每个文件都会有一个对应的哈希值,确保文件内容未被篡改,格式为< hash >文件路径=文件路径,详细说明如下:

<HASH>:这是一个占位符,表示将使用在CatalogHeader中指定的哈希算法(例如SHA256)来计算文件的哈希值。

文件路径(左侧):这是文件在磁盘上的相对路径或绝对路径。

文件路径(右侧): 这是目录文件中记录的文件路径,通常与左侧的路径相同。


接着使用makecat工具和定义好的cattest.cdf文件生成对应的cattest.cat文件,命令为makecat -v cattest.cdf,生成的cat文件如下图所示:

智能应用控制和目录签名

接着使用signtool给生成的cat文件签名,签名方法和给普通二进制文件签名一样,参考命令signtool sign /v /f MyCert.pfx /p MyPassword /fd SHA256 cattest.cat

签完名之后,接着使用signtool工具安装cat文件,命令为signtool catdb -v cattest.cat,此命令会把cattest.cat文件安装到“%SystemRoot%System32CatRoot{F750E6C3-38EE-11D1-85E5-00C04FC295EE}”目录下,如下图所示:

智能应用控制和目录签名

最后,可以使用signtool 来验证一下目标文件签名是否成功,命令参考signtool verify -v -pa -a target_file。由于我没有有效的签名证书,因此这里使用微软的regedt32.exe工具为例来演示验签的结果,首先看一下这个文件的属性,其文件本身是没有数字签名的,如下图所示:

智能应用控制和目录签名

接着使用“signtool verify -v -pa -a C:WindowsSystem32regedt32.exe”命令来验证其目录签名,结果如下:

智能应用控制和目录签名

从signtool输出的结果中可以看到,regedt32.exe目录签名对应的目录文件为“Microsoft-Windows-Client-Features-Package0213~31bf3856ad364e35~amd64~~10.0.22621.3880.cat”,签名结果为“已签名”,再来看一下此cat文件的签名信息,如下图所示:

智能应用控制和目录签名

以上对cat文件签名、安装和验签都用的了signtool工具,此工具的详细使用说明读者可自行查阅资料,此处不再赘述。




总结

智能应用控制和目录签名

智能应用控制这个新安全机制的引入一方面增加了系统的安全性,但同时也会对一些未签名文件的使用造成影响,针对那些无法直接使用数字签名证书进行签名的文件,可以使用目录签名的方式来进行签名,这样既可以避免因为直接签名而导致文件所有权转变的风险,又避免了在开启了智能应用控制的系统上被误拦截的问题。




智能应用控制和目录签名

参考

https://support.microsoft.com/en-us/topic/what-is-smart-app-control-285ea03d-fa88-4d56-882e-6698afdb7003




往期精彩合集



● 前后端分离架构下 利用SpringBoot确保接口安全性

● 联想全球安全实验室热招AI安全领域精英,欢迎志同道合的小伙伴加入!

● 浅谈如何防止他人恶意刷接口

● 联想全球安全实验室受邀参加XCon2024安全技术峰会,应“适者生存”的丛林法则,分享《近源渗透之攻守道》

● 探索FPGA的xclbin文件格式

● Web安全之SRI(Subresource Integrity子资源完整性)详解

● 联想GIC全球安全实验室受邀参加行业研讨会,分享红蓝对抗思想在产品安全中的应用

● 联想全球安全实验室受邀参加2024年AIGC数据应用大会,共谋数据合规与网络安全应对策略

● CVSS漏洞评分标准的前世今生

● 基于LLM的被动扫描工具:burpGpt


联想GIC全球安全实验室(中国)

[email protected]


智能应用控制和目录签名

原文始发于微信公众号(联想全球安全实验室):智能应用控制和目录签名

版权声明:admin 发表于 2024年9月20日 下午6:03。
转载请注明:智能应用控制和目录签名 | CTF导航

相关文章