Эта статья является частью цикла «Ограничение передачи файлов в интернет». В цикл входят статьи:
- ограничение передачи файлов в интернет;
- блокирование передачи файлов в Mail.Ru агенте;
- блокирование передачи файлов в ICQ;
- блокирование передачи файлов на файлообменные сервера;
- блокирование передачи почтовых вложений;
- блокирование передачи файлов через веб-формы.
Этап 1. Анализ потребностей
Передача файлов в качестве почтовых вложений на внешние почтовые сервера типа http://www.mail.ru, http://www.yandex.ru, http://www.gmail.com – один из важных каналов утечки информации. Как мы можем от этого защититься?
Проще всего, конечно, запретить переходы на сайты такого рода. Однако это решение натыкается на ряд подводных камней. Каких? Опишем ниже.
- В интернете полно сервисов, предоставляющих бесплатную почту с веб-интерфейсом. Перелопатить весь интернет в их поисках не представляется возможным (это зависит, конечно, от количества человек, которых вы можете натравить на мониторинг интернета).
- Завтра появится новый ресурс, а вы о нем не узнаете.
- Часть сотрудников использует внешние почтовые сервера для получения почты от конкурентов, инсайдеров и т.п. :)
И тут вспоминается наш корпоративный прокси-сервер, присутствующий на нем фаерволл с функцией поиска строки в пакете… Попробуем провести исследование подобно тому, которое мы провели для файлообменных серверов.
Этап 2. Расследование
Проанализируем трафик, который генерируется при попытке отправить письмо, содержащее файл testfile.zip в качестве вложения.
Подопытный № 1. http://www.mail.ru/
Захваченный трафик.
Пакет с упоминанием testfile.zip.
И мы видим уже знакомую нам строку
Content-Disposition: form-data; name=”Filedata”; filename=”testfile.zip”
Это означает, что настроенные в статье «Блокирование передачи файлов на файлообменные сервера» правила уже закрывают возможность отправлять файлы через почту http://www.mail.ru/. Однако, для чистоты эксперимента, попробуем отправить письмо, не содержащее вложений, а содержащее только текст «Testtext».
Мы видим, что здесь нет нашей волшебной строки, за которую мы зацепились. Так что, текстовые сообщения пройдут нашу блокировку.
Стоит заметить, что прикрепление файла к письму выполняется отдельным ajax-скриптом независимо от отправки самого письма.
Подопытный № 2. http://www.yandex.ru/
Захватываем трафик.
Рассматриваем дамп пакета, содержащего строку 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/
Захватываем трафик.
Смотрим в дамп.
Здесь мы видим
Content-Disposition: form-data; name=”attach”; filename=”testfile.zip”
Дампим чистое сообщение.
И видим ту же картину, что и с яндексом.
Подопытный № 4. http://www.gmail.com/
Для начала попробуем прикрепить файл с помощью формы «Прикрепить еще один файл…» в интерфейсе почтового ящика.
Смотрим в дамп.
Content-Disposition: form-data; name=”file0”; filename=”testfile.zip”
Теперь прикрепляем только один файл и отправляем письмо. Видим ту же картину.
Подопытный № 5. http://www.hotmail.com/
Смотрим в дамп пакета, в котором присутствует строка 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
Можно заметить, что приведенные выше правила являются обобщением правил, приведенных в статье «Блокирование передачи файлов на файлообменные сервера».
Обсуждение
Trackbacks/Pingbacks
Уведомление: Блокирование передачи файлов на файлообменные сервера « bugaga0112358 - 5 мая, 2011
Уведомление: Ограничение передачи файлов в интернет « bugaga0112358 - 5 мая, 2011
Уведомление: Блокирование передачи файлов на файлообменные сервера « bugaga0112358 - 5 мая, 2011
Уведомление: Блокирование передачи файлов ICQ « bugaga0112358 - 6 мая, 2011
Уведомление: Блокирование передачи файлов в ICQ « bugaga0112358 - 6 мая, 2011
Уведомление: Блокирование передачи файлов в Mail.Ru агенте « bugaga0112358 - 11 мая, 2011
Уведомление: Блокирование передачи файлов с помощью веб-форм « bugaga0112358 - 11 мая, 2011
Уведомление: Блокирование передачи файлов через веб-формы « bugaga0112358 - 11 мая, 2011