• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Регулярные выражения для анализа стандартных журналов

soulriver34

Green Team
30.01.2023
25
6
BIT
1
Всех приветствую.
У меня имеется небольшой файлик с логами ( Буквально строчек 5 )
Для него мне нужно написать подходящие регулярные выражения для анализа, при этом создавая как можно меньше RegExp для анализа, отдавая предпочтение выражению "всё в одном". Т.е. извлекать всю важную информацию из журналов (IP и тд.)
Честно говоря вообще не представляю как и чего нужно делать, всюду различная информация и как правильно на самом деле не пойму.
Может кто подскажет, что лучше использовать, может есть какие программы для анализа этого, или же есть какие то общепринятые выражения уже готовые в терминал или программку.
Буду очень благодарен за вашу помощь.
 
Решение
В общем друзья, сделал хоть и скорее всего по тупому, но вдруг кто тоже будет искать кому пригодиться:

Код:
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" logs_for_regex.txt | while read IP; do echo "$IP $(grep $IP logs_for_regex.txt | awk '{print $7,$8,$9,$10}')"; done
Универсальная штука, которая будет выводить указаные столбцы
А если нужно будет убрать какой столбец то просто выбираем строки и выводим их
Код:
[ "$line_number" = "1" ] || [ "$line_number" = "2" ] - Select line

awk '{print $7,$8}' - Column output
Если у кого будут более лучше варианты - пишите тоже

soulriver34

Green Team
30.01.2023
25
6
BIT
1
Формат файла мы угадывать должны?
А так есть
Прошу прощения я просто в этой теме совсем еще плаваю, у меня файл в обычном .txt формате, где
Первые два сообщения журнала исходят от брандмауэра Juniper и описывают закрытие сеанса (FIN) или отклонение. Следующее сообщение журнала исходит от Suricata и сообщает об обнаружении сетевого троянца. Четвертое сообщение журнала исходит от сервера OpenSSH и сообщает, что пользователь открыл сеанс. Последнее сообщение журнала исходит от ESET Enterprise Inspector и содержит предупреждение для процесса, использующего сеть TOR.
 

Exited3n

Red Team
10.05.2022
679
216
BIT
430
Прошу прощения я просто в этой теме совсем еще плаваю, у меня файл в обычном .txt формате, где
Первые два сообщения журнала исходят от брандмауэра Juniper и описывают закрытие сеанса (FIN) или отклонение. Следующее сообщение журнала исходит от Suricata и сообщает об обнаружении сетевого троянца. Четвертое сообщение журнала исходит от сервера OpenSSH и сообщает, что пользователь открыл сеанс. Последнее сообщение журнала исходит от ESET Enterprise Inspector и содержит предупреждение для процесса, использующего сеть TOR.
Да у тебя просто grep'ать можно. Что там анализировать то в 5 строках ?
 

soulriver34

Green Team
30.01.2023
25
6
BIT
1
Да у тебя просто grep'ать можно. Что там анализировать то в 5 строках ?
Но там нужно написать регулярные выражения под каждую строчку отдельно в журнале этом или есть какой то общий шаблон для анализа что нам нужно? И что вот вообще нам нужно узнать кроме IP, время даты, хз еще что будет здесь важно
 

f22

Codeby Academy
Gold Team
05.05.2019
1 835
225
BIT
974
Всех приветствую.
У меня имеется небольшой файлик с логами ( Буквально строчек 5 )
Для него мне нужно написать подходящие регулярные выражения для анализа, при этом создавая как можно меньше RegExp для анализа, отдавая предпочтение выражению "всё в одном". Т.е. извлекать всю важную информацию из журналов (IP и тд.)
Честно говоря вообще не представляю как и чего нужно делать, всюду различная информация и как правильно на самом деле не пойму.
Может кто подскажет, что лучше использовать, может есть какие программы для анализа этого, или же есть какие то общепринятые выражения уже готовые в терминал или программку.
Буду очень благодарен за вашу помощь.
Что значит важная? Как регулярка поймёт что важно, а что нет?
Вы бы привели пример строки, которая там есть, чтобы было понятно
Но там нужно написать регулярные выражения под каждую строчку отдельно в журнале этом или есть какой то общий шаблон для анализа что нам нужно? И что вот вообще нам нужно узнать кроме IP, время даты, хз еще что будет здесь важно
Смысл регулярных выражений как раз в том, чтобы описать общую строку под которую подойдут различные варианты.
Вот, например файл test.log содержит строки и IP адреса:
Код:
192.168.2.5
192.168.2.6
1
192.168.2.7
192.168.2.8
test
192.168.2.9
192.168.2.10
login
192.168.3.5
192.168.3.6
10.10.1.1
192.168.3.7
192.168.3.8
password
10.10.1.2
192.168.3.9
192.168.3.10
10.10.1.3
10.10.1.4
10.10.1.5

Чтобы получить оттуда только IP адреса, можно использовать такой паттерн
cat test.log | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'
1675398695951.png
Если нужно найти только ip адреса из пула 10.***
Регулярка будет уже такой:
cat test.log | grep -Eo '10\.([0-9]{1,3}\.){2}[0-9]{1,3}'
1675398718771.png

Догадаться по описанию
Для него мне нужно написать подходящие регулярные выражения для анализа, при этом создавая как можно меньше RegExp для анализа, отдавая предпочтение выражению "всё в одном". Т.е. извлекать всю важную информацию из журналов (IP и тд.)
что конкретно вам нужно - невозможно... Нужно больше исходных данных
 

soulriver34

Green Team
30.01.2023
25
6
BIT
1
Проблемма вот в чем:
Сам файл текстовый в который вложены логи имеют различный вид, скорее всего собрано из разных мест, и если писать выражения по типу:
Код:
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" logs_for_regex.txt | while read IP; do echo "$IP $(grep $IP logs_for_regex.txt | awk '{print $11}')"; done
Грубый пример, но все же, если я хочу вывести ИП и допустим 11 столбец отвечающий за браузер ( В 1 строке ) то в последущих в 11 столбце уже будут совсем другие данные и уже получается проблемма.
Я еще тут подумал может стоит написать регулярные выражения для каждого типа строк ( Правда еще не знаю можно их будет потом соеденить вместе или нет, но хотя бы смогу уже анализировать.
Я начал анализить каждую строчку отдельно, но так как знаний у меня в этом деле мало получалось так что мои выражения не доконца работают, к примеру:
Код:
grep - oP '^(\w{3})\s(\d{2})\s(\d{2}:\d{2}:\d{2})\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*2018-.*(source-address="(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})").*(source-port="(\d{1,5})").*(destination-address="(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})").*(destination-port="(\d{1,5})").*(nat-source-address="(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})").*(nat-source-port="(\d{1,5})").*(nat-destination-address="(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})").*(nat-destination-port="(\d{1,5})").*(src-nat-rule-name="([\w-]+)").*(packet-incoming-interface="(\w+)")' logs_for_regex.txt
Это я написал для первых двух строк ( Так как они одинаковы )
Но как только я это запускаю, что то не так и к примеру ИП оно не показывает, source-port выводит а его source-address нет
Мож кто знает как это все правильно оформить)
 

soulriver34

Green Team
30.01.2023
25
6
BIT
1
В общем друзья, сделал хоть и скорее всего по тупому, но вдруг кто тоже будет искать кому пригодиться:

Код:
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" logs_for_regex.txt | while read IP; do echo "$IP $(grep $IP logs_for_regex.txt | awk '{print $7,$8,$9,$10}')"; done
Универсальная штука, которая будет выводить указаные столбцы
А если нужно будет убрать какой столбец то просто выбираем строки и выводим их
Код:
[ "$line_number" = "1" ] || [ "$line_number" = "2" ] - Select line

awk '{print $7,$8}' - Column output
Если у кого будут более лучше варианты - пишите тоже
 
Решение
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!