热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

网络安全应急响应–01–系统排查与进程排查

系统排查系统基本信息在进行受害主机排查时,首先要对主机系统进行基本排查,方便对受害主机有一个初步的了解Windows在基础排查时,可以使用Microsoft系统信息工具Msinfo

系统排查

系统基本信息

在进行受害主机排查时,首先要对主机系统进行基本排查,方便对受害主机有一个初步的了解


Windows

在基础排查时,可以使用 Microsoft 系统信息工具Msinfo32.exe,它是 Microsoft Windows NT诊断工具(Winmsd.exe)的更新版本。

1)系统信息工具

命令行中输入【msinfo32】命令,打开【系统信息】窗口,可以显示出本地计算机的硬件资源、组件和软件环境的信息。


若只是简单了解系统信息,可通过在命令行中输入【systeminfo】命令实现


2)正在运行任务

在【系统信息】窗口中,单击【软件环境】中的【正在运行任务】选项,可查看正在运行任务的名称、路径、进程ID等详细信息。

3)服务

在【系统信息】窗口中,单击【软件环境】中的【服务】选项,可查看服务的名称、状态、路径等详细信息。

4)系统驱动程序

在【系统信息】窗口中,单击【软件环境】中的【系统驱动程序】选项,可查看系统驱动程序的名称、描述、文件等详细信息。

5)加载的模块

在【系统信息】窗口中,单击【软件环境】中的【加载的模块】选项,可查看加载的模块的名称、路径等详细信息。

6)启动程序

在【系统信息】窗口中,单击【软件环境】中的【启动程序】选项,可查看启动程序的命令、用户名、位置等详细信息。


Linux

1)CPU信息

在命令行中输入【lscpu】命令,可查看CPU相关信息,包括型号、主频、内核等信息。

2)操作系统信息

在命令行中输入【uname -a】命令,可查看当前操作系统信息;

在命令行中输入【cat /proc/version】命令,可查看当前操作系统版本信息。

3)模块信息

在命令行中输入【lsmod】命令,可查看所有已载入系统的模块信息。


用户信息

在服务器被入侵后,攻击者可能会建立相关账户(有时是隐藏或克隆账户),方便进行远程控制。

常见采用手法:



  1. 直接建立一个新的账户(有时是为了混淆视听,账户名称与系统常用名称相似)

  2. 激活一个系统中的默认账户,但这个账户是不经常使用的

  3. 建立一个隐藏账户(在Windows系统中,一般在账户名称最后加$


Windows

1)命令行方法

在命令行中输入【net user】命令,可直接收集用户账户信息(注意,此方法看不到以$结尾的隐藏账户);

在命令行中输入【net user username】命令(username为具体的用户名),查看某个账户的详细信息。

2)图形界面方法

打开【计算机管理】窗口,单击【本地用户和组】中的【用户】选项,可查看隐藏账户,名称以$结尾的为隐藏账户。

在命令行中输入【lusrmgr.msc】命令,直接打开图形界面,查看是否有新增/可疑的账户。

3)注册表方法

打开【注册表编辑器】窗口,选择【HKEY_LOCAL_MACHINE】下的【SAM】选项,为该项添加【允许父项的继承权限传播到该对象和所有子对象。包括那些在此明确定义的项目】和【用在此显示的可以应用到子对象的项目替代所有子对象的权限项目】权限,使当前用户拥有SAM的读取权限;

添加权限完成后按【F5】键,刷新后即可访问子项并查看用户信息;

在此项下导出所有以 00000 开头的项,将所有导出的项与 000001F4(该项对应Administrator用户)导出内容做比较,若其中的F值相同,则表示系统中存在克隆账户。

4)wmic方法

wmic 扩展 WMI(Windows Management Instrumentation,Windows管理工具),提供从命令行接口和批命令脚本执行系统管理支持。

在命令行中输入【wmic useraccount get name, SID】命令,可以查看系统中的用户信息。


Linux

1)查看系统所有用户信息

在命令行中输入【cat /etc/passwd】命令,输出信息后续各项由冒号隔开,分别表示"用户名""密码加密""用户ID""用户组ID""注释""用户主目录""默认登录shell"。

查询的用户信息中,最后显示bin/bash的,表示账户状态为可登录;显示sbin/nologin的,表示账户状态为不可登录。

2)分析超级权限账户

在命令行中输入【awk -F: '{if($3==0)print $1}' /etc/passwd】命令,可查询可登录账户UID为0的账户。

若出现其它除了 root 以外的UID为0的可登录账户,就要重点排查。

3)查看可登录的账户

在命令行中输入【cat /etc/passwd | grep '/bin/bash'】命令,可查看可登录的账户。

4)查看用户错误的登录信息

在命令行中输入【lastb】命令,可查看显示用户错误的登录列表,包括错误的登录方法、IP地址、时间等。

5)查看所有用户最后的登录信息

在命令行中输入【lastlog】命令,可查看系统中所有用户最后的登录信息。

6)查看用户最近登录信息

在命令行中输入【last】命令,可查看用户最近登录信息。

查看指定数据源信息,【last -f 数据源】,数据源可为:



  • /var/log/wtmp:存储登录成功的信息

  • /var/log/btmp:存储登录失败的信息

  • /var/log/utmp:存储当前正在登录的信息

7)查看当前用户登录系统情况

在命令行中输入【who】命令,可查看当前用户登录系统情况。

8)查看空口令账户

在命令行中输入【awk -F: 'length($2)==0 {print $1}' /etc/shadow】命令,可查看是否存在空口令账户。


启动项

启动项是开机时系统在前台或者后台运行的程序。

操作系统在启动时,通常会自动加载很多程序。

启动项是病毒后门等实现持久化驻留的一种常用方法,在应急响应中也是排查的必要项目。


Windows

1)通过【系统配置】对话框查看

在命令行中输入【msconfig】命令,打开Windows系统中的【系统配置】对话框,单击【启动】选项卡,可查看启动项的详细信息。

2)通过注册表查看


注册表是操作系统中一个重要的数据库,主要用于存储系统所必需的信息。

注册表以分层的组织形式存储数据元素。数据项是注册表的基本元素,每个数据项下面不但可以存储很多子数据项,还可以以键值对的形式存储数据。


注册表的启动项是恶意程序的最爱,很多病毒木马通过注册表来实现在系统中的持久化驻留;

特别是在安装了新的软件程序后,需要看清楚是否是木马的伪装外壳或是捆绑程序,必要时可以根据备份来恢复注册表。

注册表目录的含义如下:



  1. HKEY_CLASSES_ROOT(HKCR)

    此处存储的信息可确保在Windows资源管理器中执行时打开正确的程序。

    它还包含有关拖放规则、快捷方法和用户界面信息的更多详细信息。



  2. HKEY_CURRENT_USER(HKCU)

    包含当前登录系统的用户的配置信息,有用户的文件夹、屏幕颜色和控制面板设置。



  3. HKEY_LOCAL_MACHINE(HKLM)

    包含运行操作系统的计算机硬件特定信息,有系统上安装的驱动器列表及已安装硬件和应用程序的通用配置。



  4. HKEY_USERS(HKU)

    包含运行操作系统的计算机硬件特定信息,有系统上安装的驱动器列表及已安装硬件和应用程序的通用配置。



  5. HKEY_CURRENT_CONFIG(HCU)

    存储有关系统当前配置的信息。




Linux

使用【cat /etc/init.d/rc.local】命令,可查看 init.d 文件夹下的 rc.local 文件内容。

使用【cat /etc/rc.local】命令,可查看 rc.local 文件内容。

使用【ls -alt /etc/init.d】命令,可查看 init.d 文件夹下所有文件的详细信息。


任务计划

任务计划也是恶意病毒实现持久化驻留的一种常用手段。


Windows

任务计划是Windows系统的一个预置实现某些操作的功能,利用这个功能还可实现自启动的目的。

获取任务计划的方法:



  1. 打开【计算机管理】窗口,选择【系统工具】中【任务计划程序】中的【任务计划程序库】选项,可以查看任务计划的名称、状态、触发器等详细信息;



  2. 在PowerShell下输入【Get-ScheduledTask】命令,可查看当前系统中所有任务计划的信息,包括任务计划的路径、名称、状态等详细信息;



  3. 在命令行中输入【schtasks】命令,可获取任务计划的信息。该命令是一个功能更为强大的超级命令行计划工具,它含有【at】(在较旧的系统中才可以用)命令行工具中的所有功能,获取任务计划时要求必须是本地 Administrators 组的成员。




Linux

1)查看当前的任务计划

在命令行中输入【crontab -l】命令,可查看当前的任务计划。

也可以指定用户进行查看,如输入命令【crontab -u root -l】,可查看root用户的任务计划。

2)查看etc目录下的任务计划文件


一般在Linux系统中的任务计划文件是以cron开头的,可以利用正则表达式的*,筛选出目录下的所有以cron开头的文件


输入【ls /etc/cron*】命令,查看etc目录下的所有任务计划文件。

通常,还有如下包含任务计划的文件夹,其中,*代表文件夹下所有文件:
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab

防火墙

Windows系统防火墙最基本的用途是对出、入的数据包进行检测。


防火墙规则包括入站规则和出站规则。

入站规则:根据规则中的过滤条件,过滤从公网到本地主机的流量。

出站规则:根据规则中的过滤条件,过滤从本地主机到公网的流量。

两种规则都可以按需自定义流量过滤的条件。换句话说,

入站规则与进入主机的流量有关,如果在主机上运行一个Web服务器,那就必须告诉防火墙允许外部用户访问主机。

出站规则与流出主机的流量有关,会将应用程序分类,允许部分应用程序访问外网,而其他应用则不能。


1)打开【Windows防火墙】窗口,单击【高级设置】,然后选择【入站规则】或【出站规则】可查看防火墙的入站规则或出站规则。

2)在命令行中输入【netsh】命令进行查看。使用【netsh Firewall showstate】命令,可显示当前防火墙的网络配置状态


进程排查

进程


进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在面向线程设计的计算机结构中,进程是线程的容器。


无论是在Windows系统还是Linux系统中,主机在感染恶意程序后,恶意程序都会启动相应的进程,来完成相关的恶意操作,有的恶意进程为了能够不被查杀,还会启动相应的守护进程对恶意进程进行守护。


Windows

对于Windows系统中的进程排查,主要是找到恶意进程的PID、程序路径,有时还需要找到PPID(PID的父进程)及程序加载的DLL。

1)通过【任务管理器】查看

通过【任务管理器】查看可疑程序。需要在打开【任务管理器】窗口后,添加【命令行】和【映射路径名称】等进程页列,以方便获取更多进程信息。

在排查进程时,可重点关注进程的映像路径名称及命令行是否可疑,从而进一步进行排查。

2)使用【tasklist】命令进行排查

在命令行中输入【tasklist】命令,可显示运行在计算机中的所有进程,可查看进程的映像名称、PID、会话名等信息。

使用【tasklist】命令并添加特定参数,还可以查看每个进程提供的服务,

如:

添加svc参数,即输入【tasklist /svc】命令,可以显示每个进程和服务的对应情况。

添加m参数,即输入【tasklist /m】命令进行查询某些加载DLL的恶意进程;使用命令【tasklist /m 名称】,查询特定DLL的调用情况。

【tasklist】命令还有过滤器的功能,可以使用【fi】命令进行条件筛选;
结合关系运算符【eq】(等于)、【ne】(不等于)、【gt】(大于)、【lt】(小于)、【ge】(大于等于)、【le】(小于等于)等命令进行有效过滤:
查看PID为992的进程,可使用命令【tasklist /svc /fi "PID eq 992"】查看。

3)使用【netstat】命令进行排查

在命令行中输入【netstat】命令,可显示网络连接的信息,包括活动的TCP连接、路由器和网络接口信息,它是一个监控TCP/IP网络的工具。

相关参数如下:
-a:显示所有连接和侦听端口。
-b:显示在创建每个连接或侦听端口时涉及的可执行程序。
-e:显示以太网统计信息。可以与-s结合使用。
-f:显示外部地址的完全限定域名(FQDN)。
-n:以数字形式显示地址和端口号。
-o:显示拥有的与每个连接关联的进程 ID。
-p proto:显示proto指定的协议的连接。
-q:显示所有连接、侦听端口和绑定的非侦听TCP端口。绑定的非侦听端口不一定与活动连接相关联。
-r:显示路由表。
-s:显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息。
-t:显示当前连接卸载状态。
-x:显示NetworkDirect连接、侦听器和共享终结点。
-y:显示所有连接的TCP连接模板。无法与其他选项结合使用。
interval:重新显示选定统计信息,每次显示之间暂停时间间隔(以秒计)。
常见的网络状态说明如下:
LISTENING:侦听状态。
ESTABLISHED:建立连接。
CLOSE_WAIT:对方主动关闭连接或网络异常导致连接中断。

在排查过程中,一般会使用【netstat -ano | findstr "ESTABLISHED"】命令查看目前的网络连接,定位可疑的ESTABLISHED。

使用【tasklist | find "[PID]"】命令,可查看具体的指定PID的程序。

通过【netstat -anb】命令(需要管理员权限)快速定位到端口对应的程序。

4)使用PowerShell进行排查


有时对于有守护进程的进程,还要确认子父进程之间的关系,可以使用PowerShell进行查看,一般PowerShell在查询时会调用Wmi对象。


【Get-WmiObject Win32_Process | select Name, ProcessId, ParentProcessId, Path】命令中,管道前表示获取进程的所有信息,整个命令表示显示所有进程信息中的Name,ProcessId,ParentProcessId,Path 4个字段的内容。

5)使用【wmic】命令进行查询

(1)在命令行中使用【wmic process】命令,可以对进程情况进行查询。

使用【wmic processget 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信息。

(2)【wmic】命令还可以结合条件对进程进行筛选。

【wmic process where processid=[PID] get parentprocessid】命令表示以PID的值作为条件来获取其父进程的PID情况。

【wmic process where processid=[PID] get commandline】命令表示以PID的值作为条件来获取其命令行。

(3)在使用【wmic process】命令查出恶意进程后,会结束恶意进程,一般使用如下命令结束恶意进程。

【wmic process where name="malware.exe" call terminate】命令是指删除"malware.exe"恶意程序的进程。

【wmic process where processid=[PID] delete】命令是指删除PID为某值的进程。


Linux

在命令行中输入【netstat】网络连接命令,可分析可疑端口、可疑IP地址、可疑PID及程序进程,如:【netstat -antlp | more】。

根据PID的值,利用【ls -alt /proc/PID】命令,可查看其对应的可执行程序。

利用【lsof -p PID】命令,查看进程所打开的文件。

若是恶意进程,可以使用【kill -9 PID】命令结束进程,然后使用【rm -rf filename】命令删除木马,如果root用户都无法删除相关文件,那么很可能是因为该文件被加上了i属性。使用【lsatter filename】命令,可查看文件属性,然后使用【chattr -i filename】命令,可移除i属性,进而删除文件。也有的进程因为存在守护进程而无法删除,可以先把进程挂起,查杀守护进程后,再返回将进程删除。

有些攻击者会将进程隐藏,以躲避排查,因此查看隐藏进程同样重要。

按照顺序执行【ps -ef | awk '{print}' | sort -n | uniq >1】、【ls /proc | sort -n | uniq >2】、【diff 1 2】命令,可以查看隐藏进程。

对于挖矿进程的排查,可使用【top】命令查看相关资源占用率较高的进程,之后进行定位。



推荐阅读
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Win10下游戏不能全屏的解决方法及兼容游戏列表
    本文介绍了Win10下游戏不能全屏的解决方法,包括修改注册表默认值和查看兼容游戏列表。同时提供了部分已经支持Win10的热门游戏列表,帮助玩家解决游戏不能全屏的问题。 ... [详细]
  • 如何在联想win10专业版中修改账户名称
    本文介绍了在联想win10专业版中修改账户名称的方法,包括在计算机管理中找到要修改的账户,通过重命名来修改登录名和属性来修改显示名称。同时指出了windows10家庭版无法使用此方法的限制。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 电脑公司win7剪切板位置及使用方法
    本文介绍了电脑公司win7剪切板的位置和使用方法。剪切板一般位于c:\windows\system32目录,程序名为clipbrd.exe。通过在搜索栏中输入cmd打开命令提示符窗口,并输入clip /?即可调用剪贴板查看器。赶紧来试试看吧!更多精彩文章请关注本站。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
author-avatar
壹起等绿灯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有