目录导航
0x00 前言:
以下主要为一些Windows应急的排查方法,对于处置应急不要过于盲目无目的排查,如清楚入侵原因,可基于入侵行为来做于排查,比如服务器存在WebShell,那么排查着重点就应该放在网站根目录下可疑文件的排查(比如从文件创建时间来进行筛选),当然,如果要看攻击者入侵后做了什么事情,或者取证,可能就需要较为全面的分析。
0x01 应急辅助工具:
工具列表:
下面的工具也可以使用一些终端命令代替,不过使用工具有图形界面,更便于分析
工具名称主要功能下载地址与使用说明地址ProcessExplorer进程分析https://learn.microsoft.com/zh-cn/sysinternals/downloads/process-explorerProcessMonitor进程分析https://learn.microsoft.com/zh-cn/sysinternals/downloads/procmonTCPView网络连接分析https://learn.microsoft.com/zh-cn/sysinternals/downloads/tcpviewAutoRuns启动项分析https://learn.microsoft.com/zh-cn/sysinternals/downloads/autoruns火绒剑多功能分析,包含进程、网络连接、注册表、启动项等https://www.huorong.cn/需要下载火绒杀毒软件才可以安装或使用火绒剑LogonSessions登录分析https://learn.microsoft.com/zh-cn/sysinternals/downloads/logonsessionsNotMyFault内存取证https://learn.microsoft.com/zh-cn/sysinternals/downloads/notmyfault这个工具取证才会用到,不取证可不用LogParser日志分析,包含系统、IIS日志https://www.microsoft.com/en-us/download/details.aspx?id=24659D盾WebShell查杀https://www.d99net.net/河马WebShell查杀https://www.shellpub.com/
各工具的详细使用方法,可自行百度,处LogParser用起来稍微复杂外(命令行工具,需了解一定的SQL语法结构,可以使用系统自带的事件查看器替代),其余工具入门比较简单(图形化界面)
在线沙箱:
在线沙箱或引擎(杀毒引擎)可以协助分析可疑文件:
微步:https://x.threatbook.cn/
virustotal:https://www.virustotal.com/
奇安信在线沙箱:https://ti.qianxin.com/
对于杀毒软件,推荐火绒,毕竟有火绒剑,分析起来更加方便,但是要装火绒剑必须联网,如果是在不通外网的机器上,可以下载火绒、360杀毒(不用安装360安全卫士)等其他Windows杀毒软件。
0x02 排查前说明:
个人感觉做应急不应该无目的盲目排查,应当依据事件做切入口开始,比如感染木马或病毒,那么可以装杀毒查杀或者对进程、服务、定时任务、网络连接做排查,当然,客户想要比较全的报告或者是对服务器做安全排查,可以都排查一遍,防止出现漏网之鱼,如果是真遇到突发事件,应第一时间阻断或遏制攻击源,然后在分析入侵,但不要破坏环境(比如直接重置服务器或者备份恢复)
下面写的主要是单个排查可能会用到的一些技术,灵活使用就行了,当然具备一定的攻击入侵能力(不会的话,了解也行)对应急来说是很有帮助的,个人做应急很多时候会站在攻击角度来进行分析(比如我在分析的时候就会想,如果我作为一个攻击者,在入侵服务器后,会做什么,然后在做什么,目的是什么,然后就开展相应的排查,当然这种是在不清楚入侵源的情况下,分析攻击利用链,判断响应和扩散,因为很多时候并没有详细的入侵原因或者就是入侵很长一段时间了,在部署安全设备的时候发现,然后客户就说服务器被入侵了,或者扫描出来存在恶意程序,然后让排查行为,出具分析报告等等),比如攻击者获取服务器权限后,可能会使用
whoami
命令查看当前获取的权限,而这个平常管理员又不会用很多,所以在看系统日志的时候,可以先从whoami的进程创建开始分析,当然这只是举一个例子。
还有一点就是在做应急的时候记得做好截图记录,毕竟完事后要写报告的。
PS:下面各项排查可能不是很全,主要是懒,一般排查用这些即可,在全点就使用搜索引擎搜索,推荐搜索引擎:谷歌>必应>百度,搜技术文章,百度真的不如前两个,如必要用英文搜国外文章(把你要搜的中文翻译成英文或者简写几个关键词(空格把关键词隔开,如Windows evil services analysis))
0x03 账户排查:
攻击者入侵服务器后,为便于长期稳定控制,可能在服务器中创建一个隐藏账户,对于这类账户使用
net user
的用户查询语句是无法发现的,可以使用以下方法查看:
- Windows中隐藏账户特征为:用户名后面带有
$
符号,如test$
PS: lusrmgr.msc也可以查看隐藏账户
方法一:
# 下面命令是在PowerShell终端中才可执行,而非cmd终端# 使用下面命令查看是否存在末尾带$符合的用户名# 命令一Get-WmiObject-Class Win32_UserAccount |foreach{$_.Name }# 命令二Get-LocalUser
方法二:
打开注册表(regedit),前往路径
HKEY_LOCAL_MACHINE\SAM\SAM
(需要鼠标右键给予管理员权限才看查看其中内容),最终查看的路径为
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
:
方法三:
当然,也可以使用其他软件或者工具,比如D盾:
方法四:
攻击者如果入侵或创建隐藏账户,只要没有清理系统日志,那么可通过事件查看器,在Windows安全日志中筛选
事件ID4720
来查看是否存在隐藏用户的创建:(具体操作看系统日志排查的安全日志部分)
0x04 系统日志排查:
Windows系统日志可通过“控制面板->管理工具->事件查看器”查看,在事件查看器的Windows日志下就是操作系统所记录的日志,其中分为应用程序相关日志、安全相关日志、设置相关日志、系统相关日志和已转发相关日志,其中主要关注的日志为安全,
日志文件evtx头部HEX:45 6c 66 46 69 6c 65 00
其他信息可前往查阅:https://www.freebuf.com/vuls/175560.html
安全日志:
安全日志中主要分析账户的登录与创建、进程创建、外连记录、定时任务创建等项,以下为常分析事件的ID:
事件ID:
事件ID描述事件ID****描述4624用户登录成功事件4720创建账户事件4625用户登录失败事件4722启动账户事件4688已创建新进程事件4726删除账户事件4698已创建定时任务事件4738更改账户事件4699已删除定时任务事件5140网络共享访问事件4700已启用定时任务事件5156Windows筛选平台已允许连接4768Kerberos身份验证(TGT请求)4769Kerberos服务票证请求4776NTML身份验证1102清理日志
事件筛选:
用户登录类型ID:
登录类型****描述2交互式登录3网络登录(如net use或者网络共享)5服务启动,由服务器控制管理器登录7解锁8网络登录(如IIS登录验证)9新凭据登录 (呼叫方为出站连接克隆了其当前令牌和指定的新凭据。 新登录会话具有相同的本地标识,但对其他网络连接使用不同的凭据。)10远程交互(终端服务,远程桌面,远程辅助)11使用存储在计算机本地的网络凭据登录到此计算机的用户。 未联系域控制器以验证凭据。(缓存域证书登录)
系统日志:
事件ID描述事件ID****描述7045服务已安装在系统1014DNS请求
系统日志主要用于查看创建的服务和DNS请求。
比如安全设备监控到有服务器对外做恶意域名的访问,那么就可以通过系统日志排查出恶意域名DNS请求的信息。
一些日志分析方法
在登录类日志中,比如登录成功或者失败事件常规的网络信息中,是有登录源网络地址的
在计划任务创建事件中,在常规任务内容的XML内容下是有任务具体执行命令的
对于日志分析,可通过筛选登录失败事件快速判定当前系统是否存在暴力破解痕迹,如果发现登录失败事件在某一时间段过多,且日志记录时间一致(比如都是1秒,或者1秒内多条),如10-20条记录(正常情况下,人工输入猜测密码应该会在10条左右,且产生的日志时间是不固定的),既有可能是存在暴力破解操作,这时就需要在确认暴力破解的时间区间、登录类型、登录源(有些工具可能不会留下登录源IP地址),然后在筛选登录成功事件,查看是否存在相似特征的登录成功记录,如果存在,说明服务器密码被暴力破解成功,如果不存在,说明没有破解成功。
漏洞利用或者自动化工具特征:
如MS17-010漏洞的利用,会创建几个(MFS一般为2个)失败的登录日志,且类型为3,登录账户为空,如果利用成功,会在同时间段存在一个登录成功(登录类型为5)和特殊登录的日志,且登录用户均为System。(下图为MSF的漏洞利用日志记录)
以及关注登录日志中工作站名(计算机名称),如果发现该处为随机乱码字符,可能造成这条日志的为一些自动化工具:
当然日志的筛选还可以使用高级方法,也就是条件搜索,可以使用LogParser或者事件查看器的XML高级搜索技巧(Xpath语法),这里就不写了,这里可自行通过搜索引擎搜索这两种高级查询的用法。
比如搜索test$账户创建的进程日志:(事件查看器的高级语法)
<QueryList><QueryId="0"Path="Security"><SelectPath="Security">*[System[(EventID=4688)]] and *[EventData[Data[@Name='SubjectUserName']='test$']]</Select></Query></QueryList>
logParser使用技巧: https://blog.csdn.net/Memetali_ss/article/details/105324878
0x05 恶意程序的一些特征:
在讲进程、服务等排查前,先说一些常见的恶意程序特征,毕竟,如果不清楚特征,下面的排查也很难下手,还不如全盘杀毒来的稳。
存放目录或路径:
对于隐藏文件的查看,可以使用以下两个命令:
CMD: dir /ah 或者 dir /a
PowerShell: dir -h 或者 Get-ChildItem -Hidden
- 各磁盘回收站(隐藏目录):
$RECYCLE.BIN
- 临时文件目录: -
C:\Windows\Temp
-C:\Users\用户名\AppData\Local\Temp
- 或者执行文件目录存在Temp的,或tmp - 一些其他Windows可疑目录: -
C:\Windows\Fonts
(系统存放字体目录,这个目录无法使用Windows的目录浏览查看里面的非字体文件,须使用命令行才可显示)-C:\Windows\debug
- 隐藏文件:Windows和正常应用在正常情况下不会运行隐藏文件,如果发现运行的程序是一个隐藏程序,需要注意一下
文件名称:
- 一般自动化入侵的恶意程序,很多会将程序名命名为随机字符,如qiOljsla
- 挖矿病毒一般带有miner、mine、xmr等
- 还有就是网上历史出现的恶意程序名,这个的通过搜索引擎寻找
- 当然现在很多入侵的恶意程序会伪装成系统文件名,这种分析就需要结合目录了,毕竟它不能放在和系统文件同级目录下,不然会让系统出错,不过不排除很多名字取来和系统程序相似,比如conhost32(系统里面只有conhost,并没有conhost32或者conhost64),或者comhost
0x06 进程排查:
方法一:
命令排查:
# 命令一:CMD终端
tasklist
# 命令二:PowerShell终端gps# 任务管理器
对于上述三种方式获取的进程信息都不详细,并且对于子进程还有进程中执行的具体信息并无法查看,故推荐使用如下命令:
wmic process get caption,processid,commandline,executablepath
# caption: 进程名称# processid:进程ID号# commandline:进程执行的命令语句# executablepath:进行执行程序的绝对路径# 如果是在Powershell中,命令推荐使用下的语句:# 这里使用引号包裹逗号的目的是防止在有些服务器中用上面条命令报错,当然在cmd终端中可以忽略
wmic process get caption","processid","commandline","executablepath
方法二:
当然进程排查最好还是使用工具,毕竟图形界面看起来更加舒服些。(获取的结果于上面wmic命令基本一样,唯一不一样就是有进程树展示和堆栈追踪等)
火绒剑:
Process Monitor:(断网情况下推荐)
0x07 服务排查:
方法一:
services.msc
打开服务:
方法二:
其实是使用命令行查看:
wmic service get Caption,Name,PathName,ProcessId,Started,Description
# 如果在powershell中运行报错,就用引号把逗号包裹起来
命令行主要是为了便于条件筛选。
也可以在CMD终端中使用
sc query
,但内容没有wmic全。
方法三:(推荐)
注册表:
HKEY_LOCAL_MACHINE\SYSTEM\
和
HKEY_CURRENT_USER\SYSTEM\
路径下(不一定每个都有)
ControlSet001\Services
ControlSet002\Services
CurrentControlSet\Services
Service项目下的每个目录就是服务名称,对于服务具体执行程序,可以点击服务名称目录查看其参数,比如DLL的服务,会在
Parameters
的
ServiceDll
处:
# 当然这样排查起来很麻烦,所以这里我提供一个自己写的Powershell脚本自动化遍历分析的# 将这里的代码保持到一个.ps1文件中,比如1.ps1# 运行的使用需要这样:powershell -exec bypass ./1.ps1# 当前脚本主要是检查Dll服务,如果需要其他的自行修改# 需要排查的服务规则添加,这里是用的正则匹配$suspiciousList = ('xmrig|miner|f2pool|mine|evil|artifact|/Fonts/|/temp/|/debug/')$reqServerList=@('HKLM:\SYSTEM\ControlSet001\Services','HKLM:\SYSTEM\ControlSet002\Services','HKLM:\SYSTEM\CurrentControlSet\Services','HKCU:\SYSTEM\ControlSet001\Services','HKCU:\SYSTEM\ControlSet002\Services','HKCU:\SYSTEM\CurrentControlSet\Services')foreach($rs in $reqServerList){try{$dd = Get-ChildItem-Path $rs 2>$null}catch{}if($dd-ne''){foreach($d in $dd){$reg_path = $d.Name
if($reg_path-match'HKEY_LOCAL_MACHINE'){$p = $reg_path-replace"HKEY_LOCAL_MACHINE","HKLM:"}else{$p = $reg_path-replace"HKEY_CURRENT_USER","HKCU:"}try{$property = Get-ItemProperty-Path $p}catch{}if($property-ne''){foreach($pp in $property){$image_path = $pp.ImagePath
if($image_path-match'svchost\.exe -k'){$parameters = $p+'\Parameters'$property = Get-ItemProperty-Path $parameters 2>$null$image_path = $property.ServiceDll
#$image_path}if($image_path-match$suspiciousList){$sname = ($reg_path-split '\\')[-1]Write-Host"[!] 发现操作系统中存在可疑服务[$p]: $sname[$image_path]"-ForegroundColor Magenta
}}}}}}
方法四:
使用火绒剑,查看是否存在安全状态为未知文件的部分:(当然这只是快速分析的)
0x08 定时任务排查:
定时任务的排查就比较单一,一般打开任务计划程序(控制面板->管理工具)即可:
记得点击任务的操作项,这里显示的是定时任务执行的程序或者脚本。
定时任务还是关注恶意程序特征以及.bat、.ps1等可执行脚本程序
或者前往以下目录:
- C:\Windows\Tasks
- C:\Windows\System32\Tasks
- C:\Windows\SysWOW64\Tasks
查看里面的文件,可以在cmd终端中使用
type
,也可以使用记事本打开:
主要看
<Exec>
下的:
0x09 启动项排查:
启动项主要关注是否存在可执行程序或脚本,关注的文件后缀包含.exe、.dll、.ps1、.bat、.vbs等,也包含前面说的一些目录位置。
方法一:
注册表:
- HKLM\Software\Microsoft\Windows\CurrentVersion\Runonce
- HKLM\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run
- HKLM\Software\Microsoft\Windows\CurrentVersion\Run
- HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Run
- HKCU\Software\Microsoft\Windows\CurrentVersion\Run
- HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
文件夹:
- C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
其他:
- 系统配置:在cmd终端是输入
msconfig
打开系统配置,然后查看启动栏内容 - - 本地策略组编辑器:运行
gpedit.msc
,计算机配置->Windows设置->脚本(启动/关机)->启动,查看启动中的脚本或者powershell脚本 -
方法二:
火绒剑:(启动项)
方法三:
Autoruns:(Logon(自启动))
0x0A 网络连接排查:
这里主要是查看当前机器外部连接情况,根据连接情况锁定本机创建这个连接的进程文件。
方法一:
利用Windows自动命令查看网络连接端口和应用:
netstat -anob
# -a:显示所有连接和侦听端口# -n:以数字形式显示地址和端口号# -o:显示拥有的与每个连接关联的进程 ID# -b:显示在创建每个连接或侦听端口时涉及的可执行程序。在某些情况下,已知可执行程序承载多个独立的组件,这些情况下,显示创建连接或侦听端口时涉及的组件序列。在此情况下,可执行程序的名称位于底部[]中,它调用的组件位于顶部,直至达到 TCP/IP。注意,此选项可能很耗时,并且在你没有足够权限时可能失败。# 帮助文档:netstat /?
- LISTENING:监听(代表本地该端口处于监听状态)
- ESTABLISHED:已建立连接(代表已经和远程的地址建立了连接)
- SYN_SEND:请求连接(如果网络连接中存在大量该状态,7条以上,就需要注意一下)
方法二:
使用火绒剑:
方法三:
使用TCPView:
0x0B 常用命令:
以下命令的帮助文档可通过
命令 /?
查看。
Windows 大小写不敏感
|:管道符
代表前一个的输出是后一个的输入,格式如下:
命令1 | 命令2
# 如:
tasklist | findstr 1111
# 寻找tasklist命令的输出中是否存在1111字符
findstr:搜索文件中的文本内容
该命令支持正则表达式的搜索方式,不过一般用不到。
该命令常用于寻找上一个命令输出结果的搜索项,与Linux的grep相似:
# 搜索网络连接中445端口的连接数据
netstat -anob | findstr 445
dir:显示目录的文件和子目录的列表
常有参数:
/q
:显示文件所有权信息/a[...]
: 仅显示具有指定属性的目录和文件的名称。后面的[…]为指定的属性: - d - 目录- h - 隐藏文件- s - 系统文件- l - 重新分析点- r - 只读文件- a - 准备存档的文件- i - 非内容索引文件
# 显示当前目录下所有隐藏文件
dir /ah
cacls:权限用户所属权限修改
很大恶意程序会使用该命令修改本身或创建文件的权限,导致管理员也无法删除,同理,可利用该命令对这类文件进行权限修改。
常有参数如下:
/e
: 编辑ACL而不是替换它/g user:<perm>
:授予指定的用户访问权限 - user:用户或用户组- <perm>:权限,权限的有效值有: - 无( n )- r -读取- w -写入- c -更改 (写入)- f -完全控制
更多功能可通过
/?
查看。
# 赋予users用户组对C:\Windows\11.exe文件的完全控制
cacls C:\Windows\11.exe /e /g users:f
# 如果是赋予管理员可修改为如下
cacls C:\Windows\11.exe /e /g administrator:f
attrib:文件属性修改
显示、设置或删除分配给文件或目录的属性。 如果未使用参数, attrib 将显示当前目录中所有文件的属性。
改命令可修改文件的属性,比如让文件变成隐藏文件。
常有参数:
{+|-}r
:设置 (+) 或清除 (-) 只读文件属性。{+\|-}a
:设置 (+) 或清除(-) 存档文件属性 。 此属性集标记自上次备份以来已更改的文件。 请注意, xcopy 命令使用存档属性。{+\|-}s
:设置 (+) 或清除 (-) 系统文件属性。 如果文件使用此属性集,则必须清除该属性,然后才能更改文件的任何其他属性。{+\|-}h
:设置 (+) 或(-)清除隐藏文件属性。 如果文件使用此属性集,则必须清除该属性,然后才能更改文件的任何其他属性。{+\|-}i
:设置 (+) 或(-)清除非内容索引文件属性。
其中+代表添加属性,-代表移除属性,如+h代表给文件添加隐藏属性,-h代表移除文件的隐藏属性
attrib 文件路径 -s -a -i -h
taskkill:关闭进程
结束一个或多个任务或进程。 可以通过进程ID或图像名称结束进程。
常有参数:
/pid <processid>
:指定要终止进程的PID号/f
:强制结束进程/t
:结束进程及其启动的任何子进程
常有关闭进程格式为:
# 强制终止123进程及其启动的任何子进程
taskkill /f /t /pid 123
sc:服务
获取并显示有关指定服务、驱动程序、服务类型或驱动程序类型的信息。
常有命令:
# 查看某服务信息
sc query 服务名称
# 关闭某服务
sc stop 服务名称
# 删除某服务
sc delete 服务名称
Linux点这里
版权归原作者 VVzv 所有, 如有侵权,请联系我们删除。