Массовое сканирование

В контексте работы с доступами, да и с точки зрения массового сканирования сети Интернет в исследовательских целях, часто возникает проблема получения "абуз" в виду нарушения ToS (Terms of Service) хостингов. Предлагаю разобрать, почему приходят "абузы", какие бывают, как с ними бороться и как минимизировать потери.

Итак, типичный пользователь заказывает VDS/VPS/Dedicated Server/... с какой-либо ОС, устанавливает туда masscan, zmap или какое-нибудь старье вроде scanrand, unicornscan. После запуска сканирования в скором времени (от нескольких часов до нескольких дней) приходит письмо от тех. поддержки, либо учетная запись/арендованный сервер блокируются.

Начнем с причин. Большинство жалоб являются следствием быстрого сканирования подсетей какого-либо крупного владельца. Чаще всего, как показывает практика, Hetzner и некоторых .edu-учреждений. Скорость сканирования действительно может сильно влиять на полезное время функционирования сканирующей машины, но чудес ждать не стоит, да и обычно стоит цель просканировать как можно быстрее. Приходящие жалобы являются автоматизированными, т.е. в исключительно редких случаях жалобу составляет реальный человек, обычно сетевое оборудование просто видит аномальную с его точки зрения активность, получает информацию об IP-адресе из WHOIS, оттуда же берется адрес, куда слать "абузы", далее формируется e-mail и отправляется по указанному адресу.

Ниже приведены примеры "абуз" от Hetzner, .edu-учреждений, Российской Netis-Telecom и нескольких других сетей:

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

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

Hello,
Sorry for the inconvenience, one of my droplets is just port scanning for several ports large IP ranges to provide info for my research regarding network statistics (like info that can be obtained from Shodan). The scan won't last long and will be shut down in 24 hours. It won't cause any network malfunction for other systems, I just need to obtain some info to provide some sort of statistics in my paper.

Hello,
Recently I have created a droplet that is doing a minor network scanning in academic purposes.
Sorry, if it was against ToS. I've already shut down the scanning process.
Thank you.

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

Что можно сделать чтобы избежать блокировок или максимально растянуть их во времени? Во-первых, выбор хостера. Ниже приведена небольшая сводная таблица по стоимости и блокировкам:

Aruba Cloud       - www.arubacloud.com   - 1€/мес   - 2-7 дней    - блокировка аккаунта без писем от саппорта
Digital Ocean     - www.digitalocean.com  - 5$/мес   - 1-2 дня      - приходят письма от саппорта, можно выиграть немного времени диалогами
Servers.com      - www.servers.com         - 5€/мес   - 7+ дней     - письма не приходили, блокировки не было
Microsoft Azure  - azure.microsoft.com     - free       - 1-30+ дней -  письма приходят, но есть нюансы
EstNOC             - www.estnoc.ee             - 5$/мес  - 2-5 дней     - приходят письма от саппорта

Для сканирования использовались самые дешевые VPS, на них запускался masscan со следующими параметрами:

Уточню детали по поводу бесплатности Microsoft Azure. Многие знают, что существует программа Microsoft BizSpark (https://www.microsoft.com/ru-ru/ms-start), в рамках нее предоставляется доступ к куче лицензионного ПО и 150$ в месяц на Microsoft Azure в течение года. Податься на нее довольно легко, достаточно сделать лендинг, описывающий ваш стартап (можно скопировать чей-нибудь) и отправить заявку. Также есть вариант взять тестовый месяц https://azure.microsoft.com/ru-ru/free/ но я не пробовал.

Вернемся к избеганию блокировок. Также могут влиять настройки сканирования, точнее они однозначно влияют, но зависимость хитрая. Разберу на примере того же Azure: в качестве теста было сделано 5 аккаунтов, на каждом по 2 виртуальные машины. При неагрессивном сканировании (--max-rate 4000, на один порт, плюс перерывы в сканировании в районе суток, т.е. непрерывное сканирование велось буквально несколько дней, потом делался перерыв) виртуальные машины прожили в районе месяца, никаких претензий не приходило. Далее была увеличена скорость (--max-rate 8000, 4-6 портов, без перерывов) и в пределах нескольких дней пришло письмо:

Но это отвалился один аккаунт, виртуальные машины на других продолжают без проблем сканировать, никаких писем не приходит. Вообще скорость незначительная на фоне тестовой скорости, которая упоминалась выше, но такая вот ситуация. Возможно стоит модифицировать логику работы masscan с диапазонами или просто аккуратно их делить перед выгрузкой на сканирующие хосты, чтобы с одной машины проходились как можно меньшие диапазоны в рамках одной сети. Ниже приведу скрипт на Python, который разбивает диапазоны в CIDR нотации (это когда 10.11.12.13/24):

Необходимо использовать Python3, N = 5 - количество частей, на которые делятся все диапазоны из файлы. В результате получаем N файлов с именами вида include_*.txt, которые можно загружать на хосты для сканирования.
Подведем итог по способам предотвращения жалоб и увеличения продолжительности жизни хостов: грамотный выбор хостера, не слишком высокие скорости сканирования, распределение сканирования больших подсетей одного владельца на несколько хостов.

Не забываем, что в идеале стоит выгружать результаты сканирования, например, каждый час на отдельный сервер, чтобы в случае потери не пришлось заново проводить сканирование всего диапазона, который сканировала машина. На уровне костылей это тривиально автоматизируется Bash-скриптом на десяток строк, менее тривиально - написать нормальный скрипт на каком-либо языке, а данные хранить в MongoDB, хотя можно и в MySQL или PostgreSQL, зависит от ваших амбиций по сканированию.

Вот и все? Не совсем, есть еще один вариант, который редко рассматривается и является затратным, но может для кого-нибудь окажется целесообразным. Итак, можно еще попробовать для быстрого сканирования и возможности 100% не потерять результат, поступить следующим образом: приобретается свое оборудование, ставится в стойку, приобретается пул IP-адресов, приобретается доступ к какой-либо точке обмена трафиком (IX), далее вам потребуется у кого-то взять "доступ" в остальной интернет (внешний канал). Ваша подсеть является "тупиковой AS", вы начинаете сканировать "весь интернет". Что произойдет дальше? Для начала вам, как владельцу начнут приходить жалобы, вы их можете игнорировать или формировать шаблонные ответы, что меры приняты. Это поможет вам на условный месяц, к этому времени уже могут появиться запросы от людей, которым можно некоторое время объяснять, что решаете проблему, приняты меры и т.п.
Далее возможны несколько вариантов:
1. Ваша подсеть молча блокируется тем же Hetzner и все;
2. Абузы начинают приходить вашему аплинку (тому, кто вам предоставляет доступ, например, с MSX-IX в глобальную сеть).

Любой аплинк не заинтересован, чтобы его диапазоны попали в черный список крупных сетей, поэтому уже с его стороны будет обращение в ваш адрес, где можно будет потянуть время, но в конечном счете вам откажут в обслуживании (при условии, что за вас кто-то серьезно взялся). Можно повертеться, внести изменения в так называемый routing object, взять другой аплинк, но выбор не велик, точнее велик, но не настолько. Также происходит обмен информацией и вы запросто можете попасть в черный список и трафик с вашего диапазона порежут с помощью ACL, что даже в пределах IX никуда пойти не удастся. Сроки? Сроки могут быть разные, зависит от того, насколько серьезно кто-то возьмется за ваши сканирования.
Кто-то спросит, а зачем это все, ведь есть "абузоустойчивые" хостеры. Да, есть, но в некоторых ситуациях удобнее и дешевле опираться на собственное железо, чем платить кому-то крупную сумму за аренду и не иметь контроля над оборудованием.

Подводя итог, можно сказать, что достаточное быстрое и продуктивное сканирование возможно организовать:
1. С использованием множества дешевых VPS, которые потребуют автоматизации создания инстансов, выгрузки/загрузки информации и агрегации всего на стороннем сервере.
2. Одиночным сервером с действительно широким каналом и собственной IP-подсетью, что даст возможность точно знать, приходят ли "абузы", от кого, и позволит гибко на них реагировать, а также всегда будет возможность забрать результат работы.
3. По смыслу второй пункт, но обратиться к "абузоустойчивым" хостерам, вместо того, чтобы самостоятельно все организовывать.

Что выбрать? Решать вам.

Первоначально статья была размещена 9.11.2017 на форуме exploit.in.

Массовое сканирование: 2 комментария

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *