Блажен, кто не ведает?
Примечание. Этот материал нацелен на простых пользователей Интернета, поэтому мы, по мере возможностей, старались избегать технической терминологии. Полагаем, что администраторы и программисты уже знакомы с основами сетевой безопасности. Мы также предполагаем, что читатель уже познакомился с первой частью нашего материала, поэтому не будем останавливаться на тех вопросах, о которых упоминали ранее.
Для начала обрисуем проблему безопасности в общих чертах. Пользователя, чей компьютер ни разу не подвергался атакам, сегодня можно назвать счастливчиком. Менее повезло тем, кто подвергался атакам, но узнал об этом. В этом случае, вероятно, пришлось закрывать обнаруженные уязвимости.
Однако что будет, если вы не обнаружили атаку? Если вы не заметили вторжение, то и исправлять “дыры” вряд ли поторопитесь. А теперь представьте, что кто-то использует ваши учётные данные для доступа к вашей персональной информации, создаёт под вашим именем учётные записи в тех местах, о которых вы даже не подозреваете.
Сегодня множество пользователей подвергаются атакам из Интернета, но не ведают об этом. А организации часто умалчивают о прошедших атаках и втихую устраняют повреждения.
В первой части мы рассмотрели несколько видов угроз, которые актуальны для пользователей Интернета. Во второй части мы подробнее остановимся на том, как же эти атаки осуществляются. Только понимая это, можно построить адекватную систему защиты.
Ввод имени пользователя и пароля: известная проблема
Одной из главных проблем идентификации является страница ввода имени и пароля, именно она породила целое поколение хакеров. И причина понятна. Если в системе полностью или частично вводятся имена и пароли, то уровень безопасности низок. После успешной аутентификации хакер может получить беспрепятственный доступ к нужной системе.
Сайт, в некотором смысле, открывает ворота к запрашиваемым данным, а имя пользователя и пароль являются ключом к ним. После однократной проверки повторного подтверждения обычно не требуется, то есть единственной защитой доступа к электронной почте или системе интернет-банкинга являются имя пользователя и пароль. Другими словами, после входа в систему работа и транзакции будут возможны до тех пор, пока пользователь не завершит сеанс и отключится от системы.
Возникает логичный вопрос: почему же программисты создают системы с окном ввода имени и пароля, которые заведомо уязвимы? Здесь есть несколько вариантов ответа, и все по-своему верны, но простота и самоуверенность возглавляют этот список.
Давайте детально рассмотрим атаку на такую систему.
Атака на страницу входа
Начнём с того, что найти сайт, использующий страницу входа, не так и трудно. Например, если нам нужно найти образовательный сайт со страницей входа, созданный при помощи технологии ASP (Microsoft Active Server Pages), то можно зайти на Google и сделать запрос вида:
inurl:login filetype:asp inurl:edu
Страница входа, по сути, является “воротами” в приложение.
Во время ввода пароля символы чаще всего отображаются в виде звёздочек. На самом деле это лишь отображение, так как в поле ввода содержится введённый пароль. Затем эти данные в каком-либо виде передаются на сервер, где и проверяется их правильность.
Что же не так? Попробуйте сделать в Google запрос ‘keypress recorder’ (“клавиатурный шпион”) в поисковой системе и посмотрите результат.
Среди полученных результатов наверняка будет несколько программ, каждая из которых потенциально может находиться на вашем ПК и записывать все нажатия клавиш. Например, если бы такая программа была на моём компьютере, то она записывала бы текст этой статьи, пока я его набирал. Некоторые программы более интеллектуальны и записывают лишь нажатия клавиш в поле запроса пароля. Некоторые идут ещё дальше и никак не отображаются в системе, что затрудняет их обнаружение. Встречаются и такие, которые переименовывают себя во что-то привычное. Например, согласитесь, что файл winprint.exe в каталоге Windows выглядит вполне прилично.
А теперь попробуйте ввести в поисковой системе ‘screen scraper’ (“экранный шпион”). Вы увидите список программ, которые могут захватывать снимки экрана ничуть не хуже, чем при нажатии клавиши “Print Screen”.
Существуют и такие программы, которые объединяют в себе обе эти возможности. Некоторые из них выполнены в виде троянских или шпионских программ. Обычно они скачиваются на ваш компьютер во время просмотра интернет-страниц, в которые внедрён соответствующий код. Наиболее часто такое происходит на сайтах порнографического содержания. Или же шпионские программы присылаются по электронной почте.
Если ваш компьютер инфицирован одной из таких программ, то во время ввода все секретные данные будут перехватываться. Затем, через некоторое время, полученные данные будут отправлены злоумышленнику по электронной почте. Возможно, они будут переданы на специальный сервер, с которого злоумышленник сам заберёт их позже.
Итак, вы знаете о существовании таких программ и, надеемся, понимаете, что они могут записывать и передавать ваши пароли и другие личные данные. Поэтому вполне очевидно, почему окно ввода пароля несёт в себе такую опасность. А теперь вспомните о сайтах, где предлагается ввести данные платёжной карты, и где вы соглашаетесь сохранить эти данные для дальнейших покупок “в один щелчок мыши”.
Но вернёмся к атакам на страницу ввода. После заполнения страница передаётся при помощи одного из запросов POST или GET HTTP. Позвольте расшифровать.
HTTP расшифровывается как протокол передачи гипертекста (Hyper Text Transfer Protocol), он используется для формирования и передачи страниц через Интернет. Форму можно передавать двумя способами: с использованием запроса POST или с использованием запроса GET. Достаточно сказать, что оба метода позволяют передавать данные от браузера на сайт. Каждый HTTP-запрос может получить свой ответ, например, когда вы отправляете запрос на поиск в Google, вам возвращается страница с результатами поиска – ответ HTTP.
Существует два варианта доставки данных на сервер. Они могут быть зашифрованы, например, средствами Secure Sockets Layer (SSL, тогда вы увидите префикс HTTPS://) или переданы в открытом виде (HTTP://).
Оба способа уязвимы, и для выяснения причин обратимся сначала к теории.
Перехват пакетов
Сетевые устройства “общаются” друг с другом логичным и предсказуемым способом, определённым в стандарте, носящем название модели OSI (модель взаимодействия открытых систем). Благодаря этому производители могут создавать оборудование, соответствующее OSI, которое будет совместимо и с другими устройствами.
Данные передаются по сети пакетами, аналогично почтовым конвертам в традиционной почте. Теперь представьте, что вы написали очень большое письмо, и оно не помещается в один конверт. В этом случае можно взять несколько конвертов и разложить части письма по ним. Естественно, чтобы получатель не запутался, конверты нужно пронумеровать, например 1 из 6, 2 из 6 и т.д. На каждом конверте нужно написать точный адрес назначения, а также обратный адрес, на случай ошибки доставки.
Протоколы модели OSI аналогичны работе почтальона. Рассмотрим вопросы, на которые они должен ответить:
Вопрос 1 – существует ли указанный адрес?
Вопрос 2 – как лучше отправить письмо (по какому пути)?
Вопрос 3 – возможно ли его доставить?
Отправка письма.
Теперь, поскольку в нашем примере шесть конвертов, мы не можем быть уверены, что при сортировке писем на почте все они будут обработаны одновременно, и, конечно же, нет гарантии того, что адресат получит все шесть писем сразу. Если же адресат получит не все письма, он сможет попросить повторно послать недостающие письма. А когда он получит все послания одновременно, он сможет открыть их в нужном порядке и прочитать письмо.
Как происходит поиск адреса в сети?
У каждого компьютера, подключённого к сети, обычно есть три параметра, которые его идентифицируют. Это уникальный адрес, привязанный к сетевому адаптеру, он же физический или MAC-адрес. Следующий – IP-адрес (Internet Protocol), он идентифицирует компьютер в сети и обычно определяется администратором, либо назначается автоматически. И имя компьютера.
Как правило, MAC-адрес изменить нельзя, IP-адрес может меняться, например, при каждом новом подключении к сети, имя компьютера может по своему желанию сменить администратор.
Для чего нужна такая адресация?
Представим трейлер, который зачастую можно встретить в американских фильмах, его номер аналогичен MAC-адресу. При этом владелец любит постоянно переезжать с одной стоянки на другую, через некоторое время снова, затем снова. У каждой стоянки есть свой адрес, а также выдаются номера парковочных мест – это аналог IP-адреса. Имя – это то название, которое владелец выбирает для своего трейлера и может написать его на нём как пожелает: в прошлом году ему, например, нравилось “Большой Билл”, в этом он решил написать “Кролик Кентукки”.
Для поиска владельца такого автофургона нужно знать его адресные данные: адрес парковки и место трейлера. Все эти данные в сети отслеживает протокол разрешения адресов (Address Resolution Protocol – ARP). Устройства, подключённые к сети, отображаются в записях ARP, а следовательно, сохраняется возможность найти адресата.
Теперь представим, что у нас есть два типа почтальонов: первые любят поговорить со всеми и работают не точно, вторые – сдержанные и точные.
Первые стучатся в каждую дверь и показывают всем содержание писем. В сетевой терминологии это называется некоммутируемой сетью. Во втором случае почтальон доставит письмо только адресату. Подобное происходит в коммутируемой сети.
Вряд ли стоит говорить, что некоммутируемые сети подвержены перехвату данных – они практически созданы для него. Некоммутируемая сеть всегда открыта для хакера. Если подключиться к такой сети и запустить тот же TCPDUMP, то можно незаметно для других перехватывать весь сетевой трафик (аналогия с открытыми конвертами). Если пользователь из такой сети заходит на сайт без SSL, указывая свои учётные данные, то такая программа, как TCPDUMP или DSNIFF, сможет их без проблем перехватить.
Приведём пример. Ниже показана команда TCPDUMP для захвата всего трафика, направленного на Google, в файл goog.txt.
Открываем Google и выполняем запрос.
После этого в файле goog.txt мы обнаружим следующее.
(Можно использовать и более интуитивно понятную программу – ETHEREAL.)
Выше показан пример нашего разговорчивого почтальона, который всем показывает письма.
В коммутируемой сети трафик передаётся непосредственно на узел назначения. Поскольку наш компьютер не является таковым, то так просто перехватить данные не удастся, нужно как-то обмануть компьютеры, чтобы они передавили весь трафик к нам. Нужно убедить почтальона, что вся почта из пункта “А” в пункт “B” должна проходить через наш компьютер.
По природе сети компьютерам требуется запрашивать адресную информацию с других компьютеров, чтобы соединение заработало. После установки соединения адресная информация заносится в ARP-кэш, где записаны адреса тех компьютеров, к которым часто происходят обращения. Адресная информация запрашивается только при необходимости, иначе бы на каждой машине пришлось хранить список всех остальных.
Представим, что компьютеру “A” нужно обратиться к компьютеру “B”. У каждого из них есть свой IP-адрес и MAC-адрес.
Компьютеры запрашивают адресную информацию друг у друга и обновляют свои ARP-кэши. Чтобы оказаться между ними, нам нужно изменить их ARP-кэши. Для этого мы отправляем эхо-запросы PING на каждую из них. Сетевые параметры нашего компьютера следующие.
Теперь мы сгенерируем ARP-ответ для каждого из компьютеров. И неважно, отсылали ли эти машины запрос, их ARP-кэши обновятся полученной информацией.
Мы подменили записи в ARP-кэшах компьютеров “А” и “B”, теперь для “B” наш компьютер – это “А:, а для “А” наш компьютер – “B”.
Описанная выше атака называется “ARP Poisoning”, она позволяет нам стать “человеком в середине” (Man in the Middle, MITM), перехватывающим весь трафик между компьютерами “А” и “B”.
Что для этого требуется? Несколько простых программ: PING, ARP, NMAP (если вы не уверены, какую машину атаковать) и программа для вброса пакетов, например, NEMESIS или ETTERCAP.
Дополнительную техническую информацию можно узнать на этом ресурсе.
Показанная выше книга содержит краткое описание упомянутого процесса. Кстати, диаграммы взяты именно из неё.
Упомянутая техника перехвата пакетов требует определённого уровня знаний. Если же вы решите проверить методы в вашей сети, не зная всех тонкостей, то вполне вероятно, что сегмент сети перестанет работать или вы будете заблокированы системой сетевой защиты.
Администраторы и хакеры: они используют одни и те же методы
Самое страшное, что все упомянутые выше средства свободно доступны для скачивания или даже являются стандартными средствами операционной системы (ping и arp). Кроме того, более удобные автоматизированные решения, такие, как NetScanTools Professional, без труда можно купить. Покажем, что получит в своё распоряжение хакер, если купит такое решение.
Подобный набор в руках хакера превращается в очень хорошее орудие, автоматизируя техническую работу. Можно получить список результатов сетевого сканера, после чего правый щелчок мыши выводит контекстное меню со списком доступных действий. Это позволяет быстро и просто проверить сеть и подключённое оборудование на уязвимости.
NetScanTools создавался как инструментарий для сетевых администраторов, но он же успешно применяется и хакерами. И ничего поделать с этим нельзя.
Уязвимости SSL
Наверное, надо подробно остановиться на недостатках SSL, особенно из-за его позиционирования как панацеи от угроз Интернета. Первое, что нужно отметить, – SSL не защитит от программ перехвата паролей на компьютере, которые упоминались выше. Это связано с тем, что SSL является протоколом, работающим между браузером и сервером сайта, к которому выполнено подключение. Вводимая на страницу браузера информация не защищена SSL.
Например, если вы вводите имя пользователя и пароль в соответствующую форму, как описано выше, SSL не сможет защитить их от перехвата при помощи “клавиатурного шпиона”, со всеми последствиями. SSL начинает работать, когда имя и пароль введены и браузер выполняет HTTP-запрос.
SSL имеет несколько разновидностей, наиболее надёжная предполагает наличие сертификата как у клиента, так и у сервера. Однако такой подход на практике встречается редко, поскольку нужно наличие копии сертификата на всех машинах, с которых вам может потребоваться выход в Интернет. Поэтому множество сайтов не используют эту возможность, что ослабляет защиту.
В описанном выше примере серверное ПО сайта может проверить, что туннель SSL устанавливался между сервером сайта и вашим компьютером. Без этого мы не смогли бы защититься от атаки “человек в середине” (Man in the Middle). Хотя мы говорили, что подмена ARP, описанная выше, является разновидностью атаки “человек в середине”, но на самом деле этот термин используется для описания ситуаций, в которых применяются защищённые протоколы.
MITM – достаточно общий термин, описывающий все виды атак с использованием перехвата трафика атакующим субъектом. Хакер может блокировать пакеты или генерировать избыточный трафик. Он может изменять содержимое пакетов с целью обмана атакуемого или вызова сбоя из-за особым образом сформированного пакета. Всё это может привести к краже информации, включая проникновение в пользовательские сеансы работы с банковскими счетами.
Как такое может произойти?
Предположим, что вы атаковали кого-либо по описанной выше схеме ARP-атаки. Он отсылает запрос в банк, который вы получаете на своём компьютере. Вы перехватываете запрос и отправляете его в банк. Теперь сервер банка создаёт SSL-соединение, предназначенное для вашей жертвы. Но вы вновь перехватываете трафик от банка и останавливаете туннель SSL на своём компьютере. Затем вы можете создать новый SSL-туннель между вашим компьютером и тем, который атакуете.
После этого жертва атаки получит сообщение о том, что полученные детали SSL не совпадают с сертификатом банка.
Конечно, сертификат банка завершил свою работу на вашем компьютере. Ваша жертва получит страницу банка, но вы же отправили туда совершенно другой сертификат. Поэтому жертве будет выведено сообщение о такой аномалии. Большинство пользователей эту ошибку игнорируют, соглашаясь с предложением использовать новый сертификат. Большая ошибка!
Теперь объект вашей атаки работает с системой интернет-банкинга, а вы, находясь в середине, наблюдаете за ним, получаете имена и пароли, или подменяете информацию, с которой он работает. Но что самое важное, когда он решит выйти из системы, вы сможете показать ему соответствующую страницу. Но вы при этом можете не разрывать соединение с банком и будете продолжать работать в системе и получать доступ к данным того, кого атаковали.
Атака весьма серьёзна.
Существует два свободно доступных продукта, которые позволят продемонстрировать такую атаку: ACHILLES и BURP.
Интерфейс BURP.
Программа симулирует атаку “человек в середине”: ваш браузер запрашивает интернет-страницу.
Можно разрешить дальнейшее прохождение запроса (Forward), но результат всё равно вернётся к нам.
В качестве примера можно настроить подобный прокси-сервер на своём компьютере и пропустить через него трафик браузера, выбрав прокси-сервер в опциях браузера. Теперь можно попробовать сделать запрос поисковой системе. Мы задали “achilles proxy”.
Как видно, запрос HTTP отображается на экране.
На закладке перехвата ищем слово “achilles”.
И заменяем его на “burp”.
Теперь пропускаем запрос (“Forward”) и получаем ответ от Google. Как только ответ придёт на прокси, нужно разрешить его передачу браузеру.
Как видно, в полученном ответе содержится результат поиска “burp proxy”.
На прокси-сервере мы легко подменили запрос. С таким же успехом можно будет подменить и результат поиска.
На странице поиска Google был сделан запрос “achilles”. Запрос был перехвачен на прокси-сервере, где слово “achilles” было заменено на “burp”. Google исправно обработал запрос и выдал соответствующий результат.
В подобном случае вы никак не сможете повлиять на запрос после его отправки. Кроме того, сайт может быть не таким безобидным, как Google. Например, если это будет страница банка, и вы захотите осуществить платёж на 1000 долларов, а злоумышленник (“человек в середине”) перехватил запрос и изменил его на 1 доллар. Несложно придумать и более серьёзные сценарии.
Так что не будьте уверены в полной безопасности, даже если видите символ замка и префикс HTTPS. Кроме того, если вы увидели какое-либо подозрительное сообщение, обратите на него особое внимание!
Кстати, SSL всё же можно успешно использовать для защиты от атак типа “человек в середине”.
Заключение
Многие считают, что сильные пароли смогут решить большинство проблем, связанных с учётными данными и аутентификацией пользователей. Но теперь вы знаете, что любая из перечисленных атак позволяет успешно перехватить незашифрованный пароль. Другие считают, что нужно использовать двухфакторную аутентификацию (о ней мы поговорим в следующей статье), но даже и в этом случае остаются возможными атаки типа “человек в середине”.
Надеемся, что теперь многие из наших читателей станут более внимательно относиться к страницам регистрации. Кроме того, теперь вы сможете оценить тот уровень безопасности, который предлагает вам администратор сайта. Особенно важно это для тех случаев, когда необходима передача личных данных.
Но что же может сделать конечный пользователь? На самом деле, немного. Нужно тщательнее проверять сертификаты, а также регулярно сканировать компьютер на наличие вредоносных программ. Впрочем, именно разработчики защит должны создавать решения, которые позволят в корне решить описанные проблемы. А уже системные администраторы смогут внедрить новые решения и защитить пользователей от атак. Сегодня существуют способы защиты от упомянутых атак, но далеко не каждый выливается в готовое решение. Так что берегите себя и свою информацию!