вторник, 27 сентября 2011 г.

Open Source Fuzzing Tools

Небольшая книга по фаззингу издательства Syngress от группы авторов, среди которых фигурирует всем известный Чарли Миллер (@0xcharlie). Книгу можно рассматривать как введение в фаззинг. Содержание книги раскрывает различные аспекты фаззинга в 10 соответствующих главах. Правда объем книги (200 страниц) не позволяет раскрыть темы достаточно подробно.
Глава 1 (Introduction to vulnerability research) достаточно традиционна для подобного рода книг и объясняет основные классы программных ошибок и вкратце описывает подходы к поиску ошибок и уязвимостей. Большинство может пропустить 10 страниц, которые занимает первая глава, так как понятия buffer overflow, black/white box testing встречаются в каждой второй книжке по ИБ. 
Глава 2 (Fuzzing - What's That?) будет интересна тем, кто до этого не сталкивался с понятием фаззинга. Приведен небольшой экскурс в историю, приводится ретроспектива развития идей, основные области применения фаззинга как инструмента. В главе упоминаются ведущие вендоры коммерческих решений в области фаззинга и их продукты.
Глава 3 (Building a Fuzzing Environment) должна раскрывать по идее вопросы построения среды для фаззинга. На деле - содержательная часть главы приводит перечень программных средств, используемых для процессов отладки, мониторинга за поведением процессов для Windows, Linux и OSX. Большей части разработчиков знакомы такие вещи как Windbg, OllyDBG, IDAPro, gdb, valgrind. Как-то совсем бедно на этом фоне выглядит упоминание XCode для OSX.
Четвертая глава (Open Source Fuzzing Tools) и пятая (Commercial Fuzzing Solutions) представляют собой перечисление бесплатных и коммерческих решений с кратким описанием, указанием области применения. Стоит отметить, что существенная часть приведенных бесплатных фаззеров не поддерживается и не развивается достаточно продолжительное время. Описание коммерческих решений более красочное за счет иллюстраций графических интерфейсов.
Шестая глава (Build Your Own Fuzzer) содержит описание основных составных частей средства фаззинга, вводит некоторое понятие базисного словаря фаззинга, вскользь упоминает о простом автомате и применимости этой модели к процессу фаззинга. В конце главы читателю предлагается создать собственный простой фаззер при помощи языка Perl.
Содержание седьмой и восьмой главы (Integration of Fuzzing in the Development Cycle и Standtartization and Certification) в большей степени направлено на людей занимающихся в софтверных компаниях вопросами QA и тестирования. В данных главах фаззинг рассматривается как элемент непрерывного и комплексного тестирования программных продуктов. Делается акцент на то, какие именно программные ошибки могут быть обнаружены средствами фаззинга. Шестая глава предлагает вариант плана по организации фаззинга, который отвечает на основные вопросы: кто, что, как, сколько будет фаззить. Приводится список наиболее часто встречаемых проблем при организации системного процесса фаззинга и пути их решения.
Глава 9 (What is a File?) рассматривает файлы как входную точку для фаззинга приложений. Приводится ряд популярных текстовых и бинарных форматов, подходы к анализу форматов файлов и их содержимого, список популярных hex-редакторов. В конце главы приводится ряд файловых фаззеров с краткими описаниями.
Глава 10 (Code coverage and fuzzing) на мой взгляд во всей книге самая содержательная, посвящена вопросам повышения эффективности методик фаззинга посредством анализа степени покрытия логики тестируемого приложения. Глава предлагает методы инструментализации программных продуктов как с доступным исходным кодом, так и закрытых решений. На достаточно простом примере показано, каким образом можно увеличить процент покрытия тестами целевого приложения.

Книга достаточно простая, без особых технических подробностей и вряд ли будет интересна техническим специалистам, занимающимися поиском уязвимостей. Содержание книги может быть передано в 2-3 статьях. Можно рекомендовать данную книгу техническим менеджерам, ответственным за сегмент QA и тестирование продуктов, желающим повысить безопасность и защищенность выпускаемого программного обеспечения. Приведенные списки утилит, средств и готовых программных сред для фаззинга могут помочь сориентироваться при выборе решения и организации плана по тестированию на уязвимости.
Вызывает вопрос и высокая стоимость книги (65$ на amazon), что в полтора раза больше чем более интересная и содержательная (даже по страницам 2,5 раза толще) Fuzzing: Brute Force Vulnerability Discovery. К тому же, вот уже как 2 года продается ее русскоязычный вариант.

суббота, 28 мая 2011 г.

Социальные сети как средство поиска информации по email.

  Представим следующую ситуацию: вы получили тем или иным способом список email и хотели бы провести адресную рассылку. При этом, вам бы хотелось увеличить вероятность отклика каждого пользователя на ваше письмо. Для достижения этой цели было бы неплохо знать имя и фамилию владельца почтового ящика или дополнительную информацию о пользователе, чтобы указать ее в теме или теле письма. И тут на помощь могут прийти социальные сети. На первый взгляд, охране информации о почтовых адресах пользователей уделяется большое внимание, но существует механизм, который допускает получение информации о соответствии адреса и учетной записи в социальной сети. Я имею ввиду механизм, позволяющий проводить поиск ваших друзей по списку почтовых контактов.
  Данная функция присутствует в таких социальных сетях как facebook и linkedin. Первая охватывает практически всех интернет-активных пользователей, вторая содержит информацию о месте работы и роде занятий пользователя (данная информация может быть также полезна для составления тела посылаемого сообщения). Ситуация упрощается тем, что обе социальные сети позволяют загружать список контактов в виде файла. Facebook требует контакты в формате экспорт-файлов Thunderbird, Microsoft Outlook Express или Apple Mail. Это не является серьезным препятствием, и проблема решается написанием небольшой утилиты. Так, например, для перегонки файла с контактами в формат Thunderbird достаточно 15 строк на python. В случае с linkedin все еще проще, так как сеть позволяет грузить файлы в txt и csv форматах.
  Наиболее удобный формат представления найденных пользователей у facebook. Результаты поиска представляют список обнаруженных пользователей и содержат как имя, так и почтовый адрес. Linkedin в этом плане более скуп на данные - показывает только список, содержащий имена пользователей. Кроме того, у linkedin есть еще одна особенность. Заключается в том, что linkedin запоминает все контакты, по которым проводился поиск и каждый новый поисковый результат содержит данные предыдущих поисков. Это опять же не слишком усложняет жизнь, так как возможно написание вспомогательной утилиты, решающей данную проблему. Алгоритм работы можно предложить следующий: каждый раз разрешать только один адрес и результаты поиска сравнивать с локально сохраненными результатами предыдущего поиска. Таким образом единственная разница в списках и будет соответствовать искомому почтовому адресу. 15 строчками на python тут конечно дело не обойдется, но много времени на разработку уйти не должно.
  Еще немного о том, как можно использовать полученные данные. Как уже говорил, можно использовать информацию о месте работе, профессии для составления пробивного содержания письма. Аналогичным способом может быть использована информация о друзьях пользователя. Так, например, можно составить сообщение от имени друга пользователя (сослаться на новый почтовый ящик) и использовать полный спектр средств социальной инженерии - упрашивать пользователя перейти по ссылке, запустить exe из аттачмента или выслать список контактов.
  Данный способ был опробован на наиболее популярных социальных сетях facebook и linkedin, но аналогичный функционал может присутствовать и в других, в том числе и региональных.