适用场景:运维、安全分析、应急响应、数字取证。常见配合工具包括 PsLoggedOn(用于查看当前用户登录状态)、PsExec(远程执行命令获取数据),以及 Windows 安全事件日志中的 4624(登录成功)、4634(会话注销)、4647(用户主动登出)等事件。
LogonSessions 是 Sysinternals 套件中的一个轻量级命令行取证工具,主要用于列出系统中所有当前处于活动状态的“登录会话”(Logon Session)。通过可选参数,还可以展示每个会话下关联运行的具体进程列表。
其核心功能可通过以下命令快速调用:
logonsessions [-c[t]] [-p]
其中:
-c:输出为 CSV 格式,便于后续导入分析;-ct:使用制表符分隔字段,适合文本处理;-p:显示各会话所归属的进程清单。该工具提供的关键信息包括:
结合 -p 参数时,还能看到挂靠在特定会话下的完整进程树。
总结来说,它回答了两个核心问题:谁 在这台机器上拥有有效的登录凭证,是以何种方式登录的,以及这些会话目前正支撑着哪些正在运行的进程。
Interactive(本地交互)和 RemoteInteractive(远程终端服务),快速识别是否存在异常长期驻留的远程连接。Service 类型会话中,表明可能存在被误当作普通用户登录的风险。Network 类型会话突然出现,且来源 IP 或主机可疑,可能提示攻击者利用票据传递或哈希传递进行内网渗透。-p 输出),可能是隐藏的恶意程序在维持访问权限。NewCredentials 所示情况),建议进一步审查对应的 4624 安全日志以确认上下文。理解输出结果中的关键字段是有效分析的前提:
Interactive:本地物理或控制台登录RemoteInteractive:RDP 或终端服务远程登录Service:服务账户自动启动登录Batch:计划任务或批处理作业触发Network:网络共享资源访问Unlock:屏幕解锁操作quser 对齐分析。logonsessions -p
适用于现场排查,直观展示所有活跃登录会话及其关联进程,重点筛查是否存在:
logonsessions -c > C:\Temp\logonsessions_local.csv
将输出保存为 CSV 文件,便于在 PowerShell 或 Excel 中进行集中过滤、对比和趋势分析,适合大规模资产基线核查。
psexec \\HOST -s -accepteula cmd /c "logonsessions -ct > C:\Temp\ls.tsv"
psexec \\HOST cmd /c type C:\Temp\ls.tsv
由于 LogonSessions 本身不支持远程执行参数,推荐通过 PsExec 工具远程下发命令并收集结果,确保取证过程的一致性和可靠性。
RemoteInteractive(远程交互)类型中发现陌生域用户或本地账户登录,尤其是无排期维护时段出现的连接。Interactive/RemoteInteractive(即非服务类登录类型)中,说明已被用于交互式登录,存在权限滥用风险。-p 查看进程图谱),需警惕凭据窃取或会话劫持。将批量采集的 CSV 数据导入 PowerShell,可实现自动化筛选与告警:
# 示例:读取 LogonSessions CSV 并筛选远程会话
Import-Csv .\logons.csv | Where-Object { $_.'Logon Type' -eq 'RemoteInteractive' } | Select User, Domain, 'Logon Time', 'Auth Package'
结合条件判断、导出报表或生成可视化图表,提升大规模环境下的分析效率。
-p 参数启用进程枚举功能。此外,部分高权限保护进程可能因 UAC 或 PPL 限制无法被枚举。| 登录类型 | 含义 | 典型场景 |
|---|---|---|
|
Interactive | 本地键盘鼠标登录 |
|
RemoteInteractive | RDP、终端服务远程登录 |
|
Service | 服务启动时自动登录 |
|
Batch | 计划任务执行 |
|
Network | 访问共享文件夹、打印机等 |
|
Unlock | 解锁锁定的工作站 |
事件日志提供了时间序列线索,而 LogonSessions 则展示当前的“
此刻状态”。
结合 Procmon、Autoruns 和 Sysmon 使用:
在定位到具体登录会话后,可进一步追溯相关进程行为及持久化项的来源,实现更深入的分析。
# 首先在目标机器上执行命令生成 CSV 文件:
logonsessions -c > C:\Temp\ls.csv
$rows = Import-Csv C:\Temp\ls.csv
# 筛选远程交互式登录会话,并排除已知运维账户
$whitelist = @('CORP\svc_ops','CORP\jumpuser')
$alert = $rows | Where-Object {
$_.'Logon Type' -eq 'RemoteInteractive' -and
($_.User -ne $null) -and
($whitelist -notcontains ("$($_.Domain)\$($_.User)"))
}
# 输出关键字段并格式化显示
$alert | Select-Object 'User','Domain','Logon Type','Session','Logon Time','Auth Package' |
Format-Table -Auto
Q:为何仅登录一次却看到多个会话?
A:除用户登录外,系统服务、网络共享访问等操作也会创建会话。例如:
Network
此类情况属于正常现象;判断重点应放在会话的类型与来源是否合理。
Q:如何将输出接入 SIEM 系统?
A:可通过以下方式:
-c
或
-ct
统一将数据落地至指定路径,由采集代理上传。由于字段结构固定,SIEM 解析成本较低。(参考:learn.microsoft.com)
Q:是否支持直接远程查询?
A:该工具本身不提供远程执行参数;推荐使用 PsExec 远程下发命令并回传结果。
| 应用场景 | 对应命令 | 用途说明 |
|---|---|---|
| 快速巡检 | |
查看当前有哪些用户、以何种方式登录至主机,并观察其关联的进程信息 |
| 导出后深入分析 | |
将结果导入 Excel 或 PowerShell 中进行后续处理和筛选 |
| 远程取证(无代理环境) | |
适用于无法部署代理的场景,实现远程拉取会话数据 |
| 仅关注远程交互式会话 | logonsessions -p | findstr RemoteInteractive | 过滤输出,只保留远程登录记录 |
更多详细参数说明与官方示例,请参阅:
Microsoft Learn – LogonSessions v1.41(learn.microsoft.com)
下一篇预告(9.9):
SDelete——深入剖析安全擦除机制,解读 TRIM 与回收站背后的隐患(涵盖 SSD 场景及合规注意事项)。
扫码加好友,拉您进群



收藏
