应急响应|windows ⼊侵检查流程

2022010118225629

应急响应的时候, 我们需要判断⼀个系统是否有被⿊客⼊侵, 本篇给⼤家介绍⼀些在应急响 应时 Windows ⼊侵检查的⼀些知识点。

检查概述

由于⽆法站在攻击者视⻆审视其做过哪些攻击⾏为, 因此标准化的检查内容可以规避⾮标准

化的⻛险。

 

例如操作系统虽然没有异常登录⽇志, 但如果不检查操作系统⽤户即会存在遗漏从⽽产⽣⻛ 险, 同时也可规避上次检查 ab 内容, 本次检查 bc 内容的⾮标准化⻛险。

因此⽆论每个⼈的标准是否统⼀,   取⻓补短逐渐完善⾃⼰的标准化是建议进⾏的。

 

windows 操作系统⼊侵检查流程图如下所示:

2022010118500040
现象检查

可通过监测告警 、 ⽇常巡检等主动机制发现存在的异常事件, 如果没有主动发现, 则只能在

安全事件发⽣后被动发现 。 以下说明在被⼊侵后对可能存在的异常现象进⾏检查。

 

现象检查发现的异常程序不可直接删除, 应先验证异常进程是否存在⾃我守护机制, 否则安 全事件⽆法得到根除。

1.1 已监听端⼝

已监听端⼝并⾮⼀个独⽴的对象, ⽽是和进程相关联, 进程如果需要对外提供访问接⼝, 则 必须通过监听端⼝的⽅式对外开放, 常⽤于在内⽹中部署正向后⻔程序。

注意点:

 

1 在操作系统初始化正常运⾏后, 建议记录已监听端⼝的基线值, 供⽇常巡检使⽤;

 

2 受操作系统 、关键路径中的⽹络层访问控制影响。

 

例如检查已监听端⼝是否存在异常 。则运⾏ cmd 命令⾏, 使⽤  netstat -ano | findstr LIST 命令检查已监听端⼝ 。

示例:

 

点击 【开始菜单】 , 搜索框中输⼊  【cmd】 , 右键点击 【cmd.exe】 程序, 选择 【以管理员身 份运⾏】。

cba16017a66892fd4da6bf544d162831777

使⽤  netstat -ano | findstr LIST 命令检查已监听端⼝ 。含义如下:

 

1 左 1 列, 程序协议;

2 左 2 列, 本地监听地址和端⼝;

 

3 左 3 列, 外部地址 (留空);

 

4 左 4 列, 状态为监听;

 

5 左 5 列, 程序 pid。

 

可根据已知程序不会监听的端⼝进⾏判断是否存在异常, 并根据该链接的 pid 进⾏深⼊分析。

 

cba16017a66892fd4da6bf544d162831971
1.2 已建⽴连接

 

已建⽴连接分为⼊站连接和出站连接, ⼊站意为访问操作系统本地的⽅向, 出站意为操作系 统访问外部的⽅向。

注意点:

 

1 受操作系统 、关键路径中的⽹络层访问限制影响;

 

2 服务端如存在主动外联则需要重点检查。

 

例如检查已建⽴连接是否存在异常 。则使⽤  netstat -ano | findstr EST 命令检查已建⽴连 接。

示例:

查询结果, 可根据⾮常规连接判断是否存在异常, 并根据该链接的 pid 进⾏深⼊分析:

 

cba16017a66892fd4da6bf544d1628311204
 

1.3 系统进程

 

cpu 资源被占满 、异常的已监听端⼝ 、异常的已建⽴连接在深⼊分析时都会检查系统进程。

 

注意点:不建议使⽤任务管理器进⾏系统进程检查, 因为可供分析的维度较少,且容易被进 程名欺骗, 操作系统允许相同名称但不同执⾏路径的进程同时存在。

例如检查系统进程是否存在异常, 使⽤以下命令获取系统进程详细信息。

wmic process get

 

caption,commandline,creationDate,executablepath,handle,handleCount

> c:\yanlian\porcess.txt

示例:

在 cmd 命令⾏中复制以上命令并回⻋执⾏ 。

 

cba16017a66892fd4da6bf544d1628311509
 

打开 C:\yanlian\process.txt, 可看到 6 列内容, 含义如下所示:

 

1 caption: 进程名;

 

2 commandline:  进程名 、程序执⾏路径 、进程执⾏参数;

 

3 creationDate:  进程启动时间 (格式为: 年⽉ ⽇时分秒);

 

4 executablepath:  程序执⾏路径;

 

5 handle: 进程 pid;

 

6 handleCount: 该进程的⽗进程 pid。

 

 

可根据进程名 、进程执⾏参数 、进程启动时间 、程序执⾏路径判断是否存在异常, 并根据异 常点进⾏深⼊分析。

cba16017a66892fd4da6bf544d1628311794cba16017a66892fd4da6bf544d1628311796
 

 

 

 

 

持久化检查

 

如通过现象检查发现异常程序, 则可以通过停⽌运⾏该进程的⽅式, 判断其是否会重新启 动。

1.1 任务计划

 

任务计划可以将任何脚本或程序定时启动 。如被⿊客利⽤则会充当恶意程序的守护机制。 注意点:不建议使⽤图形化任务计划程序进⾏检查, 因为数量 、层级较多不⽅便检查。

检查任务计划是否存在异常的⽅法:

1 使⽤ schtasks /query /fo LIST /v

 

>c:\yanlian\schtasks.txt 命令获取任务计划;

 

2 使⽤正则 (Folder|TaskName|Status|Author|Task To Run|Scheduled Task State|Start Time|Start Date)(.*) 过滤任务计划关键字段;

 

3      使⽤正则        S                                  D                         (    *)      和      S                                  D                         $0\               分割不同任务计划

3 使⽤正则 Start Date(.*) 和 Start Date$0\n 分割不同任务计划。

示例 1:

 

 

导出任务计划, 提示错误。

 

cba16017a66892fd4da6bf544d1628312401
 

查看当前活动代码⻚为 936, 将其修改为 437。

 

cba16017a66892fd4da6bf544d1628312431
 

再次导出任务计划 。但导出的任务计划⽆关信息过多, 需要过滤。

cba16017a66892fd4da6bf544d1628312466

示例 2:

 

复制以下正则表达式。

 

(Folder|TaskName|Status|Author|Task To

 

Run|Scheduled Task State|Start Time|Start Date)(.*)

 

将正则表达式复制到搜索框中, 点击 【find all】 , 再 【ctrl+c】 复制匹配到的内容。

 

 

cba16017a66892fd4da6bf544d1628312632cba16017a66892fd4da6bf544d1628312635
 

 

 

同时新建⼀个⽂档将复制的内容进⾏粘贴, 但所有任务计划未分割不⽅便检查, 因此还需要 对过滤后的任务计划进⾏分割。

示例 3:

 

复制以下正则表达式。

 

Start Date(.*)

 

Start Date$0\n

 

按 【ctrl+h】 将以上正则进⾏粘贴并替换所有。

 

cba16017a66892fd4da6bf544d1628312777
 

最后形成如下⽂档: 只记录任务计划名称, 运⾏状态, 创建者, 程序路径, 计划状态, 启动 时间, 以⽅便对可能存在异常的对象进⾏检查。

 

cba16017a66892fd4da6bf544d1628312855
 

 

 

 

1.2 ⾃启动项

 

⾃启动项可在系统启动时⾃动运⾏相关程序, 恶意程序的第⼆个⾃启机制。

 

注意点:不建议使⽤图形化 msconfig ⼯具进⾏检查, 因为名称 、路径较⻓则不⽅便取证。

 

使⽤以下命令将⾃启动项导出检查。

reg export

 

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

c:\yanlian\autorun.reg

示例:

 

输⼊命令将⾃启动项配置⽂件导出。

 

cba16017a66892fd4da6bf544d1628313090
 

检查导出的⾃启动项配置是否存在异常。

 

cba16017a66892fd4da6bf544d1628313118
 

 

 

 

 

1.3 环境变量

 

环境变量⽤于将系统路径变量化, 如被⿊客利⽤则会以最⾼权限运⾏恶意程序, 例如将环境  变量 %systemroot% 变更为其他路径, 同时建⽴ system32 ⽂件夹并将恶意程序通过服务启 动。

注意点: 环境变量 %systemroot% 修改后需进⾏恢复, 否则系统⽆法正常重启。

 

使⽤ set 命令将环境变量导出检查。

示例:

 

输⼊命令将环境变量配置⽂件导出。

 

cba16017a66892fd4da6bf544d1628313320

检查导出的⾃启动项配置是否存在异常。

cba16017a66892fd4da6bf544d1628313347
1.4 系统服务

服务可在系统启动时⾃动运⾏相关程序或启动后延迟运⾏相关程序, 是恶意程序的第三个⾃启机制

注意点:不建议使⽤图形化 services.msc 程序进⾏检查, 因为数量 、层级较多不⽅便检查。

 

1 使⽤命令将服务配置⽂件导出检查;

 

 

2 过滤包含 Description 、 ImagePath 、ServiceDll 的字段;

 

3 过滤包含 (.*)(\.dll|\.exe)(.*) 的字段;

 

4 删除 Description REG_SZ, Description

 

REG_EXPAND_SZ, ImagePath

 

REG_EXPAND_SZ, ServiceDll

 

REG_EXPAND_SZ ⽆关字符

 

5 将 / Processid(.*) 替换为空;

 

6 将,-(.*) 替换为空;

 

7 将 @替换为空;

 

8 根据环境变量检查结果对 %systemroot%, %windir% 进⾏替换;

 

9 将 ^[a-z]*\.dll\n 替换为空;

 

10 排序 、统⼀⼩写和去重后进⾏服务检查。

 

示例 1:

 

选择⼀条命令将服务配置⽂件导出。

 

reg query

 

“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services” /s

> c:\yanlian\service_001.txt

 

reg query

 

“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services” /s

> c:\yanlian\service_set.txt

 

 

cba16017a66892fd4da6bf544d1628313989cba16017a66892fd4da6bf544d1628313992
 

服务配置⽂件路径说明:

 

1 ControlSet001:  系统真实的服务配置信息;

2 ControlSet002:  最后⼀次成功启动的服务配置信息;

 

3 CurrentControlSet:  系统运⾏时的服务配置信息;

 

4 系统启动时, 从 ControlSet001 复制到 CurrentControlSet 中;

 

5 系统运⾏时, 修改的都是 CurrentControlSet 中的信息;

 

6 系统重启时, 从 CurrentControlSet 复制到 ControlSet001 中;

 

7 系统正常启动时, 从 ControlSet001 、CurrentControlSet 复制到 ControlSet002;

 

8 开机选择 “最近⼀次正确配置” 时, 从 ControlSet002 复制到 CurrentControlSet 中。 服务配置说明:

1 ImagePath: 服务所启动程序的路径;

 

2 Parametes\servicedll:  程序调⽤的真实 dll ⽂件路径;

 

3 Start: 0/boot, 1/system, 2 / ⾃动, 3 / ⼿动, 4 / 禁⽤;

 

4 DelayedAutostart: 1 / 延迟启动;

 

5 Type:  程序类型。

 

示例 2:

 

输⼊以下正则表达式进⾏内容过滤。

 

(Description|ImagePath|ServiceDll\)(.*)

 

点击 【.*】 启⽤正则匹配, 输⼊正则表达式, 点击 【find all】 后复制。

 

cba16017a66892fd4da6bf544d1628314668
 

示例 3:

输⼊以下正则表达式进⾏内容过滤。

(.*)(\.dll|\.exe)(.*)

点击 【find all】 后复制。

 

 

cba16017a66892fd4da6bf544d1628314735
示例 4:

 

复制以下单⾏内容并逐个替换。

 

 

Description Description

ImagePath

REG_SZ

 

REG_EXPAND_SZ

REG_EXPAND_SZ

 

ServiceDll   REG_EXPAND_SZ

 

替换⽅法为在 【find】 框中粘贴,  【replace】 框中内容为空, 点击 【replace all】  进⾏替换。

 

 

示例 5:

 

cba16017a66892fd4da6bf544d1628314927
复制以下内容并替换。

/Processid(.*)

 

替换⽅法为在 【find】 框中粘贴,  【replace】 框中内容为空, 点击 【replace all】  进⾏替换。

 

 

cba16017a66892fd4da6bf544d1628314927cba16017a66892fd4da6bf544d1628315026
 

 

示例 6:

 

复制以下内容并替换。

,-(.*)

 

替换⽅法为在 【find】 框中粘贴,  【replace】 框中内容为空, 点击 【replace all】  进⾏替换。

 

 

cba16017a66892fd4da6bf544d1628315121
示例 7:

 

复制以下内容并替换。

@

 

替换⽅法为在 【find】 框中粘贴,  【replace】 框中内容为空, 点击 【replace all】  进⾏替换。

 

cba16017a66892fd4da6bf544d1628315207
示例 8:

 

复制以下内容并替换。

%systemroot% c:\windows

 

%windir% c:\windows

 

替换⽅法为在 【find】 框中粘贴,  【replace】 框中内容为空, 点击 【replace all】  进⾏替换。

cba16017a66892fd4da6bf544d1628315341

 

 

 

示例 9:

 

复制以下内容并替换。

^[a-z]*\.dll\n

 

替换⽅法为在 【find】 框中粘贴,  【replace】 框中内容为空, 点击 【replace all】  进⾏替换。

 

cba16017a66892fd4da6bf544d1628315440
 

示例 10:

 

对过滤后的程序路径进⾏排序。

cba16017a66892fd4da6bf544d1628315467
全选所有内容将所有⼤写字⺟转换为⼩写。

 

 

cba16017a66892fd4da6bf544d1628315477
 

 

 

对过滤后的程序路径进⾏去重。

 

cba16017a66892fd4da6bf544d1628315495
 

根据去重后的结果可直观的对服务所调⽤的程序进⾏检查 。例如异常的程序路径, 程序名    称 。 同时⼯作量也会⼤⼤减少, 因为原先需要分析 9062 ⾏, 现在只需要分析 145 ⾏即可, 如在 145 ⾏中发现异常则可查看导出的服务配置⽂件进⾏深⼊分析。

 

 

cba16017a66892fd4da6bf544d1628315627cba16017a66892fd4da6bf544d1628315629
1.5 ⽤户登录

 

⽤户登录可在系统启动登录 、注销登录时⾃动运⾏相关程序, 是恶意程序的第四个⾃启机 制。

注意点:  操作系统中有两处配置⽂件可⽤于在登录时启动相关程序。

使⽤命令将⽤户登录配置⽂件导出检查。

 

示例 1:

 

复制以下命令:

 

reg query HKEY_CURRENT_USER\Environment

/v UserInitMprLogonScript >

 

c:\yanlian\userlogin.txt

reg query

 

“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

NT\CurrentVersion\Winlogon” /v Userinit >> c:\yanlian\userlogin.txt

在命令⾏中粘贴将⽤户登录配置⽂件导出检查。

 

cba16017a66892fd4da6bf544d1628316000
 

根据导出的登录配置进⾏检查。

 

 

cba16017a66892fd4da6bf544d1628316018
1.6 svchost 及 dll 劫持

 

svchost.exe 主要作⽤是将动态链接库 (后缀为. dll 的⽂件) 以服务的⽅式运⾏ 。svchost.exe

对系统的正常运⾏⾮常重要, 是不能被结束的 。 通过服务 、 dll 、 com 均可劫持注⼊到程序中 启动。

注意点:

 

1 在⼊侵检查⽅向, 更倾向于将 svchost.exe 作为⼀个单独的持久化检查项⽬, ⽽⾮系统服 务, 因为检查⽅法完全不同;

 

2 同时 svchost.exe 不作为常规检查项,⼀般根据 【现象检查】 的结果寻找恶意程序。

 

存在异常监听端⼝, pid 指向 svchost.exe 程序, 需检查是否存在异常 。通过第三⽅⼯具 ProcessExplorer (简称 pe)  检查 svchost.exe 程序。

示例:

 

通过检查已监听端⼝, 发现 “异常” 监听, pid 指向 800。

 

cba16017a66892fd4da6bf544d1628316420
 

打开任务管理器, 发现 pid 800 是 svchost.exe 程序, 由于该程序的特性, 需使⽤第三⽅⼯ 具 pe 进⾏检查。

cba16017a66892fd4da6bf544d1628316489

通过 pe ⼯具可发现 pid 800 是由服务启动, 根据启动路径可发现该程序是由正常路径启     动, 但程序是否被替换未知, 启动的服务是 netsvcs (⼩⽩杀⼿, 当初虐了我 n 久),  该服 务下挂 12 个⼦服务。

 

cba16017a66892fd4da6bf544d1628316609cba16017a66892fd4da6bf544d1628316612
在 pe 中双击该程序, 点击 【tcp/ip】 , 可发现 49154 端⼝是服务 schedule 监听。

 

cba16017a66892fd4da6bf544d1628316670
点击 【services】 , 可发现 schedule 服务启动的动态链接库绝对路径是

 

c:\windows\systemc32\schedsvc.dll, 从⽽发现 49154 端⼝是哪个程序正在监听。

 

 

cba16017a66892fd4da6bf544d1628316778
通过点击 【view handles】 可显示该程序所调⽤的 clsid。

 

cba16017a66892fd4da6bf544d1628316819

如存在启动 、点击某个程序后恶意进程重新启动的情况, 则可以对 com 劫持进⾏检查。

 

cba16017a66892fd4da6bf544d1628316866
 

通过点击 【view dlls】 可显示该程序所调⽤的 dll ⽂件。

 

 

cba16017a66892fd4da6bf544d1628316910
通过排序可直观的看到是否存在 dll 劫持。

 

cba16017a66892fd4da6bf544d1628316936
 

1.7 帐号检查

 

操作系统的账户和密码主要⽤于本地或远程登录 。属于⿊客持久化后⻔的⼀种⽅式。

 

注意点:

 

1 恶意账号可能已隐藏, 或通过克隆的⽅式复制管理员账户, 需要通过注册表进⾏检查;

 

2 作为主管单位对下辖单位进⾏攻击溯源时, 可通过 mimikatz ⼯具检查是否存在弱⼝令, 所 有⼝述证据均不可信。

 

检查账户是否存在异常: ⽅法如下所示:

 

1 调整注册表权限将账户导出检查;

 

2 使⽤  net 命令将账户导出检查。

示例 1:

 

在 cmd 命令⾏中输⼊ regedit 打开注册表。

 

 

cba16017a66892fd4da6bf544d1628317199
 

在注册表

 

【HKEY_LOCAL_MACHINE\SAM\SAM】  处右键选择权限, 点击 【administrators】 , 勾选 【读取】 , 并点击确定。

 

cba16017a66892fd4da6bf544d1628317285
复制以下命令。

 

reg export

 

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users c:\yanlian\user.reg

在命令⾏中粘贴将账户配置⽂件导出检查。

 

cba16017a66892fd4da6bf544d1628317398
根据导出的账户信息进⾏检查。

cba16017a66892fd4da6bf544d1628317425
 

记录该路径下的账户名称 16 进制数。

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names

例如 YunWei$ 是 3ee。可在以下注册表中检查F和 V 值

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EE

其中 F 为权限值, 如将 administrator 的 F 值复制给 guest, 并启⽤免密码登录, 则会形成 克隆账户的隐藏现象, V 为密码值。

 

cba16017a66892fd4da6bf544d1628317435
 

 

 

 

示例 2:

 

复制以下命令。

 

net user > c:\yanlian\user.txt

 

net localgroup administrators >> c:\yanlian\user.txt

 

在 cmd 命令⾏中粘贴将账户导出, 注意 > 意为覆盖写⼊, >> 意为追加写⼊ 。

 

cba16017a66892fd4da6bf544d1628317584
 

根据导出的账户信息进⾏检查。

cba16017a66892fd4da6bf544d1628317607
 

 

痕迹检查

 

1.1 ⽇志

 

操作系统⽇志中记录着攻击成功前和攻击后的相关痕迹。

 

注意点:  ⽇志默认记录 20Mb, 达到最⼤值时优先覆盖旧事件, 同时⽹络安全法要求⽇志⾄ 少保存 6 个⽉以上。

将安全⽇志和系统⽇志导出检查。

示例:

 

操作系统安全⽇志和系统⽇志默认存储路径:

%SystemRoot%\System32\Winevt\Logs\System.evtx

 

%SystemRoot%\System32\Winevt\Logs\Security.evtx

 

使⽤以下命令将⽇志导出。

 

cba16017a66892fd4da6bf544d1628317867
 

 

 

 

安全⽇志典型分析⽅法:  ⼤量事件 id 4625 后第⼀次 4624, 则为操作系统密码暴⼒破解成   功。其中源 ip 可能为空, 则需要软硬件资产管理系统⽀持, 定位源⼯作站的名称, 即主机     名, 特定情况下 windows 可通过 ping 主机名携带 – 4 参数返回 ipv4 地址。或通过不对互联 ⽹映射操作系统远程桌⾯管理端⼝以及使⽤堡垒机进⾏管理可规避操作系统密码暴⼒破解攻   击。

系统⽇志典型分析⽅法:  id 为 7036 是服务启动 / 关闭的系统事件, 在异常时间启动的服务 需要重点检查, 例如 wmi 服务。

1.2 ⽂件落地

 

恶意程序保存在硬盘的⽂件系统中, 例如后⻔程序, 后⻔程序属于⾮授权的远程管理通道, ⿊客可通过该通道未授权管理被⼊侵的主机, 以及随后⻔⽂件同时⽣成的其他恶意程序。

注意点:  ⽂件落地不单独进⾏⼿⼯检查,⼀般根据 【现象检查】 或 【持久化检查】 的结果在 硬盘中寻找恶意程序, 否则⼯作量会过⼤及质量较差, 常规恶意程序检查建议通过操作系统 杀毒软件进⾏ 。

例如在 1999 年 01 ⽉  01 ⽇发现异常程序对其相关处置后, 检查当天是否⽣成其他异常内 容。

1 在 %temp% ⽬录下创建并修改 test.txt ⽂件的创建时间为 1999 年 01 ⽉  01 ⽇  00 点 00 分 00 秒, 修改时间为 1999 年 01 ⽉  02 ⽇  00 点 00 分 00 秒 、访问时间为 1999 年 01 ⽉ 03 ⽇  00 点 00 分 00 秒;

2 通过 everything ⼯具进⾏检查。

示例 1:

修改⽂件时间 bat 脚本内容如下所示:

ChangeDate.bat

 

@echo off

powershell.exe -command “ls’%temp%\test.txt’| foreach-object {$_.CreationTime        =’01/01/1999 00:00:00′; $_.LastWriteTime =’01/02/1999 00:00:00′; $_.LastAccessTime =’01/03/1999 00:00:00′}”

pause

 

#CreationTime 创建时间

#LastWriteTime 修改时间

 

#LastAccessTime 访问时间

 

修改后各项时间如下所示:

cba16017a66892fd4da6bf544d1628318898

示例 2:

 

dc: 后跟⽇期, 检查创建时间为 1999 年 01 ⽉  01 ⽇, 后缀为. txt 的⽂件。

 

cba16017a66892fd4da6bf544d1628318959

dm: 后跟⽇期, 检查修改时间为 1999 年 01 ⽉  02 ⽇, 名称包含 te 和. 的⽂件。

 

 

cba16017a66892fd4da6bf544d1628319015cba16017a66892fd4da6bf544d1628319018
 

 

da: 后跟时间, 检查访问时间为 1999 年 01 ⽉  03 ⽇的⽂件。

 

 

cba16017a66892fd4da6bf544d1628319062
通过以上案例可知, 在⼊侵取证时 windows ⽂件的所有时间完全不可信 (linux 只是两项时 间不可信),  因此⽂件时间仅作为参考依据。

1.3 ⽆⽂件落地

 

wmi 全称 windows 管理规范, 其提供⼤量 api 接⼝供程序调⽤; 同时也是恶意程序⽆⽂件落 地的关键所在, ⿊客将恶意载荷存储于 wmi 中, 并通过持久化机制在内存中通过 powershell

直接调⽤存储于 wmi 中的恶意载荷, 从⽽实现⽆⽂件落地。

注意点:

1可以将 Windows Management Instrumentation 服务关闭, 并将其作为⼀个基线对象定期 检查是否被恶意开启 。 因为 wbemtest.exe 或 powershell 均是通过该服务调⽤  【wmiclass】

【对象】【属性】  中的 【值】 ;

 

2 当服务关闭时, wbemtest.exe 可打开 wmi 测试器, 但⽆法连接命名空间, powershell 可 正常运⾏, 但不会执⾏ wmiclass 中的载荷;

 

3 ⽆⽂件落地不单独进⾏⼿⼯检查,⼀般根据 【现象检查】 或 【持久化检查】 的结果在        wmiclass 中寻找恶意载荷, 否则⼯作量会过⼤及质量较差, 常规恶意程序检查建议通过操作 系统杀毒软件进⾏ 。

检查 wmiclass 是否存在异常:

 

1 搭建⽆⽂件落地场景;

 

2 对⽆⽂件落地场景进⾏检查。

示例 1:

对以下字符串进⾏ base64 编码:

start powershell “ping 114.114.114.114 -t”

 

不能使⽤⽹⻚版 base64 编码⼯具进⾏编码, 因为编码⽅式不同会导致 powershell ⽆法识 别,上述命令通过⽹⻚版 base64 ⼯具编码后再通过 powershell 识别, 其结果如下所示:

cba16017a66892fd4da6bf544d1628319860

因此可通过以下 powershell ⼯具将其 base64 编码 。将命令复制到 【$string】  中, 当存在 【$】【”】  符号时需要使⽤  【`】 进⾏转义, 多⾏内容可直接回⻋ 。

ps_string_base64.ps1

 

$string = “start powershell `”ping 114.114.114.114 -t`””

$bytes = [System.Text.Encoding]::Unicode.GetBytes($string)

 

$encoded = [Convert]::ToBase64String($bytes)

 

echo $encoded

 

当前⽬录下打开 cmd 执⾏ powershell -executionpolicy bypass -file ps_string_base64.ps1 即可获得 base64 后的字符串。

 

cba16017a66892fd4da6bf544d16283110256
打开 poershell 输⼊以下命令 (可以将以下内容 base64 编码化, 从 cc 主控端拉取执⾏, 执 ⾏完毕即从内存中释放, 这可能也是在被⼊侵主机中没有发现此类样本的原因),  以下命令  通过 powershell 调⽤ . net 的⽅法将 base64 字符串写⼊ wmiclass 同时执⾏ 。

#要连接的 wmi 命名空间及类对象

$SaveClass

 

= [System.Management.ManagementClass]

(‘root\default:StdRegProv’)

 

#添加对象属性 (名称, 类型, ⾮数组)

 

$SaveClass.Properties.Add(‘ping’,[System.Management.CimType]::String,$False)

#修改 ping 属性的值为  base64 字符串

 

$SaveClass.SetPropertyValue(‘ping’,’cwB0AGEAcgB0ACAAcABvAHcAZQByAHMAaABlAGw AbAAgACIAcABpAG4AZwAgADEAMQA0AC4AMQAxADQALgAxADEANAAuADEAMQA0AC

AALQB0ACIA’)

 

#保存

 

$SaveClass.Put()

 

#查询 ping 属性的值

 

$SaveClass.GetPropertyValue(‘ping’)

 

#取载荷执⾏后退出

 

set ping

 

([WmiClass]’root\default:StdRegProv’).Properties[‘ping’].Value;powershell -E $ping;exit

 

.net 帮助⽂档参考链接如下所示:

 

https://docs.microsoft.com/zh-

cn/dotnet/api/system.management.managementbaseobject.setpropertyvalue?                 view=dotnet-plat-ext-                                                                                       5.0#System_Management_ManagementBaseObject_SetPropertyValue_System_String_Syst em_Object_

通过此类⽅法可发现存储于 wmiclass 中的载荷已被执⾏, 但却不⻅其⽗进程,严重影响到溯 源的逻辑性, 即⽆法根据痕迹溯源该程序如何启动, 只能通过经验判断可能的⾃我守护机

 

如持久化机制未被发现, 则⽆法根除, 因此在 【现象检查】 伊始即强调, 在未确认是否存在

⾃我守护机制前,不可先⾏删除异常程序。逆向思维考虑: 如结束进程后频繁⾃启动, 则⼀

定存在⾃我守护机制。

cba16017a66892fd4da6bf544d16283111519
 

 

 

 

以下命令可在前台运⾏时将载荷带⼊后台运⾏, 诸如任务计划运⾏的程序默认在后台运⾏:

 

start powershell -NoP -NonI -W Hidden “ping 114.114.114.114 -t”

示例 2:

根据 pe 检查结果⽆法判断该进程的⽗进程, 即⽆法确认该进程如何启动, 仔细检查任务计划 时发现异常:

 

 

cba16017a66892fd4da6bf544d16283111687cba16017a66892fd4da6bf544d16283111695
 

 

在解码时不建议使⽤⽹⻚版 base64 解码⼯具, 因为⼤部分⽹⻚⼯具默认会按多字节解码, 导致每个字符后会再补⼀个字节内容, 如下所示:

cba16017a66892fd4da6bf544d16283111767

因此可通过以下 powershell ⼯具将其 base64 解码 。将 base64 字符串复制到 【$string】 中, GetString() ⽅法建议使⽤  Unicode, 如改成 utf8, 则会在每个字符后⾯补⼀个空格。

ps_base64_string.ps1

$string =

 

“cwBlAHQAIABwAGkAbgBnACAAKABbAFcAbQBpAEMAbABhAHMAcwBdACcAcgBvAG8Ad ABcAGQAZQBmAGEAdQBsAHQAOgBzAHQAZAByAGUAZwBwAHIAbwB2ACcAKQAuAFAA cgBvAHAAZQByAHQAaQBlAHMAWwAnAHAAaQBuAGcAJwBdAC4AVgBhAGwAdQBlADsAc ABvAHcAZQByAHMAaABlAGwAbAAgAC0ARQAgACQAcABpAG4AZwA7AGUAeABpAHQA”

$bytes =

 

[System.Convert]::FromBase64String($string);

$decoded =

 

[System.Text.Encoding]::Unicode.GetString($bytes);

 

echo $decoded

 

 

 

当前⽬录下打开 cmd 执⾏ powershell -executionpolicy bypass -file ps_base64_string.ps1 即可发现解码后的内容。

 

cba16017a66892fd4da6bf544d16283112411
检查 wmi 服务, 发现其已被未授权启动 (默认为⾃动启动, 建议关闭后建⽴基线值作为⽇常 ⾃动化巡检的对象)  。

 

cba16017a66892fd4da6bf544d16283112473
需判断 root\default 命名空间的 stdregprov 类对象的 ping 值是否存在异常 。可打开 powershell 通过以下命令进⾏检查。

$SaveClass

 

= [System.Management.ManagementClass]

(‘root\default:StdRegProv’)

 

$SaveClass.GetPropertyValue(‘ping’)’

检查结果如下所示:

 

 

cba16017a66892fd4da6bf544d16283112685
 

也可以打开 wbemtest.exe ⼯具进⾏检查。

 

 

cba16017a66892fd4da6bf544d16283112715
点击 【连接】。

 

cba16017a66892fd4da6bf544d16283112727
 

根据残留痕迹, 输⼊  【root\default】 并点击 【连接】。

 

cba16017a66892fd4da6bf544d16283112767
 

点击 【枚举类】。

 

 

cba16017a66892fd4da6bf544d16283112780
勾选 【递归】 并 【确定】。

 

cba16017a66892fd4da6bf544d16283112767
 

 

双击 【stdregprov】 类对象。

cba16017a66892fd4da6bf544d16283112832
 

 

 

在 【属性】  中找到 ping 属性, 双击编辑属性

 

应急响应|windows ⼊侵检查流程
 

cba16017a66892fd4da6bf544d16283112832cba16017a66892fd4da6bf544d16283112863
最终对其进⾏解码, 发现其功能和异常现象⼀致。

 

cba16017a66892fd4da6bf544d16283112896
 

1.4 操作系统防⽕墙

 

windows 操作防⽕墙配置着允许 / 拒绝通⾏的⼊站 / 出站规则 。可根据防⽕墙配置判断该主 机在同⽹段内的可攻击⾯积。

注意点: 检查配置前应先检查防⽕墙是否已启⽤ 。

 

检查操作系统防⽕墙是否存在异常:

 

1 通过 netsh 命令将防⽕墙状态导出检查;

 

2 通过 netsh 命令将防⽕墙所有⼊站 、 出站规则导出检查;

示例 1:

复制以下命令在 cmd 中执⾏ 。

 

netsh firewall show state > c:\yanlian\firewall-state.txt

 

netsh advfirewall firewall show rule name=all dir=in > c:\yanlian\firewall-in.txt     netsh advfirewall firewall show rule name=all dir=out > c:\yanlian\firewall-out.txt

【操作模式】  为 【禁⽤】 意为防⽕墙已关闭, 即已监听的端⼝同⽹段所有主机均可访问。

 

cba16017a66892fd4da6bf544d16283113376
 

 

 

【操作模式】  的启⽤和禁⽤随⽹卡的⽹络位置变更⽽变更。

 

例如⽹卡的⽹络位置是 【家庭⽹络】 或 【⼯作⽹络】 , 则匹配家庭或⼯作 (专⽤) ⽹络位置防 ⽕墙的状态 。或⽹卡的⽹络位置是 【公⽤⽹络】 , 则匹配公⽤⽹络位置防⽕墙的状态。

 

cba16017a66892fd4da6bf544d16283113500cba16017a66892fd4da6bf544d16283113503cba16017a66892fd4da6bf544d16283113509
 

 

 

示例 2:

 

复制以下正则进⾏搜索和结果复制:

(已启⽤  | 本地端⼝  | 操作)(.*)

 

 

cba16017a66892fd4da6bf544d16283113560
复制以下正则进⾏结果替换。

操作 (.*)

 

操作 $1\n

 

cba16017a66892fd4da6bf544d16283113594
 

即可对⼊站 、 出站规则进⾏检查分析,且⼯作量也会⼤⼤减少。

 

应急响应|windows ⼊侵检查流程
 

cba16017a66892fd4da6bf544d16283113633cba16017a66892fd4da6bf544d16283113635
 

windows 终端⼊站规则应根据实际⼯作需要进⾏⽹络层访问控制, windows 服务端出站规则 应根据实际⼯作需要进⾏⽹络层访问控制。

1.5 操作系统杀毒软件

 

杀毒软件可⽤于防护恶意程序的存储 、运⾏等恶意⾏为, 作为主管单位对下辖单位进⾏攻击 溯源时需进⾏检查。

注意点:

 

1 应检查杀毒软件的安装时间;

 

2 应检查杀毒软件的补丁更新情况;

 

3 应检查杀毒软件的特征库是否最新;

 

4 应检查杀毒软件最近的杀毒记录;

 

 

应检查杀毒软件的⽩名单。

2022010117510479

本文来自投稿,不代表安强科技社区立场,如若转载,请注明出处:https://community.anqiangkj.com/archives/2220

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年1月2日 上午2:14
下一篇 2022年1月2日 上午3:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。