История началась с посещения сайта hack-info.ru. Сам сайт мне не очень нравится за их "распальцовку" - не уважаю тех, кто кричит направо и налево слово "ламеры", а тут это вообще "идеология", даже свой троян назвали соответственно: Anti-Lamer Backdoor. Ну, захожу таки иногда, чтобы быть в курсе событий в нашем "киберандерграунде" :)
Сегодня зашел и обнаружил преинтересную статью "Ламосы онлайн", в которой главный идеолог сайта, Crypt, распространялся, насколько успешна его компания с трояном ALB, естественно, в своем стиле, не скупясь на слово "ламер" во все стороны света. Сам Крипт, правда, к созданию трояна отношения не имеет, впрочем, это детали, кому интересна их мышиная возня, сходите на сайт и проникнитесь атмосферой.
Для управления компьютером, зараженным троянцем, нужно знать пароль его создателя. Однако, в комментариях к статье Крипт проболтался, что существует и второй пароль - "инженерный", подходящий к любому троянцу, и предлагает купить его за 100 баксов. Не знаю, откликнулся ли кто-то на его предложение, … надеюсь, нет, потому что… дарю: "r00tXSteam". Его нахождение заняло 10 минут, не жалко. Все, дальше можете не читать, тут будет скучное описание, как он был получен и как следовало защититься создателям программы.
Запускаем Win98 с Soft-Ice, конфигурируем сервер на пароль 'lamaz' (в духе авторов "Заражаем" себя сервером. Запускаем клиент. Коннектимся. Вводим какой-нибудь пароль. Жмем Ctrl+D, вылазит окно универсального драйвера софтайса .
Переходим на виртуальную машину процесса "scandisk" (в конфигурации был задан именно такой): addr scandisk. Ищем в памяти слово "lamaz": s 0 l 1000000 'lamaz'. Найдено, причем в нескольких экземплярах. Хех, хацкеры, хешировать надо! Но об этом позже…
Часть из встреченных "lamaz" отбрасываем, потому что они явно являются частью отчета хозяину троянца. Кроме пароля, отчет содержит такие важные данные, как "папка windows" и проч. Очевидно, человек, подсунувший троян, должен мерзко хихикать при виде этих данных. Ну да ладно, не будем отвлекаться. Мотаем дальше: "s".
В конце-концов находим одиноко стоящую строку "lamaz", а недалеко от нее (какая удача!) - "r00tXSteam", очень похожий на "инженерный пароль". Выходим из софтайса (x), проверяем, подходит. Ура.
Что ж, протянем разработчикам руку помощи, а то они, глядишь, сами не додумаются, в чем их ошибка и как ее исправить. Но это только в обмен на их обещание перестать называть ламерами других. Присмотритесь лучше к себе, уважаемые…
Дело в том, что для авторизации совсем не обязательно хранить пароли в дешифруемом виде, вполне достаточно хранить их хеши, как делают все современные операционные системы.
Хеш - это функция (алгоритм), принимающая на входе любые данные любой длины, а на выходе дающая данные определенной длины.
Вот важное требование, которое криптография предъявляет к хорошим хеш-функциям: должно быть нереально подобрать входные данные, дающие заданный результат. В качестве хороших хешей я советую использовать не какие-нибудь самоделки, а признанные алгоритмы SHA-1 и MD5, реализацию этих алгоритмов нетрудно найти в Интернете, в виде исходников на Си, библиотек и компонентов для Delphi.
А вот как выглядит авторизация с использованием хеширования. На этапе записи пароля, то есть компиляции программы или конфигурирования с помощью утилиты "редактирование сервера", сохраняется не сам пароль, а хеш от него. Сам пароль в чистом виде нигде хранить не надо, а, учитывая предыдущий абзац, я бы никогда, даже обладая исходниками вашего трояна, не смог бы определить "универсальный пароль".
На этапе авторизации от предлагаемого пароля тоже берется хеш, и полученные результаты сравниваются. Естественно, что одинаковые пароли будут иметь одинаковые хеши. А то, что нельзя подобрать никакой другой пароль, опять-таки гарантируется абзацем "важное требование…" Короче, при совпадении хешей мы уверены, что пароль правильный.
К моменту публикации автор программы из трояна универсальный пароль удалил, судя по всему использование хэша для него непосильная задача... |