张泽 陈顺 郭雅楠 余子龙 靖阔 杨建强
摘 要: 安全用户经常需要分析并找出系统中的可疑程序。利用Windows的PowerShell、WMI和内置程序实现了一个可疑程序取证工具,它能够辅助安全用户对可疑程序进行分析和取证。相较于第三方工具,该工具更加方便、安全、可靠,在某些方面也更加智能。测试结果表明,该工具能够切实地辅助安全用户识别可疑程序,收集与可疑程序有关的重要数据。
关键词: PowerShell; 可疑程序; 安全; 取证
中图分类号:TP309.5 文献标识码:A 文章编号:1006-8228(2022)02-23-04
Design of suspicious program forensics tool of using PowerShell
Zhang Ze, Chen Shuncai, Guo Yanan, Yu Zilong, Jing Kuo, Yang Jianqiang
(School of Computer Engineering, Hubei University of Arts and Science, Xiangyang, Hubei 441053, China)
Abstract: Security users often need to analyze suspicious programs in the system. A forensics tool for suspicious program was implemented by using Windows PowerShell, WMI and built-in programs. This tool can assist security users to analyze suspicious programs and collect the evidences. Compared with third-party tools, this tool is more convenient, safe, reliable, and smarter in some aspects. The test results show that the tool runs well and functions normally, and can effectively assist security users in identifying suspicious programs and collecting important data related to suspicious programs.
Key words: PowerShell; suspicious program; security; forensics
0 引言
防病毒軟件并不能检测出所有的恶意软件(或病毒),特别是新出现的恶意软件。另外,有些不被识别为恶意软件的程序,尽管并无明显的恶意行为,但是却会消耗大量的网络带宽资源、CPU计算资源或频繁读写磁盘,严重影响合法程序的正常运行;有些软件会时不时地弹出广告窗口;有些软件会诱导用户修改系统配置或下载安装其他软件。这些软件程序,尽管可能不被识别成病毒或恶意软件,但是却会影响用户使用系统的体验,甚至会影响业务系统的正常运行[1]。因此,很多企业的网络管理员或安全分析员,以及具有较强安全意识的普通用户,都会经常对系统中正在运行的进程进行分析,以识别出可疑的程序(如恶意软件、流氓软件、间谍软件、广告软件等)。虽然Windows的“任务管理器”在一定程度上可用于对可疑的程序进行分析,但它并不是一个很专业的工具,特别是较早版本的Windows系统(包括Windows 7)的任务管理器更是如此。另外,某些第三方工具如ProcessHacker虽然能够很好地用于分析可疑程序[2],但是,如果企业网络禁止安装第三方软件的话,则可能无法使用此类软件。这些工具通常不能对远程系统进行分析,在某些方面也缺少一定的智能。
我们利用Windows的PowerShell、WMI和内置程序实现了一个可疑程序取证工具。该工具能够收集可疑程序的相关信息,辅助安全用户(主要指安全分析师、网络管理员以及具有较强安全意识的普通用户等)对可疑程序进行分析和取证。该工具既可以对本地系统的进程进行分析取证,也可以对远程系统上的进程进行分析取证。同时还能够智能地识别出某些可疑的进程,从而辅助安全用户快速定位恶意或流氓程序。该工具能够在Windows 7及之后的所有Windows系统上运行,并且不需要借助任何第三方工具,仅仅依靠Windows自身提供的程序或功能,就可以对可疑程序进行分析、取证。相较于第三方工具,该工具更加方便、安全、可靠,在某些方面也更加智能。
1 功能设计
要分析并确定系统中的可疑进程或程序,安全用户需要了解Windows系统中常见的进程(特别是系统进程),熟悉它们的名称和上下文环境。比如特定的父进程、特定的执行账户、固定的程序文件路径(启动位置)等。如果常见的进程在父进程、执行账户或启动位置等方面出现偏离,则可能是恶意程序[3]。对于系统中不常见的进程,也需要从上述几个方面进行判断。此时主要看该进程的执行账户是否合适、父进程是否恰当、启动位置是否合理。比如,普通进程的执行账户是System而非当前用户帐户,在资源管理器中启动的程序的父进程不是explorer.exe,程序的启动位置不是Program Files和System32,这些都是程序可疑的线索。因此,取证工具需要向安全用户呈现系统中所有进程的如上信息。本工具将以树型格式显示进程的父子关系,同时给出各个进程的执行账户和启动路径等信息。为了帮助安全用户快速定位可疑的进程,本工具将借鉴人工智能技术来尝试识别可疑的进程。
像恶意软件、流氓软件、间谍软件或广告软件之类的可疑程序,为了能够长期存活,通常都会采用某种方式随系统启动而运行。这些方式包括:在启动文件夹中或注册表的自启动项中存放本程序文件的路径或快捷方式,或以服务或计划任务的方式启动自己[3]。本工具将查看可疑进程在上述位置是否存在启动命令。
可疑程序可能还会与远程计算机通信,本工具将监视可疑程序的网络活动。可疑程序的创建时间有时也能作为分析线索。另外,某些可疑程序为了保存配置信息或避免被安全用户发现,还会创建新的文件。本工具将查看可疑程序文件的创建时间并查找与该时间相近的其他文件的路径信息。
除了以上功能,本工具还利用恶意程序检测网站VirusTotal查看可疑程序是否是恶意程序[4]。除了对本地Windows系统上的可疑程序进行取证,本工具还可以对远程系统上的可疑程序进行取证。另外,默认情况下,所有的取证结果都显示在屏幕上,本工具也可以将各种取证结果以独立的CSV或TXT文件形式保存起来,方便长期保存和事后分析。
概括而言,本工具具有如下六大功能:①显示带有关键信息的进程树;②智能识别可疑进程;③搜集可疑程序的相关信息;④利用VirusTotal在线检测可疑程序;⑤保存取证结果到文件中;⑥远程取证。
2 设计要点
2.1 PowerShell版本的选择
不同版本的Windows使用的PowerShell版本并不相同。比如,Windows 7及Windows Server 2008 R2默认安装2.0版的PowerShell,Windows 10、Windows Server 2016和Windows Server 2019默認安装PowerShell V5.1[5]。不过,基本上来说,PowerShell是向前兼容的,这意味着为旧版本的PowerShell编写的脚本通常可以在新版本的PowerShell上运行。另外,尽管可以通过安装PowerShell V1.0让某些早期的Windows系统(比如XP SP2)支持PowerShell,但这些Windows系统已经过时,极少有人去使用。还有,尽管微软已经结束对Windows 7的支持,但是Windows 7目前仍然占有比较大的市场[6]。所以本工具使用环境开发PowerShellV2.0,从而可以在Windows 7及之后的所有Windows系统上运行。
2.2 遇到的问题及解决方法
尽管以PowerShellV2.0作为开发环境可以保证本工具能够在主流的Windows上运行,但是Power-
ShellV2.0是比较早的版本,缺少实现本工具的某些功能的命令或函数。我们采用的解决办法是利用Windows的某些内置程序来实现这些功能。如表1所示。表1中同时还给出了PowerShell V2.0之后新增的具有类似功能的函数。
在中文版Windows中,控制台的默认代码页是936。在此代码页下,程序schtasks无法正常工作。为了能够顺利使用schtasks获得系统中的计划任务,我们先保存当前的代码页,然后使用命令chcp切换到代码页437(此代码页下schtasks可以正常工作),然后执行schtasks获得计划任务列表,之后再切换回原来的代码页。
2.3 其他重要设计
PowerShell以两种不同的方式来进行远程处理,一种称为一对一远程处理,另一种称为一对多远程处理。前者实际上是在远程系统上执行命令,包括脚本程序,后者是把命令发送到多个远程计算机上,每个计算机独立地执行命令并返回结果[7]。当使用本工具对远程系统上的进程进行分析取证时,如果使用第一种远程处理方式,则需要事先把脚本程序复制到远程系统上,这样做不仅麻烦,效率也低。所以,我们采用第二种远程处理方式,这种方式使用PowerShell的Invoke-Command命令进行一对多远程处理。
为了简化远程取证的编码,并以统一的方式处理本地取证和远程取证,本工具把所有的数据收集功能集中在一个函数模块中。这样做,一方面,只需用一条Invoke-Command命令调用该函数即可完成对远程系统上相关信息的收集,另一方面,也使得程序的流程更加简洁,逻辑更加清晰。
为了帮助安全用户快速定位可疑的进程,借鉴人工智能思想,本工具根据Windows中程序启动的常见位置、环境变量path中的路径、常见的Windows程序启动位置,来判断系统中的进程的启动位置是否异常;同时判断部分常见的系统进程的父进程和执行账户是否异常。如果异常,则给出进程可疑的提示信息,从而辅助安全用户快速定位可疑的进程。
在利用VirusTotal来查看可疑程序是否是恶意文件时,我们把可疑的程序文件和它所加载的所有非微软官方的DLL文件的Hash指纹提交到VirusTotal来进行查询。之所以不查询微软的DLL,一是它们基本上都是Windows系统文件。既然我们信任并使用Windows的内置程序,我们也应该信任这些DLL;二是可以节约查询时间,提高执行速度。
3 软件实现
本工具是一个基于PowerShell脚本的命令行工具,其具体的执行结果或功能依赖于是否使用命令选项以及使用何种选项。当本工具不带任何选项时,将以树形的格式显示系统中的进程。如图1所示。
本工具可用的选项及其功能说明如下。
list:以列表的格式显示系统中各个进程的信息,包括进程的名字、ID、父进程的ID、用户账户、可执行文件路径、命令行参数。
p:后跟指定进程的ID,将搜索并显示该进程的家族线、加载的DLL、网络活动、与之相关的计划任务和服务、该进程在注册表中或启动文件夹中的自启动项、进程的可执行文件的时间戳等信息。该选项不能和下面的filepath同时使用。
filepath:后跟指定的程序文件的路径,将搜索并显示与给定的程序文件有关的信息(内容和选项p相似)。如果该程序文件作为进程在运行,还会显示进程的相关信息。该选项不能与p同时使用。
outpath:后跟指定的文件夹路径,将以CSV或TXT文件的格式在该路径下保存指定的进程(和选项p同时使用时)或程序文件(与filepath同时使用时)的有关信息。
minutes:后跟分钟数,将搜索与可疑的程序文件的创建时间相距给定时长的文件。
computer:后跟将要分析的远程计算机的名字或IP地址,将对远程计算机进行取证。
credential:当分析远程计算机时,可以使用该选项给出远程系统的账户凭据。
vcheck:在VirusTotal网站上检测可疑进程加载的模块文件(程序文件及其加载的DLL)是否是恶意文件。
从使用命令选项的角度,本工具的主要执行流程如图2所示。无论是本地取证还是远程取证(使用选项computer),执行流程都是一样的。需要说明的是,为突出主要流程和避免流程过于复杂,图2中省略了minutes选项。minutes只在使用p或filepath选项的时候使用,并且可以和outpath、vcheck同时使用。
4 结束语
许多公司或企业的网络信息系统对软件的安装有着严格的限制,因此安全用户可能无法使用合适的工具对系统中的可疑进程进行分析取证。本文中取证工具利用Windows的PowerShell、WMI和内置程序实现,不受企业软件安装策略的限制,可以运行在Windows 7及之后的所有Windows系统上。测试结果表明,本工具能够切实地辅助安全用户识别可疑程序,收集与可疑程序有关的重要证据。本工具不仅为严格限制软件安装的企业网络提供了一种对可疑程序进行分析和取证的选择,其特有的功能也是对现有的可疑程序分析工具的补充。本工具还有进一步拓展的空间。比如,增加同时对多个远程系统进行取证的能力;当通过向VirusTotal提交文件指纹来检测文件是否包含恶意代码失败时,转而提交文件内容来进行检测;提供更多自动识别可疑程序的途径,以增强软件的智能。未来我们将进一步强化本工具的功能。
参考文献(References):
[1] 陆英.时下流行的9种恶意软件[J].计算机与网络,2019,45
(10):55-56
[2] Hoskyn, Jane. FREE SOFTWARE that SPEEDS UP
YOUR PC[J]. Computer Act!ve,2014(426)
[3] 韓筱卿,王建锋等.计算机病毒分析与防范大全[M].北京:
电子工业出版社,2008
[4] 万立夫.用客户端直接到VirusTotal检测文件[J].电脑迷,
2014(2):73
[5] How to Check the PowerShell Version Installed? [2020-11-3]
http://woshub.com/check-powershell-version-installed/
[6] Windows 7正式退休 微软希望提升Win10市场占有率
[2020.01.15]. http://www.techweb.com.cn/it/2020-01-15/2773763.shtml
[7] Don Jones, Jeffery Hicks. Learn Windows PowerShell 3 in
a Month of Lunches (Second Edition)[M]. New York, US, Manning Publications Co,2013