导语:保护Windows工作站免受现代的网络攻击威胁是一件非常具有挑战性的事情。 似乎每个星期攻击者们总有一些新的方法用来入侵系统并获取用户凭据。

保护Windows工作站免受现代的网络攻击威胁是一件非常具有挑战性的事情。 似乎每个星期攻击者们总有一些新的方法用来入侵系统并获取用户凭据。

创建一个非常安全的Windows工作站的最佳方法是下载Microsoft安全合规管理器(当前版本为4.0),并在要为其创建安全基线GPO的操作系统版本下选择“安全合规”选项。 查看选项,根据需要进行更改,并导出为GPO备份(文件夹)。 创建新的并且为空的GPO然后从SCM GPO备份中导入设置。 然后将新创建的GPO应用到你的工作站。 如果你已配置为最小的安全设置,这将改进你的工作站安全基线,特别是如果你还没有创建现有的工作站GPO。

1487923128593857.png

作为开发Windows工作站安全基线GPO的一部分,有几个大型组织花费了一些时间和金钱确定了什么才是“安全”:

DoD STIG:http://iase.disa.mil/stigs/os/windows

DoD Windows 10安全主机基准文件:https://github.com/iadgov/Secure-Host-Baseline

澳大利亚信息安全手册:http://www.asd.gov.au/infosec/ism/index.htm

CIS基准:https://benchmarks.cisecurity.org/downloads/browse/?category=benchmarks.os.windows

用于通过组策略控制设置的Microsoft管理模板如下:

Windows 7和Windows Server 2008 R2:https://www.microsoft.com/en-us/download/details.aspx?id=6243

Windows 8.1和Windows Server 2012 R2:https://www.microsoft.com/en-us/download/details.aspx?id=43413

Windows 10(v1607)和Windows Server 2016:https://www.microsoft.com/en-us/download/details.aspx?id=53430

Office 2010:https://www.microsoft.com/en-us/download/details.aspx?id=18968

Office 2013:https://www.microsoft.com/en-us/download/details.aspx?id%20=%2035554

Office 2016:https://www.microsoft.com/en-us/download/details.aspx?id=49030

请注意,这些链接可能会随着更新而更改。

Windows及Windows Server的组策略设置参考https://www.microsoft.com/en-us/download/details.aspx?id=25250

Windows 10(v1607)和Windows Server 2016安全配置基线设置:https://blogs.technet.microsoft.com/secguide/2016/10/17/security-baseline-for-windows-10-v1607-anniversary-edition-和-windows-server-2016%20/

如果你已经使用一个GPO配置了工作站的安全性,你还可以使用Microsoft的策略分析器将你现有的GPO与SCM生成的“安全合规性”的GPO进行比较。

除了标准的“Windows安全事件”之外,还存在许多遗留和经常未使用的组件,它们从早期的Windows版本中遗留下来,而现有的版本通常不再需要,但由于考虑到兼容性的原因而继续保留。

本文涵盖了许多此类以及其他一些很不错的安全实践和配置。

保护Windows工作站:

部署免费/几乎免费的Microsoft工具以提高Windows安全性:

部署Microsoft AppLocker以锁定可以在系统上运行的文件。
使用推荐的软件设置部署当前Windows版本的EMET。
部署LAPS对本地管理员(RID 500)的密码进行管理。
强制组策略在“刷新”期间重新应用设置。

 禁用Windows旧版本中通常不会使用到的功能:

禁用Net会话枚举(NetCease)
禁用WPAD
禁用LLMNR
禁用Windows浏览器协议
禁用NetBIOS
禁用Windows脚本宿主(WSH)并且控制脚本文件扩展名
部署禁用Pass-The-Hash的安全补丁(KB2871997)。
阻止本地管理员(RID 500)帐户通过网络进行身份验证
确保WDigest已禁用
从Windows 8.1和Windows Server 2012 R2中移除SMB v1

 Windows 10和Windows 2016的安全配置:

Windows 10&2016系统映像配置
阻止不受信任的字体
启用凭据保护
配置设备保护

应用程序安全设置:

禁用Microsoft Office宏
禁用Microsoft Office OLE组件

其他组策略安全设置

将Lanman验证配置为安全设置
配置未认证的RPC客户端的限制设置
配置NTLM会话安全

使用免费或几乎免费的Microsoft工具提高Windows安全性

部署AppLocker以锁定可以在系统上运行的文件

Microsoft AppLocker为Windows提供了开箱即用的应用程序白名单功能。

强烈建议在那些你需要设置高级别安全性的Windows工作站和服务器上使用AppLocker锁定可以在系统上执行的操作。

AppLocker可用于将应用程序执行限制为特定的已批准的应用程序。这里有几个我需要推荐的有关于AppLocker的不同设置阶段:

阶段1:审核模式 - 审核用户的所有执行操作及其运行的路径。这个阶段的日志记录模式会提供有关企业中运行的程序的信息,并将此数据记录到事件日志中。
阶段2:“黑名单模式” - 配置AppLocker以阻止执行用户的主目录,配置文件路径和用户对其具有写入和访问权限的临时文件夹位置(例如c:\temp)中的任何文件。
阶段3:“文件夹白名单模式” - 通过添加新规则以允许执行特定文件夹(如c:\Windows和c:\Program Files)中的文件,这种AppLocker配置是在阶段2的基础上进行构建。
阶段4:“应用程序白名单” - 列出企业环境中正在使用的所有应用程序,并通过路径和/或文件哈希(优先使用数字签名)将这些应用程序列入白名单。这需要确保只有经过批准的企业或组织的应用程序才会执行。

AppLocker组策略创建和管理的步骤:

计算机配置\策略\ Windows设置\安全设置\应用程序控制策略\ AppLocker

查看AppLocker策略设计指南以获取部署帮助。

此方案预计的努力水平:中等偏上

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

使用推荐的软件设置部署当前Windows版本的EMET

Microsoft增强型缓解体验工具包(EMET)有助于防止应用程序漏洞被利用(包括减少许多0day)。它是一个免费的产品,能够有效地“包装” 热门的应用程序,所以当尝试漏洞利用时,尝试的行为将被阻断在“包装器”中,而不会接触到操作系统。

有几个用于部署的配置方式:

默认配置。
推荐软件。
热门软件。

至少,使用默认配置方式部署EMET会强化核心应用程序。

使用EMET管理模板(EMET.admx和EMET.adml)通过GPO启用EMET管理,可在安装了EMET的系统上的<系统盘符> \Program Files\EMET\Deployment\Group Policy File

文件夹中找到。将这些复制到Active Directory GPO中央存储

通过组策略自定义EMET配置

最好对应用程序进行测试,因为一些“更安全”的设置可能会导致程序崩溃如Outlook和Chrome以及一些安全软件。

请注意,微软EMET将在2018年终止生命(EOL),因为它是由微软开发的,它被发布的目的是帮助改进Windows安全的某些元素。 Windows 10已经极大的提升了安全性,超过了大多数EMET的安全增强功能。

此方案预计的努力水平:中等

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

使用LAPS对本地管理员(RID 500)的密码进行管理

Microsoft本地管理员密码解决方案(LAPS)为Active Directory中的每台计算机提供了自动对本地管理员帐户进行管理的功能(LAPS特别适用于工作站的本地管理员密码管理)。 安装在每台计算机上的客户端组件会生成随机的密码,并更新与本机相关联的AD计算机帐户上的LAPS密码属性,并在本地设置密码。 LAPS配置通过组策略管理,该策略需要提供密码复杂性,密码长度,密码更改的本地帐户名称,密码更改频率等设置值。

点此查看LAPS部署信息

此方案预计的努力水平:低到中等

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

强制组策略在“刷新”期间重新应用设置

默认的组策略应用程序会在客户端上“刷新组策略”,虽然这实际上并不意味着重新应用GPO设置。默认情况下,只有在刷新之前修改GPO才会重新应用GPO的设置。这意味着可以通过计算机的注册表(通常具有管理员权限)撤消GPO强制设置,并且未经授权的设置将一直保持到GPO被修改(如果有的话),之后才会重新应用GPO设置。

通过测试后发现,更改组策略默认设置以在每次刷新时重新应用GPO设置 – “即使组策略对象未更改也会进行处理”。这对客户端有潜在的性能损失,但是能确保所有的GPO强制设置重新应用生效。

计算机配置,策略,管理模板,系统,组策略,配置安全策略处理:设置为启用。

同时也要选中“即使组策略对象未更改也进行处理”的选择框,

同样建议为以下每个配置相同的设置:

计算机配置,策略,管理模板,系统,组策略,配置注册表策略处理
计算机配置,策略,管理模板,系统,组策略,配置脚本策略处理
以及根据需要的任何其他的策略设置。

1487924743130686.jpg

启用LSA保护/审核模式

从Windows 8.1 / Windows Server 2012 R2开始,可以添加注册表项来启用LSA保护,以防止未签名的代码与LSASS(如Mimikatz)进行交互。在启用LSA保护之前,最佳实践是启用LSA审核模式以了解哪些代码可能与LSASS交互,否则将被阻止。

Microsoft的“配置额外的LSA保护”中有如下描述:

LSA 包含本地安全机构服务器服务 (LSASS) 进程,可以验证用户的本地和远程登录,并强制本地安全策略。Windows 8.1 操作系统为 LSA 提供附加保护,以防止未受保护的进程读取内存及注入代码。 这为 LSA 存储和管理的凭据提供了更高的安全性。 LSA 的受保护进程设置可以在 Windows 8.1 中配置,但不能在 Windows RT 8.1 中配置。 将此设置与安全启动结合使用时,便可以实现附加保护,因为禁用 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 注册表项不起作用。

插件或驱动程序的受保护进程要求

要使 LSA 插件或驱动程序以受保护进程的形式成功加载,它必须符合以下条件:

1.   签名验证

保护模式要求加载到 LSA 中的任何插件都已使用 Microsoft 签名进行数字签名。 因此,未签名的或者未使用 Microsoft 签名进行签名的任何插件都无法加载到 LSA 中。 这些插件的示例包括智能卡驱动程序、加密插件和密码筛选器。

用作驱动程序(例如智能卡驱动程序)的 LSA 插件需要使用 WHQL 认证进行签名。 有关详细信息,请参阅 WHQL 版本签名(Windows 驱动程序)。

不需要经历 WHQL 认证过程的 LSA 插件必须使用 LSA 的文件签名服务进行签名。

2.   遵守 Microsoft 安全开发生命周期 (SDL) 过程指导

所有插件必须符合适用的 SDL 过程指导。 有关详细信息,请参阅 Microsoft 安全开发生命周期 (SDL) 附录。

即使插件已使用 Microsoft 签名正确地进行签名,但如果不符合 SDL 过程,也可能会导致加载插件失败。

建议的做法

在广泛部署该功能之前,请使用以下列表来全面测试是否已启用 LSA 保护:

识别组织中使用的所有 LSA 插件和驱动程序。 这包括非 Microsoft 驱动程序或插件(例如智能卡驱动程序和加密插件),以及内部开发的、用于强制密码筛选器或密码更改通知的所有软件。
确保使用 Microsoft 证书对所有 LSA 插件进行数字签名,以防止插件加载失败。
确保正确签名的所有插件都能成功加载到 LSA 中,并且能按预期工作。
使用审核日志来识别无法以受保护进程运行的 LSA 插件和驱动程序。
如何识别无法以受保护进程运行的 LSA 插件和驱动程序
本部分所述的事件位于 Applications and Services Logs\Microsoft\Windows\CodeIntegrity 下的运行日志中。 这些事件可帮助你识别由于签名方面的原因而无法加载的 LSA 插件和驱动程序。 若要管理这些事件,可以使用 wevtutil 命令行工具。 有关此工具的信息,请参阅 Wevtutil [Vista]。

在选择加入之前:如何识别 lsass.exe 加载的插件和驱动程序?

可以使用审核模式来识别 LSA 保护模式下无法加载的 LSA 插件和驱动程序。 在审核模式下,系统将生成事件日志,标识在启用 LSA 保护的情况下无法在 LSA 下加载的所有插件和驱动程序。 将会记录消息,而不阻止这些插件或驱动程序。

在一台计算机上通过编辑注册表为 Lsass.exe 启用审核模式的步骤

1.打开注册表编辑器 (RegEdit.exe),然后导航到位于以下位置的注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe。
2.将该注册表项的值设置为 AuditLevel=dword:00000008.。
3.重新启动计算机。

分析事件 3065 和事件 3066 的结果。

事件 3065:此事件记录:代码完整性检查已确定某个进程(通常为 lsass.exe)尝试加载特定的驱动程序,但该驱动程序不符合共享区域的安全要求。 但是,由于所设置的系统策略的原因,允许加载相应的映像。

事件 3066:此事件记录:代码完整性检查已确定某个进程(通常为 lsass.exe)尝试加载特定的驱动程序,但该驱动程序不符合 Microsoft 签名级别要求。 但是,由于所设置的系统策略的原因,允许加载相应的映像。

此方案预计的努力水平:低到中等

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

禁用Windows旧版和通常未使用的功能:

禁用Net会话枚举(NetCease)

默认情况下,Windows计算机允许任何经过身份验证的用户枚举其网络会话。这意味着攻击者可以枚举托管主目录的文件共享或域控制器的网络会话,以查看谁连接到SYSVOL(应用组策略),并确定每个用户和管理员帐户登录到哪个工作站。 Bloodhound广泛地使用此功能来映射网络中的凭证。

禁用网络会话枚举将会删除任何用户枚举网络会话信息(Recon-探测)的功能。

这些设置也可以通过组策略进行部署:

在参考工作站上运行NetCease PowerShell脚本。
打开 组策略管理控制台。右键单击应包含新首选项条目的组策略对象(GPO),然后单击编辑。
在计算机配置下的控制台树中,展开首选项文件夹,然后展开Windows设置文件夹。
右键单击注册表节点,指向“新建”,然后选择“注册表向导”。
选择存在所需注册表设置的参考工作站,然后单击下一步。
浏览到HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ DefaultSecurity \
并选中要从中创建注册表首选项条目的“SrvsvcSessionInfo”复选框。仅当您要为键而不是键中的值创建注册表项时,才选中键的复选框。
单击“完成”。你所选择的设置会在注册表向导值集合中显示为首选项。

此方案预计的努力水平:低到中等

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

禁用WPAD

Web代理自动发现协议(WPAD)是一种由客户端使用的方法,用于使用DHCP和/或DNS发现方法来定位配置文件的URL。一旦配置文件的检测和下载完成,就可以执行这个配置文件,以确定指定URL的代理。

禁用WPAD会使得用于被动窃取证书的方法以及Responder程序不可用。仅在环境中未使用时禁用。

通过部署以下选项通过组策略禁用WPAD:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Wpad
新建名为“WpadOverride”的DWORD(32位值)类型,并设置值为“1”
禁用服务“WinHTTP Web代理自动发现服务”
计算机配置/策略/ Windows设置/安全设置/系统服务

注意:

通过安装Microsoft修补程序KB3165191(MS16-077)可以部分缓解WPAD问题。

此修补程序会强化WPAD进程和系统响应NetBIOS请求的时间。

此方案预计的努力水平:低到中等

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

禁用LLMNR

链路本地多播名称解析(LLMNR):

简而言之,当DNS分配无法解析名称时,链路本地多播名称解析(LLMNR)就会解析本地子网上的单个标签名称(如:COMPUTER1)。如果你处于Ad-Hoc网络场景或DNS条目不包括本地子网上的主机的情况下,这将非常有用。LLMNR应在不使用时禁用,因为禁用它会删除响应程序,此程序用于被动证书窃取。

组策略:计算机配置/管理模板/网络/ DNS客户端

将“关闭多播名称解析”设置为“已启用”

此方案预计的努力水平:低

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

禁用Windows浏览器协议(浏览器服务)

Windows NT使用浏览器服务(浏览器协议)发现和共享本地网络上的资源信息。该过程通过在网络上广播和收集该广播的结果来工作。网络广播有点像在一个充满着人的房间里每30秒去寻找一个朋友(一旦你发现你的朋友,你注意到他的位置,但过一会儿后可能会忘记,必须重新发现他的当前位置)。为了使该过程效率稍低,在每个子网上选择“主浏览器”,其跟踪资源并响应这些资源广播请求。在Windows域中,PDC充当域主浏览器,这些子网主浏览器将资源信息转发给这些子浏览器。使用Windows Browser广播的资源发现协议最终被Windows Internet名称服务(WINS)和Active Directory(含DNS)取代。尽管浏览器服务的必要性已降至几乎为零,但Windows中的计算机浏览器服务仍然在Windows 10和Windows Server 2012 R2中存在(虽然该服务在Windows 10 v1607和Windows Server 2016中已删除)。

Windows浏览器协议是Responder程序用于被动窃取凭据的另一种方法。

Windows计算机浏览器服务设置为手动启动,但通常会在Windows启动时启动。

1487924964822659.png

禁用Windows浏览器协议的简单方法是禁用计算机浏览器服务。

1487925158111388.png

在Windows 10 v1607(又名“周年更新”)和Windows Server 2016中,计算机浏览器服务已删除,不再可用。

555.png

通过组策略禁用计算机浏览器:

打开组策略管理控制台。 右键单击需要修改的组策略对象(GPO),然后单击编辑。
在计算机配置下的控制台树中,展开策略文件夹,展开Windows设置,展开安全设置,然后展开系统服务文件夹。
向下滚动到“计算机浏览器”服务,右键单击服务名称,然后选择属性。
选中“定义此策略设置”复选框,选择“禁用”作为服务启动模式,单击“确定”。

注意:组策略首选项也可用于管理服务。

此方案预计的努力水平:低

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

禁用NetBIOS

NetBIOS是Windows使用的最早的协议之一。

NetBIOS over TCP / IP由RFC 1001和RFC 1002指定。Netbt.sys驱动程序是支持TDI接口的内核模式组件。服务(例如工作站和服务器)直接使用TDI接口,而传统的NetBIOS应用程序通过Netbios.sys驱动程序将其调用映射到TDI调用。使用TDI调用NetBT是一个更困难的编程任务,但可以提供更高的性能和免受历史NetBIOS限制。

NetBIOS定义了软件接口和命名约定,而不是协议。 NetBIOS over TCP/IP通过TCP/IP协议提供NetBIOS编程接口,将NetBIOS客户端和服务器程序的范围扩展到IP互联网络,并提供与各种其他操作系统的互操作性。

Windows 2000工作站服务,服务器服务,浏览器,信使和NetLogon服务都是NetBT客户端,并使用TDI与NetBT通信。 Windows 2000还包括NetBIOS仿真器。仿真器从NetBIOS应用程序接收标准NetBIOS请求,并将其转换为等效的TDI功能。

Windows 2000使用NetBIOS over TCP/IP与以前版本的Windows NT和其他客户端(如Windows 95)进行通信。但是,Windows 2000重定向器和服务器组件现在支持直接托管与运行Windows 2000的其他计算机进行通信。使用直接托管,NetBIOS不用于名称解析。 DNS用于名称解析,Microsoft网络通信直接通过TCP发送,不使用NetBIOS头。通过TCP/IP的直接托管使用TCP端口445而不是NetBIOS会话TCP端口139。

大多数版本的Windows正在使用中,可以利用TCP/IP直接传输SMB,这意味着今天在网络上使用NetBIOS只是为了兼容老版本的系统。

2005年,Daniel Miessler写道

事实上,可以在Windows 2000 / XP机器上完全禁用基于TCP / IP的NetBIOS,因为这些新的操作系统(通过TCP/445)使SMB直接在TCP顶部传输而不是在NetBIOS上。 Microsoft称之为SMB的“直接托管”。

禁用NetBIOS需要一些工作来确定在网络上使用NetBIOS的方式和位置。禁用它会使得用于被动窃取证书的方法以及Responder程序不可用。

请注意,旧版系统(旧版本的Windows以及非Windows系统等)可能需要NetBIOS。

通过(Microsoft)DHCP禁用NetBIOS:

打开Microsoft DHCP。

在导航窗格中,展开SERVERNAME,展开Scope,右键单击Scope选项,然后单击配置选项。
单击高级选项卡,然后单击供应商类列表中的Microsoft Windows 2000选项。
确保在用户类列表中选择默认用户类。
单击以选中可用选项列下的001 Microsoft禁用Netbios选项复选框。
在数据输入区域中,在较长的输入框中输入0x2,然后单击确定。

参考:禁用NetBIOS

在基于Linux / Unix的DHCP服务器上,设置选项43会将DHCP配置为禁用NetBIOS

选项43 hex 0104.0000.0002

禁用计算机上的NetBIOS:

转到计算机上的所有网络设备的属性,TCPIPv4属性,高级,WINS,禁用TCP / IP上的NetBIOS

1487925544520783.png

此方案预计的努力水平:中等偏上

此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试。

源链接

Hacking more

...