ИЗ МЕШКА ХАКЕРСКИХ ШТУЧЕК: АТАКА 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 принять запись, если пароль что угодно ( " % " — это пустышка). Обнаружив, что пароль удовлетворяет этому дикому условию, приложение впускает Роберта, как вполне законного пользователя, как если бы он ввел данные о законной авторизации. Система впускает его и связывает с данными первого пользователя в базе данных, которым обычно бывает администратор. Так и оказалось в нашем конкретном случае. Роберт не только вошел в систему, но и получил привилегии администратора.

Отсюда он получил возможность увидеть переписку всех сотрудников или авторизованных пользователей после успешного входа в систему. Просмотрев несколько таких посланий, он извлек из них информацию о номерах телефонов dial-up для соединения с сетью, а также адреса гиперлинков для добавления и удаления пользователей из внутренней защищенной сети. Компания использовала VPN-сервер Microsoft, который настраивается таким образом, что сотрудники используют их имена и пароли для Windows, чтобы войти в него. Поскольку Роберт находился в приложении helpdesk с привилегией администратора, он получил возможность добавлять пользователей в VPN-группу и изменять их пароли для компьютеров, работающих в ОС Windows.

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

В качестве проверки, через меню helpdesk он попытался изменить пароль одного из «спящих» аккаунтов (в этом случае его активность было труднее заметить сразу) и добавить его в группу администратора. Он выяснил, как устроена V P N и «попробовал команду VPNin. Все было хорошо, но работало медленно».

«Я проник внутрь примерно в час ночи. Поскольку я находился в Австралии, разница во времени играла мне на руку, в Америке был час ночи, а в Австралии — разгар рабочего дня. Я хотел войти в сеть, когда там наверняка никого нет, и не хотел, чтобы кто-нибудь зашел и заметил меня. Может быть, у них надо было писать отчет о каждом таком случае. Я хотел быть спокоен».

Роберт считает, что он понимает, как работают люди, занимающиеся безопасностью информационных технологий, поскольку они не слишком отличаются от остальных людей, «Единственный способ заметить меня для них были регулярные проверки записей о всей активности в сети». Его мнение о людях, занимающихся ИТ и безопасностью, как минимум, не восторженное. «Поверьте, люди не просматривают подобные записи каждое утро. Когда они садятся за свой компьютер, они берут чашечку кофе и читают последние новости в Интернете. Это гораздо интереснее, чем бросаться проверять, не изменил ли кто-нибудь вчера их пароли».

За время своих хакерских попыток Роберт понял: «когда вы меняете что-то на сайте, люди либо замечают это сразу, либо не замечают никогда. Изменения, сделанные мной, можно было заметить только в том случае, если запускать специальную программу типа Tripware». Роберт имеет в виду приложение, которое проверяет целостность системы и ее приложений, производя вычисление криптографических проверочных сумм и сравнение их с таблицей известных значений. «Тогда они заметили бы, что программа была изменена».