Задания для самостоятельной работы
ЛАБОРАТОРНАЯ РАБОТА № 5. ВЗАИМОДЕЙСТВИЕ С ЖУРНАЛАМИ СОБЫТИЙ ОС WINDOWS
Цель работы: изучение методов работы с системными журналами; отслеживание событий записи в системные журналы.
Теоретическое введение
В ОС Windows предусмотрена запись всех важных событий, происходящих в операционной системе, в журналы событий (Event Logs). Просмотреть информацию в журнале событий можно при помощи встраиваемой консоли Event Viewer в Microsoft Management Console (MMC). Как минимум, в системе ведется три отдельных журнала: Application (журнал приложений), Security (журнал безопасности) и System (системный журнал). Окно Event Viewer представлено на рисунке 2.
Рисунок 2 – Окно Event Viewer
Журнал приложений хранит важные события, связанные с конкретным приложением.
Журнал безопасности хранит события, связанные с безопасностью. Например, вход - выход из системы, использование и изменение привилегий пользователей и групп, обращение к ресурсам.
Системный журнал хранит события операционной системы или ее компонентов. Например, неудачи при запуске служб или инициализации драйверов, общесистемные сообщения и прочие сообщения, относящиеся к операционной системе в целом.
Поля в записях журналов событий имеют следующее значение:
· Тип (Type). Поле «Тип» может принимать следующие значения – Уведомление (Information), Предупреждение (Warning) или Ошибка (Error). Уведомление (Information) – успешная операция. Предупреждение (Warning) – проблема, не требующая немедленного решения. Ошибка (Error) – серьезная проблема. В журнале безопасности встречаются еще два типа событий – Аудит успехов (SuccessAudit) и аудит отказов (FailureAudit).
|
|
· Дата (Date). Показывает дату и время, когда произошло событие.
· Источник (Source). Имя программного обеспечения, которое протоколирует событие.
· Категория (Category). Может быть определена для фильтрации событий. Категории определяются источником событий.
· Идентификатор события (Event identifier). Специфицирует определенное сообщение о событии. Значение идентификатора зависит от версии ОС Windows.
В NET предусмотрены классы, при помощи которых можно взаимодействовать с журналами событий программным образом. Данные классы определены в пространстве имен System.Diagnostics и описаны в таблице 5.1.
Таблица 5. 1 – Классы System.Diagnostics, предназначенные для работы с журналами событий
Класс | Назначение |
EventLog | Основной класс для организации взаимодействия с журналами событий Windows. С помощью данного класса можно читать и вносить записи в журнал событий, а также устанавливать приложение в качестве источника событий |
EventLog.EventLogEntryCollection | Коллекция для хранения экземпляров классов EventLogEntry (записей из выбранного журнала) |
EventLogEntry | Отдельная запись в журнале событий |
EventLogInstaller | Инсталлятор для компонента EventLog |
|
|
Экземпляры класса EventLog позволяют создавать новые журналы событий, записывать события в журналы событий, производить очистку журналов событий, считывать записи журнала событий, реагировать на появление в журнале новых записей. Основные свойства и методы класса EventLog приведены в таблице 5.2.
Таблица 5. 2 – Основные свойства и методы класса EventLog
Свойство(метод) | Назначение |
1 | 2 |
Entries | Свойство Entries используется для чтения журналов событий. Entries возвращает коллекцию EventLogEntryCollection, содержащую объекты EventLogEntry, которые хранят информацию о событиях. Нет необходимости вызывать метод Read (). Коллекция наполняется, как только происходит обращение к свойству Entries. |
EnableRaisingEvents | Возвращает или задает значение, определяющее доступен ли конкретный экземпляр класса. |
Log | Свойство Log определяет журнал для чтения или записи событий. |
LogDisplayName | Свойство LogDisplayName доступно только для чтения. Возвращает отображаемое имя журнала EventLog. |
MachineName | Свойство MachineName позволяет получить или установить имя компьютера, на котором работает пользователь. Если это имя не указано, по умолчанию считается, что пользователь работает на локальном компьютере «.» |
Source | Свойство Source позволяет получить или установить имя приложения, которое будет зарегистрировано в журнале, как источник события. |
Clear() | Метод Clear() удаляет все записи из журнала событий. |
Close() | Метод Close() закрывает журнал и освобождает все ресурсы, связанные с чтением информации из данного журнала или записью информации в журнал. |
CreateEventSource() | Метод CreateEventSource() устанавливает приложение как источник события. |
Delete() | Метод Delete() полностью удаляет весь журнал событий. |
DeleteEventSource() | Метод DeleteEventSource() вызывается для того, чтобы избавиться от источника событий. |
EntryWritten | Обработчик событий записи в журнал. |
GetEventLogs() | Метод GetEventLogs() создает массив журналов событий. |
WriteEntry() | Метод WriteEntry() производит вставку записи в журнал событий. |
SourceExists() | Метод SourceExists() проверяет существование источника событий. |
|
|
Примеры работы с журналами событий приведены в подразделе 5.2.
Примеры программирования
|
|
На рисунке 3 представлена форма приложения для работы с журналами.
Рисунок 3 – Окно приложения для работы с журналами событий
Приведено описание используемых в приложении элементов управления в таблице 5.3.
Таблица 5. 3 – Элементы управления приложения для работы с журналами событий
Элемент управления | Класс | Описание |
button1 | Button | Командная кнопка для получения списка журналов событий. |
button2 | Button | Командная кнопка для просмотра выбранного журнала. |
button3 | Button | Командная кнопка для очистки выбранного журнала. |
button4 | Button | Командная кнопка для включения режима мониторинга событий безопасности. |
button5 | Button | Командная кнопка для отключения режима мониторинга событий безопасности. |
button6 | Button | Командная кнопка для включения режима мониторинга системных событий. |
button7 | Button | Командная кнопка для отключения режима мониторинга системных событий. |
logTreeView | TreeView | Дерево для вывода списка доступных журналов |
logDataGridView | DataGridView | Таблица для вывода содержимого выбранного журнала. Состоит из пяти полей: Идентификатор, Тип сообщения , Дата, Компьютер и Сообщение. |
richTextBox1 | RichTextBox | Многострочное окно для вывода результатов мониторинга событий безопасности. |
groupBox1 | GroupBox | Контейнер служит для размещения дерева logTreeView. |
groupBox2 | GroupBox | Контейнер служит для размещения таблицы logDataGridView. |
Последовательность программирования приложения:
1. Для работы с журналами событий необходимо подключить пространство имен System.Diagnostics:
using System.Diagnostic.
2. Объявление глобальных переменных:
public EventLog[] elogs;
public EventLog securitylog, eventLog;
где elogs – массив, содержащий информацию о всех журналах событий в системе;
securitylog – журнал безопасности. Используется для перехвата событий записи в журнал безопасности Security;
eventLog – системный журнал. Используется для перехвата событий записи в системный журнал System.
3. Для события Click кнопки button1 (Получить список журналов) пишем следующий программный код:
//---------------------------------------------
// Получение списка доступных журналов
//---------------------------------------------
private void button1_Click(object sender, EventArgs e)
{
// Очистка дерева logTreeView;
logTreeView.Nodes.Clear();
// Создание дерева журналов
TreeNode InfoNode = new TreeNode();
InfoNode.Text = "Список доступных журналов событий";
// Создание корневого элемента дерева
logTreeView.Nodes.Add(InfoNode);
// Создание массива записей о всех журналах
elogs = EventLog.GetEventLogs();
// Вывод в цикле информации о каждом журнале
foreach (EventLog elog in elogs)
{
logTreeView.Nodes[0].Nodes.Add(elog.Log.ToString() + " (" + elog.LogDisplayName.ToString() + ")");
elog.Close();
}
// Очистка массивазаписей о всех журналах
elogs = null;
}
4. Для события Click кнопки button2 (Просмотр выбранного журнала) пишем следующий программный код:
//---------------------------------------------
// Просмотр выбранного журнала
//---------------------------------------------
private void button2_Click(object sender, EventArgs e)
{
logDataGridView.Rows.Clear();
string tmp = "";
string logType = "";
int k = 0;
// Проверка, выбран ли журнал
if (logTreeView.SelectedNode != null)
{
tmp = logTreeView.SelectedNode.Text;
// Полчить имя выбранного журнала
k = tmp.IndexOf(" (");
if (k != 0) logType = tmp.Substring(0, k);
// Прочитать содержимое выбранного журнала
EventLog ev = new EventLog(logType, System.Environment.MachineName);
int LastLogToShow = ev.Entries.Count;
if (LastLogToShow <= 0)
{
string message = "В журнале: " + logType + " отсутствуют записи";
string caption = "Просмотр журналов событий";
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
// чтение выбранного журнала
groupBox2.Text = "Просмотр журнала " + logType;
int i = 0;
for (i = 0; i < LastLogToShow; i++)
{
EventLogEntry CurrentEntry = ev.Entries[i];
logDataGridView.Rows.Add(CurrentEntry.InstanceId, CurrentEntry.EntryType.ToString(), CurrentEntry.TimeGenerated.ToString(), CurrentEntry.MachineName.ToString(), CurrentEntry.Message);
}
}
ev.Close();
}
else MessageBox.Show("Ни один журнал не выбран", "Просмотр журналов событий", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
5. Для события Click кнопки button3 (Очистить выбранный журнал) пишем следующий программный код:
//---------------------------------------------
// Очистка выбранного журнала
//---------------------------------------------
private void button3_Click(object sender, EventArgs e)
{
logDataGridView.Rows.Clear();
string tmp = "";
string logType = "";
int k = 0;
if (logTreeView.SelectedNode != null)
{
tmp = logTreeView.SelectedNode.Text;
k = tmp.IndexOf(" (");
if (k != 0) logType = tmp.Substring(0, k);
EventLog ev = new EventLog(logType, System.Environment.MachineName);
int LastLogToShow = ev.Entries.Count;
if (LastLogToShow <= 0)
{
string message = "В журнале: " + logType + " записи уже отсутствуют";
string caption = "Очистка журналов событий";
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
ev.Clear();
ev.Close();
}
}
else MessageBox.Show("Ни один журнал не выбран", "Очистка журналов событий", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
6. Для перехвата событий записи в журнал безопасности необходимо создать свой обработчик событий и добавить его к списку обработчиков событий, которые прикреплены к данному объекту (в данном случае журналу безопасности). Новый обработчик событий имеет вид:
//---------------------------------------------
// Перехват записей в журнал безопасности
//---------------------------------------------
protected void OnEntrySecurityWritten(object sender, EntryWrittenEventArgs e)
{
richTextBox1.AppendText("Запись в журнал " + ((EventLog)sender).LogDisplayName + " Время " + e.Entry.TimeWritten + "Позиция " + e.Entry.Index + "\r\n");
}
В данном случае информация о перехваченных событиях будет выводиться вполе richTextBox1.
7. Для события Click кнопки button4 (Мониторинг событий безопасности) пишем следующий программный код:
//---------------------------------------------
// Мониторинг событий безопасности
//---------------------------------------------
private void button4_Click(object sender, EventArgs e)
{
// Создается объект "журнал безопасности"
securitylog = new EventLog("Security", Environment.MachineName);
// К обработчику событий данного журнала
// добавляется новый обработчик //OnEntrySecurityWritten
securitylog.EntryWritten += new EntryWrittenEventHandler(OnEntrySecurityWritten);
// Объявить доступным конкретный экземпляр класса
securitylog.EnableRaisingEvents = true;
}
8. Для события Click кнопки button5 (Отменить мониторинг событий безопасности) пишем следующий программный код:
//---------------------------------------------
// Отмена мониторинга событий безопасности
//---------------------------------------------
private void button5_Click(object sender, EventArgs e)
{
securitylog.EntryWritten -= OnEntrySecurityWritten;
}
9. Для перехвата событий записи в системный журнал, как и в предыдущем случае, необходимо создать свой обработчик событий и добавить его к списку обработчиков событий, которые прикреплены к данному объекту (в данном случае к системному журналу). Для разнообразия обработчик событий выводит на экран окно с предупреждением в случае, если событие является ошибкой (Error), или предупреждением (Warning), или информационным (Information), как показано на рисунке 4.
Рисунок 4 – Сообщение о перехвате событий записи в системный журнал
Новый обработчик событий имеет вид:
//---------------------------------------------
// Перехват записей в системный журнал
//---------------------------------------------
private void OnEntryWritten1(object sender, EntryWrittenEventArgs e)
{
if (e.Entry.EntryType == EventLogEntryType.Error || e.Entry.EntryType == EventLogEntryType.Information || e.Entry.EntryType == EventLogEntryType.Warning)
{
DialogResult result;
result = MessageBox.Show("Внимание!" + "\r\n" + "В системе произошло событие " + e.Entry.InstanceId + "\r\n" + "Время " +
e.Entry.TimeGenerated.ToString() + "\r\n" + "Сообщение: " + e.Entry.Message + "\r\n" + "\r\n" + " Просмотрите журнал событий для выяснения причин.", "Система активного аудита", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
10. Для события Click кнопки button6 (Мониторинг системны событий) пишем следующий программный код:
//---------------------------------------------
// Мониторинг системных событий
//---------------------------------------------
private void button6_Click(object sender, EventArgs e)
{
eventLog = new EventLog("System", Environment.MachineName);
eventLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten1);
eventLog.EnableRaisingEvents = true;
}
11. Для события Click кнопки button6 (Отменить мониторинг системных событий ) пишем следующий программный код:
//---------------------------------------------
// Отмена мониторинга системных событий
//---------------------------------------------
private void button7_Click(object sender, EventArgs e)
{
eventLog.EntryWritten -= OnEntryWritten1;
}
Задания для самостоятельной работы
Написать оконное приложение для вывода списка всех имеющихся журналов аудита. Предусмотреть возможность вывода на экран любого журнала, удаления и добавления любых записей, очистку любого журнала.
Индивидуальные задания приведены в таблице 5.4.
Таблица 5. 4 – Индивидуальные задания к лабораторной работе № 5
№ варианта | Индивидуальное задание |
1 | 2 |
1 | Выполнить фильтрацию событий по дате или типу события. Отслеживать появление следующих событий: неудачная аутентификация и изменения учетной записи. Информацию о перехваченном событии выводить на экран. |
2 | Выполнить фильтрацию событий по диапазону дат или категории. Отслеживать появление следующих событий: добавление пользователя в группу и создание новой учетной записи. Информацию о перехваченном событии выводить специально в созданный журнал аудита. |
3 | Выполнить фильтрацию событий по дате и временному интервалу события. Отслеживать появление следующих событий: очистка журнала безопасности и отказ входа в систему (неверное имя пользователя или пароль). Информацию о перехваченном событии выводить в текстовый файл. |
4 | Выполнить фильтрацию событий по идентификатору события или пользователю. Отслеживать появление следующих событий: отказ входа в систему (срок действия пароля истек) и удаление учетной записи пользователя. Информацию о перехваченном событии выводить на экран. |
5 | Выполнить фильтрацию событий по диапазону дат или идентификатору события. Отслеживать появление следующих событий: завершение приложения из-за ошибок и неожиданная перезагрузка компьютера. Информацию о перехваченном событии выводить в специально созданный журнал аудита. |
6 | Выполнить фильтрацию событий по временному интервалу или компьютеру. Отслеживать появление следующих событий: создание новых журналов аудита и очистка существующих журналов. Информацию о перехваченном событии выводить текстовый файл. |
Продолжение таблицы 5.4
7 | Выполнить фильтрацию событий по дате или категории события. Отслеживать появление следующих событий: запись информации в журнал Microsoft Office Sessions и активация деактивированной до этого учетной записи. Информацию о перехваченном событии выводить на экран. |
8 | Выполнить фильтрацию событий по дате или типу события. Отслеживать появление следующих событий: неудачная аутентификация и изменения учетной записи. Информацию о перехваченном событии выводить на экран. |
9 | Выполнить фильтрацию событий по диапазону дат или категории. Отслеживать появление следующих событий: добавление пользователя в группу и создание новой учетной записи. Информацию о перехваченном событии выводить специально в созданный журнал аудита. |
10 | Выполнить фильтрацию событий по дате и временному интервалу события. Отслеживать появление следующих событий: очистка журнала безопасности и отказ входа в систему (неверное имя пользователя или пароль). Информацию о перехваченном событии выводить в текстовый файл. |
11 | Выполнить фильтрацию событий по идентификатору события или пользователю. Отслеживать появление следующих событий: отказ входа в систему (срок действия пароля истек) и удаление учетной записи пользователя. Информацию о перехваченном событии выводить на экран. |
12 | Выполнить фильтрацию событий по диапазону дат или идентификатору события. Отслеживать появление следующих событий: завершение приложения из-за ошибок и неожиданная перезагрузка компьютера. Информацию о перехваченном событии выводить в специально созданный журнал аудита. |
13 | Выполнить фильтрацию событий по временному интервалу или компьютеру. Отслеживать появление следующих событий: создание новых журналов аудита и очистка существующих журналов. Информацию о перехваченном событии выводить текстовый файл. |
14 | Выполнить фильтрацию событий по дате или категории события. Отслеживать появление следующих событий: запись информации в журнал Internet Explorer и удаление учетной записи. Информацию о перехваченном событии выводить на экран. |
15 | Выполнить фильтрацию событий по дате или типу события. Отслеживать появление следующих событий: неудачная аутентификация и изменения учетной записи. Информацию о перехваченном событии выводить на экран. |
Продолжение таблицы 5.4
16 | Выполнить фильтрацию событий по диапазону дат или категории. Отслеживать появление следующих событий: добавление пользователя в группу и создание новой учетной записи. Информацию о перехваченном событии выводить специально в созданный журнал аудита. |
17 | Выполнить фильтрацию событий по дате и временному интервалу события. Отслеживать появление следующих событий: очистка журнала безопасности и отказ входа в систему (неверное имя пользователя или пароль). Информацию о перехваченном событии выводить в текстовый файл. |
18 | Выполнить фильтрацию событий по идентификатору события или пользователю. Отслеживать появление следующих событий: отказ входа в систему (срок действия пароля истек) и удаление учетной записи пользователя. Информацию о перехваченном событии выводить на экран. |
19 | Выполнить фильтрацию событий по диапазону дат или идентификатору события. Отслеживать появление следующих событий: завершение приложения из-за ошибок и неожиданная перезагрузка компьютера. Информацию о перехваченном событии выводить в специально созданный журнал аудита. |
20 | Выполнить фильтрацию событий по временному интервалу или компьютеру. Отслеживать появление следующих событий: создание новых журналов аудита и очистка существующих журналов. Информацию о перехваченном событии выводить текстовый файл. |
21 | Выполнить фильтрацию событий по дате или категории события. Отслеживать появление следующих событий: запись информации в системный журнал и изменения учетной записи. Информацию о перехваченном событии выводить на экран. |
Контрольные вопросы
1. Перечислите журналы событий. Укажите названия журналов, укажите местоположение журналов (на каком диске, в каком каталоге).
2. Из каких полей состоят записи в системных журналах?
3. Какое пространство имен используется для работы с журналами событий в .NET Framework?
4. Какая информация записывается в журнал приложений?
5. Какая информация записывается в системный журнал?
6. Какая информация записывается в журнал безопасности?
Какие события в системных журналах могут свидетельствовать об атаках на компьютерную систему?
Дата добавления: 2022-01-22; просмотров: 49; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!