导语:保护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会话安全
禁用Windows脚本宿主(WSH)文件扩展(以及执行代码的其他脚本)
攻击者的常见方法是在电子邮件或附加文档中嵌入或附加WSH关联文件以便用户下载执行。禁用环境中未使用的WSH扩展,方法是将它们与notepad.exe关联(这将强制文件在记事本打开而不是使用WSH进行执行)。如果企业组织需要使用批处理文件或VBScript,那么应在更改文件扩展名之前对其进行禁用评估。请注意,PowerShell文件(.ps1等)已经默认使用记事本打开。
WSH扩展:
1. JScript:.js,.jse [禁用不太可能导致问题,最好进行测试]。
2. Windows脚本文件:.wsf,.wsh [禁用不太可能导致问题,最好进行测试]。
3. VBScript:.vbs,.vbe [禁用可能会导致问题,如果仍然使用VBScript,最好进行测试]。
4. 应用程序的HTML代码:.hta [禁用不太可能导致问题,最好进行测试]。
5. CMD批处理:.bat,.cmd(注意.cmd)[禁用可能会导致问题,如果使用批处理文件,最好进行测试]。
6. 应用程序的Visual Basic代码:大多数VBA代码运行为另一种文件类型,不过.mod文件为视频文件[禁用不太可能导致问题,最好进行测试]。
禁用JScript&Wscript应该影响是最小的,最好还是在禁用VBScript之前进行测试。
以下注册表项可以禁用Windows脚本,但这样做不会在SCT或ActiveScriptEventConsumer中禁用它。
1. HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows Script Host Settings 2. 添加新的DWORD值“Enabled”并设置为“0”
要为特定用户禁用,可能需要执行以下操作:
1. HKEY_CURRENT_USER SOFTWARE Microsoft Windows Script Host Settings 2. 将“Enabled”的值设置为“0”
组策略:
可以通过GPO修改在脚本引擎中打开的脚本文件扩展名默认在记事本中打开:
1. 打开组策略管理控制台。右键单击应包含新首选项条目的组策略对象(GPO),然后单击编辑。 2. 转到用户配置>首选项>控制面板设置。 3. 右键单击文件夹选项,单击新建,打开方式。 4. 在“文件扩展名”中,输入扩展名,然后提供将打开此文件扩展名的程序路径。你也可以选择“设为默认值”。最后,单击“确定”。 5. 对每种文件类型重复此操作。
通过GPO在注册表中禁用Windows脚本宿主:
1. 在参考工作站上配置注册表设置
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows Script Host Settings Enabled =“0”
2. 打开组策略管理控制台。右键单击应包含新首选项条目的组策略对象(GPO),然后单击编辑。
3. 在计算机配置下的控制台树中,展开首选项文件夹,然后展开Windows设置文件夹。
4. 右键单击注册表节点,指向“新建”,然后选择“注册表向导”。
5. 选择存在所需注册表设置的参考工作站,然后单击下一步。
6. 浏览到HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows Script Host Settings
7. 并选中要从中创建注册表首选项条目的“已启用”复选框。仅当你要为注册表键而不是键中的值创建注册表项时,才选中注册表键的复选框。
8. 单击“完成”。你选择的设置将会在注册表向导值集合中显示为首选项。
此方案预计的努力水平:低到中高等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试
部署安全补丁(KB2871997)
确保Windows 8.1和Windows Server 2012 R2之前的所有Windows系统都安装了KB2871997补丁程序。此补丁程序通过Windows 8.1和Windows Server 2012 R2中安装的增强功能更新早期受支持的Windows版本。
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试
阻止本地“管理员”帐户通过网络进行身份验证
虽然两台不同计算机上的本地管理员(RID 500)帐户具有不同的SID,但如果他们具有相同的帐户名和密码,则其中一个的本地管理员帐户可以在另一台上登录认证为管理员。对于在多台计算机上其他重复的任何本地帐户也都是如此。
如果企业组织中的多个(或所有)工作站具有相同的帐户名和密码,则会出现安全问题,因为一个工作站被入侵就会导致所有的工作站均被入侵。
Windows 8.1和Windows 2012 R2及更高版本引入了两个新的本地SID:
1. S-1-5-113:NT AUTHORITY 本地帐户 2. S-1-5-114:NT AUTHORITY 本地帐户和Administrators组的成员
这些SID也可以通过安装KB2871997补丁程序在早期受支持的Windows版本中添加。
本地帐户网络访问行为可以通过组策略进行更改:
计算机配置 Windows设置本地策略用户权限分配
1. 拒绝从网络访问此计算机:本地帐户和Administrators组成员 2. 拒绝通过远程桌面服务登录:本地帐户和Administrators组的成员
请注意,使用“本地帐户”代替也提供相同的保护级别,以及阻止所有本地用户以这种方式进行身份验证。
此方案预计的努力水平:低到中等
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试
确保WDigest已禁用
WDigest支持Digest身份验证,即:
“Windows Server 2003中用于轻量级目录访问协议(LDAP)和Web身份验证的行业标准。摘要认证将凭证作为MD5散列或消息摘要通过网络传输。
在Windows 8.1和Windows Server 2012 R2之前,Wdigest已启用,它将用户的“明文”密码放在LSASS内存空间中,以支持基本的身份验证方案.Windows 8.1和Windows Server 2012 R2及更高版本的WDigest默认禁用,通过添加并设置以下注册表项:
HKEY_LOCAL_MACHINE System CurrentControlSet Control SecurityProviders Wdigest UseLogonCredential =“0”
早期支持的安装了KB2871997补丁程序的Windows版本会添加此注册表项,补丁程序会将UseLogonCredential从“ 1“设置为”0。启用 WDigest意味着像Mimikatz这样的工具可以提取用户的“明文”密码。下面是正在通过Wdigest进行身份验证的一些标志:
服务器事件ID 4624
n 安全ID:ADSECURITY JoeUser n 源网络地址:10.10.10.221 [工作站IP地址] n 验证包:WDigest
域控制器事件ID 4776
n 验证包:Wdigest n 登录帐户:JoeUSer n 源工作站:ADS-IIS01 [接受WDigest认证的服务器]
为了获得在DC上记录的WDIgest验证信息,请启用适当的审核:
计算机配置> Windows设置>安全设置>高级审核策略配置>审核策略>帐户登录>审核凭证验证>成功
通过组策略禁用WDigest:
1. 在参考工作站上配置注册表设置:
HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control SecurityProviders Wdigest UseLogonCredential =“0”
2. 打开组策略管理控制台。右键单击应包含新首选项条目的组策略对象(GPO),然后单击编辑。
3. 在计算机配置下的控制台树中,展开首选项文件夹,然后展开Windows设置文件夹。
4. 右键单击注册表节点,指向“新建”,然后选择“注册表向导”。
5. 选择存在所需注册表设置的参考工作站,然后单击下一步。
6. 浏览到HKEY_LOCAL_MACHINE System CurrentControlSet Control SecurityProviders Wdigest
7. 并选中要从中创建注册表首选项条目的“UseLogonCredential”复选框。仅当您要为键而不是键中的值创建注册表项时,才选中键的复选框。
8. 单击“完成”。你所选择的设置会在注册表向导值集合中显示为首选项。
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试
从Windows 8.1和Windows Server 2012 R2中删除SMB v1
SMB“作为网络协议[3]应用层的操作,主要用于提供对文件,打印机和串行端口的共享访问以及网络上节点之间的其他通信。它还提供了认证的进程间通信机制(IPC)。大多数SMB的使用涉及运行Microsoft Windows的计算机,在随后引入Active Directory之前,它被称为“Microsoft Windows网络”。
SMB版本1是Windows 2000和Windows 2003的默认值,而且有一些安全问题。
SMB1并不安全
当您使用SMB1时,将失去由后期的SMB协议版本提供的关键保护:
预认证完整性(SMB 3.1.1+)。保护安全降级攻击。 安全方言谈判(SMB 3.0,3.02)。保护安全降级攻击。 加密(SMB 3.0+)。防止MiTM攻击拦截数据。在SMB 3.1.1中的加密性能甚至比签名更好! 不安全的访客身份验证阻止(Windows 10+上的SMB 3.0+)。防止MiTM攻击。 更好的消息签名(SMB 2.02+)。 HMAC SHA-256取代了MD5作为SMB 2.02中的散列算法,SMB 2.1和AES-CMAC取代了SMB 3.0+中的散列算法。 SMB2和3中的签名性能提高。
SMB1并不流行也不高效
当您使用SMB1时,你将失去对最终用户的关键性能和生产力优化。
更大的读取和写入(2.02 +) - 更高效地使用更快的网络或更高延迟的WAN。大MTU支持。 文件夹和文件属性的对等缓存(2.02+) - 客户端通过BranchCache保存文件夹和文件的本地副本 持久句柄(2.02,2.1) - 允许连接在出现临时断开连接时透明地重新连接到服务器 客户端oplock租赁模型(2.02+) - 限制客户端和服务器之间传输的数据, 提高高延迟网络的性能,提高SMB服务器的可扩展性 多通道和SMB直连(3.0+) - 如果客户端和服务器之间有多条路径,则聚合网络带宽和容错,再加上现代的整个RDMA基础设施提供超高性能。 目录租赁(3.0+) - 通过缓存改进分支机构的应用程序响应时间
通常不需要SMB1
这才是真正的杀手:在任何现代企业中SMB1是唯一的选择的案例很少很少。不过有一些合理的理由如:
1. 你仍然在自定义支持协议下运行XP或WS2003。 2. 你有一些比较破旧的管理软件,要求管理员通过“网络邻居”主浏览器列表浏览。 3. 你运行刷了“古董级固件”的旧的多功能打印机只是为了“扫描共享”。
Windows操作系统使用的SMB有几个不同版本:
CIFS - 1996年的Microsoft Windows NT 4.0的一部分SMB的旧版本。SMB1取代了这个版本。 SMB 1.0(或SMB1) - 在Windows 2000,Windows XP,Windows Server 2003和Windows Server 2003 R2中使用的版本 SMB 2.0(或SMB2) - 在Windows Vista(SP1或更高版本)和Windows Server 2008中使用的版本 SMB 2.1(或SMB2.1) - 在Windows 7和Windows Server 2008 R2中使用的版本 SMB 3.0(或SMB3) - 在Windows 8和Windows Server 2012中使用的版本 SMB 3.02(或SMB3) - 在Windows 8.1和Windows Server 2012 R2中使用的版本
SMB协商版本:
这里有一个表格,以帮助你了解最终使用的版本,具体取决于作为SMB客户端运行的Windows版本以及作为SMB服务器运行的Windows版本:
* WS = Windows Server
下面是每个版本的SMB版本变化的简短摘要:
1. 从SMB 1.0到SMB 2.0 – SMB的第一个重大设计
提高文件共享可扩展性 改进的性能 请求混合 异步操作 较大的读/写 更安全,更健壮 小命令集 签名使用HMAC SHA-256而不是MD5 SMB2耐久性
2. 从SMB 2.0到SMB 2.1
文件租赁改进
大MTU支持
BranchCache
3. 从SMB 2.1到SMB 3.0
可用性 SMB透明故障转移 SMB证明 SMB多通道 性能 SMB横向扩展 SMB直接连接(SMB 3.0通过RDMA) SMB多通道 目录租赁 BranchCache V2 备份 用于远程文件共享的VSS 安全 使用AES-CCM的SMB加密(可选) 签名使用AES-CMAC 管理 SMB PowerShell 改进的性能计数器 改进事件
4. 从SMB 3.0到SMB 3.02
Scale-Out文件服务器客户端的自动重新平衡
提高SMB直接连接(SMB over RDMA)的性能
在Scale-Out文件服务器上支持多个SMB实例
你可以在这获取有关SMB 2.0改进的其他详细信息
你可以在这获取有关SMB 3.0改进的更多详细信息
你可以在Windows Server 2012 R2中获取有关SMB 3.02改进的其他详细信息
下面是几个非Microsoft实现的SMB协议。如果你使用这些实现的SMB之一,你应该向任何提供实现的企业/用户询问他们的产品的每个版本所实现的SMB版本。这里有一些其他组织实现的SMB:
苹果 - 在OS X 10 Mavericks中实现的SMB2 http://images.apple.com/osx/preview/docs/OSX_Mavericks_Core_Technology_Overview.pdf EMC - 在VNX中实现的SMB3 - http://www.emc.com/collateral/white-papers/h11427-vnx-introduction-smb-30-support-wp.pdf Linux(客户端) - 在Linux内核3.11或更高版本中实现的SMB 2.1和SMB 3.0(甚至最低SMB 3.02支持) http://www.snia.org/sites/default/files2/SDC2013/presentations/Revisions/StevenFrench_SMB3_Meets_Linux_ver3_revision.pdf NetApp - 在Data ONTAP 8.2中实现的SMB3 https://communities.netapp.com/community/netapp-blogs/cloud/blog/2013/06/11/clustered-ontap-82-with-windows-server-2012-r2-and-system-center-2012-r2-innovation-in-storage-and-the-cloud Samba(服务器) - 在Samba 4.1中实现的SMB3 http://www.samba.org/samba/history/samba-4.1.0.html
请注意,这不是一个完整的实现列表,列表可能会在我发布后过时。请参考具体实现方以便了解其具体实现的最新信息,以及它们所提供的协议的版本和可选部分。
使用PowerShell管理SMB(Windows 8.1和Windows Server 2012 R2及更高版本):
此Powershell命令可以审核SMBv1的用法:
Set-SmbServerConfiguration -AuditSmb1Access $ true
此PowerShell命令可以禁用SMB v1:
Set-SmbServerConfiguration -EnableSMB1Protocol $ false
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试
Windows 10和Windows 2016的具体配置
Windows 10/2016构建更新
为Windows 10请删除以下功能:
l PowerShell 2.0引擎
l SMB 1(中断对旧文件共享的访问,如Windows 2003)
注意:在上面的屏幕截图中,启用了.Net framewok 3.5。 这是Microsoft SCM 4.0的要求,这就是为什么要在系统上启用它。 不要将.Net 3.5(包括.Net 2.0和3.0)添加到Windows 10基本镜像中。
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试