Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> AimSniff

Мониторинг ICQ-переписки с помощью AimSniff

Автор: SergeySL.


Оригинал статьи находится здесь.

Внимание! Перед развертыванием и использованием описанной ниже системы внимательно изучите статьи 137 "Нарушение неприкосновенности частной жизни" и 138 "Нарушение тайны переписки, телефонных переговоров, почтовых, телеграфных или иных сообщений" УК РФ, а также посоветуйтесь с юристами. Я не несу какой-либо ответственности за последствия, которые могут быть вызваны Вашими действиями.

Постановка задачи
Необходимо создать систему, позволяющую перехватывать, хранить и отображать в удобной форме ICQ-переписку сотрудников компании. Судя по диалогам на соответствующих форумах, рассматриваемая задача периодически возникает, поэтому я описал один из способов ее решения, примененный в нашей Компании.

Исходные данные
Имеется сервер с FreeBSD, через который сотрудники компании тем или иным способом (NAT, прокси-сервер и т.п.) выходят в Интернет. Для установки системы не требуется какая-либо перенастройка этого сервера. Самое главное - Вы должны тем или иным способом ограничить список портов, которые могут использовать клиенты ICQ, чтобы продвинутые пользователи не смогли "обмануть" сниффер.
В качестве сниффера мы будем использовать AimSniff, для хранения перехваченныйх сообщений - сервер MySQL (процесс настройки сервера MySQL не расматривается в данной статье за исключением создания базы данных и пользователя aimsniff), для просмотра отчетов - Web Aim Sniff (WAS) и Web-сервер Apache (процесс настройки сервера Apache не рассматривается в данной статье за исключением добавления возможности отображения необходимых отчетов). Почти все перечисленное программное обеспечение будет устанавливаться из портов, поэтому я настоятельно рекомендую Вам обновить их перед выполнением действий, описанных ниже (лично я использовал FreeBSD 7.0 и последние на конец 2008 года версии портов для нее). Ссылки на источники информации будут приводиться применительно к конкретным разделам статьи.

Установка и настройка AimSniff
Установку AimSniff необходимо выполнить из портов:
cd /usr/ports/security/aimsniff
make install clean

Сразу после завершения установки необходимо выполнить команду:
aimsniff -d=bge1 --nodb

Естественно, bge1 необходимо заменить на имя внутреннего интерфейса. Данная команда запускает мониторинг пакетов ICQ, проходящих через заданный интерфейс, и отображение содержимого декодированных пакетов на экране без записи в базу данных. Если после выполнения команды вместо сообщений "INCOMINMG MESSAGE..." и "OUTGOING MESSAGE..." выдается сообщение: "Can't locate GDBM_File.pm in @INC (…) at /usr/local/bin/aimsniff line 47. BEGIN failed--compilation aborted at /usr/local/bin/aimsniff line 47., следует пересобрать Perl с поддержкой GDBM:
cd /usr/ports/lang/perl5.8
make deinstall
make WITH_GDBM=yes reinstall

По умолчанию AimSniff "не понимает" интересующие нас сообщения в кодировке UTF-8. Для исправления такого поведения необходимо загрузить пропатченную версию скрипта AimSniff и установить порт p5-Unicode-Map8 (если он не был установлен ранее):
fetch http://www.aimsniff.com/releases/aimSniff.Cyr-005.tar.gz
tar -xf aimSniff.Cyr-005.tar.gz
chmod 555 aimSniff.Cyr-005.pl
mv aimSniff.Cyr-005.pl /usr/local/bin
cd /usr/ports/converters/p5-Unicode-Map8
make install clean

Для проверки работоспособности руссифицированного AimSniff необходимо выполнить команду:
aimSniff.Cyr-005.pl -d=bge1 --nodb

После того, как первичная настройка будет завершена, необходимо создать базу данных aimsniff и пользователя aimsniff для работы с этой базой данных. Для этого нужно запустить клиент MySQL командой:
mysql -u <имя пользователя-администратора> -p

ввести пароль и выполнить три SQL-запроса:
CREATE DATABASE aimsniff;
GRANT ALL ON aimsniff.* TO aimsniff@localhost IDENTIFIED BY 'aimsniff';
FLUSH PRIVILEGES;

После завершения работы клиента MySQL необходимо создать таблицы базы данных aimsniff:
mysql -u <имя пользователя-администратора> -p aimsniff \
  < /usr/local/share/doc/aimsniff/table.struct

После завершения подготовки базы данных необходимо создать файл конфигурации AimSniff. В моем случае он называется aimSniff.cfg, находится в папке /usr/local/etc и имеет следующее содержимое:
dev=bge1
filter='tcp and port 3128'
daemon=1
host=localhost
database=aimsniff
user=aimsniff
password=aimsniff
useSyslog=1

В данном файле заданы следующие значения параметров: dev - имя интерфейса; filter - фильтр, определяющий какие пакеты следует "вылавливать" (зависит от способа выхода клиентов ICQ в Интернет, в моем случае для выхода клиентов ICQ в Интернет используется прокси-сервер, "слушающий" порт 3128); daemon - признак работы в режиме демона; host / database / user / password - параметры доступа к базе данных; useSyslog - признак использования syslog'а для записи служебных сообщений.
Самым последним этапом настройки AimSniff является доработка скрипта автозапуска, выполняемого при запуске операционной системы. Образец такого скрипта поставляется в составе AimSniff (файл rc.aimsniff в папке /usr/local/share/doc/aimsniff), однако его нужно немного адаптировать. Во-первых, нужно указать корректный интерпретатор shell в первой строке (в моем случае это /bin/sh), а во вторых заменить имя скрипта и файла конфигурации в шестой строке на:
/usr/local/bin/aimSniff.Cyr-005.pl -C=/usr/local/etc/aimSniff.cfg

После этого необходимо сделать скрипт исполняемым и скопировать его в папку usr/local/etc/rc.d:
cd /usr/local/share/doc/aimsniff
chmod 555 rc.aimsniff
cp rc.aimsniff /usr/local/etc/rc.d/aimsniff.sh

На этом настройка AimSniff заканчивается. Перезагрузите сервер, и после запуска операционной системы демон AimSniff начнет "вылавливать", декодировать и записывать перехваченные сообщения ICQ в базу данных.

Установка и настройка WAS
WAS (Web Aim Sniff) - Web-интерфейс для доступа к базе данных AimSniff, написанный на языке PHP. К сожалению, пока он не добавлен в коллекцию портов FreeBSD, в связи с чем придется ставить его из исходных тестов. Перед началом установки WAS необходимо добавить в файл конфигурации необходимого виртуального хоста Apache следующие строки:
Alias /was "/usr/local/www/was/"
<Directory "/usr/local/www/was">
  AuthName "This server require authorization!"
  AuthUserFile /usr/local/etc/apache/htpasswd
  AuthType Basic
  Require user <Список пользователей, которым разрешен доступ>
  Order deny,allow
  Deny from all
  Allow from ...
  Allow from ...
</Directory>

Как видно из фрагмента файла конфигурации для установки WAS была выбрана папка /usr/local/www/was, доступ к которой разрешен только с определенных IP-адресов и только после прохождения процедуры Basic-аутентификации. Вам нужно подставить реальные IP-адреса в директивы Allow from и добавить необходимых пользователей в файл htpasswd и директиву Require user. О том, как это сделать, подробно написано в разделе Authentication, Authorization, and Access Control официальной документации Apache. Не забудьте перезапустить Web-сервер после внесения изменений в его конфигурацию.
Когда Web-сервер будет подготовлен, необходимо загрузить, распаковать и переместить WAS в нужную папку, удалить все лишнее и сделать владельцем файлов WAS пользователя, от имени которого работает Web-сервер:
mkdir /usr/local/www/was
cd /usr/local/www/was
fetch http://aimsniff.com/releases/was-0.1.2b.tar.gz
tar -xf was-0.1.2b.tar.gz
mv was-0.1.2b/* was-0.1.2b/.[a-zA-Z]* .
rm -Rf was-0.1.2b was-0.1.2b.tar.gz
chown -R www:www * .[a-zA-Z]*

После этого необходимо слегка подкорректировать файлы WAS. Во-первых, в файлах .header.php и index.html неоходимо исправить charset=iso-8859-1 на charset=koi8-r (это приведет к корректному выбору кодировки браузером и, соответственно, корректному отображению русских символов). Во-вторых, в файле index.php необходимо исправить img src=./typesGraph.php на img src=./images/typesGraph.php (это исправит ошибку, допущенную разработчиком WAS). В третьих, мне показалось более удобным видеть в списке сообщений не IP-адреса, а имена компьютеров локальной сети. Если Вы согласны со мной, исправьте в файле .global.php <td><B>IP</td> на <td><B>Computer</td>, а также исправьте в теле функции printMessages $rs["ip"] на ucwords(gethostbyaddr($rs["ip"])). Вообще, следует заметить, что WAS - очень "сырой" пакет. К сожалению, у меня нет времени на его адаптацию, да и PHP я знаю лишь поверхностно, поэтому в настоящий момент приходится довольствоваться тем, что есть. Все работает, хотя за эргономику я бы не поставил больше тройки.
После доработки файлов WAS необходимо открыть в браузере URL http://host.company.com/was/admin.php, естественно, изменив host.company.com на имя используемого Вами виртуального хоста. В браузер будет загружена страница, на которой можно задать параметры WAS. В первую очередь необходимо изменить параметры Database User / Database Password и нажать кнопку Submit. Остальные параметры могут быть изменены или не изменены, исходя из личных предпочтений. На этом настройка WAS заканчивается.

Заключение
С учетом простоты рассмотренной системы с одной стороны и огромной популярностью ICQ с другой Вам скорее всего удастся выявить не один и не два эпизода неправильного использования рабочего времени, а возможно и "слива" конфиденциальной информации. Бесспорно, система не является панацеей, однако даже несколько выявленных случаев с лихвой окупят время, потраченное на ее настройку.



размещено: 2009-06-30,
последнее обновление: 2009-12-11,
автор: SergeySL


gx, 2009-01-04 в 2:50:09

# aimSniff.Cyr-005.pl -d=tun0
Use of uninitialized value in length at /usr/local/bin/aimSniff.Cyr-005.pl line 587.

что это может значить? что посоветуете делать?

SergeySL, 2009-01-04 в 14:49:37

Для начала добавить ключик --nodb. А вообще здесь вроде как нельзя задавать подобные вопросы. Для этого есть форум.

Grishin_U_S, 2009-01-04 в 22:32:39

1) Форум-то есть, только Вы не указали ссылку на Вашу тему.
2) Ничего не сказано о "чтении" шифрованных пакетов. Как этот сниффер обрабатывает такие пакеты? Т.к. сейчас большинство клиентов поддерживают шифрование.

SergeySL, 2009-01-05 в 8:41:13

1) Нет ни какой темы, я просто стараюсь не нарушать порядок, установленный владельцем данного сайта.
2) Сомневаюсь, что AimSniff "понимает" шифрованные пакеты. Сам лично не экспериментировал.

arksu, 2009-01-05 в 19:08:41

Статья тема! давно искал решение. не мог найти уже собирался свое писать. а тут на тебе!
БИИИГ спс!

staskur, 2009-01-12 в 8:44:59

1. для работы с mysql должен быть установлен p5-DBD-mysqlXX

где XX - версия вашего mysql

2. жаль что автор не указал версию mysql на которой он ставил, т.к. /usr/local/share/doc/aimsniff/table.struct невозможно импортировать на 5.1

Проблема возникает из-за того, что mysqldump старых версий при создании дампа добавлял в него некорректные комментарии подобные этому:

— MySQL dump 8.22

— Host: localhost Database: aim -------------------------------------------------------— — Server version 3.23.52

Неверная часть кода - это горизонтальная линия из ряда дефисов, которая появляется единожды в каждом дампе, созданном с помощью mysqldump. Чтобы запустить дамп такого вида, необходимо привести его к приемлемому для MySQL текущей версии виду, т.е. необходимо добавить пробел после первых двух дефисов линии или закомментировать её (добавить # перед ней):

— -----------------------------------------------------— или
#---------------------------------------------------------


после таких изменений дамп зальется нормально на mysql-5.1

SergeySL, 2009-01-12 в 15:44:36

1. Прошу прощение. MySQL используется много для чего, поэтому p5-DBD-mysql давным-давно поставился с чем-то другим.
2. Версия 4.1.xx (/usr/ports/databases/mysql41-server), так нужно для рабочего сайта.

arksu, 2009-01-14 в 7:47:52

озадачился убогостью и глючностью админки. берусь переписывать, да и сам скрипт надо подпилить напильником для работы в режиме демона на нескольких сетевухах
так что скоро выложу свои наработки!

filimon, 2009-01-28 в 13:32:54

Народ а у кого-нибудь нормально видны русские сообщения.
Поставил aimsniff на gentoo, настроил интерфейс, пофиксил все что вылазило. Но русские сообщения пишуться в виде "test B5AB". Может кто че подскажет.
Если есть ветка форума по данной статье, выложите плиз.

sk, 2009-01-28 в 15:07:27

все нормально видно... freebsd 7.0
"фиксить" ничего не пришлось....

filimon, 2009-01-29 в 10:47:25

Русский пофиксил)). Но есть еще проблема (сразу не заметил), в исходящих сообщениях есть только адрес назначения (DESTHANDLE) а в входящих только адрес отпровителя (FROM). На серваке естесно настроен НАТ. На форуме aimsniff.com как пофиксить не нашел (хотя там того форума)). Причем в was в этих пустых полях стоят совсем другие адреса (пока еще не выяснил почему он туда их ставит), почему сразу и не пропалил.

tick, 2009-01-29 в 11:28:18

в чем может быть проблема? пишет вот такое:
Can't locate Net/Pcap.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.9/BSDPAN /usr/local/lib/perl5/site_perl/5.8.9/mach /usr/local/lib/perl5/site_perl/5.8.9 /usr/local/lib/perl5/5.8.9/mach /usr/local/lib/perl5/5.8.9 .) at /usr/local/bin/aimsniff line 36.

SergeySL, 2009-01-30 в 20:28:10

"Но есть еще проблема (сразу не заметил), в исходящих сообщениях есть только адрес назначения (DESTHANDLE) а в входящих только адрес отпровителя (FROM). На серваке естесно настроен НАТ. На форуме aimsniff.com как пофиксить не нашел (хотя там того форума)). Причем в was в этих пустых полях стоят совсем другие адреса (пока еще не выяснил почему он туда их ставит), почему сразу и не пропалил."
1. Если только 1 адрес, то значит сообщение послано из той же локальной сети. Более подробно читайте на форуме AimSniff.
2. Совсем другие адреса говорят о том, что вы не правильно настроили фильтр, определяющий захватываемые пакеты.

metla, 2009-02-02 в 21:51:16

Такая же батва как и у tick-а
Перл собран с GDBM. Хелп.

SergeySL, 2009-02-03 в 0:11:23

"Такая же батва как и у tick-а
Перл собран с GDBM. Хелп."
А что не понятно? Установите модуль p5-Net-Pcap.

ГосТ, 2009-03-05 в 15:31:42

Кто нить задавался вопросом, как его повесить на несколько портов????
к примеру 5222, 5190 ..... е.т.с

Или Все пихаютЬ пользователей через 3128 прокси?????

SergeySL, 2009-03-05 в 17:19:56

Имхо, через прокси гораздо удобнее. Чтобы слушал несколько портов, если не получается через filter (я не пробовал), то можно попробовать запустить несколько демонов...

simple123, 2009-06-23 в 18:49:32

А почему я указываю в консоли aimSniff.Cyr-005.pl -d=age0 --nodb, он слушает порт 5190 хотя указан 3128 в cfg файле и при этом ничего не происходит!!!

Рома, 2009-06-30 в 15:48:14

Друзья! Не решили вопрос с пустыми полями FROM в исходяших сообщениях и TO в входящих?

zar0ku1, 2009-07-01 в 16:09:26

Реализовывал подобное через imspector

Рома, 2009-07-14 в 15:03:53

Друзья! Подскажите, пожалуйста, такую вещь - хочу перевести кодировку БД в cp1251 - подправил скрипт aimSniff.Cyr-005.p, чтобы он не переводил ср1251 в кои8, в консоли всё чудесно, в файлик всё скидывается чудесно. А вот в mysql всю кириллицу лупит вопросиками, причём mysql настроен полностью на ср1251. Куда копать?

alonefox, 2009-10-10 в 11:11:38

Сильно этот проект не копал...
Посмотри в сторону кодировки соединения с мускулом
в частности SQL команда "SET NAMES <charset>", примеры charset: KOI8-R, UTF-8, CP1251

dolphin, 2009-12-09 в 17:13:16

может кому еще поможет ..
если вылезит такое Fatal error: Call to undefined function preg_replace() in /usr/local/www/was/.header.php on line 40

Нужно установить пакет php5(4)-pcre

dolphin, 2009-12-09 в 17:32:31

И что бы рисовались графики еще доставить модуль php5(4)-gd

Николай, 2010-01-13 в 8:16:28

Если не виден получатель или отправитель, нужно чтобы тот, за кем следят подключился с включеным сниффером, у меня так всё появилось, и заполнится табличка бадди-лист

Marselino, 2011-01-06 в 16:54:48

Статья хорошая. Автору респект. Аналог этого решения есть в Pfsense.

Ded_USAMA, 2011-12-17 в 14:16:11

У меня все вот в таком виде:
   3    2011-12-17 13:02:28    10.0.0.7    571411150          2 18;NB5=5 4 <0@B0 1C4CB =0 2K1>@0E ?@87545=
   4    2011-12-17 13:02:28    10.0.0.7    571411150          2 18;NB5=5 4 <0@B0 1C4CB =0 2K1>@0E ?@87545=
   1    2011-12-17 13:01:55    10.0.0.7         571461050    Ээээ даже не знаю
   2    2011-12-17 13:01:55    10.0.0.7         571461050    Ээээ даже не знаю



Тоесть мои исходящие сообщения в базу заносятся на кирилице, а входящие в виде иероглифов. Куда рыть?

SergeySL, 2011-12-17 в 14:38:40

Установить порт converters/p5-Unicode-Map8.

Ded_USAMA, 2011-12-17 в 17:18:05

Установлен такой порт.

SergeySL, 2011-12-18 в 1:49:00

Значит копайте в сторону конфигурации MySQL.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0426 секунд
Из них PHP: 29%; SQL: 71%; Число SQL-запросов: 77 шт.
Исходный размер: 53063; Сжатая: 13047