使用WinSCP检测横向移动的数字取证指南

本文详细探讨了攻击者如何利用WinSCP工具在企业网络中进行横向移动,并提供了完整的数字取证方法,包括客户端和远程系统的关键证据收集与分析技术。

使用WinSCP检测横向移动

RDP是攻击者在环境中横向移动的常用方式。从取证角度看,当攻击者使用RDP时,我们可以利用远程系统上的Shellbags、链接文件和跳转列表等证据来查看攻击者在RDP会话期间访问了哪些内容。

攻击者远程访问系统的另一种方式是使用名为WinSCP的程序。通过WinSCP,他们可以浏览远程系统上的文件夹和文件,将文件夹和文件复制回当前所在系统,甚至可以在远程系统上搜索文件!

攻击场景

这里我重点关注的场景是:攻击者已经入侵了网络上的某个系统,并正在使用WinSCP浏览同一网络上的其他计算机。在这种情况下,他们可以浏览人力资源系统以寻找税务信息,浏览服务器以寻找数据库,或浏览工作站以寻找知识产权数据。

由于他们没有使用Windows资源管理器,与RDP相比,这在远程系统上留下的活动痕迹非常少。基本上,他们可以免费获得浏览权限。他们甚至可以通过WinSCP文本编辑器打开远程文档。

SSH服务安装

可能有人会争辩说RDP在Windows系统上默认可用,而FTP/SSH则不是。但猜猜怎么着?从Windows 10 1809和Server 2019开始,它已成为"可选功能"的一部分,可以轻松安装在Windows上。事实上,一个简单的PowerShell命令就可以安装它。而且,最重要的是,它会自动创建防火墙规则并添加SSH用户。多么周到!

1
2
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd

作为奖励,添加以下命令使服务自动启动:

1
Set-Service -Name sshd -StartupType 'Automatic'

攻击者工作流程

攻击者在入侵网络后通常会执行以下步骤:

  1. 转储管理员凭据
  2. 枚举系统以获取IP地址/主机名
  3. 向所有系统大规模推送PowerShell脚本,执行诸如禁用防火墙、安装后门和禁用防病毒软件等操作

只需再添加一个命令来安装SSH,现在所有这些系统都可以使用WinSCP进行连接。

哦——我有没有提到WinSCP带有便携式版本?便携式版本使攻击者可以轻松下载和使用。许多博客文章都提到了一个包含WinSCP设置的注册表项。但是,便携式版本并不在那里存储设置。

取证证据收集

WinSCP客户端系统证据

与WinSCP相关的大部分证据将位于运行它的主机上。运行WinSCP会生成许多文件执行时常见的证据:Prefetch、shimcache、amcache、userassist等。然而,最有价值的证据将是WinSCP.ini文件和SRUM数据库。

WinSCP.ini文件

WinSCP.ini是一个包含配置设置的文本文件。它位于与WinSCP.exe文件相同的目录中。在WinSCP会话结束时,用户会被提示保存工作区:

即使不保存工作区,WinSCP也会在WinSCP.ini文件中保存对调查有价值的信息。这包括连接到的系统、用户名、从远程系统保存文件到本地系统的位置以及本地系统上最后访问的路径。以下是一些配置部分的示例:

连接到的系统:

1
2
3
4
[Configuration\CDCache]
ItSupport@169.254.249.229=412F433A2F55736572732F<SNIP>
mdegrazia@169.254.171.129=412F433A2F55736572732F<SNIP>
ITSupport@DESKTOP-PV2TN0G=412F433A2F55736572733D<SNIP>

保存文件的文件夹:

1
2
3
[Configuration\History\LocalTarget]
0=C:%5CUsers%5CCrashOveride%5CDocuments%5CExfil%5C*.*
1=C:%5CUsers%5CCrashOveride%5CDocuments%5CSystem3%5C*.*

本地系统上最后打开的文件夹:

1
2
3
4
5
6
7
8
9
[Configuration\Interface\Commander\LocalPanel]
DirViewParams=0;1|150,1;70,1;120,1;150,1;55,0;55,0;@96|5;4;0;1;2;3
StatusBar=1
DriveView=0
DriveViewHeight=100
DriveViewHeightPixelsPerInch=96
DriveViewWidth=100
DriveViewWidthPixelsPerInch=96
LastPath=C:%5CUsers%5CCrashOveride%5CDocuments%5CExfil

如果保存了会话设置,你会得到一个名为Sessions的额外部分,其中包含保存的会话名称。默认为"My Workspace"。这会保存最后的本地目录和远程目录,以及密码。有关密码加密的信息,请查看https://github.com/winscp/winscp/blob/master/source/core/Security.cpp。

WinSCP.ini文件似乎在会话关闭时更新。因此,将WinSCP.ini文件的最后修改日期与Prefetch时间戳结合使用,可以让你了解最后一次会话的持续时间。

SRUM数据库

SRUM数据库每小时收集一次每个应用程序的网络使用情况信息。要了解使用WinSCP可能复制/下载了多少数据,它是一个极好的资源。使用Mark Bagget的SRUM Dump解析SRUM数据库显示,使用WinSCP传输了大量数据:

如上所示,如果你怀疑使用了WinSCP,解析数据库可以提供有关传输了多少数据、与之关联的用户帐户以及发生时间的详细信息。

WinSCP远程系统证据

在远程系统上,你可以查找以下几项来确定是否有人使用WinSCP浏览过它:事件日志条目、OpenSSH安装的证据以及文件系统时间戳。

OpenSSH证据

如前所述,为了让WinSCP连接到系统,必须运行FTP或SSH服务器来接受连接。寻找表明这些服务存在的证据。对于OpenSSH,查找c:/Windows/System32/OpenSSH/sshd.exe、SSHD.exe prefetch文件以及sshd.exe服务。与这些条目相关的时间戳可能有助于确定攻击者首次使用它连接的时间。

事件日志条目

正如预期的那样,有一个与WinSCP客户端登录相关的事件ID 4624。登录类型为5,帐户名为sshd_1860,域为VIRTUAL USERS,进程为sshd.exe。

随后,在OpenSSH操作事件日志中有一条记录,记录了WinSCP用于连接的IP地址和帐户:

文件时间戳

登录后,攻击者可以使用WinSCP有效地浏览文件夹,甚至通过WinSCP打开文件,在远程系统上留下的痕迹很少。在测试期间,我注意到一个迹象表明这种情况正在发生:被点击或复制的文件夹和文件的访问日期被更改。然而,访问日期并不是用于得出结论的可靠证据,必须与其他佐证证据一起使用。

SRUM数据库

同样,SRUM数据库在这里真正发挥作用,可以知道是否有异常。查看SRUM数据库并按"发送字节数"排序,显示在此时间段内由应用程序sshd发送了大量数据:

总结

总之,攻击者可以使用WinSCP作为RDP的替代方案。使用WinSCP访问环境中的系统似乎比使用RDP留下的痕迹更少。既然SSH可以轻松安装到Windows 10和Windows Server 2019上,我预计我们可能会在网络入侵案件中看到更多使用WinSCP在环境内横向移动的情况。

在主机系统上查找WinSCP.ini文件和SRUM数据库。对于远程系统,查找与ssh客户端/服务器相关的事件ID 4624以及FTP/SSH服务器的应用程序日志。检查SRUM数据库中与ssh客户端相关的数据传输。一旦知道了时间范围,检查在同一时间范围内有最后访问时间戳的大量文件。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计