网络安全应急响应 - 03 - 日志分析与内存分析

日志分析

Windows

日志概述

在Windows系统中,日志文件包括:系统日志、安全性日志及应用程序日志。

在Windows 2000 专业版/Windows XP/Windows Server 2003(注意日志文件的后缀名是evt)系统中(只有这三种日志):
系统日志的位置为 C:\WINDOWS\System32\config\SysEvent.evt
安全性日志的位置为 C:\WINDOWS\System32\config\SecEvent.evt
应用程序日志的位置为 C:\WINNT\System32\config\AppEvent.evt

在Windows Vista/Windows 7/Windows 8/Windows 10/Windows Server2008及以上版本系统中:
系统日志的位置为 %SystemRoot%\System32\Winevt\Logs\System.evtx
安全性日志的位置为 %SystemRoot%\System32\Winevt\Logs\Security.evtx
应用程序日志的位置为 %SystemRoot%\System32\Winevt\Logs\Application.evtx
其它日志:如Dhcp、Bits-Client等,这些日志存储在 %SystemRoot%\System32\Winevt\Logs 目录下

可以在【运行】对话框中输入【eventvwr】命令,打开【事件查看器】窗口,查看相关的日志。

(1)系统日志
系统日志主要是指Windows系统中的各个组件在运行中产生的各种事件。
这些事件一般可以分为:系统中各种驱动程序在运行中出现的重大问题、操作系统的多种组件在运行中出现的重大问题及应用软件在运行中出现的重大问题等。
这些重大问题主要包括重要数据的丢失、错误,以及系统产生的崩溃行为等。

(2)安全性日志(安全日志)
安全性日志主要记录了各种与安全相关的事件。
构成该日志的内容主要包括:各种登录与退出系统的成功或不成功的信息;对系统中各种重要资源进行的各种操作,如对系统文件进行的创建、删除、更改等操作。

(3)应用程序日志
应用程序日志主要记录各种应用程序所产生的各类事件。
例如,系统中SQL Server数据库程序在受到暴力破解攻击时,日志中会有相关记录,该记录中包含与对应事件相关的详细信息。

在应急响应中还经常使用PowerShell日志。

日志常用事件ID

Windows系统中的每个事件都有其相应的事件ID。

常用的事件ID:

旧版本指 Windows 2000专业版/Windows XP/Windows Server2003
新版本指 Windows Vista/Windows 7/Windows 8/Windows10/Windows Server 2008等

成功/失败登录事件提供的有用信息之一是用户/进程尝试登录(登录类型),Windows系统将此信息显示为数字。
数字及其对应说明:

登录相关日志事件ID对应说明:

常用启动事件相关日志事件ID对应说明:

日志被清除相关日志事件ID对应说明:

日志分析

日志分析就是在众多的日志中找出自己需要的日志。
(1)通过内置的日志筛选器进行分析
使用日志筛选器可以对记录时间、事件级别、任务类别、关键字等信息进行筛选。

(2)通过PowerShell对日志进行分析(需要有管理员权限)
命令【Get-EventLog】只获取传统的事件日志。
命令【Get-WinEvent】是从传统的事件日志(如系统日志和应用程序日志)和新Windows事件日志技术生成的事件日志中获取事件,其还会获取Windows事件跟踪(ETW)生成的日志文件中的事件。(需要Windows Vista、Windows Server 2008或更高版本的Windows系统,还需要Microsoft .NETFramework 3.5及以上的版本)

获取安全性日志下事件ID为4625(失败登录)的所有日志信息:
【Get-EventLog Security-InstanceId 4625】命令
【Get-WinEvent-FilterHashtable @{LogName='Security';ID='4625'}】命令

通过设置起始时间和终止时间变量,可查询指定时间内的事件。先设置起始时间变量StartTime和终止时间变量EndTime,再使用【Get-WinEvent】命令,可查询这段时间内的系统日志情况:

> $StartTime=Get-Date -Year 2022 -Month 6 -Day 1 -Hour 10 -Minute 30
> $EndTime=Get-Date -Year 2022 -Month 7 -Day 1 -Hour 10 -Minute 30
> Get-Wine vent -FilterHashtable @{LogName='System';StartTime=$StartTime;EndTime=$EndTime}

通过逻辑连接符可对多种指定日志ID进行联合查询。例如,对Windows启动和关闭日志进行查询:

> Get-WinEvent-LogName system | Where-Object {$_.ID-eq "12" -or $_.ID -eq "13"}

(3)通过相关的日志工具进行分析查询
FullEventLogView:FullEventLogView是一个轻量级的日志检索工具。
Event Log Explorer:Event Log Explorer是一个检测系统安全的软件,可查看、监视和分析事件记录,包括安全性、系统、应用程序和其Windows系统事件记录。
Log Parser:Log Parser是微软公司推出的日志分析工具,可以分析基于文本的日志文件、XML文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory等。其可以像使用 SQL语句一样查询分析数据,甚至可以把分析结果以各种图表的形式展现出来。

查看事件ID为4624,即登录成功的所有事件:
> LogParser.exe -i:EVT -o:DATAGRID "SELECT*FROM C:\Security.evtx where EventID=4624"

查看从2018年1月1日23时59分59秒到2019年6月1日23时59分59秒,事件ID为4625,即登录失败的所有事件:
> LogParser.exe -i:EVT -o:DATAGRID "SELECT*FROM C:\Security.evtx where TimeGenerated>'2018-01-01 23:59:59' and TimeGenerated<'2019-06-01 23:59:59' and EventID=4625"

查看事件ID为4624(即登录成功的用户)的用户名和IP信息:
> LogParser.exe -i:EVT -o:DATAGRID "SELECT EXTRACT_TOKEN(Message, 13, ' ') as EventType, TimeGenerated as LoginTime, EXTRACT_TOKEN(Strings,5, '|') as Username, EXTRACT_TOKEN(Message, 38, ' ') as Loginip FROM c:\Security.evtx where EventID=4624"

查看系统历史开关机记录:
> LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated, EventID, Message FROM C:\System.evtx whereEventID=12 or EventID=13"

Linux

日志概述

Linux系统中的日志一般存放在目录/var/log/下,具体的日志功能如下:

/var/log/wtmp:记录登录进入、退出、数据交换、关机和重启,即last。
/var/log/cron:记录与定时任务相关的日志信息。可查看任务计划相关的操作日志。
/var/log/messages:记录系统启动后的信息和错误日志。可查看整体系统信息,其中也记录了某个用户切换到root权限的日志。
/var/log/apache2/access.log:记录Apache的访问日志。
/var/log/auth.log:记录系统授权信息,包括用户登录和使用的权限机制等。
/var/log/userlog:记录所有等级用户信息的日志。
/var/log/xferlog(vsftpd.log):记录Linux FTP日志。
/var/log/lastlog:记录登录的用户,可以使用命令lastlog查看。
/var/log/secure:记录大多数应用输入的账号与密码,以及登录成功与否。可查看验证和授权方面的信息。
/var/log/faillog:记录登录系统不成功的账号信息。

使用【ls -alt /var/spool/mail】命令,可查看邮件相关日志记录文件。
使用【cat /var/spool/mail/root】命令,可发现针对80端口的攻击行为(当Web访问异常时,及时向当前系统配置的邮箱地址发送报警邮件):

日志分析

对于Linux系统日志的分析主要使用【grep】、【sed】、【sort】和【awk】等命令。

常用查询日志命令及功能如下:
【tail -n 10 test.log】命令:查询最后10行的日志。
【tail -n +10 test.log】命令:查询10行之后的所有日志。
【head -n 10 test.log】命令:查询头10行的日志。
【head -n -10 test.log】命令:查询除了最后10行的其他所有日志。

在*.log日志文件中统计独立IP地址个数的命令如下:
【awk '{print $1}' test.log | sort | uniq | wc -l】
【awk '{print $1}'/access.log | sort | uniq -c | sort -nr | head -10】

查找指定时间段日志的命令如下:
【sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log】
【grep '2014-12-17 16:17:20' test.log】

定位有多少IP地址在暴力破解主机root账号的命令如下:
【cat /var/log/secure | awk '/Accepted/{print $(NF-3)}'|sort|uniq -c|awk '{print$2"="$1;}'(CentOS)】

查看登录成功的IP地址的命令如下。
【cat /var/log/auth.log |awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print$2"="$1;}')(ubuntu)】

查看登录成功日期、用户名、IP地址的命令如下。
【grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'】

其它日志

还可对Web日志、中间件日志、数据库日志、FTP日志等进行分析。
日志分析的方法一般是结合系统命令及正则表达式,或者利用相关成熟的工具进行分析,分析的目的是提取相关特征规则,对攻击者的行为进行分析。

1)IIS日志的位置

%SystemDrive%\inetpub\logs\LogFiles
%SystemRoot%\System32\LogFiles\W3SVC1
%SystemDrive%\inetpub\logs\LogFiles\W3SVC1
%SystemDrive%\Windows\System32\LogFiles\HTTPERR

2)Apache日志的位置

/var/log/httpd/access.log
/var/log/apache/access.log
/var/log/apache2/access.log
/var/log/httpd-access.log

3)Nginx日志的位置

默认在/usr/local/nginx/logs目录下,access.log代表访问日志,error.log代表错误日志。
若没有在默认路径下,则可以到nginx.conf配置文件中查找。

4)Tomcat日志的位置

默认在TOMCAT_HOME/logs/目录下,
有catalina.out、
catalina.YYYY-MM-DD.log、
localhost.YYYY-MM-DD.log、
localhost_access_log.YYYY-MM-DD.txt、
host-manager.YYYY-MM-DD.log、
manager.YYYY-MM-DD.log等几类日志。

5)Vsftp日志的位置

在默认情况下,Vsftp 不单独记录日志,而是统一存放到/var/log/messages中。
但是可以通过编辑/etc/vsftp/vsftp.conf配置文件来启用单独的日志。
在日志启用后,可以访问vsftpd.log和xferlog。

6)WebLogic日志的位置

在默认情况下,WebLogic有三种日志,分别是access log、server log和domainlog
access log的位置是:$MW_HOME\user_projects\domains\<domain_name>\servers\<server_name>\logs\access.log
server log的位置是:$MW_HOME\user_projects\domains\<domain_name>\servers\<server_name>\logs\<server_name>.log
domain log的位置是:$MW_HOME\user_projects\domains\<domain_name>\servers\<adminserver_name>\logs\<domain_name>.log

7)数据库日志

(1)Oracle数据库查看方法如下。  
使用【select * from v$logfile】命令,可查询日志路径。在默认情况下,日志文件记录在$ORACLE/rdbms/log目录下。
使用【select * from v$sql】命令,可查询之前使用过的SQL。  

(2)MySQL数据库查看方法如下。
使用【show variables like 'log_%'】命令,可查看是否启用日志,如果日志已开启,则默认路径为/var/log/mysql/。
使用【show variables like 'general'】命令,可查看日志位置。  

(3)MsSQL数据库查看方法如下。
一般无法直接查看,需要登录到SQL Server Management Studio,在 "管理—SQL Server日志" 中进行查看。

内存分析

内存的获取

在应急响应中,有时要分析出一些隐藏进程,就要对应急响应服务器进行内存的提取。
内存的获取方法有如下几种:

  1. 基于用户模式程序的内存获取;
  2. 基于内核模式程序的内存获取;
  3. 基于系统崩溃转储的内存获取;
  4. 基于操作系统注入的内存获取;
  5. 基于系统休眠文件的内存获取;
  6. 基于虚拟化快照的内存获取;
  7. 基于系统冷启动的内存获取;
  8. 基于硬件的内存获取。

最常用的内存获取方法介绍:
1)基于内核模式程序的内存获取
一般需要借助相关的工具来完成。常用的提取工具有Dumpit、Redline、RAM Capturer、FTK Imager等。

2)基于系统崩溃转储的内存获取
打开【系统属性】对话框,选择【高级】选项卡,单击【启动和故障恢复】中的【设置】按钮,打开【启动和故障恢复】对话框,选择【核心内存转储】并找到转储文件进行获取。

3)基于虚拟化快照的内存获取
这种获取方法是通过VMware Workstation、ESXI等虚拟化软件实现的。比如VMware Workstation在生成快照时会自动生成虚拟内存文件。

内存的分析

对于内存的分析,一般需要借助相应的工具来进行。

1)Redline
在获取内存文件后,可以使用Redline进行导入分析,其主要收集在主机上运行的有关进程信息、内存中的驱动程序,以及其他数据,如元数据、注册表数据、任务、服务、网络信息和Internet历史记录等,最终生成报告。

2)Volatility
Volatility是一个开源的内存取证工具,可以分析入侵攻击痕迹,包括网络连接、进程、服务、驱动模块、DLL、handles、进程注入、cmd历史命令、IE浏览器历史记录、启动项、用户、shimcache、userassist、部分rootkit隐藏文件、cmdliner等。

常用命令参数:
netscan:可以列出内存镜像中的网络连接的情况,对内存镜像中的网络连接情况进行排查。
psxview:可查看内存镜像中带有隐藏进程的所有进程列表,排查隐藏进程。
malfind:可查找隐藏或注入的代码、DLL。
cmdscan:可提取执行的相关命令记录。
procdump:可提取进程文件。可通过制定进程的PID的值来对特定的进程文件进行提取,如使用【procdump -p 2476 -D】命令提取进程文件。
          可以分析内存中提取出的文件,从而判别文件是否有恶意行为。最简单的方法是把提取出的文件上传到virustotal平台并进行扫描。
posted @ 2022-06-14 17:46  Zerimon  阅读(941)  评论(0编辑  收藏  举报