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

]]>

AIM SniffВнимание! Перед развертыванием и использованием описанной ниже системы внимательно изучите статьи 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/"
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 ...

Как видно из фрагмента файла конфигурации для установки 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 <strong>IP</strong> на <strong>Computer</strong>, а также исправьте в теле функции 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 с другой Вам скорее всего удастся выявить не один и не два эпизода неправильного использования рабочего времени, а возможно и “слива” конфиденциальной информации. Бесспорно, система не является панацеей, однако даже несколько выявленных случаев с лихвой окупят время, потраченное на ее настройку. Если в процессе настройки у Вас возникнут проблемы, внимательно анализируйте лог-файлы и читайте обсуждение cтатьи на сайте www.lissyara.su. Если ничего не помогает, задавайте мне вопросы, попробуем решить проблему вместе.

]]>
]]>

Подписка на новости

Если Вам понравилась эта публикация, подпишитесь на RSS или E-mail рассылку, канал Twitter, где я сообщаю об интересных событиях в мире OpenSource, канал FriendFeed, где я делюсь ссылками на полезные публикации по администрированию Linux/Unix. Спасибо за визит!

]]>
]]>

54 комментария

  1. Me, 20 февраля 2009 г. в 12:54

    Привет! Настроил aimsniff, при попытке открыть was (admin.php) скрипт просто предлагает сохраниться как файл и все. Что делать, не подскажешь на вскидку, пожалуйста? Спасибо.

  2. Gorsh, 11 апреля 2009 г. в 19:23

    Добрый день.
    Очень помогла статья icqsniff. Большое Спасибо. Все работает, за исключением следующего… Если юзеры сидят в квипе, то все сообщения отлавливаются и скадываются в базу. Если люди используют icq клиента встроенного в мейл агента, то sniff ловит только кракозябрики и не важно на каком языке написанно сообщение на инглише или на русском.
    Подскажите как можно решить данную проблему?

    • SergeySL, 11 апреля 2009 г. в 22:00

      Добрый вечер!

      Если люди используют icq клиента встроенного в мейл агента, то sniff ловит только кракозябрики и не важно на каком языке написанно сообщение на инглише или на русском. Подскажите как можно решить данную проблему?

      У меня на работе все пользуются Qip’ом, поэтому с проблемой не сталкивался, и подсказать, соответственно, нечего. А вообще нужно копать в сторону кодировок, используемых мейл@агентом, или заставлять юзеров использовать строго определенный софт (у нас именно так) :roll:

    • GODshadow, 29 мая 2009 г. в 2:01

      Совсем недавно решил исправить данную проблему, есть вариант работающего скрипта, исправлены многие глюки при ловле сообщений ICQ. С qip действительно проблем не наблюдалось. Готов предложить свой вариант скрипта aimSniff.Cyr-005.pl :smile: Позже после окончательного тестирования выложить его в сети официально :wink:

  3. simple123, 23 июня 2009 г. в 19:03

    Привет, у меня проблема записи логов в базу не происходит, в консоли AIM Sniff он просто у меня слушает на внутреннем интерфейсе ну ничего не ловит, как обойти эту проблему
    ##########################################################
    AIM Sniff v. 0.9dr005
    Developed by: Shawn Grimes
    Realtex-sux and demiurgie based Cyrillic patches are made by amdk7.
    ##########################################################
    Beginning Sniff...
    FILTER: port 5190

    и все больше ничего не происходит!!!simple123

  4. simple123, 24 июня 2009 г. в 9:03

    FreeBSD gate 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Tue Jun 16 16:58:19 SAMST 2009 simple@gate.skill-plus.local:/usr/obj/usr/src/sys/ISORT i386
    да используется прокси порт 3128 связка sams squid rejik ntlm, демон в памяти висит слушает вот cfg файл aimsniff
    /usr/home/simple/>cat /usr/local/etc/aimSniff.cfg
    dev=age0
    filter=’tcp and port 3128′
    daemon=1
    host=localhost
    database=aimsniff
    password=1sort
    useSyslog=1

    • SergeySL, 24 июня 2009 г. в 11:01

      Выполните команду ifconfig и напишите, что она выдает.

      • simple123, 24 июня 2009 г. в 12:13


        ifconfig
        age0: flags=8943 metric 0 mtu 15 00
        options=319b
        ether 00:1e:8c:ba:97:57
        inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX )
        status: active
        rl0: flags=8843 metric 0 mtu 1500
        options=8
        ether 00:14:d1:10:bc:4d
        inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
        media: Ethernet autoselect (100baseTX )
        status: active
        rl1: flags=8802 metric 0 mtu 1500
        options=8
        ether 00:14:d1:10:b8:22
        media: Ethernet autoselect
        status: no carrier
        plip0: flags=108810 metric 0 mtu 1500
        lo0: flags=8049 metric 0 mtu 16384
        inet 127.0.0.1 netmask 0xff000000
        pflog0: flags=0 metric 0 mtu 33204
        pfsync0: flags=0 metric 0 mtu 1460
        syncpeer: 224.0.0.240 maxupd: 128

        • SergeySL, 24 июня 2009 г. в 12:39

          aimSniff.Cyr-005.pl -d=age0 -f='tcp and port 3128' --nodb работает?
          Выдает перехваченные сообщения в консоль?

          • simple123, 24 июня 2009 г. в 13:07

            да вот сейчас выдает перехватывает сообщения, спасибо, :razz: а почему он тогда не берет эти настройки с конфигунационого файла, пути прописаны правильные к файлу :cry:

            • simple123, 24 июня 2009 г. в 14:34

              Ответа конечно я наверное не дождусь :cry:

              • SergeySL, 24 июня 2009 г. в 18:06

                Ответа конечно я наверное не дождусь :cry:

                Ну почему же? :lol: Вариантов всего два: не правильные пути и / или не правильные права доступа к файлу конфигурации (это если запускаете не под root’ом).

  5. simple123, 24 июня 2009 г. в 21:27

    Спасибо за помощь разобрался, не хватало модуля p5-DBD-mysql, все таки в статье надо у помянуть про это модуль чтобы не наступали на грабли в будущем другие :razz: !!! Спасибо за помощь!!!

  6. denis, 2 июля 2009 г. в 9:44

    Здравствуйте!
    У меня aimsniff не пишет в базу :sad:
    Мой конфиг aimSniff.cfg:

    dev=em0
    filter='tcp and port 3128'
    daemon=1
    host=localhost
    database=aimsniff
    user=aimsniff
    password=aimsniff
    useSyslog=1

    С фильтром игрался. ничего не помогло. (менял порт)
    Если запустить так:

    /usr/local/bin/aimSniff.Cyr-005.pl -d=em0 --nodb >> /tmp/icq_messages_log.txt
    tail -f /tmp/icq_messages_log.txt

    Все работает.
    В чем может быть дело?

    • denis, 2 июля 2009 г. в 9:48

      Когда отправляю сообщения…
      tail -f /var/log/messages пишет

      Jul 2 09:46:24 root kernel: em0: promiscuous mode disabled
      Jul 2 09:46:24 root kernel: em0: promiscuous mode enabled
      Jul 2 09:46:35 root kernel: em0: promiscuous mode disabled
      Jul 2 09:46:35 root kernel: em0: promiscuous mode enabled

      т.е. получается 1 сообщение – 1 раз disable и enable
      Так и должно быть?

    • denis, 2 июля 2009 г. в 10:48

      Проблема решена. :smile:

      root# pkg_info | grep mysql-server
      mysql-server-5.0.81 Multithreaded SQL database (server)
      root# cd /usr/ports/
      root# make search name="p5-DBD-mysql50"
      Port: p5-DBD-mysql50-4.010
      Path: /usr/ports/databases/p5-DBD-mysql50
      Info: MySQL 5.0 driver for the Perl5 Database Interface (DBI)
      Maint: skv@FreeBSD.org
      B-deps: mysql-client-5.0.81 p5-DBI-1.60.7 p5-Storable-2.18 perl-5.8.9_2
      R-deps: mysql-client-5.0.81 p5-DBI-1.60.7 p5-Storable-2.18 perl-5.8.9_2
      WWW: http://www.sergeysl.ru/external/UEURRFsYTUNRB0ZWWR8HQ1BbGFlDAx1XXEERTiIjfUlVSBZFDRg=/
      root# cd /usr/ports/databases/p5-DBD-mysql50
      root# make && make install && make clean

  7. denis, 2 июля 2009 г. в 11:18

    А как сделать что бы функция срабатывала ucwords(gethostbyaddr($rs["ip"])), если DNS на другом сервере?

  8. Andrey, 8 июля 2009 г. в 8:57

    Здравствуйте. Установил всё по вашей статье, но есть одна проблемка. В базу не пишутся русские сообщения. При использовании команды aimSniff.Cyr-005.pl -d=rl0 --nodb всё прекрасно ловится и в консоли я наблюдаю, кто что пишет на русском языке, а вот в базу никак не идут они, поле message пустое. MySql 5.0, кодировка utf8. FreeBSD 7.1.

    • SergeySL, 8 июля 2009 г. в 10:27

      Здравствуйте!

      поле message пустое

      А все остальные поля заполнены? Или вообще в базу ничего не пишется?

      • Andrey, 8 июля 2009 г. в 10:34

        все остальные заполнены, если переписка на английском то всё нормально пишется.

        • SergeySL, 8 июля 2009 г. в 11:55

          все остальные заполнены, если переписка на английском то всё нормально пишется

          Однозначно, проблема в MySQL. Точнее сказать не могу. Начните с добавления log=... в секцию [mysqld] файла /etc/.my.cnf, если анализ лога ничего не даст, обращайтесь к документации MySQL.
          P.S.: пожалуйста напишите решение проблемы, когда разберетесь :roll:

          • Andrey, 8 июля 2009 г. в 12:17

            включил логи. В логах поле message=”……” колл-во точек равно колл-ву букв в слове. :???:

            • SergeySL, 8 июля 2009 г. в 13:14

              В логах поле message=”……” колл-во точек равно колл-ву букв в слове. :???:

              На вскидку, или MySQL собран без поддержки Unicode (сам когда ставил, кажется, ничего не менял на этот счет) или конфигурация сервера/базы чем-то не нравится скрипту. Еще раз отправляю Вас к документации MySQL. Сам ни с чем похожим не сталкивался. Кракозяблы бывали, а вот пустых мест не припоминаю :sad:

              • Andrey, 9 июля 2009 г. в 7:28

                Проблема не в MySQL. :smile: В текстовый файл тоже пишутся точечки. :roll:

                • SergeySL, 9 июля 2009 г. в 14:02

                  В текстовый файл тоже пишутся точечки

                  На экран русские буквы а в текстовый файл точки? Чудеса какие-то. p5-Unicode-Map8 установлен? Хотя без него и на экран русские буквы не выводятся нормально :roll:

                  • Andrey, 10 июля 2009 г. в 12:45

                    Мда, чудеса))) Собрал все на другой машине freeBSD 7.1 То же самое((( В какую сторону копать не знаю :roll:

                    • SergeySL, 10 июля 2009 г. в 13:25

                      Собрал все на другой машине freeBSD 7.1 То же самое

                      Получается, что в сторону настроек ОС. Если на экране все по русски, да еще и в базу что-то пишется, то значит все нужные модули есть. Может с настройками локали что-то не так или с настройками Perl’a :roll:

                    • Andrey, 10 июля 2009 г. в 17:57

                      Ура. Всё разобрался)) Забыл сказать что я делал всё удалённо через putty. А там русские буквы не отображаются. Изменил локаль на cp1251 и mysql собрал с поддержкой cp1251. Всё пишется, всё работет :grin:

                    • SergeySL, 10 июля 2009 г. в 20:57

                      Всё пишется, всё работет :grin:

                      Поздравляю! Как я и говорил, чудес не бывает :lol:

  9. denis, 8 июля 2009 г. в 11:35

    SergeySL Вопрос к Вам как в автору статьи.

    У меня такая проблема или не проблема это…
    У некоторых клиентов нету хендла.
    т.е. человек пишет моему юзеру хендл “to” пустой и если пользователь пишет человеку хендр “from” пустой.

    Возможно исправить?

    • SergeySL, 8 июля 2009 г. в 13:16

      У некоторых клиентов нету хендла. Т.е. человек пишет моему юзеру хендл “to” пустой и если пользователь пишет человеку хендр “from” пустой. Возможно исправить?

      Так бывает, если оба абонента находятся в одной физической сети, т.е., например, в Вашей локалке. На официальном форуме AimSniff написано, что это нормальное явление :???:

  10. Рома, 14 июля 2009 г. в 15:11

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

  11. Рома, 15 июля 2009 г. в 10:44

    А разве AimSniff пишет сообщения в базу не в UTF8?

    Хм..в скрипте и комментариях в нём указано о переводе cp1251 в koi8.
    Да и аська сообщения кидает в cp1251.

    Впрочем, перенастроил сервак на UTF8 – заработало=) Хотя в браузере кодировку ставит ср1251. Пойду читать про кодировки=)

    • SergeySL, 15 июля 2009 г. в 13:36

      Пойду читать про кодировки=)

      Я не знаю, какую кодировку он использует, однако:
      1. В дампе базы есть SET NAMES utf8;
      2. Без p5-Unicode-Map8 русские буквы не понимает.
      Поэтому предположил, что UTF8 :roll:

  12. Рома, 20 июля 2009 г. в 12:23

    Cделал следующее:
    1. aimSniff.Cyr-005.pl -d=em0 --nodb > aimsniff.txt (перевел вывод с консоли в файл)
    Открыл файл в – русские буквы видны в кодировке ср1251.
    2. Все кодировки сервера – utf8, браузер делает запрос, выдаются результаты, которые можно прочесть только в ср1251, в утф8 кириллица предстаёт вопросиками в чёрных ромбиках (браузер – Opera)
    3. Делаю в консоли select * from logs – кириллица примерно такая ©я?п?п?п?я?я?я?п?я?п?я
    4. Опытным путем установил, что сделав character_set_results=koi8r, нормальные результаты вижу и в консоли FreeBSD.
    ___________
    Вывод: Скрипт aimsniff работает отлично. Проблемы из-за кодировок MySQL и консоли FreeBSD.

    P.S. Не совсем отлично. Тоже не вижу своего UIN в логах, независимо от расположения собеседника. Пусто в полях From и To (соответственно в исходящих и входящих сообщениях)

  13. Andrew, 28 августа 2009 г. в 16:07

    Возникла проблема, скрипт настроен отлично. Сообщения ловит и записывает базу как на русском так и на инглише. Но вот для примера работы был взят клиент SIM с форматом сообщений UTF – их сниффер попросту пропускает и не парсит, при дебугге обрабатывает как просто пакет. Если же в SIM переключить формат сообщений в RTF – все начинает работать.

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

Изображения должны быть включены!

]]>