本文涵盖了许多此类以及其他一些很不错的安全实践和配置。
保护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版本。
额外的保护kb2871997
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试
阻止本地“管理员”帐户通过网络进行身份验证
虽然两台不同计算机上的本地管理员(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)
SMB“作为网络协议[3]应用层的操作,主要用于提供对文件,打印机和串行端口的共享访问以及网络上节点之间的其他通信。它还提供了认证的进程间通信机制(IPC)。大多数SMB的使用涉及运行Microsoft Windows的计算机,在随后引入Active Directory之前,它被称为“Microsoft Windows网络”。
SMB版本1是Windows 2000和Windows 2003的默认值,而且有一些安全问题。
Ned Pyle列出了停止使用SMBv1的几个原因:
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版本:
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特性和功能:
下面是每个版本的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改进的其他详细信息
第三方SMB实现:
下面是几个非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基本镜像中。
此方案预计的努力水平:低
此方案预计的影响:这很可能会影响企业的一些事情,最好在部署前先进行测试