Please note, if you want to make a deal with this user, that it is blocked.
Один из самых частых вопросов, которые мне задают - это через что можно взломать. Какие данные минимально нужны для того, чтобы взломать человека? Я редко когда расписываю полную картину. Часто отвечаю только про основные методы взлома. На деле взломать можно через что угодно: mp3 файлы, фотографии, архивы, даже картинка на сайте!
Я редко говорю об этих методах, потому что они не универсальные и основаны на уязвимостях. Получить информацию о подобной уязвимости - уже трудная задача. Для самостоятельного поиска нужны основательные знания, а покупка готового варианта стоит очень больших денег.
Человеку без знаний тонкостей дела куда проще начинать с исполняемого файла. Всё равно в результате любой атаки конечная цель - исполнить свой код на машине. Но на этот раз у меня есть повод рассказать подробнее о практической части. В ходе недавней атаки мне пришлось использовать уязвимости в установленных программах для того, чтоб попасть на машину.
Атака начиналась как обычно. Я нашёл перспективного держателя криптовалюты. Причём нашёл в достаточно интересном месте, на форуме поддержки bitcoin core приложения.
Bitcoin core - это оригинальное приложение для хранения и обмена Вitcoin. Его особенность в том, что данные кошелька хранятся локально в файле wallet.dat, а не на сервере как во всех online кошельках. Причём во многих случаях этот файл никак не зашифрован. Изначально функции шифрования вообще не существовало, и большинство старых кошельков находятся в открытом виде.
Для перехвата кошелька без пароля достаточно просто слить wallet.dat, и полный доступ к средствам в кармане. Запароленные кошельки шифруются, единственный способ попасть в такой кошелёк - ввести правильный пароль. Тут можно действовать в лоб, и подобрать правильную комбинацию методом брута (программного перебора). Поскольку все данные хранятся в offline, можно совершать сколько угодно попыток и на любом количестве устройств, доступ никто не сможет заблокировать, даже никакое оповещение владельцу не придёт. Но я смог найти более изящный способ заполучить пароль…
По активности цели на форуме можно было предположить, что на счёту у него приличная сумма. Но всё равно первым делом я узнал точную сумму на его счету в bitcoin core. Эту информацию я понял в результате переписки с ним.
В теме на форуме, где я его нашёл, он разбирался с ошибкой dll при попытке подписать сообщение. Эта функция нужна для подтверждения права владения адресом. На скришноте в теме не был виден баланс кошелька, его перекрывало меню sign message с ошибкой.
Мне надо было получить скриншот главного окна, где написан баланс. Пишу ему в личку, говорю, что у меня была такая же проблема, и её можно убрать установкой зависимостей. Для этого есть пункт install dependencies в меню settings. На самом деле такого пункта не существует. Как только он мне написал, что не может его найти, я попросил его отправить скриншот меню settings, чтобы подсказать, какой это пункт меню у него. В итоге получил это
Ставки известны. У него на счету практически 9 битков. Это из хороших вестей, а из плохих - wallet.dat зашифрован. И метод получения пароля к нему зависит от того, какой доступ я смогу получить к его машине.
Для начала атаки попробовал самый очевидный метод. Найти программу для устранения проблем с драйверами, склеить её с вирусом и закинуть ему. Если получится убедить его запустить программу на хосте (а драйвера нужны именно там), то часть дела сделана, и wallet.dat я заполучу. Остаётся ещё взломать его, но это уже проблема следующего порядка.
Внаглую кидать .exe было бы слишком палевно и я не хотел так рисковать. Для закидывания файла был разработан небольшой лендинг. Весь его дизайн был взят с уже существующего сайта, описание было позаимствовано у подобной программы. Только файл был заменён на вирусную версию, и описание ошибки подогнано под него. Со стороны создавалось впечатление, что страничка зарекомендовавшей себя программы.
Связываюсь с ним. Говорю, что если в меню нет функции для загрузки всего необходимого, то нужно сторонней программой недостающие компоненты устанавливать. И скидываю ему ссылку на лендинг. Я рассчитывал, что он не на столько параноик, чтобы не скачать ПО с "официального" сайта.
Всё пошло не по плану. Следующее сообщение от него было о том, что он будет устанавливать версию как у меня, с функцией установки зависимостей, мотивировав это тем, что так надёжнее. И спросил у меня номер версии, которой я пользуюсь. Тут стало очевидно, что создавать новый лендинг с вирусным bitcoin core вряд ли хорошая идея, он следит за тем, что качает.
Тогда я пошёл на сервер проверять, заходил ли он вообще на лендинг. Заходил, в логах появилась новая запись с другим браузером, ко мне в руки попал его IP. И решил попробовать получить доступ в систему через него. Для начала выполнил сканирование на предмет открытых портов. Оказалось, что на машине много программ слушают разные порты.
В первую очередь внимание упало на 22 порт, на нём обычно находится ssh. Его повсеместно можно встретить на linux, а вот на windows это редкость. SSH даёт право удалённо исполнять команды от имени пользователя, поэтому простор для атаки тут большой. Подключившись напрямую к порту я увидел это:
Поискав информацию о RebexSSH, я понял, что это не просто ssh, а sftp сервер. Как ftp, только с шифрованием. Судя по всему, это не очень популярная программа, и поддерживается она не активно. Идеальная цель для атаки. Готового эксплоита под неё у меня не было, времени возится с исходным кодом тоже.
За помощью со взломом я обратился к знакомому, который занимался взломом ssh. Я рассчитывал, что он подскажет, какие слабые или устаревшие алгоритмы авторизации есть в программе. Вместо этого он сказал, что у него есть готовый эксплоит под эту версию rebexssh. В интернете его было не найти, поэтому то, что он поделился им со мной сильно ускорило процесс. Полученная мною уязвимость позволяла обходить авторизацию. С ftp доступом можно скачать wallet.dat. И тут мне пришла в голову идея, как используя мой доступ к файлам получить пароль. Для начала хотел загнать ему вирус. Ftp не позволяет запускать программы, но почему бы не подменить какую-то часто используемую программу на связку с вирусом! Например, браузер. Тогда при попытке открыть браузер он активирует мой вирус. А там уже можно запустить кейлоггер и перехватить пароль. Только вот пароль шифрования запрашивается не при любом запуске. На этом месте мне в голову пришла просто гениальная идея. Подменить сам bitcoin core! Причём не на бандл с вирусом, а вшить в программу функцию запроса ключа расшифровки.
Такое невозможно заметить, каким бы внимательным ни был человек. Ты запускаешь кошелёк, и тебя просит ввести пароль расшифровки его. Всё очень логично. А введённый пароль отправляется мне в придачу с wallet.dat.
Я попросил кодера пропатчить кошелёк на запрос пароля. Я не знаю как, но рабочая программа была уже на следующий день. Через уязвимость я заменил экзешник кошелька, и уже к вечеру в админке лежал кошелёк с паролем к нему.
Одним из самых долгих этапов оказалось ожидание загрузки bitcoin core. Чтобы импортировать wallet.dat пришлось ждать загрузки всего blockchain. После синхронизации у меня в руках был полный доступ к его кошельку. Деньги с него я вывел на новый blockchain кошелёк, приватный ключ к которому есть только у меня.