Black Hat Rust, Rust, Программирование

#11 Black Hat Rust. Наш первый сканер на Rust.

Здравствуйте, дорогие друзья.

Программное обеспечение, используемое для отображения поверхностей атак, называется сканером. Сканер портов, сканер уязвимостей, сканер поддоменов, сканер SQL-инъекций… Они автоматизируют длительную и кропотливую задачу, которой может быть разведка, и предотвращение человеческих ошибок (например, забывание поддомена или сервера). Вы должны иметь в виду, что сканеры не являются панацеей: они могут быть очень шумными и, таким образом, раскрывать Ваши намерения, блокироваться системами защиты от нежелательной почты или сообщать неполные данные.

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

Обработка ошибок

Будь то для библиотек или для приложений, ошибки в Rust строго типизированы, и, в большинстве случаев, представлены в виде перечислений с одним вариантом для каждого вида ошибок, с которыми может столкнуться наша библиотека или программа. Для библиотек в настоящее время хорошей практикой является использование этой ошибки crate. Для программ рекомендуется использовать anyhow crate, это улучшит ошибки, возвращаемые основной функцией.

Мы будем использовать оба в нашем сканере, чтобы посмотреть, как они сочетаются.Давайте определим все случаи ошибок нашей программы. Здесь все просто, поскольку единственной фатальной ошибкой является неправильное использование командной строки.

Перечисление поддоменов

Мы будем использовать api, предоставляемый crt.sh , который можно запросить, вызвав следующую конечную точку: https://crt.sh/?q=%25.[domain.com]&output=json»

Сканирование портов

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

Существует множество различных методик, поэтому, чтобы не увеличивать сложность нашей программы, мы будем использовать самую простую технику: пытаться открыть сокет TCP. Когда сокет открыт — это означает, что сервер готов принимать соединения. С другой стороны, если сервер отказывается принимать соединения, это означает, что ни одна служба не прослушивает данный порт. В этой ситуации важно использовать тайм-аут, иначе наш сканер может зависнуть (почти) на неопределенный срок, сканируя порты, заблокированные брандмауэрами. Но у нас проблема. Выполнение всех наших запросов в определенной последовательности происходит чрезвычайно медленно.

Многопоточность

Многопоточность

Каждый поток процессора можно рассматривать как независимого работника: рабочая нагрузка может быть распределена между работниками.

Это особенно важно, поскольку сегодня, в силу законов физики, процессорам трудно масштабировать мощность с точки зрения количества операций в секунду (ГГц), поэтому вместо этого производители увеличивают количество ядер и потоков. Разработчикам приходится адаптироваться и разрабатывать свои программы таким образом, чтобы распределять рабочую нагрузку между доступными потоками, вместо того чтобы пытаться выполнять все операции в одном потоке, поскольку рано или поздно они могут достичь предела производительности процессора.

В нашей ситуации мы отправим задачу на сканирование каждого порта. Таким образом, если у нас есть 100 портов для сканирования, мы создадим 100 задач. Если у нас есть 10 потоков с тайм-аутом в 3 секунды, сканирование всех портов на наличие одного хоста может занять до 30 секунд (10 * 3). Если мы увеличим это число до 100 потоков, то сможем сканировать 100 портов на 1 хосте каждые 3 секунды.

На этом все. Всем хорошего дня!

Black Hat Rust

Цикл статей по курсу Black Hat Rust.