Windows 应急响应辅助笔记
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录导航
0x00 前言
以下主要为一些Windows应急的排查方法对于处置应急不要过于盲目无目的排查如清楚入侵原因可基于入侵行为来做于排查比如服务器存在WebShell那么排查着重点就应该放在网站根目录下可疑文件的排查比如从文件创建时间来进行筛选当然如果要看攻击者入侵后做了什么事情或者取证可能就需要较为全面的分析。
0x01 应急辅助工具
工具列表
下面的工具也可以使用一些终端命令代替不过使用工具有图形界面更便于分析
工具名称 | 主要功能 | 下载地址与使用说明地址 |
---|---|---|
ProcessExplorer | 进程分析 | https://learn.microsoft.com/zh-cn/sysinternals/downloads/process-explorer |
ProcessMonitor | 进程分析 | https://learn.microsoft.com/zh-cn/sysinternals/downloads/procmon |
TCPView | 网络连接分析 | https://learn.microsoft.com/zh-cn/sysinternals/downloads/tcpview |
AutoRuns | 启动项分析 | https://learn.microsoft.com/zh-cn/sysinternals/downloads/autoruns |
火绒剑 | 多功能分析包含进程、网络连接、注册表、启动项等 | https://www.huorong.cn/需要下载火绒杀毒软件才可以安装或使用火绒剑 |
LogonSessions | 登录分析 | https://learn.microsoft.com/zh-cn/sysinternals/downloads/logonsessions |
NotMyFault | 内存取证 | https://learn.microsoft.com/zh-cn/sysinternals/downloads/notmyfault这个工具取证才会用到不取证可不用 |
LogParser | 日志分析包含系统、IIS日志 | https://www.microsoft.com/en-us/download/details.aspx?id=24659 |
D盾 | WebShell查杀 | https://www.d99net.net/ |
河马 | WebShell查杀 | https://www.shellpub.com/ |
各工具的详细使用方法可自行百度处LogParser用起来稍微复杂外命令行工具需了解一定的SQL语法结构可以使用系统自带的事件查看器替代其余工具入门比较简单图形化界面
在线沙箱
在线沙箱或引擎杀毒引擎可以协助分析可疑文件
微步https://x.threatbook.cn/
virustotalhttps://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头部HEX45 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 | 已启用定时任务事件 | 5156 | Windows筛选平台已允许连接 |
4768 | Kerberos身份验证TGT请求 | 4769 | Kerberos服务票证请求 |
4776 | NTML身份验证 | 1102 | 清理日志 |
事件筛选
用户登录类型ID
登录类型 | 描述 |
---|---|
2 | 交互式登录 |
3 | 网络登录如net use或者网络共享 |
5 | 服务启动由服务器控制管理器登录 |
7 | 解锁 |
8 | 网络登录如IIS登录验证 |
9 | 新凭据登录 呼叫方为出站连接克隆了其当前令牌和指定的新凭据。 新登录会话具有相同的本地标识但对其他网络连接使用不同的凭据。 |
10 | 远程交互终端服务远程桌面远程辅助 |
11 | 使用存储在计算机本地的网络凭据登录到此计算机的用户。 未联系域控制器以验证凭据。缓存域证书登录 |
系统日志
事件ID | 描述 | 事件ID | 描述 |
---|---|---|---|
7045 | 服务已安装在系统 | 1014 | DNS请求 |
系统日志主要用于查看创建的服务和DNS请求。
比如安全设备监控到有服务器对外做恶意域名的访问那么就可以通过系统日志排查出恶意域名DNS请求的信息。
一些日志分析方法
在登录类日志中比如登录成功或者失败事件常规的网络信息中是有登录源网络地址的
在计划任务创建事件中在常规任务内容的XML内容下是有任务具体执行命令的
对于日志分析可通过筛选登录失败事件快速判定当前系统是否存在暴力破解痕迹如果发现登录失败事件在某一时间段过多且日志记录时间一致比如都是1秒或者1秒内多条如10-20条记录正常情况下人工输入猜测密码应该会在10条左右且产生的日志时间是不固定的既有可能是存在暴力破解操作这时就需要在确认暴力破解的时间区间、登录类型、登录源有些工具可能不会留下登录源IP地址然后在筛选登录成功事件查看是否存在相似特征的登录成功记录如果存在说明服务器密码被暴力破解成功如果不存在说明没有破解成功。
漏洞利用或者自动化工具特征
如MS17-010漏洞的利用会创建几个MFS一般为2个失败的登录日志且类型为3登录账户为空如果利用成功,会在同时间段存在一个登录成功登录类型为5和特殊登录的日志且登录用户均为System。下图为MSF的漏洞利用日志记录
以及关注登录日志中工作站名计算机名称如果发现该处为随机乱码字符可能造成这条日志的为一些自动化工具
当然日志的筛选还可以使用高级方法也就是条件搜索可以使用LogParser或者事件查看器的XML高级搜索技巧Xpath语法这里就不写了这里可自行通过搜索引擎搜索这两种高级查询的用法。
比如搜索test$账户创建的进程日志事件查看器的高级语法
<QueryList>
<Query Id="0" Path="Security">
<Select Path="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脚本
方法二
火绒剑启动项
方法三
AutorunsLogon自启动
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点这里
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |