Прочитано:
3 971
“Логи в системе Windows7/Windows Server 2008 R2 Std хранятся по адресу c:windowssystem32winevtlogs”
Сейчас я покажу, как их очистить с помощью командной строки (cmd.exe) с использованием wmic.
Заходим в систему (dc1.polygon.local) с правами Администратора (ekzorchik) и запускаем командную строку (cmd.exe) в Административном окружении.
(,так делается в Windows 7 && Windows Server 2008/R2)
Пример синтаксиса:
"Wmic nteventlog where filename=”<имя_журнала>” call ClearEventlog"
Предлагаю Вам ознакомиться с примерами очистки логов в системе:
Очищаем лог Application:
C:Windowssystem32>wmic nteventlog where filename="Application" call ClearEventlog
Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi
nevt\Logs\Application.evtx»)->ClearEventlog()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
При очистке лога его размер будет соответствовать (68KB), см скриншот:
Очищаем лог Security:
C:Windowssystem32>wmic nteventlog where filename="Security" call ClearEventlog
Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi
nevt\Logs\Security.evtx»)->ClearEventlog()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
Очищаем лог System:
C:Windowssystem32>wmic nteventlog where filename="System" call ClearEventlog
Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi
nevt\Logs\System.evtx»)->ClearEventlog()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
Очищаем лог Active Directory Web Services:
C:Windowssystem32>wmic nteventlog where filename="Active Directory Web Services" call ClearEventlog
Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi
nevt\Logs\Active Directory Web Services.evtx»)->ClearEventlog()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
Очищаем лог DFS Replication:
C:Windowssystem32>wmic nteventlog where filename="DFS Replication" call ClearEventlog
Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi
nevt\Logs\DFS Replication.evtx»)->ClearEventlog()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
Очищаем лог DFS Replication:
C:Windowssystem32>wmic nteventlog where filename="Directory Service" call ClearEventlog
Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi
nevt\Logs\Directory Service.evtx»)->ClearEventlog()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
Очищаем лог DNS Server:
C:Windowssystem32>wmic nteventlog where filename="DNS Server" call ClearEventlog
Executing (\DC1ROOTCIMV2:Win32_NTEventlogFile.Name=»C:\Windows\System32\Wi
nevt\Logs\DNS Server.evtx»)->ClearEventlog()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
Вот собственно и всё, может, кому и пригодится. Удачи.
By Mike Cohen
One of the most critical sources of data when responding to an incident on windows systems is the event logs. Windows event logs record security significant events.
However, unlike more traditional Unix syslogs, the Windows Event Log system is more complex and there are a number of potential problems that an investigator can run into.
In this post we explore the windows event log system from the point of view of the investigator. We then see how tools such as Velociraptor can be used to work around its limitations.
Responding to an incident
Consider an incident occurred on one of your systems. You would like to investigate it and so collect all the event log files from C:WindowsSystem32WinEVTLogs*.evtx.
The logs are stored in binary format so you will need to post process the files. Luckily there are a number of tools out there that will do that for you. Here is a typical output from the dumpevtx
tool for a particular event from the Security.evtx log file:
This event looks interesting but it is not quite clear what it is really talking about. We see some potentially useful items like SubjectUserSid and PrivilegeList but we are missing some critical context around this message.
Lets look at the same event with the windows Event Viewer GUI:
This is much better! We now know the message indicates the user was assigned some special privileges.
Where does this message come from and why is it not shown by typical EVTX parsers?
It turns out that the message of the event is not actually stored in the EVTX file at all — it is actually stored in a DLL and it is bound to the event in the log via some complicated algorithm.
Event Messages
Windows event logs do not store the full event message. Instead an Event Provider registers a message DLL that contains the full message. The event itself simply stores the index of the message in the Message Table as the Event ID. Note that event IDs are just a number into an event table and are commonly reused by different providers. It is the unique combination of channel, provider and Event ID that identifies the message (so for example searching for Event Id 1000 yields many different unrelated messages because many providers reuse that event ID).
The figure below illustrates how the Windows Event Viewer is able to print the proper Event Message:
How the Windows Event Viewer displays event log messages
When a user selects an event in the Event Viewer, the application reads the Provider, EventID and EventData fields from the event itself — in the above example, the Provider was Microsoft-Windows-Security-Auditing, EventID was 4672 and the EventData has items such as SubjectUserSid etc.
Next the event viewer consults the registry at the key HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogSecurityMicrosoft-Windows-Security-Auditing and reads the value EventMessageFile.
That value is the location of a dll which contains the messages for
this provider. On my system, the DLL is located at
%SystemRoot%\system32\adtschema.dll
(Note that many DLLs use
localizations and so the dll could be located in MUI files).
The DLL has a resource section with a MESSAGE_TABLE type. The event viewer then uses this to extract the message which looks like:
Special privileges assigned to new logon.%n%nSubject:%n%tSecurity ID:%t%t%1%n%tAccount Name:%t%t%2%n%tAccount Domain:%t%t%3%n%tLogon ID:%t%t%4%n%nPrivileges:%t%t%5
The event viewer then interpolates the EventData items into the message by their position — for example %1 is replaced with SubjectUserSid etc. Additionally %t is a tab and %n is a new line.
What could go wrong?
The previous section examined how event logs are actually stored on the system. In practice there are a number of pitfalls with this scheme:
- If an EVTX file is taken from one system to another, the relevant DLL may not be present. This is more common with bespoke software that is not commonly used. In this case the investigator has no idea what the message the event is trying to convey.
- If software is uninstalled from the system, the message DLL may be removed. This makes it hard to view events in the event log from the time it was installed (in a sense information is wiped from the event log).
In both of these cases, the investigator will need to figure out the correct event message independently. Luckily in the age of the internet there are many web sites that catalog some of the common event ids and what they mean:
But it is simply not practical to search every event id. For less commonly used providers the event ids may not be indexed on the web at all. In this case the investigator is left with no idea what a specific event entry means and might miss some critical evidence
Velociraptor’s parse_evtx() VQL plugin
In the latest Velociraptor release (0.3.6), the parse_evtx() plugin is now including the event messages directly in the VQL output. This automatically enriches the event log data collected by the Velociraptor host visibility tool.
Velociraptor can interpolate and attach the event message to every log message it relays
In the above we see the result of the simple VQL query:
SELECT * FROM parse_evtx(filename='c:/Windows/System32/Winevt/logs/Security.evtx')
You can see an additional field now, called Message containing the event message with the Event Data interpolated into it. This provides a lot of context around what the event is supposed to do.
What about existing EVTX files?
In the last section we saw how Velociraptor can enrich event logs as it is forwarding them to the server but what if we have just the evtx files — possibly we just acquired the files using bulk upload artifacts such as the Windows.KapeFiles.Targets artifact?
In that case our analysis machine may not actually have the correct message dlls installed and Velociraptor may fail to retrieve the event messages.
We need a way to maintain a library of event id’s for different providers and the messages they represent. This way we can instantly look up the correct message on demand — without needing to have DLLs installed.
Velocidex, the company behind Velociraptor is an innovative software company crafting many free and open source digital forensics tools. In fact Velociraptor’s EVTX parsing is implemented by the Velocidex/evtx project on GitHub. You should check it out!
The project releases a stand along command line tool for parsing and examining windows event log format. In this post, I would like to demonstrate the latest “extract” feature:
The extract command walks all providers in the registry, gathers their message DLLs and parses the message table resource for each. Then, all the messages are stored in a sqlite database. Sqlite being the de facto standard for portable databases can be easily consumed by other tools written in many languages. The total size of the database is modest (I have extracted all event log messages on Windows 2019 server to about 23MB SQLite file).
Now we can easily use the database to resolve our provider and event id to a message:
Alternatively we can simply use SQLite directly to query the database
$ sqlite3 mydb.sqlite
SQLite version 3.24.0 2018-06-04 19:24:41
Enter ".help" for usage hints.
sqlite> **SELECT message FROM providers join messages on providers.id = messages.provider_id where providers.name = 'Microsoft-Windows-Security-Auditing' and messages.event_id = 4672;**
_Special privileges assigned to new logon.%n%nSubject:%n%tSecurity ID:%t%t%1%n%tAccount Name:%t%t%2%n%tAccount Domain:%t%t%3%n%tLogon ID:%t%t%4%n%nPrivileges:%t%t%5_
Enriching old event log files
We have shown how dumpevtx
can use our sqlite database to retrieve
the messages for each event id individually but this leaves us to
interpolate the full data by hand — no fun indeed!
You can also use dumpevtx
to export the events into JSON, and
automatically resolve event IDs with the sqlite database too by
providing the database with the --messagedb
flag.
F:\>dumpevtx.exe parse --messagedb mydb.sqlite c:\Windows\System32\winevt\Logs\Security.evtx
Parsing the EVTX file with the assistance of the event id database. The message interpolates the Event Data into it.
Conclusions
The Windows Event Log system is fairly complex — it is not enough to just copy out the *.evtx files because the information content of the log is spread throughout the filesystem in DLLs and registry keys. For many event types there is enough context in the EventData or UserData fields of the event log but in many cases, without the actual message corresponding to the event ID we lose critical meaning.
It is essential therefore to include the original message for each
event log. We have shown how Velociraptor is able to include this
critical information automatically. We also present the dumpevtx
project which allows collecting messages in a database so events can
be matched up quickly and easily with their correct messages without
requiring the original program that generated the message to be
installed on the analyst system.
Аудит журнала безопасности помог моему коллеге контролировать практически любые действия сотрудников, которые имеют хоть какой-то доступ к серверам или ActiveDirectory.
В топике будет много кода, который, надеюсь, будет вам полезен.
Первым делом необходимо было определить список событий, которые необходимо было отслеживать. Чтобы уменьшить количество текста, я создала процедуру, которая по ID события выдает ее описание:
Function DefineReason ($Id){
switch ($Id){
4741{ Return "Создана учетна запись компьютера"}
4742{ Return "Изменена учетна запись компьютера" }
4743{ Return "Удалена учетная запись компьютера"}
4727{ Return "Создана глобальная группа с включенной безопасностью"}
4728{ Return "Добавлен пользователь к глобальной группе с включенной безопасностью"}
4729{ Return "Удален пользователь из глобальной группы с включенной безопасностью"}
4730{ Return "Удалена глобальная группа с включенной безопасностью"}
4731{ Return "Создана локальная группа с включенной безопасностью"}
4732{ Return "Добавлен пользователь в локальную группу с включенной безопасностью"}
4733{ Return "Удален пользователь из локальной группы с включенной безопасностью"}
4734{ Return "Удалена локальная группа с включенной безопасностью"}
4735{ Return "Изменена локальная группа с включенной безопасностью"}
4737{ Return "Изменена глобальная группа с включенной безопасностью"}
4743{ Return "Удалена учетная запись компьютера"}
4754{ Return "Создана универсальная группа с включенной безопасностью" }
4755{ Return "Изменена универсальная группа с включенной безопасностью"}
4756{ Return "Добавлен пользователь к универсальной группе с включенной безопасностью"}
4757{ Return "Удален пользователь из универсальной группы с включенной безопасностью"}
4758{ Return "Удалена универсальная группа с включенной безопасностью"}
4764{ Return "Изменен тип группы"}
4720{ Return "Создана учетна запись"}
4722{ Return "Включена учетна запись"}
4724{ Return "Сброс пароля пользователя"}
4725{ Return "Учетна запись пользователя отключена"}
4726{ Return "Учетна запись пользователя удалена"}
4738{ Return "Изменена учетна запись"}
4740{ Return "Учетна запись пользователя заблокирована"}
4767{ Return "Учетна запись пользователя разблокирована"}
4780{ Return "Список управления Доступом был установлен на учетные записи, которые являются членами группы администраторов"}
4781{ Return "Было изменено имя учетной записи"}
4794{ Return "Была предпринята попытка задать режим восстановления служб каталогов"}
5376{ Return "Диспетчер учетных данных: учетные данные были сохранены"}
5377{ Return "Диспетчер учетных данных: учетные данные были востановлены из резервной копии"}
4825{ Return "Запрeщен доступ к удаленному рабочемо столу, не входит в группу RDP"}
1102{ Return "Удален журнал Security"}
}
}
Затем понадобилось описать события, которые отслеживаются по маске доступа:
# Функция определения описания события по маске доступа
Function DefineReasonByAccessMask ($AccessMask){
switch($AccessMask){
"0xc0000064" { Return "Имя пользователя не существует" }
"0xc000006A" { Return "Верное имя, но не правильный пароль"}
"0xc0000234" { Return "Пользователь заблокирован" }
"0xc0000072" { Return "Учетка деактивирована"}
"0xc0000006F" { Return "Вход вне рабочее время"}
"0xc00000070" { Return "Ограничение локальной станции"}
"0xc00000193" { Return "Срок действия учетной записи истек"}
"0xc00000071" { Return "Срок действия пароля Истек"}
"0xc00000224" { Return "Необходимо сменить пароль при следующем входе"}
"0xc000015b" { Return "Пользователю запрещен вход на этой машине"}
"0xc000006d" { Return "Неверный пароль"}
}
}
Теперь мы знаем, за чем хотим следить. Следующий шаг при разработке скрипта по аудиту — это получение журнала безопасности в формате XML, так как если событий много, то построчная обработка занимает достаточно большое количество времени.
Чтобы получить события из журнала можно использовать одну из команд, в каждой из которых есть свои преимущества и недостатки:
1. Get-LogEvent security
Преимущества:
— быстрый доступ к свойствам события;
— не нужна предварительная обработка для доступа к свойствам события.
Недостатки:
— доступ только с системному журналу безопасности, который хранится по пути: Windows/System32/winevt/security.evtx;
— долгая обработка содержимого тега . Обработка происходит путем построчной сепарации с ликвидацией спецсимволов.
2. Get-WinEvent –path “D:/”
Преимущества:
— быстрая обработка журнала;
— доступ к любому журналу. Главное прописать полный путь.
Недостатки:
— для обработки полученного журнала требуется предварительная обработка.
Try {
$Events = Get-WinEvent -FilterHashTable $MyFilter
} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events)
{
Try{
$EventXML = [xml]$Raw_Event.ToXML()
} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
Следующий шаг после того как мы получили доступ к журналу, это вытягивать из журнала требуемые события и принимать по ним соответствующие решения. В большинстве случаев – это отправка информационного сообщения на почту или логирование в отдельный файл.
Задать параметры, по которым будем вытягивать информацию, возможно, используя интерфейсное решения. Диалоговое окно с вводом параметров.
1. Первый параметр предполагает, что журналы периодически экспортируются в определенный каталог, который и следует задать. Если журнал один, то задается стандартный каталог для хранения журналов: «C:WindowsSystem32winevtLogs».
2. Второй параметр определяет сервер, по которому будет искаться логи. Если сервер один, то ставим «*».
3. Третий параметр предельно понятен: * — ищем события за весь период, если задана дата, например, 30.11.2015, то ищем за эту дату. Поиск за период осуществляется вводом начальной и конечной даты через тире (01.11.2015-30.11.2015).
4. Указываем путь для сохранения результата работы, например, «D:log.log». Ниже приведен код, позволяющий построить интерфейс для скрипта:
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Ввод исходных данных"
$objForm.Size = New-Object System.Drawing.Size(300,450)
$objForm.StartPosition = "CenterScreen"
# Events path
$objLabel1 = New-Object System.Windows.Forms.Label
$objLabel1.Location = New-Object System.Drawing.Size(10,20)
$objLabel1.Size = New-Object System.Drawing.Size(280,40)
$objLabel1.Text = "Введите полный путь к журналам в формате`nD:/.../.../ :"
$objForm.Controls.Add($objLabel1)
$objTextBox1 = New-Object System.Windows.Forms.TextBox
$objTextBox1.Location = New-Object System.Drawing.Size(10,60)
$objTextBox1.Size = New-Object System.Drawing.Size(280,20)
$objForm.Controls.Add($objTextBox1)
#Find Server mode
$objLabel2 = New-Object System.Windows.Forms.Label
$objLabel2.Location = New-Object System.Drawing.Size(10,90)
$objLabel2.Size = New-Object System.Drawing.Size(280,30)
$objLabel2.Text = "1. * - по всем серверам.`n2. Укажите Сервер."
$objForm.Controls.Add($objLabel2)
$objTextBox2 = New-Object System.Windows.Forms.TextBox
$objTextBox2.Location = New-Object System.Drawing.Size(10,120)
$objTextBox2.Size = New-Object System.Drawing.Size(280,30)
$objForm.Controls.Add($objTextBox2)
#Type Events Mode
$objLabel3 = New-Object System.Windows.Forms.Label
$objLabel3.Location = New-Object System.Drawing.Size(10,150)
$objLabel3.Size = New-Object System.Drawing.Size(280,45)
$objLabel3.Text = "1. * - по всем событиям.`n2. Укажите событие.`n3. Перечислите через запятую события"
$objForm.Controls.Add($objLabel3)
$objTextBox3 = New-Object System.Windows.Forms.TextBox
$objTextBox3.Location = New-Object System.Drawing.Size(10,195)
$objTextBox3.Size = New-Object System.Drawing.Size(280,30)
$objForm.Controls.Add($objTextBox3)
#Date Events mode
$objLabel4 = New-Object System.Windows.Forms.Label
$objLabel4.Location = New-Object System.Drawing.Size(10,225)
$objLabel4.Size = New-Object System.Drawing.Size(280,60)
$objLabel4.Text = "1. * - за весь период.`n2. Укажите дату в формате ДД.ММ.ГГГГ.`n3. Укажите интервал в формате ДД.ММ.ГГГГ-ДД.ММ.ГГГГ"
$objForm.Controls.Add($objLabel4)
$objTextBox4 = New-Object System.Windows.Forms.TextBox
$objTextBox4.Location = New-Object System.Drawing.Size(10,285)
$objTextBox4.Size = New-Object System.Drawing.Size(280,30)
$objForm.Controls.Add($objTextBox4)
#Save Result
$objLabel5 = New-Object System.Windows.Forms.Label
$objLabel5.Location = New-Object System.Drawing.Size(10,315)
$objLabel5.Size = New-Object System.Drawing.Size(280,30)
$objLabel5.Text = "Путь для сохранения результата поиска"
$objForm.Controls.Add($objLabel5)
$objTextBox5 = New-Object System.Windows.Forms.TextBox
$objTextBox5.Location = New-Object System.Drawing.Size(10,345)
$objTextBox5.Size = New-Object System.Drawing.Size(280,30)
$objForm.Controls.Add($objTextBox5)
# Кнопки ОК и Отмена. Обработчки добавлен только на нажатие кнопки ОК.
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(75,380)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($OKButton)
$OKButton.DialogResult=[System.Windows.Forms.DialogResult]::OK
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(150,380)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
$dialogResult = $objForm.ShowDialog()
# Описание интерфейса закончено
Получаем введенные данные:
# Определяем входящие параметры
if ($dialogResult -eq "OK"){
$Log_Path = $objTextBox1.Text
$FindServerMode = $objTextBox2.Text
$TypeEventsMode = $objTextBox3.Text
$DateEventsmode = $objTextBox4.Text
$SaveResult = $objTextBox5.Text
}
Если в поле дата есть символ «-«, значит введен интервал, если этот символ введен ошибочно — ваши проблемы. Проводим сепарацию по символу «-«, определяем начальную и конечную дату диапазона.
if ($DateEventsmode -match "-"){
$x = $DateEventsmode.split("-")
$StartDate = $x[0]
$EndDate = $x[1]
$StartDate = [DateTime]::parse($StartDate)
$StartDate
$EndDate = [DateTime]::parse($EndDate)
$EndDate
}
Если во введенном поле нет ни «-«, ни «*», то значит введена конкретная дата.
if ($DateEventsmode -notmatch "-" -and $DateEventsmode -ne "*"){
$StartDate1 = [DateTime]::parse($DateEventsmode)
}
1. Поиск по всем серверам, по всем событиям, за весь период:
if ($FindServerMode -eq "*" -and $DateEventsmode -eq "*" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 1"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -recurse| Where {$_.Extension -eq ".evtx"} | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$MyFilter = @{Path=($Log).FullName}
$i=0
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
$i++
}
}
}
2. Поиск по всем серверам, по фильтру событий, за весь период:
if ($FindServerMode -eq "*" -and $DateEventsmode -eq "*" -and $TypeEventsMode -ne "*" -and $Log_Path -ne ""){
Write-host "вошли в 2"
$ALL_LOGS = Get-ChildItem -Path $Log_Path | Where {$_.Extension -eq ".evtx"} | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
$LogFile+= "EventID: " + $Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
3. Поиск по всем серверам, по всем событиям, за диапазон:
if ($FindServerMode -eq "*" -and $DateEventsmode -match "-" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 3"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" } | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$StartDate
$EndDate
$MyFilter = @{Path=($Log).FullName}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
$Event.TimeCreated
if ($Event.TimeCreated -gt $StartDate -and $Event.TimeCreated -lt $EndDate){
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
}
4. Поиск по всем серверам, по всем событиям, за определенную дату:
if ($FindServerMode -eq "*" -and $DateEventsmode -notmatch "-" -and $DateEventsmode -ne "*" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 5"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne "null" } | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$Log.LastWriteTime
$StartDate
$EndDate
$MyFilter = @{Path=($Log).FullName}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
}
5. Поиск по всем серверам, по фильтру событий, за определенный период:
if ($FindServerMode -eq "*" -and $DateEventsmode -match "-" -and $DateEventsmode -ne "*" -and $TypeEventsMode -ne "*" -and $Log_Path -ne ""){
Write-host "вошли в 4"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne ""} | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$Log.LastWriteTime
$StartDate
$EndDate
$MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
}
6. Поиск по всем серверам, по фильтру событий, за определенную дату:
if ($FindServerMode -eq "*" -and $TypeEventsMode -ne "*" -and $DateEventsmode -notmatch "-" -and $DateEventsmode -ne "*" -and $Log_Path -ne "") {
Write-host "вошли в 6"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne "" } | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$Log.LastWriteTime
$StartDate
$EndDate
$MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
}
7. Поиск на определенном, сервере поиск по всем событиям, за весь период:
if ($FindServerMode -ne "*" -and $DateEventsmode -eq "*" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 7"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $_.FullName -match $FindServerMode} | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$MyFilter = @{Path=($Log).FullName}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
8. Поиск на определенном сервере, по фильтру событий, за весь период:
if ($FindServerMode -ne "*" -and $DateEventsmode -eq "*" -and $TypeEventsMode -ne "*" -and $Log_Path -ne ""){
Write-host "вошли в 8"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $_.FullName -match $FindServerMode} | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
$LogFile+= "EventID: " + $Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
9. Поиск на конкретном сервере, по всем событиям, за период:
if ($FindServerMode -ne "*"-and $DateEventsmode -match "-" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 9"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $_.FullName -match $FindServerMode -and $StartDate -ne "null" -and $EndDate -ne "null"} | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$Log.LastWriteTime
$StartDate
$EndDate
$MyFilter = @{Path=($Log).FullName}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
if ($Event.TimeCreated -gt $StartDate -and $Event.TimeCreated -lt $EndDate){
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
}
10. Поиск на конкретном сервере, по фильтру событий, за период:
if ($FindServerMode -ne "*" -and $DateEventsmode -match "-" -and $DateEventsmode -ne "*" -and $TypeEventsMode -ne "*" -and $Log_Path -ne ""){
Write-host "вошли в 10"
$ALL_LOGS = Get-ChildItem -Path $Log_Path | Where {$_.Extension -eq ".evtx" -and $_.FullName -match $FindServerMode -and $StartDate -ne "null" -and $EndDate -ne "null"} | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$Log.LastWriteTime
$StartDate
$EndDate
$MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
if ($Event.TimeCreated -gt $StartDate -and $Event.TimeCreated -lt $EndDate){
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
}
11. Поиск по конкретному серверу, по всем событиям, за определенную дату:
if ($FindServerMode -ne "*" -and $DateEventsmode -notmatch "-" -and $DateEventsmode -ne "*" -and $TypeEventsMode -eq "*" -and $Log_Path -ne ""){
Write-host "вошли в 11"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne "null" } | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$Log.LastWriteTime
$StartDate
$EndDate
$MyFilter = @{Path=($Log).FullName}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.EventData.Data) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
}
12. Поиск по конкретному серверу, по фильтру событий, за определенную дату:
if ($FindServerMode -ne "*" -and $TypeEventsMode -ne "*" -and $DateEventsmode -notmatch "-" -and $DateEventsmode -ne "*" -and $Log_Path -ne ""){
Write-host "вошли в 12"
$ALL_LOGS = Get-ChildItem -Path $Log_Path -Recurse| Where {$_.Extension -eq ".evtx" -and $StartDate1 -ne "null" } | Sort LastWriteTime
$ALL_LOGS
foreach ($Log in $ALL_LOGS){
$LogFile = "Audit EventLog Security" +"`n"
($Log).FullName
$Log.LastWriteTime
$StartDate
$EndDate
$MyFilter = @{Path=($Log).FullName;ID=$TypeEventsMode}
Try {$Events = Get-WinEvent -FilterHashTable $MyFilter} Catch {"No events were found in $Log"; Continue}
ForEach ($Raw_Event in $Events){
Try{$EventXML = [xml]$Raw_Event.ToXML()} Catch {Write-Host "Unable to convert an event to XML"}
$Event = @{}
ForEach ($object in $EventXML.Event.Message) {
$Event.Add($object.name,$object.'#text')
}
$Event.Add("ID",$Raw_Event.ID)
$Event.Add("TimeCreated",$Raw_Event.TimeCreated)
$Event
if ($Event.TimeCreated.Day -eq $StartDate1.Day -and $Event.TimeCreated.Month -eq $StartDate1.Month -and $Event.TimeCreated.Year -eq $StartDate1.Year){
$LogFile+= "EventID: " + $Raw_Event.ID +"`n"
$LogFile+= "Target User Name: " + $Event.TargetUserName +"`n"
$LogFile+= "Target Domain Name: " + $Event.TargetDomainName +"`n"
$LogFile+= "Status: " + $Event.Status +"`n"
$LogFile+= "TimeGenerated: " + $Event.TimeCreated +"`n"
$LogFile+= "Workstation Name: " + $Event.WorkstationName +"`n"
$LogFile+= "IpAddress: " + $Event.IpAddress +"`n"
$LogFile+= "Computer: " + [xml]$Raw_Event.ToXML().Event.System.Computer +"`n"
$Reason = DefineReason -Id $Raw_Event.ID
$AccessM = DefineReasonByAccessMask -AccessMask $Event.Status
$LogFile+= "Reason(RU): " + $Reason + " "+ $AccessM +"`n"
$LogFile+= "Reason(SYS): " + $Event.Message +"`n"
$LogFile+= "----------------------------------------------------------------`n"
}
}
}
}
В конце месяца (период индивидуально задается администраторами) журнал безопасности архивируется на сервер-хранилище, с указанием имени сервера и даты архивации.
После того как мы описали все варианты поиска событий. Полученный результат нам необходимо сохранить в файл, путь к которому прописал пользователь в последнем поле. Если путь задан, то результат сохраняется в файл. После отработки скрипта файл автоматически запускается. Если путь для сохранения результата не задан, то лог будет сохранен в рабочем каталоге под именем «log.log».
if ($SaveResult -ne ""){
$LogFile | Out-File $SaveResult -Encoding utf8
Invoke-Item $SaveResult
$Event2= @{}
$Event = @{}
$Log_Path=""
}
else{
$LogFile | Out-File ".log.log" -Encoding utf8
Write-Host $LogFile
$Event2= @{}
$Event = @{}
$Log_Path=""
}
Спасибо за внимание.
Во время написания скрипта очень полезной оказалась статья «PowerShell и аудит безопасности», спасибо автору.
- Remove From My Forums
Event Log — List of evtx files — content meanning
-
Question
-
Hello team,
I would like to know, what can I find in files placed into C:WindowsSystem32winevtLogs .
The list is below.
I know that :
— Application.evtx contains application events.
— System.evtx contans system events.
/../ But what about:
— Microsoft-Windows-Dhcp-Client%4Admin.evtx ?? Or another from list ?
Is there any knowledgebase?
I am interested in Windows 7, 8, 8.1 and 10 (the most) version.
Directory of C:WindowsSystem32winevtLogs
19.05.2016 12:52 <DIR> .
19.05.2016 12:52 <DIR> ..
07.07.2016 13:57 1 048 576 AirSpaceChannel.etl
07.07.2016 11:09 13 701 120 Application.evtx
19.05.2016 12:26 4 096 DebugChannel.etl
11.04.2016 16:19 69 632 HardwareEvents.evtx
11.04.2016 16:19 69 632 Internet Explorer.evtx
07.07.2016 11:39 69 632 isaAgentLog.evtx
11.04.2016 16:19 69 632 Key Management Service.evtx
07.07.2016 19:52 1 052 672 Microsoft-Client-Licensing-Platform%4Admin.evtx
07.07.2016 11:07 4 096 Microsoft-RMS-MSIPC%4Debug.etl
07.07.2016 11:09 1 052 672 Microsoft-Windows-AAD%4Operational.evtx
12.04.2016 10:06 69 632 Microsoft-Windows-All-User-Install-Agent%4Admin.evtx
17.05.2016 11:57 69 632 Microsoft-Windows-AllJoyn%4Operational.evtx
17.05.2016 11:57 69 632 Microsoft-Windows-AppHost%4Admin.evtx/…/
07.07.2016 11:09 9 506 816 Security.evtx
26.06.2016 11:18 69 632 Setup.evtx
17.05.2016 11:57 69 632 SMSApi.evtx
10.07.2016 23:56 6 361 088 System.evtx
04.07.2016 12:12 2 166 784 Windows PowerShell.evtx
291 File(s) 162 209 792 bytes
2 Dir(s) 213 417 062 400 bytes free
Answers
-
Hi,
Windows Logs
The Windows Logs category includes the logs that were available on previous versions of Windows: the Application, Security, and System logs. It also includes two new logs: the Setup log and the
ForwardedEvents log. Windows logs are intended to store events from legacy applications and events that apply to the entire system.Application log
The Application log contains events logged by applications or programs. For example, a database program might record a file error in the application log. Program developers decide which events
to log.Security log
The Security log contains events such as valid and invalid logon attempts, as well as events related to resource use, such as creating, opening, or deleting files or other objects. Administrators
can specify what events are recorded in the security log. For example, if you have enabled logon auditing, attempts to log on to the system are recorded in the security log.Setup log
The Setup log contains events related to application setup.
System log
The System log contains events logged by Windows system components. For example, the failure of a driver or other system component to load during startup is recorded in the system log. The event
types logged by system components are predetermined by Windows.ForwardedEvents log
The ForwardedEvents log is used to store events collected from remote computers. To collect events from remote computers, you must create an event subscription. To learn about event subscriptions,
see Event Subscriptions.Applications and Services Logs
Applications and Services logs are a new category of event logs. These logs store events from a single application or component rather than events that might have system wide impact.
This log was named by the Windows components or services (services.msc)
These logs in Event viewer corresponds evtx file under the system folder as you mentioned.
Please
mark the reply as an answer if you find it is helpful.If you have feedback for TechNet Support, contact
tnmff@microsoft.com-
Edited by
Thursday, July 14, 2016 7:13 AM
-
Proposed as answer by
Kate LiMicrosoft employee
Tuesday, July 19, 2016 7:42 AM -
Marked as answer by
ZigZag3143x
Tuesday, July 19, 2016 10:05 AM
-
Edited by
RDP forensic event logs — RDP в журналах событий ОС Windows 10
(статья в стадии написания не окончена)
Журналы событий обеспечивают контрольный журнал, который записывает пользовательские события и действия на компьютере и являются потенциальным источником доказательств в цифровой криминалистике исследования.
В этой статье мы рассмотрим процесс экспертизы событий event logs в Windows 10 Версия 1809 (Сборка ОС 17763.195), 64 и 32 разрядных операционных систем, относящейся к RDP (Remote Desktop Protocol) – специальный протокол, разработанный компанией Microsoft для удаленного управления ОС Windows (протокол удалённого рабочего стола).
Версии Windows начиная с Vista включают ряд новых событий, которые не регистрируются системами Windows XP. Выпуски Windows Server содержат большее количество и типы событий.
журналы событий Windows получили расширение *.EVTX. Этот новый формат, называемый форматом Windows XML Event Log (EVTX), заменяет формат EVT, используемый в Windows XP. Помимо журналов событий начиная с Vista, существуют журналы приложений и служб, которые записывают события о конкретном компоненте или приложении, а не о системе. В системе Windows 7/2008 можно найти много файлов журнала событий в зависимости от ролей, выполняемых системой. Здесь Вы можете найти журналы событий приложений. Например, если в системе есть Symantec Endpoint, у Вас будет файл «Symantec Endpoint Protection Client.evtx». Различные категории описаны
Ссылка скрыта от гостей
К примеру в Windows XP и Server 2003 было 9 категорий, а начиная с Windows Vista их более 50.
C:Windowssystem32>auditpol /get /category:*
Таким образом, точная идентификация версии операционной системы Windows должна быть очень тщательно продумана при разработке цифрового процесса компьютерно-технической экспертизы, основанного на журналах событий (event logs).
Расположение журналов событий Windows по умолчанию:
Windows 2000/Server2003/Windows XP:
%SystemRoot%System32Config*.evt
Windows Vista/7/Server2008/10/Server2012/Server2016:
%SystemRoot%System32winevtLogs*.evtx
Расположение журналов может быть изменено пользователем, изменением значения ключа реестра «
File
» в «HKEY_LOCAL_MACHINE» на локальном компьютере:
Application Events (События приложения):
КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogApplication
Hardware Events (Аппаратные события):
КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogHardwareEvents
Security Events (События безопасности):
КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogSecurity
System Events (Системные события):
КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogSystem
Когда используется пользовательский путь, ключ создается в месте реестра:
КомпьютерHKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionWINEVTChannels[logname]
(например [logname] это: Microsoft-Windows-TerminalServices-LocalSessionManager/Admin)
Полезные события для криминалистического анализа
Коды входа в систему.
Одно из важных сведений, предоставляемых событием «Успешный/Неудачный вход в систему», является то, как пользователь/процесс пытался войти в систему (Тип входа в систему), но Windows отображает эту информацию в виде числа.
RDP Successful Logon — RDP Успешный вход
Рассмотрим практический пример с ПК physical IP 192.168.10.146 было подключение mstsc.exe к ПК distrusting IP 192.168.10.241 с учетной записью suspect
Осмотр событий ПК к которому мы подключились: host distrusting IP 192.168.10.241
Рассмотрим первое, место расположения Event ID 1149
%SystemRoot%System32WinevtLogsMicrosoft-Windows-TerminalServices-RemoteConnectionManager%4Operational.evtx
это у нас Network Connection
Рассмотрим второе, место расположения Event ID 4624
%SystemRoot%System32WinevtLogsSecurity.evtx
это у нас Authentication
на screen мы видим «Тип входа» выше есть «Список типа входа и их описание», так же видим host и IP
Рассмотрим третье и четвертое, место расположения Event ID 21 и ID 22
%SystemRoot%System32WinevtLogsMicrosoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
это у нас Logon
в данном конкретном примере мы видим что пользователь осуществил вход в систему в 13:07, а наше удаленное подключение было в 17:44, но обратите внимание чуть выше в 17:44 есть код event ID 25
и снова мы наблюдаем IP адрес подключившегося, для сравнения в 17:47 был осуществлен локальный вход в систему, рассмотрим его на screen ниже
Мы явно видим что вход в систему локальный — Адрес сети источника: ЛОКАЛЬНЫЕ
Осмотр событий ПК c которого осуществилось подключение мы подключились c: host physical IP 192.168.10.146
Event ID 5379
%SystemRoot%System32WinevtLogsSecurity.evtx
это у нас запротоколирована по отдельности каждая цифра и символ введенные в GUI mstsc.exe в поле «Компьютер» с 17:43:31 по 17:43:56
В коде события 5379 изменяются значения «TargetName» и «Type»
Попытка входа в систему с использованием явных учетных данных
Event ID 4624
Это событие генерируется при создании сеанса входа (на конечном компьютере). Он генерируется на компьютере, к которому был получен доступ, где был создан сеанс.
Event ID 4672
Это событие генерируется для новых учетных записей, если для нового сеанса входа назначены какие-либо из следующих конфиденциальных привилегий
SeTcbPrivilege — действует как часть операционной системы
SeBackupPrivilege — Резервное копирование файлов и каталогов
SeCreateTokenPrivilege — создает объект токена
SeDebugPrivilege — отладка программ
SeEnableDelegationPrivilege — позволяет доверять учетные записи компьютеров и пользователей для делегирования.
SeAuditPrivilege — Генерация аудита безопасности
SeImpersonatePrivilege — выдавать себя за клиента после аутентификации
SeLoadDriverPrivilege — загрузка и выгрузка драйверов устройств
SeSecurityPrivilege — Управление журналом аудита и безопасности
SeSystemEnvironmentPrivilege — Изменить значения среды прошивки
SeAssignPrimaryTokenPrivilege — заменяет токен уровня процесса
SeRestorePrivilege — Восстановление файлов и каталогов,
SeTakeOwnershipPrivilege — стать владельцем файлов или других объектов.
P:S
(статья в стадии написания не окончена)
Данная статья будет дополняться и получать новые примеры to by continued…
Иногда система Windows отображает сообщения об ошибках поврежденных или отсутствующих файлов Security.evtx. Подобные ситуации могут возникнуть, например, во время процесса установки программного обеспечения. Каждая программа требует определенных ресурсов, библиотек и исходных данных для правильной работы. Поэтому поврежденный или несуществующий файл Security.evtx может повлиять на неудачное выполнение запущенного процесса.
Файл был разработан Microsoft для использования с программным обеспечением Office. Здесь вы найдете подробную информацию о файле и инструкции, как действовать в случае ошибок, связанных с Security.evtx на вашем устройстве. Вы также можете скачать файл Security.evtx, совместимый с устройствами Windows 10, Windows 10, Windows 8.1, Windows 8, Windows 7, Windows 7, Windows Vista, Windows Vista, Windows 8, которые (скорее всего) позволят решить проблему.
Совместим с: Windows 10, Windows 10, Windows 8.1, Windows 8, Windows 7, Windows 7, Windows Vista, Windows Vista, Windows 8
Популярность пользователя
Исправьте ошибки Security.evtx
- 1 Информация о файле Security.evtx
- 2 Ошибки, связанные с файлом Security.evtx
- 3 Как исправить ошибки, связанные с Security.evtx?
- 3.1 Сканирование на наличие вредоносных программ
- 3.2 Обновление системы и драйверов
- 3.3 Инструмент проверки системных файлов
- 3.4 Восстановление системы
- 4 Скачать Security.evtx
- 4.1 Список версий файла Security.evtx
Информация о файле
Основная информация | |
---|---|
Имя файла | Security.evtx |
Расширение файла | EVTX |
Тип | System |
Описание | Windows 7 Event Log |
Программного обеспечения | |
---|---|
программа | Office 2010 |
Программного обеспечения | Office |
автор | Microsoft |
Версия программного обеспечения | 2010 |
подробности | |
---|---|
Размер файла | 1118208 |
Самый старый файл | 2017-04-24 |
Последний файл | 2017-05-10 |
Наиболее распространенные проблемы с файлом Security.evtx
Существует несколько типов ошибок, связанных с файлом Security.evtx. Файл Security.evtx может находиться в неправильном каталоге файлов на вашем устройстве, может отсутствовать в системе или может быть заражен вредоносным программным обеспечением и, следовательно, работать неправильно. Ниже приведен список наиболее распространенных сообщений об ошибках, связанных с файлом Security.evtx. Если вы найдете один из перечисленных ниже (или похожих), рассмотрите следующие предложения.
- Security.evtx поврежден
- Security.evtx не может быть расположен
- Ошибка выполнения — Security.evtx
- Ошибка файла Security.evtx
- Файл Security.evtx не может быть загружен. Модуль не найден
- невозможно зарегистрировать файл Security.evtx
- Файл Security.evtx не может быть загружен
- Файл Security.evtx не существует
Security.evtx
Не удалось запустить приложение, так как отсутствует файл Security.evtx. Переустановите приложение, чтобы решить проблему.
OK
Проблемы, связанные с Security.evtx, могут решаться различными способами. Некоторые методы предназначены только для опытных пользователей. Если вы не уверены в своих силах, мы советуем обратиться к специалисту. К исправлению ошибок в файле Security.evtx следует подходить с особой осторожностью, поскольку любые ошибки могут привести к нестабильной или некорректно работающей системе. Если у вас есть необходимые навыки, пожалуйста, продолжайте.
Как исправить ошибки Security.evtx всего за несколько шагов?
Ошибки файла Security.evtx могут быть вызваны различными причинами, поэтому полезно попытаться исправить их различными способами.
Шаг 1.. Сканирование компьютера на наличие вредоносных программ.
Файлы Windows обычно подвергаются атаке со стороны вредоносного программного обеспечения, которое не позволяет им работать должным образом. Первым шагом в решении проблем с файлом Security.evtx или любыми другими системными файлами Windows должно быть сканирование системы на наличие вредоносных программ с использованием антивирусного инструмента.
Если по какой-либо причине в вашей системе еще не установлено антивирусное программное обеспечение, вы должны сделать это немедленно. Незащищенная система не только является источником ошибок в файлах, но, что более важно, делает вашу систему уязвимой для многих опасностей. Если вы не знаете, какой антивирусный инструмент выбрать, обратитесь к этой статье Википедии — сравнение антивирусного программного обеспечения.
Шаг 2.. Обновите систему и драйверы.
Установка соответствующих исправлений и обновлений Microsoft Windows может решить ваши проблемы, связанные с файлом Security.evtx. Используйте специальный инструмент Windows для выполнения обновления.
- Откройте меню «Пуск» в Windows.
- Введите «Центр обновления Windows» в поле поиска.
- Выберите подходящую программу (название может отличаться в зависимости от версии вашей системы)
- Проверьте, обновлена ли ваша система. Если в списке есть непримененные обновления, немедленно установите их.
- После завершения обновления перезагрузите компьютер, чтобы завершить процесс.
Помимо обновления системы рекомендуется установить последние версии драйверов устройств, так как драйверы могут влиять на правильную работу Security.evtx или других системных файлов. Для этого перейдите на веб-сайт производителя вашего компьютера или устройства, где вы найдете информацию о последних обновлениях драйверов.
Шаг 3.. Используйте средство проверки системных файлов (SFC).
Проверка системных файлов — это инструмент Microsoft Windows. Как следует из названия, инструмент используется для идентификации и адресации ошибок, связанных с системным файлом, в том числе связанных с файлом Security.evtx. После обнаружения ошибки, связанной с файлом %fileextension%, программа пытается автоматически заменить файл Security.evtx на исправно работающую версию. Чтобы использовать инструмент:
- Откройте меню «Пуск» в Windows.
- Введите «cmd» в поле поиска
- Найдите результат «Командная строка» — пока не запускайте его:
- Нажмите правую кнопку мыши и выберите «Запуск от имени администратора»
- Введите «sfc / scannow» в командной строке, чтобы запустить программу, и следуйте инструкциям.
Шаг 4. Восстановление системы Windows.
Другой подход заключается в восстановлении системы до предыдущего состояния до того, как произошла ошибка файла Security.evtx. Чтобы восстановить вашу систему, следуйте инструкциям ниже
- Откройте меню «Пуск» в Windows.
- Введите «Восстановление системы» в поле поиска.
- Запустите средство восстановления системы — его имя может отличаться в зависимости от версии системы.
- Приложение проведет вас через весь процесс — внимательно прочитайте сообщения
- После завершения процесса перезагрузите компьютер.
Если все вышеупомянутые методы завершились неудачно и проблема с файлом Security.evtx не была решена, перейдите к следующему шагу. Помните, что следующие шаги предназначены только для опытных пользователей
Загрузите и замените файл Security.evtx
Последнее решение — вручную загрузить и заменить файл Security.evtx в соответствующей папке на диске. Выберите версию файла, совместимую с вашей операционной системой, и нажмите кнопку «Скачать». Затем перейдите в папку «Загруженные» вашего веб-браузера и скопируйте загруженный файл Security.evtx.
Перейдите в папку, в которой должен находиться файл, и вставьте загруженный файл. Ниже приведен список путей к каталогу файлов Security.evtx.
- Windows 10: C:WindowsSystem32winevtLogs
- Windows 10: C:WindowsSystem32winevtLogs
- Windows 8.1: C:WindowsSystem32winevtLogs
- Windows 8: 1: C:WindowsSystem32winevtLogs
- Windows 7: —
- Windows 7: —
- Windows Vista: —
- Windows Vista: —
- Windows 8: —
Если действия не помогли решить проблему с файлом Security.evtx, обратитесь к профессионалу. Существует вероятность того, что ошибка (и) может быть связана с устройством и, следовательно, должна быть устранена на аппаратном уровне. Может потребоваться новая установка операционной системы — неправильный процесс установки системы может привести к потере данных.
Список версий файлов
Имя файла
Security.evtx
система
Windows 10
Размер файла
1118208 bytes
Дата
2017-05-10
Подробности файла | ||
---|---|---|
MD5 | 15b401fa1b78df8dd292af8c2565a98f | |
SHA1 | 63d9f9e38b030b0b00250a5a78106a835145bcb1 | |
SHA256 | 1bcadd3184daedcc4b2ff0849806a4442ec96f2971bd5a170cda15ad46e77605 | |
CRC32 | d026513d | |
Пример расположения файла | C:WindowsSystem32winevtLogs |
Имя файла
Security.evtx
система
Windows 10
Размер файла
1118208 bytes
Дата
2017-04-24
Подробности файла | ||
---|---|---|
MD5 | 4a180ae7f0a95bd5067431347341eeb2 | |
SHA1 | 0c8fc788e068a887e2c29c94590bc70840f5ab78 | |
SHA256 | 72ffe7a0a7780a419df8fd53acb93ec096e7d432efa542729068aa995477ea26 | |
CRC32 | 9e0c799b | |
Пример расположения файла | C:WindowsSystem32winevtLogs |
Имя файла
Security.evtx
система
Windows 8.1
Размер файла
1118208 bytes
Дата
2017-04-24
Подробности файла | ||
---|---|---|
MD5 | 3d5615a40659294dc4855b14d815c510 | |
SHA1 | c299bdd77f4b8108c754d0a09e264b216277ebe7 | |
SHA256 | f33f297196c65849eaee2365da74ae3988d4d3144633b638fb38d41d7042bc54 | |
CRC32 | 6b1c7355 | |
Пример расположения файла | C:WindowsSystem32winevtLogs |
Имя файла
Security.evtx
система
Windows 8
Размер файла
1118208 bytes
Дата
2017-04-24
Подробности файла | ||
---|---|---|
MD5 | 56e4dc75c5e84d73589eef8695817487 | |
SHA1 | 652d05b8a19f526e69192ce9ed1f9a13cf66668b | |
SHA256 | 7bf052ca83ec9150e0cac90d115b2d35c603eddd020ca6c52ea9e434add0bb19 | |
CRC32 | 6cb8d359 | |
Пример расположения файла | 1: C:WindowsSystem32winevtLogs |
Имя файла
Security.evtx
система
Windows 7
Размер файла
1118208 bytes
Дата
2017-05-10
Подробности файла | ||
---|---|---|
MD5 | 6770058e5529a568ac0717d4102a83fc | |
SHA1 | 293f2e20ce5ec2e52c4c8951c3cf6f0117c27e9d | |
SHA256 | 4e03207bfd13737812f851f60ad6576e2368c288bbcf3856a57c3d3596dab8ad | |
CRC32 | 354ea571 | |
Пример расположения файла | — |
Имя файла
Security.evtx
система
Windows 7
Размер файла
1118208 bytes
Дата
-0001-11-30
Подробности файла | ||
---|---|---|
MD5 | d332d46c158db5573649060e6919b9c7 | |
SHA1 | 2380dbc05f3bfd826b9f228dadd49be3bfd54608 | |
SHA256 | 9b2ced0556f86ae8c79aac285e71b986438bc76a6654cb4239794f350e4a7608 | |
CRC32 | f6e5c173 | |
Пример расположения файла | — |
Имя файла
Security.evtx
система
Windows Vista
Размер файла
1118208 bytes
Дата
2017-05-10
Подробности файла | ||
---|---|---|
MD5 | a89566676f587ca974df2c48e2eb520d | |
SHA1 | dafc15e830787f40c128270d25f87c12887fcbf2 | |
SHA256 | 3b0477861d8da2cb90dc0a7996e6a7fe01aa2eacaf03db5a7930a3408c7ab22f | |
CRC32 | 0ba539ac | |
Пример расположения файла | — |
Имя файла
Security.evtx
система
Windows Vista
Размер файла
69632 bytes
Дата
2017-04-24
Подробности файла | ||
---|---|---|
MD5 | 760b287b286b188bfb5e8f9158594545 | |
SHA1 | faf574f7e85b7e7d7429f803060ee1b03221cf28 | |
SHA256 | 3c8386c1f368437b55463e184537193e44b20057d5c665bb14de03e8dad8cb6f | |
CRC32 | 35e38a79 | |
Пример расположения файла | — |
Имя файла
Security.evtx
система
Windows 8
Размер файла
1118208 bytes
Дата
2017-05-10
Подробности файла | ||
---|---|---|
MD5 | 15b401fa1b78df8dd292af8c2565a98f | |
SHA1 | 63d9f9e38b030b0b00250a5a78106a835145bcb1 | |
SHA256 | 1bcadd3184daedcc4b2ff0849806a4442ec96f2971bd5a170cda15ad46e77605 | |
CRC32 | d026513d | |
Пример расположения файла | — |
В журналах событий Windows хранится полезная информация, которая нужна при анализе состояния служб и приложений в Windows, отладки ошибок и аварийный ситуаций, аудите различных событий безопасности. По умолчанию для журналов Event Viewer в Windows заданы максимальные размеры, при достижении которых новые события начинают перезаписывать более старые. Если на вход Event Viewer попадает слишком большое количество событий, может случится, что в журнал помещаются события лишь за последние несколько часов, что может быть не достаточно.
Чтобы предотвратить перезапись старых событий и всегда иметь под рукой события за достаточно большой промежуток времени, вы можете увеличить максимальный размер журналов Event Viewer.
Содержание:
- Получить информацию о журналах событий Windows с помощью PowerShell
- Изменить размер журнала событий из консоли Event Viewer
- Увеличить размер журнала событий Windows через GPO
Получить информацию о журналах событий Windows с помощью PowerShell
Файлы журналы событий Windows хранятся в каталог
%SystemRoot%System32WinevtLogs
в виде файлов с расширением .EVTX. Обратите внимание, что для каждого журнала используется собственный файл. Соответственно, вы можете управлять размерами только того лога Windows, который вам нужен и оставить остальные значения по-умолчанию.
Текущие лимиты на все включенные журналы событий в Windows можно вывести с помощью PowerShell:
Get-Eventlog -List
Вы можно вывести размер определенного лога с помощью командлета Get-WinEvent. Например, получим текущий и максимальный размер журнала Security:
Get-WinEvent -ListLog Security| Select MaximumSizeInBytes, FileSize, IsLogFull, OldestRecordNumber, IsEnabled, LogMode
Суммарный размер паки с файлами журналов событий можно получить с помощью PowerShell:
«{0:N2} MB» -f ((gci c:windowsSystem32WinevtLogs| measure Length -s).sum / 1Mb)
Чтобы увеличить максимальный размер лога, можно использовать утилиту wevtutul (новый размер задается в Кб):
wevtutil sl "Application" /ms:200000
Или с помощью PowerShell:
Limit-Eventlog -Logname Application -MaximumSize 200MB -OverflowAction OverwriteOlder
Изменить размер журнала событий из консоли Event Viewer
Проще всего увеличить максимальный размер журнала прямо из консоли Event Viewer.
- Откройте
eventvwr.msc
; - Найдите в консоли свойства нужного журнала и откройте его свойства (например, Security);
- Задайте ограничение в разделе Maximum log size (KB) и сохраните изменения;
- Здесь же можно изменить поведение при достижение максимального размера:
Owerwrite events as needed (oldest events first) – этот режим исопльзуется по умолчанию. Новые события просто перезаписывают более старые.
Archive the log when full, do not owerwrite events – текущий журнал событий при заполнении архивируется в папке System32WinevtLogs и новые события записываются в новый evtx файл. Архивные файлы событий можно открыть через меню Open Saved Log в Event Viewer.
Do not owerwrite events (Clear log manually) – события никогда не перезатираются. Для записи новых событий нужно очистить журнал.
Увеличить размер журнала событий Windows через GPO
Чтобы централизованно управлять размерами журналов событий на компьютерах или серверах в домене Active Directory, можно использовать групповые политики.
- Запустите консоль Group Policy Management (
gpmc.msc
), создайте новую GPO и назначьте на OU с компьютерами или серверами, для которых вы хотите изменить настройки Event Viewer (или назначьте GPO на корень домена); - Перейдите в раздел GPO Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Event Log Service. Как вы видите, в этом ветке есть подразделы для управления базовыми журналами Windows:
Application Security Setup System
- Чтобы увеличить максимальный размер любого из журналов, откройте параметр Specify the maximum log file size (KB), включите его и задайте нужный вам размер;
- Обновите настройки политики на клиентах и проверьте, что в свойствах журнала теперь указан новый размер, который вы не можете изменить. При попытке задать другой размер появится ошибка:
Event Viewer
The Maximum Log Size specified is not valid. It is too large or too small. The Maximum Log Size will be set to the following: 61440 KB
Обратите внимание, что в описанном выше разделе GPO отсутствуют настройки для других журналов из раздела Applications and Services Logs -> Microsoft.Если вам нужно увеличить размер любого другого журнала событий (кроме стандартного), это можно сделать через реестр. Настройки журналов событий Windows хранятся в разделе реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLog<log_name>. Размер журнала задается с помощью параметра MaxSize (тип REG_DWORD). Вы можете распространить нужное вам значение параметра реестра MaxSize на компьютеры домена с помощью Group Policy Preferences.
Подробнее о настройке ключей и параметров реестра через GPO здесь.
В этом примере мы увеличим размер журнала Directory Service на контроллерах домена. Настройки этого лога хранятся в ветке HKLMSYSTEMCurrentControlSetServicesEventLogDirectory Service.
- Откройте GPO и перейдите в раздел Computer Configuration -> Preferences -> Windows Settings -> Registry;
- Выберите New -> Registry Item;
- Создайте новый параметр со следующими настройками:
Hive: HKEY_LOCAL_MACHINE Key path: SYSTEMCurrentControlSetServicesEventLogDirectory Service Value name: MaxSize Value type: REG_DWORD Value data: 52428800 (значение задается в байтах. В нашем примере это 50 Мб)
- Проверьте, что после обновления GPO на DC увеличится максимальный размер журнала.
Например, если вам нужно хранить историю RDP подключений к RDS хосту за продолжительное время, нужно увеличить размер лога Terminal-Services-RemoteConnectionManager.
За счет увеличения размеров журналов событий Windows вы можете получить различную информацию за более длительный промежуток времени. Например, из журналов событий можно получить историю перезагрузок Windows, понять кто удалил файл в сетевой папке или кто изменил NTFS права доступа.