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

本文详细探讨了攻击者如何使用WinSCP工具在受感染网络中进行横向移动,并提供了检测WinSCP使用的关键数字取证方法和相关技术细节,包括WinSCP.ini文件分析、SRUM数据库解析和事件日志检查等。

使用WinSCP检测横向移动

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

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

攻击场景

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

由于他们没有使用Windows资源管理器 shell,与RDP相比,这在远程系统上留下的关于他们所做操作的工件非常少。基本上,他们可以免费浏览。他们甚至可以从WinSCP文本编辑器中打开远程文档。

OpenSSH的安装

可能有人会争辩说,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可以以这种方式使用,我们可以找到哪些取证工件来帮助确定在"跳板"系统和远程系统上执行了哪些操作?我在一些Windows 10 1909机器上进行了一些测试,看看使用便携版WinSCP(v.5.17)留下了哪些工件。

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

1
2
3
4
5
6
7
[Sessions\My%20Workspace/0000]
HostName=169.254.44.249
UserName=ITSupport
LocalDirectory=C:%5CUsers%5Cmdegrazia%5CDocuments%5CSystem3%5CW2s
RemoteDirectory=/C:/Users/Acid%20Burn/Documents/W2s
IsWorkspace=1
Password=A35C435B9556B1237C2DFE15080F2<TRUNCATED>

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

通过上面的信息可以看出,查看这个.ini文件可以帮助检查员确定攻击者可能浏览了远程系统上的哪些内容,以及他们可能在本地系统上保存了什么,即使这些内容后来被删除了。

SRUM数据库

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

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

WinSCP远程系统工件

在远程系统上,你可以查找以下几项来确定是否使用WinSCP浏览过它:事件日志条目、OpenSSH安装的证据以及文件系统时间戳。注意——在我的示例和测试中,我安装了Windows自带的OpenSSH。WinSCP可以使用其他FTP/SSH服务器进行连接。如果你怀疑可能使用了WinSCP,请记住这一点——你的工件可能会有所不同。

OpenSSH工件

如前所述,为了使WinSCP连接到系统,必须运行FTP或SSH服务器来接受连接。寻找表明这些服务存在的工件。对于OpenSSH,寻找c:/Windows/System32/OpenSSH/sshd.exe、SSHD.exe prefetch文件以及sshd.exe服务。与这些条目相关的时间戳可能有助于确定攻击者首次使用它连接的时间。当我安装OpenSSH时,它还创建了一个用户帐户,该帐户可以在SAM配置单元中找到(此处使用RegRipper解析显示):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Username        : sshd [1003]
SID             : S-1-5-21-1445295406-4253784506-242647837-1003
Full Name       : sshd
User Comment    : 
Account Type    : 
Account Created : Sun Feb 23 06:48:08 2020 Z
Name            :  
Last Login Date : Never
Pwd Reset Date  : Sun Feb 23 06:48:08 2020 Z
Pwd Fail Date   : Never
Login Count     : 0
  --> Password does not expire
  --> Normal user account

事件日志条目

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

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

文件时间戳

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

以下是被复制的文件和文件夹的示例。“Teslacam"文件夹被复制,这导致远程系统上所有被复制文件的访问日期被更新:

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 设计