書名: 網絡安全應急響應技術實戰指南作者名: 奇安信安服團隊本章字數: 3964字更新時間: 2021-01-05 18:11:29
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日志”中進行查看。