Как стать автором
Обновить
210.83
ua-hosting.company
Хостинг-провайдер: серверы в NL до 300 Гбит/с

Конференция HACKTIVITY 2012. Теория большого взрыва: эволюция пентестинга в условиях повышенной безопасности. Часть 1

Время на прочтение11 мин
Количество просмотров2K
Автор оригинала: Джо МакКрэй (Joe McCray)
Приветствую всех, как поживаете? Надеюсь, у вас все хорошо, тогда слушайте. Послушайте про то, что всегда случается со мной, когда я уезжаю из Америки и приезжаю в Азию или Европу, во все эти другие страны. Я начинаю выступать, я стою на сцене и начинаю говорить с людьми, я говорю им… как бы это сказать политично…люди, которые не американцы, тоже чертовски приятные люди, и мне приятно их видеть и слышать.



Слушайте, я думаю, что вы поймёте меня правильно, так что расслабьтесь немного, выпрямите плечи, я серьёзно! ОК, когда здесь делаю свое дело, то хочу, чтобы вы как бы находились со мной на связи. У меня есть беспроводная точка доступа и пара уязвимых приложений в полном беспорядке, и у меня есть идея, как привести ваши программы в беспорядок… В прошлом году я выступал и напился на сцене, а потом, после этого ко мне подошел критик и сказал: «Эй Джо, у тебя была нормальная презентация, но демо было явно недостаточно»! Поэтому сегодня вся моя презентация будет сплошное демо, и мне интересно, что же ещё вам может не понравится.

Итак, «Эволюция пентестинга в условиях повышенной безопасности». Я «обрушиваю» сети уже добрых 10 лет, и какими дерьмовыми они были, такими же и остались. Не знаю, есть ли у вас опыт обращения с ними, но сети по-прежнему отстой. И приложения до сих пор сплошной отстой. Что сейчас происходит? Сейчас у нас есть 50 миллионов продуктов безопасности, защищающих ваши приложения, которые что? – Отстой! – И вы выходите с ними в сети, которые что? – Отстой! – И у нас есть куча вещей, которые защищают весь этот отстой!

Итак, в чём будет заключаться моя сегодняшняя работа? Кто я такой? Большинство сетевиков знают меня, я чёрный парень на конференциях по безопасности, да, это я, тот самый парень, о котором обычно говорят: «ну этот, как его… цветной африканец…я видел его раньше»!

Ладно, ребята, некоторое время я занимался тем, что взламывал сети. Итак, я взломщик, я проклятие, и тот, кто меня знает, также знает, что я люблю пить ром и кока-колу. Но кое-что изменилось в моей жизни, я завёл новую подружку, и она сходит с ума оттого, что я слишком много пью, и ещё ей очень не нравится, как я ем, вот почему мне нужно путешествовать, поэтому мне пришлось приехать сюда, пришлось съесть весь этот жирный гуляш. Так что, пожалуйста, не рассказывайте ей, что я ем и пью.

На этом слайде вы видите моё первое выступление на DefCon 10 лет назад, смотрите, тогда были ещё ЭЛТ-мониторы, кто-нибудь их помнит?



Я разговаривал там со множеством людей, и мы занимались с ними «захватом флага». «Захват флага» — это был просто потрясающий опыт, который совершенно чудесным образом изменил мою жизнь, прямо, как Иисус, я готов был воскликнуть «Аллилуйя!», настолько это было потрясающе.
Итак, что я хочу сделать – это создать испытание «Захват флага» для новичков. Если вы новичок, вы, вероятно, никогда не участвовали в «Захвате флага». Существует месячный курс подготовки к этому испытанию, который включает в себя изучение проблем шифрования и расшифровки, испытание сети, испытание вредоносного ПО, изучение проблем обратного инжиниринга, использование эксплойтов и прочие подобные вещи. Это очень солидное и весёлое мероприятие. Короче, давайте попробуем провести нечто подобное.

На слайде вы видите параметры настройки беспроводной сети, попрошу вас её не ломать. Если вы захотите попасть в сеть под названием joe-hacktivity-demo, можете использовать этот пароль.



Здесь имеется текстовый файл, причина его создания – просто позволить вам копировать и вставлять информацию в адресную строку браузера. Обычно люди делают подобное с помощью таких вещей, как Windows 7, но всё, что вам нужно в данном случае — это просто веб-браузер. Так что если у вас есть Firefox, Chrome, всё, что вам нужно для взлома – просто открыть свой iPad или ноутбук, скопировать этот текст и войти на сайт книжного интернет-магазина. У меня есть система обнаружения вторжений IDS, у меня запущен Snort Box, и мы просто собираемся сохранить эту сеть в рабочем состоянии. Мы собираемся применить кучу веб-приложений, кучу SQL-инъекций, кучу межсайтовых скриптов против этого хоста, у которого есть это веб-приложение. Затем у нас имеется другая «коробка», в которой есть файрвол, настроенный так, что я смогу провести вас в обход некоторых ID и файрволов. Мы просто проникнем туда, обсудим это и проделаем там некоторые интересные вещи.

Итак, мне нужно продолжить объяснять или я могу начать? ОК, хорошо, начнём. У меня тут в ноутбуке есть хитрая система обнаружения вмешательства. Сейчас я увеличу изображение на экране, где изображен текстовый файл. Можно проверить его адрес в строке браузера, это наш текстовый файл.



Я собираюсь внедрить межсайтовый скриптинг с помощью тривиального SQL, но если вы хотите повозиться с приложением посерьёзнее, то можете проверить этот текстовый файл, в котором есть два приложения. Приложение по адресу 2.6, разработанное на платформе ASP.NET, проверяет работоспособность сети, это обновлённая версия платформы DotNet с библиотекой межсайтовых скриптов и парой других механизмов безопасности, и модифицированный файл web.config для загрузки других библиотек безопасности.

Приложение по адресу 2.7 – это такое же приложение, как и предыдущее, но у него есть не только все функции безопасности DotNet, но и файрвол для сетевых приложений. Итак, я хочу «замутить» с этим приложением по адресу 2.35, и собираюсь поговорить об этом.



Если вы знакомы с основами межсайтового скриптинга и SQL-инъекциями, то поймёте, что такое 2.6, 2.5 и 2.7. Итак, у нас есть этот текстовый файл, который мы можем скопировать и вставить. Поговорим о параметре, который я вставляю в адресную строку нашего сайта. Это bookdetail.aspx?id=2, а знак вопроса означает, что нужный нам идентификатор параметров ID равен 2. Фактически происходит то, что интерфейс вашего веб-сервера говорит с базой данных веб-сервера, чтобы узнать, имеется ли в ней запись, относящаяся к этому идентификатору данных ID со значением 2. И база данных отвечает интерфейсу: «да, чувак, у меня есть то, что тебе нужно»!



Что мы сейчас проделаем – это проверим, работает ли у нас внедрение SQL. Поэтому мы закинем сюда простой код в виде кавычки в конце и увидим, что это привело к появлению сообщения об ошибке «Открытые кавычки после строки символов». Это один из самых распространённых тестов, когда вы замещаете параметр кавычкой или непосредственно используете кавычку в качестве параметра. Подобное происходит часто, и здесь нет ничего удивительного.



Попробуем немного по-другому. Я заменю строку параметров на значение bookdetail.aspx?id=4. Обратите внимание – когда я заменяю эту 4-ку на двойку, отображаемая страница меняется, меняется картинка в верхней части страницы. Теперь попробуем взять двойку в скобки, картинка снова поменялась. Если напишу в конце строки (4-2), картинка станет такой же, как и при 2 в конце строки. Если напишу в скобках (4-1), страница будет выглядеть так же, как если бы я поместил в конце цифру 3, то есть прировнял ID к тройке.



Итак, кто из вас вникал в эти дела, делая пентестинг? Вы думаете так: «ОК, я вставлю сюда в адресную строку SQL код, и он переадресует меня на домашнюю страницу, а сейчас я изменю его, и он сможет отправлять меня куда нужно или опять на домашнюю страницу». Фактически вы тем самым подавляете сообщения об ошибках, и отсутствие сообщения ODBS об ошибке заставляет вас танцевать от радости, потому что вам удалось внедрить SQL код.

Я вижу, что что-то не так, но я не могу это исправить. И что при этом происходит? Ваш разработчик считает себя самым умным, потому что ему удалось убрать сообщения об ошибках. Но что же происходит в действительности, когда вы заставляет базу данных выполнять все эти арифметические вычисления?

Итак, база данных выполняет такое вычисление: (4-1), и мы получаем страницу 3. Только что мы доказали, что внедрение SQL сейчас возможно. Так что вы можете вернуться к разработчику и сказать: «нет-нет-нет, парень, у тебя всё ещё существует возможность SQL-инъекций, несмотря на то, что сообщения об ошибках не возникает!». Вы только можете это только немного исправить, и такое происходит постоянно и повсеместно.

Я использовал трюки такого типа, но игры меняются, и сейчас многие люди используют такую вещь, как файрвол веб-приложений. Поэтому если вы вписывает в строку параметров адреса нечто вроде: 2 or 1 in (select user)--, то обычно получаете сообщение об ошибке в связи с неправильным префиксом имени владельца базы данных DBO (database owner) для данного типа данных. В этом случае файрвол попадает в западню на данной стадии выбора пользователя и говорит: «нет-нет-нет, я не могу сделать выбор»!



Поэтому, когда вы видите такие вещи, это означает, что если пока не разобрались, столкнулись ли с брандмауэром веб-приложения, или не делаете эти арифметические трюки, всё равно существует хороший способ выяснить, имеется ли в данном случае SQL-инъекция и имеет ли данное веб-приложение файрвол.

Скажу вам, что существует одна ужасная вещь – это необходимость проводить retail chain pentesting. Кто-нибудь из вас знает, что это означает на английском? PCI? Я ненавижу PCI, но я постоянно занимаюсь retail chain пентестингом. PCI – это стандарт безопасности данных, который базируется на положении о безопасности платёжных карт Payment Card Industry Data Security Standard (PCI DSS) от 2008 года. «Пентестинг розничных сетей» позволяет проверить соответствие данных стандарту PCI и определить реальные угрозы.

Этот стандарт – бесконечная мудрость, говорящая истины: «они должны… оно должно быть…», и вы должны использовать безопасные стандарты кодирования в соответствии с мировыми стандартами аутентификации, и вы это сделаете… или вы сможете использовать файрвол вашего веб-приложения.

Все пользователи, с которыми я работал, делали правильные вещи, они выполняли моделирование угроз, затем они устраивали совещание, ещё одно совещанием, потом встречались ещё раз и наконец, всё исправляли. Думаете, так? А вот и нет! Они «сдавали свой грузовик назад», и его парктроник издавал вот такие сигналы заднего хода. Они просто прятали проблему в шкаф, с глаз долой, и говорили: «мы всё исправили»!

Сейчас я покажу вам ещё одну вещь, с которой, по моему мнению, очень интересно поиграть. Вот смотрите. Всё, что я делал до сих пор – это внедрял SQL. Сейчас я сделаю так – я выберу адрес главной базы данных, скопирую его и вставлю в адресную строку браузера. Мы видим, что первая база данных называется «BookApp», когда последний параметр в строке параметров адреса равен 0.



Сейчас я заменю этот 0 на 1, и вы увидите, что получилось – мы увидели, что вторая база данных называется «master».



Затем мы поменяем 1 на 2 и увидим, что следующая база данных называется «tempdb».



А сейчас помогите мне! Вы бы могли сказать, что мы идентифицировали SQL-инъекцию? Да, это так, отлично! Но проблема в том, что в моей программе обнаружения вторжений IDS ничего не покраснело! Вот эта вещь, которая на экране, она не красная, когда мы делаем SQL-инъекцию, никаких угроз не обнаружено!



Отлично, теперь смотрите сюда – я должен сделать что-то неправильное. Я не беру информацию базы данных прямо из базы данных, и что же мне говорит эта вещь, которую я подчеркну красным?



Хотя нет, подождите минутку! Я попробую сделать это по-другому. Давайте вместо нумерации базы данных используем нумерацию из строки таблицы, над которой написано «Ошибка внедрения SQL – извлечение 1 таблицы базы данных».



Я копирую эти данные и вставлю их в адресную строку браузера. Смотрите, что у нас теперь получилось – фраза (select top 1 name from subjects where xtype = char (85)) — даёт что?

Правильно, название основной базы данных BOOKMASTER. Я думаю, что это и есть SQL-инъекция, кто думает так же? Даже Стиви Уандер смог бы увидеть, что это SQL-инъекция!



Но давайте посмотрим сюда – 0 угроз! Но это дешёвая система, в ней есть ошибки, правила не обновлялись.



Я думаю, правила проверки IDS немного устарели, я загрузил их сегодня утром, и они уже немного, совсем немного устарели. Может, я тут что-то неправильно замутил, я загрузил старые правила, а должен был загрузить самые свежие правила, которым не более 3-х часов – я не знаю.
Но давайте посмотрим дальше. Что, если мы попробуем скопировать другие данные, над которыми написано «Ошибка внедрения SQL – извлечение 2 таблицы базы данных».



Итак, записи 2-й базы данных выдают нам то, что называется «sysdiagrams».



То есть мы задали вопрос, может ли параметр xtype = char (85)) and name ‘BOOKMASTER’ выдать название того, что на уровень выше BOOKMASTER? Другими словами, может ли система выдать мне название таблицы, которая следует дальше? Это то, как мы перечисляем базу данных — как только вы извлекаете имя базы данных и имя таблицы, вы продолжаете спрашивать: «эй, чувак, могу ли я получить имя таблицы, которая больше той, на которую я смотрю прямо сейчас?», и вы просто продолжаете этот процесс, и получаете имена новых таблиц.

Но давайте вернёмся и посмотрим на мою программу – она опять показывает, что число уникальных угроз безопасности равно 0. У нас снова проблема!



Что, если я попробую SQL-инъекцию, основанную на совокупности данных, union based SQL? Здесь у меня есть несколько других типов SQL-инъекций, и мы сейчас просто вставим строку, которая указывает сразу на запись, ID которой равно 100.



В результате мы получим ответ, что номер 100 находится вне допустимого диапазона значений. Потому что если я имею 10 столбцов, я могу выбрать 5? Конечно! А могу ли я выбрать 20 столбцов из 10? Разумеется, нет! То есть база данных отвечает: «извини, чувак, но у меня нет так много столбцов!». Отлично, тогда я меняю 100 на 50, и она снова пишет мне «50 находится вне допустимого диапазона значений». Хорошо, а как насчёт 25? Нет, 25 тоже вне диапазона. Подскажите мне, что ещё набрать? 13? Это несчастливое число, но хорошо, набираем 13, и оно тоже вне диапазона.

Давайте возьмём 9! Отлично, девятка сработала! Это правильная запись, мне нужно больше, чем 9, но меньше, чем предельное значение, так что давайте сыграем ещё, чтобы узнать, как много столбцов имеет наша таблица.



Итак, как мы определим, сколько столбцов в таблице? Сейчас мы вставим в адресную строку последовательность от 1 до 9, которая называется «union statement», или «объединённая инструкция» Эта инструкция объединяет то, что написал разработчик, с тем, что написали вы сами.



Но вы должны иметь правильное количество номеров для обеих вариантов инструкций, чтобы выяснить, на каком номере заканчиваются ваши столбцы. Проделаем такой трюк – присвоим числу 2 отрицательное значение, то есть исправим в адресной строке 2 на — 2. Смотрите, что у нас получилось.



У нас исчезла картинка с обложкой книги, но зато появились все эти цифры – это и есть номера столбцов в таблице базы данных. Ну-ка, подскажите мне число! Два? Хорошо, пусть будет 2. Я заменяю 2 в последовательности словом «user», и теперь на странице вместо Book name 2 появляется пользователь dbo.



Что, если я перейду к числу 3? Вместе числа 3 я напишу @@version. Видите, что у нас теперь получилось на странице?



ОК, теперь, ребята, помогите мне! Можем ли мы теперь сказать, что у нас имеется инъекция SQL?



По-прежнему ничего нет! Система безопасности не видит никакого внедрения SQL.

Я начал свою карьеру в сфере безопасности в качестве аналитика систем обнаружения вторжений IDS. Это была ужасная жизнь, нужно было целый день следить за перехватами пакетов, и наверное, ничего больше, кроме, наверное, женитьбы, так не принуждает тебя пустить себе пулю в голову.

Я имею в виду, я был таким же, как другие, я весь день смотрел на то, что было очень плохо, и когда вы начинаете видеть эти вещи, которые проходят мимо вас, это просто умопомрачительно, это сводит с ума.

Так что давайте скажем, что мы собираемся проделать нечто интересное. Может быть, я вытащу это отсюда, скопирую и перетащу сюда. Итак, я вставляю в адресную строку версию базы данных, имя сервера, затем master.sys.fn_varbintohexstr(password_hash) – ничего интересного, правильно?



Теперь мы получаем на странице такие данные, и я думаю, что верхняя строка окажется для нас полезной.



Важно то, что мы можем узнать, что IDS – это великая вещь, имеющаяся в нашем распоряжении! Итак, кто со мной? Срочно бегите и покупайте одну из этих программ!

На экране показано, что программа снова не обнаружила никаких SQL-инъекций.



Это просто великолепная программа, она даже ещё лучше, чем мы думаем, потому что может компилировать все эти бесполезные логи пользователей, в которые никто никогда не заглядывает, и это круто! Ладно, предположим, что мы всё-таки сделаем что-то интересное. Мы используем вот эти параметры: 1=1, 1=2 и 1*1. Один равен одному? Да. Один равен двум? Нет, не равен. Но то что нам нужно сделать – это проверить, будут ли изменения на правильной странице, которую мы хотим, скажем так, «перечислить».



Я копирую и вставляю в адресную строку параметры первой строки 1=1, смотрю на страницу, затем меняю это выражение на 1=2. Если страница изменится некоторым «нечестным» образом – как видим, она действительно изменилась — то на основе этого с точки зрения программирования я могу сделать вывод, что здесь имеет место SQL-инъекция. Потому что если я использую 1=1 и 1=2, то я могу считать так: «ОК, если я беру имя пользователя dbo и 1=1, потому что согласно инструкции, если имя пользователя dbo и 1=1, то мы получаем правильную страницу, и благодаря этому я знаю, что имя пользователя действительно dbo». Это понятно? Ну что же, опять посмотрим на вкладку программы IDS – никаких угроз! Я же говорю, это потрясающий продукт.
Теперь проделаем такую интересную вещь. Рассмотрим эти значения. Один больше, чем минус один? Понятно, что больше. Но дальше следует вещь, которую я действительно люблю. Это выражение «1 меньше-больше 1».



Повторюсь – это просто разные способы задать один и тот же вопрос. У кого есть дети, вы знаете, как они умеют задавать вопросы. «Можно мне эти печенья? – Нет, нельзя! – Может, мне можно эти чипсы? – Нет, никаких печений! – Тогда, может мне можно эти «Ореос»?» Мне это знакомо, я прошёл через такое.

25:50 мин

Конференция HACKTIVITY 2012. Теория большого взрыва: эволюция пентестинга в условиях повышенной безопасности. Часть 2


Немного рекламы :)


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас, оформив заказ или порекомендовав знакомым, облачные VPS для разработчиков от $4.99, уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от $19 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
Теги:
Хабы:
Всего голосов 11: ↑11 и ↓0+11
Комментарии1

Публикации

Информация

Сайт
ua-hosting.company
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Латвия
Представитель
HostingManager