Меня зовут Роб Грэхам, я глава компании Errata Security, которая занимается Интернет-консалтингом. Сегодня мы поговорим о том, как просканировать весь Интернет и для чего это нужно. До сегодняшнего времени существовало мало инструментов для решения этой задачи, поэтому мы создали свои собственные инструменты. Интернет достаточно мал – в нём всего около 4 миллиарда адресов.
Просканировать Интернет достаточно просто – Вы садитесь перед компьютером, запускаете консоль с командной строкой и вводите адрес подсети. И Вы наблюдаете, как Ваш экран заполняется данными, а строки всё бегут и бегут дальше. В результате Вы получаете список открытых портов устройств с различными IP-адресами.
Для чего нужно сканировать Интернет в контексте защиты? Если Вас волнуют вопросы безопасности, это необходимо сделать, чтобы получить ответ на следующие вопросы:
сколько компьютерных систем подвержены уязвимости Heartbleed (ошибка в криптографическом ПО, которая позволяет злоумышленнику прочитать память клиента или сервера и получить закрытый шифровальный ключ сервера)?
сколько компьютерных систем можно использовать для усиления атак на NTP-серверы?
сколько систем подвержены риску благодаря уязвимости роутеров D-Link?
обзор всех используемых сертификатов SSL.
Существующие инструменты для нахождения уязвимости конкретных сетей и оборудования довольно медленные, но массовое сканирование позволяет Вам получить характеристики уязвимости свыше 100 000 устройств достаточно быстро. Важной проблемой, которую необходимо решить, является выявление оборудования, которое используется для связи с NTP-серверами при проведении DDOS-атак. Множество домашнего оборудования уязвимо из-за того, что в роутерах D-link недостаточно сильная защита. Достаточно посмотреть на сети D-link, чтобы увидеть, сколько ботнет-систем пользуются их уязвимостью. Сканирование SSL-сертификатов также полезно, потому что выявляет устаревшие сертификаты, подверженные ошибкам и уязвимостям. Так что сканирование всего, до чего можно «дотянуться», является важной задачей.
Сканирование Интернет нужно также в контексте профилактики. Оно помогает выявить Deepnet – множество Интернет-страниц, которые не видны поисковым системам. Эти страницы генерируются по запросам пользователей и могут нести в себе вредоносную информацию.
Попробуйте просканировать случайные порты, запустив команду массового сканирования "- banners", и в течение нескольких минут Вы обнаружите то, что можно взломать без труда.
В действительности сканировать Интернет полезно, потому что:
это весело;
это информативно (Вы можете увидеть, насколько мал Интернет, запустив команду сканирования 0.0.0.0/0, в Интернете имеется всего 65 тысяч портов);
Это сделает Вас известным:
— выберите цель, например, систему управления Siemens;
— просканируйте для неё Интернет;
— создайте для неё конференцию компьютерной безопасности BlackHat Talk;
— пользуйтесь полученными привилегиями эксперта.
Что нужно знать для того, чтобы просканировать Интернет? Во-первых, нужно знать теоретическую часть физической инфраструктуры:
пакеты данных имеют фиксированный размер:
— пакеты Ethernet вмещают в себя 44 байта;
— пакеты TCP SYN вмещают в себя 40 байт.
максимальные скорости 1 Гбит / с Ethernet:
— 476 Мбит / с для реального трафика;
— 524 Мбит / с для Ethernet соединения;
— 1488000 пакетов в секунду.
Это означает, что мы переплачиваем провайдеру из-за того, что он берёт с нас плату за гарантированную ширину пропускания, то есть за гарантированный, а не фактический объём данных. Это происходит из-за избыточного размера пакета. Если мы передаём 22 или 33 байта, они всё равно упаковываются в пакет размером 40 или 44 байта. Пользователь практически никогда не может достичь полной ёмкости передачи данный в 1 гигабит, потому что реально в секунду он передаёт не более 524 мегабит. Но из-за фиксированного переполнения пакетов данные имеют размер с запасом, и этот запас никак не используется. Но мы за него платим. Даже если у нас есть идеально настроенный свитч, мы всё равно не сможем воспользоваться полной пропускной способностью сети, и я не знаю, почему так происходит. Неразбериха имеется и в системе оплаты счетов за услуги Интернет.
Как формируются счета на оплату трафика у Интернет-провайдеров:
некоторые обеспечивают нам максимальную скорость Интернет-подключения 1 Гбит / с;
некоторые измеряют реальную пропускную способность рабочей сети, обеспечивая нас скоростью около 600 Мбит / с;
некоторые Интернет-провайдеры не видят маленьких пакетов, таким образом, они фиксируют только входящий, а не исходящий трафик. Например, мы передали тонну информации, а заплатили за несколько мегабайт, которые скачали из сети;
некоторые провайдеры вообще не измеряют объём трафика, и это представляет для нас особый интерес!
Например, в Германии есть клуб ССС, который обеспечивает пользователей скоростью 100 Гбит / с. Я не смог протестировать эту сеть, но возможно, в этом году я возьму с собой свою 10 гигабитную Ethernet-карту и проверю, так ли это на самом деле. Но проблема заключается в том, что когда мы отправляем слишком маленькие пакеты, мы тем самым нарушаем существующие договорённости между пирами одной сети.
Рассмотрим физическую инфраструктуру сети дальше.
Частные виртуальные сети VPN умеют подстраиваться под нагрузку маленьких пакетов. Ethernet борется с маленькими пакетами, и скорость свыше 500 Кбит / с часто затруднена. Если Ваш свитч способен работать с такой скоростью, это не означает, что остальные элементы инфраструктуры могут её поддержать. В этом случае может помочь отключение управления потоком данных Flow Control, при котором передатчик притормаживает передачу данных, если приёмник не готов их принять.
В некоторых случаях пакеты могут теряться – передача на скорости 500 Кбит / с не гарантирует, что все пакеты достигнут сети Интернет. Сканирование позволяет выявить порты, при использовании которых наблюдаются потеря пакетов. Вы можете использовать только те порты, которые обеспечивают одинаковый приём-передачу: если Вы отправляете 10 тысяч пакетов, то и получите тоже 10 тысяч пакетов. Поэтому я в основном использую скорость до 150 Кбит / с, а иногда даже 15 Кбит / с, это позволяет не задумываться о целостности пакетов.
Большой проблемой являются жалобы на злоупотребления, Abuse Complaints. Этот термин означает, что кто-то пометил Вас, как источник спама или другого вредоносного действия. Часто такое случается с компаниями, когда адресат не хочет больше получать от Вас письма, но не может отписаться от рассылки, потому что Ваша компания не сообщила ему ссылку для этого. Он помечает Вашу почту как спам, и это вредит общей репутации. Такое может произойти при сканировании сети. Вы можете получить Abuse Complaints, и ваш ISP серьёзно этим огорчится. Или Вы нарушите соглашение между пирами, Вам запретят играть роль пира. Однако существуют намного худшие вещи:
сканирование угрозы Heartbleed сгенерирует Abuse Complaints на несколько недель позднее, и Вы всё равно получите удар по репутации;
сканирование HTTP может отправить Вас в бан-лист fail2ban, то есть Ваш IP будет заблокирован;
нарушение правил обнаружения угроз Snort Threat Rules может также создать множество жалоб Abuse Complaints.
Cуществующая методология мониторинга сети отслеживает входящий трафик. Если Вы используете сканирование, Ваш входящий трафик будет большим, и Вы попадёте под подозрение. Считается, что так можно отследить хакеров, хотя это всё равно, что искать потерянные в кустах ключи под уличным фонарём только потому, что там светлее.
К чему Интернет-провайдеры должны относиться серьёзно? К тому, что некоторые сети используют blackholing («маршрутизацию в некуда», когда пакеты такой маршрутизации будут удалены по причине «No route to host») для целой автономной сети AS.
Список исключений необходим при сканировании, так как мы не хотим сканировать чужие почтовые ящики и сегменты сети частного характера. Создание списка исключений производится с помощью задания параметров сканирования в командной строке:
Важной вещью является создание публичного списка исключений. Мы бы очень хотели создать публичный список экспертов в области безопасности, но большинство из тех, кто присылает нам запрос на участие в программе, обычно просят убрать их из этого списка. Они боятся, что кто-то узнает их IP или адреса корпоративной сети и попытается их взломать. К счастью, сети BGP обладают всей этой информацией в публичном доступе, которая выложена в довольно изящном формате и доступна всем. Люди должны понимать, что сканирование Интернет принесёт им только пользу и никоим образом не затронет личной информации, которую они не хотят никому показывать. К сожалению, большинству приходится это доказывать, потому что они путают сканирование и хакерство. Да и вообще людям трудно поверить в то, что можно просканировать весь Интернет.
Например, компания имеет некую сеть, которую мы сканируем по их просьбе, но у них также имеется и подсеть, в которой хранится важная информация. Так вот, увидев, как проходит сканирование, они пугаются и говорят: «Вы сканируете даже скрытые сети, Вы видите диапазон портов и адресов, поэтому Вы можете нас взломать»!
Шесть месяцев назад произошла интересная история. Я сканировал сеть для одного заказчика, и его разбудили ночью звонком по поводу экстренной конференции, созванной из-за взлома сети. Он позвонил мне, и я вынужден был его успокаивать и объяснять, что сканирование не имеет никакого отношения к хакерской атаке, просто они нашли их уязвимости раньше, чем мы. Часто клиенты считают, что как только они дают нам разрешение на сканирование, тут же открываются какие-то бреши в защите, и туда сразу же лезут хакеры.
Ещё один случай был с одним парнем из Австралии. Он заметил, что мы при сканировании сети послали ему запрос на соединение в виде единственного SYN-пакета, и позвонил мне, мол, кто мы такие и на каком основании этим занимаемся. Я всё объяснил, сообщил ему адрес нашего сайта, где есть все регламенты и правила, сказал, что мы занимаемся этим абсолютно легально, по заказам клиентов. Он ничего не захотел слушать и принялся угрожать нам Интернет-полицией, что немедленно позвонит куда следует и нас всех арестуют. Просто какой-то сумасшедший, который не понимал, что если бы мы занимались сканированием незаконно, уже через час нас бы всех поймали, потому что мы действуем совершенно открыто.
Подобные жалобщики часто просто глупы. Они не понимают, что подавляющее большинство процессов, проходящих в сети, все порты, роутеры, свитчи, сессии постоянно открыты и не защищены никаким шифрованием. Просто иначе Интернет не смог бы работать вообще, если бы на каждое действие требовалось разрешение. Если человек боится, что данные его банковской карты могут украсть, ему лучше вообще не пользоваться Интернетом. И это происходит на фоне того, что люди не в состоянии просто сконфигурировать свои устройства так, чтобы закрыть имеющиеся бреши. Они оставляют их открытыми для всех и потом удивляются, что стали добычей хакеров. Хочу показать Вам полученное нами письмо такого содержания: «Инфраструктура финансовой группы Woori классифицируется как „оборудование объекта национальной безопасности класса А“ и несанкционированный доступ к этому оборудованию запрещён соответствующими законами и правилами». Эта компания расположена в Корее, и мы впервые узнали о ней из этого письма, потому что они не только отправили на нас жалобу, но и объяснили свои действия письмом. Я впервые встретил целую организацию, которая хочет иметь доступ в Интернет и при этом засекречивает всё своё оборудование. Зачем тогда вообще выходить в Интернет, если это невозможно сделать с закрытыми портами?
Важным аспектом для нашей работы является тесное сотрудничество с Интернет-провайдерами. Мы должны с ними дружить, иначе у нас не получится результативного сканирования. Мы предлагаем им бесплатные консультации по Интернет-безопасности, они помогают нам корректировать список поступающих жалоб. То есть провайдер разбирается, кто и почему на нас пожаловался, и отвергает необоснованные обвинения в наш адрес. Вместе с ними мы создаём проект SWIP – «Кто есть кто в Интернете» со списком проверенных IP-адресов, и заносим в наш «чёрный список» тех, кто настаивает, чтобы нас забанили за сканирование.
В качестве альтернативы, помогающей избежать некоторых недоразумений, можно создать анонимный виртуальный выделенный сервер VPS. Он обладает такими преимуществами:
провайдеру VPS можно заплатить небольшую сумму в биткоинах;
можно провести сканирование без всяких жалоб, так как Вы просто отключаете свой аккаунт от сети после проведения исследования, например VPS на хостинге Linode позволяет удалить аккаунт немедленно после оплаты $50;
достаточное количество таких провайдеров благосклонно относятся к спамерам и доносчикам, работающим под прикрытием виртуальных серверов.
На что же похожа технология masscan?
Она похожа на утилиту nmap, которая предназначена для сканирования IP-сетей с любым количеством объектов и определения состояния портов и соответствующих им служб:
все опции nmap можно разобрать по частям, кроме тех, про которые сказано: «эта опция nmap не поддерживается»;
при использовании некоторых инструментов полезным является то, что выходные форматы данных близки к nmap;
поддерживается много возможностей, таких как сканирование протокола передачи с управлением потоком SCTP или использование протокола пользовательских данных UDP в качестве полезной нагрузки nmap.
А вот чем masscan не похожа на nmap:
режим Port-at-a-time вместо режима Host-at-a-time. Это означает, что результаты для каждого порта сообщаются сразу же, как он будет обнаружен, и эти результаты не объединяются друг с другом при помощи хоста. То есть нашей программе не нужно посылать запрос, получать ответ и тратить на это время. Нет необходимости хранить в памяти миллиард запросов и миллиард ответов, поэтому она работает быстрее.
Она работает асинхронно: передаваемый массив создаётся из запросов, получаемый массив создаётся из откликов;
она сканирует в 1000 раз быстрее.
Nmap является лучшим сканером – её скриптовый движок NSE очень гибок, а сканирование нескольких хостов выполняется без проблем. Masscan же предназначена для больших сетей, так как эта программа намного быстрее и лучше масштабируется.
Masscan имеет собственный TCP/IP стек:
он работает параллельно с существующим стеком;
по умолчанию имеет тот же адрес;
служит для дублирования протокола сетевого уровня ARP и пакетов TCP RST.
Вот как производятся хакерские атаки с подменой адреса, так называемые спуфинг-атаки. Пусть у нас есть хост А – атакующий, хост V, на который нападают, и хост O, IP-адрес которого хакеры хотят использовать для атаки.
Хост А отправляет SYN-пакет хосту V, но обратным адресом указывает не свой IP адрес, а адрес хоста О. Атакуемый хост V отвечает хосту O пакетом SYN/ACK. Но хост О ничего не посылал хосту А и поэтому должен разорвать соединение пакетом RST. Предположим, что хост О не выслал такой пакет, потому что был перегружен, или выключен, или находится под защитой файервола, который блокирует пакеты SYN/ACK.
Если хост О не отправил пакет RST и не прервал начавшуюся атаку, хакерский хост А может взаимодействовать с хостом V, выдавая себя за хост О. Поэтому любой авторизатор, проверка капчи и прочее становится бесполезным, если файервол пользователя настроен неверно.
Таким образом, пакеты RST защищают IP-соединения от установки связи, то есть отвечают на пакеты SYN-отказом. С их помощью мы можем защитить от спуфинга различные IP-адреса, или установить защитный фильтр для определённого диапазона портов.
А теперь поговорим о командах, которыми управляется masscan.
Сканирование нескольких устройств производится таким образом, чтобы не нарушались протоколы безопасности:
— — shard 1/50 используется, когда нужно просканировать несколько компьютеров;
— — source-ip 10.0.0.32 — 10.0.0.63 расширяет диапазон сканирования до нескольких IP адресов на одном и том же компьютере;
— — source- ip 0.0.0.0 – 255.255.255.255 не стоит использовать вообще! Вы просто не дождётесь никаких результатов, и Ваш компьютер зависнет.
Иногда для избежания проблем проводится ручная настройка соединения TCP/IP:
— — source-ip 192.168.10.15;
— — source-port 4444;
— — router-mac 00-11-22-33-44-55 при — - router-ip 192.168.10.1.
Вот что делает команда проверки баннеров:
устанавливает TCP соединение;
выполняет эвристический анализ протоколов, то есть сканирует порт 443 на предмет SSH и HTTP, которые интернет адресует на этот порт.
В настоящий момент я использую что-то похожее на NSE-скриптинг, но скоро перейду на программирование на основе С.
Вы также можете использовать тестирование нагрузки. Это может «пробить» защиту файерволов и поэтому актуально для проверки их способностей обеспечить безопасность. В этом случае команды — - infinite, — - banners, — - sourse-ip <диапазон > являются полезными для быстрого сканирования большого количества устройств.
Обычно никто этим не пользуется, но в нашей программе существует возможность использования исходящих двоичных файлов, для этого используется команда:
– oB foo.scan вместо –oX foo.xml
Затем выполняется конвертирование:
masscan–readscan foo.scan –oX foo.xml
Данный способ обеспечивает более компактное сканирование. Кроме того, если в исходящих данных имеются ошибки, их легче поправить в двоичном формате.
Ещё одна полезная функция — это сканирование spoofing. IP-spoofing заключается в подмене IP-адреса в теле пакета так, чтобы ответный пакет перехватывался хакерским адресом. Эта технология используется хакерами для перехвата трафика между хостами в Ethernet-сетях.
Spoofing cканирование состоит в следующем:
приём пакета одним IP-адресом, например, смартфоном под управлением Android;
принимаемые пакеты обладают низкой пропускной способностью;
отправка пакетов из дата-центра без исходящих фильтров, команда — - source- ip позволяет просканировать spoofing другого IP-адреса.
Вот как выглядят результаты сканирования. На первой картинке Вы видите окно нашей программы, на второй – результат её работы.
Результат проверки на угрозу Heartbleed показывает, что по состоянию на 10 апреля уязвимость была обнаружена в 600 000 систем, и в июле 300 тысяч систем всё ещё оставались уязвимыми, причём большинство из них составляли аппаратные устройства, то есть сами компьютеры, роутеры, веб-камеры и серверы. То есть Вы не увидите их уязвимость, если проверите их по DNS-именам, помогает только сканирование по IP-адресам. Мы просканировали также мейнфремы – большие отказоустойчивые серверы, например TN3270 Telnet –over-SSL через порт 992. Вы можете взглянуть на @mainframed767 и увидеть такие интересные вещи, как окно авторизации пользователя главного сервера IBM.
Третья картинка изображает результаты сканирования баннеров. Сейчас я попробую показать Вам нашу программу в действии. Для этого я открываю главное окно и командной строкой задаю адрес сервера, который хочу просканировать. В некоторых случаях сервер не отвечает.
Сейчас Пол попробует зайти под своим логином и продемонстрирует возможности сканирования.
Пол говорит, что если у вас возникнут какие-то вопросы по использованию программы, можно связаться непосредственно с ним и получить нужные объяснения. В качестве примера Пол приводит сканирование Интернет через сервер VNS 5900, которое занимает от 15 до 20 минут.
Преимуществом нашей программы является возможность получения списка уязвимостей без необходимости авторизации в сети или на каждом сетевом устройстве. Мы проверяем систему снаружи, а не изнутри. Использование масштабирования позволяет проверять огромные массивы Интернет-сети, в том числе облака, и это стоит меньше 16 центов в час.
Вот сейчас я задаю медленное сканирование сети defcon через порт 80 по 10 пакетов в секунду, и результат немедленно появляется на экране.
В данный момент мы видим, сколько в сети открытых незащищённых портов устройств с соответствующими IP-адресами. И хакер может использовать эти IP-адреса для своей spoofing атаки.
Эта процедура совершенно не мешает работе сети, которая подвергается сканированию, пользователь может запускать любые приложения. Итак, сканирование сети defcon заняло чуть больше минуты, и мы определили все существующие уязвимости, просто просканировав порт 80. Задавая размер пакета, можно ускорить или замедлить сканирование. Мы рассказали всё, что нужно знать о программе masscan, и если у Вас есть вопросы, пишите нам на электронную почту или твиттер @erratarob и paulm.
Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас:Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).