Чтение онлайн

на главную - закладки

Жанры

19 смертных грехов, угрожающих безопасности программ

Виега Джон

Шрифт:

Информация о пути

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

Информация о структуре стека

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

о структуре стека.

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

Модель безопасности информационного потока

В простом сценарии «мы против них» нетрудно рассуждать об утечках информации. Либо вы раскрываете противнику конфиденциальные данные, либо нет.

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

Общепринятый способ моделирования безопасности информационного потока–это модель Белла–ЛаПадулы (рис. 13.1). Основная идея в том, чтобы представить иерархию прав в виде вершин графа. Некоторые вершины соединены ребрами. Относительные позиции важны, так как информация должна течь только «вверх» по графу. Интуитивно чем вершина выше, тем она более конфиденциальна, и информация некоторого уровня секретности не должна поступать субъектам, которым разрешен доступ только к менее секретной информации. Вершины, находящиеся на одном и том же уровне, не должны передавать информацию друг другу, если между ними нет ребра. Наличие ребра означает один и тот же уровень доступа.

Примечание. Это несколько упрощенное изложение, но для наших целей его достаточно. Оригинальное описание модели, датируемой 1974 годом, – это документ на 134 страницах!

Модель Белла–ЛаПадулы – это абстракция модели, используемой правительством США для классификации данных (например, «сверхсекретно», «секретно», «для служебного пользования», «открыто»). Не вдаваясь в детали, отметим, что она позволяет моделировать также разбиение на отделы. Это означает, что наличие допуска к сверхсекретным документам еще не означает, что вы можете читать любой такой документ. На каждом уровне имеются еще и подуровни.

Рис. 13.1. Модель Белла–ЛаПадулы

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

Создавая собственную модель привилегий, изучите сначала модель Белла–ЛаПадулы и реализуйте механизм, навязывающий ее. Но учтите, что на практике нередко приходится ослаблять требования, например потому, что необходимо использовать данные из не заслуживающего доверия источника в привилегированной операции. Бывают также случаи, когда нужно избирательно раскрывать информацию, например позволить компании, обслуживающей кредитные карты, видеть номер карты, но не имя ее владельца. Это соответствует идее селективного «рассекречивания» данных. Вообще говоря, вы должны реализовать специальный API, который явно разрешает «рассекречивание». Семантика вызова будет такова: «Да, я хочу передать эту информацию субъекту с меньшими привилегиями (или разрешить операцию, запрошенную таким субъектом). Это нормально».

Модель Белла–ЛаПадулы применяется в системах
безопасности нескольких языков программирования. Так, модель привилегий в Java (наиболее отчетливо проявляющаяся в аплетах) основана на модели Белла–ЛаПадулы. С каждым объектом связан набор разрешений, и система не выполнит вызов, если не все участвующие в запросе объекты (стек вызова) обладают необходимыми разрешениями. Операцией явного «рассекречивания» является вызов метода doPrivileged, который позволяет обойти проверку стека (в Java это называется «инспекцией стека»). В общеязыковой среде исполнения (CLR) в .NET тоже имеется аналогичная модель «разрешений» для сборок.

Греховность С# (и других языков)

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

...

string Status = «No»;

string sqlstring = "";

try {

// код обращения к SQL-серверу опущен

} catch (SqlException se) {

Status = sqlstring + " failed\r\n";

foreach (SqlError e in se.Errors)

Status += e.Message + "\r\n";

} catch (Exception e) {

Status = e.ToString;

}

if (Status.CompareTo("No") != 0) {

Response.Write(Status);

}

Родственные грехи

Ближайший родственник этого греха обсуждался в грехе 6. Сюда же можно отнести кросс–сайтовые сценарии с раскрытием данных, хранящихся в куках (грех 7), и внедрение SQL–команд (грех 4), в результате которого противник может изменить SQL–запрос к базе данных.

В грехе 11 мы привели пример побочного хронометрируемого канала при описании ошибки в системе TENEX.

Где искать ошибку

Обращайте внимание на следующие места:

□ процесс посылает пользователям информацию, получаемую от ОС или среды исполнения;

□ операции над секретными данными, время завершения которых не фиксировано и зависит от обрабатываемых данных;

□ случайное использование конфиденциальной информации;

□ незащищенные или слабо защищенные конфиденциальные или привилегированные данные;

□ процесс передает конфиденциальные данные пользователям, которые могут оказаться низкопривилегированными;

□ незащищенные конфиденциальные данные передаются по незащищенным каналам.

Выявление ошибки на этапе анализа кода

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

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

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

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

Поделиться:
Популярные книги

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Кодекс Охотника. Книга III

Винокуров Юрий
3. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Кодекс Охотника. Книга III

Последний попаданец 11. Финал. Часть 1

Зубов Константин
11. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 11. Финал. Часть 1

Книга пяти колец

Зайцев Константин
1. Книга пяти колец
Фантастика:
фэнтези
6.00
рейтинг книги
Книга пяти колец

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи

Купидон с топором

Юнина Наталья
Любовные романы:
современные любовные романы
7.67
рейтинг книги
Купидон с топором

Наследник в Зеркальной Маске

Тарс Элиан
8. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник в Зеркальной Маске

Совок 5

Агарев Вадим
5. Совок
Фантастика:
детективная фантастика
попаданцы
альтернативная история
6.20
рейтинг книги
Совок 5

Аномальный наследник. Том 1 и Том 2

Тарс Элиан
1. Аномальный наследник
Фантастика:
боевая фантастика
альтернативная история
8.50
рейтинг книги
Аномальный наследник. Том 1 и Том 2

Теневой путь. Шаг в тень

Мазуров Дмитрий
1. Теневой путь
Фантастика:
фэнтези
6.71
рейтинг книги
Теневой путь. Шаг в тень

Попаданка в академии драконов 2

Свадьбина Любовь
2. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
6.95
рейтинг книги
Попаданка в академии драконов 2

Гром над Империей. Часть 2

Машуков Тимур
6. Гром над миром
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Гром над Империей. Часть 2

Ритуал для призыва профессора

Лунёва Мария
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Ритуал для призыва профессора

Измена. Осколки чувств

Верди Алиса
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Осколки чувств