Под несанкционированным входом подразумевается ситуация, когда у одного пользователя более одного открытого сеанса. То есть, в журнале присутствует две записи «Вход», между которыми нет записи «Выход» для одного пользователя.
Для упрощения поиска таких записей существует 2 подхода: использовать MS Excel с настроенными фильтрами и сортировкой или написать программу, которая в автоматическом режиме будет осуществлять разбор записей журнала и определение пользователей с несколькими открытыми сеансами.
Пример функционирования такой программы:
1) Из файла журнала берется очередная запись (строка).
2) Из строки выделяется Логин и ТипОперации (по разделительным символам).
3) Если ТипОперации – «Вход», добавляем Логин в массив пользователей с открытым сеансом. Если такой пользователь в массиве уже есть – обнаружен несанкционированный вход.
4) Если ТипОперации – «Выход», удаляем Логин из массива пользователей с открытым сеансом.
Пример реализации программы на языке программирования C++ приведен в листинге 2.1‑1.
Листинг 2.1-1 – Реализация поиска несанкционированной записи в журнале на языке программирования C++
#include
#include
#include
#include
#include
using namespace std;
int main()
{
// открытие файла на чтение
ifstream fin("audit_v1.log.txt");
string line;
int tabInd, tabInd2;
string login, action;
// словарь открытых сеансов
map<string, string> sessions;
// в цикле считывание очередной строки,
// пока не конец файла
while (!getline(fin, line).eof())
{
// индекс первого разделителя (для поля Логин)
tabInd = line.find('\t');
// индекс второго разделителя (между ними типОперации)
tabInd2 = line.find('\t', tabInd+1);
// копируем Логин из строки журнала
login = line.substr(0,tabInd);
// копируем ТипОперации из строки журнала
action = line.substr(tabInd + 1, tabInd2 - tabInd - 1);
// поиск в словаре по Логину
auto it = sessions.find(login);
// Запись в словаре не найдена - добавляем новую
if (it == sessions.end())
sessions[login] = action;
else
// запись в словаре найдена
{
// если сохраненный ТипОперации совпадает с текущей - ошибка!
// вывод на экран информации о несанкционированном доступе
if (sessions[login] == action)
cout << "Bad login: " << line << endl;
else
// иначе удаляем запись из словаря
sessions.erase(it);
}
} // while
}
В результате программа выведет следующий результат:
Bad login: user27 Вход 14.01.2021 11:00:24
Осуществив поиск в файле журнала по логину user27, можно найти следующие записи:
user27 Вход 14.01.2021 05:41:54
user27 Вход 14.01.2021 11:00:24
user27 Выход 14.01.2021 13:24:46
user27 Выход 14.01.2021 22:05:28
В результате можно сделать вывод, что была попытка несанкционированного подключения от имени пользователя
user27 14.01.2021 05:41:54 или 14.01.2021 11:00:24.