windows 系统账号特性
一般我们使用的普通的windows操作系统,对用户的密码是没有限制的,一般在家用版的windows中都会在一开始的时候给由你创建一个用户。而且对于家用的windows来说你的电脑不设置密码也是可以的。但是对于windows server来说,这是不行的。windows服务器对于账号和密码是有 严格的要求的,而且windows服务器里面可能有很多的用户,因为每一个用户对应的权限和职责也是不同的。有一次在渗透获取shell后,惊讶的发现对方主机具有有这么多的用户!并且权限分配的很合理。所有在管理服务器的时候,需要对每一个用户进行合理的权限配置,才能比较有效的保护服务器的安全
密码策略加强
windows服务器对于每一个用户的密码强度也是有要求的,强密码可以防止被爆破嘛!使用win+R打开运行,并且输入secpol.msc 进入本地安全策略,点击账户策略里面的密码策略。可以看到一般都是开启了密码复杂性要求,并且还对复杂性要求进行了说明
不能包含用户的帐户名,不能包含用户姓名中超过两个连续字符的部分至少有六个字符长包含以下四类字符中的三类字符:英文大写字母(A 到 Z)英文小写字母(a 到 z)10 个基本数字(0 到 9)非字母字符(例如 !、$、#、%)在更改或创建密码时执行复杂性要求。
我们可以根据实际的情况来进行对服务器的密码加固。例如如下方案
“密码必须符合复杂度要求” 设 置为“启用”“密码长度最小值”设置为“8个字符”“密码最长使用期限”设置为“90天”“强制密码历史”设置为“记住5个密码”“用可以还原的加密来存储密码”设置为“禁用”
设置好了密码强度的策略之后,在设定服务器密码的时候不要在密码上带上有个人信息的一些字符。以免被社工特别指定密码来进行爆破
当我们创建一个账户的时候,如果密码强度不正确的话,是不给创建的哦!
密码策略设定好了,其实还可以对Administrator这个账户的用户名进行修改,因为都知道有这个用户,我们可以对这个用户的用户名进行更改,在本地安全策略中选择本地策略中的安全策略,找到重命名系统管理员账户,可以按照实际情况来进行修改
对账户输入锁定策略加强
我们还可以对登陆进行一些策略设置,应配置当用户连续认证失败次数超过5 次(不含5 次),锁定该用户使用的账号
“账户额锁定阀值”设置为 5 次
“账户锁定时间”设置为 5分钟
“复位账户锁定计数器”设置为 5分钟
当输入错误了五次之后,页面就直接提示锁定了!
禁用Guest账户和无关账户
对于windows服务器来说,一般都会把Guest账户和一些无关紧要的账户给禁用或者删除。Guest账户对于window服务器来讲是一个比较危险的账户,供来宾访问计算机或访问域的内置用户,可以无密码的登陆到计算机,但是Guest的权限比较低,很多操作也不能在计算机上使用。输入win+R打开运行输入compmgmt.msc进入到计算机管理,点击本地用户和组在点击用户,此时可以看到Guest用户已经处于禁用的状态了。如果显示没有禁用的话,最好还是禁用它
对于一些无关的用户来说,例如一些已经离职的员工。他们的用户里面都会有保留用户的文件夹,也许文件夹里面还有一些重要的文件,这个时候就需要先把这个用户给禁止掉,是的不能登陆到服务器上,然后再对该用户的一些信息进行处理。
用户权限分配
在本地安全策略中选择本地策略里面的用户权限分配,这里可以设置一些用户操作的一些权限。例如这里设置允许关机和远程关机的用户为administrators组里面的成员
例如还有对备份文件和目录这个选项进行权限控制,
还有从网络访问服务器的权限控制,,这里可以把一些比较危险的选项给剔除,例如everyone等等,在结合一些情况在设置
设置主机安全审计
在主机的审核策略上设置日志审核策略操作流程:进入“控制面板->管理工具->本地安全策略”,在“本地策略->审核策略”在主机的审核策略上设置日志审核策略:
审计帐户登录事件:成功,失败
审计帐户管理:成功,失败
审计目录服务访问:成功,失败
审计登录事件:成功,失败
审计对象访问:成功,失败
审计策略更改:成功,失败
审计特权使用:成功,失败
审计系统事件:成功,失败
审计过程追踪:成功,失败
查看系统事件查看器和任务计划程序
设置日志文件大小
可以根据磁盘的空间进行配置日志的文件大小,一般日志记录的多点比较好,在运行窗口输入eventvwr,配置 应用日志、系统日志、安全日志 属性中的日志大小,以及设置当达到最大的日志尺寸时的相应策略。
事件查看器记录和windows服务器的操作。一些可疑的操作都会有红色警报信息
操作流程:使用打开允许输入eventvwr,目的:检查系统/安全/应用日志是否有可疑时间报警。这里给出一些常见的事件ID。还有一些事件ID可以通过搜索来获取信息
例如这里,如果4672代表管理员进行登陆,4624代表了普通用户登陆了,可以更加实际情况推测有无可以登陆的情况
还可以查看一些登陆类型,可以从日志上查看对方是通过什么方式进行登陆的
例如下面这个,是普通登陆,并且是从远程网络登陆也就是远程桌面登陆,并且还可以查看源网络的地址
查看任务计划程序
有的时候如果被入侵的,可能会被设定计划任务,定时的执行某些程序,这些程序可能是一些监听木马和后门程序,在允许窗口中输入taskschd.msc进入到任务计划程序。查看是否有可以的任务计划
mimikatz抓取密码
Mimikatz是法国人benjamin开发的一款功能强大的轻量级调试工具,本意是用来个人测试,但由于其功能强大,能够直接读取WindowsXP-2012等操作系统的明文密码而闻名于渗透测试,可以说是渗透必备工具
作者个人博客:http://blog.gentilkiwi.com/
这个工具很强大,是windows系统渗透的必备神器,由于它很强大,所有很多安全厂商都对其列入黑名单。在windows2012以及以上的系统,以及不能获取的到明文密码了,但是可以搭配procdump+mimikatz来进行获取密码。
把mimikatz上传到服务器上面,使用如下命令
mimikatz # log
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords
这里我获取的是windows2008系统的密码,很顺利就已经获取到了密码了!
msv:这项是账户对于的密码的各种加密协议的密文,可以看到有LM、NTLM和SHA1加密的密文tspkg,wdigest,kerberos:这个就是账户对于的明文密码了。有的时候这三个对于的也不是全部都是一样的,需要看服务器是什么角色。SSP:是最新登陆到其他RDP终端的账户和密码
如何防止mimikatz获取密码呢?
mimiktaz是需要管理员权限才能使用mimikatz。如下图,如果我们不是管理员权限的话,是不能够debug的。
在windows中调试权限可以用来调式进程,甚至是调试内核,mimiktaz就是需要通过debug来对进程进行调试。当用户登陆的时候会把账户密码保存到lsass中,经过wdigest和tspkg两个模块的调试之后使用算法进行加密并存储在内存中。mimikatz便是通过逆算法获取到明文密码的!
当我们是普通权限的时候,是没有debug的权限的,如果是administrator权限呢!当然是可以的,我们可以通过对debug权限进行设置即可。在运行窗口输入secpol.msc进入到本地安全策略,点击本地策略进入到用户权限分配中,可以看到调试程序中之后administrator有这个权限。
把administrator去除掉,然后注销在登陆系统,接着使用mimikatz进行获取debug的权限,这个时候已经不能获取到权限了
WDigest
WDigest协议是在WindowsXP中被引入的,旨在与HTTP协议一起用于身份认证。默认情况下,Microsoft在多个版本的Windows(Windows XP-Windows 8.0和Windows Server 2003-Windows Server 2012)中启用了此协议,这意味着纯文本密码存储在LSASS(本地安全授权子系统服务)进程中。Mimikatz可以与LSASS交互,允许攻击者通过以下命令检索这些凭据:
mimikatz # privilege::debug
mimikatz # sekurlsa::wdigest
在windows2012系统以及以上的系统之后这个默认是关闭的如果在 win2008 之前的系统上打了 KB2871997 补丁,那么就可以去启用或者禁用 WDigest。Windows Server2012及以上版本默认关闭Wdigest,使攻击者无法从内存中获取明文密码。Windows Server2012以下版本,如果安装了KB2871997补丁,攻击者同样无法获取明文密码。配置如下键值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest
UseLogonCredential 值设置为 0, WDigest 不把凭证缓存在内存;UseLogonCredential 值设置为 1, WDigest 就把凭证缓存在内存。
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
当在网络维护管理的时候,可以通过查看注册表Wdigest,如果这个选项是0的时候,是不能够回去得到明文密码的。
使用mimikatz获取windows密码的哈,密码这里是显示null的。但是能获取到NTLM和SHA1的加密密文
只要把值给成1的话,就是开启了Wdigest功能
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
使用mimikatz来获取windows的密码,可以看到这里以及获取到了系统的明文密码
还可以使用powershell来进行更改。
开启Wdigest AuthSet-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1关闭Wdigest AuthSet-ItemProperty -Path HKLM:\SYSTEM\CurrentCzontrolSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0
但是不获取到明文的话,可以使用hash来进行PTH攻击,可以管理到对方的服务器
接着使用PsExec这个工具就可以连接管理对方的服务器了
LSA保护
如何防止mimikatz获取一些加密的密文进行PTH攻击呢!其实微软推出的补丁KB2871997是专门针对PTH攻击的补丁,但是如果PID为500的话,还是可以进行PTH攻击的!本地安全权限服务(LSASS)验证用户是否进行本地和远程登录,并实施本地安全策略。Windows 8.1及更高版本的系统中,Microsoft为LSA提供了额外的保护,以防止不受信任的进程读取内存或代码注入。Windows 8.1之前的系统,攻击者可以执行Mimikatz命令来与LSA交互并检索存储在LSA内存中的明文密码。当使用如下命令
sekurlsa::logonPasswords
没有这个键或者这个键为0的时候,mimikatz是可以使用这个命令来获取hash或者明文密码的
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL /t REG_DWORD /d 1 /f
使用上面这条命令添加或者修改键的值。设置为1
接着重启服务器,这样即使你获取了debug权限,你也不能获取到明文和hash。
但是如果攻击者的权限够高的话,也是可以修改的,把值修改为0即可。但是需要重启服务器
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL /t REG_DWORD /d 0 /f
获取高版本windows系统的密码凭证
方法1:
第一种方法就是修改注册表了!也就是WDigest这个选项
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
修改之后需要重启计算机。这样做的话比较鸡肋
方法2:
首先使用procdump把lsass给 dump下来,但是需要管理员权限。procdump是微软的一个小工具。自己的东西当然不会被杀啦!
procdump64.exe -accepteula -ma lsass.exe 1.dmp
接着我们可以把这个文件下载到本地,使用mimikatz读取密码
mimikatz.exe "log" "sekurlsa::minidump 1.dmp" "sekurlsa::logonPasswords full" exit
关闭一些危险的端口
一般windows中的远程溢出漏洞,例如ms17-010。都是开启了445和一些共享的端口造成的,在扫描这些漏洞的时候,也是通过扫描445端口有无打开,在测试有没有这个漏洞。如果把这些端口关闭了的话,就可以防止一些不必要的危险。在扫描的时候发现都开启了这些端口,特别是445和139着些端口
接着使用msf对windows2008操作系统进行ms17-010漏洞扫描,这里显示是存在漏洞
试着使用ms17-010的payload进行攻击,然后尝试发现可以成功
使用如下批处理。可以关闭这些危险的端口。把下列批处理复制到文本文件中,保存并且修改后缀为bat
@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
接着使用nmap对这些危险的端口进行扫描,可以看到已经现在已经被过滤了
测试在进行扫描的时候已经显示没有ms17-010漏洞了
再次尝试使用ms17-010漏洞进行攻击,这个时候已经不能在进行攻击了
结尾
windows系统加固方法还有很多,而且我这里也很片面。还有很多还未学习的!希望以后能慢慢接触到!