Журнал LinuxFormat - перейти на главную

LXF126:WireShark

Материал из Linuxformat
Версия от 11:23, 17 февраля 2011; Crazy Rebel (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Акула сетей

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


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

Имея подходящие инструменты, вы можете сами перехватывать эти – да и любые другие – данные, циркулирующие в сети. Это возможно потому, что большинство сетей фактически рассылают информацию, предназначенную для конкретного адресата, всем сетевым машинам подряд; просто ваш компьютер игнорирует чужие пакеты. В особенности это справедливо для большинства беспроводных сетей, даже «защищенных» с помощью WEP/WPA.

Ловись, рыбка...

Давайте попробуем перехватить данные в вашей сети. Сначала установим инструмент под названием Wireshark. В большинстве дистрибутивов программу можно получить с помощью менеджера пакетов; в Ubuntu я набираю следующую команду:

sudo apt-get install wireshark

Если в вашем дистрибутиве такого пакета не нашлось, исходный код можно найти на http://www.wireshark.org/download.html – вместе с инструкциями по компиляции и установке.

Обычно Wireshark подчиняется только пользователю root. Чтобы запустить программу, введите команду gksu wireshark или аналогичную. У вас спросят пароль суперпользователя, после чего Wireshark запустится (как обычно, уведомив об опасности работы в режиме root). В рамках нашего руководства это предупреждение можно игнорировать, но запуск любой программы от имени суперпользователя опасен, поэтому будьте осторожны!

После старта Wireshark вы увидите пустой экран с несколькими значками вверху. До поры мы не будем вникать в эти детали, поскольку сначала нужно перехватить какие-нибудь данные. В Wireshark перейдите к меню Capture [Захват] и выберите пункт Interfaces [Интерфейсы]. В появившемся диалоге мы выберем интерфейсы, с которых будут считываться данные. Проще всего указать Any [Любые], что на языке Wireshark означает «собрать все данные, которые я только вижу в сети».

Нажмите кнопку Start [Пуск] рядом с интерфейсом Any – и вы увидите главный экран, разделенный на три части. Верхняя часть начнет заполняться данными. Если вы, как и я, единственный пользователь сети (или ваша сеть построена на переключателях), то сведений будет немного. Пошарьте по Интернету, и данных станет больше (Wireshark захватывает любую информацию, поступающую на ваш компьютер и отправляемую с него – и вообще все, что попадется в сети).

Перехват WordPress

Чтобы привести пример данных, подверженных перехвату, я выполнил локальную инсталляцию WordPress и собрал данные, сгенерированные в ходе установки.

Я знаю, что WordPress – это web-приложение, а значит, использует протокол HTTP; поэтому я предписал Wireshark искать только HTTP-пакеты – а именно, просто ввел http в поле фильтра. После этого начинается заполнение информационной колонки данными. Давайте просмотрим, как я вошел в WordPress.

Отправляя форму через Интернет, вы посылаете данные на сервер с помощью метода HTTP под названием POST. Запрашивая страницу, вы пользуетесь методом GET этого же протокола. Чтобы засечь вход в панель администрирования WordPress, мне нужно отыскать запрос POST, отправленный сценарию входа в систему. Wireshark предоставляет множество способов манипулирования данными: давайте просмотрим все сделанные мной запросы POST.

Нажмите кнопку Clear [Очистить] рядом с полем фильтра, затем кнопку Expression [Выражение]. В окне можно составить формулу, чтобы отфильтровать данные. Глянув в список Field Name [Название поля], можно заметить, сколько всего понимает Wireshark, но пока нас интересуют только запросы POST, поэтому прокрутим список вниз до пункта HTTP и развернем его, щелкнув стрелку. В развернувшемся списке найдем пункт http.request.method – то есть будем отсеивать данные на основании метода запроса. Выберите пункт http.request.method, в поле Relation [Отношение] укажите ==, а в качестве Value [Значение] введите POST; затем нажмите ОК.

Список захваченных пакетов сократится до нескольких пунктов, и среди них будет легко отыскать тот самый, соответствующий отправленному мной запросу к /wordpress/wp-login.php. Давайте рассмотрим его подробнее.

Вы заметите, что экран теперь разделен на три части (если нет, попробуйте развернуть окно). Центральная часть окна позволяет изучить пакет во всех деталях. Нас интересует раздел Line-based text data [Текстовые строки], в котором всего одна строка, вот такая:

log=admin&pwd=HCnr9%5E%40rWsbt&wp-submit=Log+In&redirect_to=http%3A%2F%2Flocalhost%2Fwordpress%2Fwp-admin%2F&testcookie=1

Эти данные представляют собой пары «ключ–значение», закодированные по схеме URL. Декодируем их – получим сведения, приведенные в таблице.


Параметр Значение
log admin
pwd HCnr9^@Wsbt
wp-submit Log in
redirect-to http://localhost/wordpress/wp-admin
testcookie 1

Узнаете? Это имя пользователя и пароль, с которыми вы вошли в WordPress. То есть тот, кто перехватил ваши данные, получил доступ к вашему блогу и теперь может вытворять там все, что ему вздумается, пока вы не смените пароль.

Какой ужас!

А что с электронной почтой? Если у вас обычный почтовый клиент, то вы можете перехватить переговоры вроде этих:

< 220 stupor.sourceguru.net ESMTP Postfix (Ubuntu)
> EHLO sourceguru.net
< 250-stupor.sourceguru.net
> AUTH PLAIN JiM2NTUzMztseGZ1c2VyJiM2NTUzMztseGZwYXNzd29yZA
< 235 2.7.0 Authentication successful
> MAIL FROM:<mez@sourceguru.net> SIZE=456 AUTH=<>
< 250 2.1.0 Ok
> RCPT TO:<mez@debian.org> ORCPT=rfc822;mez@debian.org
< 250 2.1.0 Ok
> DATA
< 354 End data with <CR><LF>.<CR><LF>
> Date: Sun, 13 Sep 2009 20:59:06 +0100
> From: Martin Meredith <mez@debian.org>
> To: mez@debian.org
> Subject: Test Email
>
> Wireshark can sniff your email too
> .
¬o< 250 2.0.0 Ok: queued as 095CA94024
< QUIT
< 221 2.0.0 Bye

Это пострашнее, чем в предыдущем примере. Вообразите, что кто-то сидит около вашего дома с ноутбуком и прослушивает трафик Wi-Fi [если сеть не зашифрована или злоумышленник узнал ключ: для WEP это несложно, – прим. ред.]. Он может не только прочесть вашу почту, но, из безобидной строчки с началом AUTH PLAIN выяснить имя пользователя и пароль вашей учетной записи (для нашего примера я заменил их на lxfuser и lxfpassword). Метод авторизации AUTH PLAIN попросту объединяет ваши имя пользователя и пароль и кодирует их посредством base64 (то есть расшифровать сообщение может любой – загляните хоть на http://linkpot.net/scripture).

Как же пресечь шпионаж?

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

Чаще всего используются методы шифрования SSL (Secure Sockets Layer) и TLS (Transport Layer Security). Оба метода применяют комбинацию сертификатов и ключей. Клиент (то есть вы) получает сертификат от сервера и использует его для шифрования данных, отправляемых на сервер. Расшифровать их можно только с помощью приватных ключей, находящихся на сервере. Приватный ключ, в свою очередь, зашифровывает данные так, что расшифровать их можно только открытым ключом, встроенным в сертификат. Для усиления безопасности в момент соединения генерируется случайный ключ, который, совместно с приватным ключом и сертификатом, используется для шифрования обмена данными между вами и сервером.

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

openssl -genkey -out privey.pem 4096

Приватный ключ будет сгенерирован с помощью системной энтропии. Создав ключ, вы должны сгенерировать запрос на подпись сертификата (Certificate Signing Request, CSR). Как правило, SSL-сертификаты проверяются центром сертификации (Certificate Authority, CA), который удостоверяет вашу личность и подписывает сертификат. Запрос CSR можно создать, набрав следующую команду:

openssl req -new -key privkey.pem -out cert.csr

После этого вам будет предложено ввести некоторые детали. Укажите их и проследите, чтобы параметр CommonName (CN) соответствовал доменному имени вашего сервера:


mez@lazy % openssl req -new -key privkey.pem -out cert.csr
Country Name (2 letter code) [AU]:UK
State or Province Name (full name) [Some-State]:West Midlands
Locality Name (eg, city) []:Birmingham
Organization Name (eg, company) [Internet Widgits Pty Ltd]:.
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:lazy.sourceguru.net
Email Address []:martin@sourceguru.net

Теперь нужно направить запрос CSR в центр сертификации, который взамен вышлет подписанный сертификат. Мы сохраним его под именем signed.pem. Для упрощения задачи объединим ключ и сертификат в одном файле, чтобы указать на него принастройке.

cat privkey.pem signed.pem > certificate.pem

Ну вот, у нас есть ключ и сертификат SSL. Попробуем применить их на практике.

Настройка серверов

Чаще всего SSL-сертификаты используются для обеспечения безопасности сайтов, поэтому неудивительно, что в Apache процесс настройки защищенного сервера очень прост. Во-первых, мы должны организовать «сайт» внутри Apache. Сделать это можно, создав файл в каталоге /etc/apache2/sites-available (путь к файлу будет такой: /etc/apache2/sites-available/lazy.sourceguru.net). Содержание файла:


NameVirtualHost *:443
<VirtualHost *:443>
ServerName lazy.sourceguru.net
DocumentRoot /var/www/
SSLEngine On
SSLCertificateFile /путь/к/certificate.pem
</VirtualHost>

Проделав это, необходимо активировать SSL-модуль в Apache, подключить только что созданный файл и перезапустить Apache:

a2enmod ssl
a2ensite lazy.sourceguru.net
/etc/init.d/apache2 restart

Если теперь вы попытаетесь посетить свой сайт, например, по адресу https://lazy.sourceguru.net, то увидите, что подключение зашифровано (адресная строка окрашена в зеленый или синий цвет).

С почтой несколько сложнее, поскольку в большинстве случаев у вас будет один сервер для получения, а другой – для отправки писем. В моем примере использованы Postfix и Courier, но даже если у вас будет другая конфигурация, в Интернете вы найдете массу руководств по данному вопросу.

Безопасная почта

Сперва настроим Postfix. Если конфигурация вашей почты требует использования доменного имени, отличного от использованного выше, понадобится получить другой сертификат. После этого настроить Postfix не составит труда. Добавьте в файл /etc/postfix/main.cf следующие строки:

smtpd_tls_cert_file = /path/to/certificate.pem
smtpd_tls_key_file = $smtpd_tls_cert_file
smtpd_tls_log_level = 0
smtpd_tls_recieved_header = yes
smtpd_tls_security_level = may
smtpd_use_tls = yes
smtpd_tls_auth_only = yes

Перезапустите Postfix, и вы сможете использовать TLS.

Поддержка POP и IMAP обеспечивается службой Courier. Здесь мы рассмотрим процесс настройки POP, но для IMAP шаги будут почти такие же.


В Ubuntu первым делом нужно установить пакет courier-pop-ssl. Закончив установку, скопируйте файл сертификата в /etc/courier/pop3d.pem. Затем отредактируйте /etc/courier/pop3d, заменив строку

POP3DSTART=YES

на

POP3DSTART=NO

Это отменяет запуск стандартных интерфейсов POP3. Но так как они, вероятно, уже работают, необходимо остановить их и перезапустить экземпляр SSL:

/etc/init.d/courier-pop stop /etc/init.d/courier-pop-ssl restart

Теперь вы обезопасили свою почту. Не забудьте обновить настройки почтового клиента!

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

Сертификаты SSL

Как правило, сертификат SSL выдается центром сертификации как подтверждение личности предъявителя. Если адресная строка в вашем браузере окрашена в зеленый цвет, то сертификат, отправленный вам, прошел Расширенную проверку [Extended Verification]. Значит, вы можете быть уверены в том, что сервер, к которому вы обращаетесь, принадлежит именно той компании, с которой вы ведете переговоры.

Большинство центров берут плату за подтверждение вашей личности, и в некоторых случаях она доходит до тысяч долларов. Альтернативный способ для тех, у кого нет лишних денег на покупку коммерческого сертификата – обращение в CAcert. Это организация, целью которой является выдача бесплатных подписанных сертификатов всем пользователям. Подтверждение личности пользователей в CAcert осуществляется с помощью модели Web of Trust (WoT), то есть «сети доверия».

Чтобы стать подтвержденным пользователем CAcert, нужно отыскать других пользователей этой сети и предъявить им доказательства подлинности вашей личности. Эти пользователи (если доказательства их устроят) начисляют вам «очки». Набрав 50 очков, вы сможете создать «подтвержденный» сертификат, то есть CAcert в этом случае будет уверена в вашей личности. Технология CAcert распознается пока не всеми браузерами, но большинство дистрибутивов Linux снабжается файлами, позволяющими пользоваться CAcert-сертификатами наравне с коммерческими.

Слежение за переговорами

Иногда Wireshark прямо-таки заваливает вас данными, особенно при ловле их в сети с бойким трафиком (скажем, у вас в офисе). Чтобы облегчить вам жизнь, Wireshark предусмотрел функцию отслеживания потока TCP: она сводит воедино все пакеты, касающиеся обмена между двумя машинами. Вообразите, например, что вы, прочесав данные перехвата, заметили пакеты чьих-то переговоров по IRC. Чтобы за ними проследить, достаточно нажать правую кнопку мыши и выбрать команду Follow TCP Stream [Отслеживать поток TCP].

Случайно = безопаснее

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

Компания Simtec Electronics выпускает продукт, который решит проблему: это маленький USB-накопитель, подключаемый к USB-порту. С помощью генераторов квантового шума, математических и криптографических манипуляций он может поставлять вашей системе случайные числа в больших количествах. Более подробные сведения можно найти на http://www.entropykey.com.

Персональные инструменты
купить
подписаться
Яндекс.Метрика