Блокировка передачи файлов через ICQ - на городском сайте Тамбова - tamboff.ru

   ПоискПоиск   ПользователиПользователи   Правила форумаПравила форума   РегистрацияРегистрация   ПрофильПрофиль   Личные сообщенияЛичные сообщения   ВходВход 

Блокировка передачи файлов через ICQ


 
Начать новую тему   Ответить на тему    Список форумов tamboff.ru -> *nix системы в Тамбове
Предыдущая тема :: Следующая тема  
Автор Сообщение
quadro
Восточный льстец

   

Зарегистрирован: 31.03.2005
Сообщения: 2048


Сообщение21 Дек, Пятница, 11:17, 2007   постоянная ссылка   Заголовок сообщения: Блокировка передачи файлов через ICQ Ответить с цитатой

Любезному Друку посвящается.

Однажды меня спросили, можно ли заблокировать передачу файлов через ICQ? Самоуверенно я ответил, что через прокси нельзя передавать файлы. Однако ж каково было моё удивление, когда я увидел, как мне передали по аське файл > 3M с приличной скоростью! Осмотр пакетов на интерфейсе и анализ access.log прокси ничего не принесли (не совсем так, ибо один раз я увидел в логе прокси попытку соединения на сервер ars.oscar.aol.com:5190, но тогда кроме небольших подозрений у меня это ничего не вызвало). Беглый поиск в сети на тему блокировки передачи файлов через ICQ ничего не дал.

Передать файл в ICQ можно трёмя способами:
1. Прямое соединение между пользователями. Данный способ успешно пресекается файерволом.
2. Соединение через прокси-сервер AOL. Заблокировать этот вариант на уровне файервола практически невозможно, так как расположен он в сети AOL, где и сервера ICQ и сервер имеет несколько адресов, которые неизвестно как часто могут меняться.
3. Третий вариант экзотический – передача файлов через сообщения с использованием соответствующих плагинов.

Последовательность передачи такая: сначала пытаемся установить прямое соединение между пользователями, если получилось, то передаём файл. Если нет, то меняем порты и вновь пробуем, если получилось, то передаём файл. Если нет, то устанавливаем соединение с прокси-сервером AOL (для Миранды жестко прошит в коде), и передаём файл через него. Поскольку общение с прокси-сервером происходит по тем же портам, то было решено заняться анализом пакетов на L7-уровне. Поскольку в наличии у меня имелся сервер с FreeBSD 6.2, то решение для анализа пакетов было найдено быстро – ng_bpf. Довольно подробный пример использования этой ноды нетграфа совместно с ng_ipfw привёл Антон Южанинов на своей странице, за что ему огромное спасибо.

Итак, инструмент найден, надо определиться, с тем, что мы хотим фильтровать. И вот тут-то всё не так просто, поскольку протокол Oscar AIM является проприетарным и информации на него не так много, как хотелось бы. Стоит заметить, что в силу своей распространённости в сети есть подробное описание протокола версий v7,8,9 (например тут). Однако описания в части OFT (Oscar File Transfer) protocol там нет. Скупое описание нашлось на гугле. Резать InterClientBasicMsg на 2 канале нельзя, поскольку оно используется также для сообщений. Тогда было решено резать подтверждения готовности принять/отослать файл. Из исходников icq.dll от Joe версии 3.94 мы узнаём, что:
Код:

код 0x0101 // I am going to send you this file, is that ok?
код 0x0202 // Yes, it is ok for you to send me that file
код 0x4F заголовок OFT

Нам остаётся только составить паттерн для «отлавливания» таких пакетов.
В результате у меня получилось следующее выражение для tcpdump’а:
Код:

'(tcp[20]=0x4f and tcp[26:2]=0x0101) or (tcp[20]=0x4f and tcp[26:2]=0x0202)'

Но для ng_bpf нужен набор низкоуровневых инструкций. Поскольку пакеты в ng _bpf мы направляем из ng_ipfw, то пакеты будут приходить в формате DLT_EN10MB, а нам нужен формат DLT_RAW. Поэтому при составлении программы для ng_bpf надо либо учитывать смещение в 14 байт, либо сразу переводить в тип DLT_RAW. Я выбрал второй путь, так как это несколько удобнее (не надо учитывать смещения). Можно воспользоваться программой, которую написал Антон Южанинов, которая составляет bpf-программу в нужном нам формате:
Код:

./calc_bpf '(tcp[20]=0x4f and tcp[26:2]=0x0101) or (tcp[20]=0x4f and tcp[26:2]=0x0202)'
 bpf_prog_len=13 bpf_prog=[ { code=0 jt=0 jf=0 k=0 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=9 k=6 } { code=40 jt=0 jf=0 k=6 } { code=69 jt=7 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=80 jt=0 jf=0 k=20 } { code=21 jt=0 jf=4 k=79 } { code=72 jt=0 jf=0 k=26 } { code=21 jt=1 jf=0 k=257 } { code=21 jt=0 jf=1 k=514 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ]

Собственно, дальше всё просто: создадим узел типа bpf и подключим его к ipfw, именуем его и конфигурируем:
Код:

#ngctl mkpeer ipfw: bpf 41 icq

#ngctl name ipfw:41 icq_filter

#ngctl msg icq_filter: setprogram { thisHook=\"icq\" ifMatch=\"\" ifNotMatch=\"icq\"
bpf_prog_len=13 bpf_prog=[ { code=0 jt=0 jf=0 k=0 } { code=48 jt=0 jf=0 k=9 } { code=21 jt=0 jf=9 k=6 } { code=40 jt=0 jf=0 k=6 } { code=69 jt=7 jf=0 k=8191 } { code=177 jt=0 jf=0 k=0 } { code=80 jt=0 jf=0 k=20 } { code=21 jt=0 jf=4 k=79 } { code=72 jt=0 jf=0 k=26 } { code=21 jt=1 jf=0 k=257 } { code=21 jt=0 jf=1 k=514 } { code=6 jt=0 jf=0 k=65535 } { code=6 jt=0 jf=0 k=0 } ] }

В случае несовпадения с выражением, пакеты будут оправлены обратно в ipfw, в случае совпадения будут просто отбрасываться. Если вам необходимо совершать какие-нибудь действия с этими пакетами в файерволе, то можно воспользоваться нодой ng_tag, которая будет вешать метки на пакеты, по которым в ipfw вы уже сможете выполнять действия над ними. Пример использования этой ноды описан в справочнике на эту ноду.
Посмотреть настройку нашего хука можно командой:
Код:

#ngctl msg icq_filter: getprogram \"icq_filter\"

Следует помнить, что вывод команд будет в формате hex.
Теперь следует завернуть трафик ICQ в эту ноду нетграфа:
Код:

#ipfw add 123 netgraph 41 tcp from any to any 5190
#ipfw add 124 netgraph 41 tcp from any 5190 to any

Посмотреть статистику можно командой:
Код:

#ngctl msg icq_filter: getstats \"icq\"
Rec'd response "getstats" (3) from "[39]:":
Args:   { recvFrames=380 recvOctets=49093 recvMatchFrames=19 recvMatchOctets=4148 xmitFrames=361 xmitOctets=44945 }

Это означает, что из 380 пакетов, попавших в ноду, 19 соответствовали нашему выражению, то есть запросам на передачу файлов через OFT.
Большое спасибо автору ноды ng_tag Вадиму Гончарову за консультации по логике работы этих нод.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dronablo
Гость

   





Сообщение03 Янв, Четверг, 16:48, 2008   постоянная ссылка   Заголовок сообщения: Ответить с цитатой

Freebsd под рукой не было. В linux (iptables) юзаем
Код:
-m string --algo bm --string FileXfer
Вернуться к началу
quadro
Восточный льстец

   

Зарегистрирован: 31.03.2005
Сообщения: 2048


Сообщение04 Янв, Пятница, 11:27, 2008   постоянная ссылка   Заголовок сообщения: Ответить с цитатой

Dronablo писал(а):
Freebsd под рукой не было. В linux (iptables) юзаем
Код:
-m string --algo bm --string FileXfer

Неаккуратненько. Если я правильно понял по ману iptables, то под это правило попадут все IP пакеты, содержащие
Код:
46 69 6C 65 58 66 65 72
без учёта смещений и прочего. То есть скорее всего и просто сообщение, содержащее слово "FileXfer" будет заблокировано.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dronablo
Гость

   





Сообщение07 Янв, Понедельник, 17:26, 2008   постоянная ссылка   Заголовок сообщения: Ответить с цитатой

Если отрубить в отдельную цепочку ICQ, то непередаваемость сообщений со словами FileXfer не есть такое уж большое зло. Как бы пока никто не жаловался =). За то простота реализации...
Вернуться к началу
quadro
Восточный льстец

   

Зарегистрирован: 31.03.2005
Сообщения: 2048


Сообщение08 Янв, Вторник, 12:20, 2008   постоянная ссылка   Заголовок сообщения: Ответить с цитатой

Dronablo писал(а):
Если отрубить в отдельную цепочку ICQ, то непередаваемость сообщений со словами FileXfer не есть такое уж большое зло. Как бы пока никто не жаловался =). За то простота реализации...

А почему именно FileXfer? Логичнее было бы использовать OFT2, а ещё лучше совместно с FileXfer.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Партнеры tamboff.ru



Добавить свой логотип!
 
Все новости тамбовских компаний

Новости tmb.news
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов tamboff.ru -> *nix системы в Тамбове Часовой пояс: GMT + 3


Страница 1 из 1

 
Перейти: