Из мешка хакерских штучек : атака s q l 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: в разделе для имени пользователя он написал — " or where password like "%
Для пароля он ввел аналогичную строку
" or where password like "%
Приложение использует эти входы и генерирует такую SQL‑ко‑манду:
select record from users where user = " or where password like '%' and password = "or where password like '%'
Элемент строки or where password like % говорит SQL принять запись, если пароль что угодно ( " % " — это пустышка). Обнаружив, что пароль удовлетворяет этому дикому условию, приложение впускает Роберта, как вполне законного пользователя, как если бы он ввел данные о законной авторизации. Система впускает его и связывает с данными первого пользователя в базе данных, которым обычно бывает администратор. Так и оказалось в нашем конкретном случае. Роберт не только вошел в систему, но и получил привилегии администратора.
Отсюда он получил возможность увидеть переписку всех сотрудников или авторизованных пользователей после успешного входа в систему. Просмотрев несколько таких посланий, он извлек из них информацию о номерах телефонов dial‑up для соединения с сетью, а также адреса гиперлинков для добавления и удаления пользователей из внутренней защищенной сети. Компания использовала VPN‑сервер Microsoft, который настраивается таким образом, что сотрудники используют их имена и пароли для Windows, чтобы войти в него. Поскольку Роберт находился в приложении helpdesk с привилегией администратора, он получил возможность добавлять пользователей в VPN‑группу и изменять их пароли для компьютеров, работающих в ОС Windows.
Дело продвигалось не быстро. Несмотря на то, что он находился в приложении с привилегиями администратора, это ни на шаг не приблизило его к кодам программы. Следующей целью Роберта стала попытка получить доступ к их внутренней сети через настройки VPN.
В качестве проверки, через меню helpdesk он попытался изменить пароль одного из «спящих» аккаунтов (в этом случае его активность было труднее заметить сразу) и добавить его в группу администратора. Он выяснил, как устроена V P N и «попробовал команду VPNin. Все было хорошо, но работало медленно».
«Я проник внутрь примерно в час ночи. Поскольку я находился в Австралии, разница во времени играла мне на руку, в Америке был час ночи, а в Австралии — разгар рабочего дня. Я хотел войти в сеть, когда там наверняка никого нет, и не хотел, чтобы кто‑нибудь зашел и заметил меня. Может быть, у них надо было писать отчет о каждом таком случае. Я хотел быть спокоен».
Роберт считает, что он понимает, как работают люди, занимающиеся безопасностью информационных технологий, поскольку они не слишком отличаются от остальных людей, «Единственный способ заметить меня для них были регулярные проверки записей о всей активности в сети». Его мнение о людях, занимающихся ИТ и безопасностью, как минимум, не восторженное. «Поверьте, люди не просматривают подобные записи каждое утро. Когда они садятся за свой компьютер, они берут чашечку кофе и читают последние новости в Интернете. Это гораздо интереснее, чем бросаться проверять, не изменил ли кто‑нибудь вчера их пароли».
За время своих хакерских попыток Роберт понял: «когда вы меняете что‑то на сайте, люди либо замечают это сразу, либо не замечают никогда. Изменения, сделанные мной, можно было заметить только в том случае, если запускать специальную программу типа Tripware». Роберт имеет в виду приложение, которое проверяет целостность системы и ее приложений, производя вычисление криптографических проверочных сумм и сравнение их с таблицей известных значений. «Тогда они заметили бы, что программа была изменена».
В этом он был абсолютно убежден и употреблял специальный термин «М&М‑безопасность» — жесткая на вид и мягкая на самом деле. «В обычных условиях никто не беспокоится о наличии хакера в их сети, потому что они находятся внутри системы. После того, как вам удалось проникнуть внутрь тщательно охраняемого периметра, вы можете чувствовать себя практически, как у себя дома». (Эта фраза означает, что после проникновения хакера в систему и использования им внутренних ресурсов от имени какого‑то авторизованного пользователя, очень трудно понять, что это чужеродная активность).
Он обнаружил, что аккаунт пользователя, в который он проник (изменив пароль) через приложение helpdesk, позволил ему проникнуть в сеть через сервис Microsoft VPN. После этого его компьютер соединился с внутренней сетью компании так, как если бы он использовал компьютер, физически включенный в сеть в помещениях компании.
Итак, он прилагал все усилия для того, чтобы не оставить следов, которые внимательный системный администратор мог бы заметить, и уйти «без шума и пыли».
После соединения с внутренней сетью Роберт определил имена компьютеров, работающих под Windows и их IP‑адреса, находя компьютеры с именами FINANCE, BACKUP2, WEB и HELPDESK. Он обнаружил и другие — с именами людей, это были компьютеры отдельных пользователей. Он шел по пути уже не раз описанному другими людьми на этих страницах.
По поводу имен серверов можно сказать, что у кого‑то в компании было специфическое чувство юмора, достаточно распространенное на рынке высоких технологий. Все началось еще во времена расцвета компании Apple Computer. Стив Джобс, известный своими удивительными творческими способностями и манерой нарушать все традиции и правила, решил, что комнаты для переговоров в зданиях компании не будут носить обыденные и скучные номера вроде 212А или «комната для переговоров шестого этажа». Вместо этого он назвал их именами героев мультфильмов в одном здании, именами кинозвезд — в другом, и так далее. Роберт обнаружил, что компания, в которую он проник, сделала нечто подобное с некоторыми серверами: помимо того, что она имела отношение к индустрии анимационных фильмов, она и имена серверов выбрала среди известных муль‑тяшных персонажей.
Но его привлек сервер с достаточно обычным названием — Backup2. Именно на нем он обнаружил жемчужное зерно: сетевую директорию под именем Johny, где один из сотрудников хранил копии своих файлов. Похоже, что этот сотрудник чувствовал себя достаточно свободно и мало заботился о безопасности. Среди файлов этой директории была и копия его почтовой директории, где находились все его письма. (Под сетевой директорией здесь подразумевается жесткий диск или часть диска, которая специально сконфигурирована так, что позволяет обеспечить доступ к своим файлам различным пользователям).