dini 02.02.2011 14:30

PythonСледим за народом

Как-то начальство поставило задачу узнать чем занимаются люди на рабочем месте и не сливают ли чего конкурентам. После раскопок ответов Гугла было принято решение писать своё. Описание сего чуда под катом.

Из возможностей:
1. Понимает ICQ и MRIM(Агент@Mail.ru), при этом вне зависимости от порта, разбор идёт на уровне протоколов.
2. Коректно разбирает кодировки сообщений(вроде как).

Системные требования:
1. Linux(пока только он, но это только пока)
2. nfqueue-bindings
3. Python
4. MySQL
5. Web-сервер с поддержкой CGI(для морды)

Установка и использование:
1

2
svn checkout http://imsniff.googlecode.com/svn/trunk/ imsniff

mysql --user=root mysql


Создаём базу, юзверя и таблицы:
 1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE DATABASE security;

GRANT ALL PRIVILEGES ON security.* TO sniff@localhost IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
USE security;
CREATE TABLE `sniff` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ip` varchar(20) DEFAULT NULL,
`proto` int(11) NOT NULL,
`from_handle` varchar(255) DEFAULT NULL,
`to_handle` varchar(255) DEFAULT NULL,
`msg` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `sniff_handle` (
`handle` varchar(255) DEFAULT NULL,
`ip` varchar(20) DEFAULT NULL,
`port` int(11) DEFAULT NULL,
`cookie` varchar(255) DEFAULT NULL,
UNIQUE KEY `handle` (`handle`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Далее:
1

2
iptables -A INPUT -m string --algo bm --from 51 --hex-string '|EF BE AD DE|' -j NFQUEUE

iptables -A OUTPUT -m string --algo bm --from 51 --hex-string '|EF BE AD DE|' -j NFQUEUE

Осторожно, отвалится "Агент"
1

2
cd imsniff

python imsniff.py -b


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

PS: Снифер снифает только кто кому и когда написал, никаких паролей!!!
Google+


Тэги: icq mrim python
+ 13 -
Похожие Поделиться

zz 02.02.2011 16:25 #
Тема поста интересна, но скудно описана. Не хочется все это устанавливать, только что бы узнать о возможностях. Добавьте, пожалуйста, информацию о самой системе (какую информацию она собирает) и скриншоты веб-интерфейса. Так же интересно про последовательность "EF BE AD DE": она встречается только в ICQ и MRIM? в каждом сообщении им-клиентов или только при авторизации? а ssl в ICQ и MRIM не может использоваться?
k1b 02.02.2011 16:54 #
Смотрите ниже.
jh 02.02.2011 16:47 #
не хотел бы у вас работать.
k1b 02.02.2011 16:53 #
1. Прозрачный перехват сообщений icq и mrim
2. Если вы видели таблицу на html - вы видели веб интерфейс. Украшательств нет. Сугубо инфа кто кому и когда что написал, и что ему написали в ответ.
3. Последовательность EF BE AD DE встречается в mrim. За подробностями в гугл и tcpdump.
4. SSL может использоваться, но отлавливаться не будет. Курим ssldump и мат.часть.
dini 02.02.2011 17:14 #
Красивый ответ, честно говоря более объёмно трудно ответить. Спасибо!!!
jh 03.02.2011 08:07 #
Курим ssldump и мат.часть.

т.е. jabber не спасет?
andreas 03.02.2011 07:37 #
Последовательность EF BE AD DE есть ничто иное как 0xDEADBEEF в big endian порядке (т.е. dead beef, "мёртвая говядина") и используется очень часто как magic number, просто потому что красиво звучит/выглядит в дампе. Так что по идее этот скрипт должен ловить не только icq но и довольно много других протоколов...

P.S. не стал бы у вас работать
DEViANCE 03.02.2011 10:52 #
ИМХО, если кто-то поставит перед собой цель слить инфу, врядли он будет делать это посредством мессенджеров. Гораздо проще скопировать на флешку или отправить почтой... А вообще, параноики сложные люди. Не хотел бы работать в конторе, в которой постоянно за мной следят. А вдруг я с женой о личном общаюсь? Зачем это кому-то знать?
Dark_SS 03.02.2011 11:07 #
А зачем вы это делаете в рабочее время?
PS Я тоже на работе о личном общаюсь, но возможность слежки учитываю.
DEViANCE 03.02.2011 16:37 #
Я не писал, что я этим на работе занимаюсь :) Всего лишь предположил. На работе работать нужно :)
s47 03.02.2011 20:49 #
А зачем Вам родственники? Ведь у них беда может быть в рабочее время!
То что некоторые не умеют работать и занимаются в рабочее время личными делами никому не даёт право лишать личной жизни и "прослушивать", это элементарно неприлично!!!
Да и степень КПД зависит не от того сколько он проговорил на личные темы! Можно сколько угодно потратить на личное время и потом своей работой в разы перекрыть это "потерянно" время.
Кстати, зачастую те кто занимаются контролем других или малополезны (потому и придумывают себе работу вместо полезных занятий) или у них комплекс 20/80 (причём они себя точно относят к категории 20 и не могут объективно взглянуть на действительность)
Dark_SS 03.02.2011 20:56 #
Если беда - позвонят. Хорошо хоть на моей работе не надо отключать мобильник. Да, неприлично, но таковы некоторые работодатели, и кроме увольнения выходов не видно. Я точно знаю, что моя производительность возрастает, если раз в час я отвлекаюсь минут на 5, но не каждый начальник это поймёт.
Dark_SS 03.02.2011 20:58 #
Я не побуждаю всех следить за всеми, но считаю, что работодатель может контролировать, как расходуются его деньги, которые уходят на оплату интернет-трафика и стационарного телефона.
s47 03.02.2011 22:22 #
По поводу 5 минут - это правило перекура, сам не курю, но на перекур всё равно периодически выхожу поскольку организму нужен отдых.
А для того чтобы НЕ следить на расход трафика настраивается политика раздачи интернета. У нас в конторе есть один комп отданный в голом виде в инет. Хоть порнуху смотри, если не стыдно перед всеми. И на результат после этого просмотра... А для всех остальных прокся с лимитом и резалкой.

И прослушка в любом виде это уголовное преступление.
dront78 03.02.2011 11:37 #
есть безлимитный мобильный интернет за 200 рэ в месяц. по крайней мере в дефолтСити. можно слить все что угодно и общаться с кем угодно - даже жена не заметит ;)
vkotovv 03.02.2011 17:39 #
А работники подписывают какие-либо документы? Или слежка без их ведома? Дело пахнет керосином.
Тоже не стал бы у вас работать. Лучше оценивать работу по достигнутому результату.
kstep 03.02.2011 18:52 #
К сожалению не все работодатели это понимают.
derfenix 03.02.2011 19:03 #
Так в случае чего - виноватым будешь ты, а не работодатель %)
jh 04.02.2011 06:14 #
у кого связи лучше, тот и не виноват:-)
kstep 04.02.2011 16:39 #
Я принципиально на таких не работаю.
warchief 06.02.2011 01:34 #
я просто не понимаю доколе чем руководствуется начальство? Не нравятся личные переговоры? Делаем как у меня на работе: все рабочие станции в домене, права на установку софта только у айти отдела. Всё остальное на тонких клиентах, которые кроме как подключаться к серверу терминалов ничего не умеют.
Плюс: админы занимаются своим делом, а не чтением личной переписки персонала.
andreas 09.02.2011 19:21 #
Skype не надо права админа для установки... что меня честно говоря очень удивило, но факт, поставил себе на работе скайп не прибегая к помощи админа. Вот такая "хакерская" говорилка. И этот скрипт с ним наверняка тоже ничего не сделает...
warchief 09.02.2011 21:35 #
Ога, скайп можно ставить без админа, если чесно, я ждал, что кто-то об этом напишет. Использование скайпа можно запретить через групповые политики и он работать не будет. Проверено.
dini 07.02.2011 21:03 #
Мне не интерестно читать кто кому и что пишет, для меня интерестна реализация, а читать... пусть читают те для кого это писалось. Для меня было интерестно узнать что, не смотря на то, что прописанно в документации по протоколу, "Агент" может слать сообщения и в CP-1251(по описанию единственная кодировка) и в UTF-8(понятно каким боком, но, исходя из описания, его быть не должно). Мне интерестно решать задачи.
PS: В штате конторы я не числюсь. начальство предупрежденно(правда не под роспись).
levin-a 09.02.2011 13:41 #
Подскажите, почему не запускается?

# python imsniff.py -b
/var/lib/python-support/python2.6/MySQLdb/__init__.py:34: DeprecationWarning: the sets module is deprecated
from sets import ImmutableSet
Traceback (most recent call last):
File "imsniff.py", line 337, in <module>
main()
File "imsniff.py", line 334, in main
sniff.run()
File "imsniff.py", line 321, in run
self.bind()
File "imsniff.py", line 271, in bind
self.q.bind(socket.AF_INET)
File "/usr/lib/python2.6/dist-packages/nfqueue.py", line 79, in bind
def bind(*args): return _nfqueue.queue_bind(*args)
TypeError: queue_bind() takes exactly 1 argument (2 given)


Ubuntu 9.04 x64
python 2.6.2
Все зависимости установлены.

Помогите!!
dini 09.02.2011 18:05 #
Исправьте:
def callback(self, payload):
на
def callback(self, dummy, payload):
Честно говоря сам не разобрался какого ч>рта в разных дистрах разное число аргементов передается.
levin-a 09.02.2011 18:28 #
Dini, спасибо за совет, но не помогло.
Ошибка с callback ушла, но остальные остались.

Что еще можно сделать? Я не пишу на питоне (((
dini 09.02.2011 20:45 #
Извеняюсь, не с начала прочитал...
Открываем /var/lib/python-support/python2.6/MySQLdb/__init__.py, закоменчиваем 34 строку и вставляем после нее add after that line: ImmutableSet = frozenset, коментим 41 строку(from sets import BaseSet) и вставляем посля нее BaseSet = set
Должно проканать.
Проблема описана здесь.
dini 09.02.2011 20:48 #
Мля... чет все поломалось...
34 строку меняем на ImmutableSet = frozenset, а 41 на BaseSet = set
После этого должно заработать.
levin-a 10.02.2011 15:09 #
dini, исправил, но не помогло (((
Видимо не судьба и нужно учить питон...
dini 10.02.2011 16:43 #
Так, но теперь мне самому интерестно чего, где и как...
Можете скинуть чего теперь в консоли кричит?
levin-a 09.02.2011 18:31 #
А точнее сказать ничего не изменилось (((((
levin-a 10.02.2011 16:45 #
да ничего и не изменилось ((
вот вывод:
python imsniff.py -b
Traceback (most recent call last):
File "imsniff.py", line 337, in <module>
main()
File "imsniff.py", line 334, in main
sniff.run()
File "imsniff.py", line 321, in run
self.bind()
File "imsniff.py", line 271, in bind
self.q.bind(socket.AF_INET)
File "/usr/lib/python2.6/dist-packages/nfqueue.py", line 79, in bind
def bind(*args): return _nfqueue.queue_bind(*args)
TypeError: queue_bind() takes exactly 1 argument (2 given)
dini 10.02.2011 17:13 #
Ну почемуж, терь на мускул не матюгается.
Так, а вот с биндом нада разобраться... ща покумекаю и отпишу...
buzer 05.04.2011 06:41 #
практически те же ошибки :)
root@gw2:/usr/bin# imsniff.py -b
Traceback (most recent call last):
File "/usr/bin/imsniff.py", line 337, in
main()
File "/usr/bin/imsniff.py", line 334, in main
sniff.run()
File "/usr/bin/imsniff.py", line 321, in run
self.bind()
File "/usr/bin/imsniff.py", line 271, in bind
self.q.bind(socket.AF_INET)
File "/usr/lib/python2.6/dist-packages/nfqueue.py", line 93, in bind
def bind(self, *args): return _nfqueue.queue_bind(self, *args)
RuntimeError: error during nfq_bind_pf()

Python 2.6.6

Debian GNU/Linux 6.0.1 (squeeze)