Содержание статьи

Есть вопросы — присылай на faq@real.xakep.ru

 

Q: Я активно занимаюсь разработкой и сейчас хочу максимально глубоко изучить аспект безопасности вебприложений. Начать с самых азов. Есть ли такой ресурс, где подробно, на примерах объяснена суть различных типов уязвимостей, о которых вы пишете: SQL Injection, XSS и так далее. И на чем можно потренироваться, чтобы закрепить полученные навыки и не попасть под статью УК?

A:Это очень частый вопрос, и одним из лучших ресурсов, которые можно в такой ситуации посоветовать, является проект OWASP Top 10 (owasp.org/index.php/OWASP_Top_Ten_Project). Это постоянно обновляемое описание наиболее распространенных уязвимостей в веб-приложениях. Всего описывается десять типов рисков:

  • A1: Injection;
  • A2: Cross-Site Scripting (XSS);
  • A3: Broken Authentication and Session Management;
  • и прочие.

Для каждого типа приводится базовое описание проблемы (буквально «на пальцах») и ссылки на материалы для более подробного изучения. Чтобы не погрязнуть в бесконечной теории и понять, настолько просто могут быть проэксплуатированы те или иные уязвимости, есть немало проектов для тренировки, о которых мы рассказывали в статье «Площадка для взлома: головоломки для хакера» (bit.ly/xakep_trainings). Я особенно рекомендую проект Mutillidae (bit.ly/Mutillidae). Фишка в его прямой связи с проектом OWASP Top 10. Для каждого из десяти типов уязвимостей автор написал скрипт с намеренно оставленными ошибками, чтобы каждый мог попробовать свои силы в эксплуатировании каждой из них. Код написан очень просто, что позволяет облегчить понимание сути проблемы. Проект легко устанавливается под туксом или под виндой на XAMPP-сервере. Если эксплуатация уязвимости тебе удалась, то в качестве дополнительного задания найденный баг предлагается устранить.

 

Q: Можно ли как-то получить не текущие, а предыдущие записи DNS для определенного доменного имени? То есть отправить в качестве запроса домен вроде zdes_byla_malware.cc и получить отчеты обо всех ответах DNS за прошедшее время?

A: Да, специально для этого существуют так называемые пассивные базы данных DNS: DNSParse, ISC, BFK.de и CERTEE. Наиболее просто взаимодействовать с ними позволяет специальный скрипт Passive DNS query tool (code.google.com/p/passive-dns-query-tool).

Установка ничем не примечательна и выполняется через RubyGems:

gem install passive-dns

Для работы с некоторыми сервисами потребуется дополнительная настройка. Например, ISC в каждом запросе требует использовать специальный API-ключ, который необходимо заблаговременно получить (для этого нужно отправить запрос на dnsdb@isc.org). По умолчанию же скрипт использует базу DNSParse, которая не требует конфигурирования. Запрос в этом случае выглядит так:

./pdnstool.rb <ip|domain|cidr>

 

Q: Мне необходимо выяснить, в каком порядке загружаются драйвера устройств во время старта системы. Как это сделать?

A:У Марка Руссиновича для этого есть специальная утилита LoadOrder (technet.microsoft.com/ru-ru/sysinternals/bb897416). Выпущенная еще в 2006 году, она и сейчас отлично показывает порядок загрузки драйверов в ОС.

В качестве бонуса утилита также отображает, в какой последовательности стартуют сервисы.

 

Q: Можно ли как-то быстро посмотреть пароли, сохраненные в браузере, когда есть доступ к чужому компьютеру, но нет возможности установить дополнительные приложения?

A:В некоторых случаях это реально. Если есть возможность зайти на интересующую страницу, где браузер сам подставит пароль, то нужно лишь посмотреть, что находится под звездочками. Для этого есть замечательный Java-скрипт (bit.ly/reveal_pass), который необходимо скопировать в адресную строку и выполнить. Вместо звездочек отобразится пароль в открытом виде. Сценарий совместим со всеми современными браузерами.

 

Q: Обнаружил, что один из моих ресурсов взломали и заливают оттуда малварь. Я не самый последний чайник и обыскал буквально все файлы проекта, чтобы найти зловредный код, который автоматически инъектируется в легитимные документы. Ничего не вышло! Решил пойти более радикальным путем и восстановил бэкап с того момента, когда сайт еще 100% не был подвержен атаке. Проблема осталась. Что я мог упустить?

A:Из собственного опыта могу сказать, что в такой ситуации люди обычно забывают проверить два места: файл .htaccess (в котором могут оказаться неожиданные директивы) и директорию cgi-bin.

Папка cgi-bin чаще всего находится вне каталога htdocs и потому остается без внимания. На самом деле именно она нередко становится местом для хостинга малвари. К примеру, в ней легко может оказаться файл php.ini, содержащий строчку вроде:

auto_append_fi le = "/home/user/USER/
cgi-bin/security.cgi

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

 

Q: Удивляюсь, почему не все приложения используют DEP и ASLR? Есть ли инструмент, который, во-первых, позволял бы выяснить, кто до сих пор находится в рядах отстающих, а во-вторых включить для этих программ защитные механизмы принудительно?

A:Для опытных пользователей Microsoft уже довольно давно выпустил утилиту EMET — Enhanced Mitigation Experience Toolkit (bit.ly/EMETpage). За столь громоздким названием скрывается прога с простым GUI-интерфейсом, позволяющая быстро выяснить, какие приложения используют DEP/ASLR, а какие — нет.

Для любого исполняемого файла можно принудительно активировать DEP, SEHOP, ASLR, защиту от HeapSpray и EAF. Напомню, что использование этих защитных механизмов кардинальным образом влияет на возможность эксплуатации в приложении тех же самых пресловутых (и очень опасных) ошибок переполнения буфера.

 

Q: Подскажи самый простой способ начать разрабатывать веб-приложения на Python.

A: Если идти по пути наименьшего сопротивления, то лучше всего взять готовый фреймворк вроде web.py (webpy.org), cherry.py (cherrypy.org), Django (djangoproject.com), Tipfy (tipfy.org) или Flask (flask.pocoo.org). Как это работает?

Если взять для примера Flask, то простейшее веб-приложение уместится в десяток строчек кода:

from fl ask import Flask
app = Flask(name)
@app.route("/")
def hello():
return "Hello World!"
if name == "main":
app.run()

Для установки фреймворка и запуска сервера так же понадобится самая малость:

$ easy_install Flask
$ python hello.py
* Running on http://localhost:5000/

Таким образом, веб-сервер будет запущен на 5000 порту локалхоста. Помимо фреймворков можно взять такой интересный проект как web2py (web2py.com). Он вообще не требует установки или конфигурирования, включает интерпретатор Python (поэтому его даже можно не устанавливать), веб-сервер с поддержкой SSL, демон SQLite, систему логирования ошибок, веб-админку для управления (демку панели можно посмотреть по линку web2py.com/demo_admin/default/site). Короче говоря, через пять минут можно получить уже готовый сервер, на котором будет крутиться наше приложение.

Простейший веб-проект при этом выглядит проще простого:

def index():
return "Hello World!"

 

Q: Существуют ли сниферы, которые работают на смартфонах?

A:Портированная версия tcpdump есть под Maemo, то есть снифер можно запустить по меньшей мере на Nokia N900. Но это экзотика. Если брать платформы популярнее, то тот же tcpdump есть и под Android. Правда, для его установки придется скачать и установить приложение Packet Sniffer (sites.google.com/site/androidarts/packet-sniffer). Имей в виду, что для этого на девайсе необходимо сделать jailbreak, чтобы иметь права рута. Радует, что приложение знает, какая именно информация представляет интерес (для Wi-Fi и Bluetoothсоединений) и отфильтровывает их из общего потока данных. Для iPhone есть специально написанная тулза, называется pirni (но, опять же, установить ее можно только на джейлбрейкнутый телефон через альтернативный менеджер приложений Cydia). В любом случае, смартфону будет тяжко обрабатывать перехваченный трафик. Поэтому максимум, на что можно рассчитывать, это дамп с перехваченным трафиком, который уже после можно обработать на компьютере с помощью Wireshark (wireshark.org) или другого анализатора.

 

Q: Хочу организовать службу поддержки для своего программного продукта, чтобы клиенты в случае необходимости оформляли описание проблемы в виде небольших скринкастов. Как это лучше всего реализовать?

A:Самый простой способ записать скринкаст — это, безусловно, воспользоваться онлайнсервисом вроде screenr.com. Фишка в том, что для создания видеоролика подобным образом вообще не нужно ничего скачивать и устанавливать. Все выполняется через браузер.

Причем решение работает как под Windows, так и для Mac. Возможно, если поискать, то найдется аналогичный сервис с открытым API, позволяющий встроить функцию для быстрой записи скринкаста в свои разработки — это может быть полезно для интеграции функции записи в систему тикетов.

 

Q: С ростом проекта время загрузки главной страницы растет. Пока разработчики занимаются оптимизацией программного кода, я хочу максимально облегчить саму страницу. С чего начать?

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

Yahoo! YSlow (developer.yahoo.com/yslow).

Анализатор разработан компанией Yahoo и реализован в виде плагина для Firefox’а, но для работы потребуется также установить аддон Firebug. Yslow проводит два типа анализа: вопервых, выяснение степени оптимизации для индексирования в поисковиках, а во-вторых — определение быстродействия Document Object Model (DOM), то есть времени загрузки и рендеринга страницы. Помимо этого плагин включает в себя шесть полезных утилит, в том числе для тестирования JavaScript-кода и оптимизации изображений через сервис Smush.It.

Web Page Test (webpagetest.org).

Этот продвинутый анализатор от компании AOL способен произвести специализированный анализ — к примеру, можно эмулировать определенную версию браузера или скорость соединения. Помимо этого Web Page Test поможет произвести визуальное сравнение с другими сайтами.

PageSpeed (code.google.com/speed/pagespeed).

Этот анализатор так же, как и YSlow, реализован в виде плагина для Firefox/Firebug. Веб-разработчики могут использовать Page Speed для оценки производительности своих веб-страниц и получения предложений по их улучшению.

Хороший прирост к производительности рендеринга страницы может дать использование асинхронной загрузки скриптов. Дело тут вот в чем. Когда браузер открывает страницу и доходит до тега <script>, он блокирует рендеринг страницы. То есть несмотря на то, что все современные браузеры используют параллельную загрузку элементов (скриптов, изображений и так далее), сама прорисовка страницы останавливается до тех пор, пока скрипт не загрузится. Чтобы избежать этого, в больших проектах используют асинхронные загрузчики, которые применяют хитрые трюки, чтобы загружать громоздкие скрипты, но при этом не стопорить рендеринг страницы. В некоторых случаях это дает прирост скорости рендеринга в 2-3 раза. К тому же такой подход позволяет загружать только те скрипты, которые нужны пользователю. Хорошим примером такой разработки является yepnope (yepnopejs.com).

 

Q: Есть ли какая-то возможность использовать в разметке CSS переменные? Скажем, присвоить в качестве значения некой переменной цвет или отступ, а затем использовать ее, изменяя в случае необходимости?

A: Специально для этого были разработаны такие инструменты, как Sass (sass-lang.com) и LESS (lesscss.org). Они очень похожи и добавляют к пресловутому CSS динамические элементы вроде переменных, операторов и функций. Как браузер может их обработать? Очень просто: стили, написанные с помощью, скажем, LESS, компилируются в самый обычный CSS, с которым у браузера сложностей не возникает.

Вот так выглядит код на LESS, использующий переменные (обозначаются через @):

@the-border: 1px;
@base-color: #111;
#header {
color: @base-color * 3;
border-left: @the-border;
border-right: @the-border * 2;
}
#footer {
color: @base-color + #003300;
}
А вот так он выглядит после компиляции:
#header {
color: #333;
border-left: 1px;
border-right: 2px;
}
#footer {
color: #114411;
}

С обработкой обычного CSS проблем у браузера уже тем более не возникнет.

 

Q: Подскажите нормальный отладчик для ядра Windows x64!

A:Когда дело доходит до Windows 7 x64, то возможности существующих отладчиков ядра действительно весьма ограничены. Интересная разработка, которую мы недавно нашли, — дебаггер virtdbg (code.google.com/p/virtdbg). Он использует технологии аппаратной виртуализации железа, а именно Intel (VT-x), и это главная его фишка. Хорошая новость в том, что такой подход позволяет обойти ряд ограничений. Плохая — проект еще очень молодой, поэтому не удивляйся возможным BSOD’ам.

 

Q: Твержу всем друзьям, что новые геолокационные возможности веб — это зло. Мало того, что люди добровольно отмечают место своего пребывания (через сервисы вроде Foursquare), так еще и любая вебстраница теперь может определить месторасположение посетителя. Поддержите меня :).

A:Судить, хорошо это или плохо, мы не будем. Лично мне все эти новые фишки нравятся. Но чтобы убедить друзей быть более внимательными к сохранению своей частной жизни, можешь показать им утилиту creepy (github.com/ilektrojohn/creepy). Это приложение, которое позволяет собирать связанную с геолокацией информацию о пользователях из различных сервисов:

  • местоположение из твитов;
  • геолокационная информация, доступная через хостинги изображений с поддержкой соответствующего API;
  • EXIF-теги из фотографий.

Извлеченные данные представляются на карте и сопровождаются комментариями. Возможно для кого-то такая «карта жизни» станет откровением.

 

Q: Какую перехватывающую прокси использовал бы взломщик, если бы ему удалось реализовать атаку MITM? Желательно, чтобы была возможность подмены пакетов.

A:Отличным вариантом будет Hatkit Proxy Project (bit.ly/hatkit). Вот несколько причин:

  • удобный GUI-интерфейс, позволяющий выполнить ручное редактирование пакетов TCP/HTTP-трафика;
  • логирование трафика в базу данных MongoDB с вытекающими возможностями для автоматического анализа и продвинутого поиска;
  • классная визуализация HTTP-трафика с подсветкой синтаксиса.

Теги:


Оставить мнение