⌨ Labor omnia vincit ☮

A bit about POP3

Posted in security by anaumov on 05.02.2015

На сколько большая разница между такими понятиями как “делать” и “делать хорошо”? Я думаю, что каждый определяет это для себя сам. Зависит она от многих факторов, таких как например ответственность и квалификация сотрудников, рабочая атмосфера или просто умение начальника найти правильный подход к каждому из своих подчиненных (с целью повышения эфективности команды в целом).

Я практически забросил свой блог. Но об этом случае мне все же очень захотелось рассказать. Этот случай настолько банален, что я просто не могу пройти мимо. Я встречаю его постоянно. Наверняка в вашей сети есть что-то подобное. Я говорю не о технической части, а скорее о причинах, которые приводят к подобным курьезам. Для тех кто не знает: я работаю сетевым инженером; моя работа заключается в анализе клиентских сетей, а именно – поиске любых неполадок, анализе сетевого трафика, проверок систем безопасности и т.д.

Итак, как вы наверняка знаете, pop3 и imap передают информацию в открытом виде. В том числе и логин с паролем. По этой причине их использование без дополнительных технологий шифрования крайне нежелательно. Сервера, которые смотрят в интернет, как правило защищены как надо, но почему-то для внутренней инфраструктуры всегда применяются другие правила. В Германии есть такое понятие как “historische Gründe”. Очень распространенное. Дословный перевод – “историческая причина”, т.е. это эдакая причина, почему что-то работет не так как следовало бы, но при этом никто не делает никаких изменений, и все остается как есть. Что-то когда-то было настроенно не самым лучшим образом. На это конечно же тогда были причины. Но все остается как есть, и что-то менять, несмотря на то, что меняются сотрудники, меняется инфраструктура, никто не берется. В последствии это “не самым лучшим образом” перерастает в проблему.

В этом случае был найден pop3-сервер без каких-либо проверок или систем безопасности. Просто открытый 110/tcp порт. На той же машине был запущен imap (143/tcp), imaps (993/tcp) и pop3s (995/tcp). Обрабатывал все эти 4 порта один и тот же сервер (процесс). На вопрос о необходимости pop3 и imap, при наличии pop3s и imaps, был получен ответ типа: “Cотрудники ими так и так не пользуются, так что все в порядке”. Тем не менее, сканирование показало, что на 110/tcp постоянно приходят запросы. Выяснилось, что шлет их скрипт, который спецально запускают для проверки доступности сервера. Скрипт логинился и удалял все письма из ящика, специально для него созданного (на той же машине естественно крутился и SMTP). Если во время выполнения не происходило никаких проблем, то скрипт возвращал nagios/centreon соответсвующее значение. А теперь самое интересное.

В руководстве по настройке сервера (к сожаленью, это отностится ко многим серверам) сначала был описан процесс настройки pop3 и imap, а уже потом, отдельной главой, дополнительно, давались советы по настройке систем шифрования, обеспечивающие безопасное соединение. Так сервер и настраивали – сначала сделали pop3, imap и нашли скрипт, который бы проверял доступность сервера, а уже потом были настроенны imaps и pop3s, для “общественного” использования. Кстати скрипт был найден в гугле по запросу “pop3 python”. Первые же 2 ссылки ведут на официальную документацию модуля pop3 для второй и третьей версии python. И хотя на странице не раз говорится о безопасном соединении и SSL, все же в самом низу страницы дается пример именно небезопасного варианта. Этот пример просто копируется, добавляется имя сервера. Готово.

import getpass, poplib

SERVER = "BB.BB.BBB.B"

M = poplib.POP3(SERVER)
M.user(getpass.getuser())
M.pass_(getpass.getpass())
numMessages = len(M.list()[1])
for i in range(numMessages):
    for j in M.retr(i+1)[1]:
        print j

Логин и пароль вроди бы передавались как параметр из nagios/centreon, но это уже не имеет значения, так как в сеть они передается в откытом виде. Чтобы посмотреть как именно они выглядят, т.е. что именно посылает скрипт в сеть, достаточно одной команды:

# tcpdump -vv -n -i enp0s25 -S port 110 -n -l -A -X

В результате мы получим очередь из нескольких tcp-сегментов. Я тут прокажу лишь 2 из них. В первом автоматически используется имя пользователя, от имени которого запущен скрипт. Это параметр pop3-команды USER.

11:36:10.696061 IP (tos 0x0, ttl 64, id 22831, offset 0, flags [DF], proto TCP (6),
length 66)
AAA.AA.AAA.AAA.54900 > BB.BB.BBB.B.110: Flags [P.], cksum 0x9cf3 (incorrect -> 0xf085),
seq 3919316651:3919316665, ack 3877505730, win 229, options [nop,nop,TS val 6512531 ecr
3843018517], length 14
        0x0000:  4500 0042 592f 4000 4006 44c8 ac10 6672  E..BY/@.@.D...fr
        0x0010:  0a34 8008 d674 006e e99c 06ab e71e 0ac2  .4...t.n........
        0x0020:  8018 00e5 9cf3 0000 0101 080a 0063 5f93  .............c_.
        0x0030:  e50f cf15 5553 4552 2061 6e61 756d 6f76  ....USER.anaumov
        0x0040:  0d0a

Во втором мы видим pop3-команду PASS… и ее параметр.

11:36:13.320131 IP (tos 0x0, ttl 64, id 22833, offset 0, flags [DF], proto TCP (6),
length 65)
AAA.AA.AAA.AAA.54900 > BB.BB.BB.B.110: Flags [P.], cksum 0x9cf2 (incorrect -> 0xef97),
seq 3919316665:3919316678, ack 3877505759, win 229, options [nop,nop,TS val 6515155 ecr
3843018518], length 13
        0x0000:  4500 0041 5931 4000 4006 44c7 ac10 6672  E..AY1@.@.D...fr
        0x0010:  0a34 8008 d674 006e e99c 06b9 e71e 0adf  .4...t.n........
        0x0020:  8018 00e5 9cf2 0000 0101 080a 0063 69d3  .............ci.
        0x0030:  e50f cf16 5041 5353 2066 6f6f 6261 720d  ....PASS.foobar.
        0x0040:  0a

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

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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: