1. 从“会用”到“懂它”:Windows再认知
说实话,我见过不少刚入行网安的朋友,一上来就急着学各种攻击工具,结果遇到最基础的问题反而卡壳:某次应急响应,让排查一台主机的本地账户,有人连“用户组”和“账户”的区别都说不上来;还有一次模拟项目X,需要检查系统登录日志,居然有人跑去第三方软件里翻半天,其实事件查看器里就有完整记录。
这类情况太常见了。原因很简单——大家都觉得Windows“会用”,但网安视角下的Windows,很多知识点是藏在图形界面背后的。上一篇聊了文件系统、进程和服务的初步认知,这一篇我把账户权限、日志审计、防火墙规则、远程管理这几个最常打交道、也最容易被忽视的部分串起来,讲点实在的。
写这套内容有两个考虑:一是读者不一定有真实的攻防项目经验,很多是刚接触虚拟机和模拟环境,太深的讲不了;二是太浅的又没必要写,毕竟“下一步下一步装系统”谁都会。所以我挑的都是“安全工作中绕不开、但常规使用中不会深入”的知识点,结合我在实际项目中踩过的坑展开。
这篇文章适合两类人:一类是刚转网安、对Windows认识停留在日常操作层面的人,另一类是做了一段时间但一直没有系统梳理过系统机制的同行。看完不敢说让你变成专家,但至少以后再遇到账户异常、登录暴破、日志被清理、防火墙放行误操作这类事,脑子里能有一个清晰排查方向,而不是凭感觉乱试。
2. 账户体系与权限,攻防第一道门
2.1 别只认Administrator:Windows账户的庐山真面目
Windows的账户,远不止“管理员”和“访客”这么简单。打开lusrmgr.msc看一眼就知道,系统内部还藏着不少内置账户,其中两个日常不显示但关键时刻要命的:Administrator和Guest。
内置Administrator账户,在装了系统的默认情况下是禁用的,除非你手动启用或者用某些优化工具把它唤醒。攻击者拿到一台机器后第一件事就是看这个账户是不是能用,很多弱口令爆破也专盯着它。Guest账户更尴尬——默认就是关闭的,但有些办公环境为了“方便打印共享”之类的原因,会把它开开,开开之后没设强密码,等于给门口放了把钥匙。
另外,大家经常听到的“管理员权限”这个概念,实际对应的是“Administrators组成员”和“SYSTEM”两个不同层面。简单说,SYSTEM是比你管理员还高的系统级账户,只管系统内核;Administrators是用户层最高权限组。很多服务运行在SYSTEM下,所以杀毒软件、驱动、系统服务出了问题,普通管理员账户可能改不动,这是正常的。
在域环境里还有一层域账户的概念。本地账户只在这台机器有效,域账户是跟着人走的。如果你在做项目时看到某台主机上出现了非本地创建的账户,又不在域账户列表里,那基本可以判定被留后门了——这是应急响应里最常见的“坏人标记”之一。
2.2 UAC在拦什么:权限分裂与提权理解
很多用户烦UAC弹窗,觉得“多此一举”。但对安全人员来说,UAC是Windows分层权限模型中很聪明的一环。
默认情况下,即使你是Administrators组的老大,平时跑程序也是以“标准用户”令牌在跑,只有需要管理员操作时才会弹UAC,你确认后它才给你管理员令牌。这意味着恶意程序想拿到高权限,要么先骗你点一下UAC,要么找漏洞强行提权。理解这个逻辑后,你就会明白为什么渗透测试时经常看到“UAC绕过”这类工具——它们的目的就是骗系统相信你已经有管理员令牌,从而跳过弹窗执行高权限操作。
遇到UAC弹窗,平时习惯直接点“是”的人很多。但网安视角下,每条UAC提示都值得瞄一眼:弹的进程名是不是你正在操作的程序?好端端打开个文档编辑器,突然弹“允许此应用更改设备”,这就该拉响警报了。
2.3 权限与访问控制,不止“只读/写入”这么简单
Windows文件系统里每个文件都有一张“权限表”,专业叫法叫ACL(访问控制列表)。你右键文件 → 属性 → 安全,能看到一行行记录:谁对这个文件有什么权限。
这上面有“完全控制”“修改”“读取和执行”“列出文件夹目录”“读取”“写入”六项主要权限,组合起来千变万化。工作里最常见的误区是:给某个用户“写入”权限,以为他只能写不能删,实际上“写入”里包含创建文件和写入数据,但不一定包含删除;反过来,给了“修改”,就包括了删除子文件和文件夹。
实际排查问题时的经典情况是:某目录用户说“我能往里面存文件,但删不掉别人的文件”。这在正常业务下是符合预期的——删除文件需要“删除”权限,而旧版Windows里删除子文件需要的是上一级目录的“删除子文件夹和文件”权限,很多人根本没分这么细。对做安全的人来说,这个颗粒度不只是文件管理细节,更是权限控制是否做到最小化的重要验证点。
还有所有权(Ownership)这个概念,同样容易被忽略。就算你没权限访问某个文件,只要你是管理员,就可以“获取所有权”,然后改权限,再进去。这是微软故意留的后门,目的是避免管理员被权限锁死。但坏人也利用这个逻辑——拿到管理员权限后,所有ACL保护实际上都能被绕过。所以看权限问题时,要同时把“谁机器权限高”和“谁文件权限高”放一起判断,不能只盯着一层。
2.4 补一句:用户管理实操建议
很多书籍一上来就讲怎么创建用户、加入组,这些图形界面操作我就不累述了。只说几个我实际中认为非常重要的“习惯”:
第一,给不同的服务创建专用的低权限账户,不要用管理员账户挂服务。数据库服务、Web服务都建议用独立账户运行,这样即使服务被攻破,攻击者拿到的也就是那个低权限账户,不能动系统。
第二,禁用或重命名内置Administrator账户,这是合规基线里必查的一项。禁用是让它不能登录,重命名是让暴破的人猜不到用户名,配合强密码双保险。
第三,每隔一段时间,用工具导出一次账户列表和组成员关系,留存基线。平时不觉得,真出事时这份清单能帮你快速发现“多出来的账户”到底是不是后门。
注意:不要在仅了解Windows基础的情况下直接在生产环境操作账户策略,特别是修改内置账户状态或组成员关系前,务必测试并确认不会影响业务。虚拟机或测试环境里随便试,生产环境谨慎,这是安全工作的基本操守。
3. 事件日志:系统里的黑匣子
3.1 日志到底记了什么,怎么找
Windows的事件日志,是所有安全排查绕不开的第一站。打开事件查看器(eventvwr.msc),左侧是“Windows日志”分类,核心要看三块:应用程序、安全、系统。
应用程序日志记录软件层面的事,比如某个程序崩溃、某个服务出错;系统日志记录系统组件、驱动、服务相关事件;安全日志则记录登录、权限使用、策略变更这类“审计类”事件。这三者中,安全日志最敏感,攻击者拿到权限后第一件事经常是清安全日志,因为这里记录了他们“留下的脚印”。
日志文件本身存在C:\Windows\System32\winevt\Logs目录下,后缀名是.evtx。日常查看用事件查看器,但取证排查时建议直接用PowerShell导出,速度更快,不容易卡界面。几个常用命令顺手写一下:
# 导出最近7天的安全日志 wevtutil epl Security C:\temp\security_7d.evtx /q:"*[System[(EventRecordID>0) and TimeCreated[timediff(@SystemTime) <= 604800000]]]" # 用PowerShell查询登录事件并筛选关键信息 Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624]]" | Select-Object TimeCreated,Message | Out-GridView3.2 关键事件ID速查:多少行代码代表一种攻击手法
事件ID是Windows日志的“身份证”,记住几个关键ID,排查效率翻倍。
登录成功是4624,登录失败是4625。这两个配合起来看,如果某台机器短时间内出现了大量4625且来自同一来源IP,基本就是有人在做口令暴破。如果4624里频繁出现登录类型为3(网络登录)的记录且时间异常,可能是远程连接被人薅了。
服务创建是7045,记录系统里新装的服务。恶意软件常伪装成服务持久化运行,所以看到不认识的7045要警惕。计划任务注册是4698,相当于对方在系统里给自己排了“闹钟”,定时执行恶意程序。这些事件在常规运维中可能只是噪音,但在安全核查时联网一查,往往是案件的起点。
还有账户操作类事件:4720(创建用户)、4722(启用用户)、4726(删除用户)、4738(修改用户属性)、4740(账户被锁定)。最后一个4740特别实用——你在排查“为什么这个员工登录不了系统”时,很可能就是暴破策略触发自动锁定,一翻安全日志便知。
提示:默认情况下,Windows安全日志只记录登录成功和失败,更细的进程创建、命令行参数这些默认不开。需要跑合规工作或做深度溯源时,得先开启“审核进程创建”策略,命令方式是
auditpol /set /subcategory:"进程创建" /success:enable /failure:enable。
3.3 日志被清了怎么办:残留与覆盖
攻击者懂得清日志,但也常清不干净。事件查看器清了,可能留在内存里的还没落盘;用命令删了evtx文件,文件句柄被占用时删不掉;覆盖了当前日志,备份的(如果有配置)可能还在。
实际排查时,不要只依赖事件查看器一个渠道。PowerShell历史记录(ConsoleHost_history.txt)、预读取文件(Prefetch)、快捷方式(LNK文件)、临时目录残留、Windows搜索索引,都可能藏着攻击痕迹。日志是重要的证据,但绝不能是唯一的证据。
另外,Windows日志有大小上限,默认日志满了之后策略是“按时间覆盖旧事件”,这意味着你去看日志,可能重要事件已经被新事件顶掉。合理的配置是把日志上限调高,并设置为“日志已满时停止”或“归档但不覆盖”。作为基线加固的一个动作,这个经常被忽略,但真出事了才后悔当初没配置。
4. 防火墙与网络安全,Windows自己的防线
4.1 配置文件区分:域、专用、公用不是摆设
Windows防火墙最让人困惑的就是三个“配置文件”:域配置文件、专用配置文件、公用配置文件。很多人在弹窗里随手选了个“公用”,结果回家发现连不上家里设备,反过来也是。
打个比方:域配置文件是“在公司体制内的网络规则”,专用是“家里或办公室可信局域网”,公用是“咖啡馆、酒店这种谁都能进的网”。不同配置下防火墙规则独立生效,同一台电脑在不同网络环境会自动套用对应的策略。这设计本意是为安全,但也被攻击者钻过空子——有些恶意软件特意针对“公用配置文件”关闭防火墙,因为它知道公用网络通常限制最少。
排查时需要看大本营,命令是netsh advfirewall show allprofiles,能一眼看到三个配置文件的当前状态。有些环境为了部署方便,三个全设成“关闭”,这在工作站上极其危险,相当于裸奔。
4.2 出站规则与入站规则,别只盯着一半
提到防火墙,很多人第一反应是“挡别人进来”。但安全的另一半是“防自己出去”。
入站规则控制谁能连上你,出站规则控制你能连谁。恶意软件被植入后,常常需要“回连”——主动向外连接到控制服务器,这时出站规则就起作用了。默认情况下,Windows出站是“允许全部”的,只有少数明确禁止的项目是阻止状态。这意味着,大部分木马只要入站不被拦,出站基本畅行无阻。
自己搭建测试或做安全基线加固时,可以针对关键业务配置出站白名单,只允许系统到特定端口。但要注意,这会造成维护成本明显上升,新装软件可能需要反复调规则。我的建议是:常规用户环境只配入站白名单,出站规则在你明确知道自己在做什么的情况下再动。
实操上,常用命令:
# 查看所有入站规则 netsh advfirewall firewall show rule name=all dir=in # 新增入站放行端口3389(仅限专用配置文件) netsh advfirewall firewall add rule name="Allow RDP Private" dir=in action=allow protocol=TCP localport=3389 profile=private # 立即阻止某个程序的出站连接 netsh advfirewall firewall add rule name="Block Tool" dir=out action=block program="C:\evil\tool.exe"4.3 防火墙日志,被忽视的取证来源
Windows防火墙有独立的日志文件,默认是关闭的。想开启的话,在wf.msc里选择属性,或者直接命令行:
netsh advfirewall set currentprofile logging filename C:\Windows\System32\LogFiles\Firewall\pfirewall.log netsh advfirewall set currentprofile logging droppedconnections enable开启后,所有被丢弃的连接都会记录到pfirewall.log里。排查时,这个日志能告诉你谁在扫描你、哪些端口被频繁试探、哪些IP被策略拒绝后还在反复尝试。它跟事件日志是互补的:事件日志记系统行为,防火墙日志记网络行为,把两者时间轴一拼,很多攻击链路就能推演出来。
注意:防火墙日志如果长时间开着,文件会涨得很快,尤其在被扫描攻击的环境里。建议做好日志轮转或对防火墙日志目录做大小监控,防止日志文件把磁盘塞满导致系统异常。
5. 远程管理:方便与风险的一体两面
5.1 远程桌面(RDP)的正确姿势
远程桌面是Windows自带的管理利器,默认3389端口,但很多人不知道,远程桌面服务其实默认是关闭的,需要在系统属性里勾选“允许远程连接到此计算机”。
我从安全角度给几条实操建议。
第一,暴露3389到公网是最危险的操作之一。默认端口+默认协议,等于告诉全世界“来试密码吧”。很多暴破攻击就是盯公网IP扫描3389然后跑密码字典。如果业务真的需要远程访问,建议只对特定IP放通,网络层面限制来源,IP白名单比防火墙配置更可靠。
第二,启用账户锁定策略,比如5次失败就锁定账户15分钟。代价是攻击者可以恶意触发锁定,让你的管理员账户直接被锁住无法登录——极端情况下这算一种DoS,但那也比被暴破进去要好。
第三,远程桌面有连接日志,但默认不记录谁连接过。如果你想审计这件事,得配合安全日志里的4624(登录类型10为远程登录),或者开启“远程桌面服务”会话日志。应急响应时,查看当前在线会话用query user命令,可以看谁正连着。
5.2 WinRM,被忽略的另一种远程管理
WinRM(Windows远程管理)是基于HTTP(S)的远程管理服务,默认端口5985(HTTP)和5986(HTTPS),是微软大批量管理机器的利器。它默认关闭,但在很多虚拟化环境或批量部署场景下会被管理员打开。
WinRM的问题是:一旦开启且配置不当,等于给攻击者开了一条Powershell直接远程控制的通道。它比3389更隐蔽,因为很多人不太熟悉这个协议。安全排查时,用winrm enumerate winrm/config/listener可以查看WinRM是否在监听,再用winrm get winrm/config/service看认证和加密配置。
如果确定业务不需要WinRM,直接将其禁用最干净:
Disable-PSRemoting -Force5.3 经常被忽视的远程工具残留
现实排查中,要查的不止系统自带的远程管理,还要看是否有第三方远程控制软件被当作后门安装。向日葵、ToDesk、TeamViewer这类工具在正常办公中经常使用,但攻击者也会用它们来保持控制通道——受害者以为是IT在远程协助,实际上是对面在操作他电脑。
怎么区分正常使用和滥用?关键看使用频率和安装时间。如果某台长期没人用的服务器,突然装了远程控制软件并自动开机启动,这个基本可以锁定了。注册表启动项、计划任务、服务列表是排查的三大入口;也可以用wmic startup get caption,command快速查看所有开机启动项。
提示:如果你责任感比较强,帮同事处理电脑时顺手给远程控制软件设置访问密码,而不是默认的便捷访问模式,就不至于把自己也搭进一条“疑似后门”的线索里。日常排查时看到未加密的远程控制配置,也建议主动提示用户加固。
6. 系统排查实操:一台可疑机器的处置思路
6.1 先稳住,再动手:应急镜像与信息收集
拿到一台疑似被入侵的机器,第一步不是乱七八糟的命令跑一遍,而是先确保“证据不污染”。实践中我常做的步骤是:先对内存和磁盘做镜像备份;然后确认系统时间和时区,方便对齐日志时间轴;再查看当前在线账户和会话,判断攻击者是否还在线。
很多初学者一上来就打开事件查看器翻日志,这不叫干净操作。如果攻击者恰好还在线,你打开日志的行为本身,就可能触发他某些反侦查机制,他会加速清理痕迹。更稳妥的方式是先做内存镜像(有条件的话),然后做磁盘镜像,最后在镜像或断网后的机器上进行分析。
6.2 用自带命令拼出线索链:一个非暴力排查流程
实际操作时,我习惯组合几个自带命令快速摸底。主要是几个方向:
- 用
net localgroup administrators看清管理员组成员,如果发现不认识的人,记录。 - 用
query user和query session查看当前登录会话,重点看有没有异常的远程会话挂着。 - 用
net start或service看服务列表,不认识的启动类型“自动”服务要重点排查。 - 用
schtasks /query /fo LIST /v查看计划任务,里面有“下次运行时间”和“任务要执行的程序路径”。 - 用
wmic process list brief看进程列表,挑出那些路径可疑(比如在Temp目录下、在用户Profile下)的进程。 - 用
netstat -ano查网络连接,重点关注连接到外部IP的ESTABLISHED连接,以及监听在高位端口的进程。
这些命令单看都不起眼,但把结果串起来,往往能组成一条线索链:某个不明进程对应不明服务,同时开启了外联端口,且登录会话来自异常IP,还跟着一个可疑计划任务——这条链基本够写一份告警了。
6.3 蓝队视角的“金丝雀检查单”
最终,无论是自己做巡检还是帮客户做安全评估,我都建议准备一份检查清单,把最关键的检查项固定下来。我常用的大概是这些:
| 检查项 | 命令/位置 | 关注点 |
|---|---|---|
| 管理员组成员 | net localgroup administrators | 是否有陌生账户 |
| 登录日志(成功) | 安全日志 EventID 4624 | 登录类型3/10的异常来源 |
| 登录日志(失败) | 安全日志 EventID 4625 | 是否大量失败尝试 |
| 新装服务 | 安全日志 EventID 7045 / services.msc | 不认识的自动启动服务 |
| 新装计划任务 | schtasks /query | 路径在Temp或用户目录的任务 |
| 网络连接 | netstat -ano | 外联IP、高位监听端口 |
| 启动项 | wmic startup list full | 可疑程序随系统启动 |
| 远程管理软件 | 已安装程序列表 / 服务列表 | 非必要的控制软件或突然出现的新软件 |
| 防火墙状态 | netsh advfirewall show allprofiles | 三个配置文件是否有人为关闭 |
| 账户策略 | net accounts | 密码策略、锁定阈值是否合规 |
这份清单不复杂,但胜在固定和可重复。每次检查都用同一批命令、同一份关注点,积累一段时间就有基线了。没有基线的情况下,很多“异常”你判断不了;有了基线,偏离基线的变化一眼就能看出来。
7. 从基础到防线:少走弯路的几点体会
最后分享几个个人感受。Windows基础这块,初级看的是“记住知识点”,进阶看的是“串起知识链”。账户、日志、防火墙、远程管理,这四个部分单独理解不难,但攻击者往往是把它们串在一起来利用的——找个弱口令账户、远程连进去、杀了日志、留个服务后门、再开个防火墙放行端口,整个过程一气呵成。
所以安全人员排查时也要有这种“链路思维”,不是看到一个异常点就停,而是顺着异常点往前推、往后查。比如发现管理员组多了一个账户,就要接着查:这个账户什么时候创建的?安全日志4720/4738有没有记录?它有没有登录过?登录到哪台机器?后续执行过什么命令?一连串问下来,答案才有说服力。
还有一条实用建议:自己在虚拟机里多练。装两台Win10,一台开远程桌面,一台当客户端,把自己当攻击者,反复尝试:暴破登录、创建隐藏账户、开启远程控制、清日志、留后门服务,然后再用上面那套排查清单去抓自己的痕迹。这个循环做几遍,你对Windows的理解会远超看文档一百遍。我最初就是这么练的,效果很好,很多排查手感就是这么建立起来的。