//
вы читаете...
Информационная безопасность, Протоколы, Системное администрирование

Блокирование передачи почтовых вложений

Эта статья является частью цикла «Ограничение передачи файлов в интернет». В цикл входят статьи:

Этап 1. Анализ потребностей

Передача файлов в качестве почтовых вложений на внешние почтовые сервера типа http://www.mail.ru, http://www.yandex.ru, http://www.gmail.com – один из важных каналов утечки информации. Как мы можем от этого защититься?

Проще всего, конечно, запретить переходы на сайты такого рода. Однако это решение натыкается на ряд подводных камней. Каких? Опишем ниже.

  1. В интернете полно сервисов, предоставляющих бесплатную почту с веб-интерфейсом. Перелопатить весь интернет в их поисках не представляется возможным (это зависит, конечно, от количества человек, которых вы можете натравить на мониторинг интернета).
  2. Завтра появится новый ресурс, а вы о нем не узнаете.
  3. Часть сотрудников использует внешние почтовые сервера для получения почты от конкурентов, инсайдеров и т.п. :)

И тут вспоминается наш корпоративный прокси-сервер, присутствующий на нем фаерволл с функцией поиска строки в пакете… Попробуем провести исследование подобно тому, которое мы провели для файлообменных серверов.

Этап 2. Расследование

Проанализируем трафик, который генерируется при попытке отправить письмо, содержащее файл testfile.zip в качестве вложения.

Подопытный № 1. http://www.mail.ru/

Захваченный трафик.

Трафик, сгенерированный при передаче файла на сервер http://www.mail.ru/

Пакет с упоминанием testfile.zip.

Дамп пакета, содержащего строку testfile.zip

И мы видим уже знакомую нам строку

Content-Disposition: form-data; name=”Filedata”; filename=”testfile.zip”

Это означает, что настроенные в статье «Блокирование передачи файлов на файлообменные сервера» правила уже закрывают возможность отправлять файлы через почту http://www.mail.ru/. Однако, для чистоты эксперимента, попробуем отправить письмо, не содержащее вложений, а содержащее только текст «Testtext».

Трафик, сгенерированный при отправке текстового письма на сервер http://www.mail.ru/

Дамп пакета, содержащего текстовое сообщение

Мы видим, что здесь нет нашей волшебной строки, за которую мы зацепились. Так что, текстовые сообщения пройдут нашу блокировку.

Стоит заметить, что прикрепление файла к письму выполняется отдельным ajax-скриптом независимо от отправки самого письма.

Подопытный № 2. http://www.yandex.ru/

Захватываем трафик.

Трафик, сгенерированный при передаче файла на сервер http://www.yandex.ru/

Рассматриваем дамп пакета, содержащего строку testfile.zip.

Дамп пакета, содержащего строку testfile.zip

Видим то же самое, что и с http://www.mail.ru/ с тем лишь отличием, что поле для имени файла называется не Filedata, а attachment.

Content-Disposition: form-data; name=”attachment”; filename=”testfile.zip”

Проверяем отправку письма без вложений. Приведу сразу дамп.

Дамп пакета, содержащего текстовое сообщение

Любимой нами строки нет, но есть строка

Content-Disposition: form-data; name=”att”; filename=””

Ее следует учесть при составлении правил.

Подопытный № 3. http://www.rambler.ru/

Захватываем трафик.

Трафик, сгенерированный при передаче файла на сервер http://www.rambler.ru/

Смотрим в дамп.

Дамп пакета, содержащего строку testfile.zip

Здесь мы видим

Content-Disposition: form-data; name=”attach”; filename=”testfile.zip”

Дампим чистое сообщение.

Дамп пакета, содержащего текстовое сообщение

И видим ту же картину, что и с яндексом.

Подопытный № 4. http://www.gmail.com/

Для начала попробуем прикрепить файл с помощью формы «Прикрепить еще один файл…» в интерфейсе почтового ящика.

Смотрим в дамп.

Дамп пакета, содержащего строку testfile.zip

Content-Disposition: form-data; name=”file0”; filename=”testfile.zip”

Теперь прикрепляем только один файл и отправляем письмо. Видим ту же картину.

Дамп пакета, содержащего строку testfile.zip

Подопытный № 5. http://www.hotmail.com/

Смотрим в дамп пакета, в котором присутствует строка testfile.zip.

Дамп пакета, содержащего строку testfile.zip

Видим

Content-Disposition: form-data; name=”fileInput”; filename=”testfile.zip”

Этап 3. Анализ результатов

Мы видим, что при отправке почтового вложения файл содержит строку

Content-Disposition: form-data; name=”имя_параметра”; filename=”testfile.zip”

Имя параметра у разных серверов может быть разное, но неизменной остается следующая часть, содержащая имя файла.

Также замечено, что при отправке сообщения, не содержащего почтовое вложение, найденная строка либо не появляется, либо в качестве значения параметра filename передается пустая строка.

Этап 4. Решение

Опишем алгоритм решения.

Шаг 1. Если пакет во внешнюю сеть из внутренней, то перейти к шагу 2.

Шаг 2. Если пакет содержит строку Content-Disposition: form-data; name=”, то перейти к шагу 3.

Шаг 3. Если пакет содержит filename=””, то разрешить этот пакет и выйти из обработки.

Шаг 4. Если пакет содержит filename=”, то заблокировать этот пакет.

Напишем правила для iptables.

# Создаем цепочку для обработки
iptables –N Upload_Packet
# Реализация алгоритма обработки
# Реализуем шаг 3
iptables –A Upload_Packet –m string --algo bm --string ‘filename=””’ –j ACCEPT
# Реализуем шаг 4
iptables –A Upload_Packet –m string --algo bm --string ‘filename=”’ –j LOG --log-prefix “Attempting to upload file: ”
iptables –A Upload_Packet –m string --algo bm --string ‘filename=”’ –j DROP
# Создаем правила для входной цепочки (реализуем Шаг 2)
iptables –A INPUT –m string --algo bm --string ‘Content-Disposition: form-data; name=”’ –j Upload_Packet

Можно заметить, что приведенные выше правила являются обобщением правил, приведенных в статье «Блокирование передачи файлов на файлообменные сервера».

Оставьте комментарий

Статистика блога

  • 19 763 hits