Доступно и емко о технологиях, информационной безопасности, программировании.
👕 Одежда с тематическими принтами
👕 Корпоративный мерч на заказ
https://authoritywear.ru
https://vk.com/authoritywear
Post #133
287
Всем, кто хоть раз анализировал сетевой трафик, наверняка хотелось добавить какой-нибудь автоматизации
Обычно на ум сразу приходит обработка трафика с использованием pyshark/tshark.
Несмотря на удобство в разработке, при анализе большого объема трафика, становится понятно, что решение не очень удачное - обработка происходит чудовищно медленно (преимущественно из-за использования диссекторов).
Тогда, если вам не нужно глубоко погружаться в анализ, на ум может прийти фильтрация трафика с использованием bpf в tcpdump с последующим парсингом текстового вывода
Такое решение действительно показывает гораздо большую скорость в сравнение с tshark (т.к. работает прямо в ядре и до попадания пакета в юзерспейс), однако обладает своим минусом: bpf, по сути,- это бинарные операции, что порождает необходимость четко понимать, какие байты в пакете за что отвечают.
Так, например, команда для фильтрации dns-запросов выглядит следующим образом:
(Этот фильтр соответствует dns.flags==0x0100 в WireShark)
А если в организации канала участвуют vlan или pppoe, необходимо каждый раз писать фильтр заново:
Или
А что если в трафике что-то смешанное? Согласитесь, не очень удобно. К тому же, с выводом tcpdump все еще нужно что-то дополнительно делать.
На помощь приходит Zeek (он же Bro) - мощный opensource анализатор трафика
Из коробки Zeek самостоятельно генерирует логи со статистикой
Чтобы убедиться, выполните команду
В текущей директории, по мере поступления пакетов, будут создаваться логи:
https://docs.zeek.org/en/master/reference/logs/index.html
Для анализа логов в составе zeek есть утилита zeek-cut
Например, чтобы получить статистику подключений в формате "ipsrc srcport ipdst dstport", выполните следующую команду:
Возникает вопрос: "А где собственная автоматизация?"
Во-первых, можно сделать вывод логов в формате json и парсить их самостоятельно:
А во-вторых, в Zeek есть собственный event-based скриптовый движок, который предоставляет довольно широкий и удобный функционал по доступу к полям пакетов.
Так, например, чтобы вывести все доменные имена в dns запросах, можно использовать event dns_request, который сработает, как call-back при появлении нужного пакета
Опробовать можно тут:
https://try.zeek.org/
Для того, чтобы выполнить собственный скрипт, выполните команду
Ну и в-третьих, zeek можно использовать для мониторинга ИБ в сети с использованием готовых скриптов, разработанных сообществом
Пример хорошего набора скриптов - https://github.com/mitre-attack/bzar
PS:
К слову, claude прекрасно пишет zeek-скрипты
Чтобы познакомиться с Zeek поближе, советуем посмотреть видео от SANS:
https://www.youtube.com/watch?v=-nTR5kAXf2w
Обычно на ум сразу приходит обработка трафика с использованием pyshark/tshark.
Несмотря на удобство в разработке, при анализе большого объема трафика, становится понятно, что решение не очень удачное - обработка происходит чудовищно медленно (преимущественно из-за использования диссекторов).
Тогда, если вам не нужно глубоко погружаться в анализ, на ум может прийти фильтрация трафика с использованием bpf в tcpdump с последующим парсингом текстового вывода
Такое решение действительно показывает гораздо большую скорость в сравнение с tshark (т.к. работает прямо в ядре и до попадания пакета в юзерспейс), однако обладает своим минусом: bpf, по сути,- это бинарные операции, что порождает необходимость четко понимать, какие байты в пакете за что отвечают.
Так, например, команда для фильтрации dns-запросов выглядит следующим образом:
tcpdump -i eth1 (udp[10:2])=0x0100
(Этот фильтр соответствует dns.flags==0x0100 в WireShark)
А если в организации канала участвуют vlan или pppoe, необходимо каждый раз писать фильтр заново:
tcpdump -i eth1 pppoes and ((udp[10:2])=0x0100)
Или
tcpdump -i eth1 pppoes and vlan and ((udp[10:2])=0x0100)
А что если в трафике что-то смешанное? Согласитесь, не очень удобно. К тому же, с выводом tcpdump все еще нужно что-то дополнительно делать.
На помощь приходит Zeek (он же Bro) - мощный opensource анализатор трафика
Из коробки Zeek самостоятельно генерирует логи со статистикой
Чтобы убедиться, выполните команду
zeek -i eth1
В текущей директории, по мере поступления пакетов, будут создаваться логи:
https://docs.zeek.org/en/master/reference/logs/index.html
Для анализа логов в составе zeek есть утилита zeek-cut
Например, чтобы получить статистику подключений в формате "ipsrc srcport ipdst dstport", выполните следующую команду:
cat conn.log | zeek-cut -m id.orig_h id.orig_p id.resp_h id.resp_p
Возникает вопрос: "А где собственная автоматизация?"
Во-первых, можно сделать вывод логов в формате json и парсить их самостоятельно:
zeek -i eth1 LogAscii::use_json=T
А во-вторых, в Zeek есть собственный event-based скриптовый движок, который предоставляет довольно широкий и удобный функционал по доступу к полям пакетов.
Так, например, чтобы вывести все доменные имена в dns запросах, можно использовать event dns_request, который сработает, как call-back при появлении нужного пакета
event dns_request(c: connection, msg: dns_msg, query: string, qtype: count,
qclass: count, original_query: string)
{
print query;
}
Опробовать можно тут:
https://try.zeek.org/
Для того, чтобы выполнить собственный скрипт, выполните команду
zeek -i eth1 script.zeek
Ну и в-третьих, zeek можно использовать для мониторинга ИБ в сети с использованием готовых скриптов, разработанных сообществом
Пример хорошего набора скриптов - https://github.com/mitre-attack/bzar
PS:
К слову, claude прекрасно пишет zeek-скрипты
Чтобы познакомиться с Zeek поближе, советуем посмотреть видео от SANS:
https://www.youtube.com/watch?v=-nTR5kAXf2w
- 👍 5
- 🔥 3
- ✍ 2







