前几天客户这边发生一起安全事件,流量探针检测到本地服务器的某一个程序存在异常对外连接。由于只知道主机和连接端口,需要实现端口定位到程序在定位到程序位置,因此在此记录一下进程排查的思路。
排查思路:
对于windows系统中的进程排查,主要是找到恶意进程的PID、程序路径,有时还需要找到PPID(PID的父进程)及程序加载的DLL。
一般情况下会通过上传恶意程序实现内网主机对外连接,但也不排除上传恶意的动态链接库实现dll劫持,实现非法的对外连接。
一般的排查思路是 查看本地会话连接--锁定进程--筛选进程是否调用恶意dll--锁定文件位置
netstat指令
netstat指令主要是用于查看本地TCP/UDP连接的指令,以用来查看所有活动的网络连接。
指令参数:
-a
显示所有连接和侦听端口。
-b
显示在创建每个连接或侦听端口时涉及的可执行文件。在某些情况下,已知可执行文件托管多个独立的组件,此时会显示创建连接或侦听端口时涉及的组件序列。在此情况下,可执行文件的名称位于底部 [] 中,它调用的组件位于顶部,直至达到 TCP/IP。注意,此选项可能很耗时,并且可能因为你没有足够的权限而失败。
-e
显示以太网统计信息。此选项可以与 -s 选项结合使用。
-f
显示外部地址的完全限定域名(FQDN)。
-n
以数字形式显示地址和端口号。
-o
显示拥有的与每个连接关联的进程 ID (PID)。
-p <proto>
显示 proto 指定的协议的连接;proto 可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s 选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-q
显示所有连接、侦听端口和绑定的非侦听 TCP 端口。绑定的非侦听端口不一定与活动连接相关联。
-r
显示路由表。
-s
显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;-p 选项可用于指定默认的子网。
-t
显示当前连接卸载状态。
-x
显示 NetworkDirect 连接、侦听器和共享终结点。
-y
显示所有连接的 TCP 连接模板。无法与其他选项结合使用。
interval
重新显示选定的统计信息,各个显示间暂停的间隔秒数。按 CTRL+C 停止重新显示统计信息。如果省略,则 netstat 将打印当前的配置信息一次。
通常使用 netstat -ano 就可以实现最基本的连接、连接IP、关联进程的排查工作
netstat 可以通过管道符使用findstr进行筛选
通过上面的指令可以快速定位异常端口与对端IP以及恶意进程的PID,接下来只需要使用PID查询进程程序以及程序位置即可。
tasklisk指令
tasklist
是一个 Windows 命令行工具,用于显示当前正在运行的所有进程及其相关信息。它类似于任务管理器的命令行版本,可以提供关于每个进程的详细信息,如进程ID、会话名、内存使用情况等
tasklist/?用于获取指令操作的帮助
使用 tasklist/FI 进行关键字查找 定位到指定的PID
获取到指定进程的进程映像名称,记下来只需基于进程映像和PID查找进程文件
WMIC 程序接口
WMIC
(Windows Management Instrumentation Command-line)是一个强大的命令行工具,用于访问Windows Management Instrumentation (WMI)来管理和查询系统信息。它的用法太多这里只介绍使用它来定位PID的文件路径
获取到PID=564的文件所在位置。