一.应急响应基本概念
1.1 定义
网络安全应急响应是指针对已经发生或可能发生的安全事件进行监控、分析、协调、处理、保护资产安全。网络安全应急响应主要是为了人们对网络安全有所认识、有所准备,以便在遇到突发网络安全事件时做到有序应对、妥善处理。
在发生确切的网络安全事件时,应急响应实施人员应及时采取行动,限制事件扩散和影响的范围,防范潜在的损失与破坏。实施人员应协助用户检查所有受影响的系统,在准确判断安全事件原因的基础上,提出基于安全事件的整体解决方案,排除系统安全风险,并协助追查事件来源,协助后续处置。
1.2 具体工作内容
主要是两方面:
- 未雨绸缪,即在事件发生前先做好准备。例如,开展风险评估,制订安全计划,进行安全意识的培训,以发布安全通告的方法进行预警,以及各种其他防范措施。
- 亡羊补牢,即在事件发生后采取的响应措施,其目的在于把事件造成的损失降到最小。这些行动措施可能来自人,也可能来自系统。例如,在发现事件后,采取紧急措施,进行系统备份、病毒检测、后门检测、清除病毒或后门、隔离、系统恢复、调查与追踪、入侵取证等一系统操作。
以上两方面的工作是相互补充的:
首先,事前的计划和准备可为事件发生后的响应动作提供指导框架,否则,响应动作很可能陷入混乱,毫无章法的响应动作有可能引起更大的损失
其次,事后的响应可能会发现事前计划的不足,从而使我们吸取教训,进一步完善安全计划。因此,这两方面应该形成一种正反馈的机制,逐步强化组织的安全防范体系。
1.3 响应常用方法
PDCERF方法最早于1987年提出,该方法将应急响应流程分成准备阶段、检测阶段、抑制阶段、根除阶段、恢复阶段、总结阶段。根据应急响应总体策略为每阶段定义适当的目的,明确响应顺序和过程。
但是,PDCERF方法不是安全事件应急响应的唯一方法。在实际应急响应过程中,不一定严格存在这6个阶段,也不一定严格按照这6个阶段的顺序进行。但它是目前适用性较强的应急响应通用方法。
以下是六个阶段的工作内容参考:
- 准备阶段以预防为主。
主要工作涉及识别机构、企业的风险,建立安全政策,建立协作体系和应急制度。按照安全政策配置安全设备和软件,为应急响应与恢复准备主机。依照网络安全措施,进行一些准备工作,例如,扫描、风险分析、打补丁等。如有条件且得到许可,可建立监控设施,建立数据汇总分析体系,制定能够实现应急响应目标的策略和规程,建立信息沟通渠道,建立能够集合起来处理突发事件的体系。 - 检测阶段主要检测事件是己经发生的还是正在进行中的,以及事件产生的原因。
确定事件性质和影响的严重程度,以及预计采用什么样的专用资源来修复。选择检测工具,分析异常现象,提高系统或网络行为的监控级别,估计安全事件的范围。通过汇总,查看是否发生了全网的大规模事件,从而确定应急等级及其对应的应急方案。
一般典型的事故现象包括:
(1)账号被盗用;
(2)骚扰性的垃圾信息;
(3)业务服务功能失效;
(4)业务内容被明显篡改;
(5)系统崩溃、资源不足。 - 抑制阶段的主要任务是限制攻击/破坏波及的范围,同时也是在降低潜在的损失。
所有的抑制活动都是建立在能正确检测事件的基础上的,抑制活动必须结合检测阶段发现的安全事件的现象、性质、范围等属性,制定并实施正确的抑制策略。
抑制策略通常包含以下内容:
(1)完全关闭所有系统;
(2)从网络上断开主机或断开部分网络;
(3)修改所有的防火墙和路由器的过滤规则;
(4)封锁或删除被攻击的登录账号;
(5)加强对系统或网络行为的监控;
(6)设置诱饵服务器进一步获取事件信息;
(7)关闭受攻击的系统或其他相关系统的部分服务 - 根除阶段根除阶段的主要任务是通过事件分析找出根源并彻底根除,以避免攻击者再次使用相同的手段攻击系统,引发安全事件。并加强宣传,公布危害性和解决办法,呼吁用户解决终端问题。加强监测工作,发现和清理行业与重点部门问题。
- 恢复阶段的主要任务是把被破坏的信息彻底还原到正常运作状态。
确定使系统恢复正常的需求内容和时间表,从可信的备份介质中恢复用户数据,打开系统和应用服务,恢复系统网络连接,验证恢复系统,观察其他的扫描,探测可能表示入侵者再次侵袭的信号。
一般来说,要想成功地恢复被破坏的系统,需要干净的备份系统,编制并维护系统恢复的操作手册,而且在系统重装后需要对系统进行全面的安全加固。 - 总结阶段的主要任务是回顾并整合应急响应过程的相关信息,进行事后分析总结和修订安全计划、政策、程序,并进行训练,以防止入侵的再次发生。
基于入侵的严重性和影响,确定是否进行新的风险分析,给系统和网络资产制作一个新的目录清单。这一阶段的工作对于准备阶段工作的开展起到重要的支持作用。
总结阶段的工作主要包括以下3方面的内容:
(1)形成事件处理的最终报告;
(2)检查应急响应过程中存在的问题,重新评估和修改事件响应过程:
(3)评估应急响应人员相互沟通在事件处理上存在的缺陷,以促进事后进行更有针对性的培训。
二.应急响应之用户信息排查
在服务器被入侵后,攻击者可能会建立相关账户(有时是隐藏或克隆账户),方便进行远程控制。
攻击者会采用的方法主要有如下几种:
- 直接建立一个新的账户(有时是为了混淆视听,账户名称与系统常用名称相似)
- 激活一个系统中的默认账户,但这个账户是不经常使用的
- 建立一个隐藏账户(在Windows系统中,一般在账户名称最后加$)
无论攻击者采用哪种方法,都会在获取账户后,使用工具或是利用相关漏洞将这个账户提升到管理员权限,然后通过这个账户任意控制计算机。
针对Windows系统:
- 命令行方法
- 在命令行中输入[net user]命令,可直接收集用户账户信息,若需查看某个账户的详细信息,可在命令行中输入[net user username]命令
- 在命令行中输入[wmic useraccount get name,SID]命令,也可以查看系统中的用户信息,同时这个命令也是可以查看隐藏账户的。
- 图形界面方法
- 打开【计算机管理】窗口,单击【本地用户和组】中的【用户】选项,可查看隐藏账户,名称以结尾的为隐藏账户。也可以在命令行中输入[lusrmgr.msc]命令,直接打开图形界面,查看是否有新增/可疑的账户。
具体使用:
针对Linux系统:
- 命令:cat /etc/passwd
- 命令:awk -F: '{if ($3==0) print $1}' /etc/passwd,使用这个命令查询一般只会出现root用户,如果出现其他用户,需进行排查。
- 命令:cat /etc/passwd |grep '/bin/bash',排查可登录账户
- 命令:lastb,查看账户错误登录信息
- 命令:lastlog,把系统中所有账户最后的登录信息列出来
- 命令:last,查看用户最近的登录行为
- 命令:awk -F: 'length($2) == 0 {print $1}' /etc/shadow,查看空密码账户
三.应急响应之计划任务排查
由于很多计算机都会自动加载“任务计划”,“任务计划也是恶意病毒实现持久化驻留的一种常用手段,因此在应急响应事件排查时需要进行排查。
windows系统排查
任务计划是Windows系统的一个预置实现某些操作的功能,利用这个功能还可实现自启动的目的,获取任务计划的方法有以下几种。
- 打开【计算机管理】窗口,选择【系统工具】中【任务计划程序】中的【任务计划程序库】选项,可以查看任务计划的名称、状态、触发器等详细信息
- 在命令行中输入[schtasks]命令,可获取任务计划的信息,该命令是一个功能更为强大的超级命令行计划工具,它含有[at](在较旧的系统中才可以用)命令行工具中的所有功能,获取任务计划时要求必须是本地Administrators组的成员。
Linux系统排查
Linux系统中,任务计划也是维持权限和远程下载恶意软件的一种手段。一般有以下两种方法可以查看。
- 在命令行中输入[crontab -l]命令,可查看当前的任务计划,也可以指定用户进行查看,如输入命令[crontab -u root -l],可查看root用户的任务计划,以确认是否有后门木马程序启动相关信息。
- 查看etc目录下的任务计划文件。一般在Linux系统中的任务计划文件是以cron开头的,可以利用正则表达式的*筛选出etc目录下的所有以cron开头的文件,具体表达式为/etc/cron*
四.应急响应之进程排查
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。无论是在Windows系统还是Linux系统中,主机在感染恶意程序后,恶意程序都会启动相应的进程,来完成相关的恶意操作。
针对Windows系统
对于Windows系统中的进程排查,主要是找到恶意进程的PID、程序路径,有时还需要找到PPID(PID的父进程)及程序加载的DLL。对于进程的排查,一般有如下几种方法。
- 通过【任务管理器】查看比较直观的方法是通过【任务管理器】查看可疑程序。但是需要在打开【任务管理器】窗口后,添加【命令行】和【映射路径名称】等进程页列,以方便获取更多进程信息。
- 使用[tasklist]命令进行排查在命令行中输入[tasklist]命令,可显示运行在计算机中的所有进程,可查看进程的映像名称、PID、会话名等信息。
[tasklist]命令并添加特定参数,还可以查看每个进程提供的服务,如添加svc参数,可以显示每个进程和服务的对应情况
还可以通过输入[tasklist/m]命令查询进程加载的恶意进程,如果要想查询特定DLL的调用情况,可以使用命令[tasklist/m DLL名称]
将所有调用了user32.dll文件的程序列出来:
- 使用[netstat]命令进行排查:
在命令行中输入[netstat]命令,可显示网络连接的信息,包括活动的TCP连接、路由器和网络接口信息,相关参数如下。
-a:显示所有连接和侦听端口。
-b:显示在创建每个连接或侦听端口时涉及的可执行程序。
-n:以数字形式显示地址和端口号。
-o:显示拥有的与每个连接关联的进程ID.
-p proto:显示proto指定的协议的连接。
常见的网络状态说明如下。
LISTENING:侦听状态。
ESTABLISHED:建立连接。
CLOSE_WAIT:对方主动关闭连接或网络异常导致连接中断。
在排查过程中,一般会使用[netstat -ano|findstr "ESTABLISHED"]命令查看目前的网络连接,定位可疑的ESTABLISHED。ESTABLISHED也可更换为其他状态标识符。
- 使用[wmic]命令进行查询:
在命令行中使用[wmic process]命令,可以对进程情况进行查询。可以使用[wmic process get name,parentprocessid,processid/format:csv]命令,以csv格式来显示进程的名称、父进程ID、进程ID。
其他类似命令如下:
[wmic process get ExecutablePath,processid/format:csv]命令表示以csv格式来显示进程路径、进程ID信息。
[wmic process get name,ExecutablePath,processid,parentprocessid/format:csv|findstr/I"appdata"】命令表示以csv格式来显示进程的名称、进程路径、进程ID、父进程ID信息。
[wmic process where processid=-[PID] get parentprocessid】命令表示以PID的值作为条件来获取其父进程的PID情况。
[wmic process where processid=[PID] get commandline】命令表示以PID的值作为条件来获
取其命令行。
[wmic process where name="malware.exe" call terminate]命令是指删"malware.exe"恶意程
序的进程。
[wmic process where processid=-[PID]delete】命令是指删除PID为某值的进程。
针对Linux系统
- 命令:ps -aux,能够查看进程信息,但是实际排查帮助不大
- netstat -ntap,排查所有的网络连接情况
- 命令:ls -alt /proc/PID,这条命令是结合上面这条一起使用,将执行上面命令之后的进程信息进行过滤,选取自己觉得可疑的进程,复制PID进行查询,寻找进程的可执行文件。
- 命令:lsof -p PID:使用方式一样,结合可疑进程的PID一起使用
- 命令:top,观看CPU占用来判断
五.应急响应之服务排查
服务可以理解为运行在后台的进程。这些服务可以在计算机启动时自动启动,也可以暂停和重新启动,而且不显示任何用户界面。服务非常适合在服务器上使用,通常在为了不影响在同一台计算机上工作的其他用户,且需要长时间运行功能时使用。在应急响应排查过程中,服务作为一种运行在后台的进程,是恶意软件常用的驻留方法。
服务(Service)和进程(Process)是两个在计算机操作系统中经常被提及且容易混淆的概念,它们各自承担不同的角色和功能:
进程(Process)
- 定义:进程是操作系统中程序执行的实例,它是系统进行资源分配和调度的基本单位。当一个程序被执行时,操作系统会创建一个进程来管理和跟踪该程序的运行状态,包括分配内存、CPU时间片以及其他必要资源。
- 特征:进程是动态的,它有生命周期,可以创建、运行、暂停、终止。一个进程可以包含多个线程,这些线程共享进程的资源并协同完成任务。
- 例子:当你打开一个文本编辑器或浏览器时,操作系统就会为这些应用程序创建对应的进程。
服务(Service)
- 定义:服务是操作系统或软件框架中用于提供后台功能的长期运行的程序。它们通常是为了执行特定的后台任务而设计的,比如监听网络请求、管理系统资源、数据库服务等,而且往往不直接与用户交互。
- 特征:服务倾向于长时间持续运行,甚至可能从系统启动开始就一直运行,直到系统关闭。它们往往是“无界面”的,即用户看不到直接的图形界面与之互动。服务可以配置为自动启动,并在后台默默运行,即使用户未登录也能继续服务。
- 服务与进程的关系:服务本身是一个概念,它的实现通常依赖于一个或多个进程。例如,在Windows系统中,一个服务可能对应一个svchost.exe进程,而在Linux中,服务常常是一个后台守护进程(Daemon),如apache2或sshd。操作系统提供了服务管理工具(如Windows的服务管理器,Linux的systemd或sysvinit)来控制服务的启动、停止、重启等操作。
针对Windows系统
打开【运行】对话框,输入[services.msc]命令,可打开【服务】窗口,查看所有的服务项,包括服务的名称、描述、状态等。
一般为恶意程序的话,描述这块的内容是空白的或者及其简略的。
针对Linux系统
- 使用[service --status-all]命令,可查看所有服务的状态,但是信息极其简略,不推荐在centos上,推荐在Debian上,例如kali。也可以使用[systemctl | more]命令进行查看,这个命令更推荐在centos系统上进行使用。
- 查看服务是否开机自启动[systemctl list-unit-files]。
六.应急响应之文件痕迹排查
在应急响应排查的过程中,由于大部分的恶意软件、木马、后门等都会在文件维度上留下痕迹,因此对文件痕迹的排查必不可少。一般,可以从以下几方面对文件痕迹进行排查:
- 对恶意软件常用的敏感路径进行排查
- 在确定了应急响应事件的时间点后,对时间点前后的文件进行排查
- 对带有特征的恶意软件进行排查,这些特征包括代码关键字或关键函数、文件权限特征等。
针对Windows系统
- 敏感目录
- 在Windows系统中,恶意软件常会在以下位置驻留。C:\Windows\Temp
temp(tmp)相关目录。有些恶意程序释放子体(即恶意程序运行时投放出的文件)一般会在程序中写好投放的路径,由于不同系统版本的路径有所差别,但是临时文件的路径相对统一,因此在程序中写好的路径一般是临时目录。对敏感目录进行的检查,一般是查看临时目录下是否有异常文件。 - 对于一些人工入侵的应急响应事件,有时入侵者会下载一些后续攻击的工具。
Windows系统要重点排查浏览器的历史记录、下载文件和cookie信息,查看是否有
相关的恶意痕迹。 - 查看用户Recent文件。Recent文件主要存储了最近运行文件的快捷方式,可通过分析最近运行的文件,排查可疑文件。一般,Recent文件在Windows系统中的存储位置如下:
C:\Documents and Settings\Administrator(系统用户名)\Recent
C:\Documents and Settings\Default User\Recent.
在Windows 11中,C:\Documents and Settings
这个路径已经不再被使用。自Windows Vista以来,用户配置文件的默认存储位置已更改为C:\Users
。因此,如果你想访问当前用户的“最近使用的文件”(Recent文件夹),你应该查找的路径类似于:C:\Users\[YourUsername]\AppData\Roaming\Microsoft\Windows\Recent
- 在Windows系统中,恶意软件常会在以下位置驻留。C:\Windows\Temp
- 时间点查找应急响应事件发生后,需要先确认事件发生的时间点,然后排查时间点前、后的文件变动情况,从而缩小排查的范围。
- 可列出攻击日期内新增的文件,从而发现相关的恶意软件。在Windows系统中,可以在命令行中输入[forfiles]命令,查找相应文件
例如:使用【forfiles /m *.exe/d+2020/2/12 /s /p c:\ /c "cmd /c echo @path @fdate
@ftime"】命令就是对2020/2/12后的exe新建文件进行搜索 - 对文件的创建时间、修改时间、访问时间进行排查。
对于人工入侵的应急响应事件,有时攻击者会为了掩饰其入侵行为,对文档的相应时间进行修改,以规避一些排查策略。例如,攻击者可能通过“菜刀类”工具改变修改时间。因此,如果文件的相关时间存在明显的逻辑问题,就需要重点排查了,极可能是恶意文件。
- 可列出攻击日期内新增的文件,从而发现相关的恶意软件。在Windows系统中,可以在命令行中输入[forfiles]命令,查找相应文件
针对Linux系统
- 敏感目录
Linux系统常见的敏感目录如下。- /tmp目录和命令目录/usr/bin、/usr/sbin等经常作为恶意软件下载目录及相关文件被替换的目录。
- 此外,~/.ssh及/etc/ssh也经常作为一些后门配置的路径,需要重点检查
- 时间点查找
通过列出攻击日期内变动的文件,可发现相关的恶意软件。通过[fid]命令可对某一时间段内增加的文件进行查找。以下为常用的[find]命令。
find:在指定目录下查找文件。
-mtime-n+n:按文件更改时间来查找文件,-n指n天以内,+n指n天前。
-atime-n+n:按文件访问时间来查找文件,-n指n天以内,+n指n天前。
-ctime-n+n:按文件创建时间来查找文件,-n指n天以内,+n指n天前。 - 特殊文件Linux
系统中的恶意文件存在特定的设置、特定的关键字信息等。Liux系统中的几种特殊文件类型可以按照以下方法进行排查。- 特殊权限文件查找
查找777权限的文件:[find /tmp-perm 777] - 对系统命令进行排查
[ls]和[ps]等命令很可能被攻击者恶意替换,所以可以使用[ls -alt /bin]命令,查看命令目录中相关系统命令的修改时间,从而进行排查。也可以使用[ls -alh /bin]命令查看相关文件的大小,若明显偏大,则文件很可能被替换。 - 排查SUID程序,即对于一些设置了SUID权限的程序进行排查,可以使用【find / -type f -perm -04000】
- 特殊权限文件查找
七.应急响应之日志分析排查
Windows系统排查
日志概述在Windows系统中,日志文件包括:系统日志、安全性日志及应用程序日志,对于应急响应工程师来说这三类日志需要熟练掌握,其位置如下:
在Windows2000专业版/Windows XP/Windows Server2003(注意日志文件的后缀名是evt)系统中:
系统日志的位置为C:\Windows\System32\config\SysEvent.evt
安全性日志的位置为C:\Windows\System32 config\SecEvent.evt
应用程序日志的位置为C:\Windows\System32\config\AppEvent.evt
在Windows Vista/Windows7/Nindows8/Nindows10/Windows Server2008及以上版本系统中:
系统日志的位置为%SystemRoot%System32\Winevt\Logs\System.evtx
安全性日志的位置为%SystemRoot%System32\Winevt\Logs\Security..evtx
应用程序日志的位置为%SystemRoot%\System32\Winevt\Logs\Application.evtx
日志类型解析:
- 系统日志。
系统日志主要是指Windows系统中的各个组件在运行中产生的各种事件。这些事件一般可以分为:系统中各种驱动程序在运行中出现的重大问题、操作系统的多种组件在运行中出现的重大问题及应用软件在运行中出现的重大问题等。这些重大问题主要包括重要数据的丢失、错误,以及系统产生的崩溃行为等。 - 安全性日志。
安全性日志与系统日志不同,安全性日志主要记录了各种与安全相关的事件。构成该日志的内容主要包括:各种登录与退出系统的成功或不成功的信息;对系统中各种重要资源进行的各种操作,如对系统文件进行的创建、删除、更改等操作。 - 应用程序日志。
应用程序日志主要记录各种应用程序所产生的各类事件。例如,系统中SQL Server数据库程序在受到暴力破解攻击时,日志中会有相关记录,该记录中包含与对应事件相关的详细数据。
日志常用事件ID
Windows系统中的每个事件都有其相应的事件ID,下图是应急响应中常用的事件ID,其中旧版本指Windows2000专业版/Windows XP/Windows Server2003,新版本指Windows Vista/Windows 7/Windows 8/Windows 10/Windows Server 2008等。
成功/失败登录事件提供的有用信息之一是用户/进程尝试登录(登录类型),Windows系统将此信息显示为数字,下图是数字及其对应说明:
下图是登录相关日志事件ID对应的描述:
下图是常用启动事件相关日志事件ID对应的描述:
下图是日志被清除相关日志事件ID对应的描述:
Linux系统排查
lastb:查看登录失败的用户信息,读取/var/log/btmp
last:查看用户成功登录信息,读取/var/Iog/wtmp
lastlog:查看用户最后登录系统时间,读取/var/log/lastlog
八.Windows入侵排查实践
事件背景:
客户反馈:服务器疑似被入侵,风扇噪声很大,CPU占用过高。
受害服务器:Windows Server 2008 R2系统
IP:192.168.1.129、无WEB服务
事件分析:
根据客户的反馈来看,风扇噪音很大的话,一般是只有这个CPU消耗非常多的情况下,服务器温度过高,风扇才会一直去转来散热。这种情况一般多发于服务器感染了挖矿木马。
排查过程:
查看任务管理器,排查占用CPU最多的程序
查看程序属性,定位程序位置:
去文件管理器中查找:
在上一级文件夹中并未发现相应程序,可知有害程序是在一个隐藏文件夹中:
勾选显示隐藏文件,在进入查看,可看到javs这个应用程序:
然后将程序上传到微步的沙箱分析:
同时将服务器中的有害进程关闭,但是会发现,过不了多久,程序会自动重新运行,这个应该是存在定时任务、计划任务这些。所以需要对计划任务排查
关注创建人以及创建时间:
然后排查网络,未发现明显异常的网络连接:
排查账户,发现一个隐藏账号:hyf$
九.Windows入侵事件还原
从之前的计划任务可以得知,管理员在2022.9.12创建了一个计划任务来启动木马程序
所以接下来要对这个时间发生的一些事件进行分析:
先将日志提取出来,然后保存:
或者可以使用Windows日志分析和提取工具,这个可以自己去搜索相关资源: