Windows系统安全加固

本文为该文章内容笔记。

Windows系统账号特性

普通家用Windows对密码无限制,但Windows服务器需要注重账号密码的管理。

管理服务器时,要合理配置用户权限。

密码策略加强

win R打开运行,secpol.msc打开本地安全策略,可以看到对密码复杂性的要求。(操作后发现Win10家庭版没有组策略编辑器,根据解决Win10家庭版找不到本地安全策略(组策略)问题成功添加)

image-20220223184550929

可以根据实际需求对服务器密码进行加固。

除去密码策略,还可以对Administrator的用户名进行修改,在本地安全策略中选择本地策略中的安全策略,重命名系统管理员账号。

对账户进行输入锁定策略加强

image-20220223184952095

可以设置账户锁定时间、阈值及重置账户锁定计数器。

禁用Guest用户和无关账户

Win R打开compmgmt.msc进入计算机管理

(Win10家庭版提示此管理单元不能用于这一版本的Windows10,需要在控制面板-用户账户中进行修改)

Guest用户可以无密码登录到计算机,但权限较低,不过最好还是禁用。

用户权限分配

image-20220224095001530

可以在这里设置用户的一些权限。

设置主机安全审计

image-20220224095121851

可以在这里设置日志审核策略。

查看系统事件查看器和任务计划程序

设置日志文件大小

Win R输入eventvwr,可设置应用日志、系统日志、安全日志属性中的日志大小,并设置当达到最大的日志尺寸时的相应策略。

image-20220224095618900

在事件查看器中可以看到各种警告和错误信息

image-20220224095908223

常见事件ID

事件ID 说明
1102 审核日志已清除
1104 安全日志现已满
4608 Windows正在启动
4609 Windows正在关闭
4624 登录成功
4625 登录失败
4634 注销成功
4647 用户启动的注销
4657 注册表值已更改
4672 使用超级用户(如管理员)登录
4720 创建用户
4741 已创建计算机用户
4742 计算机账户已更改
4743 计算机账户已删除

登录类型

2 c(Interactive)用户在本地进行登录。

3 网络(Network)通常为连接到共享文件夹或共享打印机时。

4 批处理(Batch) 通常表示某计划任务启动。

5 服务(Service)每种服务被配置在某个特定的用户帐号下运行。

7 解锁(Unlock)屏保解锁

8 网络明文(NetworkCleartext) 登录的密码在网络上是通过明文传输的,如FTP。

9 新凭证(NewCredentials) 使用带/Netonly参数的RUNAS命令运行一个程序。

10 远程交互(RemoteInteractive)通过终端服务、远程桌面或远程协助访问计算机。

11 缓存交互(CacheInteractive)以一个域登录而又没有域控制器可以用。

查看任务计划程序

有时可能会被入侵,设定计划任务,定时执行某些程序,这些程序可能是一些监听木马和后面程序,输入taskschd.msc进入到任务计划程序,查看是否存在可疑任务计划。

image-20220224101323596

mimikatz抓取密码

是法国人benjamn开发的一款轻量级调试工具,功能强大,可以直接读取WindowsXP-2012等操作系统的明文密码。

对于Windows2012以上的系统和不能获取到的明文密码,可以搭配procdump和mimikatz来获取密码。

mimikatz # log
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords

在Windows Server 2008 R2 x64虚拟机上测试结果如下:

image-20220224185812615

msv:账户对于密码的各种加密协议的密文,包括LM、NTLM和SHA1。

tspkg, wdigest,kerberos:账户对应的明文密码。

SSP:最新登录到其他RDP终端的账户和密码。

GitHub地址

防止mimikatz获取密码

mimikatz需要管理员权限才能有debug权限。

Windows系统中调试权限可以用来调试进程,甚至调试内核。mimikatz需要通过debug对进程进行调试。用户登录时会把账户密码保存到lsass中,经过wdigest和tspkg两个模块的调试之后使用算法进行加密并存储都内存中,而mimikatz能够通过逆算法获取到明文密码。

把administrator去除掉,注销登录系统,mimikatz就不能再获取到权限了。

WDigest

WDigest协议是在Windows XP中被引入的,旨在与HTTP协议一起用于身份认证。默认情况下,MIcrosoft在多个版本的Windows(Windows XP-Windows8.0和Windows Server2003-Windows Server 2012)中启用了此协议,这意味着纯文本密码存储在LSASS(本地安全授权子系统服务)进程中。Mimikatz可以与LSASS交互,允许攻击者通过以下命令检索这些凭据。

mimikatz # privilege::debug
mimikatz # sekurlsa::wdigest

image-20220225132433851

Windows Server2012及以上版本默认关闭WDigest,攻击者无法从内存中获取明文密码。Windows Server2012以下版本如果安装流量KB2871997补丁,攻击者同样无法获取明文密码。配置如下键值。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest

UseLogonCredential值为0时,WDigest不把凭证缓存在内存;值为1时,WDigest把凭证缓存在内存。

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

如果在注册表中该值为0,就不能够得到明文密码(使用mimikatz获取密码时会得到null,但能获取NTLM和SHA1的加密密文)

image-20220225134151714

把值设为1则可以开启WDigest,获取明文密码。

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

还可以使用Powershell更改

开启Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
关闭Wdigest Auth
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0

获取不到明文的情况下,可以使用hash来进行PTH攻击,可以管理到对方的服务器

sekurlsa::pth /user:Administrator /domain:192.168.48.128 /ntlm:5233851804905313cc19024b662f30ef

image-20220225150206873

image-20220225150341961

可以使用PsExec来连接管理对方的服务器。

image-20220225151311372

image-20220225152105851

image-20220225152228027

LSA保护

微软推出的补丁KB2871997是专门针对PTH攻击的补丁,但如果PID为500还是可以实现PTH攻击。本地安全权限服务(LSASS)验证用户是否进行本地和远程登录,并实施本地安全策略。

Windows8.1及更高版本的系统中,微软为LSA提供了额外保护,以防止不受信任的进程读取内存或代码注入。Windows8.1之前的系统,攻击者可以执行mimikatz命令来与LSA交互并检索存储在LSA内存中的明文密码。

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL /t REG_DWORD /d 1 /f

使用以上命令添加或修改键值为1后重启服务器,即使获取debug权限,也不能获取明文和hash。

此处存疑,我已成功将该键值修改为1,但重启后仍能获取密码明文。

获取高版本Windows系统的密码凭证

方法一

修改注册表(WDigest)

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

修改后需要重启计算机

方法二

先用procdump把lsass给dump下来。

procdump.exe -accepteula -ma lsass.exe lsass.dmp

image-20220225162337960

再用mimikatz读取

sekurlsa::minidump isass.dmp
sekurlsa::logonpasswords

image-20220225163642467

关闭一些危险端口

一般Windows的远程溢出漏洞,如ms17-010,都是因为开放了445和其他共享端口造成的,在扫描这些漏洞的时候,也会通过扫描445端口是否开放,关闭这些端口(445、139等)就可以减少一些危险。

扫描目标主机端口

image-20220225175440076

search ms17-010

image-20220225175617528

使用辅助模块验证存在ms17-010漏洞

image-20220225175820145

使用exploit模块

image-20220225232215999

连接成功

image-20220225223002260

image-20220225223023999

image-20220225223309932

添加管理员用户

image-20220225224109951

image-20220225224513674

添加成功

image-20220225224617940

可以使用批处理关闭危险端口

@echo off
color 07
title 关闭常见的危险端口
echo 正在开启Windows防火墙
echo.
netsh advfirewall set currentprofile state on > nul
netsh advfirewall set publicprofile state on > nul
netsh advfirewall set allprofile state on > nul
netsh advfirewall set privateprofile state on > nul
echo.
echo 防火墙已经成功启动。
echo.
echo.
pause
cls
echo 正在关闭常见的危险端口,请稍候…
echo.
echo 正在关闭135,139,445端口…
netsh advfirewall firewall add rule name=denyDangerTCPPort dir=in protocol=TCP localport=135,139,445 action=block
echo 正在关闭137,138端口…
netsh advfirewall firewall add rule name=denyDangerUDPPort dir=in protocol=UDP localport=137,138 action=block

echo 常见的危险端口已经关闭。
echo.
echo.
echo.
echo 按任意键退出。
pause>nul

image-20220225225303650

这时候使用nmap发现已经不是开放状态了。

image-20220225230419025

exploit也没有成功。

image-20220225230816691