2.5 日志分析
1.Windows系统
1)日志概述
在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 Server 2008及以上版本系统中:
系统日志的位置为%SystemRoot%\System32\Winevt\Logs\System.evtx;
安全性日志的位置为%SystemRoot%\System32\Winevt\Logs\Security.evtx;
应用程序日志的位置为%SystemRoot%\System32\Winevt\Logs\Application.evtx。
(1)系统日志。
系统日志主要是指Windows系统中的各个组件在运行中产生的各种事件。这些事件一般可以分为:系统中各种驱动程序在运行中出现的重大问题、操作系统的多种组件在运行中出现的重大问题及应用软件在运行中出现的重大问题等。这些重大问题主要包括重要数据的丢失、错误,以及系统产生的崩溃行为等。事件ID为8033的系统日志详情如图2.5.1所示。
图2.5.1 事件ID为8033的系统日志详情
(2)安全性日志。
安全性日志与系统日志不同,安全性日志主要记录了各种与安全相关的事件。构成该日志的内容主要包括:各种登录与退出系统的成功或不成功的信息;对系统中各种重要资源进行的各种操作,如对系统文件进行的创建、删除、更改等操作。事件ID为513的安全性日志详情如图2.5.2所示。(注意:由于系统版本不同,部分“安全性”日志也可写为“安全”日志。)
图2.5.2 事件ID为513的安全性日志详情
(3)应用程序日志。
应用程序日志主要记录各种应用程序所产生的各类事件。例如,系统中SQL Server数据库程序在受到暴力破解攻击时,日志中会有相关记录,该记录中包含与对应事件相关的详细信息。事件ID为18456的应用程序日志详情如图2.5.3所示。
除了上述日志,Windows系统还有其他的日志,在进行应急响应和溯源时也可能用到。
在Windows 2000专业版/Windows XP/Windows Server 2003系统中,只有应用程序、安全性及系统三类日志,如图2.5.4所示。
在Windows 7/Windows 8/Windows 10/Windows Server 2008/Windows Server 2012等系统中进行应急响应时,除了会用到应用程序、安全性及系统三类日志,还会用到其他日志,如Dhcp、Bits-Client等,这些日志存储在“%SystemRoot%\ System32\Winevt\Logs”目录下,如图2.5.5所示。
图2.5.3 事件ID为18456的应用程序日志详情
图2.5.4 应用程序、安全性及系统三类日志
图2.5.5 其他日志
还可以在【运行】对话框中输入【eventvwr】命令,打开【事件查看器】窗口,查看相关的日志,如图2.5.6所示。
图2.5.6 【事件查看器】窗口
在应急响应中还经常使用PowerShell日志,图2.5.7是典型的PowerShell日志详细情况。
图2.5.7 典型的PowerShell日志详细情况
2)日志常用事件ID
Windows系统中的每个事件都有其相应的事件ID,表2.5.1是应急响应中常用的事件ID,其中旧版本指Windows 2000 专业版/Windows XP/Windows Server 2003,新版本指Windows Vista/Windows 7/Windows 8/Windows 10/Windows Server 2008等。
表2.5.1 应急响应中常用的事件ID
成功/失败登录事件提供的有用信息之一是用户/进程尝试登录(登录类型),Windows系统将此信息显示为数字,表2.5.2是数字及其对应说明。
表2.5.2 数字及其对应说明
表2.5.3是登录相关日志事件ID对应的描述。
表2.5.3 登录相关日志事件ID对应的描述
表2.5.4是常用启动事件相关日志事件ID对应的描述。
表2.5.4 常用启动事件相关日志事件ID对应的描述
表2.5.5是日志被清除相关日志事件ID对应的描述。
表2.5.5 日志被清除相关日志事件ID对应的描述
3)日志分析
日志分析就是在众多的日志中找出自己需要的日志,一般Windows系统中日志的分析主要有以下几种方法。
(1)通过内置的日志筛选器进行分析。
使用日志筛选器可以对记录时间、事件级别、任务类别、关键字等信息进行筛选,如图2.5.8所示。
图2.5.8 日志筛选器
(2)通过PowerShell对日志进行分析。
在使用PowerShell进行日志分析时,需要有管理员权限才可以对日志进行操作。
通过PowerShell进行查询最常用的两个命令是【Get-EventLog】和【Get-WinEvent】,两者的区别是【Get-EventLog】只获取传统的事件日志,而【Get-WinEvent】是从传统的事件日志(如系统日志和应用程序日志)和新Windows事件日志技术生成的事件日志中获取事件,其还会获取Windows事件跟踪(ETW)生成的日志文件中的事件。注意,【Get-WinEvent】需要Windows Vista、Windows Server 2008或更高版本的Windows系统,还需要Microsoft .NET Framework 3.5及以上的版本。总体来说,【Get-WinEvent】功能更强大,但是对系统和.NET的版本有更多要求。
以下列举部分实例,读者可以根据语法及相关帮助文档编写更多功能。
使用【Get-EventLog Security-InstanceId 4625】命令,可获取安全性日志下事件ID为4625(失败登录)的所有日志信息,如图2.5.9所示。
注意,使用【Get-WinEvent】和【Get-EventLog】命令的查询语句是不同的。使用【Get-WinEvent-FilterHashtable @{LogName='Security';ID='4625'}】命令,也可获取安全性日志下事件ID为4625的所有日志信息,如图2.5.10所示。
图2.5.9 日志筛选
图2.5.10 日志筛选
通过设置起始时间和终止时间变量,可查询指定时间内的事件。先设置起始时间变量StartTime和终止时间变量EndTime,再使用【Get-WinEvent】命令,可查询这段时间内的系统日志情况,执行结果如图2.5.11所示。
图2.5.11 执行结果
通过逻辑连接符可对多种指定日志ID进行联合查询。例如,使用【Get-WinEvent-LogName system|Where-Object {$_.ID-eq "12"-or $_.ID-eq "13"}】命令,可对Windows启动和关闭日志进行查询,如图2.5.12所示。
图2.5.12 联合查询
(3)通过相关的日志工具进行分析查询。以下列举其中几个常用工具。
FullEventLogView:FullEventLogView是一个轻量级的日志检索工具,其是绿色版、免安装的,检索速度比Windows系统自带的检索工具要快,展示效果更好,如图2.5.13所示。
图2.5.13 FullEventLogView工具
Event Log Explorer:Event Log Explorer是一个检测系统安全的软件,可查看、监视和分析事件记录,包括安全性、系统、应用程序和其Windows系统事件记录,如图2.5.14所示。
图2.5.14 Event Log Explorer工具
Log Parser:Log Parser是微软公司推出的日志分析工具,其功能强大,使用简单,可以分析基于文本的日志文件、XML文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory等。其可以像使用 SQL 语句一样查询分析数据,甚至可以把分析结果以各种图表的形式展现出来。
查看登录成功的所有事件:使用【LogParser.exe-i:EVT-o:DATAGRID "SELECT * FROM C:\Security.evtx where EventID=4624"】命令,可查看事件ID为4624,即登录成功的所有事件,如图2.5.15所示。
图2.5.15 使用Log Parser工具查看登录成功的所有事件
指定登录时间范围的事件:使用【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"】命令,可查看从2018年1月1日23时59分59秒到2019年6月1日23时59分59秒,事件ID为4625,即登录失败的所有事件,如图2.5.16所示。
图2.5.16 使用Log Parser工具查看指定登录时间范围的事件
提取登录成功用户的用户名和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"】命令,可查看事件ID为4624(即登录成功的用户)的用户名和IP信息,如图2.5.17所示。
图2.5.17 使用Log Parser工具提取登录成功用户的用户名和IP地址
查看系统历史开关机记录:使用【LogParser.exe-i:EVT-o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM C:\System.evtx where EventID=12 or EventID=13"】命令,可查看系统历史开关机记录,如图2.5.18所示。
图2.5.18 使用Log Parser工具查看系统历史开关机记录
2.Linux系统
1)日志概述
Linux系统中的日志一般存放在目录“/var/log/”下,具体的日志功能如下。
/var/log/wtmp:记录登录进入、退出、数据交换、关机和重启,即last。
/var/log/cron:记录与定时任务相关的日志信息。
/var/log/messages:记录系统启动后的信息和错误日志。
/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:记录登录系统不成功的账号信息。
通过查看相关的日志文件可以获取相关的日志信息。以下列举常用的日志使用方法。
使用【cat/var/log/cron】命令,可查看任务计划相关的操作日志,如图2.5.19所示。
图2.5.19 查看任务计划相关的操作日志
使用【cat/var/log/messages】命令,可查看整体系统信息,其中也记录了某个用户切换到root权限的日志,如图2.5.20所示。
使用【cat/var/log/secure】命令,可查看验证和授权方面的信息,如sshd会将所有信息(包括失败登录)记录在这里,如图2.5.21所示。
图2.5.20 查看整体系统信息
图2.5.21 查看验证和授权方面的信息
使用【ls-alt/var/spool/mail】命令,可查看邮件相关日志记录文件,如图2.5.22所示。
图2.5.22 查看邮件相关日志记录文件
使用【cat/var/spool/mail/root】命令,可发现针对80端口的攻击行为(当Web访问异常时,及时向当前系统配置的邮箱地址发送报警邮件),如图2.5.23所示。
图2.5.23 报警邮件日志查看
2)日志分析
对于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}'】
3.其他日志
除了可对Windows和Linux系统日志进行分析,还可对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和domain log。
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日志”中进行查看。