(Мне хорошо знакома эта проблема. Однажды Интернет-серверы в компании по обеспечению безопасности, которую я создал, были атакованы через аналогичную брешь, потому что системный администратор, который добровольно помогал мне, неправильно сконфигурировал систему. К счастью, сервер работал в своем собственном сегменте сети, отделенном от остальной).
Поняв, что эта ошибка дает ему возможность загружать файлы на сервер и сгружать с сервера, он начал смотреть на параметры сервера.
«Наиболее распространенный вариант использования тупых IIS-серве-ров состоит а возможности авторизации FrontPage».
И у этого сайта была такая слабость. Развертывание Microsoft FrontPage (программа-приложение, используемая для простого создания и редактирования HTML-документов) без установки соответствующих разрешений на пропуск файлов — обычное заблуждение системных администраторов, которые иногда специально конфигурируют так сайт из соображений удобства. В данном конкретном случае любой человек мог не только прочесть файлы, но также и загрузить туда файлы в любую незащищенную директорию. Роберт действовал в том же стиле.
«Я смотрел на все это и думал: «Черт побери, я могу прочесть или отредактировать любую страницу на этом сервере без всякого имени пользователя или пароля.
Таким образом, я мог войти и изучать корневую директорию на Интернет-сервере».
По мнению Роберта, большинство хакеров упускают такую возможность.
«Дело в том, что когда люди устанавливают сканер сети на сервере, они чаще всего не смотрят на ошибки в конфигурации таких приложений, как FrontPage. Они смотрят (чтобы посмотреть на тип сервера) и говорят „ Э т о Apache“ или „ Э т о I I S “ . И они упускают возможность упростить свою жизнь в том случае, если FrontPage неправильно сконфигурирована».
Это было не так прекрасно, как он ожидал, поскольку «на этом сервере было не так уж много интересного». И все же он заметил, что приложение под названием «helpdesk.exe» появляется, когда он получает доступ к сайту через свой браузер. Это могло бы оказаться очень полезным, но требовало знать имя пользователя и пароль.
«Итак, я смотрел на все это и думал, как атаковать этот треклятый сайт? Я не люблю делать одну вещь: это загружать файлы на Интернет-сервер, потому что, если администратор просмотрит записи об Интернет-активности и увидит, что среди тысячи сотрудников его компании, которые обращались к helpdesk.exe, неожиданно оказался парень из Южной Атлантики, работающий с two.exe или каким-то другим приложением, это сразу насторожит его, правильно? Поэтому я старался избегать подобных записей».
Приложение helpdesk состоит из одного исполняемого файла и файла библиотеки динамических связей ( D L L ) (файлы с расширением .DLL содержат набор функций Windows, которые может вызывать приложение).
Имея возможность загружать сайты в корневую директорию Интернет-сайта, атакующий может легко загрузить туда простую программку, которая даст возможность хакеру выполнять команды через свой браузер. Но Роберт был не простым хакером. Он гордился собой, потому что он был невидим и практически не оставлял следов в записях Интернет-сервера. Вместо простой загрузки на сервер переделанной программы, он перегружал на свой компьютер файлы helpdesk.exe и helpdesk.dll, чтобы понять, как работают эти приложения, полагаясь на свой опыт и знания. «Я проделал массу работы по обратной инженерии приложений и изучению программ, написанных на ассемблере, поэтому я знаю, как разбираться в скомпилированном с языка С коде и переводить его обратно на ассемблер».
Программа, которой он пользовался, называлась I D A Pro, интерактивный «дисассемблер» (ее продают на сайте http://www.ccso.com ), ей пользовались по его словам «многие компании, занимающиеся вирусами и охотой на вирусных червей, которым нужно декомпилировать некоторые тексты до уровня ассемблера, а потом разобраться в том, что они делают». Он декомпилировал helpdesk.exe и, одобрил работу, выполненную профессиональными программистами, решив, что она «написана вполне прилично».
ИЗ МЕШКА ХАКЕРСКИХ ШТУЧЕК: АТАКА SQL INJECTION
После того, как он декомпилировал программу, Роберт обратился к изучению кода, чтобы понять, будет ли приложение helpdesk подвержено SQL injection, методу атаки, который использует распространенную компьютерную оплошность. Программист, думающий о безопасности системы, постарается отфильтровать все запросы внешних пользователей, в которых встречаются такие символы, как «апостроф», «знак цитирования», «больше» и «меньше». Если не отбрасывать программы с подобными символами, то злонамеренный пользователь может обмануть приложение и проникнуть в систему.
Роберт выяснил, что приложение helpdesk проводит необходимые проверки на подобные символы, чтобы помешать хакерам использовать SQL injection. Большинство хакеров перегрузили бы программу ASP на Интернет-сервер и использовали бы ее, но не Роберт! У него были более обширные планы, чем использовать простейшую лазейку для проникновения в свою мишенью.
«Я подумал: „Ситуация выглядит очень забавной, и надо получить от нее максимум удовольствия“.
Я сказал себе: «Хорошо, я использую SQL-injection, слегка подправив проверку на достоверность». Я нашел строку, где содержался список недопустимых символов, и изменил ее. По-моему, в список входило «подчеркивание», или что-то похожее, чего я не должен был использовать, но в то же время его отсутствие ни на что не влияло».
Другими словами, он немного видоизменил программу (используя цифровой редактор для взлома программы, которая должна была проверять символы), так что определенные специальные символы больше не отвергались. После этого он мог незаметно производить SQL-injection, не влияя на всю структуру работы приложения для всех остальных. Еще одним преимуществом такого развития событий было то, что администратор, скорее всего, не стал бы проверять сохранность приложения helpdesk, поскольку не было никаких сигналов о том, что оно взломано.
Далее Роберт послал модифицированную версию приложения helpdesk на Интернет-сервер, заменив им оригинальную версию. Подобно тому, как некоторые люди любят привозить марки, открытки или спичечные коробки с видами тех мест, где они побывали, хакеры иногда хранят не только полученную добычу, но и тексты программ, которые они использовали в своей работе. У Роберта до сих пор хранится текст той программы в двоичном скомпилированном виде.
Поскольку он работал из дома (дело рискованное, если вы только сознательно не хотите попасться), то свою «новую и улучшенную» версию приложения helpdesk он загружал через целую цепь промежуточных прокси-серверов (это серверы, работающие посредниками между компьютером пользователя и компьютером, в который он стремится проникнуть). Если пользователь делает запрос о ресурсе с компьютера «А», этот запрос направляется на прокси-сервер, который в свою очередь делает запрос и получает ответ от компьютера «А», а потом уже переправляет его клиенту.
Прокси-серверы обычно используются для доступа к ресурсам Интернета из-за межсетевого экрана. Роберт повысил степень своей безопасности, используя несколько прокси-серверов, расположенных в различных частях мира, чтобы снизить вероятность быть пойманным. Так называемые «открытые прокси-серверы» обычно используются для того, чтобы замаскировать место, откуда исходит кибератака.
При помощи модифицированной версии приложения helpdesk, загруженного на компьютер и запущенного, Роберт соединился с сайтом-мишенью, использующим Интернет-браузер. Когда перед ним появилась входная форма с запросом имени пользователя и пароля, он запустил атаку SQL injection, как и планировал. В нормальном режиме, после того как пользователь введет свои имя и пароль — скажем, «davids» и «zl8M296q» — приложение использует эти входные данные для того, чтобы сгенерировать такую SQL-команду:
select record from users where user = 'davids' and password = 'z18M296q'
Если поле пользователя и поле пароля будут соответствовать информации в базе данных, тогда пользователя пускают в систему. Таким образом, все должно работать в нормальном режиме. А вот как проходила атака Роберта SQL-injection: в разделе для имени пользователя он написал — " orwherepasswordlike"%
Для пароля он ввел аналогичную строку
" orwherepasswordlike"%
Приложение использует эти входы и генерирует такую SQL-ко-манду:
select record from users where user = " or where password like '%' and password = "or where password like '%'
Элемент строки orwherepasswordlike% говорит SQL принять запись, если пароль что угодно ( " % " — это пустышка). Обнаружив, что пароль удовлетворяет этому дикому условию, приложение впускает Роберта, как вполне законного пользователя, как если бы он ввел данные о законной авторизации. Система впускает его и связывает с данными первого пользователя в базе данных, которым обычно бывает администратор. Так и оказалось в нашем конкретном случае. Роберт не только вошел в систему, но и получил привилегии администратора.