Перехват/mailrecon.

#security#c/c++#php#programming#SSL/TLS#pcap#TCP#SMTP#ICAP

Собственный проект, начался как SMTP sniffer (mailrecon), который затем перерос в достаточно функциональную DLP систему, а затем был заброшен и угас.

SMTP sniffer

SMTP sniffer (mailrecon) пассивно слушает почтовый (SMTP) траффик и записывает на диск пролетающие сообщения в реальном времени. Может быть установлен “прозрачно” в качестве бриджа. (Но при пассивном варианте установки невозможен перехват шифрованного трафика (отправленного через STARTTLS)).

Сниффер через pcap интерфейс получал почтовый траффик, пересобирал TCP сессии, из них собирал SMTP сессии, извлекал из них почтовые сообщения и сохранял на диск в формате Maildir.

При разработке сниффера возникла проблема - трафик по сети пролетает достаточно быстро и много, а вот запись на диск (тогда еще были HDD) гораздо медленнее. В результате, пока длинное сообщение записывается на диск, некоторые пакеты теряются и невозможно пересобрать TCP сессию. Чтобы решить проблему, разделил сниффер на две части. Первая, сам сниффер, простая, тупая, но быстрая - перехватывает пакеты, быстро сохраняет их в shared memory и слушает трафик снова. А вторая, уже “с мозгами”, берет их из shared memory, обрабатывает, записывает. Так удалось избежать потерь пакетов.

SHMFIFO

Чтобы обе половинки удобно общались между собой, сделал библиотеку (С) для реализации FIFO через shared memory. К моему удивлению shmfifo нашел свое применение в настоящем научном проекте LDM.

Перехват

Потом к снифферу добавил HTTP/S сниффер через интеграцию (по протоколу ICAP) со Squid. Благодаря фишке sslbump, получилось перехватывать даже HTTPS траффик.

Получилась уже достаточно полная DLP система, все данные заливались в базу (обычная схема Linux/Apache/MySQL/PHP). Аттачи (из почты или загружаемые в вебмейлы и другие формы) распаковывались (zip -> doc -> txt), помечались (в том числе помечалось все “непонятное”, например, архивы с паролями), был поиск по заданным словам/сочетаниям.

Из интересной фишки - помимо фильтрации по словам, адресам и хешам документов была еще поддержка нечетких fuzzy хешей (возможно, через ssdeep). Обычную проверку по хешам можно обойти, если чуть изменить документ, даже очень незначительно. Нечеткий хеш при таком изменении выдаст результат вроде “совпадение на 98%”, что позволяет помечать все подозрительное для ручной проверки оператором.