psexec的底层实现原理是什么
作者:互联网
讲在前面
我们在这里学习的是sysinternals工具包中的psexec.exe。本文对于psexec.exe的实现具体理论技术不做赘述,国内外已有优秀的博客对此做了非常详细的解释(本文借鉴国内已有的文章)。本文从实际出发,复述psexec在实现上需要了解的几个重点知识,至于重点知识是否需要深入了解,读者可自行深入。
我们先知道执行psexec会产生那些日志,然后我们再了解psexec执行过程中的技术细节,最后我们来总结日志、psexec的技术细节了解对于我们检测此类横向移动有什么帮助。
日志产生
psexec在完成一次正常的命令执行时,产生了那些日志。
psexec.exe \\xxx.xxx.xxx.xxx -u username -p password -s cmd
\\返回一个指定PC的system权限的交互式shell
在执行上述命令的一瞬间,目标机器上事件日志中出现了如下日志记录:
7036日志信息提示如下:
PSEXESVC 服务处于正在运行状态。
7045日志信息提示如下:
服务已安装在系统中。
服务名称: PSEXESVC
服务文件名: %SystemRoot%\PSEXESVC.exe
服务类型: 用户模式服务
服务启动类型: 按需启动
服务帐户: LocalSystem
4697日志中关键日志信息:
ServiceFileName:%SystemRoot%\PSEXESVC.exe
4624中日志中提示登录帐户为:
TargetUserName:Administrator
5145日志中关键日志信息:
使用者:
安全 ID: TESTDOMAIN\Administrator
帐户名: Administrator
帐户域: TESTDOMAIN
登录 ID: 0x25A393
网络信息:
对象类型: File
源地址: 192.168.0.104
源端口: 49165
共享信息:
共享名称: \\*\ADMIN$
共享路径: \??\C:\Windows
相对目标名称: PSEXESVC.exe
综述,执行该程序一定会出现如下日志:
- 4697
- 4624
- 7045
- 7036
- 5145
注意:日志的产生需要开启审核策略
- 7045、7036此类系统日志无需设置,默认开启
- 4697、4624、5145此类安全审核日志需要自定义设置高级审核策略。
- 4697:高级审核策略配置->审核策略->系统->审核安全系统扩展->成功
- 4624:高级审核策略配置->审核策略->登录\注销->审核登录->成功
- 5145:高级审核策略配置->审核策略->对象访问->审核详细的文件共享->成功和失败
流程简述
从日志产生中我们发现在启动psexec建立连接后,远程机器上会被安装一个服务:psexecsvc,安装服务会留下日志。那么它的执行流程是什么样子呢?我们这里按照已有的分析文章来简述:
- 登陆远程主机
- 连接admin$共享
- 写入psexesvc.exe文件到共享目录下,也就是远程主机的c:\windows下
- 利用ipc命名管道调用svcctl服务
- 利用svcctl服务开启psexesvc服务
- 生成4个命名管道以供使用
上述内容摘抄至文章:由psexec远控的实现原理到windows命名管道
其中不得不提到如何认证,如何创建命名管道符,至于如何创建管道符,如何进行认证,我们依旧阅读现有的分析文章:
- TCP3次握手连接目标445端口
- 协商使用何种的smb协议
- 进行ntlm认证
- 认证成功后,首先尝试连接IPC$,然后再尝试连接admin$, 以此将 PSEXESVC.exe上传到/admin$/system32共享文件夹内
- DCE/RPC调用svcctl并创建用于运行 PSEXESVC.exe 的服务"PSEXESVC"
- 关闭了svcctl服务的请求,并去请求PSEXESVC服务并创建第一个PSEXESVC命名管道
- 创建剩余三个命名管道命名管道:stdin(输入)、stdout(输出)、stderr(输出)
上述内容摘抄至文章:
命名管道的作用:
命名管道基于smb协议通信。它是用来让两个进程间进行通信,这两个进程可以是本地进程,也可以是远程进 程。命名管道有点类似于socket连接,是用来传输数据的,可以设置具体的权限让指定权限的进程才能连接命 名管道,理论上每个程序都能连接命名管道,只是连接之后能做的事情不同,具体能做什么事跟服务端的配置有 关系。 下面总结几点: 1.命名管道是C/S架构,必须让服务端某个进程先创建命名管道。 2.命名管道可以被任何符合权限的进程去访问,且何种权限可以访问是可以自定义的。 3.客户端可以是本地的某个进程或者远程的某个进程,本地进程访问命名管道方式为\.\pipe\pipename 远程进程访问命名管道方法为\ip\pipe\pipename。
防御:
在检测以及防御此类横向移动上,笔者这里也给出相应的参考文章和一定的建议。
注意:一般来说大家都将PSEXESVC作为检测的关键信息。但是psexec是可以修改其步骤中需要创建的服务、管道符的,所以如果攻击者将其特征修改,那么就不能以PSEXESVC作为检测的关键信息
建议:
1、相对来说重点关注5145日志中的如下字段是比较可靠的。其他日志可以作为辅助信息,但是信息量没有5145多。
共享信息:
共享名称: \\*\ADMIN$
共享路径: \??\C:\Windows
相对目标名称: PSEXESVC.exe
2、减少具有管理员权限的帐户数量来强制执行最小权限原则。另外是对网络进行分段并创建策略来限制一个子网络中的受感染设备与其他网络设备的交互。但是网络分段很难建立和维护。还可以将 Windows 注册表配置为要求用户帐户控制 (UAC) 批准任何需要管理员权限的 PsExec 操作。
3、一棍子打死,内网环境中出现psexec的活动就视为恶意活动。所以这就对检测上需要防御设备进行全方位的检测,psexec活动中的创建管道符操作、远程调用svcctl的操作、连接共享盘符并上传的操作等都需要进行监控并深入分析。
4、就目前来看,设备只能将信息收集并以友好的形式展示,至于从中筛选出有效、可靠、准确的威胁信息,依旧离不开人,并且对人的技术要求、时间要求占比不小。
5、可以考虑使用ATA1.9(微软已不在支持这款产品,该产品转型为ATP了)、WatchAD(开源域内检测工具)、Sysmon(日志收集工具),上述工具除了ATA外可以自定义检测规则来达到防御的目的。
6、psexec还有impacket、MSF、CS等可以实现,所以我们要将所能搜集到的工具都测试一遍,得到普遍的结果来完善检测规则。
参考文章:
总结:
我们通过本文,了解了psexec执行会产生那些日志,我们也简单知道了psexec执行会有哪些技术上的细节,那么至于在流量分析上的具体步骤,本文未作复述,这里笔者选择推荐优秀的分析文章来供读者参考,三篇文章各有分析的手法,各有自己的思考,但是总归来说,大同小异。
参考文章:
标签:exe,PSEXESVC,管道,psexec,命名,原理,日志,底层 来源: https://blog.csdn.net/Ping_Pig/article/details/121229030