IСQ: разрешить нельзя запретить::Журнал СА 12.2005
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
20.12.2019г.
Просмотров: 1235
Комментарии: 0
Dr.Web: всё под контролем

 Читать далее...

04.12.2019г.
Просмотров: 1257
Комментарии: 0
Особенности сертификаций по этичному хакингу

 Читать далее...

28.05.2019г.
Просмотров: 3786
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 4008
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 3203
Комментарии: 0
Django 2 в примерах

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 IСQ: разрешить нельзя запретить

Архив номеров / 2005 / Выпуск №12 (37) / IСQ: разрешить нельзя запретить

Рубрика: Безопасность /  Сетевая безопасность

ПАВЕЛ ЗАКЛЯКОВ

IСQ: разрешить нельзя запретить

Если вы сомневаетесь, где правильнее в заголовке поставить запятую, то эта статья точно для вас. Из неё вы узнаете о сути возникновения проблемы, а мы предложим два оптимальных варианта решений, при которых «и волки сыты, и овцы целы».

Уж сколько раз твердили миру, что русскому человеку нельзя вот так просто сказать «нет» ни по какому вопросу, потому что мы можем обидеться и пользы от этого никому не будет. Также не следует забывать, что мы настолько изобретательная нация и у нас столько невостребованных талантов, что мы тут же начнём искать, как обойти тот или иной запрет. Самое интересное, что решение обязательно будет найдено. В то же время нас легко одурачить и ввести в заблуждение. Поэтому руководитель, решающий извечный вопрос: «ICQ в офисе: быть или не быть» должен учитывать все эти нюансы.

Принять решение бывает очень непросто, открывая доступ к ICQ, с одной стороны, вы принимаете популярные меры и зарабатываете дополнительные очки как руководитель, позволяете сотрудникам общаться по деловым вопросам с помощью этого замечательного средства с партнёрами. Экономите время фирмы и нервы сотрудников. Общение по ICQ – это быстро и удобно. Телефон не занят звонками по мелким вопросам. Если человек отошёл с рабочего места – сообщения попадают в очередь. Удобно и выгодно общаться с оппонентами из других городов, а тем более других стран. С другой стороны, вы рискуете тем, что некоторые сотрудники будут отвлекаться от работы личным общением.

Принимая противоположное решение и закрывая доступ, вы должны понимать, что без разъяснительной работы среди персонала есть возможность потерять кадры, также не стоит забывать закон Нейсдра, что «можно сделать защиту от дурака, но только от неизобретательного».

Таблица. Основные доводы «за» и «против» использования ICQ

Разрешить ICQ

Запретить ICQ

«+»:  Простота, быстрота и удобство общения с постоянными партнёрами, меньше проблем и бюрократии.

«+»:  Ниже затраты на телефонные переговоры, телефонные линии меньше заняты.

«+»:  Популярная мера.

«+»:  Короткое общение снимает стресс.

«-»:   Угроза безопасности: возможна утечка нежелательной информации.

«-»:   Угроза безопасности: если программу ICQ-клиента ставит пользователь – возможны вирусы.

«-»:   Отвлечение от основной работы и «болтовня» не по делу.

«+»:  Сотрудники не будутотвлекаться от работы.

«-»:   Угроза безопасности: есть вероятность появления «левых» шлюзов в Интернет, в обход основного канала.

«-»:   Повышение уровня занятости телефонных линий и рост расходов на связь.

«-»:   Не популярная мера.

«-»:   Больше времени тратится на общение с труднодоступными и удалёнными партнёрами.

«-»:   Психологический момент запрета для тех, кто привык пользоваться.

«-»:   Затраты времени сотрудников на обдумывание вопроса «Как обмануть систему?».

«-»:   Есть небольшая вероятность увольнения сотрудников.

Средств по обходу «закрытой ICQ» на сегодня масса и постоянно придумываются новые. Так, если вы закрыли стандартный для ICQ порт 5190, то программа, путём небольших усилий, без проблем умеет работать по другим портам. Если вы закрыли доступ к основным серверам, то всегда можно найти альтернативные, либо воспользоваться прокси. Если же вы закрыли доступ к прокси на обычных портах, то пользователь может использовать какой-нибудь CGI-proxy [1-3], установленный добрым дядей на далёком сервере. Если есть удалённый хостинг с Perl, то можно сделать ICQ самому (http://www.gonzo.kiev.ua/projects/vicq), но это не так просто как воспользоваться готовым веб-сайтом, поддерживающим общение по ICQ. Именно по ICQ, а не только между пользователями сайта.

До последнего времени работал веб-проект www.aska.ru, для того чтобы воспользоваться своей ICQ, надо было просто зайти на этот сайт и ввести свой логин и пароль. Сегодня работающим проектом является http://911.ru. Воспользоваться им под силу даже персоналу, далёкому от техники. Аналогичный сервис под названием icq2go есть и на официальном сайте ICQ. Если официальный сайт можно постараться закрыть, то не стоит думать, что если закрыли ICQ на всех портах, то и закроют все известные веб-ICQ, а также будут постоянно отслеживать появление новых. Практика жизни показывает, что это не так даже в банках. В дело вступает человеческий фактор. Дотошных админов, закрывающих аськи, нет по той причине, что все они получают либо небольшую, либо конечную зарплату, в то время как у них обычно полно других дел. Однако следует хорошо понимать, что уж если кто-то необоснованно чем-то насолил админу, то он скорее из принципа, с особой тщательностью и забесплатно, выполнит указание руководства и всё закроет по максимуму.

Другие подобные сайты появляются постоянно и регулярно и так будет и дальше, поскольку это хорошая возможность привлечь посетителей на свой сайт, чтобы показывать баннеры и зарабатывать на этом деньги. Например, на момент написания статьи веб-ICQ можно было найти на http://www.domeni.info, http://www.riska.ru/modules.php?name=web_icq и др. При этом, если эти сайты окажутся закрыты, то к ним также можно обращаться через всякие анонимайзеры и cgi-proxy, которые аналогично «множатся и дохнут как мухи». В общем, это скорее философский вопрос борьбы оружия и брони. Для наглядности подытожим всё вышенаписанное в виде таблицы.

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

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

Второй вариант решения проблемы попроще, его практическое решение мы сегодня рассмотрим.

Интерактивный фильтрующий ICQ-прокси-сервер

Не помню, как давно я попал на страничку Александра Шутко с его проектом IServerd [4] по созданию ICQ-сервера на базе Linux/*BSD с хранением всех сообщений в БД PostgreSQL, но именно в тот момент я понял, насколько этот проект интересен и куда его можно развить. Как мне кажется, на базе данного проекта сделать предлагаемую реализацию будет гораздо проще. Также на сайте [4] имеется достаточно информации по протоколам ICQ и всем с ними связанным.

Если можно сделать свой собственный сервер ICQ и обязать пользователей оправлять сообщения через него, то почему нельзя сделать клиентскую часть на том же сервере, которая, маскируясь под того или иного пользователя, подключалась бы к настоящим серверам от его имени. При этом клиентская часть могла бы получать сообщения и помещать их во внутреннюю БД, делая их доступными для внутреннего пользования. Также она бы могла отправлять сообщения во внешний мир. Клиентов, в том числе и распространяемых под лицензией GNU Public License, множество. Значит, реализация этой идеи лишь дело времени и желания.

Теперь, если предположить что идея реализовалась и мы имеем рабочий ICQ-прокси-сервер, то почему мы не можем сделать на нём фильтрацию сообщений (см. рис. 1)?

Рисунок 1. Схема фильтрации сообщений

Рисунок 1. Схема фильтрации сообщений

Руководитель, отвечающий за то, кому можно пользоваться ICQ, а кому нет, через специальную форму администрирования в определённую табличку БД прописывает разрешённые ICQ-контакты. Например, для пользователей отдела бухгалтерии, кому с кем можно общаться. Также прописываются разрешённые контакты для каждого ICQ-пользователя из отдела продаж, с кем они могут общаться, аналогично и для всех остальных отделов. Если пользователю по долгу службы нужна ICQ, то с разрешёнными контактами работа идёт в прозрачном режиме без каких-либо проблем. В то же время, общение с другими (не разрешёнными) пользователями фильтруется. А чтобы сообщения не терялись, сервер может высылать ответные сообщения о недоставке внешним пользователям. Например: «Ваше сообщение «.....», отправленное пользователю Ivanov нашей сети, не было доставлено, так как общение по ICQ в рабочее время на фирме XXXXX запрещено решением руководства №148 от 29.09.2005».

Внутренним пользователям может выдаваться сообщение другого содержания, например «Общение с пользователем ICQ 32323232 вам запрещено, если общение вам необходимо по работе – обратитесь к начальнику IT-отдела для получения разрешения». Как вариант, можно сделать временные рамки, когда будет работать фильтрация, скажем с 9 до 18. Можно даже учесть обеденный перерыв. А фильтруемые сообщения разумнее не выбрасывать, а сохранять в буфер, чтобы их можно было получить в разрешённый для работы интервал времени.

Как появится возможность, планирую создать проект и заняться реализацией задуманного. Даже если меня кто-то опередит и создаст свой проект раньше, то пишите, я с удовольствием стану его участником. Форум журнала (http://samag.ru/cgi-bin/yabb/YaBB.pl) – отличное место для старта описанной идеи.

Просмотр сообщений ICQ

Если фильтрующий прокси-сервер может работать без участия людей и обойти его при грамотной реализации невозможно, то данная схема более простая и более лояльная. Также она требует сдерживающего фактора вроде человека на случай, если кто-то будет превышать рамки допустимого в общении и будет сильно отвлекаться от работы. Как говорится: «на то и щука, чтобы карась не дремал».

Я не психолог и не кадровый работник, чтобы оценить, какая из двух схем более эффективна с точки зрения мотивации сотрудников к работе, но могу предположить, что в той или иной степени полезны будут обе. Все запреты обычно исходят не из соображений «запретить из принципа» (хотя и такое бывает), а скорее из разумности и носят статистический характер. Как бы мы ни хотели, но от теории вероятностей и нормального распределения нам никуда не уйти потому как это наша жизнь. Мы, люди – «аналоговые существа», а не цифровые компьютеры с нулями и единицами. Хотя, насколько компьютеры цифровые можно поспорить, для этого достаточно посмотреть на нечёткую логику, нейронные сети и на те же «прямоугольные» тактовые импульсы в увеличении и убедиться, что они никакие не прямоугольные, как это принято считать при первом приближении. Нельзя нам сказать «0», то есть «нет», достаточно вспомнить известную русскую поговорку «если нельзя, но очень хочется, то можно», чем вам не иллюстрация выбросов за пределы интервала в три сигма при нормальном распределении (см. рис. 2)?

Рисунок 2. Нормальное распределение. «Всплески» превышающие утроенное средне квадратическое отклонение  можно считать практически невозможными [18]

Рисунок 2. Нормальное распределение. «Всплески» превышающие утроенное средне квадратическое отклонение

можно считать практически невозможными [18]

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

Например, нет гарантии, что какой-нибудь продвинутый пользователь не подключит к своему компьютеру телефон Sky-Link или GPRS с целью обойти ваш запрет по ICQ и тогда ваши чрезмерные усилия приведут к появлению лишнего шлюза из глобальной сети в локальную, что вряд ли одобрит служба безопасности фирмы. Никто в жизни не будет закрывать выпускной клапан у скороварки, так как её от этого может разорвать. Согласитесь, ситуации очень похожие. Поэтому, «если какое-то движение не поддаётся вашему контролю, то надо его возглавить!», чем мы займёмся.

Мы создадим страничку, на которой руководство или контролирующее лицо, а также сами пользователи, смогут смотреть свои и чужие сообщения. В результате просмотра будет получен однозначный ответ «а по каким вопросам общаются пользователи сети, не отвлекаются ли они от работы?». При этом можно публично и «прозрачно» наказывать, либо отчитывать на общих собраниях тех или иных провинившихся пользователей. И тут, при грамотной реализации сдерживающего фактора («кнута», а возможность общения – это «пряник»), реализуется принцип свободы выбора, при котором психологически люди себя чувствуют лучше, чем в окружении железных запретов. Лучше чувствуют – значит есть вероятность, что лучше будут работать.

Чем лучше хватать ICQ-сообщения?

Я не хочу обсуждать вопросы этичности, морали, тайны переписки и законности, каждый на эту тему пусть подумает самостоятельно, но программ, реализующих перехват и показ ICQ сообщений на сегодня существует множество. Вот лишь ссылки [5-9] на некоторые наиболее популярные из них. Из массы просмотренных программ не подошла ни одна по тем или иным причинам. Почти все программы работают под Windows и не имеют исходных текстов, то есть что-то подправить и настроить под собственные запросы будет сложно. Помимо этого, многие программы коммерческие, а их «триальные» и урезанные версии не самое лучшее решение.

Перехватчиков много по той причине, что все хотят заработать на этом денег, а написать такую программу специалисту не очень сложно. ICQ-сообщения передаются по сети в открытом виде, поэтому даже вы у себя можете поставить эксперимент. Взять сетевой сниффер под любую операционную систему и запустить его, чтобы он перехватывал пакеты целиком, а не только заголовки. Далее, просто просматривая всё перехваченное глазами, вы быстро найдёте читаемый текст сообщений среди прочего нечитаемого мусора. Фактически все программы, делающие перехват ICQ-сообщений, просматривают данные за вас, находят сообщения и выводят вам их в красивых окошках и табличках. Иногда эти функции дополняются некоторым удобным сервисом вроде поиска, фильтрации и пр. Даже если «менюшечный» сервис очень удобен, выделять отдельный компьютер для просмотра ICQ-сообщений – это дорого, поэтому проще всего перехватывать их на шлюзе. А шлюзы обычно делают на FreeBSD или Linux, поэтому для нашей задачи надо найти что-то более подходящее, с открытым кодом, желательно под лицензией GPL и умеющее работать с базами данных.

Не желая писать программу, я занялся поиском, и единственное наиболее удачное, что я нашёл в сети, – это проект AIM Sniff [10] (автор Shawn Grimes). Поскольку ICQ была выкуплена фирмой America Online (AOL), то используемый в последних версиях ICQ протокол OSCAR (Open System for Communication in Realtime) и протокол AIM, как братья-близнецы, очень похожи, если не сказать, что это почти одно и то же, поэтому слово AIM не должно вас пугать. На сегодня AIM Sniff – это живой проект, с автором которого можно связаться по почте. На сайте имеется действующий форум, где не очень бурно обсуждаются различные проблемы проекта.

Реализация с помощью AIM Sniff

AIM Sniff, если говорить о версии 0.9d, – это небольшая (~43 Кб) программа на Perl – aimSniff.pl +6 дополнительных файлов:

  • ChangeLog – изменения в версиях.
  • README – документация и информация об установке;
  • aimsniff.config – шаблон конфигурационного файла.
  • install.pl – программа, помогающая автоматизировать процесс установки AIM Sniff и необходимых для него модулей (можно обойтись и без неё).
  • rc.aimsniff – скрипт автоматизации запуска для помещения в /etc/rc.d/init.d.
  • table.struct – SQL-файл, создающий необходимую структуру таблиц в БД MySQL.

Несмотря на кажущуюся первоначальную простоту, для успешного запуска потребуются, естественно, язык Perl, библиотека pcap (libpcap.tar.Z) и установленные модули:

  • Net::Pcap
  • NetPacket::Ethernet
  • NetPacket::IP
  • NetPacket::TCP
  • NetPacket::UDP
  • DBI

Все эти модули в процессе инсталляции могут быть установлены автоматически, если использовать install.pl. Однако я с неохотой доверяю подобным непроверенным средствам, так как не редки случаи сбоев, и предпочитаю ставить всё «руками», поэтапно решая задачу и более глубоко вникая в то, что происходит. Предполагая, что perl у вас скорее всего стоит, не будем рассматривать его установку, а рассмотрим ссылки, где можно взять всё остальное. Библиотеку pcap можно скачать тут: ftp://ftp.ee.lbl.gov/libpcap.tar.Z. Все остальные perl-модули стоит искать на http://search.cpan.org, вводя их имена в  окошке для поиска.

В результате поисков получаем конечные ссылки для скачивания:

Если вы решите сделать «по-своему» и не делать вывод в БД, то можете модуль DBD::mysql не скачивать и не ставить.

Ставим libpcap.tar.Z., для этого распаковываем архив, например, в директорию /progi:

# cat libpcap.tar.Z|tar -xvz -C /progi

Заходим внутрь:

# cd /progi/libpcap-0.4

Запускаем конфигурирование и создание Makefile под вашу систему:

# ./configure

Запускаем компиляцию:

# make

Устанавливаем скомпилированное:

# make install

Далее ставим модули. Каждый модуль аналогичным образом распаковываем:

# cat файл_архива_модуля.tar.gz|tar -xvz -C /progi

Заходим внутрь:

# cd /progi/директория_модуля

Запускаем конфигурирование и создание Makefile под вашу систему:

# perl Makefile.PL

Запускаем компиляцию:

# make

Как вариант можно запустить тесты:

# make test

однако смысла особого в этом нет, потому как у меня некоторые тесты не прошли, а программа работала правильно. Чтобы не тратить время, сразу после компиляции устанавливаем скомпилированные модули:

# make install

После того как все модули установлены, можно попытаться запустить файл aimSniff.pl, если все модули стоят, то он успешно запустится и начнёт перехватывать пакеты, если же чего-то не стоит, то вы увидите сообщение об ошибке, что-то вроде:

# ./aimSniff.pl

Can’t locate NetPacket/Ethernet.pm in @INC

(@INC contains: /usr/lib/perl5/5.6.1/i386-linux

/usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux

/usr/lib/perl5/site_perl/5.6.1

/usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.6.1/i386-linux

/usr/lib/perl5/vendor_perl/5.6.1

/usr/lib/perl5/vendor_perl .) at ./aimSniff.pl line 37.

BEGIN failed--compilation aborted at ./aimSniff.pl line 37.

или

# ./aimSniff.pl

Can’t locate Unicode/String.pm in @INC

(@INC contains: /usr/lib/perl5/5.6.1/i386-linux

/usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux

/usr/lib/perl5/site_perl/5.6.1

/usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.6.1/i386-linux /usr/lib/perl5/vendor_perl/5.6.1

/usr/lib/perl5/vendor_perl .) at ./aimSniff.pl line 42.     

BEGIN failed--compilation aborted at ./aimSniff.pl line 42.

откуда легко понять, какой модуль вы ещё не установили. Если программа запустилась без ошибок, выдав что-то вида:

#############################

AIM Sniff v. 0.9d

Developed by: Shawn Grimes

#############################

 

Beginning Sniff...

FILTER: port 5190

то это лишь только половина успеха, потому как пользователи зарубежной части Интернета часто и не знают о существовании великого и могучего русского языка, не говоря уже о наших изобретательных админах, талантливых программистах и прочих специалистах. Если в своё время мы подковали их блоху, а наши космонавты умудрились починить американский космический корабль за два часа, который, по словам американцев, они не смогли починить за два месяца, с помощью «молотка, зубила и какой-то матери», то от этого начинаешь чувствовать гордость за нашу нацию. После чего адаптация их программ под наши задачи кажется делом пустяковым.

С учётом того, что Shawn Grimes согласился разместить у себя на страничке http://www.aimsniff.com/downloads.html модифицированный aimSniff.pl, не имеет смысл рассказывать о том, что и как было исправлено, поэтому просто скачиваем «Cyrillic Patched AIM Sniff». Распаковываем архив и используем вместо aimSniff.pl файл aimSniff.Cyr.pl. Если же кому-то интересно, какие были внесены изменения, и есть желание присоединиться к проекту, то добро пожаловать на форум сайта.

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

Тестовый запуск

Как сказано в README, пробуем запустить программу в тестовом режиме:

# ./aimSniff.Cyr.pl -nodb

Возможно, будет проще отдельно на шлюзе временно запустить сниффер, который скинет в файл часть трафика:

# tcpdump -s 10000 -i eth0 src or dst port 5190 -w /path/traffic_dump.bin

(Учитывая, что MTU обычно 1500, snap length(ключ -s) в 10000 может показаться большим, но тут от этого явно хуже не будет.) после файл дампа переписать на компьютер с AIM Sniff и запустить команду:

# ./aimSniff.Cyr.pl --nodb -r=traffic_dump.bin

вы должны увидеть не экране перехваченные сообщения в читаемом виде.

При желании сообщения можно перенаправить в текстовый файл, например:

# ./aimSniff.Cyr.pl --nodb>>/var/www/html/icq_messages_log.txt

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

Если тестовый запуск прошёл успешно, то, возможно, имеет смысл скопировать файл aimSniff.Cyr.pl в директорию /usr/local/bin и запускать его в дальнейшем оттуда.

Запись сообщений в базу данных

AIM Sniff умеет работать с СУБД MySQL [15-17]. Предполагаю, эта СУБД у вас уже установлена.

Для организации сохранения в базу данных необходимо сделать три вещи:

  1. Создать базу данных aimsniff с необходимой структурой таблиц.
  2. Создать учётную запись пользователя для работы с БД aimsniff, установить ей пароль и дать соответствующие права.
  3. Прописать настройки в конфигурационный файл, чтобы не вводить их каждый раз в командной строчке.

Первая делается довольно просто, с консоли компьютера, где установлена СУБД MySQL, запускаем две команды:

# mysqladmin create aimsniff

# mysql aimsniff < table.struct

В результате, вначале будет создана БД aimsniff, а затем в ней четыре таблицы:

  • buddies
  • handles
  • logs
  • versions

Если у вас БД находится под паролем, то вторая команда будет:

# mysql -D aimsniff -u root -p [пароль_root_в_СУБД_MySQL]< table.struct

Пароль можно ввести как с консоли, так и в командной строчке. Подключившись к БД, мы можем увидеть, что структура таблиц не очень сложная:

# mysql -D aimsniff -u root -p

mysql> describe имя_таблицы;

Рисунок 3

Второй момент решается средствами СУБД при помощи следующей команды:

mysql> GRANT ALL ON aimsniff.* TO aimsniff@hotsname IDENTIFIED BY "пароль_к_БД_aimsniff";

где hostname – имя хоста, с которого будет осуществляться обращение к БД, скорее всего, у вас это будет localhost. Также не забудьте дать команду:

mysql> FLUSH PRIVILEGES;

чтобы изменения сразу вступили в силу.

Третье, конфигурационный файл не обязателен, но его использование упрощает жизнь, хотя он и является потенциально уязвимым местом в том случае, если там будут храниться пароли к БД. Проще всего воспользоваться шаблоном aimsniff.config. Если у вас есть возможность – напишите этот файл с нуля, потому как шаблон «кривой». Если же набирать лень – найдите утилиту dos2unix и с её помощью исправьте символы перевода строк с «0D 0A» на «0A»:

# dos2unix -n aimsniff.config aimsniff.conf

Если у вас нет под рукой dos2unix, возможно, вас выручит команда tr.

В остальном шаблон очень простой и маленький (менее одного экрана), поэтому заполнить все параметры, в том числе и относящиеся к БД: host, user, password, database, nodb, должно быть не сложно даже при отсутствии комментариев.

После проделанных шагов AIM Sniff можно запускать командой:

# /usr/local/bin/aimSniff.Cyr.pl -C=/путь/конфигурационный_файл.conf

Для постоянной работы программы это не очень удобно, потому как занимается консоль. Можно, конечно, запустить команду со знаком «&» в конце (повесив процесс выполняться в фоновом режиме) и «nohup» перед ней (на случай если вы соберётесь вдруг закрыть консоль) или даже запустить программу в режиме демона, указав ключ -D, но это не спасёт вас от сбоев и перезагрузок. Сбои надо отслеживать отдельно, например, написав небольшой скрипт и организовав его запуск через crontab. Этого мы делать не будем, а вот как организовать автоматический останов и запуск программы, рассмотрим ниже.

Автоматический запуск

Изобретать велосипед не придётся, воспользуемся стандартной системой многоуровневой загрузки, взятой из UNIX System V и используемой в RedHat Linux, Fedora Core и других дистрибутивах Linux. Для этого поместим файл rc.aimsniff в /etc/rc.d/init.d, переименовав в aimsniff:

# cp /progi/aimsniff-0.9d/rc.aimsniff /etc/rc.d/init.d/aimsniff

Установим атрибут выполнимости

# chmod +x /etc/rc.d/init.d/aimsniff

Далее, в зависимости от того, где у вас находится программа и её конфигурационный файл, правим в нём строку запуска:

/usr/local/bin/aimSniff.Cyr.pl -C=/usr/local/etc/aimsniff.conf

После чего запуск можно осуществлять командами:

# /etc/rc.d/init.d/aimsniff start

или

# service aimsniff start

а для остановки можно использовать те же команды с параметром stop. Далее необходимо сделать ссылки для требуемых уровней загрузки.

Если вы использовали install.pl для установки, последующие процедуры вам всё равно придётся проделать руками.

# ln -s ../init.d/aimsniff /etc/rc.d/rc3.d/S89aimsniff

# ln -s ../init.d/aimsniff /etc/rc.d/rc0.d/K10aimsniff

# ln -s ../init.d/aimsniff /etc/rc.d/rc6.d/K10aimsniff

Цифры 89 и 10 у вас могут быть другими. В моём случае они выбраны из тех соображений, что у меня СУБД MySQL и AIM Sniff расположены на одной машине, поэтому есть файлы S78mysqld и K12mysqld, отвечающие за запуск и останов MySQL. Получается: 10<12, а 89>78, то есть запуск AIM Sniff будет выполняться после того как стартовала база данных, а останов, наоборот, раньше.

В результате создания ссылок, система записи сообщений в БД должна автоматически стартовать на третьем уровне и завершать свою работу при переходе на нулевой (останов) или шестой (перезагрузка).

Просмотр перехваченных ICQ-сообщений из БД

После того как сообщения попали в БД, мы встречаемся с ещё одной проблемой – как их просматривать. Обычно эта проблема не стоит остро, потому как есть универсальный phpMyAdmin[19]. В нашем случае данные довольно просты, поэтому напишем небольшой скрипт на php. Он будет подключаться к БД, делать запрос на получение данных и далее будет печатать на экран их в виде таблицы. Файл назовём script1.php

<html>

<head>

<title>ICQ message database</title>

<meta name="content" http-equiv="Content-Type" CONTENT="text/html; charset=koi8-r">

</head>

<body>

<?php

$server="localhost:3306";

$login="aimsniff";

$password="aimpassword";

$conn=mysql_connect($server,$login,$password);

$color=1;

$request="SELECT * FROM logs LIMIT 100";

$result=mysql("aimsniff",$request,$conn);

echo "<table border=\"1\">";

echo "<tr align=\"center\" bgcolor=\"lightgrey\"><td>id</td>

          <td>timestamp</td>

          <td>local IP</td>

          <td>from UID</td>

          <td>to UIN</td>

          <td>direction</td>

          <td>message</td></tr>»;

while($row=mysql_fetch_array($result))

  {

   if ($color) { echo "<tr bgcolor=\"#FBE0E0\">"; $color=0; }

          else { echo "<tr>»; $color=1; }

   echo "<td>".$row[0]."</td>";

   echo "<td>".$row[1]."</td>";

   echo "<td>".$row[2]."</td>";

   echo "<td>".$row[3]."</td>";

   echo "<td>".$row[4]."</td>";

    if ($row[5]=="00040007") { echo "<td>&lt;--</td>"; }

    elseif ($row[5]=="00040006") { echo "<td>--&gt;</td>"; }

    else { echo "<td>".$row[5]."</td>"; }

   echo "<td>".$row[6]."</td>";

   echo "</tr>";             

  }

echo "</table>";

?>

</body>

</html>

Результат работы скрипта см. на рис. 3.

Рисунок 4. Результаты работы программы script1.php

Рисунок 4. Результаты работы программы script1.php

Меняя запросы в переменной $request, например на «SELECT * FROM logs WHERE id>100 LIMIT 100», можно вывести следующие 100 сообщений или вывести все сообщения за последние три дня: «SELECT * FROM logs WHERE unix_timestamp(now())-unix_timestamp(ts)<3*24*60*60». В целом, если вы умеете писать запросы к БД, то всё довольно просто и все дальнейшие возможности находятся в ваших руках.

Лучшее – враг хорошего

Для удобства использования можно создать две таблицы в БД. В одной, например, можно хранить IP-адреса (если они статические) локальных пользователей с их именами и внутренними телефонами.

CREATE TABLE "localusers" (

"ip" VARCHAR(20) NOT NULL ,

"name" VARCHAR(30) NOT NULL ,

"phone" VARCHAR(10) NOT NULL ,

PRIMARY KEY ("ip")

);

А в другой – IСQ-номера с никами или комментариями.

CREATE TABLE "nicnames" (

"icq" VARCHAR(255) NOT NULL ,

"nickname" VARCHAR(50) NOT NULL ,

PRIMARY KEY ("icq")

);

(Типы полей не оптимальны, они выбраны из соображения совместимости с имеющейся БД aimsniff.)

Теперь вместо непонятных IP-адресов можно выводить вполне понятные имена и номера телефонов. Скажем, чтобы можно было позвонить нерадивому пользователю и напомнить о том, что на работе работают, а не болтают по личным вопросам.

Варианты реализации могут быть разными. Мне кажется, что проще сделать несколько усложнённый запрос к БД, содержащий в себе, например, левое внешнее объединение:

$request="SELECT logs.id,logs.ts,logs.ip,logs.fromHandle,

                 logs.handle,logs.direction,logs.message,

                 localusers.name

          FROM logs LEFT JOIN localusers ON logs.ip=localusers.ip LIMIT 100";

Вывод будет на один столбец больше (чем в скрипте). В «лишнем» столбце будет указываться имя локального пользователя.

Для того чтобы его увидеть на веб-странице, надо просто дописать ещё одну строчку:

echo "".$row[6]."";

Думаю, и так понятно где. Как вариант, количество столбцов можно не увеличивать. Например, в графе «local IP» можно выводить имена, если они известны, либо IP-адреса в противном случае. Наглядно данный вопрос реализуется следующим кодом:

if ($row[7]) {   echo "".$row[7]."";   }

    else { echo "".$row[2]."";

Кому-то может показаться более удобным использование имён столбцов в том виде, как они выводятся из базы данных, вместо подсчёта номеров начиная с нуля, тогда вывод будет выглядеть так:

if ($row["name"]) {   echo "".$row["name"]."";   }

    else { echo "".$row["ip"].""; }

Аналогичным образом можно заменить номера ICQ никами из другой таблицы. Те же, кто хорошо знаком с языком SQL, могут попробовать решить эту задачу средствами СУБД.

Web AIM Sniff (WAS)

На сайте проекта www.aimsniff.com вы также можете найти Web AIM Sniff (WAS) – это небольшая программка, точнее несколько скриптов на PHP, специально написанных для просмотра сообщений из БД, создаваемой программой AIM Sniff. Поставляются они отдельно, и для их работы необходимо, чтобы у вас уже были установлены язык PHP с поддержкой MySQL и веб-сервер Apache. По сути это то, во что может развиться написание вами собственного скрипта. Скачать WAS можно на том же сайте в разделе Download. Однако на сегодня программа (во всех её версиях) является «сырой» и рекомендовать её читателям мне не хотелось бы, поскольку она адаптирована для AIM, пока ещё не понимает русских букв и не может даже отобразить сообщения, хотя может строить красивые графики. Shawn Grimes не очень оперативно, но реагирует на замечания и присылаемые ему патчи, так что есть надежда, что в будущем (может, и благодаря вашим усилиям) ситуация изменится, так что следите за сайтом и форумом.

Если же кто-то захочет рискнуть и разобраться с проектом WAS самостоятельно, вам пригодятся несколько советов:

  • Скачивайте CVS-версию, там исправлена ошибка деления на 0 при отсутствии сообщений в БД.
  • WAS использует упрощенные теги «» (вместо более правильных «»), поэтому необходимо их включить. Для этого надо в /etc/php.ini прописать «short_open_tag = On».
  • Конфигурационный файл .config.php. Если вы не можете сменить конфигурацию во вкладке «admin», а туда вы, наверно, обратитесь в первую очередь, чтобы прописать вашу БД, то, скорее всего, у вас проблемы с правами доступа к файлу конфигурации. Решить эту проблему можно, задав для файла группу apache (так как от этого имени скорее всего работает ваш веб-сервер, а значит и все выполняемые им скрипты, т.е. в том числе и WAS) и открыть для на неё разрешение на запись:

# chgrp apache .config.php

# chgrp g+w .config.php

  • Вывод сообщений, содержащих кириллицу, может не работать так, как вы этого ожидаете, по той причине, что все php-файлы в своём заголовке содержат другую кодировку.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

Вопрос решается заменой кодировки на koi8-r (или windows-1251 в зависимости от вашего случая) во всех неправильно отображающих php-файлах. Также в aimSniff.Cyr.pl есть пара строчек, отвечающих за перекодирование русских букв, которые без проблем находятся при просмотре «вручную», либо через поиск по ключевым словам «translation» или «cp1251». Наверное, было бы разумнее везде использовать utf-8, но процесс перехода на эту кодировку, особенно на старых серверах, идёт со скрипом и без энтузиазма.

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

WHERE fromHandle <>"1111112" AND handle<>"1111112"

При желании можно вообще сделать два скрипта, а в идеале, можно усложнить БД, организовав некоторое подобие мандатной политики безопасности, присвоив каждому номеру ICQ свой уровень в отдельной таблице. Аналогичные уровни можно присвоить и просматривающим. Можно копнуть ещё глубже и внести изменения в AIM Sniff, тогда сообщения даже в базу данных попадать не будут. Тут тоже всё зависит от вашей фантазии и возможностей, например, для удобства можно даже какое-нибудь ключевое слово или последовательность, встречая которые в теле сообщения разборщик не будет вносить сообщения в базу.

Замечание 2. Если просматривающий скрипт вместе с веб-сервером будут запущены на шлюзе, имеющем доступ из сети Интернет, то может возникнуть необходимость создания защиты от просмотра сообщений «чужим глазом». Если доступ к веб-серверу снаружи не нужен, то вопрос можно решить парой правил для iptables:

# iptables -I INPUT -i $exterbal_interface -p tcp -d $perver_ip --dport 80 -j DROP

# iptables -I INPUT -i $exterbal_interface -p tcp -d $perver_ip --dport 443 -j DROP

но чаще доступ нужен и снаружи тоже. В этом случае ограничивать доступ придётся правами самого веб-сервера. Для этого правим конфигурационный файл /etc/httpd/conf/httpd.conf, дописав туда строчки:

<Directory /var/www/html/was>

    Order deny,allow

    Deny from all

    Allow from 192.168.0.0/255.255.255.0

</Directory>

где 192.168.0.0/255.255.255.0 – есть адреса локальной сети, откуда доступ разрешён. Если диапазон внутренних адресов жёстко не определён или также нужен доступ снаружи, скажем из других филиалов, то можно организовать парольную защиту. Для этого необходимо создать файл с учётными записями пользователей, куда занести информацию, например, о пользователе user1:

# htpasswd -c /путь/файл_с_учётными_записями user1

После запуска команды необходимо ввести пароль. (Если файл с учётными записями уже имеется, ключ -c следует опустить.) После, в конфигурационном файле веб-сервера пишем:

<Directory /var/www/html/was>

    AuthType Basic

    AuthName "Web AIM Shiff"

    AuthUserFile /путь/файл_с_учётными_записями

    Require user user1

    AllowOverride None

</Directory>

При желании можно совместить проверку IP-адреса, откуда идёт обращение с авторизацией. После перезапуска веб-сервера изменения должны вступить в силу. Сделать это можно командой:

# /etc/rc.d/init.d/httpd restart

После чего логин и пароль от системы просмотра надо раздать всем сотрудникам, например, объявив на общем собрании, тогда ничьи права не будут нарушены.

Заключение

Хотелось бы верить, что всё изложенное выше будет использоваться только с благими намерениями, а моральные качества и авторитет системного администратора останутся на высоте. Руководители сделают правильные выводы о том, разрешать пользоваться ICQ или нет, а жизнь пользователей в новом году станет только лучше.

Рисунок 4. Cкриншот сайта www.aimsniff.org

Рисунок 4. Cкриншот сайта www.aimsniff.org

Спасибо за помощь в исправлении ошибок и координацию моих мыслей: Рыжакову Глебу, tuziha и Realtex-sux.

Литература, ссылки:

  1. PHProxy – http://sourceforge.net/projects/poxy.
  2. Simple Browser Proxy – http://sourceforge.net/projects/sbp.
  3. CGIProxy – http://www.jmarshall.com/tools/cgiproxy.
  4. IServerd project (Александр В. Шутко) – http://iserverd.khstu.ru.
  5. IRC, EMail, SMB, MSN, AIM, ICQ sniffer – http://www.ufasoft.com/icqsnif.
  6. EtherBoss Monitor (for ICQ Monitoring) – http://www.etherboss.com/icq.
  7. Shadow IM Sniffer – ICQ Sniffer,MSN Sniffer, AOL Sniffer, Yahoo Sniffer – http://www.safety-lab.com/en/products/imsniffer.htm.
  8. Spy ICQ: SpyArsenal ICQ Logger – http://www.spyarsenal.com/spy-icq-sniffer.
  9. Network Sniffer: Give-Me-Too – invisible net sniffer – http://www.spyarsenal.com/network-sniffer.
  10. Проект Aim Sniff – http://www.aimsniff.comhttp://sourceforge.net/projects/aimsniff.
  11. ICQ2000 сделай сам – http://icq2000cc.hobi.ru/index.html.
  12. ICQ library icqlib – http://kicq.sourceforge.net/icqlib.shtml.
  13. Miranda Instant Messenger – http://www.miranda-im.org.
  14. Всё для &RQ – http://andrq.org.
  15. Леон Аткинсон. MySQL. Библиотека профессионала.: Пер. с англ. – М.: Издательский дом «Вильямс», 2002 г. (ISBN-5-8459-0291-6).
  16. Поль Дюбуа. MySQL, 2-е изд.: Пер. с англ. – М.: Издательский дом «Вильямс», 2004 г. (ISBN-5-8459-0515-X)б
  17. Компания MySQL AB. MySQL. Справочник по языку. : Пер. с англ. – М.: Издательский дом «Вильямс», 2005 г. (ISBN 5-8459-0804-3).
  18. Гмурман В.Е. Теория вероятностей и математическая статистика. Учеб. пособие для вузов. Изд 7-е, стер. – М.:Высш. шк., 2000 г. (ISBN 5-06-003464-X).
  19. phpMyAdmin MySQL Database Administration Tool – http://www.phpmyadmin.net.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru