1. 程式人生 > >Windows日誌淺析

Windows日誌淺析

從這篇文章開始本人開始結合Windows產品日誌分析大神(RANDY FRANKLINSMITH)的電子書,以及自己的實驗對Windows作業系統的日誌開始分析。也是對自己的一種激勵,至少希望自己能堅持下去這個分析。並且希望自己可以通過這個過程對於安全事件管理有更多的認識和理解,好了,廢話不多說了,迴歸正題。

    Windows日誌從Windows2000版本後共包括9種審計策略,WindowsNT只有7種(此次沒驗證,懶得裝NT虛擬機器了)。共分為:帳戶登入、登入、物件訪問、目錄服務訪問、程序追蹤、特權使用、帳戶管理、策略變更、系統事件9大類。

    其中帳戶登入其實是對登入使用者的認證事件,據大神Randy自己說,稱其為“認證事件“更為合適。登入事件記錄的是使用者登入到哪臺PC的事件。物件訪問記錄的是使用者對Windows物件的訪問事件,這裡物件包括登錄檔、服務、印表機、檔案/資料夾等。目錄服務訪問就是對AD中所有物件的訪問事件。程序追蹤則為主機執行的程式事件,不管是由使用者自己執行還是系統自動執行的。特權使用指使用者使用分配的特權的事件,這裡特權指在本地安全策略中分配給使用者的許可權。帳戶管理則包含了本地帳戶、使用者組、DC中域使用者、域使用者組等物件的管理、密碼設定等事件。策略變更指本地安全策略或DC上信任關係變化的事件。系統事件則涉及到一些安全事件的雜項,如系統的啟動和關閉、系統事件修改等等。

    9類審計策略大概的介紹就到這裡,在隨後的文章中會分別具體地說明,自己也儘可能在Windows2003作業系統進行驗證。

在正式對每類事件進行分析前,先大概對windows的日誌格式進行一個簡單的介紹。

每個windows日誌都由兩部分組成:頭欄位和描述欄位。

頭欄位是相對內容和格式都固定的部分,包括的資訊有:事件的id、日期和時間、事件的結果(成功還是失敗)、事件的來源和類別。由於安全日誌所有的來源都記為“source”,因此意義不大。而類別就是(一)中提到的9種類別。這裡的使用者欄位用處也不是很大,因為很多事件簡單地記為“STSTEM”為使用者,所以真正要看是什麼使用者觸發了該條日誌還是要看描述欄位裡面是否有相應的實際使用者(這些在隨後的日誌分析中會涉及到)。

因此很多時候我們需要詳細分析描述欄位中的資訊,這部分出現的資訊也會隨具體的事件而不同,但是其形式都是為一系列組合資訊,每個組合資訊是一個內容固定的描述資訊(類似佔位符的作用),以及後面的動態資訊。舉個例子來說:ID680事件的描述欄位包括:“Logonaccount: Administrator”。這裡“Logonaccount:”是固定的前置欄位佔位符,而後面的“Administrator”則是真實的例項名稱,會根據實際的情況而變化。

我們可以開啟本地的一條日誌,點選描寫欄位部分的藍色連結,聯網的情況下可以檢視到微軟的支援中心中對該條日誌的詳細說明,其中的Message欄位通常為以下的內容,很容易看到ID為567的這條日誌的描述欄位包括7個欄位資訊,說明其中有7個變數存在,其內容由實際情況生成。

Object Access Attempt:
Object Server: %1
Handle ID: %2
Object Type: %3
Process ID: %4
Image File Name: %5
Accesses: %6
Access Mask: %7

因此從上面可以看到很多關鍵的資訊其實都隱藏在描述欄位資訊中,需要進行仔細地分析!

最後再簡單地說下windows自身儲存策略的設定:根據Randy大神的經驗,最大不要超過199M,200M的話可能會對windows的效能和穩定性有一定影響(這點不好進行實驗驗證)。此外不論配置最大空間為多少,遲早會有滿的時候。所以Randy建議選擇“不改寫事件(手動地清除)”選項,此時一旦日誌大小達到上限,windows會停止記錄事件。當選擇“改寫久於X天的事件“時,如果事件的產生速度很快,在未過期前就達到了上限,windows同樣是停止記錄日誌直到某些日誌過期。以下是網上對於這些儲存設定的說明和建議,所以如何設定也是在安全性、易維護性等方面權衡了。

按需要改寫事件 當日志已滿時繼續寫入新的事件。每個新事件替換日誌中時間最舊的事件。該選項對維護要求低的系統是一個不錯的選擇。
改寫久於 [x]天的事件 保留位於指定改寫事件的天數之前的日誌。預設值為 7天。如果您想每週存檔日誌檔案,該選項是最佳選擇。該策略將丟失重要日誌項的機率降到最小,同時保持日誌的合理大小。
不改寫事件 手動而不是自動清除日誌。只有在您無法承受丟失事件時才選中該選項(例如,特別強調安全性的站點的安全性日誌)。

最後我們還可以把日誌事件另存為本地檔案檢視,其中txt和csv格式可以較為方便地直接檢視,而evt格式需要專門的軟體來檢視,如LogParser。因此在日誌量很多的情況下,還是建議由專門的日誌管理產品來完成此功能。

ok,一些情況就簡單介紹到這裡,下面開始對每類事件進行較為詳細的分析,Let’s go!

ok,從本篇終於要開心對windows日誌進行分析了,首先從最基本的登入活動開始。這也是任何日誌分析最基礎的開始,涉及到對使用者活動的分析,總要從登入開始咯。等等,在開始這激動人心的時刻之前,我們還是想講清楚windows登入活動的一些原理,然後再分析相關的日誌也不遲:)

從windows2000開始,稽核策略選項裡面涉及到登入的有兩項:分別是“稽核帳戶登入事件”和“稽核登入事件”。那麼有些人可能不太明白了,為什麼使用者的登入要有兩類事件來記錄呢?ok,這裡簡單的解釋一下(來自Randy大神,具體有待考證)。

在windows2000之前,例如NT的時候windows系統只稽核登入事件。這樣如果使用域帳戶登入某臺工作站的話,域控伺服器(DC)上是沒有該使用者的登入記錄的,只會記錄在被訪問的工作站上(當然前提是工作站開啟了登入稽核)。因此DC不記錄域使用者的認證活動使得想要對域使用者的登入活動進行監控十分困難,得收集整個網路中所有工作站和伺服器的安全日誌。因此呢,微軟從windows2000開始增加了一個新的特色功能,也就是“稽核帳戶登入事件”。但是這個叫法與原來的“稽核登入事件”很像,容易讓人產生混淆。因此Randy大神認為稱之為“稽核認證事件”更為恰當!也就是說在windows中認證和登入活動是相關但是不同的兩個活動,特別是在它們發生在不同的系統上時表現更為明顯!

因此想要有效地使用這兩個審計策略,需要很好地理解相關的原理,明白在windows系統中認證和登入是如何發生的。另一個容易讓人混淆的是登入使用帳戶的型別,是本地還是域帳戶,因為這會影響到什麼事件記錄在哪些系統上。接下來就對windows帳戶型別簡單介紹下。

windows系統支援兩種帳戶型別:域帳戶(儲存在AD中)和本地帳戶(儲存在本地的SAM檔案中)。這樣的話也很簡單了,使用域帳戶登入的話,由DC來完成對使用者的認證;如果本地帳戶登入的話則由要登入的工作站自己來完成認證。所以需要特別關注使用本地帳戶的登入活動,因為攻擊者通常會使用本地帳戶來進行登入嘗試。

接下來我們看看windows的登入方式都有哪些。

    windows一共支援5種登入會話型別,都分別描述了使用者如何登入系統的方式。本地和域帳戶都支援這5種類型。每種登入型別有一個對應的登入許可權。登入帳戶的型別和登入的方式都會影響到稽核日誌的具體內容和事件ID,每種型別及其許可權如下表所示:

登入型別 登入許可權 典型情況
本地互動式:使用本地的控制檯登入 本地登入 使用域或者本地帳戶登入本地主機
網路方式:從網路上的某個主機訪問windows資源 從網路訪問主機 例如訪問一臺主機的某個共享資料夾
遠端交換式:通過遠端桌面、終端服務或遠端幫助登入某個遠端主機 執行通過終端服務登入 使用本地mstsc客戶端遠端登入某臺主機
批作業:用於作為一個指定的帳戶來執行一個計劃任務 作為批作業登入 指定計劃任務時指定的以某個具體帳戶來執行
服務方式:用於以指定的帳戶來執行某個服務 以服務方式登入 指在指定服務執行時以本地系統帳戶或者是具體某個帳戶執行

當我們嘗試網路登入登入時,比如訪問某臺主機的共享資料夾,工作站預設會再次使用使用者登入時輸入的憑證。但是使用者也可以指定一個不同的本地或者域帳戶,例如對映本地磁碟到某個共享資料夾時。

登入VS認證小結

因此,在windows中登入和認證是關聯但是不同的兩個活動。簡言之登入活動發生在最終被訪問的主機上,認證活動發生在儲存使用者帳戶的主機上。也就是如果使用本地帳戶登入某臺主機,該主機同時“看到”認證和登入活動。如果是使用域帳戶登入,那麼DC可以“看到”認證活動,而被訪問的真實主機只“看到”登入活動。

所以“審計帳戶登入事件”是主要用於DC上的審計策略,但是在成員工作站上也有用,可以辨識對本地帳戶的攻擊。

既然通常DC來完成域帳戶的認證,那麼就會涉及到windows系統支援的2種認證協議:NTLM和Kerberos。

NTLM VSKerberos

當用戶使用域帳戶登入windows2000及之後版本的作業系統時,工作站首先會嘗試通過Kerberos協議聯絡DC。(如果系統沒收到響應的話,會回退使用NTLM)。並且Widows2000及之後的版本使用不同的事件ID記錄NTLM和Kerberos活動,所以比較容易區分。由於Kerberos提供了客戶端和伺服器間的雙向認證(NTLM只支援客戶端向伺服器的認證)。並且NTLM的安全性較Kerberos弱一些,更容易被嗅探資料包進行破解。而且如果外部的攻擊者攻擊某個域的帳戶,通常會看到NTLM認證事件,而不是Kerberos。因為他們不是本域的成員或信任域,登入嘗試會使用NTLM。

NTLM和Kerberos協議的工作機理這裡暫時不詳細說明了,而且由於自己目前對域這一塊不是很熟悉,暫且跳過使用域帳戶登入方式的日誌分析,先從本地使用者方式的認證開始。以後有機會再搭建域的實驗環境,然後進行使用域帳戶的登入活動分析。

ok,終於開始要真槍實幹地分析日誌了,首先我們對“審計帳戶登入事件”下手,也就是使用者的認證事件。這裡暫時只考慮使用本地帳戶進行登入,不包括域使用者。以後搭建起來實驗環境,對域也比較熟悉後再補上這一課。這裡為了排除干擾,每次實驗前均清除日誌,且只開啟要分析類別事件的審計功能。

此次實驗均使用windows2003,其它版本的windows系統事件ID和描述可能會有一些出入。

    前面已經說過了,windows有5種帳戶登入方式,所以我們一個個來看。

1、本地互動式登入,也就是我們每天最常使用的登入方式。如果成功登入的話,會產生ID為680的事件,

2

如上圖所示,我們從中可以獲取到的有用資訊有:認證事件的時間、結果為成功(稽核成功)、登入帳戶為“administrator”、(描述中的部分)、被登入的主機名(WIN2003)。接下來看看登入失敗是什麼記錄,這裡第1次使用不存在的使用者名稱登入、第2次使用正確的使用者名稱但是錯誤密碼。

     21

從日誌中我們可以很遺憾地看到,雖然是登入失敗事件,但是事件ID仍然是680(windows2000失敗事件ID為681,Windows2003把成功和失敗事件都標識為ID680)。但是型別為“稽核失敗”,並且頭欄位中的使用者名稱由原來的“Windows2003\Administrator”變成了“NTAUTHORITY\SYSTEM”。描述資訊中的登入帳戶記錄了嘗試登入使用的真實使用者名稱,錯誤程式碼也會根據認證失敗的原因而變化。據微軟的說明,每種錯誤程式碼對應的原因如下表格:

0xC000006A Anincorrect password was supplied
0xC000006F Theaccount is not allowed to log on at this time
0xC0000064 Theaccount does not exist
0xC0000070 Theaccount is not allowed to log on from this computer
0xC0000071 Thepassword has expired
0xC0000072 Theaccount is disabled

2、使用RDP協議進行遠端登入,這也是日常經常遇到的情況。

首先是成功登入,如下圖所示,從中可以看到ID仍為680,並且與本地登入沒有任何明顯區別。並且描述資訊中的主機名(源工作站)仍為被嘗試登入主機的主機名,而不是源主機名。然後使用不存在的使用者名稱和錯誤密碼分別登入失敗1次,產生的日誌與第1種一樣,所以不再附圖。

2

3、遠端訪問某臺主機的共享資源,如某個共享資料夾。

首先是使用正確的使用者名稱和密碼訪問遠端共享資料夾,如下圖所示。從中可以發現頭欄位和描述欄位中的使用者名稱都為訪問共享資料夾時使用的使用者名稱,並且描述資訊中的源工作站名也為發出訪問共享資料夾請求的主機的真實主機名,與頭欄位中的計算機名欄位的主機名不同

1

這裡說明一下,當訪問某個主機的共享資源時,例如在點選“開始—執行”後輸入“\\192.168.10.1\share”時,Windows預設使用當前登入的憑證去訪問共享資源,如果當前憑證的使用者名稱在被訪問主機上不存在或者密碼不一致時會產生多條“稽核失敗”事件,如下圖所示。並且會在描述欄位中記錄真實的使用者名稱和主機名,同樣會有錯誤程式碼。

2

此外,如果訪問共享資源使用的帳戶名、密碼正確,但是該使用者對指定的共享資料夾沒有訪問許可權時仍然會有ID為680的認證成功事件產生。

4、建立任務計劃,並指定以某個使用者來執行。

首先使用正確的使用者名稱和密碼建立一個任務計劃,在該任務計劃完成後同樣會看到“帳戶登入”成功事件,如下圖所示。

1                  2

從圖中可以看到頭欄位中的使用者名稱和描述欄位中的使用者名稱都是建立任務計劃時指定的有效使用者。

如果建立任務計劃時輸入錯誤密碼,則無法建立任務計劃,並且會有“帳戶登入”失敗日誌生成,如右圖所示,和一般的認證失敗事件沒有區別。但奇怪的是使用無效的使用者名稱建立任務計劃時沒有“帳戶登入”失敗日誌生成。

5、以服務方式執行

啟用某個服務,並指定以某個帳戶執行。這裡同樣先使用正確的使用者名稱和密碼設定服務,然後手工方式啟動服務。可以看到有“帳戶登入”的成功事件,如下圖所示。從圖中可以看到頭欄位中的使用者名稱和描述欄位中的使用者名稱都是開啟服務時指定的特定使用者。這裡說明一下,實驗時以某特定使用者啟動服務但報錯,但是會有成功認證的事件生成。如果指定使用者為系統預設的“NTAUTHORITY\NetworkService”或“NTAUTHORITY\LocalService”來執行,則密碼隨意輸入也可正常啟動服務。且不會有認證事件的日誌生成。

1

如果指定以某特定帳戶執行時輸入的無效密碼,則在服務啟動時會報錯,且會有“帳戶登入”的失敗事件生成,如下圖所示:

2

從圖中可看到頭欄位的使用者是“SYSTEM”,描述資訊中的登入帳戶欄位才是真正的使用者名稱,並且錯誤程式碼指明失敗原因是密碼錯誤。

   最後我們總結一下,共有5種方式登入Windows主機進行身份認證,分別是:本地交換、遠端訪問、資源共享訪問、任務計劃和服務執行。並且從這些日誌中我們也可看到有用的資訊並不是很多,所以需要配合“登入/登出“事件來一起分析使用者的登入行為。ok,那麼在下一篇文章我們開始分析“登入/登出“日誌,看看它們能否提供更多的資訊給我們。

上一篇文章簡單分析了使用者登入時的認證事件,接下來我們再來看看和之緊密關聯的登入/登出事件。

總體來看,登入/登出事件對可以很好地追蹤使用者在一臺主機上完整活動過程的起至點,和登入方式無關。此外可以提供一些“帳戶登入”沒有的資訊,例如登入的型別。此外對終端服務的活動專門用兩個事件ID來標識。ok,我們開始分析,同樣從5種類型分別進行分析。

1、本地方式的登入和登出

Randy大神在書中只提到了Windows使用兩個事件ID528和540記錄使用者成功的登入(後者對應網路型別的登入),登出使用ID530。然而事實上同時發生的事件不只限於這些,那麼讓我們來看看使用者簡單的登入和登出活動至少會觸發那些事件。

首先是成功的登入,從日誌分析來看至少會有2個事件發生,分別為ID552和528,以下從左到右分別是各自的截圖。

1   2      

現在來各種進行詳細分析,首先是ID552事件,該事件說明有人使用身份憑據在嘗試登入,並且頭欄位中的使用者名稱為SYSTEM。看看描述資訊中有什麼好東西:

使用明確憑據的登入嘗試:   (說明有人在嘗試登入)
登入的使用者:
     使用者名稱:   WIN2003$    (主機名加了$字尾)
    域:       WORKGROUP   (主機的域名,此例中主機在名稱為“WORKGROUP”的工作組中)
     登入ID:       (0x0,0x3E7)
     登入 GUID:   -
憑據被使用的使用者:
     目標使用者名稱:   Administrator    (登入使用的使用者名稱)
     目標域:   WIN2003          (要登入的主機名)
     目標登入 GUID:-

目標伺服器名稱:   localhost
目標伺服器資訊:    localhost
呼叫方程序 ID:    1612
源網路地址:   127.0.0.1       (從IP地址很容易判斷是本地登入)
源埠:    0

這裡有一點要說明一下,Windows對這條日誌的解釋是“一個已登入的使用者嘗試使用另外一個使用者憑證建立登入會話,例如使用“RUNAS”命令來執行某個可執行檔案”。但事實上第1次使用者成功登入後也會產生這個事件。

接著是ID528事件,此時頭欄位中的使用者名稱也變成真實的使用者名稱,看看描述資訊中有什麼東西:

登入成功:       (說明使用者已成功登入)
    使用者名稱:    Administrator    (登入使用的使用者名稱)
    域:        WIN2003           (被登入主機所屬的域的域名,如果不在域中為主機名)
     登入ID:        (0x0,0x37BF9)    
(此登入ID在計算機重啟前會保持其唯一性,重啟後可能會被再次使用。該ID很重要,因為可以關聯使用者隨後的很多活動如物件訪問!)
    登入型別:    2     (各種型別含義及數字見後面的表格)
    登入程序:     User32 
    身份驗證資料包:     Negotiate
     工作站名:   WIN2003     (記錄發起登入請求的計算機的Netbios名)
     登入 GUID:   -
     呼叫方使用者名稱:   WIN2003$
     呼叫方域:   WORKGROUP
     呼叫方登入ID:    (0x0,0x3E7)   (
注意,此ID和ID552事件描述資訊的登入ID是一樣的)
    呼叫方程序 ID: 1612
     傳遞服務: -
     源網路地址:   127.0.0.1   (同樣從IP地址很容易判斷是本地登入)
     源埠:   0

有意思的事情發生了,ID528事件的呼叫方登入ID和和ID552的登入ID是一樣,那麼我們能不能做個大膽的猜想呢?在本地登入成功前,系統本身先已建立了登入會話,然後此會話再建立真實的使用者會話。呵呵,只是隨便猜猜而已。

登入型別對應含義如下表,上篇文章中常見5種登入方式對應數字分別為2、3、4、5、10。

登入型別ID

登入方式

描述資訊

2

Interactive

A user logged on to this computer at theconsole

3

Network

A user or computer logged on to this computerfrom the network

4

Batch Batch logon type isused by batch servers, where processes might run on behalf of auser without the user's direct intervention

5

Service

A service was startedby the Service Control Manager

7

Unlock

This workstation was unlocked

8

NetworkCleartext

A user logged on to a network and theuser password was passed to the authentication package in itsunhashed (plain text) form. It is possible that the unhashedpassword was passed across the network, for example, when IISperformed basic authentication

9

NewCredentials A caller (process, thread, or program)cloned its current token and specified new credentials for outboundconnections. The new logon session has the same local identity, butit uses different credentials for other network connections.
10 RemoteInteractive A user logged on to this computerremotely using Terminal Services or a Remote Desktopconnection.
11 CachedInteractive A user logged on to this computer withnetwork credentials that were stored locally on the computer. Thedomain controller was not contacted to verify the credentials

此外,如果登入的使用者名稱有某些許可權(通過”本地安全策略“分配給該使用者),在使用者成功登入時還會有ID576事件發生,如下圖所示:

3

描述資訊如下:

指派給新登入的特殊許可權:
     使用者名稱:   Administrator
    域:       WIN2003
     登入ID:       (0x0,0x37BF9)
     特權:   SeSecurityPrivilege
           SeBackupPrivilege
           SeRestorePrivilege
           SeTakeOwnershipPrivilege
           SeDebugPrivilege
           SeSystemEnvironmentPrivilege
           SeLoadDriverPrivilege
           SeImpersonatePrivilege

從描述資訊中我們可以看到名稱為“Administrator”的使用者所擁有的許可權列表。

接下來看看失敗的本地登入,首先是無效使用者名稱、其次是有效使用者名稱但是錯誤密碼。

1    2

從圖中可以看到,登入失敗後會有ID529的事件產生。並且兩者頭欄位的資訊沒有什麼區別,使用者名稱都是“SYSTEM”。那麼看看描述資訊中有什麼資訊和區別。

登入失敗:
    原因:       使用者名稱未知或密碼錯誤
     使用者名稱:  test1 
    域:       WIN2003
     登入型別:   2
     登入程序:   User32 
     身份驗證資料包:   Negotiate
     工作站名稱:   WIN2003
     呼叫方使用者名稱:   WIN2003$
    呼叫方域:    WORKGROUP
     呼叫方登入ID:    (0x0,0x3E7)
     呼叫方程序ID:     1100
    傳遞服務:     -
     源網路地址:   127.0.0.1
     源埠:   0

登入失敗:
    原因:       使用者名稱未知或密碼錯誤
     使用者名稱:   administrator
    域:       WIN2003
     登入型別:   2
     登入程序:   User32 
     身份驗證資料包:   Negotiate
     工作站名稱:   WIN2003
     呼叫方使用者名稱:  WIN2003$
    呼叫方域:    WORKGROUP
     呼叫方登入ID:    (0x0,0x3E7)
     呼叫方程序ID:     1100
    傳遞服務:     -
     源網路地址:   127.0.0.1
     源埠:   0

從描述資訊可以看到兩者沒有什麼區別,唯一不同的是使用者名稱,並且登入失敗原因都一樣。登入型別同樣給出了使用者登入的方式,為本地登入(數字為2)。有意思的是呼叫方使用者名稱也是“主機名+$”的形式。

使用者正常登出登出的話,也不是簡單的一個事件。事實上會有2個事件產生,ID分別為551和538。截圖如下:

1       2

看來微軟在這點做得夠細緻了,先會有ID551事件說明有使用者要求登出,接著ID538事件說明使用者已成功登出。從頭欄位和描述資訊中都可以看到真實的使用者名稱,登入ID,並且ID538事件還包括使用者的登入方式。微軟的官方解釋中有這樣的說明:“ID551事件說明使用者發起登出請求,因此包含使用者的安全資訊和允許使用者訪問物件的主要訪問令牌會從記憶體中擦除。因此在令牌擦除後用戶無法訪問資源如檔案、登錄檔。當登出過程完成後ID538事件產生。如果ID538事件沒有在551事件後出現,一個程式或服務可能沒有正確地管理訪問令牌。儘管使用者無法訪問物件,這個程式或服務可能有快取的訪問令牌並保留訪問物件的能力”。

2、遠端方式的登入和登出

使用mstsc遠端登入某個主機時,使用的帳戶是普通使用者的話(沒有分配該使用者任何許可權)成功的情況下會有ID為552、528的事件產生,沒有ID576事件。

1             2

這2個事件的頭欄位和本地方式基本沒有什麼區別,看看描述資訊有什麼不一樣的地方:

使用明確憑據的登入嘗試:
登入的使用者:
     使用者名稱:   WIN2003$
    域:       WORKGROUP
     登入ID:       (0x0,0x3E7)
     登入 GUID:   -
憑據被使用的使用者:
     目標使用者名稱:   rdp
     目標域:   WIN2003
     目標登入 GUID:-

目標伺服器名稱:   localhost
目標伺服器資訊:    localhost
呼叫方程序 ID:    1984
源網路地址:  192.168.10.2
源埠:   1035

登入成功:
    使用者名稱:     rdp
    域:        WIN2003
     登入ID:        (0x0,0x4C715)
     登入型別:   10
    登入程序:     User32 
    身份驗證資料包:     Negotiate
     工作站名:   WIN2003
     登入 GUID:   -
     呼叫方使用者名稱:   WIN2003$
     呼叫方域:   WORKGROUP
     呼叫方登入ID:    (0x0,0x3E7)
     呼叫方程序 ID: 1984
     傳遞服務: -
     源網路地址:   192.168.10.2
    源埠:  1035

從這裡可以看出至少有3個地方不一樣,首先登入型別的ID為10,說明是遠端互動式登入,其次是源網路地址和源埠。如果有防火牆的日誌的話,可以進行關聯分析。

登入失敗同樣分別使用無效使用者名稱和有效使用者名稱、無效密碼2種方式,結果都是產生ID529事件,與之前也沒有什麼區別。描述資訊如下:

登入失敗:
    原因:       使用者名稱未知或密碼錯誤
     使用者名稱:   rdp
    域:       WIN2003
     登入型別:   10
    登入程序:    User32 
     身份驗證資料包:   Negotiate
     工作站名稱:   WIN2003
     呼叫方使用者名稱:   WIN2003$
     呼叫方域:   WORKGROUP
     呼叫方登入ID:    (0x0,0x3E7)
     呼叫方程序ID:     2640
    傳遞服務:     -
     源網路地址:   192.168.10.2
    源埠:    1040

從資訊中可以看到,唯一不同且有價值的是登入型別的ID、源IP地址和源埠。

使用者登出的話同樣會有ID551和538事件產生,與本地登入一樣(除了登入型別的數值),因此不再附圖說明。但是ID538事件產生時間會比551晚一點,做了幾次實驗有1分30秒、2分多都有,似乎不是固定的值。

   如果使用RDP遠端登入主機後,沒有登出而是直接點×關閉視窗,會產生ID683事件,如果再次使用該使用者和密碼連線時,會產生ID682事件,截圖分別如下:

1     2

從描述資訊中可以很清楚地看到會話中斷和重新連線的事件,此時登入ID都一樣,但是會話名稱已經發生變化。

 另外一種遠端訪問方式為遠端協助,也會產生ID552、528、551和538事件(會伴隨使用者名稱為“ANONYMOUSLOGON”的成對ID540和538事件)。只是其中的真實使用者名稱變成“HelpAssistant_abae4f”,其中的“abae4f”不知道是不是隨機生成,反正我做了2次實驗都是這個。

3、網路訪問的登入和登出

 這裡訪問共享資料夾的情況根據不同的情況會有幾種不同的事件模式產生,分別進行說明。

這裡先假設主機A上C盤目錄下有名為“share”的資料夾,開啟網路共享並且許可權為A主機上的名為“rdp”的使用者。架設B主機上也有名為“Administrator”的管理員和名為“rdp”的使用者。

a、沒有給A主機上的”rdp“使用者賦予任何許可權,設定B主機的rdp使用者和A主機上的密碼一致,以rdp使用者登入B主機,然後以在執行中輸入“\\192.168.10.1\share”的方式訪問A主機的共享資料夾,然後關閉共享資料夾視窗。此時在A主機上會有事件模式為:有使用者名稱為“rdp”的ID為540和538的事件產生(注意:此時登入時沒有ID552事件),如下圖所示:

1     2

這些登入、登出事件的頭欄位中使用者名稱均為rdp,但是計算機名還是被訪問的主機名。現在看看ID540事件的描述資訊:

成功的網路登入:
     使用者名稱:   rdp
    域:       WIN2003
     登入ID:       (0x0,0x75BCF)
     登入型別:   3
     登入過程:   NtLmSsp
     身份驗證資料包:   NTLM
    工作站名:   WIN2K3
     登入GUID:    -
     呼叫方使用者名稱:   -
     呼叫方域:   -
     呼叫方登入ID:    -
     呼叫方程序 ID: -
     傳遞服務: -
     源網路地址:   192.168.10.2
     源埠:   0

從中我們可以發現除了登入型別變為“3”以為,身份驗證資料包也變為“NTLM”,並且工作站的名稱也是發出訪問共享資料夾請求的B主機的真實主機名(這裡讓我很奇怪的是使用RDP方式訪問時工作站名仍為被訪問主機的主機名)。

除了上述2個事件外,在使用者成功登入同時還會有使用者名稱為“ANONYMOUSLOGON”的2個事件,ID也同樣分別為:540和538,並且沒有時間間隔,如下圖所示:

1       2

ID540事件的描述資訊如下。

成功的網路登入:
    使用者名稱:   
    域:       
     登入ID:       (0x0,0x75BE1)
     登入型別:   3
     登入過程:   NtLmSsp
     身份驗證資料包:   NTLM
     工作站名:   WIN2K3
     登入 GUID:   -
     呼叫方使用者名稱:   -
     呼叫方域:   -
     呼叫方登入ID:    -
     呼叫方程序 ID: -
     傳遞服務: -
     源網路地址:   192.168.10.2
     源埠:   0

b、沒有給A主機上的”rdp“使用者賦予任何許可權,設定B主機的rdp使用者和A主機上的密碼一致,以rdp使用者登入B主機,然後以在執行中輸入“\\192.168.10.1”的方式訪問A主機的共享資源。此時在只彈出A主機共享資源視窗的情況下,A主機上會有2組ID540和538事件產生。如果此時雙擊某個共享資料夾,同樣會有2組ID540和538事件產生。中間會有使用者名稱為“ANONYMOUSLOGON”的ID540和538事件。如果A主機共享了多個資料夾,那麼在B主機上A主機在不同的資料夾和A主機共享資源視窗之間來回切換的情況下會有大量的ID540和538事件產生!

c、設定B主機上的rdp使用者密碼與A主機不一樣,然後以使用者rdp登入B主機,然後以“\\192.168.10.1\share”的方式訪問A主機的共享資料夾,此時會彈出視窗讓使用者輸入A主機上可以訪問該資料夾的使用者名稱和密碼。此時A主機上會有很多登入失敗的ID529事件,以及成對出現的ID540和538出現,如下圖所示:

1

此時在視窗輸入正確的使用者名稱和密碼,產生使用者名稱為rdp的ID540事件,同樣關閉共享視窗後會有ID538事件。

如果輸入無效的使用者名稱或密碼,同樣在A機上會產生如上圖所示的大量ID529和成對的ID540、538事件。

最後,如果A主機上的rdp使用者有已分配的特權,那麼成功訪問共享資料夾時同樣會有ID576事件產生。

4、以任務計劃的方式登入

 如果使用正確的使用者名稱和密碼建立任務計劃時,系統會用提供的使用者名稱和密碼進行登入嘗試。因此至少會有ID552、528和538事件產生(即瞬時的登入並登出),並且528和538事件的登入型別為4。如果指定的使用者具有特權還會有ID576事件產生。在該任務計劃執行時也會有一系列事件產生。如果使用無效使用者名稱和密碼建立任務計劃,則會失敗並且產生ID529事件。其描述性資訊如下:

登入失敗:
    原因:       使用者名稱未知或密碼錯誤
     使用者名稱:   Administrator
    域:       WIN2003
     登入型別:   4
     登入程序:   Advapi
     身份驗證資料包:   Negotiate
     工作站名稱:   WIN2003
     呼叫方使用者名稱:   WIN2003$
     呼叫方域:   WORKGROUP
     呼叫方登入ID:    (0x0,0x3E7)
     呼叫方程序ID:     1648
    傳遞服務:     -
     源網路地址:   -
     源埠:   -

5、以服務方式執行

  使用有效的使用者名稱和密碼指定服務並啟動時,也會有ID552、528和538事件(576事件看使用者是否有特權)。主要的區別也是登入型別為5,其它基本一致。下面是ID528事件的描述性資訊:

登入成功:
    使用者名稱:     rdp
    域:        WIN2003
     登入ID:        (0x0,0x4E51C)
    登入型別:    5
    登入程序:     Advapi 
    身份驗證資料包:     Negotiate
     工作站名:   WIN2003
     登入 GUID:   -
     呼叫方使用者名稱:   WIN2003$
     呼叫方域:   WORKGROUP
     呼叫方登入ID:    (0x0,0x3E7)
     呼叫方程序 ID: 1224
     傳遞服務: -
     源網路地址:   -
     源埠:   -

如果使用無效的使用者名稱或密碼指定服務時,在啟動服務時會報錯並且產生ID529事件。

    最後我們總結一下“審計登入”事件:

  • 成功的登入通常會有528事件產生,如果使用者有特權會有576事件產生;如果是訪問網路共享資源的方式沒有552事件,其它4種類型都有。
  • 比“帳戶登入”包含更多的資訊,如源IP、埠、登入型別ID,成功登入使用者是否有對應的特權等等。
  • 通常情況下只需關注登入型別為2、3、10型別的登入失敗事件。
ok,對使用者的認證和登入過程的分析暫以告一段落,現在就開始我們最為關注的部分,使用者登入上計算機上後到底做了什麼操作?從本節開始我們就開始詳細地分析使用者的活動,先從“過程追蹤”開始,因為這類事件可以和使用者的登入活動關聯起來(就是之前我們談到過的登入ID)。過程追蹤還能夠對服務的安裝、移除以及計劃任務的維護進行監控。

首先從程序的追蹤開始,Windows提供了2個事件ID來追蹤一個程序的開啟和結束,分別是592和593。當一個新的程序建立後會有ID592事件產生,當程序退出後會有593事件產生。截圖如下:

1     2

從中我們可以看到是哪個使用者,在什麼時間、執行了什麼程式,該程式的完整路徑名。其中需要我們關注的是登入ID欄位,因為可以和使用者的登入行為進行關聯。同時我們也可以注意到,新建立的程序ID和退出程序ID都為2232,而建立該程序的程序ID為424,當時看了一下工作管理員,為explorer.exe程序。

   接著是服務的安裝和任務計劃的建立。Windows2003使用ID601事件記錄服務安裝的活動,無論其成功還是失敗。可以用於發現被安裝的新服務。但是軟體的安裝並不產生該事件,而且木馬或後門程式也很少以服務方式安裝,因此價值不會很大。其截圖如下:

1 

描述資訊為:

嘗試安裝服務:
     服務名稱:   OpenVPNService
     服務檔名稱:   C:\Program Files\OpenVPN\bin\openvpnserv.exe
     服務型別:   16
     服務啟動型別:   3
     服務帳戶:   LocalSystem
由:
     使用者名稱稱:   Administrator
    域:       WIN2003
     登入ID:       (0x0,0x1CA46)

從描述資訊中可以看到要安裝服務的名稱(可以在命令列使用“sc qurey服務名稱”的方式查詢服務當前的狀態),該服務對應的可執行檔案。

服務型別的表格如下:

服務型別 名稱
0x2 SERVICE_FILE_SYSTEM_DRIVER
0x4 SERVICE_ADAPTER
0x8 SERVICE_RECOGNIZER_DRIVER
0xB SERVICE_DRIVER
0x10 SERVICE_WIN32_OWN_PROCESS
0x20 SERVICE_WIN32_SHARE_PROCESS
0x30 SERVICE_WIN32
0x100 SERVICE_INTERACTIVE_PROCESS
0x110 SERVICE_INTERACTIVE_OWN_PROCESS