Sec Hotspot 首页  排行榜  收藏本站  技术博客  RSS
统计信息
已收录文章数量:18849 篇
已收录公众号数量:91 个
本站文章为爬虫采集,如有侵权请告知
已收录微信公众号
阿里云先知 网安寻路人 网信中国 区块链大本营 白说区块链 区块链投资家 区块链官微 区块链铅笔Blockchain HACK学习呀 二道情报贩子 合天智汇 小白帽学习之路 小米安全中心 弥天安全实验室 SAINTSEC SecPulse安全脉搏 TideSec安全团队 360安全卫士 游侠安全网 计算机与网络安全 安全祖师爷 安全学习那些事 腾讯安全联合实验室 黑客技术与网络安全 安全圈 腾讯御见威胁情报中心 Python开发者 Python之禅 编程派 Python那些事 Python程序员 安全威胁情报 吾爱破解论坛 行长叠报 安在 i春秋 嘶吼专业版 E安全 MottoIN 网信防务 网安杂谈 数说安全 互联网安全内参 漏洞战争 安全分析与研究 邑安全 ChaMd5安全团队 天融信阿尔法实验室 安全牛 SecWiki 安全学术圈 信安之路 漏洞感知 浅黑科技 Secquan圈子社区 奇安信集团 奇安信 CERT 国舜股份 雷神众测 盘古实验室 美团安全应急响应中心 瓜子安全应急响应中心 顺丰安全应急响应中心 蚂蚁金服安全响应中心 携程安全应急响应中心 滴滴安全应急响应中心 字节跳动安全中心 百度安全应急响应中心 腾讯安全应急响应中心 网易安全应急响应中心 OPPO安全应急响应中心 京东安全应急响应中心 Bypass CNNVD安全动态 安恒应急响应中心 天融信每日安全简报 奇安信威胁情报中心 看雪学院 黑白之道 水滴安全实验室 安全客 木星安全实验室 云鼎实验室 绿盟科技安全预警 白帽汇 深信服千里目安全实验室 腾讯玄武实验室 长亭安全课堂 FreeBuf 绿盟科技 nmask
【应急响应】windows入侵检查流程
本文来自公众号:安全分析与研究   2021.02.18 19:44:39


安全分析与研究

专注于全球恶意软件的分析与研究

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

检查概述

由于无法站在攻击者视角审视其做过哪些攻击行为,因此标准化的检查内容可以规避非标准化的风险。


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


因此无论每个人的标准是否统一,取长补短逐渐完善自己的标准化是建议进行的。


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


现象检查

可通过监测告警、日常巡检等主动机制发现存在的异常事件,如果没有主动发现,则只能在安全事件发生后被动发现。以下说明在被入侵后对可能存在的异常现象进行检查。


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


1.1 已监听端口

已监听端口并非一个独立的对象,而是和进程相关联,进程如果需要对外提供访问接口,则必须通过监听端口的方式对外开放,常用于在内网中部署正向后门程序。


注意点:

1 在操作系统初始化正常运行后,建议记录已监听端口的基线值,供日常巡检使用;

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


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


示例:

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

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

1 左1列,程序协议;

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

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

4 左4列,状态为监听;

5 左5列,程序pid。

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


1.2 已建立连接

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


注意点:

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

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

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


示例:

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


1.3 系统进程

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


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


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

wmic process get

caption,commandline,creationDate,executablepath,handle,handleCount > c:\yanlian\porcess.txt


示例:

在cmd命令行中复制以上命令并回车执行。

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

1 caption:进程名;

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

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

4 executablepath:程序执行路径;

5 handle:进程pid;

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

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


持久化检查

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


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 使用正则Start Date(.*)和Start Date$0\n分割不同任务计划。


示例1:

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

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

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


示例2:

复制以下正则表达式。

(Folder|TaskName|Status|Author|Task To

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

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

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


示例3:

复制以下正则表达式。

Start Date(.*)

Start Date$0\n

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

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


1.2 自启动项

自启动项可在系统启动时自动运行相关程序,恶意程序的第二个自启机制。


注意点:不建议使用图形化msconfig工具进行检查,因为名称、路径较长则不方便取证。


使用以下命令将自启动项导出检查。

reg export

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run c:\yanlian\autorun.reg


示例:

输入命令将自启动项配置文件导出。

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


1.3 环境变量

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


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


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


示例:

输入命令将环境变量配置文件导出。

检查导出的环境变量配置是否存在异常。


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

服务配置文件路径说明:

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】后复制。


示例3:

输入以下正则表达式进行内容过滤。

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

点击【find all】后复制。


示例4:

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

Description    REG_SZ

Description    REG_EXPAND_SZ

ImagePath    REG_EXPAND_SZ

ServiceDll    REG_EXPAND_SZ

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


示例5:

复制以下内容并替换。

/Processid(.*)

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


示例6:

复制以下内容并替换。

,-(.*)

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


示例7:

复制以下内容并替换。

@

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


示例8:

复制以下内容并替换。

%systemroot% c:\windows

%windir% c:\windows

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


示例9:

复制以下内容并替换。

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

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


示例10:

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

全选所有内容将所有大写字母转换为小写。

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

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


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

在命令行中粘贴将用户登录配置文件导出检查。

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


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。

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

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

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

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

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

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

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

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

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