WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 || 3 | 4 |   ...   | 10 |

«Michael Howard David LeBlank WRITING SECURE CODE Second Edition Press Майкл Ховард Дэвид Лебланк ЗАЩИЩЕННЫЙ код 2-е издание, исправленное Москва 2004 УДК 004.45 ББК 32.973.26-018.2 Х68 ...»

-- [ Страница 2 ] --

Если вы нашли дыру в ПО, которым проявите обратитесь к производителю и сотрудничайте с ним над устранением >го места. Много полезного вы из следующих публикаций: из бюллете ней «Acknowledgment Policy for Microsoft Security» («Политика по к представлению сообщений о брешах защиты в продуктах Microsoft») (документ о политике откры тости) и Интернет-очерка «Responsible Disclosure Process» ответственного устранения брешей») Кристи Если вам действительно нужны рекомендации, как реагировать на ние брешей, посмотрите документ Methodology for Information Technol Security методика оценки безопасности в технологиях») на странице Это трудный для чтения но от этого не менее интересный, Ответственность В некоторых компаниях-разработчиках за создание кода и исправление в нем ошибок отвечают разные люди. Это неправильно, и вот почему. Допустим, — программист, создавший приложения. После в этой программы устранить недостаток поручили Мэри. Какой урок из этого Джон? Да никакой! Он продолжит делать те же ошибки, потому что без обратной связи он так и не узнает, что ошибается. Руководству также очень трудно опреде лить динамику развития растет ли он как программист?

Внимание! брешь предоставьте латать программисту, написал код. Только так он сможет понять свою ошибку л исправиться.

Резюме Команде, в которой мало что знают о безопасности систем, не удастся безопасный продукт. Собственно говоря, как и той, где отсутствует жесткий к троль за безопасностью на каждом этапе процесса. Мы рассказали о некоторых 42 Часть I Безопасность приложений сегодня улучшениях процесса помогающих создавать приложения, противостоящие атакам. Часть этих рекомендаций следует реализовать немедленно.

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

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

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

они освоят принципы проектирования защиты, то смогут более защи щенные программы. А начнем мы с некоторых общих понятий и правил.

Принцип безопасно согласно проекту, по умолчанию и при развертывании Работая над инициативой Windows» (Secure Windows Initiative), сформулировали концепцию, состоящую из приложе ния должна обеспечиваться на стадии разработки проекта, в конфигурации по умолчанию и при развертывании (в английском варианте: by design, by default and in — Как подход помогает у рядочить процесс разработки и создавать системы.

44 Часть I Безопасность приложений сегодня Безопасно согласно проекту ПО значительно лучше защищено, когда с самого начала проектируется с учетом требований безопасности. Чтобы создать удачный проект, мы рекомендуем вы полнить определенные процедуры.

• Назначьте человека, ответственного обеспечение безопасности продукта, Подобный труд прилично оплачивается, но это не значит, что этот сотрудник стать козлом отпущения — он участвует во всех собраниях и достаточно ли защищен продукт для начала «отгрузки», а если нет, то что нуж но сделать, чтобы исправить ситуацию.

• Обеспечьте обязательный тренинг всего персонала (детально об этом — в гла ве 2).

• К моменту завершения фазы проектирования подготовьте модели опасностей, грозящих системе. Подробнее о них рассказывается в главе 4, а пока вам таточно знать, что они помогают выяснить, каким атакам будет подвергаться приложение и какие уязвимые места следует устранять.

• Придерживайтесь рекомендаций по безопасному проектированию и програм мированию. Их вы найдете в приложениях В, Г и Д. Учтите — это обязатель ный а вам стремиться максимально расширить и обогатить их.

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

• Разработайте регрессионные тесты для проверки всех уже исправленных оши бок в системе защиты. Это один из способов обучения на ошибках (подроб нее мы обсудим это далее). Обнаружив очередную брешь в защите, создайте программу, в которой отражена «квинтэссенция» атакующего кода, использу ющего данный тип уязвимости, и тщательно исследуйте остальную часть при ложения на предмет обнаружения похожих ошибок.

• Упростите код и модель защиты. Это нелегко, особенно при наличии большо го количества клиентов, которые активно пользуются приложением. Но все же неплохо продумать планы упрощения старого кода, чтобы избавить его от устаревших и небезопасных функций. Как правило, со временем код усложня ется и хуже поддается сопровождению и поддержке, поэтому время, потраченное на удаление устаревшего кода и, как следствие, на упрощение вместо добавления новых функций и исправления ошибок, оказывается исклю чительно полезным для повышения безопасности. Старение программы час то называют вырождением кода (code rot).

• Перед началом продаж ПО проведите «тест на выживание» (penetration analysis), Установите тестовые серверы и предложите своей команде, а также сторонним группам взломать систему. По опыту могу сказать, что команду следует сфор мировать из экспертов в области безопасности и освободить ее от других за даний — в противном случае вам практически ничего не удастся выяснить, Недостаточно тщательное тестирование оказывает «медвежью ГЛАВА 3 Принципы безопасности, которые следует взять на вооружение приложения — у разработчиков создается ложное чувство в защищенности продукта. Это же справедливо и в отношении (hack-fests), когда вы предлагаете всем желающим испытать силы и попытаться взломать вашу систему. Обычно пустая трата времени, если только вы тестируете приложение вость к атакам типа «отказ в обслуживании* (denial of service attack, или атаки) — большинство потенциальных не слишком-то грамот ны и квалификации и им хватает лишь на попытку «забить* сер.чер потоком запросов.

Безопасно по умолчанию идея данного принципа в том, что ПО должно гарантировать достаточно высокий безопасности при установке в конфигурации по умолчанию. Эту задачу решают • Не «включайте» в конфигурации по умолчанию все функции и выбирайте только те, потребуются большинству ваших ей, и позаботьтесь о простом механизме активизации остальных функций.

• должно работать в условиях минимально возможных Не чтобы ПО работало под учетной записью с высокими чиями, например члена группы Administrators (Администраторы) или Administrators (Администраторы домена), когда без этого можно обойтись, этот вопрос обсуждается немного в этой главе, а в 7, которая целиком посвящена этому вопросу.

• Обеспечьте адекватную защиту ресурсов. Конфиденциальные данные и чески важные ресурсы обязательно защитите от атак (подробнее — в главе 6), Безопасно при развертывании Это означает, что система должна быть готовой к работе сразу после Вы можете отлично спроектировать и написать приложение, но если развертывать и администрировать, пользователям будет нелегко обеспечить его при возникновении новых Вот несколько рекоменда ций, которые позволят повысить безопасность создаваемого ПО.

• Позаботьтесь о создании механизма администрирования безопасности ПО.

Ясно, что администратор, не зная параметров подсистемы защиты и рации приложения, не в состоянии определить защищенности при ложения. Здесь подразумевается также возможность сколько пакетов исправлений (patch) уже применено к • Максимально оперативно выпускайте качественные пакеты исправлений под системы безопасности. Обнаружив или узнав о бреши в коде, исправляйте ошиб ку без проволочек, но без излишней спешки — также весьма опасна! В го рячке можно добавить пару-тройку неприятных ошибок, поэтому следите за корректностью исправлений.

• пользователей, как безопасно работать с системой. Не бой тесь разнообразить способы: интерактивная документация или кон текстные подсказки прямо на экране — в главе 24) — все 46 Часть I Безопасность приложений сегодня Принципы безопасности А теперь мы детально обсудим принцип Запомните: безопасность нельзя вынести в отдельный отрезок кода. Так же как и производительность, масштаби руемость, управляемость и читабельность кода;

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

• приложения, открытую для нападений;

• создавать систему безопасности с защитой на всех уровнях;

• использовать минимальные привилегии;

• в конфигурации по умолчанию назначать безопасные параметры;

• помнить, что обратная совместимость всегда чревата проблемами;

• всегда предполагать незащищенность внешних систем;

• предусмотреть план действий при сбоях и отказах;

• позаботиться, чтобы при любых сбоях система сохраняла информации;

• помнить, что возможности подсистемы безопасности — это не то же самое, что безопасные возможности системы;

• никогда не полагаться на защиту, основанную только на ограниченности ин формации (не рассчитывайте, что, если вы скроете информацию о приложе нии, злоумышленник не догадается об уязвимости);

• не смешивать код и данные:

• корректно исправлять ошибки в подсистеме безопасности.

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

Учитесь на ошибках Общеизвестно, что «за одного битого двух небитых дают», но мы готовы покля сться, что в области проектирования ПО не особенно-то быстро учатся на ошиб ках. То же верно и в безопасности. Вот мои любимые цитаты об уче нии на ошибках, — это огромная система раннего предупреждения.

Норман (Norman Cousins) писатель и редактор Не помнящий прошлого обречен на его Джордж (George американский философ и испанского происхождения ГЛАВА 3 Принципы безопасности, которые следует взять на вооружение извлечения уроков из опыта их Арчибальд (1892-1982), американский поэт Обнаружив проблему с защитой своем приложении или узнав о недостатке безопасности продукта конкурента, постарайтесь извлечь из этого пользы. Задайте себе несколько вопросов.

• Почему возникла ошибка?

• Повторяется ли она в других частях кода?

• Как не допустить тиражирования подобных ошибок?

• Как оградить приложение от ошибок такого рода в будущем?

• Нужно ли обновить инструменты анализа или процедуры обучения?

Относитесь к каждой ошибке, как к возможности поучиться. К сожалению, стремлении побыстрее продукт на рынок, разработчики гают этим важным этапом, и в результате мы видим, как одни и те же из версии в версию. Неспособность учиться на ошибках влет компании в копеечку.

С нашей подачи в организована такая важная как «посмер тное вскрытие» ошибок защиты, которые были зафиксированы в Центре безопас ности Microsoft (Microsoft Security Response Center) — www.microsoft.com/security.

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

• название продукта;

• версия продукта;

• имя контактного лица:

• код ошибки в базе данных;

• описание бреши;

• возможные последствия взлома защиты в этом месте;

• проявляется ли эта ошибка при установке по умолчанию;

• что могут сделать проектировщики, разработчики или тестировщики, для транения недоработки;

• детальная информация об исправлении включая, если чия кода (code Как сказал Альберт Эйнштейн, «Опыт — вот единственный источник и обучение на ошибках — прекрасный путь к накоплению знаний о слабых мес тах в защите.

Совет В свое отец мне говорил: «Ты можешь совершить любую но единственный раз. из нее урок и впредь воздержись ее Термин, используемый в системах контроля версий. Обозначает детальную цию о различии кода в разных версиях. — Прим. персе.

48 Часть I Безопасность приложений сегодня Трудный урок Около четырех лет в продукта, к которому я имел отношение, была найдена (какая точно, я уже не припомню). После ее я задал команде разработчиков несколько вопросов, в том числе та кой: причина появления Менеджер проекта что команда была слишком занята, чтобы тратить время на такие глупости. В течение следующего года клиенты в программе три подоб ных ошибки. На исправление каждой потребовалось около Я познакомил с этой информацией нового менеджера проекта — пре дыдущий повышение» и четыре однотипные обнаруженные за год, говорят об одном — не Он сился, и мы потратили четыре часа, пытаясь отыскать причину их появле ния. Дело выеденного яйца не стоило — просто некоторые разработчики одну функцию. Мы поискали места в коде нашли еще четыре и тут же их Затем мы добавили код в функцию, неправильный вызов которой при водил к приложения. В заключение мы разослали по электронной почте сообщение всем сотрудникам организации с описа нием ошибки и что следует чтобы ошибка не возникала в будущем. На ушло чуть 20 человеко-часов.

была решена. иногда допускают эту ошибку, но команда быстро ее вылавливает благодаря коду проверки ошибки, ко торый мы добавили. Поиск проблемы и время, потраченное на искоренение такого класса наверняка сэкономило первому менед жеру проекта массу времени на более полезные занятия!

Уменьшайте «площадь» приложения, уязвимую нападений Увеличивая объем кода и расширяя набор поддерживаемых сетевых протоколов, вы быстро обнаруживаете, что у атакующего появляется больше «то чек входа». Очень важно минимизировать их число, а пользователей заставить активизировать дополнительные возможности только по мере необходимости. В главе 19 я расскажу о технических деталях расчета относительной площади» программы, пока же запомните, что следует учитывать число;

• открытых сокетов (TCP и UDP);

• открытых каналов (named pipes);

• открытых конечных точек удаленного вызова процедур endpoints);

• служб;

• служб, запускаемых по умолчанию;

• служб, обладающих высокими полномочиями:

• фильтров и приложений ISAPI;

• динамических Web-страниц;

ГЛАВА 3 Принципы безопасности, которые следует на вооружение • учетных записей в группе администраторов;

• каталогов и параметров реестра с не обеспечивающими должной за щиты списками управления доступом (Access Control List, ACL).

He все из перечисленного применимо к вашему приложению, и конечное имеет значение только в сравнении с другой версией того же но в любом случае ваша цель снизить его насколько возможно. Имейте в виду, которая устанавливается как часть приложения и запускается под учетной запи сью SYSTEM, следует считать за три «точки При проведении мероприятий по безопасности в Microsoft мы руководствовались ключевой для архитекторов и менеджеров проектов: «Делайте уменьшения открытой «площади» Назначайте безопасные параметры в конфигурации по умолчанию Для уменьшения открытой «площади* приложения в том числе, на значать безопасные параметры для конфигурации по умолчанию. Это наиболее труднодостижимая, но в то же время исключительно важная задача разработчика приложения. Следует подобрать удовлетворяющий пользователей набор — при условии, что он определен на основе требований — и убедиться, что выбранные безопасны. Чтобы снизить риск, возможности, исполь зуемые редко, в конфигурации по умолчанию отключаются. Отключенная не может стать легкой добычей взломщика. Я часто применяю известное также как правило «80/20»: функций, с рыми работают 80% В конфигурации по умолчанию функций, а остальные отключаются, однако ются простые инструкции и меню для их активизации. (Различайте простые и слож ные инструкции. Такую, например, как: добавьте в реестр параметр DWORD, котором младшие 28 бит определяют отключаемые функции», ну как нельзя назвать Конечно, кто-то из команды потребует, чтобы ред ко применяемая функция активизировалась по умолчанию. Часто приходится встре чать программистов, которым собственный опыт диктует особый взгляд на вещи:

его мама пользуется этой функцией, он проектировал или он писал эту функцию.

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

Некоторое время назад я анализировал защиту инструмента разработки, вы пуск которого ожидался через несколько месяцев. В приложении была предусмот рена одна потрясающая возможность, которая устанавливалась и активизирова лась по умолчанию. Выслушав 20-минутное объяснение разработчиков, как дей ствует функция, я подвел итог одним предложением: «Насколько я понял, любой может выполнить произвольный код на компьютере, где установлен этот продукт.

50 Часть I приложений сегодня Это верно?» После короткой дискуссии разработчики подтвердили мою догадку.

Я настаивал на том, чтобы проблему. Но до выпуска приложения оста мало времени, и кто-то из выдвинул такое предложение: «А поче му бы нам не поставлять продукт с этой функцией, по умолчанию, а в предупредить пользователей о риске, которому она подвергает безопасность Я ответил: «А почему не поставлять продукт с отклю ченной по умолчанию функцией и не в как ее включить, когда она действительно понадобится?» Мой ответ не понравился лидеру ды: «Вы же знаете, что люди не читают пока не припрет! И наша новинка останется Улыбнувшись, я ответил: по чему же вы полагаете, что они читать документацию и узнают, как отклю чить опасную В итоге они вообще выкинули эту функцию, и пра вильно сделали, поскольку и так выбивались из графика!

Другая причина, по которой следует по умолчанию отключать максимум фун кций, не имеет к безопасности никакого это Чем больше функций тем больше приложение занимает памяти, а это означает более интенсивную подкачку с диска, что бьет по производительности.

Внимание! Включая в конфигурации по умолчанию больше функций, вы уве личиваете вероятность нарушения защиты, поэтому минимизируйте их число. Запрещайте все функции и обеспечьте простой механизм их ак тивизации по мере необходимости. «Помиловать* следует те функции, о которых известно, что их отключение доставит массу неудобств пользо вателям.

Защищайте все уровни Принцип «защиты на всех достаточно прост: представьте, что ваше при ложение — последний «оставшийся в живых» компонент, когда все прочие меха низмы защиты уничтожены. Ему придется защищаться Например, если в обычных условиях защищено брандмауэром, стройте его так.

чтобы оно выстояло даже при компрометации межсетевого экрана.

Помните пример со средневековым замком из первой главы? Предположим, ваши пользователи — владельцы замка, члены знатного в XVI веке рода, а вы на чальник гарнизона крепости. Обнаружив наступление врагов, вы успокаиваете хо зяина: ваши доблестные стрелки, высота стен и глубина рва остановят нападаю щих. Владелец доволен. Спустя два часа вы снова просите аудиенции и доклады ваете, оборона и крепостная стена разрушена. На вопрос о дальней шей обороне замка вы бессильно отвечаете, что единственный выход — капиту ляция, так как враг уже в замке. Так карьеру в вооруженных силах не сделать*. Вы должны драться до последней капли крови или пока не получите приказ прекратить сопротивление.

Надо заметить, что в средние трусливый начальник гарнизона рисковал не а головой: не так победители ее снесли бы. — ред.

ГЛАВА 3 Принципы безопасности, которые следует взять на вооружение Еще один пример уже из сегодняшнего времени. Когда вы последний раз дели операциониста в кассе которого скопилась куча денег? Чтобы до действительно серьезных денег, придется проникнуть в хранилище, а до этого преодолеть несколько уровней защиты:

• миновать охранника у входа в банк;

• пройти двойные взаимоблокирующиеся двери, есть во многих ках. Входя в банк, вы попадаете в пуленепробиваемую стеклянную капсулу.

шняя дверь и лишь через несколько секунд откроется стеклянная дверь в помещение банка. Это значит, что не удастся быстро забе жать в операционный зал и выскочить из него — уже с деньгами. В операционист или охранник может дверь удаленно и вора, когда тот попытается выйти;

• миновать охранников внутри банка;

• обойти множество телевизионных камер, которые контролируют все помеще ние и отслеживают перемещения всех людей;

• вы не можете заставить провести вас в хранилище операционистов, у них нет туда доступа (это пример наименьших о которых поговорим далее);

• преодолеть несколько уровней защиты хранилища:

оно открывается только в определенное время;

у него очень толстые металлические стены и двери;

методы доступа в разные отделения хранилища отличаются, К сожалению, подавляющее большинство приложений спроектировано и за программировано так, что взлом брандмауэра ведет к гарантированной компро метации программы. В современных условиях это очень плохо. Вы не признавать поражение только из-за того, что скомпрометирована лишь часть механизмов защиты. В этом защиты на всех уровнях: на каком-то этапе приложение должно постоять за себя. Не полагайтесь на другие системы и при нимайте бой — программы, «железо* и люди могут дать слабину. ПО создают которыми свойственно ошибаться, поэтому в программах возможны погрешнос ти. Вы должны быть готовым к ошибкам и, как следствие, к дырам в защите. Ина че говоря, что вы будете когда единственный внешний контур взломщи кам удастся преодолеть? Защита на всех уровнях позволяет устранить из ративной точки критического сбоя (single point of failure), ние которых приводит к неработоспособности всей инфраструктуры.

Внимание! Предусмотрите в своем приложении средства «самозащиты» от так как средства безопасности могут пасть под напором взлом и вы окажетесь беззащитны. Никогда не сдавайтесь!

Используйте наименьшие привилегии Позаботьтесь, чтобы все приложения выполнялись с минимальным набором при вилегий, достаточным для выполнения работы, и не более того. Я часто анализи ровал продукты, которые должны выполняться в контексте безопасности 52 Часть I Безопасность приложений сегодня нистратора или. хуже того, как системная служба, и пришел к что, немно го пораскинув мозгами, проектировщики могли бы снять приложение с высоких привилегий. Аргументация о наименьших привилегиях очень проста. Если у приложения есть брешь, злоумышленнику внедрить в прикладной процесс свой код и заставить его выполнять нужные хакеру задачи или запустить или вирус, вредоносный код получит те же привилегии, что и процесс.

Если программа работает под учетной записью администратора, то и код злоумыш получит административные права. Вот почему мы рекомендуем не кать приложения под учетной записью члена группы администраторов — на слу чай вируса или любого злонамеренного кода.

Ну ладно, сознайтесь: ведь вы входите в систему под учетной записью из пы локальных администраторов? Я — нет. Уже более трех лет я не пользуюсь для работы административными полномочиями, и прекрасно. Я и отлажи ваю код, посылаю письма по электронной почте, синхронизирую данные с моим карманным пишу документацию для и делаю уйму других вещей. Для всего этого права администратора не нужны, так зачем риско вать? (Должен что, обустраивая новый компьютер, я добавляю себя в группу администраторов, устанавливаю все нужные приложения и незамедлительно удаляю себя из этой группы.) Не на одни и те же грабли:

не работайте в системе под административной учетной записью Если мне нужно выполнить операцию, требующую я либо использую команду либо на рабочем столе ярлык и на его свойств устанавливаю флажок Run as different (Запускать от имени пользователя) (в Windows 2000} или Ran with different (Запускать с другими учетными данными) (в ХР). При запуске приложения я ввожу имя учетной ад министратора и пароль. Б этом от имени запуска ется только приложение. Когда оно я больше не тратор. Вам следует попробовать этот способ — вы будете гораздо надеж нее защищены от атак!

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

Вернемся к примеру организации защиты в банке. Наибольшая ценность в банке — но у операционистов нет к нему прямого доступа. Грабитель, конечно, может попытаться угрозами заставить операциониста открыть храни ГЛАВА 3 Принципы безопасности, которые следует взять на вооружение но тот просто не знает, как это делается. Так в банке работает принцип ми нимальных привилегий.

Если хотите немного развлечься, посмотрите раздел "Если не запись администратора, программа просто в приложении Б.

где с юмором и наглядно иллюстрируется принцип наименьших полномочий. А в главе 7 исчерпывающе объясняется, как в большинстве случаев удается «обойти* бы неустранимую требовательность к опасно высоким при вилегиям.

Совет Если ваше приложение или служба не работает при запуске под ной отличной от административной или системной, тесь, в чем дело. Велика вероятность, что в повышенных привилегиях нет никакой необходимости, Разделите привилегии Принцип привилегий также подразумевает разделение ий:

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

В июне 2002 г. серьезную брешь в версиях 2.3-1 и 3-3 протокола OpenSSH, ко торый входит в Apple Mac OS X, FreeBSD и OpenBSD, удалось устранить за счет предусмотренной по умолчанию поддержки разделения привилегий. Уязвимый код стал работать с меньшими правами, так как параметр уста новили в Подробнее об этой проблеме на Web-странице ssh.com/txt/preauth.adv.

Другой пример разделения привилегий — сервер Microsoft IIS 6, который дит в Windows Server. В отличие от IIS 5, на этом Web-сервере ский код по умолчанию не запускается с повышенными привилегиями. Все вательские обрабатываются внешними рабочими процессами действующими под учетной записью сетевой службы (Network Service), а не бо лее привилегированной локальной системы (Local System). А вот inietinfo.exe, цесс и управления процессами, у которого нет прямой свя зи с HTTP-запросами, работает под учетной записью локальной системы.

Еще один пример — Web-сервер Apache. Его работа начинается с запуска ного процесса полномочиями root;

для обработки запросов он процессы которые работают под низкопривилегированной запи сью nobody.

Будьте готовы к проблемам с обратной совместимостью совместимость — еще одна причина поставлять защищенные приложения с безопасными параметрами по умолчанию. Допустим, ваше приложение, рое используют многие крупные корпорации с тысячами, если не с десятками клиентских компьютеров, базируется на созданном вами же протоколе, шемся не вполне защищенным. Через пять лет и девять версий у вас 54 Часть I Безопасность приложений сегодня «дошли руки» и вы исправили ошибку в протоколе. Но тут-то и начались пробле мы: новая версия оказалась несовместимой со старой и компьютеры с новой вер сией отказывались взаимодействовать с оснащенными модифициро ванным приложением. Шансы, что клиенты дружно перейдут на новую версию минимальны — из них до сих пор работают на версии и 2. Получается, что версия протокола должна жить вечно!

Одно из решений — предоставить возможность выбора версии про токола с помощью параметров конфигурации. Часть клиентов предпочтет пользо ваться только последней версией, чтобы не рисковать или потому что у них по просту нет клиентов с более старой Совет Решаясь на внесение в продукт существенных изменений, связанных с будьте готовы к появлению вороха проблем с обратной совместимостью, Обратная совместимость: подпись в и TCP/IP С проблемой обратной совместимости сталкивалась Microsoft. Протокол SMB Message Block) активно в сервисах и сер висах печати в продуктах Microsoft и других поставщиков со LAN Manager, есть с 80-х. более защищенная версия токола, в которой реализована подпись пакетов, стала доступной в 4 с Service Pack 3 и Windows 98. протокол улучшен в двух отношениях;

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

С точки зрения безопасности имеет смысл внедрить подпись Однако в случае компьютеры смогут взаимодействовать по про SM8 только при условии поддержки подписи, то есть все компьютеры компании придется задача не всегда Есть альтернативный после установления соединения между двумя пытаться использовать подпись пакетов и в случае неудачи переходить на незащищенную версию протокола. Но в плане это ничего не дает: нападающий всегда сможет заставить сер вер перейти на опасную версию Другой пример — своей незащищенностью прото кол TCP/IP. В новом протоколе (Internet Protocol устранено большинство присущих TCP/IP проблем, но не все серверы его понимают (поэтому по умолчанию он TCP/IP скоро сойдет со поэтому нам еще долго придется бороться с на него.

ГЛАВА 3 Принципы безопасности, которые следует взять на вооружение Принимайте как аксиому, что внешние системы не защищены по определению Предположение о незащищенности систем связано с ты на всех уровнях: одна только осторожность при взаимодействии с такими системами — уже неплохое средство безопасности. Любые данные, поступающие из систем, над которыми вы не властны, по определению признаются ными, а сами системы — потенциальным источником атак. Это особенно о в процессах приема данных, введенных пользователем. Пока не доказано обрат ное, любая информация извне должна как потенциальная Внешние серверы также могут стать Существует масса перенаправления клиентов на «не сервер. В главе затрагивается эта система DNS, на которую мы полагаемся при поиске сервера, не слип ком-то надежна. Создавая клиент, не особо рассчитывайте, что приложение гда будет иметь дело с «легальным» паинькой-сервером.

Не рассчитывайте, что вашему приложению всегда придется общаться с граммами, которые четко ограничиваются набором команд, доступных в > вательском интерфейсе или интерфейсе Web-клиента приложения. Многие сер веры взламываются лишь из-за легкости, с которой им можно «всучить» ные в обход клиента. Та же опасность грозит и в обратном случае, когда клиентам подсовывают сервер.

Внимание! Прочитав следующую главу, вы поймете, что, кроме деком позиция приложения на ключевые компоненты позволяет разделить источники данных на доверенные и ненадежные. Будьте очень осторожны при передаче данных из ненадежного источника в доверенный процесс, И не говорите потом, что я вас не предупреждал!

Разработайте план действий на случай сбоев и отказов Как я уже все ломается. Механическое оборудование подвержено изн' > су, а программное и аппаратное обеспечение может содержать «жучки» Ошибки происходят часто, и надо быть к ним готовыми. Разработайте план на случай нарушения защиты. Как если взломали брандмауэр? Что делать, если изуродовали Web-сайт? Или скомпрометировали приложение? «Этого никогда может быть, потому что не может — не ответ. Ситуация сродни разработке плана эвакуации при пожаре: хочется надеяться, что план никогда не пригоди г но если он есть, шансов остаться живым существенно больше, Совет В этом мире несколько неизбежных вещей: смерть, налоги и сбои ком пьютерных систем. К ним следует быть готовыми.

Предусмотрите безопасный сбой Итак, что делать, когда система все-таки «упала»? Ошибка может перевести систе му в один их двух режимов;

защищенный и незащищенный. В первом случае пр ложение не раскрывает секретные данные, не позволяет их изменить или 56 Часть I Безопасность приложений сегодня зоваться ошибкой для каких бы то ни было других вредоносных действий с ними.

В незащищенном режиме приложение может раскрывать конфиденциальные све дения или допускать секретных данных (или что еще похуже). Нас инте ресует последний случай зная, как вашу программу, обойдет механизмы защиты, поскольку «рухнувшее» приложение не обеспечива ет защиты.

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

Чтобы понять суть сбоя, посмотрите этот и попы тайтесь найти в нем подвох.

DWORD = if == { // Проверку безопасности пройти не удалось.

// Информируем пользователя о запрещении доступа.

else { // Проверка безопасности прошла успешно.

// Выполняем На первый взгляд все прекрасно, но что, если произойдет ошибка в функции Например, когда во время работы функции закончится свободная память или описатели объектов? Пользователь успешно получит доступ, если функция вернет что-то вроде Код следует переписать так:

DWORD dwRet = if NO_ERROR) { // Проверка безопасности прошла успешно, запрошенную { // Проверку безопасности пройти не удалось.

// Информируем пользователя о запрещении доступа.

} Теперь в случае ошибки при вызове пользователю не уда стся получить доступ к выполнению привилегированной задачи, Другой пример — список правил доступа на брандмауэре. Пакет, не воряющий определенному набору правил, не должен пройти, то есть его отбра сывают. В противном случае будьте уверены, что найдется лазейка, которая по зволит пропихнуть через брандмауэр вредоносный пакет (или целую армию та ких Задача администратора — сконфигурировать брандмауэр так.

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

Другой сценарий детально описан в главе 10. Речь идет о фильтрации введен ных пользователем данных с целью поиска потенциально опасной информации и немедленному отбрасыванию данных при наличии в них опасных символов.

Потенциальная угроза безопасности существует, если нападающему удастся ГЛАВА 3 Принципы безопасности, которые следует взять на вооружение сунуть» вашей программе данные, которые фильтр не перехватывает. Так что вам следует четко определить, что разрешается принимать, а все остальное безогово рочно отвергать.

Примечание Есть замечательная публикация Джерома Saltzer) и Майкла Шредера (Michael о безопасных сбоях — «The Protec tion of Information in Computer (Защита информации в компь ютерных системах) Совет Запомните золотое правило безопасного сбоя: запрещать все по умол чанию, а разрешать только то, что соответствует всем условиям, Помните, что возможности подсистемы безопасности — это не то же самое, что безопасные возможности системы В презентациях для разработчиков по поводу безопасного проектирования и кодирования я всегда размещаю на втором или третьем слайде такой пункт:

Функции безопасности Безопасные функции Это стало в некотором роде заклинанием в команде Secure Windows Оно позволяет нам не забыть, что простое приложения «живой безопасности не защитит его. Чтобы гарантировать защиту от атак, мы должны быть уверены в том, что включаем корректные функции и адекватно используем. Нет никакого смысла применять протокол SSL (Secure Socket Layer) или TLS (Transport Layer Security), если вы защищаете не поток данных между ентом и сервером. (К слову, один из лучших способов гарантировать примене ние адекватных функций — моделирование опасностей, но об этом — в щей главе), Другая по которой функции безопасности не обязательно ются в безопасное приложение, — эти функции часто создают люди, професси нально занимающиеся безопасностью. А их не особо интересует возможностей самого приложения. (Это не значит, что ПО для защиты не соде жит ошибок, но вероятность этого все же выше).

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

Не стройте систему защиты на ограничении информации о приложении Всегда предполагайте, что нападающий знает ровно столько сколько вы, в числе знаком со всеми исходными кодами и проектной документацией. Даже это так, при желании взломщику ничего не стоит раскопать информацию, лежащую на поверхности. Некоторые способы получения подобных описаны и в этой книге. Сокрытие определенной информации годится в одного из средств защиты, по только не единственного средства обеспечения безопасности. Иначе говоря, неразглашение можно считать малой частью стра тегии на всех 58 Часть 1 Безопасность приложений сегодня Разделяйте код и данные Смешивание кода и данных — старая проблема, возникшая с выходом версии 2. пакета Lotus 1-2-3 в 1985 г. Это приложение для работы с электронными таблица ми пользовалось бешеной популярностью в конце 80-х и начале 90-х;

от анало гов его отличала возможность выполнения пользовательских макросов. Спрос рождает предложение: разработчики делали огромные деньги на написании и продаже макросов. С тех пор многое изменилось. Тем не менее данные — это дан ные, и если в них добавлять исполняемый код, они становятся опасными. Взять хотя бы многочисленные проблемы с вирусами, которые распространяются по электронной почте за счет того, что сообщения содержат не только данные (соб сообщение), но и код (в виде сценариев и вложений). Или проблемы с защитой в Web-страницах, такие как подмена с сценариев (cross-site scripting), возникающие из-за совмещения HTML и JavaScript. He поймите меня превратно, слияние кода и данных — исключительно мощная возможность, но на деле она часто ослабляет защиту.

Если в вашем приложении предусматривается смешение кода и данных, мы рекомендуем по умолчанию запрещать выполнение кода и предоставить пользо вателю самостоятельно определять политику, Именно так сделано в Microsoft Office По умолчанию никакие макросы не выполняются — решение об их за пуске принимает пользователь.

Корректно исправляйте ошибки в защите Обнаружив связанную с безопасностью ошибку или архитектурный просчет, ус траните его и поищите подобные бреши в других частях приложения — вы обя зательно их найдете. Ошибки в защите, как тараканы: можно поймать на кухне и уничтожить пару-тройку. Но проблема в что их целый клан: братья, сестры, дети, кузины, племянники, и т. д. где один таракан, там их целое полчище. К сожалению, это справедливо и для брешей в защите — програм мист регулярно повторяет одни и те же Совет Обнаружив ошибку защиты или архитектурный просчет, устраните его и немедленно проверьте остальные части приложения — вы наверняка найдете аналогичные дефекты, И еще: обнаружив повторяющуюся раз за разом ошибку, поза ботьтесь о том, чтобы искоренить их как класс, не ограничивайтесь полумерами.

Внося исправления, не делайте из секрета — сообщайте о них откры то. Если вы исправили три, а не одну ошибку, которую обнаружил исследователь системы, так и скажите! На мой взгляд, это свидетельствует о вашей вниматель ности и тщании в борьбе за Сокрытие ошибок безопасности — одна из причин теорий заговора! Они учат нас осторожности — не сообщайте слишком много чтобы нападающий не смог атаковать еще не (patched) системы. Моя любимая цитата по этому поводу:

ГЛАВА 3 Принципы безопасности, которые следует взять на вооружение Утаите мир будет худшее.

Марк римский поэт годы Обнаружив ошибку в защите, старайтесь исправить ее радикально, близко к «корню зла». если ошибка в функции исправления нее или как можно ближе к ней. Не исправляйте код, вызывает эту функцию. Если хакер сумеет «обмануть» систему и вызвать напрямую или обойти изменения, внесенные вами в система окажется щитной.

И наконец, если в существует из-за какой-либо ной рубите ее на корню. Не лепите «заплатки» — со временем они вратятся в ком, так как часто приводят к регрессионным ошибкам.

говорится, «лечите болезнь, а не симптомы».

Резюме Мы изложили основные современные принципы разработки ПО. По опыту что их несложно реализовать, по выигрыш при этом получается огром ный. Внедрять их как можно быстрее. Если не знаете, с чего начать, с принципа параметры по умолчанию», поскольку это сокращает количество возможностей для атак (и плавно ведет вас «за к при] на всех и «использование минимальных На втором месте принцип «извлечение уроков из ошибок». В этом нет ничего зорного — мы люди и способны но только не надо повторять свои ошибки!

Моделирование опасностей Внимание! Невозможно создать надежную систему, не понимая, какие опас ности ей угрожают. Запомните эту азбучную истину.

Печально, но факт — многие приложения проектируются в спешке, и в жертву в первую очередь приносится безопасность. Один из методов упорядочения про ектирования прикладных программ заключается в создании модели опасностей (threat model), грозящих системе. Необходимо тщательно проанализировать за щиту продукта, чтобы определить источники наибольшей угрозы его сти и внешние проявления атак, то есть установить, каким опасностям и как дол жна противостоять система. Суть моделирования — описать защиту приложения определенным формальным способом. Обычно очень много говорят об опасно сти и атаках, но практически ничего — об их моделировании. По собственному опыту что разработчики, моделирующие опасности, лучше понимают сла бые места своих продуктов и применяют адекватные меры по предотвращению а значит, создают более защищенные системы, По завершении кампании Windows Security Push в феврале — марте 2002 года, отвечая на вопрос журналиста о самом полезном которое за это время приобрели разработчики, и архитекторы приложений, я без коле баний ответил, что разработчиков мы научили отслеживать путь каждого байта данных в программе и анализировать даже самые невероятные способы обраще ния с данными, — выявлять возможности мутации данных (по — в главе 9), а проектировщиков — опасности. По Security Push (и другие аналогичные кампании в Microsoft) позволили нам сделать вывод, что, с точки зрения безопасности, моделирование опасностей — самая составляющая проектирования приложений.

ГЛАВА 4 Моделирование опасностей Моделирование опасностей как средство проектирования защищенных приложений заниматься опасностей, в что невозможно создать по-настоящему защищенную выяснив, что именно ей грозит, и не сделав все для снижения общей уязвимости приложения.

опасностей — простой и временами захватывающий процесс, чтобы получить отдачу, вам придется попотеть. Ленивый проектировщик даже указать моделирование в качестве относящегося к безопасности!

При этом очевидны и другие плюсы.

• Моделирование позволяет лучше разобраться в приложении. Это ясно.

шаг за шагом изучая вы в деталях изучите, оно работает! Во время совещаний по моделированию опасностей мне несме г ное число раз приходилось слышать от авторов программы возглас удивления:

«Вот, оказывается, как оно • Моделирование помогает находить ошибки в программе. Я взял за в какой бы команде я ни работал, заносить информацию об обнаруженных в программе ошибках в базу данных, и со временем в списке возможных поля «Как обнаружено» появлялось новое — И это естественно. Конечно, ошибки обнаруживаются при анализе кода и стировании приложения. Придирчивое изучение архитектуры приложения также позволяет кое-что выяснить. Но на поверку оказывается, что примерно половина всех ошибок «всплывает» в процессе анализа опасностей, а половина — во время тестирования и анализа кода.

Внимание! Если вы никогда до этого не анализировали опасности, кото рые грозят системе, то наверняка в защите такие бреши, о кото рых вы даже не подозреваете!

сложные ошибки проектирования, которые практически удается выявить другими способами. Анализ опасностей — лучшее выявить незначительные бреши защиты на различных а когда их последствия могут оказаться катастрофическими.

Модели опасностей помогают новым сотрудникам детально разобраться в приложении. Любому требуется время, чтобы в процесс», а дование программы способствует быстрому обучению, О моделях опасностей следует уведомлять разработчиков продукта, «завязан на вашем приложении. По крайней мере дважды на моей памяти кала ситуация, когда разработчики программы В, которая зависела от программ А, безуспешно боролись с дырявой защитой В, ошибочно что в А нет. Все прояснилось только после анализа грозящих про грамме А. Подумайте, может, и вам стоит внести в свою модель раздел, в ром будут перечислены опасности, влияющие на другие продукты, — тогда разработчикам последних не придется строить громоздкие модели.

Модели опасностей полезны и проверка ПО на основе мод ли опасностей поможет разработать новые средства тестирования.

62 Часть I Безопасность приложений сегодня опасностей полезны при организации хорошо продуманного плана тестиро вания защиты — об этом я расскажу в главе 19.

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

Вот как выглядит процесс моделирования опасностей:

1. создание группы моделирования опасностей;

разложение приложения на составляющие;

3. определение опасностей, грозящих системе:

4. упорядочение опасностей в порядке убывания степени их серьезности:

5. определение методов реагирования на опасности;

6. выбор методов борьбы с опасностями;

7. отбор технологий для выбранных методов борьбы с опасностями.

Эту последовательность придется повторить несколько раз (рис. 4-1) — будь вы хоть семи пядей во лбу: выявить все «тонкие места» за один проход не удастся.

К тому же со временем происходят изменения, возникают новые проблемы, ме няется ситуация в отрасли и технике и в системах отыскиваются новые слабые места, приложения на составляющие опасностей опасностей Рис. 4-1. моделирования опасностей Рассмотрим каждый этап этого процесса по отдельности.

Создание группы моделирования опасностей На первом этапе участники проекта собираются для выполнения предваритель ного анализа опасностей. Группу должен возглавить самый компетентный в во просах безопасности человек. подразумевает умение находить в приложении или его проекте возможные направления атаки системы. Участни ки группы могут даже не разбираться в коде, но они должны знать, как ранее взла мывались подобные приложения. Именно это важно, потому что моделирование ГЛАВА 4 Моделирование опасностей опасностей приносит пользы, если его люди, разбирающиеся в методах атак.

Позаботьтесь, чтобы на встрече по крайней мере по представителю от каждой подгруппы, в том числе от проектировщиков, програм мистов, тестировщиков и технических писателей. Чем разнороднее группа, тем шире охват. Если в компании работают знатоки в области безопасности, но они не участвуют в проекте, пригласите их тоже — свежий взгляд и новые вопрось о работе приложения часто приводят к интересным открытиям. Впрочем, не борщите: если в группе окажется больше десяти работой будет труд] управлять и совещание может закончиться безрезультатно. Думаю, полезно и представителя отдела маркетинга или продаж — не только чтобы выслушать его мнение, но и чтобы он узнал о новых возможностях. К тому же с отделом стоит тогда его сотрудники будут со знанием дела рассказывать клиен там о том, как компания печется о защите создаваемого ПО. (Присутствие пред ставителей этих отделов на каждом совещании необязательно, зато у вас будет что сказать в ответ на что их игнорируют!) До начала работы обратите внимание собравшихся на то, что задача не в ре шении проблем, а в выявлении компонентов системы и путей их взаимодействия, а конечный итог мероприятия — обнаружение как можно большего числа опас ностей, грозящих системе. Изменения в проекте и в коде стоит рассматривать и вносить на следующих встречах. Однако обсуждения методов противодействия и предотвращения опасностей не просто не позволяйте «горячим го ловам» слишком углубляться в детали или, как мы говорим в Microsoft, в Для первой встречи достаточно обычной доски, информацию с которой поз же стоит перевести в электронный вид для дальнейшего анализа и просмотра.

Внимание! Не пытайтесь во время таких встреч предлагать решения и устра нять проблемы. Их цель — лишь поиск опасностей, но никак не устра нение. Мой опыт что на первых дело часто не до ходит даже до поиска не говоря уже о методах борьбы с ними!

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

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

Прежде чем подробно описать формализованный процесс коротко расскажу об истории его создания. Мы, небольшая сотрудников Microsoft, собрались в ноябре 2001 г., чтобы обсудить, как 64 Часть I Безопасность приложений сегодня моделирование опасностей. Благодаря помощи по моде лированию приложений, пришли к выводу, что стоит строить диаграммы пото ков данных, а также другие диаграммы. Мы утвердились в этом мнении в начале 2002 г., когда Microsoft привлекла компанию @stake спе циализирующуюся на компьютерной для анализа безопасности технологий, применяющихся в продуктах Microsoft. В моделях, предложенных @stake, диаграммы потоков данных составляют важную часть процесса разложе ния программы на составляющие, выполняемого до моделирования опасностей.

В это же время разработчики Microsoft SQL Server инициировали крупномас штабную кампанию по начав не с анализа кода, а с месячного ра унда моделирования опасностей. Как вы разработчики SQL Server прекрасно разбираются в данных. Как-никак SQL Server — это база данных, и кому как не ее создателям использовать при моделировании приложений диаграммы потоков данных (data flow diagrams, Это упрочило нашу веру в то, что та кие методики формальной декомпозиции приложений, как DFD-диаграммы. весьма полезны для моделирования опасностей. Мы применяем чуть модифицированные DFD-диаграммы, добавляя информацию о характере данных и границах облас тей с различным уровнем безопасности. В конце концов, бреши часто из-за ошибочных предположений о данных, особенно когда данные попадают в доверенную область из недоверенной, Формальная декомпозиция приложения Сейчас я расскажу о том, как использовать DFD-диаграммы для разложения ПО на ключевые составляющие перед началом моделирования. я не наста иваю на том, что DFD-диаграммы — единственный метод декомпозиции для ана лиза опасностей. Некоторые элементы UML (Unified Modeling Language), особен но операций (activity diagram), отлично подходят для описания про цессов и очень похожи на Тем не менее опера ций в основном описывают потоки управления между процессами, а не потоки данных, как DFD-диаграммы. Эти понятия схожи, но не идентичны.

Примечание Мы не собираемся учить вас создавать DFD-диаграммы или ис пользовать Этому посвящено множество книг — некоторые указа ны в библиографическом списке.

Основополагающий принцип таков: приложение или систему можно разбить на подсистемы, а те, в свою очередь, — на более мелкие подсисте мы следующего уровня. Подобный итерационный подход делает DFD-диаграммы удобным средством декомпозиции приложений. Прежде всего я познакомлю вас с условными обозначениями на DFD-диаграммах (рис. 4-2).

На первой стадии декомпозиции определяют границы или область действия системы, а также границы между доверенными и недоверенными компонентами. На DFD-диаграммах границы приложений определяют на основе представления контекстов. Если не определить область действия приложения, вы потеряете массу времени на анализ тех опасностей, что находятся за пределами «компетенции» приложения и не имеют к нему никакого отноше ния. Заметьте: диаграмма контекста содержит процесс и ГЛАВА 4 Моделирование опасностей но не содержит хранилищ данных. Ее можно с обзором проекта «с соты птичьего пользователь и система — и никаких деталей. На щих стадиях вы перемещаетесь на все более низкие уровни — к диаграммам уров ня 0, уровня 1, уровня 2 и т. д. (рис. 4-3).

Процесс или обработка данных Группа Преобразование или обработка данных данных Место хранения временных или данных Граница Границы — между машинами, областями с различным уровнем безопасности, адресного пространства и Внешний субъект Внешний источник данных данных Описывает потоки данных из хранилищ данных, процессов и внешних субъектов Рис. 4-2. Основные условные обозначения на Мы не станем теоретизировать по поводу DFD-диаграмм, а объясним все на примере упрощенного Web-приложения для расчета зарплаты.

Совет Все этой главы созданы в шаблоне Data Flow Diagram приложения Microsoft Visio Professional 2002.

На рис. 4-4 показана диаграмма контекстов примера приложения расчета зар платы.

При определении области действия DFD-диаграммы учитывайте моменты:

• игнорируйте внутреннее устройство приложения. На этом этапе вас не долж но интересовать, как оно работает, — вы определяете область действия, а подробности работы приложения;

• выясните, на какие события и запросы должна реагировать система.

Web-сервис фондовой биржи получает запросы на получение содержащие сокращенные обозначения ценных бумаг;

• определите, какой ответ генерирует процесс. Web-сервис фондовой может возвращать время и котировки, а при возможности, цену прода жи и покупки;

66 Часть I Безопасность приложений сегодня Уровень D Рис. 4-3. принцип на основе — спуск по иерархической лестнице от контекста к • выявите взаимоотношения источников с запросами и откликами. Уч тите, что источники данных делятся на постоянные (файлы, реестр, базы дан ных и т. п.) и временные (данные в кэше);

• определите получателей всех откликов.

Каждый процесс на рис. 4-4 в свою очередь состоит из нескольких более мел ких процессов и поэтому также нуждается в декомпозиции. На рис. 4-5 показана диаграмма уровня 1 для нашего приложения.

ГЛАВА 4 Моделирование опасностей Запрос на админист ративное воздействие Отклик на админист ративное воздействие Запрос о зарплате;

0, Приложение расчета зарплаты Ответ на запрос информации о зарплате Обновленные файлы Записи журнала аудита Рис. 4-4. контекстов расчета зарплаты Создавая следуйте правилам создания и именования • каждому процессу соответствует как минимум один входящий и один поток данных;

• все потоки данных начинаются и заканчиваются на процессах;

• хранилища данных соединяются с процессами через потоки данных;

• хранилища данных никогда не соединяются друг с другом напрямую — ко через процессы;

• названия процессов состоят из глаголов и существительных или фраз на ос нове глаголов (например: «Обработать символ «Поставить оценку за «Создать запись в • названия потоков данных — существительные или фразы на их основе мер: «Биржевая оценка», аудита • названия внешних субъектов — существительные (например: «Биржевой кер».

Часть I Безопасность приложений сегодня Запрос на админист 14. Отклик на админист Применение ративное воздействие администра данные Обновленные данные Обновленные по зарплате данные 6. \ Аутентификационные данные 12. по Статус Реквизиты аутентификации Запрос данных по зарплате Запрос Запрос данных Запрос информации по зарплате за по арппате 5. политики клиентских данных Ответ на запрос на запрос Данные информации информации по за плате о зарплате Новые данные аудита Запрошенная страница страница Журнал аудита 7.0 8. Web-страницы Код Web-сервиса Центр Г Обновленные Обновленные файлы файлы Записи аудита диаграмма уровня 1 расчета зарплаты • названия хранилищ данных — существительные (например: «Текущие бирже вые «Итоговый результат экзамена», «Журнал Наконец-то мы добрались до когда понятно, как устрое но приложение. Как правило, для моделирования опасностей достаточно спуститься на два, три или четыре уровня. Я сталкивался с но они создавались для проектирования приложения, а не моделирования опас ностей. Достаточным следует считать уровень, на котором начинают проявлять ся возможные опасности — иначе люди потеряют интерес к ре шив, что следующую пару месяцев им предстоит только строить ГЛАВА 4 Моделирование опасностей Мне встречались великолепные модели опасностей, представленные исключитель но уровня 1, Внимание! Не впадайте в паралич от объема работы — достаточно дойти до уровня, позволяющего выявить опасности. Паралич от анализа наступа ет, когда анализ продолжается слишком долго, растягиваясь чуть не на весь период реализации проекта.

На рис. 4-6 показано высокоуровневое физическое представление приложения расчета зарплаты со всеми ключевыми компонентами и основными пользовате лями (или, выражаясь на языке моделирования опасностей, действующих лиц) консоль данных Данные о зарплате данные интерфейса интерфейс Пользователь сервер ба;

* Web-страницы и Ь- р висов аудита Web-сервиса Пользователь Интерфейс загрузки информационного Web-разработчик Аудитор Рис. 4-6. Высокоуровневое физическое представление расчета зарплаты Часть I Безопасность приложений сегодня Основные компоненты приложения описаны в табл.

Таблица Основные компоненты и пользователи приложения расчета зарплаты Компонент или пользователь Примечание Пользователь — основные потребители решения. Им разре шено просматривать данные о своей заработной плате, ис торию выплат по крайней мере за последние 5 лет и ния об удержании налогов доступно два способа доступа к информа ции: через Web-сайт или клиент Web-сервиса. Выбор — за пользователем Администратор Администраторы контролируют всю систему: следят за со стоянием управляют данными аутентификации и зарплаты. Заметьте: администраторы лишь управляют по токами а сама доступна только сотруд никам отдела заработной платы Поддерживает код Web-приложения, в том числе код Web страниц и Web-сервисов Аудитор Задача аудитора — просматривать журналы аудита и выяв лять неправомерные или просто подозрительные действия Пользовательский Пользовательский интерфейс реализован на основе HTML интерфейс и представляет собой основное средство доступа пользова телей в систему Клиент Web-сервиса Необязательный интерфейс, возвращающий неформатиро ванные «сырые» данные о зарплате Административная Административный интерфейс, который служит админист консоль ратору для управления серверами и данными приложения Интерфейс загрузки Web-дизайнеры работают с локальными копиями кода информационного приложения, а затем загружают обновленный код или наполнения на сервер Web-страницы, используя этот Web-интерфейс Здесь — просто компьютер с HTTP-сервером Web-страницы Web-страницы исполняют роль основного интерфейса сис темы: в этом основанном на технологии решении содержатся динамические и статические страницы, а также графические изображения. Всей этой «кухней» заведуют Web-разработчики Код Web-сервиса Поддерживает работу дополнительного интерфейса систе мы — Web-сервиса. Этот код также поддерживают Web-раз работчики Данные аутентификации Данные служат для проверки подлинности пользователей Бизнес-логика Бизнес-логика расчета зарплаты управляет получением расчета зарплаты пользователей и отбором данных для представле ния конкретному пользователю Логика интерфейса какие возможности предоставляет пользова администрирования тельский интерфейс администратора. Содержит все правила о том, кому и какие действия с данными разрешены ГЛАВА 4 Моделирование опасностей Таблица 4-1. (окончание) Компонент или пользователь Примечание базы Сервер данных управляет доступом и обрабатывает данные по зарплате, а также формирует данные для а Данные о заработной Управляются базы данных. Обязательная часть плате приложения, содержит информацию о зарплате и удержан ных налогах Данные аудита Создаются базы данных, служат для за всем происходящим с о плате Определение опасностей, грозящих системе Следующий этап — отбор полученных в результате декомпозиции компонентов и использование их в процессе в качестве подвергающихся ности объектов. Анализ структуры приложения не для того, чтоб выяснить, как же все а чтоб получить сведения о приложения и по токах данных между ними. часто называют объектами под угрозой target). Прежде чем заняться выявлением грозящих как опасности делятся на Это пригодится позже, когда противостояния опасностям разных категорий придется применять стратегии, Классификация опасностей: методика STRIDE При анализе опасностей следует исследовать каждый компонент, а для этого :

ответить на следующие вопросы;

• может ли неавторизованный пользователь просматривать конфиденциальные данные, пересылаемые по сети;

• может ли посторонний пользователь изменить записи базы данных;

• может ли кто-то помешать работе правомочных пользователей с • может ли кто-то воспользоваться недоставками функции или компонента для получения полномочий При ответе очень помогает классификация опасностей по категориям. Мы ем применять классификацию, называемую STRIDE — по буквам названий категорий.

• Подмена сетевых объектов (Spoofing identity) Атаки типа зволяют взломщику выдавать себя за другого пользователя или подменять настоящий сервер подложным. Пример подмены личности пользователя — использование ворованных данных (имени пользователя и пароля) для атаки на систему. Типичный пример бреши «из ни» — ненадежных методов аутентификации, например некото рых видов базовой (Basic и аутентифи кации на основе хеша (Digest authentication). Они описаны в RFC 2617.

перехватив пакет и узнав имя и пароль пользователя — йк пользователь Флетчер (Fletcher) сможет получить доступ к 4- 72 Часть I Безопасность приложений сегодня данным, себя за — достаточно пройти стандарт ную процедуру аутентификации и указать имя и пароль Блейка.

Подменой серверов считаются подлог (DNS spoofing) к моди фикация записей кэша DNS (DNS cache poisoning). Конкретный пример: брешь в утилите обновления ПО на компьютерах Apple. Если вы не знакомы с прин ципами на почитайте статью на Web-странице news.com.com/ в ней неплохо описаны оба типа атак на DNS-серверы.

Модификация данных (Tampering with data) Атаки этого типа предусмат ривают злонамеренную порчу данных. Примеры: несанкционированные изме нения постоянных данных (например хранящихся в базе а также информации, пересылаемой между компьютерами через открытую сеть (на пример, Интернет). Реальный пример подобной атаки — изменение данных в файле, защищенном недостаточно надежным списком ACL Every one: разрешение Full Control Полный Отказ от авторства (Repudiation) Контрагент отказывается от совершенного им действия (или пользуясь тем, что у другой стороны нет ни какого способа доказать обратное. в системе, где не ведется пользователь может выполнить запрещенную операцию и отказаться от ее а администратору не удастся ничего доказать.

отрицания авторства (nonrepudiation) — это способность системы противо стоять такой опасности. Купив товар через Интернет, пользователь должен расписаться в его получении. Продавец впоследствии сможет использовать подписанную квитанцию как доказательство того, что пользователь действи тельно получил товар. Понятно, что поддержка невозможности отрицания авторства жизненно важна для приложений электронной коммерции, Разглашение информации (Information disclosure) Подразумевается рас крытие информации лицам, доступ к которой им запрещен, например, про пользователем файла, доступ к которому ему не предоставлялся, а так же способность злоумышленника считывать данные при передаче между ком пьютерами. Пример, иллюстрирующий подмены объектов, одновре менно демонстрирует опасность разглашения информации: прежде чем вос пользоваться реквизитам Блейка, Флетчеру придется их перехватить.

Отказ в обслуживании (Denial of service) В атаках такого типа взломщик пытается лишить доступа к сервису правомочных пользователей, например сделав Web-сервер временно недоступным или непригодным для работы. Не обходимо защищаться от определенных видов DoS-атак — это повысит ность и надежность системы. В качестве примера можно привести такие ата ки типа «распределенный отказ в (distributed denial of service.

DDoS), как Trinoo и Подробно о них на Web-странице Примечание DoS-атаки предотвратить, так как они относительно просты в реализации, причем атакующий остается неизвестным. Воз можна следующая ситуация: полноправному пользователю (Cheryl) не удастся разместить свой заказ на Web-сайте, если взлом щик Линн (Lynn) организует массированную атаку на этот сайт, ко ГЛАВА 4 Моделирование опасностей торая «под загрузит процессор системы. Для Web сервер станет недоступным, и для заказа нужного товара ей придет ся обратиться в другое место — возможно, к вашему конкуренту.

Повышение привилегий (Elevation of privilege) В данном случае вилегированный пользователь получает привилегированный позволя ющий ему «взломать» или даже уничтожить систему. К привиле гий относятся и случаи, когда злоумышленник удачно проникает через средства системы и становится частью защищенной и доверенной под системы. И это действительно опасно. Приведу пример: в уязвимой ничто не запретит злоумышленнику поместить на диск который выпол няется автоматически при входе пользователя в и дождаться в систему полномочного пользователя. Если это администратор, зловредный код выполняться от его имени, Примечание При анализе уязвимых мест важно учитывать как их причи ны, так и последствия. STRIDE — неплохая классификация брешей по последствиям. Классификация по также исключительно полезна. Она со временем превратится в длинный список того, чего не следует делать при программировании и проектировании. Это чрезвычайно особенно начинающим программистам.

Примечание классификаций STRIDE и DREAD (о последней чуть позже) придуманы, обоснованы и активно пропагандируются в Microsoft такими как Лоэн (Lohen Прерит Гарг (Praerit Гармс (Jason Garms) и ваш покорный слуга Майкл Ховард.

Как вы могли заметить, некоторые типы взаимосвязаны. Если рек визиты пользователей недостаточно надежно то нередко разглашение информации влечет за собой подмену объектов. И, конечно же, повышение при вилегий приводит к значительно худшим последствиям: если кто-то получит номочия администратора или учетной записи root на атакуемом компьютере, угрозы остальных категорий становятся реальностью. И рот, иногда подмены объектов достаточно для достижения цели, и н не нужно даже повышать привилегии. Так, злоумыш ленник сможет замечательно повеселиться, разослав электронное письмо от имени генерального директора с объявлением лишнего выходного дня отлично вы полненную работу. Для успешной атаки такого рода привилегии директора не нужны — хватит и обычных методов социальной инженерии!

А теперь о том. как определять опасности, грозящие системе. Мы построим ак называемые деревья опасностей (threat trees) и применим к ним STRIDE.

Примечание Есть еще одна замечательная методика анализа опасностей, она создана в университете и называется OCTAVE (Operatio nally Critical Threat, Asset, and Vulnerability Evaluation) 74 Часть I Безопасность приложений сегодня Дерево опасностей Для определения возможных видов неисправностей аппаратуры широко исполь зуются неисправностей trees). Оказывается, этот метод годится и для выявления проблем с безопасностью компьютерных систем. Как-никак ошибка в безопасности — только ошибка (или неисправность), способная привести к успеш ной атаке. Применительно к ПО данный метод часто называют опасно стей. Лучше всего о них рассказано в книге Эдварда Аморосо (Edward «Fundamentals of Computer Security Technology* (Основы технологий обеспечения безопасности компьютеров) — см. список.

Опасности, уязвимые места, ценные ресурсы, объекты под угрозой, атаки и мотивы Опасностью, системе, называют вероятность успешной атаки с последствиями для системы. Брешь — это место в системе, например ошибка Б программе или недостаток проекта.

выполняется, когда у злоумышленника есть мотив (причина для атаки) и возможность воспользоваться брешью для получения доступа к ценному (asset). Ценный ресурс в терминах безопаснос ти также называют объектом под угрозой (threat можно анализировать в опасностей (реализуемых взлом щиками в атак), брешей и ценных ресурсов по ана с пожаром. Для поддержания огня нужны три составляющие: высо кая температура, горючие материалы и кислород. Уберите что-то одно — и пламя потухнет. Как пожарники ликвидируют огонь на нефтяных нах? Они не в силах устранить высокую температуру или горючий матери ал — проблема именно Поэтому они перекрывают огню кислород, взрывая нефтяную вышку. Взрыв весь кислород в обла сти вышки, и пламя сникает.

Такова же ситуация и в области безопасности. убрать ценные ре сурсы, у хакера исчезнет атаковать. Если устранить бреши, злоумыш ленник не сможет воспользоваться ими для доступа к ресурсам. Ну наконец, если убрать хакера, причины вообще не будет, Од нако компаниям приходится хранить ценные, требующие защиты содержат изъяны, а опасности на К тому же у некоторых и мотива-то серьезного а лишь огромное желание на пакостить другим. Хотя ваши активы таких людей совершенно не суют, они равно будут атаковать.

Единственный выход, если идет о — общего риска до приемлемого уровня. Именно в этом заключается конечная цель анали за опасностей, Схема на основе деревьев такова: приложения могут стать целью атак, выясняем возможное слабое место каждого элемента — именно через них при определенных условиях удастся взломать систему. Дерево опасностей описывает процесс злоумышленником при ГЛАВА 4 Моделирование опасностей ме компонентов системы. Получив в результате декомпозиции приложения сок компонентов, необходимо определить опасности, грозящие каждому из них.

Далее с помощью деревьев опасностей следует установить, как проявляет себя конкретная опасность.

Познакомимся с несколькими простыми примерами деревьев опасностей — гак вы лучше поймете их пользу. Вернемся к DFD-диаграмме приложения. Как вы помните, данные о зарплате передаются с Web-сервера на компьютер (точнее, это делает служба обработки клиентских запросов) (рис. 4-7).

Запрос данных о зарплате 5. Служба обработки клиентских с зарплате Рис. 4-7. ровня 1, демонстрирующая взаимодействие с Web-сервером посредством службы обработки клиентских 'ов о зарплате, которые пересылаются от пользователя (служащего) в данных и обратно, конфиденциальны — о них должны знать только компании и сам служащий — вы ведь не хотите, чтобы имел к информации о зарплате других. То есть решение должно оберегать от глаз. Это еще один пример разглашения информации.

Существует много способов получения доступа к чужим данным: самый простой из них, конечно же, — использование сетевого анализатора (sniffer) в сквозном режиме, режиме приема всех пакетов (promiscuous для просмотра данных, которыми обмениваются «ничего не пользовательский компьютер-мишень и Web-сервер*. Другой вид атаки — взлом расположенного между двумя компьютерами, и перехват трафика, На рис. 4-8 показано дерево опасностей, где вкратце описаны способы, ко го может злоумышленник для просмотра о зарплате другого пользователя.

Следует заметить, что перехват пакетов «в лоб» возможен только в мых сетевых сегментах. В сетях с маршрутизаторами или маршрутизирующими кон центраторами применяют другие методы, в том числе подмену сетевых объектов, ) частичном случае которой рассказано далее. — Прим.

Часть I Безопасность приложений сегодня Что такое «сквозной режим» В каждой сетевом сегменте все кадры попадают каждый компьютер это го сегмента. Однако сетевой адаптер кадры, передавая сетевому ПО те еще называют пакетами), что адресованы данному ком пьютеру- О сетевом адаптере, и в сетевое ПО абсолютно все что он работает в режиме cuous mode). При использовании адаптера, такой режим, сетевой анализатор все полученные кадры для анализа.

№ о зарплате при по (I) 1. не щен просматривает 1.2.2 1.2. Прослушивание Взлом трафика с помощью трафика, сетевого через 1.2.2. 1.2,2.2 1.2.2.3 1.2.3. Маршрутизатор Взлом атаки не маршрутизатора доступа на коммутаторы к маршрутизатору 4-8. Дерево для процедуры просмотра данных о зарплате на пути от сервера до клиентского компьютера В верхнем прямоугольнике описана основная опасность, а ниже перечислены действия, превращающие ее в реальность. В данном случае опасность представ ляет собой риск раскрытия информации [обозначена как то есть просмотр злоумышленником информации о зарплате другого пользователя. Заметьте: опас ность относится непосредственно к объекту, выделенному в процессе декомпо зиции, В данном примере это ответ на запрос пользователем (1.0) данных о зар плате у процесса обработки клиентских запросов (5.0), ГЛАВА 4 Моделирование опасностей Внимание! Опасность нужно связывать непосредственно с определенным процессе декомпозиции объектом.

Обратите внимание: чтобы опасность удалось легко реализовать, HTTP-трафик должен быть не защищен (1.1). а злоумышленник должен активно то есть прослушивать сеть (1.2.1) или перехватывать проходящие через маршрутизатор (1.2.2) или коммутатор (1.2.3). Так как данные не защище ны (что нормально для HTTP-трафика), нарушитель получает к ним доступ в с чаях 1.2.1 и 1.2.2. Однако мы не хотим, чтобы все без исключения конфиденциальные данные нашего приложения. для реализации сценария прослушивания трафика на маршрутизаторе требуется одно из двух: взломщик либо должен иметь возможность воспользовался брешью защиты шени (выполнение условий 1.2.2.1 и 1.2.2.2), либо ему необходимо подобрать ад министративный пароль для доступа к маршрутизатору (1.2.2.3). Взаимосвязь событий в первом сценарии показана маленькой дутой между двумя узлами (вер шинами). Можно также просто поместить слово между соединяющими их линиями, как на рисунке.

Хотя деревья хороши для описания общей при построе нии больших моделей опасностей они становятся слишком громоздкими. Суще ствует более компактный способ представления деревьев — в виде многоуровне вого списка. Следующий конспект представляет дерево опасностей, показанное на рис. 4-8.

1.0 Перехват конфиденциальных данных о при передаче по связи 1.1 HTTP-трафик не защищен (И) просматривает данные 1.2.1 Прослушивание сетевого с помощью сетевого анализатора трафика, проходящего через 1.2.2.1 не (И) 1.2.2.2 Взлом 1.2.2.3 Подбор пароля доступа к 1.2.3 Взлом коммутатора 1.2.3.1 атаки на коммутаторы Как улучшить дерево опасности, чтоб повысить его читабельность Для выделения наиболее вероятных направлений атак в деревья опасностей можно вносить небольшие изменения. для отображения менее вероятных мест атаки используйте пунктирные линии, а для более вероятных — под узлами маловероятных событий поместите объяснение, почему ность невелика, выделив его кружочком (рис. 4-9).

Учтите, что в процессе моделирования не следует описывать способы вращения опасностей. Так вы потеряете Устранение опасностей стоит отложить до лучших времен, когда проект программы начнет обретать Полезно в деревьях опасностей использовать линии наибольшего противостояния они становятся механизмом отсечения маловажных ответвлений. На рис. видно, что опасность 3.2 маловероятна, так как pea одной из его частей и 3.2.2 вряд ли возможна. Чтобы опасность Часть I Безопасность приложений реальной, условия по обеим сторонам оператора логического умножения (И) должны Таким образом вы выявите реальные проблемы.

Получение о пароле 1.1 1.2 1. хранилища Применение подключения, по которому пользовательских дая чтения пароли на пользователя 1.3, физический к позволяющий на серверу считывать пароль физический Коррекция дерева опасностей, улучшающая его Особенности моделирования опасностей Необходимо учитывать не только и тип выявленной но и другие ее свойства (табл. 4-2).

Таблица 4-2. Свойства, которые необходимо фиксировать при моделировании опасностей Свойство Примечание Название Должно быть достаточно но не слишком длинным. Опасность должна быть легко понятна из ния — например. «Нарушитель получил доступ к корзине покупателя* Объект под угрозой Часть атаке. Так. объектами под угрозой в приложении расчета зарплаты являются поток данных запроса о зарплате (1.0-5.0) и процесс применения административной политики (14.0) Тип или типы Тип в рамках модели STRIDE. Часто опасность подпадает под несколько категорий Риск Используйте свой любимый метод но будьте и не меняйте метод в процессе анализа ГЛАВА 4 Моделирование опасностей Таблица 4-2. (окончание) Свойство Примечание Дерево атаки Как злоумышленник обнаружит место взлома. Не те чтобы не запутаться Методы уменьшения Методы устранения ослабления опасности. Если он уже применяется, пометьте это. в противном случае (при необходимости) к следующей опасности. Помните, что во время ния опасностей не нужно искать решений проблем.

отметить степень сложности устранения опасности. Это по может при приоритетов. О некоторых я расскажу далее в этой Статус Уровень устранения опасности. Допустимые значения:

устранения опасности «Нет», "Требует дополнительного изучения» Номер ошибки Если поддерживаете базу данных обнаруженных ж, (при необходимости) не забывайте нумеровать их. Учтите, что данных или инструмент моделирования опасностей не заменит БД с об наруженными ошибками. Нет ничего хуже, чем иметь два набора документации о программных один из торых не потерял В процессе опасностей фиксируйте только информацию об опасности и параллельно ведите БД программных ошибок Внимание! При моделировании опасностей описывайте все интерфейсы си стемы, независимо от того, задокументированы ли они, Распределение опасностей по мере убывания их серьезности Создав деревья опасностей и собрав информацию об опасностях, следует лить наиболее важные, то есть тс. которые нужно решить в первую очередь. Ме тод оценки риска не слишком важен, если вы будете трезво и последовательно оценивать ситуацию, Простой способ оценки риска (в этом назовем его — важность (величина ущерба) уязвимого места на вероятность того, что им воспользуются. Критичность и по шкале от 1 до 10:

= * Чем больше полученное число, тем больше угроза системе. Так, максимально возможная оценка риска равна 100 — произведению максимальной важности (10) и вероятности возникновения (10).

DREAD — методика оценки риска Есть еще один способ оценки риска, он появился на свет в процессе в Microsoft, — DREAD (в вычислениях я буду использовать сокращение — по первым буквам английских названий описанных далее категорий, • Потенциальный ущерб (Damage potential) — мера реального ущерба от успешной атаки. Наивысшая степень (10) опасности означает беспрепятственный взлом средств защиты и выполнение практически любых 80 Часть Безопасность сегодня операций. Повышению привилегий обычно присваивают оценку 10. В других ситуациях оценка зависит от ценности защищаемых данных. Для медицинс ких, финансовых и военных данных она обычно высока.

• Воспроизводимость — мера возможности реализации опасности. Некоторые бреши доступны постоянно (оценка — 10), другие — только в зависимости от ситуации, и их доступность то есть нельзя наверняка знать, насколько успешной окажется атака. Бреши в устанав ливаемых по умолчанию функциях характеризуются высокой воспроизводи мостью. Такой показатель — радость для хакеров.

• Подверженность взлому (Exploitability) — мера усилий и необходимых для атаки. Так, если се может реализовать неопытный програм мист на домашнем компьютере, ставим большую жирную десятку (10). Если же для ее проведения надо потратить 000 000 долларов, оценка опасности — 1. И еще: атака, для которой можно написать алгоритм [а значит, распростра нить в виде сценария среди вандалов-любителей (script также оце нивается в 10 баллов. Следует также учитывать необходимый для атаки уро вень аутентификации и авторизации в системе. Например, если это доступно любому удаленному анонимному пользователю, подобная опасность оценива ется баллами. А вот атака, доступная только доверенному локальному пользо менее опасна, • Круг пользователей, попадающих под удар (Affected users) — доля пользо вателей, работа которых из-за успешной атаки. Оценка выполня ется на основе процентной доли: пользователей соответствует оценка 10, а — 1 балл. Иногда становится реальной только в системе, сконфигурированной особым образом. Опять же, оценивайте влияние ности максимально удобным способом. Чрезвычайно важно проводить границу между сервером и клиентским компьютером: от ущерба, нанесенного серверу, пострадает больше клиентов и, возможно, другие сети. В этом случае балл зна чительно выше, чем оценка атаки только на клиентские компьютеры. Также не следует забывать о размерах рынка и а не только процентном, количестве пользователей. Один процент от 100 млн. пользователей — это все равно много.

• Вероятность обнаружения (Discoverability) — самая сложная для опреде ления оценка. Откровенно говоря, я полагаю, что любая опасность поддается реализации, выставляю всем по 10 баллов, а при ранжировании опас ностей учитываю другие показатели.

Суммарная DREAD-оценка равна арифметическому среднему всех оценок (то есть надо их просуммировать и поделить на 5). После вычисления риска всех опас ностей отсортируйте их в порядке убывания оценки, начиная с наибольшей. На так:

Опасность №1: конфиденциальных данных о зарплате при их пере даче через сеть 8 Потенциальный ущерб: просмотр личных данных о зарплате других — это серьезно 10 Воспроизводимость: воспроизводима на ГЛАВА 4 Моделирование опасностей Подверженность взлому: злоумышленник должен находиться в одной с сервером или клиентом подсети или взломать маршрутизатор Пользователи под ударом: все, в том числе и генеральный директор 10 Возможность обнаружения: просто предположим, что атака ется моментально + 9 баллов из возможных 10 — это очень серьезная проблема, и устранять ее необходимо немедленно, а приложение нельзя устанавливать, пока опасность не снижена.

Внимание! В некоторых где мне приходилось работать, учитывали также затраты денег и ресурсов на устранение последствий успешной атаки. Помните: пользователей не интересует, во что обойдется исправ они просто не хотят подвергаться атакам! Не забывайте об этом!

Еще один, более гибкий, способ — инвентаризация различных параметров опасностей, грозящих системе и анализ их в плане внедрения. Он очень похож на способ, разработанный Кристофером Клаусом (Christopher Klaus) — осно вателем компании Internet Security Systems, для оценки уязвимых мест, ных при применении продуктов этой компании. Вот некоторые вопросы, на ко торые следует ответить при рассмотрении опасностей:

• как реализуется атака: при локальном или удаленном доступе? Может ли умышленник атаковать, не имея локального доступа? Очевидно, что н атаки опаснее • каковы последствия реализации опасности? Если это повышение то до какой степени? Существует ли проблема разглашения информации? Влечет ли разглашение информации захват привилегий;

• нужны ли какие-либо дополнительные действия для успеха атаки? Так, успешная всегда и на любом сервере, опаснее той, для которой обязательно наличие административных полномочий.

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

Объединяем все вместе: декомпозицию, дерево опасностей, методы STRIDE и DREAD Итак, как применять всю эту Сначала путем функциональной декомпо зиции определяем объекты под угрозой, затем по методике STRIDE выявляем опас ности, грозящие каждому далее с помощью дерева опасностей опре деляем, каким образом опасность превратится в уязвимое место и, наконец, жируем, например, по методике DREAD.

Применять STRIDE к дереву опасностей довольно просто. Для этого для каж дого компонента системы надо продумать ответы на следующие вопросы:

• поддается ли компонент подмене;

• возможно ли модифицировать компонент;

• удастся ли злоумышленнику уйти ненаказанным, если он откажется от своих действий;

• возможен ли просмотр 82 Часть I Безопасность приложений сегодня удастся ли взломщику блокировать доступ к процессу или потоку данных;

может ли злоумышленник повысить свои полномочия, успешно атаковав процесс?

Анализ путей в дереве опасностей, или как из капель неприятностей рождается море проблем Часто множество незначительных брешей в совокупности создают одну огромную дыру в при работе со системой нуж но проверить все возможные пути к той или иной точке на В технике систему, дающую разные результаты при одном и том же на боре входных параметров, нелинейной. Поведение таких систем обычно от пройденного пути: получаемый определяется тем, начато движение. Похожие проблемы часто возникают в слож ных системах и при их взаимодействии, Во время кампании Windows Security Push я с ющей за сложные системы, и мы частенько не сходились в оценке серьез ности опасностей. Подчас что причина разно в различных предположениях относительно того, какими достигается конкретная точка на диаграмме. Степень серьезности пробле зависела от пути и, что особенно важно, от того, встречались ли на этом пути другие уязвимые места. Подумайте, может ли изменить путь передачи данных, запустив их по нестандартному или непредусмот ренному пути. Вот вам пример из обычной, некомпьютерной, жизни. До пустим, мне «кровь из надо быть на утреннем совещании без опозда ну а если опоздать, то не более, на полчаса. Расчленим процесс на этапы, чтобы выяснить, на каком возможен сбой какие сбои могут житься на друга.

• Будильник прозвенел? Если нет, то не проспал ли я больше, чем на минут?

• Благополучно ли я преодолел душ? Мог ведь поскользнуться и упасть. Если да, то я поранился или только расстроился?

• Автомобиль завелся? Если нет, то как я быстро поставлю его колеса* или придется ехать на другом?

• на дороге? Если да, то насколько • с ГАИ? Если да, то как надолго?

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

ГЛАВА 4 Моделирование опасностей Вы наверняка заметите, что элементы подвергают ся опасностям вполне определенного типа (табл.

Таблица 4-3. Связь элементов DFD-диаграмм и категорий опасностей в модели STRIDE Затрагивает ли Затрагивает ли Затрагивает ли Тип Затрагивает ли хранилища внешние потоки опасности процессы? данных? субъекты? данных?

3 Да Да Да ( • Ца Да Да Да Да Да Да Некоторые элементы этой таблицы следует пояснить.

• Опасность подмены объектов обычно подразумевает подмену пользователя (получение доступа к реквизитам, что одновременно является информации), процесса (замена процесса подложным, а это также модификации данных) или сервера, • Изменение процесса означает соответствующего исполняемого или модификацию памяти процесса.

• Под опасностью информации в отношении процесса вается анализ (reverse engineering) для раскрытия принципов работы или извлечения секретной информации.

• Ко внешнему субъекту понятие опасности разглашения инф' >р мации — разглашаться могут только данные о самом субъекте. Если вы с опасностью разглашения о пользователе, то вероятнее всего утечка в хранилище данных или процессе доступа к данным, • Невозможно ограничить доступ к внешнему субъекту — скорее все го ограничивает доступ к хранилищу данных, потоку или процессу, от которых зависит субъект.

• Опасность отказа от авторства заключается в том, что злонамеренный ватель признается в содеянном. Такие атаки заключаются в действиях щика, нарушающих нормальный поток данных аудита и аутентификации в или в хранилищах данных, • Повысить полномочия можно, лишь воспользовавшись процессом, ав или использующим повышенные привилегии. Знание >р ского пароля само по себе не дает никаких дополнительных привилегий. Но упускайте из виду тот факт, что некоторые атаки выполняются в нескол этапов, поэтому получение доступа к паролю администратора означает захват полномочий при условии, что злоумышленник сможет воспользоваться этим паролем.

В следующих таблицах (табл. 4-4 — 4-9) перечислены опасности, грозящие приложению расчета зарплаты. На рис. 4-8 и рис. 4-10 — 4-14 (они следуют пос Часть I приложений сегодня ле таблиц) иллюстрируются деревья опасностей для случаев, описанных в табл. 4-4 — 4-9.

Таблица 4-4. Опасность № Просмотр конфиденциальных данных о зарплате Описание опасности при их передаче через сеть Объект под Ответ на о заработной плате (5.0 1.0) Категория опасности Разглашение информации Риск Потенциальный ущерб: Подверженность взлому: Пользователи под ударом: Вероятность Общая оценка: Примечания Вероятнее всего атака исходит от женного сетевым Реализовать такую атаку просто, так как при этом не нужно себя обнаруживать, а усилий и денег требуется очень мало.

Важно отметить опасность, коммутируемым се так как многие полагают, что они защищены от прослу шивания трафика, но на самом деле это не так. Если не ве почитайте статью «Why your switched secure* (Почему коммутируемые сети небезопасны) на сайте Таблица 4-5. Опасность № Описание опасности Загрузка хакером подложных Web-страниц и кода на сервер Объект под угрозой (7,0) и код Web-сервиса (8.0) Категория опасности данных Риск Потенциальный ущерб: Воспроизводимость: взлому: Пользователи под ударом: Вероятность обнаружения: Общая оценка: 8, Примечания В утилите установки ПО всегда предусматриваются надеж ные механизмы аутентификации и авторизации. Так что единственной причиной загрузки Web-страниц могут стать просчеты администраторов при (Под куп персонала считаем маловероятным) Таблица 4-6. Опасность № Описание опасности Блокирование взломщиком доступа к приложению Объект под угрозой Процесс обработки клиентских запросов Категория опасности в обслуживании Риск Потенциальный ущерб: ГЛАВА 4 Моделирование опасностей Таблица 4-6. (окончание) Описание опасности Блокирование взломщиком доступа к приложению Подверженность взлому: Пользователи под ударом: Вероятность обнаружения: Общая оценка: 7. Примечания Другие приложения также уязвимы для Web-сервер обработки клиентских запросов находится на «передовой», и поэтому его легче атаковать. Защитив часть мы уменьшим до приемлемого уровня риск нападения на другие процессы.

Составляющая опасности 3.3: схожа с пробле мой соединения (Cartesian join). Результат тако соединения в запросе к БД — набор всех возможных наций всех таблиц, указанных в SQL-запросе. Так, если не указать ограничивающих условий, то при выполнении де картова соединения трех таблиц, одна из которых записей, вторая — 113 000, а третья — 75 100, получит результат из 5 1б5 095 000 000 писей.

Составляющая опасности 3.4: Исчерпание свободного пространства представляет реальную опасность.

Если для приложения, управляющего процессом к данным не окажется свободного места на диске, оно не запустится, так как в процессе работы оно создает файлов. Так как все запросы регистрируются в файлах журналов, злоумышленник, направив миллионы запросов (возможно, в рамках распределенной добьется переполнения диска и аварийного завершения приложения Таблица 4-7. Опасность № Описание опасности Модификация взломщиком данных о заработной плате Объект под угрозой Данные о заработной плате Модификация данных и возможность разглашения инфор Категория опасности мации Риск Потенциальный ущерб:

Воспроизводимость: Подверженность взлому: Пользователи под ударом: Вероятность обнаружения: Общая оценка: Примечания Опасность 43 заключается в возможности доступа к ненным данным о зарплате при пересылке сеть от ад министративной консоли (2.0) к •. ной политики, а затем к хранилищу с данными по зарлла ге (12.0). Как видно на DFD-диаграмме (рис.

два перехода через границы машин 86 Часть I Безопасность приложений сегодня Таблица 4-8. Опасность № Повышение взломщиком собственных привилегий за счет Описание изъянов в процессе обработки клиентских запросов Объект под угрозой Сервис обработки клиентских запросов (5.0) Категория опасности Повышение привилегий Риск ущерб: Пользователи под Вероятность обнаружения: Общая оценка: Примечания Рассматриваемый объект под угрозой выполняется в про цессе Web-сервера, а код — в контексте локальной системы.

Это что любой недружественный код, выполняе мый в контексте Web-сервера, обладает на компьютере при вилегиями Local System. Воспроизводимость и затраты на организацию потому что единственно способ взлома — уязвимых мест в защите про цесса от атаки немного, так как по ражается только сервер. об этом можно говорить с натяжкой, так от взлома сервера страдают практичес ки все пользователи Таблица 4-9. Опасность № Подмена компьютера, на котором выполняется Описание процесс обработки клиентских запросов Объект под угрозой Сервис обработки клиентских запросов (5.0) Категория опасности Подмена сетевого объекта Риск ущерб: Воспроизводимость: Подверженность взлому: Пользователи под ударом: Вероятность обнаружения: Общая оценка: 6, Примечания Есть несколько способов вывести «законный» компьютер из сети: аннулировать его как сетевой объект (переиме или питания) или сделать его недо ступным [атаки на или (flood) пакетами] ГЛАВА 4 Моделирование опасностей 1 Опасность Загрузка Web-страниц Web-разработчика или администратора, имеющих доступ к проблема намного серьезнее!

Рис. 4-10. Дерево опасностей для опасности № № Блокирование к 3. на даем запросов журнальных файлов 3.2.1 3.2. Физический в комнату с компьютером в помещение в обход охранника В этом случае проблема намного] серьезнее!

Рис. 4-11. Дерево для опасности № Часть I Безопасность приложений сегодня Опасность № о заработной 4. администратора, данных чтобы тот из данные этом намного Рис. 4-12. Дерево опасностей для опасности № Опасность Na Повышение за счет 5. администратора, 5.2, загрузить код на Web-сервер Рис. Дерево опасностей для опасности № ГЛАВА 4 Моделирование опасностей Опасность № Подмена или Web-серверов 6. 6. Создание Вывод строя с имени 6.2.3 6,2. Переполнение Переименование сервера - 6.2.3.1 6.2.3.2 6.2,4. доступа Физический к к доступ питания к компьютеру доступ в Рис. 4-14. Дерево опасностей для Подсчет суммарного риска Как оценить общий риск для системы при условии, что какая-либо второстепен ная опасность реализована в виде атаки? При расчете общей оценки по ной вами методике рассматривайте наиболее вероятный путь атаки (иначе гов' > ря, путь наименьшего сопротивления). Взгляните на рис. 4-10. Видно, что ность 2.3 маловероятна и. характеризуется низким риском, так пользователи осознают свою ответственность — на них можно полагаться и они ознакомлены с вопросами безопасности при приеме на работу. А какова ность того, что система окажется уязвимой из-за ошибок администрирования?

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

Так что наиболее вероятной возможностью остается опасность так называе мой «атаки нулевого (zero-day attack) на сервер, то есть в те периоды, когда уязвимое место в продукте уже обнаружено, но компания-разработчик еще не ус пела выпустить а хакеры уже оперативно соорудили exploit, 90 Часть I Безопасность приложений сегодня опасности является результатом прохождения дерева именно по пути наименьшего сопротивления.

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

Повторение моделирования опасности Напомню вам все этапы процесса моделирования опасностей еще раз, чтобы вы убедились, что полностью усвоили материал.

• Этап 1. Выполните декомпозицию приложения на объекты под угрозой по одному из методов анализа, например с помощью DFD-диаграмм. В аграммах объектами под угрозой считаются все источники процес потоки внешние субъекты и действующие лица.

• Этап 2. По методике STRIDE определите опасности, возможные для каждого объекта под угрозой. Они становятся вершинами деревьев для каж дого объекта под угрозой строится одно дерево.

• Этап 3. В зависимости от ситуации постройте одно или более опас ностей для каждого объекта под угрозой, • Этап 4. Оцените риск безопасности для каждого дерева опасностей по мето дике DREAD или аналогичному методу ранжирования опасностей, • Этап 5. Отсортируйте опасности в порядке убывания риска.

Закончив с этим, переходят к следующему этапу — определению реа гирования на опасности.

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

• ничего не предпринимать:

• предупредить пользователей:

• устранить причину опасности вместе с частью приложения;

• устранить причины, из-за которых система подвергается опасности.

Вариант ничего не предпринимать Первый вариант — оставить все как есть — редко оказывается удачным, потому что проблема в приложении остается и существует вероятность ее так что вам все равно рано или поздно придется устранять брешь. Такой подход пагубен для бизнеса и неприемлем для клиентов, ведь вы подвергаете их сти. Если вы все-таки решили ничего не предпринимать, то по крайней мере по заботьтесь об отключении опасной функции в конфигурации по Но мой вам совет: попытайтесь все же выбрать один из следующих вариантов, ГЛАВА 4 Моделирование опасностей Вариант 2: предупредить пользователей Вторая возможность — оповестить пользователей о проблеме и предоставить км самим применять ли небезопасную функцию. В Microsoft Internet Infor mation Services (IIS) некоторые проблемы решены именно так: когда админист ратор выбирает базовую аутентификацию (basic authentication), появляется алоговое окно с предупреждением, что пароли пользователей будут ся в незашифрованном виде, если только их не защитить другим на пример средствами протокола SSL/TLS.

Как и вариант 1, этот тоже далек от идеала: большинству пользователей часто не хватает квалификации, чтобы сделать правильный выбор, кроме того, текст предупреждений подчас очень ясен и изобилует массой технических терми нов. «правильных» диалогов и понятной документации мы обсудим в главе 24.) администратор может получить доступ к в обход диалогового а не увидит предупреждение. Например, в ном примере он может сценарии, тогда никакие на экране не появятся.

Помните: пользователи привыкают игнорировать предупреждения, если те возникают слишком и обычно у них хватает знаний для принятия пра вильного решения. Данный годится, только когда масштабное > работы с ПО показало, что обычным и пользователям буется именно небезопасный вариант функции, Если вы решили предупредить пользователя об опасной функции в тации, что они очень редко обращаются к бумажным руководствам явной на то необходимости! Никогда не ограничивайтесь размещением реждений только в документации. Сделайте так, чтобы все предостережения та кого рода регистрировались и подлежали аудиту.

Вариант 3: устранить проблемную функцию Разработчики часто жалуются на отсутствие времени на с безопасностью и сетуют, что по этой причине им придется поставлять продую с изъяном в защите. Подобное решение абсолютно неверно. Существует один, ко метод: убрать небезопасную функцию из продукта. Если у времени на исправление ошибки, а довольно серьезна, сто ит удалить рискованную часть продукта. потребителя продукции подсластит вам эту горькую пилюлю: поставьте себя на место вателя программы, которую только что взломали. Кроме того, вы все сможете исправить в следующей версии!

Вариант 4: решить проблему Этот подход наиболее очевиден: раз и навсегда решить проблему. Но он и са мый так как требует выполнения большого объема работ щиками, разработчиками, и иногда — техническими ми. Сейчас я расскажу, как технологии применяются для предотвращения опас ностей.

Часть I Безопасность приложений сегодня Отбор методов предотвращения опасности Итак, наступило решать, как предотвратить или снизить критичность зящих системе опасностей. Этот процесс состоит из двух стадий. На первой оп ределяют подходящие методы, на второй — технологии.

Не путайте методы с технологиями. Методы когда уже четко ясно.

технологии какого типа годятся для предотвращения опасности. Так, аутентифи кация — это метод обеспечения безопасности, а вот протокол — конк технология аутентификации. В табл. перечислены методы, применя емые для борьбы с опасностями, описанными в модели STRIDE.

Таблица Основные методы (основанные на технологиях безопасности) борьбы с опасностями Тип Средства борьбы Подмена сетевых Надежный механизм аутентификации Защита секретных данных Отказ от хранения секретов Модификация Надежный механизм авторизации Использование хешей Цифровые подписи Протоколы, предотвращающие трафика Отказ от авторства Цифровые подписи Метки даты и времени Контрольные следы информации Авторизация Протоколы с усиленной защитой от несанкциони рованного доступа Шифрование Защита секретов Отказ от хранения секретов Отказ в Надежный механизм аутентификации Падежный механизм авторизации Фильтрация Управление числом входящих запросов Качество обслуживания Повышение уровня привилегий Выполнение с минимальными привилегиями Методы защиты В этом разделе я расскажу о методах защиты, перечисленных в табл. и о тех нологиях, имеющихся в распоряжении проектировщиков и разработчиков. От мечу, что технологии я опишу не слишком подробно, так как этому предмету по ГЛАВА 4 опасностей ' множество книг (названия некоторых из них вы найдете фическом списке).

Замечу также, что при проектировании системы прежде всею следует проанализировать существующие механизмы безопасности. Если они ( лучше их перепроектировать или вообще отказаться от них. Не стоит по такать разработчикам, сохраняя знакомые им, но слабые или ненадежные низмы. Конечно, некоторые из них присутствуют в системе исключительно для обратной но безопасность кода требует бескомпромиссных ре шений, и одно из них — отказаться от механизмов.

Аутентификация _ Аутентификация — это процесс, в котором один объект, или участник (principal), подлинность другого объекта, то есть ет, действительно ли он тот, за кого себя выдает. Участники безопасности — пользователи, исполняемый код или компьютер. Аутентификация требует зательств виде реквизитов (credentials), которые могут принимать формы, но самые пароли, закрытые ключи или даже пальцев (если используется биометрическая аутентификация), Windows поддерживает многие протоколы аутентификации. Некоторые из встроены в ОС, другие можно использовать как блоки для построения ной системы аутентификации. Вот некоторые из поддерживаемых Windows ме тодов аутентификации:

• базовая аутентификация;

• аутентификация на основе хеша;

• аутентификация на основе форм;

• аутентификация Microsoft Passport;

• стандартная аутентификация Windows;

• аутентификация по протоколу (NT LAN Manager):

• аутентификация по протоколу Kerberos • аутентификация на основе сертификатов Х.509;

• протокол (Internet Protocol Security):

• RADIUS.

Механизмы аутентификации различаются по надежности. Так, базовая тификация (Basic Authentication) слабее, аутентификации по протоколу Kerberos. Об этом необходимо помнить при определении методов щиты тех или иных конфиденциальных ресурсов. Кроме того, учитывайте, что одни методы предусматривают аутентификацию клиентов, а другие — серверов.

мер, при базовой проверяется подлинность только клиента, но не сервера. В табл. показано, подлинность каких объектов различные протоколы.

94 Часть I Безопасность приложений сегодня Таблица 4-11. Протоколы аутентификации клиентов и серверов Аутентификация Аутентификация Протокол клиента сервера аутентификация Да Нет Аутентификация на основе хеша Да Нет на основе форм Нет Microsoft Passport Да Нет Нет Сертификаты Х. Да (компьютер) Да (компьютер) RADIUS Нет Базовая аутентификация Базовая аутентификация — это простой протокол проверки подлинности, опре деленный как часть протокола HTTP 1.0 (см. RFC 2617 по адресу Несмотря на то, что практически все Web-серверы и Web-бра узеры поддерживают этот он исключительно небезопасен из-за полного отсутствия пароля. Имя и пароль всего лишь кодируются по методу Base64!

Короче говоря, базовую не стоит применять повсеместно: она не обеспечивает надежной защиты — исключение составляют случаи, когда со единение между клиентом и сервером защищается надежными напри мер протоколом или IPSec, Аутентификация на основе хеша Аутентификация на основе хешей, как и базовая, описана в RFC но у нее есть ряд преимуществ: наиболее что пароль не пересылается открытым тек стом. И еще, на основе хеша можно применять в отлич ных от HTTP, протоколах Интернета: в протоколе доступа к каталогам по чтовых протоколах ШАР (Internet Message Access Protocol), POP3 (Post Office Protocol 3) и SMTP (Simple Mail Transfer Аутентификация на основе форм Стандартной реализации этого вида аутентификации не существует, и на боль шинстве сайтов используют свои варианты. Впрочем, в Microsoft ASPNET есть версия реализации интерфейса на основе класса Аутентификация на основе форм работает следующим образом. Пользовате лю предлагается Web-страница, где должен ввести имя и и нажать кнопку отправки данных на сервер. Информация из Web-формы передается на Web-сер вер (обычно по который на ее основании принимает ре шение об К имя и пароль могут храниться в базе дан ных или, в случае ASP.NET, в конфигурационном XML-файле.

Вот пример ASP-кода, демонстрирующего чтение имени и пароля из формы и выполнение на их основе аутентификации:

ГЛАВА 4 Моделирование опасностей Dim As String = strPwd = If strPwd) Прекрасно! Даем пользователю добро на вход!

Отображаем этот факт, изменяя данные состояния Else Ой! Недопустимое имя пользователя пароль End If Аутентификация на основе форм чрезвычайно популярна в Интернете.

ко при неумелой реализации она может стать небезопасной.

Microsoft Passport Passport-аутентификация — это схема живаемая корпорацией Microsoft. Она применяется во многих сервисах (в том Microsoft Hotmail и Microsoft Instant Messenger) и на многочисленных сайтах элек тронной коммерции (в том Victoria's Costco Online, OfiiceMax.com, Office Depot и 800.com). Ее основное в том, что для входа в при переходе на другой Web-сервис, пользующий Passport, не нужно заново вводить реквизиты. Для добавления в поддержки Passport необходимо загрузить комплект Passport Software Development Kit (SDK) с сайта http://www.passport.com.

Поддержка технологии Passport в ASP.NET реализована в классе С ее помощью в Microsoft Windows Server можно войти в сис тему посредством функции Кроме того, Internet Information Services (IIS 6) также поддерживает Passport в качестве стандартного протокола фикации, наравне с другими методами аутентификации: базовой, на основе хе шей, Windows и на основе клиентских сертификатов Х.509.

Стандартная аутентификация Windows В поддерживается два протокола аутентификации: NTLM и Kerberos. На самом деле к ним можно причислить также но мы рим его позже. Аутентификация в Windows происходит интерфе: i сов (Security Support Provider Interface). Эти протоколы реализованы в (Security Support Provider). В Windows существует четыре основных SSP-провайдера: NTLM, Kerberos, и Negotiate. Первый служит для второй — для аутентификации Kerberos версии 5, a обеспечивает аутентификацию на основе клиентских сертификатов ) Negotiate отличается от остальных тем, что не поддерживает никаких > токолов а применяется в этой ОС, начиная с Windows 2000, я выбора метода аутентификации клиента и сервера — NTLM или Kerberos.

связанные с SSPI, прекрасно изложены в книге Джеффри Рихтера (Jeffrey Richter) и Кларка (Jason Clark) «Programming Server-Side cations for Microsoft Windows (Microsoft Press, 2000) (Рихтер Кларк Д.

96 Часть I Безопасность приложений сегодня серверных приложений для Microsoft Windows 2000. Мастер класс. Русская 2001).

Протокол поддерживают все современные Windows, в том числе Windows СЕ. NTLM работает по механизму «запрос — ответ» и во многих Windows-службах, в том числе в службе доступа к файлам и печати, IIS, SQL Server и Microsoft Exchange. Существует две версии NTLM. Версия 2, появившаяся в Windows NT SP 4, имеет одно значительное преимущество перед версией она предотвращает атаки посредника Следует иметь в виду, что NTLM аутентификацию только в одном направлении:

клиента сервером, но не клиенту проверить подлинность сервера.

Аутентификация v Протокол Kerberos разработан в технологическом институте (Massachusetts Institute of Technology, и описан в документе RFC В Windows 2000 и следующих ОС семейства Kerberos применяется при Active Directory. Одно из важнейших преимуществ Kerberos — взаимная аутентификация, то есть возможна проверка в обоих направ лениях: от клиента к серверу и наоборот. Kerberos считается более чем NTLM, а во многих ситуациях он к тому же работает быстрее, За подробным объяснением механизма работы Kerberos и принципов взаимо действия с серверными объектами по именам (service principal names. SPN) я отсылаю вас к одной из написанных мной ранее книг:

Secure Web-based for Microsoft Windows 2000» (Microsoft Press, 2000) (M. Ховард, Р Веймир Разработка защищенных Web-приложений на платформе Microsoft Windows 2000. Мастер-класс. СПб: «Русская 2001), Аутентификация на основе сертификатов Сертификаты Х.509 сейчас чаще всего используются в SSL/TLS. При подключении к Web-серверу по протоколу SSL/TLS при помощи а не HTTP, или к серве ру электронной почты посредством SSL/TLS приложение проверяет подлинность Для этого стандартное имя, извлеченное из сертификата сервера, срав нивается с именем компьютера, к которому подключается приложение. При не совпадении этих имен предупредит пользователя о том, что, данное подключение ошибочно.

Я обращал ваше внимание на тот факт, что SSL/TLS по умолчанию позво ляют выполнять аутентификацию сервера. Кроме того, на этапе согласования по протоколу есть необязательная стадия проверки подлинности клиента на основе клиентских сертификатов. Чтобы эта возможность заработала, клиентское ПО должно иметь один или более клиентских сертификатов выданных центром сертификации, которому доверяет сервер.

Одна из самых перспективных реализаций клиентских сертификатов — смарт карты — устройства размером с кредитку, на которых хранятся один или более сертификатов и связанные с ними закрытые ключи. В Windows 2000/XP поддер жка смарт-карт встроена в ОС. На данный момент Windows поддерживает один сертификат и один закрытый ключ на каждую смарт-карту.

ГЛАВА 4 Моделирование опасностей Подробно о сертификатах Х.509, аутентификации клиентов, доверии и выпуске сертификатов рассказано в книге Secure Web-based Applications Microsoft Windows (Microsoft Press, 2000) (М. Ховард, М. Леви, Р. Веймир работка защищенных на платформе Microsoft Windows 2000.

Мастер-класс. СПб: «Русская Редакция», 2001).

связанные с а сертификатах Как я уже Web-браузер, клиент электрон ной подлинность имя из сервера с именем компьютера, к которому подключается.

Но здесь возможны так у сервера может быть.. корректных имен, NetBIOS-имя DNS-имя или IP-адрес эти имена правомочны.

Если в сертификате DNS-имя, то при доступе по альтернативным именам возникает сервер именно который нужен, кли ентское ПО не признает альтернативные имена правильными.

Протокол немного отличается от уже рассмотренных протоколов что ривает только серверов. также поддерживает проверку подлинности одних серверов другими, но в отличие от него IPSec не выполнять аутентификацию пользователей. IPSec предусматривает больше ностей, чем простая аутентификация серверов: он также поддерживает целостное гь данных и конфиденциальность (об этом позже). Windows обладают встро енной поддержкой IPSec, RADIUS Многие серверы, в том числе Microsoft Internet Authentication Service (IAS), под держивают службу RADIUS (Remote Administration Dial-In User Service) — стандарт де-факто для аутентификации удаленных пользователей, определенный в RFC 2058.

В качестве базы данных аутентификации в Windows 2000 выступает служба ката логов Active Directory.

Авторизация После того как подлинность участника безопасности подтверждена в аутентификации, ему обычно требуется доступ к ресурсам, например к рам или файлам. Авторизация — это проверка, в процессе которой выясняется круг доступных участнику ресурсов и предоставляется доступ к ним. Как правило, права разных участников безопасности на доступ к ресурсу различаются.

Windows поддерживает много механизмов авторизации, в том числе:

• списки управления доступом (Access control lists, ACL);

• привилегии;

• IP-ограничения;

• серверные разрешения.

98 Часть приложений сегодня Списки управления доступом Все объекты в Windows NT/2000/XP можно защитить посредством списков ACL — это набор записей управления доступом (access control entries, АСЕ), каж дая из которых определяет, какие действия по отношения к ресурсу разрешены участнику безопасности. Например, пользователю (Blake) разрешены чте ние и запись объекта, а Шерил (Cheryl) может читать, записывать данные и со здавать новые объекты.

Примечание подробно описаны в главе 6.

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

Примечание Принципы привилегий рассматриваются в главе 7.

IP-ограничения restrictions) — особенность в IIS, которая позволяет ограничить доступ к части Web-сайта (например, к виртуальному или обычному каталогу) или ко всему Web-сайту, разрешив его только с отдельных IP-адресов, расположенных в определенных подсетях или имеющих определенные DNS-имена.

Серверные разрешения На многих серверах применяют собственные виды управления доступом для за щиты своих объектов. Так, Microsoft SQL Server поддерживает опре деляющие порядок доступа к таблицам, хранимым процедурам и представлени ям. Приложения, основанные на СОМ+, поддерживают роли, или классы пользо для набора компонентов с одинаковыми правами доступа к наборам объектов. Роль каким пользователям разрешено вызывать интерфей сы компонента.

Технологии защиты от несанкционированного доступа и обеспечение конфиденциальности Множество сетевых протоколов поддерживают защиту от несанкционированно го доступа, а также конфиденциальность данных. Защита от несанкционирован ного доступа подразумевает способность защитить данные от удаления или из менения, как случайного, так и преднамеренного. Пользователю который отправил пользователю Люку заказ па самосвалов, вряд ли понравится, что кто то изменит заказ в пути, увеличив число самосвалов до 20. Секретность означает то, что никто кроме Блейка и Люка просмотреть и изменить заказ не сможет, Windows поддерживает следующие протоколы и технологии для защиты от не санкционированного доступа и обеспечения конфиденциальности:

ГЛАВА 4 Моделирование опасностей • SSL/TLS;

• • RPC:

• EFS.

Протокол SSL разработан компанией Netscape в 90-х. Он обеспечивает данных, пересылаемых между клиентом и сервером, и (Message Authentication Code) для гарантии целостности данных. TLS — это версия группой IETF (Internet Engineering Task Force).

IPSec Я уже говорил, что IPSec поддерживает шифрование для кон фиденциальности данных и МАС-коды для целостности данных. Весь трафик поддерживающими IPSec серверами шифруется и проверяется на целостность.

использования преимуществ IPSec никакой дополнительной настройки приложе ний не так как IPSec реализован на IP-уровне сетевого стека TCP/IP, DCOM и RPC Механизмы DCOM и RPC поддерживают аутентификацию, и целостность. Если не использовать их для пересылки огромного объема то на производительности работа DCOM и RPC сказывается мало. Подробнее — в главе Шифрующая файловая система EFS В Windows, начиная с версии 2000, есть шифрующая файловая система EFS (Encryp ting File System) — технология шифрования файлов, встроенная в файловую сис тему NTFS. Если SSL, TLS, IPSec и DCOM/RPC защищают данные при EFS шифрует и гарантирует целостность файлов на диске, Защищайте секретные данные, а лучше вообще не храните Лучший способ защиты секретной информации — не хранить ее вообще.

пользователи запомнят секретные данные. Если приложение злоумыш ленник не узнает никаких секретов, ведь в системе их нет! Однако если их все-таки сохранять, то обеспечьте их максимально надежную защиту. Это слож задача — как ее решать, рассказывается в главе 6, Шифрование, хеши, МАС-коды и цифровые подписи Конфиденциальность — способ сокрытия информации от любопытных глаз, сто для этого прибегают к Многие считают секретность и ность синонимами. Хеширование — это применение к данным криптографичес кой функции, называемой или дайджеста. В t те получается небольшое по размеру (по отношению к объему исходных значение, однозначно идентифицирующее данные. Обычный размер хеша — или 160 бит. Подобно отпечатку пальцев, хеш никакой информации о данных не содержит, но при этом однозначно идентифицирует их.

100 Часть I Безопасность сегодня Получив данные с адресат может не изменялись ли данные, повторно вычислив хеш и сравнить с полученным. Совпадение хешей свиде тельствует о том, что данные не Конечно, это не верно. Зло умышленник мог изменить данные и заменить хеш на соответствующий изменен ным данным, поэтому так важны и цифровые подписи.

При создании применяется к объединению самого сообщения и некоторых секретных данных, известных только доверенным сто ронам (обычно автору и получателю сообщения). Для проверки МАС-кода полу чатель вычисляет хеш, применяя хеш-функцию к данным и секретным данным.

Если совпадает с прилагаемым к можно считать, что данные не изменялись и пришли от лица, которому также секрет.

Цифровая подпись немного напоминает но в ней не используется общий секрет;

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

В Windows есть готовый криптографический graphic API) для создания приложений с поддержкой шифрования, хеширования, создания и цифровых подписей.

Примечание Шифрование, хеши и цифровые подписи подробно рассматри ваются в главе 8, Аудит Цель аудита, иногда его называют (logging), состоит в сборе информации об успешных и неудачных попытках доступа к объектам, использо вания привилегий и других важных с точки зрения безопасности а также регистрации этой информации для дальнейшего анализа в защищенном журна В Windows аудит реализован в виде журнала событий Windows, Web-журналов IIS и журналов иных приложений, в том SQL Server и Exchange.

Внимание! Все файлы журналов необходимо защитить от атак. При модели ровании следует учесть опасность, связанную с вероятностью и ствиями чтения, изменения или удаления файлов журнала, а также с невозможностью приложения добавлять записи в файл журнала из-за переполнения диска.

Фильтрация, управление входящими запросами и качество обслуживания (filtering) — это проверка получаемых данных и решения об обработке или игнорировании пакета. Так работают фильтрующие пакет бранд ГЛАВА 4 Моделирование опасностей которые позволяют справиться с атак типа в обслу живании», реализованных на IP-уровне.

Ограничение числа запросов (throttling), позволяет ничить количество запросов от анонимных пользователей, разрешив больше просов с аутентификацией. Последуйте этому совету, и нарушитель вряд ли ста нет если ему прежде придется проходить идентификацию. Важно гра ничить число анонимных подключений, Качество обслуживания (quality of service) поддерживается набором разрешающих приоритетную обработку некоторых типов трафика.

мер, разрешение обрабатывать в первую очередь трафик потокового видео.

Минимальные привилегии Всегда используйте привилегии, как раз достаточные для выполнения задачи и не более того. Этой теме посвящена глава 7 целиком.

Устранение опасностей, грозящих приложению расчета зарплаты В табл. описаны способы противостояния выявленным ранее опасностям.

Таблица 4-12, Применение технологий противостояния опасностям, грозящим приложению расчета зарплаты Опасность STRIDE Методы и технологии Просмотр данных о зарплате I Применяйте (допустим также в процессе пересылки для шифрования канала связи между через сеть и клиентом Загрузка подложных Т Требуется более строгая Web-страниц или кода Снабжайте файлы чтобы их могли записывать и уда только и торы Блокировка доступа D Используйте брандмауэр для отбрасывания к приложению определенных IP-пакетов. Ограничьте ресур анонимным пользовате лям (такие как оперативная память, дисковое время работы с данных и т.п.). переместите файлы на другой том Изменение данных и I Защитите трафик данных о зар о зарплате плате посредством или DCOM/RPC с поддержкой конфиденциальности — выбор висит от используемых сетевых протоколов, Это снизит опасность разглашения информа ции. SSL/TLS также предоставляет для определения атак модификации данных.

К тому же при соответствующей настройке DCOM/RPC гарантирует целостность данных.

Возможно IPSec см.

Часть I Безопасность приложений сегодня Таблица 4-12.

Опасность STRIDE Методы и технологии привилегий Примените к исполняемому процессу прин при помощи процесса цип минимальных привилегий. Тогда даже при обработки клиентских взломе процесса код не получит дополнитель запросов ных полномочий Подмена Web-сервера Самое простое — применить который разрешит клиентскому ПО выполнять провер ку подлинности если сконфи гурирован соответствующим образом. Подоб конфигурация клиентов должна опреде ляться корпоративной политикой. Есть еще Kerberos, который поддерживает вза имную аутентификацию сервера и клиента Как вы видите, технологии безопасности выбирают только после выполнения анализа Такой подход много лучше и безопаснее.

Внимание! Построение защищенных систем — сложная задача. Их проекти рование на основе моделей безопасности, используемых в качестве от правной точки для всей архитектуры, — отличный способ упорядочить построение таких систем, Основные опасности и методы борьбы с ними В табл. перечислены основные опасности при проектировании технологии опасностей, а также некоторые недостатки использования каждой технологии. При этом предполагается, что главное преиму щество каждой технологии — опасности до определенного уровня.

Элементы таблицы нельзя считать и мы никак не претендуем на полный охват материала. Наша задача — привить вам вкус к поиску опасностей и дать базовые идеи, Таблица 4-13. Некоторые часто встречающиеся опасности и способы борьбы с ними Типы Методы Возникающие Опасность опасностей предотвращения проблемы Получение доступа Т и 1 Необходимость на к конфиденциальным водный вариант стройки HTTP-сервера HTTP-данным или или для за их крытого ключа и серти фиката. Настройка также часто ока зывается сложной.

падение при создании соедине Незначительное падение тельности остального трафика ГЛАВА 4 опасностей Таблица 4-13.

Типы Методы Возникающие Опасность предотвращения проблемы Получение доступа Т и I Используйте варианты, Может потребоваться к конфиденциальным обеспечивающие изменение кода.

RPC- или DCOM-дан- целостность и секрет- чительное падение про ИЛИ ИХ ность данных изводительности модификация Просмотр или Т и I PGP (Pretty Good Privacy) PGP сложен в или (Secure/ электронной почты Multipurpose Internet конфигурировать Mail Потеря устройства, I Устройство с поддерж- Не PIN-код конфи- кой и блоки данные ровка устройства при нескольких неудачных попытках ввода PIN-кода Переполнение Ограничение Проверка IP-адресов сервиса большим например, работает количеством на основе при использовании про подключений Обязательная аутенти- кси-серверов. Необходи мость снабжения зователей учетными записями и паролями Попытка подбора I и Е Увеличение между пароля вводами пароля. бен спровоцировать Более устойчивые пароли, и тем самым к подбору пароли блокировать учетную запись так, что право мочным не удастся получить к ней доступ. В этом слу чае блокируйте запись на длительное время, например па Требуется добавить в приложение код для повышения вости паролей Просмотр конфи- Шифрование На потребу ется добавить код файлов сервере для шифрования cookie-файлов или подпись На Web-сайте Изменение ется добавить код cookie-файлов для поддержки MAC на или цифровых см. след. cr.

Часть I Безопасность приложений сегодня Таблица 4-13.

Типы Методы Возникающие Опасность опасностей предотвращения проблемы Получение доступа Во-первых, такие дан- Задача может оказаться к закрытым и сек- ные не следует хранить сложной для решения, ретным данным вообще или хранить Подробно об этом — их на внешнем в главе устройстве. Если это данные следует как можно надежнее, используя штатные средства ОС Подмена сервера Схема Конфигурирование с поддержкой может занять массу фикации времени например или Kerberos злоумыш- Строгий контроль раз- Необходимо определить ленником HTML-кода решенных входных подходящие или на Web-сервере выражения и выяснить, на сервер с помощью что разрешается переда выражений вать на Web-сервер, Подробно об этом — в главе Открытие тысяч Ранжирование и закры- Затраты времени пассивных тие неработающих на оптимизацию соединений Соедине- алгоритма злоумышленником ния администраторов ранжирования не должны Соединения, не про- Обязательная аутенти- В приложении следует шедшие, аутентифи- фикация. Исключитель- предусмотреть кацию занимают но осторожное отно- жку аутентификации большой объем шение к соединениям и олицетворения памяти без аутентификации.

Предотвращение выде ления большого объема ресурсов неизвестному подключению Повтор (replay) R, и D Один из способов — Слишком сложно все пакетов с данными применение настроить. Но обеспечения конфиден- стоит выделки!

(протоко лов IPSec или для сокры тия Также можно применить подсчет и тайм-аут пакетов. этого к незашифрованному пакету добавляют метку времени и применяют хеш-функцию по алго ритму MAC. Программа адресат при получении ГЛАВА 4 опасностей - Таблица 4-13.

Pages:     | 1 || 3 | 4 |   ...   | 10 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.