FreeBSD: Мониторинг ICQ-переписки с помощью AimSniff
Внимание! Перед развертыванием и использованием описанной ниже системы внимательно изучите статьи 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. Спасибо за визит!
Привет! Настроил aimsniff, при попытке открыть was (
admin.php) скрипт просто предлагает сохраниться как файл и все. Что делать, не подскажешь на вскидку, пожалуйста? Спасибо.Привет! Настраивать Web-сервер на корректную обработку PHP-скриптов
Добрый день.
Очень помогла статья icqsniff. Большое Спасибо. Все работает, за исключением следующего… Если юзеры сидят в квипе, то все сообщения отлавливаются и скадываются в базу. Если люди используют icq клиента встроенного в мейл агента, то sniff ловит только кракозябрики и не важно на каком языке написанно сообщение на инглише или на русском.
Подскажите как можно решить данную проблему?
Добрый вечер!
У меня на работе все пользуются Qip’ом, поэтому с проблемой не сталкивался, и подсказать, соответственно, нечего. А вообще нужно копать в сторону кодировок, используемых мейл@агентом, или заставлять юзеров использовать строго определенный софт (у нас именно так)
Совсем недавно решил исправить данную проблему, есть вариант работающего скрипта, исправлены многие глюки при ловле сообщений ICQ. С qip действительно проблем не наблюдалось. Готов предложить свой вариант скрипта aimSniff.Cyr-005.pl
Позже после окончательного тестирования выложить его в сети официально
Думаю, многим это поможет
Ждем с нетерпением
Было бы очень интересно посмотреть исправления, уже который день бьюсь над проблемой русской кодировки в ICQ 6.5 или был бы рад пообщаться на эту тему…
Кажется, GODshadow забыл о своем обещании или просто пошутил
Вобщем сам разобрался, смотреть тут
http://www.opennet.ru/openforum/vsluhforumID10/2767.html
Спасибо, думаю, многим пригодится!
Выложите пожалуйста (для тестирования)
Будьте внимательнее:
Привет, у меня проблема записи логов в базу не происходит, в консоли 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
Вопрос задан слишком расплывчато. Вы правильно задали имя интерфейса? Вы используете прокси?
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
Выполните команду
ifconfigи напишите, что она выдает.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
aimSniff.Cyr-005.pl -d=age0 -f='tcp and port 3128' --nodbработает?Выдает перехваченные сообщения в консоль?
да вот сейчас выдает перехватывает сообщения, спасибо,
а почему он тогда не берет эти настройки с конфигунационого файла, пути прописаны правильные к файлу
Ответа конечно я наверное не дождусь
Ну почему же?
Вариантов всего два: не правильные пути и / или не правильные права доступа к файлу конфигурации (это если запускаете не под root’ом).
Спасибо за помощь разобрался, не хватало модуля p5-DBD-mysql, все таки в статье надо у помянуть про это модуль чтобы не наступали на грабли в будущем другие
!!! Спасибо за помощь!!!
Здесь уже затрагивался этот вопрос
Всегда пожалуйста. Я рад, что все получилось
Здравствуйте!
У меня aimsniff не пишет в базу
Мой конфиг
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
Все работает.
В чем может быть дело?
Когда отправляю сообщения…
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Так и должно быть?
Проблема решена.
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
А как сделать что бы функция срабатывала
ucwords(gethostbyaddr($rs["ip"])), если DNS на другом сервере?Здравствуйте!
Настроить резолвинг имен на этом сервере
cat resolv.conf
nameserver 192.168.0.1
это и есть DNS
Еще есть
host.confиnsswitch.conf(в них задаются наборы и порядок опроса служб разрешения имен). Ну и файрволы должны иметь соответствующие правила.Здравствуйте. Установил всё по вашей статье, но есть одна проблемка. В базу не пишутся русские сообщения. При использовании команды
aimSniff.Cyr-005.pl -d=rl0 --nodbвсё прекрасно ловится и в консоли я наблюдаю, кто что пишет на русском языке, а вот в базу никак не идут они, полеmessageпустое. MySql 5.0, кодировка utf8. FreeBSD 7.1.Здравствуйте!
А все остальные поля заполнены? Или вообще в базу ничего не пишется?
все остальные заполнены, если переписка на английском то всё нормально пишется.
Однозначно, проблема в MySQL. Точнее сказать не могу. Начните с добавления
log=...в секцию[mysqld]файла/etc/.my.cnf, если анализ лога ничего не даст, обращайтесь к документации MySQL.P.S.: пожалуйста напишите решение проблемы, когда разберетесь
включил логи. В логах поле message=”……” колл-во точек равно колл-ву букв в слове.
На вскидку, или MySQL собран без поддержки Unicode (сам когда ставил, кажется, ничего не менял на этот счет) или конфигурация сервера/базы чем-то не нравится скрипту. Еще раз отправляю Вас к документации MySQL. Сам ни с чем похожим не сталкивался. Кракозяблы бывали, а вот пустых мест не припоминаю
Проблема не в MySQL.
В текстовый файл тоже пишутся точечки.
На экран русские буквы а в текстовый файл точки? Чудеса какие-то.
p5-Unicode-Map8установлен? Хотя без него и на экран русские буквы не выводятся нормальноМда, чудеса))) Собрал все на другой машине freeBSD 7.1 То же самое((( В какую сторону копать не знаю
Получается, что в сторону настроек ОС. Если на экране все по русски, да еще и в базу что-то пишется, то значит все нужные модули есть. Может с настройками локали что-то не так или с настройками Perl’a
Ура. Всё разобрался)) Забыл сказать что я делал всё удалённо через putty. А там русские буквы не отображаются. Изменил локаль на cp1251 и mysql собрал с поддержкой cp1251. Всё пишется, всё работет
Поздравляю! Как я и говорил, чудес не бывает
SergeySL Вопрос к Вам как в автору статьи.
У меня такая проблема или не проблема это…
У некоторых клиентов нету хендла.
т.е. человек пишет моему юзеру хендл “to” пустой и если пользователь пишет человеку хендр “from” пустой.
Возможно исправить?
Так бывает, если оба абонента находятся в одной физической сети, т.е., например, в Вашей локалке. На официальном форуме AimSniff написано, что это нормальное явление
У меня наоборот!
У себя такого не наблюдал. Смотрите официальный форум AimSniff, думаю, что там должен быть ответ
У меня такая же фигня наблюдается. Нет ни одной строчки, где были бы заполнены и From и To.
Форум пока не работает ((
Такое возможно из-за некорректной настройки фильтра. Это не единственная причина, но сам сталкивался
Друзья! Подскажите, пожалуйста, такую вещь – хочу перевести кодировку БД в cp1251 – подправил скрипт
aimSniff.Cyr-005.pl, чтобы он не переводил ср1251 в кои8, в консоли всё чудесно, в файлик всё скидывается чудесно. А вот в mysql всю кириллицу лупит вопросиками, причём mysql настроен полностью на ср1251. Куда копать?А разве AimSniff пишет сообщения в базу не в UTF8?
Хм..в скрипте и комментариях в нём указано о переводе cp1251 в koi8.
Да и аська сообщения кидает в cp1251.
Впрочем, перенастроил сервак на UTF8 – заработало=) Хотя в браузере кодировку ставит ср1251. Пойду читать про кодировки=)
Я не знаю, какую кодировку он использует, однако:
1. В дампе базы есть
SET NAMES utf8;2. Без
p5-Unicode-Map8русские буквы не понимает.Поэтому предположил, что UTF8
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 (соответственно в исходящих и входящих сообщениях)
Возникла проблема, скрипт настроен отлично. Сообщения ловит и записывает базу как на русском так и на инглише. Но вот для примера работы был взят клиент SIM с форматом сообщений UTF – их сниффер попросту пропускает и не парсит, при дебугге обрабатывает как просто пакет. Если же в SIM переключить формат сообщений в RTF – все начинает работать.