保护内网安全之Windows工作站安全基线开发(二)

简介: 本文讲的是保护内网安全之Windows工作站安全基线开发(二),保护Windows工作站免受现代的网络攻击威胁是一件非常具有挑战性的事情。 似乎每个星期攻击者们总有一些新的方法用来入侵系统并获取用户凭据。
本文讲的是 保护内网安全之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版本。

额外的保护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版本:

保护内网安全之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)

保护内网安全之Windows工作站安全基线开发(二)

注意:在上面的屏幕截图中,启用了.Net framewok 3.5。 这是Microsoft SCM 4.0的要求,这就是为什么要在系统上启用它。 不要将.Net 3.5(包括.Net 2.0和3.0)添加到Windows 10基本镜像中。

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

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




原文发布时间为:2017年3月10日
本文作者:丝绸之路 
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
1月前
|
安全 数据安全/隐私保护 Windows
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
|
1月前
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
|
1月前
|
弹性计算 安全 数据安全/隐私保护
远程桌面连接Windows实例,提示“为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多”错误解决方案
远程桌面连接Windows实例,提示“为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多”错误解决方案
149 0
|
1月前
|
安全 数据安全/隐私保护 Windows
Windows 命令提示符(CDM)操作(六):安全和权限
Windows 命令提示符(CDM)操作(六):安全和权限
21 0
|
3月前
|
存储 网络协议 安全
Windows Server 2022 安全功能重大更新
这篇文将介绍 Windows Server 2022 中的一些新增的安全功能,在 Windows Server 2019 的强大基础之上引入了许多创新功能。
58 0
|
3月前
|
安全 虚拟化 数据安全/隐私保护
Windows 安全
Windows 安全
43 0
|
9天前
|
监控 安全 API
7.3 Windows驱动开发:内核监视LoadImage映像回调
在笔者上一篇文章`《内核注册并监控对象回调》`介绍了如何运用`ObRegisterCallbacks`注册`进程与线程`回调,并通过该回调实现了`拦截`指定进行运行的效果,本章`LyShark`将带大家继续探索一个新的回调注册函数,`PsSetLoadImageNotifyRoutine`常用于注册`LoadImage`映像监视,当有模块被系统加载时则可以第一时间获取到加载模块信息,需要注意的是该回调函数内无法进行拦截,如需要拦截则需写入返回指令这部分内容将在下一章进行讲解,本章将主要实现对模块的监视功能。
24 0
7.3 Windows驱动开发:内核监视LoadImage映像回调
|
4月前
|
监控 安全 API
7.2 Windows驱动开发:内核注册并监控对象回调
在笔者上一篇文章`《内核枚举进程与线程ObCall回调》`简单介绍了如何枚举系统中已经存在的`进程与线程`回调,本章`LyShark`将通过对象回调实现对进程线程的`句柄`监控,在内核中提供了`ObRegisterCallbacks`回调,使用这个内核`回调`函数,可注册一个`对象`回调,不过目前该函数`只能`监控进程与线程句柄操作,通过监控进程或线程句柄,可实现保护指定进程线程不被终止的目的。
29 0
7.2 Windows驱动开发:内核注册并监控对象回调
|
4月前
|
监控 安全 API
7.6 Windows驱动开发:内核监控FileObject文件回调
本篇文章与上一篇文章`《内核注册并监控对象回调》`所使用的方式是一样的都是使用`ObRegisterCallbacks`注册回调事件,只不过上一篇博文中`LyShark`将回调结构体`OB_OPERATION_REGISTRATION`中的`ObjectType`填充为了`PsProcessType`和`PsThreadType`格式从而实现监控进程与线程,本章我们需要将该结构填充为`IoFileObjectType`以此来实现对文件的监控,文件过滤驱动不仅仅可以用来监控文件的打开,还可以用它实现对文件的保护,一旦驱动加载则文件是不可被删除和改动的。
29 1
7.6 Windows驱动开发:内核监控FileObject文件回调
|
4月前
|
监控 安全 API
6.9 Windows驱动开发:内核枚举进线程ObCall回调
在笔者上一篇文章`《内核枚举Registry注册表回调》`中我们通过特征码定位实现了对注册表回调的枚举,本篇文章`LyShark`将教大家如何枚举系统中的`ProcessObCall`进程回调以及`ThreadObCall`线程回调,之所以放在一起来讲解是因为这两中回调在枚举是都需要使用通用结构体`_OB_CALLBACK`以及`_OBJECT_TYPE`所以放在一起来讲解最好不过。
40 1
6.9 Windows驱动开发:内核枚举进线程ObCall回调