При доказательствах методом перебора можно использовать компьютеры

Обновлено: 07.07.2024

Этот метод — один из древнейших методов, которым пользуются и в современной математике. Хотя теоремы в абсолютном большинстве распространяются на бесконечное число объектов, в математике имеют место и такие теоремы (задачи на доказательство), которые охватывают лишь конечное число объектов. Для доказательства таких теорем можно использовать метод перебора. Так, например, для того чтобы доказать, что среди двузначных чисел есть только два числа, которые равны утроенному произведению их цифр, можно перебрать все двузначные числа от 10 до 99 и показать, что требованию теоремы удовлетворяют лишь числа 15 и 24.

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

«Доказать, что среди двузначных чисел есть только одно, которое равно удвоенному произведению его цифр».

В соответствии с условием задачи мы должны найти двузначное число , для которого выполняется равенство = 2 а b, т.е. 10 а + b = 2 а b. Выразим из последнего равенства а: a = .

Учитывая, что b — это цифра, можно записать: 0 < b < 9, b . Из равенства a = следует, что b - 5 . Таким образом, из системы следует: 6 b 9.

Хотя перебор всех натуральных значений b, удовлетворяющих неравенству 6 b 9, не сложен, но можно еще сузить область перебора, для этого заметим, что b должно быть четным. Тогда следует рассмотреть лишь b = 6, b = = 8. Итак, проведенные рассуждения позволили сузить область перебора от 90 до 10 случаев, затем до 4 и окончательно до 2 случаев. При b — 6 цифрой а будет 3, а числом будет 36. Это число удовлетворяет требованию задачи. При

b = 8 значение а будет дробным числом, но так как а — это цифра, то а дробным быть не может.

Итак, мы получили, что лишь одно двузначное число 36 равно удвоенному произведению его цифр.

Brute-force (атака полным перебором) – метод решения математических задач, сложность которого зависит от количества всех возможных решений. Сам же термин brute-force обычно используется в контексте хакерских атак, когда злоумышленник пытается подобрать логин/пароль к какой-либо учетной записи или сервису.

Рассмотрим инструменты, которые можно использовать для выполнения brute-force атак на SSH и WEB-сервисы, доступные в Kali Linux (Patator, Medusa, Hydra, Metasploit), а также BurpSuite.

Все материалы, предоставленные в рамках данной статьи, предназначены для использования исключительно в учебных целях. Использование материалов в противоправных и противозаконных запрещено.

Brute-force SSH

Для примера возьмем тестовую машину 192.168.60.50 и попробуем подобрать пароль пользователя test по SSH. Мы будем использовать популярные пароли из стандартного словаря rockyou.txt.


Patator
Для подбора пароля средствами Patator используем команду:

image


Hydra
Для подбора пароля используя Hydra выполним команду:

hydra -V -f -t 4 -l test -P /root/wordlist ssh://192.168.60.50

где:
-V – показывать пару логин+пароль во время перебора
-f – остановка как только будет найден пароль для указанного логина
-P – путь до словаря с паролями
ssh://192.168.60.50 – указание сервиса и IP-адрес жертвы

image


Medusa
Для подбора пароля с использованием Medusa выполним команду:

medusa -h 192.168.60.50 -u test -P /root/wordlist -M ssh -f -v 6

image


Metasploit
Произведем поиск инструмента для проведения brute-force атаки по SSH:
search ssh_login и получили ответ:

image

Для просмотра необходимых параметров, воспользуемся командой show options . Для нас это:
rhosts – IP-адрес жертвы
rport – порт
username – логин SSH
userpass_file – путь до словаря
stop_on_success – остановка, как только найдется пара логин/пароль
threads – количество потоков

image

Указание необходимых параметров производится через команду "set".

set rhosts 192.168.60.50
set username test
set userpass_file /root/wordlist
set stop_on_success yes
set threads 4
set rport 22

Указав необходимые параметры набираем команду "run" и ждем.

image

Противодействие

Ограничить количество устанавливаемых соединений с использованием межсетевого экрана. Пример настройки iptables:

-A INPUT -i eth0 -p tcp --dport 22 -m connlimit --connlimit-above 1 --connlimit-mask 32 -j REJECT --reject-with tcp-reset .

Такое правило установит ограничение доступа к SSH для каждого IP-адреса до 1 соединения в секунду, значительно усложнив перебор. Также эффективным решением может быть использование двухфакторной аутентификации (например, используя eToken) или аутентификации с использованием ключевой пары, а также использование ACL на основе IP-адресов.

Brute-force WordPress

Рассмотрим другой пример — подбор пароля окна авторизации веб-формы.

image

Для примера будем подбирать пароль от учетной записи администратора wordpress.


BurpSuite
Для начала нам необходимо понять, как происходит процесс авторизации. Для этого мы будем использовать BurpSuite. Нам необходимо попробовать авторизоваться с любым паролем и логином, чтобы посмотреть какие запросы проходят через BurpSuite.

image

Отлично, мы увидели POST запрос для авторизации с ним мы и будем работать.
В BODY указано какой логин и пароль проверялись, а значит, мы можем попробовать самостоятельно подставить нужные нам значения.
Передаем этот запрос в Intruder и там выбираем необходимые параметры для атаки. В пункте Payload Positions тип атаки оставляем sniper, но для проверки оставляем только параметр pwd. Таким образом, при атаке будет изменяться только этот параметр.

image

Загружаем необходимый словарь и начинаем атаку.

image

Из поведения веб-приложения мы видим, что неверный пароль возвращает код ответа 200. После перебора словаря, видим, что один из паролей дал ответ с кодом 302 — он и является верным.

image

Данный метод перебора занимает намного больше времени, чем при использовании Patator, Hydra, Medusa и т.д. Даже с учетом того, что мы взяли небольшой словарь, BurpSuite перебирал словарь около 40 минут.


Hydra
Попробуем подобрать пароль с помощью Hydra.
Как мы уже знаем, при неверной авторизации возвращается код 200, а при успешной – 302. Попробуем использовать эту информацию.
Для запуска используем команду:

hydra -V -f -l admin -P /root/wordlist -t 4 http-post-form://192.168.60.50 -m "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1:S=302"

image


Patator
Как мы уже знаем, при неудачной авторизации возвращается код 200, а при удачной – 302. Будем использовать тот же принцип, что и с Hydra:
Запуск производится командой:

image

image

Противодействие

Ограничить (усложнить) brute-force атаки на web-приложения можно средствами iptables (по аналогии с SSH) и средствами nginx. Для этого необходимо создать зону лимитов:
.
limit_req_zone $binary_remote_addr zone=req_limits:10m rate=30r/s;
.

и задействовать ее:
location / .
limit_req zone=req_limits burst=10;
limit_req_status 429;
.
>

Такие настройки позволят ограничить количество запросов с одного IP-адреса до 40 в секунду.

Усложнить задачу перебора можно используя следующие методы:
— Применение межсетевого экрана и прочего ПО для ограничения количества обращений к защищаемому сервису. О том, как мы используем машинное обучение для выявления подобных атак (в том числе распределенных), можно почитать в статье.
— Использование средств, препятствующих быстрой проверке корректности ключа (например, Captcha).

Заключение

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

Подобные рекомендации (как и рекомендации по безопасной веб-разработке) мало кто соблюдает, поэтому необходимо использовать различные программные решения, позволяющие:
— ограничить подключение по IP-адресу, или, если это невозможно, ограничить одновременное количество соединений с сервисом (средствами iptables, nginx и прочими);
— использовать двухфакторную аутентификацию;
— выявлять и блокировать подобные атаки средствами SIEM, WAF или другими (например, fail2ban).

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

Алгоритм грубой силы , которая находит делители из более натурального числа п бы перечислить все целые числа от 1 до п, и проверить , является ли каждый из них делит п без остатка. Подход грубой силы для головоломки с восемью ферзями будет исследовать все возможные варианты расположения 8 фигур на 64-квадратной шахматной доске и проверять для каждого расположения, может ли каждая фигура (ферзь) атаковать любую другую.

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

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

СОДЕРЖАНИЕ

Реализация поиска методом перебора

Базовый алгоритм

Чтобы кандидат в P после текущего c .

  1. действительный ( P , C ): проверка ли кандидат с является решением для P .
  2. output ( P , c ): используйте решение c из P в соответствии с приложением.

Следующая процедура должна также сказать , когда нет больше кандидатов для экземпляра Р , после текущего с . Удобный способ сделать это - вернуть «нулевого кандидата», некоторое обычное значение данных Λ, которое отличается от любого реального кандидата. Точно так же первая процедура должна возвращать Λ, если для экземпляра P вообще нет кандидатов . Затем метод грубой силы выражается алгоритмом

Например, при поиске делителей целого числа n данные экземпляра P - это число n . Вызов first ( n ) должен возвращать целое число 1, если n ≥ 1, или Λ в противном случае; вызов next ( n , c ) должен возвращать c + 1, если c < n , и Λ в противном случае; и valid ( n , c ) должен возвращать true тогда и только тогда, когда c является делителем n . (На самом деле, если мы выбираем Л быть п + 1, испытания п ≥ 1 и с < п излишни.) Алгоритм поиска перебора выше будет вызывать выход для каждого кандидата , который является решением данного экземпляра P . Алгоритм легко модифицируется так, чтобы он останавливался после нахождения первого решения или определенного количества решений; или после тестирования указанного количества кандидатов, или после того, как потратили определенное количество процессорного времени.

Комбинаторный взрыв

Главный недостаток метода грубой силы состоит в том, что для многих реальных задач количество естественных кандидатов недопустимо велико. Например, если мы ищем делители числа, как описано выше, количество проверенных кандидатов будет заданным числом n . Так, если n имеет, скажем, шестнадцать десятичных цифр, для поиска потребуется выполнить не менее 10 15 компьютерных инструкций, что на обычном ПК займет несколько дней . Если n - случайное 64- битное натуральное число, которое в среднем содержит около 19 десятичных цифр, поиск займет около 10 лет. Такой резкий рост числа кандидатов по мере увеличения размера данных встречается во всевозможных проблемах. Например, если мы ищем конкретную перестановку из 10 букв, то у нас есть 10! = 3 628 800 кандидатов для рассмотрения, которые обычный ПК может сгенерировать и протестировать менее чем за одну секунду. Однако добавление еще одной буквы - что увеличивает размер данных всего на 10% - умножит количество кандидатов на 11, увеличиваясь на 1000%. Для 20 букв число кандидатов составляет 20 !, что составляет примерно 2,4 × 10 18 или 2,4 квинтиллиона ; и поиск займет около 10 лет. Это нежелательное явление обычно называют комбинаторным взрывом или проклятием размерности .

Одним из примеров случая, когда комбинаторная сложность приводит к пределу разрешимости, является решение шахмат . Шахматы - это не решаемая игра . В 2005 году все концовки шахматной партии с шестью или менее фигурами были решены, показывая результат каждой позиции при идеальной игре. Потребовалось еще десять лет, чтобы завершить основание стола, добавив еще одну шахматную фигуру, таким образом завершив базу из 7 частей. Добавление еще одной фигуры к шахматной концовке (таким образом, создавая основу стола из 8 фигур) считается неразрешимым из-за дополнительной комбинаторной сложности.

Ускорение поиска методом перебора

Один из способов ускорить алгоритм перебора состоит в том, чтобы уменьшить пространство поиска, то есть набор возможных решений, с помощью эвристики, специфичной для класса проблемы. Например, в задаче о восьми ферзях задача состоит в том, чтобы разместить восемь ферзей на стандартной шахматной доске так, чтобы ни один ферзь не атаковал другой. Поскольку каждый ферзь может быть помещен в любое из 64 полей, в принципе есть возможность рассмотреть 64 8 = 281 474 976 710 656 возможностей. Однако, поскольку все ферзи одинаковы и никакие две ферзя не могут быть помещены на одно и то же поле, кандидаты имеют все возможные способы выбора набора из 8 квадратов из набора, состоящего из всех 64 клеток; что означает 64 выбора 8 = 64! / (56! * 8!) = 4 426 165 368 возможных решений - примерно 1/60 000 от предыдущей оценки. Кроме того, никакое расположение с двумя ферзями в одном ряду или одном столбце не может быть решением. Следовательно, мы можем дополнительно ограничить набор кандидатов этими схемами.

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

В некоторых случаях анализ может сократить кандидатов до набора всех допустимых решений; то есть, он может дать алгоритм, который напрямую перечисляет все желаемые решения (или находит одно решение, в зависимости от ситуации), не тратя время на тесты и создание недопустимых кандидатов. Например, для задачи «найти все целые числа от 1 до 1 000 000, которые без остатка делятся на 417» наивное решение методом перебора сгенерирует все целые числа в диапазоне, проверяя каждое из них на делимость. Однако эту проблему можно решить гораздо эффективнее, если начать с 417 и многократно добавлять 417, пока число не превысит 1000000, что требует всего 2398 (= 1000000 ÷ 417) шагов и никаких тестов.

Изменение порядка пространства поиска

В приложениях, которым требуется только одно решение, а не все решения, ожидаемое время выполнения поиска методом перебора часто будет зависеть от порядка, в котором тестируются кандидаты. Как правило, в первую очередь следует тестировать наиболее перспективных кандидатов. Например, при поиске подходящего делителя случайного числа n лучше пронумеровать кандидатов-делителей в порядке возрастания, от 2 до n - 1 , чем наоборот - потому что вероятность того, что n делится на c, равна 1 / с . Более того, вероятность того, что кандидат будет действительным, часто зависит от предыдущих неудачных испытаний. Например, рассмотрим задачу о нахождении 1 бита в заданном 1000-битовой строке P . В этом случае возможные решения - это индексы от 1 до 1000, и кандидат c действителен, если P [ c ] = 1 . Теперь предположим, что первый бит P с равной вероятностью будет 0 или 1 , но каждый последующий бит равен предыдущему с вероятностью 90%. Если кандидатов перечислить в порядке возрастания, от 1 до 1000, число t кандидатов, проверенных до успеха, будет в среднем около 6. С другой стороны, если кандидаты перечислены в порядке 1,11,21,31 . 991,2,12,22,32 и т. Д., Ожидаемое значение t будет лишь немногим больше 2. как правило, пространство поиска должно быть пронумеровано таким образом, чтобы следующий кандидат, скорее всего, был действителен, учитывая, что предыдущие испытания не проводились . Таким образом, если действительные решения могут быть «сгруппированы» в каком-то смысле, то каждый новый кандидат должен быть как можно дальше от предыдущих в том же смысле. Конечно, верно и обратное, если решения могут быть распределены более равномерно, чем ожидалось случайно.

Альтернативы поиску методом перебора

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

В криптографии

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

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

Полный перебор (или метод «грубой силы» от brute force ) — метод решения задачи путем перебора всех возможных вариантов. Сложность полного перебора зависит от криптографии на сложности полного перебора основывается оценка шифров. В частности, шифр считается криптостойким, если не существует метода «взлома» существенно более быстрого чем полный перебор всех ключей. Криптографические атаки, основанные на методе полного перебора, являются самыми универсальными, но и самыми долгими.

Содержание

Методы оптимизации полного перебора [ ]

Для увеличения скорости подбора ключа используется распараллеливание вычислений. Известно два направления распараллеливания.

Реализация распараллеливания [ ]

Реализовать распараллеливание можно по-разному.

<\displaystyle 7*10^<-4></p>
<ul>
  <li>Например, создать вирус для распространения программы-взломщика в глобальной сети. Он должен использовать свободное время процессора для перебора ключей. Рано или поздно один из зараженных компьютеров обнаружит искомый ключ и оповестит об этом злоумышленника.</li>
</ul><ul>
  <li>Существуют также более оригинальные идеи распараллеливания вычислений: <ul>
  <li>«Китайская лотерея», создание «криптоаналитических» водорослей и животных. <ol>
  <li>Китайская лотерея предполагает, что в каждый радиоприемник и телевизор встроена микросхема, запрограммированная на автоматическую проверку различных множеств ключей после получения по эфиру пары открытый текст/шифртекст.</li>
  <li>С использованием биотехнологий можно сделать криптоанализ ещё эффективнее. Можно создать существо, состоящее из клеток, умеющих тестировать ключи. Каким-то образом в клетки передаются пары открытый текст/шифртекст. Решения переносятся к органам речи специальными клетками, путешествующими по кровеносной системе существа. В доисторические времена средний динозавр состоял примерно из 10 14 клеток (без микробов). Если каждая клетка может выполнять миллион шифрований в секунду, вскрытие 56-битового ключа займёт >
сек, а 64-битового — не более 0,2 сек.

  • Ещё один способ — создание водорослей, умеющих вскрывать криптографические алгоритмы методом полного перебора. Водоросли могут покрывать большие пространства, что теоретически позволит создать что-то вроде распределённого компьютера с огромным числом процессоров.
  • Пример продолжительности подбора [ ]

    (данные получены посредством программы Hacking Time Analizer)

    Таким образом, пароли длиной менее 6 символов, в общем случае, не являются надежными.

    Примечания [ ]

    fr:Attaque par force brute id:Serangan brute-force nl:Brute force sv:Brute force

    Читайте также: