- Взлом паролей с помощью GPU. Часть I — подготовка
- Законные основания для взлома паролей
- Введение в хеши паролей
- Как происходит взлом паролей
- Файлы /etc/passwd и /etc/shadow
- Зачем использовать GPU?
- Оборудование
- Ссылки на использованные ресурсы
- Фундаментальные основы Linux. Часть VII. Управление локальными учетными записями пользователей
- Глава 27. Пароли пользователей
- Утилита passwd
- Файл shadow
- Шифрование ключевых фраз с помощью утилиты passwd
- Шифрование ключевых фраз с помощью утилиты openssl
- Шифрование ключевых фраз с помощью функции crypt
- Файл /etc/login.defs
- Утилита chage
- Блокировка учетных записей
- Редактирование локальных файлов
- Практическое задание: пароли пользователей
- Корректная процедура выполнения практического задания: пароли пользователей
Взлом паролей с помощью GPU. Часть I — подготовка
Добыча биткоинов осталась в прошлом. Используйте дорогие и мощные GPU для взлома паролей.
Когда всеобщее увлечение добычей биткоинов достигло своего пика, я захотел присоединиться к новому сообществу и заработать немного «легких» денег. Меня привлекали не только деньги, концепции, лежащие в основе добычи биткоинов заинтриговали меня — в частности, новый способ использования графических процессоров (GPU). С помощью не слишком дорогих видеокарт вы могли бы заработать достаточно денег, чтобы в относительно короткие сроки компенсировать ваши первоначальные инвестиции и счета за электричество.
Затем Bitcoin «накрылся медным тазом». И это, в общем-то, меня не особо огорчило, поскольку я не успел заморочиться созданием собственной «буровой». Кроме того, я нашел более интересное применение «железу» для добычи биткоинов: взлом паролей. Добыча биткоинов и взлом паролей — весьма схожие операции, а GPU может взламывать пароли намного быстрее, чем процессор или даже небольшой кластер процессоров. В этой статье, состоящей из двух частей, я объясню, как настроить и использовать компьютер для взлома паролей. В первой части я остановлюсь на принципах, лежащих в основе взлома паролей и общей настройке оборудования. А о конкретных методах атак с примерами команд я расскажу в следующей статье.
Законные основания для взлома паролей
Прежде чем начать, следует признать, что большинство причин для взлома паролей, мягко говоря, не очень законны. Очень часто можно услышать историю про взломанный веб-сайт, скомпрометированную базу паролей, и тысячи раскрытых «слабых» паролей. Часто люди занимаются взломом паролей, потому что они пытаются проникнуть в чужую систему, или уже проникли, украли хеши паролей и взламывают их, чтобы получить возможность атаковать очередную систему.
Тем не менее есть вполне легальные причины взламывать пароли, в особенности для системного администратора или веб-мастера:
- Проверка надежности паролей локальных пользователей;
- Возможность удостовериться, что пользователи соблюдают политику, принятую в отношении паролей;
- Способ понять, какова должна быть эта политика;
- Криптография сама по себе — интересное занятие;
- Добыча биткоинов больше не приносит прибыли.
Многие системы на базе Linux запускают простую атаку по словарю при смене пароля, чтобы проверить, не слишком ли он прост. И хотя в наши дни большинство систем управления паролями не позволят пользователям установить себе пароли, не отвечающие требованиям парольной политики, некоторые системы просто сообщают пользователям, что их пароли «слабы» и все же позволяют их использовать. В любом случае имеет смысл проводить аудит паролей в компании, хотя бы для того, чтобы убедиться, что случайный хакер с видеокартой за 300 $ не сможет взломать ваши пароли за день-другой. Когда вы пробуете себя в роли взломщика паролей, вы начинаете понимать, какие пароли легко «вскрыть», а какие — почти невозможно и накопленный опыт поможет вам понять, что пришла пора обновлять требования парольной политики.
Введение в хеши паролей
Хеши паролей были придуманы для решения одной хитрой задачи. Если пользователи должны вводить пароли для того, чтобы войти в систему, то вы должны где-то в системе эти пароли хранить. Каким же образом сделать это так, чтобы они не хранились в виде открытого текста, но при этом можно было бы проверить, правильно ли пользователи их набирают при входе в систему? Решением является однонаправленное шифрование паролей с помощью хеша. Идея однонаправленного хеширования состоит в том, что пароль достаточно легко зашифровать, но почти невозможно восстановить его по хешу. Если вы когда-либо скачивали ISO-образ дистрибутива Linux и запускали md5sum, чтобы проверить, не «битый» ли он, то знайте, что вы использовали очень популярный однонаправленный алгоритм хеширования MD5. Другие распространенные однонаправленные алгоритмы хеширования включают в себя семейство SHA (SHA1, SHA256 и SHA512), а также phpass, ставший де-факто современным стандартом для сайтов, написанных на PHP, например, WordPress.
Когда вы входите в систему на базе Linux, введенный вами пароль конвертируется в хеш с помощью алгоритма, который использовался при создании этого пароля. Система сравнивает полученный хеш с уже имеющимся и если они совпадают, введенный пароль считается правильным и вы допускаетесь в систему. Кстати, для примера, если вы зарегистрированы на каком-либо современном сайте, написанном на PHP и ваш пароль — «123456», то он вполне может храниться в таком виде — «$P$BPlIiO5xdHmThnjjSyJ1jBICfPkpay1».
Как происходит взлом паролей
В простейшем виде взлом паролей очень похож на обычный вход в систему. Вы пытаетесь угадать пароль, хешируете его и сравниваете полученный хеш с существующим. Если хеши совпали — пароль взломан. Основное отличие между взломом и обычным входом в систему состоит в том, что при взломе вы производите сотни тысяч, если не миллионы таких сравнений в секунду.
Файлы /etc/passwd и /etc/shadow
Самая важная вещь, которая вам будет нужна перед началом взлома паролей — это их хеши. Поскольку мы говорим о совершенно законном использовании взлома, получить хеши будет просто. В конце концов, у вас просто обязан быть доступ с правами root к вашим собственным системам и базам данных, в том числе и к хешам паролей. В Linux эти хеши когда-то хранились в файле /etc/passwd. Вроде бы логичное место для хранения паролей, но проблема оказалась в том, что в этом файле хранятся также имена и идентификаторы пользователей, а из-за этого он должен быть доступен на чтение всем. Опять же, когда в этом файле находились данные паролей, любой локальный пользователь мог получить полный список хешей и начать их взламывать. В наши дни Linux держит хеши паролей в файле /etc/shadow, доступном для чтения только пользователю root. Что касается паролей для веб-сайтов, то их хеши обычно хранятся либо где-нибудь в файловой системе сервера, либо (и это бывает чаще) в специальной таблице базы данных.
Вторая важная вещь, которую вам необходимо знать — это алгоритм, с помощью которого были хешированы пароли, ведь для атаки нужно будет пользоваться именно им. Если вы имеете дело с хешами паролей от учетных записей ОС, то знайте, что тип хеша вы можете узнать из самого хеша. Если вы посмотрите на записи в файле /etc/shadow, то вы заметите множество странных символов с несколькими символами доллара («$»), разбросанными среди них. Символы «$» разделяют запись хеша на следующие секции:
В секции «id» содержится информация о типе алгоритма:
В настоящее время вы скорее всего столкнетесь с паролями, захешированными с помощью алгоритмов SHA-256 и SHA-512. Поскольку тип алгоритма и соль хранятся вместе с хешем, хеши паролей Linux являются очень хорошо переносимыми. Имея хеш, вы можете скопировать его на другой компьютер и использовать для входа тот же самый пароль.
Зачем использовать GPU?
Причина использования GPU вместо CPU для взлома паролей проста — GPU работает намного быстрее. Так как взлом паролей во многом схож с добычей биткоинов, те же причины, по которым GPU быстрее ведет добычу, применимы и в отношении взлома паролей. Если быть кратким, то GPU содержит в себе гораздо больше специализированных чипов, по-настоящему быстро выполняющих 32-битные операции. В то время как CPU может выполнять множество вычислений общего назначения, чипы графического процессора могут гораздо быстрее выполнять отдельные виды операций и при этом гораздо сильнее в параллельной обработке. Если вы хотите изучить этот вопрос более подробно, то обратитесь к этому ресурсу, объясняющему его применительно к добыче биткоинов: https://en.bitcoin.it/wiki/Why_a_GPU_mines_faster_than_a_CPU.
Оборудование
Самый важный вид оборудования для взлома паролей — это видеокарта с быстрым GPU. Так как взлом паролей схож с добычей биткоинов, вы можете оценить свой GPU применительно к добыче биткоинов.
На странице https://en.bitcoin.it/wiki/Mining_hardware_comparison приведен неплохой список видеокарт с описанием их производительности. Заглянув на этот сайт, вы наверняка заметите, что графические процессоры AMD работают намного быстрее, чем их собратья от NVIDIA, несмотря на то, что в играх наблюдается совершенно обратная картина. Причины этого явления объясняются весьма подробно, я же вкратце скажу, что видеокарты AMD решают проблемы производительности за счет использования большого количества простых маленьких чипов, быстро выполняющих 32-битные операции. Видеокарты же NVIDIA оснащены меньшим количеством более сложных чипов, приближающихся по своей сложности к CPU. Для задач добычи биткоинов или взлома паролей, где очень важны параллельные вычисления, видеокарты с большим количеством простых чипов подходят лучше. Также стоит отметить, что ПО, используемое для взлома паролей, может поддерживать работу на нескольких GPU, поэтому обладая таким ПО и поддерживающей несколько видеокарт материнской платой, вы можете обнаружить, что добились на двух дешевых видеокартах той же производительности, что и на одиночной дорогой карте.
Что касается моего случая, то у меня не было под рукой подходящей машины и поэтому я собрал компьютер специально для взлома паролей. Если вам захочется пойти по моим стопам, то вот точный список моего оборудования с ценами:
- Видеокарта: SAPPHIRE FleX 100312FLEX Radeon HD 6950 2GB: 280 $;
- Блок питания: RAIDMAX HYBRID 2 RX-730SS 730W: 60 $;
- Материнская плата: ASUS M4A88T-V: $95;
- CPU: AMD Phenom II X6 1090T Black Edition Thuban 3.2GHz: 170 $;
- ОЗУ: Corsair CMX4GX3M2B2000C9 4Gb 240-pin DDR3: 55 $;
- Диск: Seagate ST95005620AS 500GB 7200 RPM Hybrid Drive: 100 $;
- Корпус: уже был;
- Итого: 760 $, с монитором — 930 $, только видеокарта и блок питания — 340 $.
Если у вас уже есть компьютер, поддерживающий современные видеокарты, вам может понадобиться купить только новую карту и блок питания. Учтите, что современные высокопроизводительные видеокарты потребляют много энергии, так что вам понадобится блок питания мощностью как минимум 700 Вт и еще выше, если вы собираетесь использовать две карты. Я пришел к выводу, что AMD 6950 обладает хорошей производительностью для своей цены, кроме того, именно эту модель теоретически можно было превратить в 6970, поменяв прошивку. Если ваш бюджет вам позволяет, вы можете купить две или больше карт 6950 и объединить их.
На этом, пожалуй, и закончим. Итак, теперь у вас есть некоторое время, чтобы собрать оборудование, а в следующий раз я рассмотрю программную сторону взлома паролей, объясню, что из себя представляют атаки по словарю, методом грубой силы и по маске, а также приведу примеры из собственного опыта.
Ссылки на использованные ресурсы
- Почему GPU добывает биткоины быстрее, чем CPU: https://en.bitcoin.it/wiki/Why_a_GPU_mines_faster_than_a_CPU;
- Сравнение оборудования для добычи биткоинов: https://en.bitcoin.it/wiki/Mining_hardware_comparison;
- Изображение пароля на Shutterstock.com.
Кайл Рэнкин — системный архитектор, в настоящее время — президент «North Bay Linux Users’ Group». Автор книг «The Official Ubuntu Server Book», «Knoppix Hacks», «Knoppix Pocket Reference», «Linux Multimedia Hacks», и «Ubuntu Hacks».
Источник
Фундаментальные основы Linux. Часть VII. Управление локальными учетными записями пользователей
Глава 27. Пароли пользователей
Данная глава содержит дополнительную информацию о паролях локальных пользователей.
В главе подробно описаны три метода установки паролей; с использованием утилиты passwd , с использованием реализации алгоритма шифрования passwd из библиотеки openssl , а также с использованием функции crypt в программе на языке C.
Кроме того, в данной главе обсуждаются параметры паролей и методики отключения, аннулирования или блокировки учетных записей пользователей.
Утилита passwd
Файл shadow
Файл /etc/shadow содержит таблицу с девятью разделенными двоеточиями столбцами. Эти девять столбцов (слева направо) содержат имя пользователя, зашифрованный пароль, время последнего изменения пароля (первый день соответствует 1 января 1970 года), количество дней, в течение которых пароль должен оставаться неизменным, день истечения срока действия пароля, количество дней перед истечением срока действия пароля, в течение которых должно выводиться предупреждение, количество дней после истечения срока действия пароля, по прошествии которых учетная запись должна быть отключена, а также день, когда учетная запись была отключена (также с начала 1970 года). Последнее поле пока не имеет значения.
Все пароли в примере выше являются хэшами фразы hunter2 .
Шифрование ключевых фраз с помощью утилиты passwd
Шифрование ключевых фраз с помощью утилиты openssl
Другой способ создания учетных записей пользователей с паролями заключается в использовании параметра -p утилиты useradd, но в случае использования данного параметра утилите необходимо передавать уже зашифрованный пароль. Вы можете зашифровать пароль с помощью команды openssl passwd .
Помните о том, что после выполнения данной команды ваш пароль в открытом виде будет сохранен в файле истории команд командной оболочки!
Шифрование ключевых фраз с помощью функции crypt
Обратили ли вы внимание на то, что первые два символа зашифрованного пароля являются значением salt ?
Файл /etc/login.defs
Утилита chage
Блокировка учетных записей
Пароли из файла /etc/shadow не могут начинаться с символа восклицательного знака. Если второе поле в строке из файла /etc/passwd начинается с символа восклицательного знака, пароль не может использоваться.
Использование данной особенности обычно называется блокировкой , деактивацией или отключением пользовательской учетной записи. Помимо текстового редактора vi (или vipw) вы можете использовать утилиту usermod для этой цели.
Следует подходить с осторожностью к работе и учитывать различия параметров интерфейса командной строки утилит passwd , usermod и useradd в различных дистрибутивах Linux. Проверяйте содержимое локальных файлов при использовании таких возможностей, как «деактивация, отключение или блокировка» учетных записей пользователей и их паролей.
Редактирование локальных файлов
Практическое задание: пароли пользователей
1. Установите пароль hunter2 для пользователя serena .
2. Также установите пароль для пользователя venus , после чего заблокируйте учетную запись пользователя venus с помощью утилиты usermod . Проверьте наличие признаков блокировки в файле /etc/shadow до и после осуществления блокировки.
3. Используйте команду passwd -d для деактивации пароля пользователя serena . Проверьте наличие строки для пользователя serena в файле /etc/shadow до и после осуществления деактивации.
4. Каковы различия между операцией блокировки пользовательской учетной записи и операцией деактивации пароля пользовательской учетной записи, которые мы только что осуществляли с помощью команд usermod -L и passwd -d ?
5. Попытайтесь изменить пароль serena на пароль serena as serena.
6. Сделайте так, чтобы пользователь serena был обязан изменять пароль через каждые 10 дней.
7. Сделайте так, чтобы каждый новый пользователь был обязан изменять свой пароль через каждые 10 дней.
8. Воспользуйтесь учетной записью пользователя root для создания резервной копии файла /etc/shadow . Используйте текстовый редактор vi для копирования хэша пароля hunter2 из строки пользователя venus в строку пользователя serena . Может ли после этого пользователь serena войти в систему с паролем hunter2 ?
9. В каких случаях следует использовать утилиту vipw вместо vi ? Какая проблема может возникнуть при использовании текстового редактора vi или vim для редактирования файла паролей?
10. Используйте команду chsh для вывода списка доступных командных оболочек (данная команда будет работать исключительно в дистрибутивах RHEL/CentOS/Fedora) и сравните вывод с выводом команды cat /etc/shells .
11. Какой параметр утилиты useradd позволяет установить имя домашней директории пользователя?
12. Как можно определить, заблокирован или разблокирован пароль пользователя serena ? Предложите решение на основе утилиты grep , а также решение на основе утилиты passwd .
Корректная процедура выполнения практического задания: пароли пользователей
1. Установите пароль hunter2 для пользователя serena .
2. Также установите пароль для пользователя venus , после чего заблокируйте учетную запись пользователя venus с помощью утилиты usermod . Проверьте наличие признаков блокировки в файле /etc/shadow до и после осуществления блокировки.
Обратите внимание на то, что в результате выполнения команды usermod -L перед хэшем пароля добавляется символ восклицательного знака.
3. Используйте команду passwd -d для деактивации пароля пользователя serena . Проверьте наличие строки для пользователя serena в файле /etc/shadow до и после осуществления деактивации.
4. Каковы различия между операцией блокировки пользовательской учетной записи и операцией деактивации пароля пользовательской учетной записи, которые мы только что осуществляли с помощью команд usermod -L и passwd -d ?
Блокировка предотвратит вход пользователя в систему с использованием установленного пароля благодаря добавлению символа ! перед хэшем пароля в файле /etc/shadow .
Деактивация с помощью утилиты passwd приведет к удалению хэша пароля из файла /etc/shadow .
5. Попытайтесь изменить пароль serena на пароль serena as serena.
Войдите в систему с именем пользователя serena , после чего выполните команду: passwd serena . Исполнение команды должно завершиться неудачей!
6. Сделайте так, чтобы пользователь serena был обязан изменять пароль через каждые 10 дней.
7. Сделайте так, чтобы каждый новый пользователь был обязан изменять свой пароль через каждые 10 дней.
8. Воспользуйтесь учетной записью пользователя root для создания резервной копии файла /etc/shadow . Используйте текстовый редактор vi для копирования хэша пароля hunter2 из строки пользователя venus в строку пользователя serena . Может ли после этого пользователь serena войти в систему с паролем hunter2 ?
9. В каких случаях следует использовать утилиту vipw вместо vi ? Какая проблема может возникнуть при использовании текстового редактора vi или vim для редактирования файла паролей?
Утилита vipw выведет предупреждение в том случае, если кто-либо еще в данный момент редактирует данный файл (с помощью утилиты vipw ).
10. Используйте команду chsh для вывода списка доступных командных оболочек (данная команда будет работать исключительно в дистрибутивах RHEL/CentOS/Fedora) и сравните вывод с выводом команды cat /etc/shells .
11. Какой параметр утилиты useradd позволяет установить имя домашней директории пользователя?
12. Как можно определить, заблокирован или разблокирован пароль пользователя serena ? Предложите решение на основе утилиты grep , а также решение на основе утилиты passwd .
Источник