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

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

Жанры

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

Виега Джон

Шрифт:

В протоколе SSL принята модель «клиент–сервер». Зачастую клиент и сервер аутентифицирую друг друга, пользуясь разными механизмами. Для аутентификации сервера обычно применяют инфраструктуру открытого ключа (Public Key Infrastructure – PKI). В ходе организации канала сервер создает сертификат, который содержит открытый ключ для нового сеанса, а также дополнительные данные (имя сервера, дату истечения срока действия сертификата и т. д.). Все эти данные криптографически связаны друг с другом и с ключом. Но клиент должен быть уверен, что сертификат действительно выпущен данным сервером.

PKI – это механизм, который позволяет проверить, что сертификат принадлежит серверу,

поскольку он подписан доверенной третьей стороной – удостоверяющим центром (УЦ) (Certification Authority – СА). (Технически может существовать цепочка промежуточных УЦ на пути от сертификата к корневому УЦ.) Для контроля подлинности сертификата нужно проделать немало работы. Прежде всего у клиента должна быть какая–то основа для проверки подписи УЦ. В общем случае вместе с клиентом устанавливаются сертификаты хорошо известных корневых УЦ, например VeriSign или сертификат корпоративного УЦ. Последнее позволяет развертывать SSL в масштабе одного предприятия. Коль скоро открытый ключ УЦ известен, клиент может проверить цифровую подпись и тем самым убедиться, что сертификат не изменился с момента подписания его УЦ.

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

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

Даже если используемая вами библиотека для поддержки SSL делает все, что нужно, есть еще ряд аспектов, вызывающих вопросы. Например, хотя описанная выше процедура контролирует цепочку доверия и гарантирует, что срок действия сертификата не истек, вы все равно не можете быть уверены, что на другом конце находится сервер, с которым вы готовы обмениваться данными. Предположим, что вы хотите обращаться к службе на машине example.com. Вы устанавливаете SSL–соединение, получаете сертификат, проверяете, что он не истек и подписан известным УЦ. Но вы не проверили, выпущен ли этот сертификат от имени example.com или attacker.org. Если противник подсунул свой сертификат, как вы об этом узнаете?

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

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

Самый лучший способ удостовериться в подлинности сертификата – проверять все без исключения поля, а особенно доменное имя. Оно может находиться в двух полях: DN (distinguished name – отличительное имя) и в поле subject AltName типа dnsName. Отметим, что в этих полях, помимо имени хоста, содержится и другая информация.

Хорошо, все это вы прилежно выполнили. Значит ли это, что все опасности SSL позади□ Отнюдь. Исключив самые серьезные и наиболее распространенные опасности (подсовывание противником сертификата, не подписанного известным УЦ или содержащим некорректные данные), вы даже не приблизились к опушке леса. Что, если закрытый ключ, ассоциированный с сертификатом, был похищен□ Предъявив такое удостоверение, противник может притвориться сервером, и никакой из рассмотренных выше способов контроля об этом не узнает, даже если администратор настоящего сервера обнаружил факт компрометации и сменил верительные грамоты. Даже протокол HTTPS уязвим в этой ситуации, несмотря на строгий подход к обеспечению безопасности по SSL.

Необходим какой–то способ сообщить, что сертификат сервера соответствует недействительным верительным грамотам. Таких способов два. Первый – это список отозванных сертификатов (CRL). Идея в том, что УЦ ведет список всех плохих сертификатов, и вы можете загрузить его: по протоколу HTTP или LDAP (Lightweight Directory Access Protocol – облегченный протокол службы каталогов). Но у CRL несколько проблем:

□ между кражей закрытого ключа и моментом загрузки CRL может пройти значительное время. Ведь факт кражи нужно еще обнаружить и сообщить об этом УЦ. Затем УЦ должен добавить ассоциированный с украденным ключом сертификат в CRL и опубликовать новую версию списка. Пока все это будет тянуться, противник успеет притвориться каким–нибудь популярным Web–сайтом;

□ проверить, что сертификат находится в CRL, не очень просто, поскольку эта процедура плохо поддержана. Библиотеки для работы с SSL обычно включают неполную поддержку (или вообще никакой). Если же библиотека все–таки поддерживает CRL–списки, то обычно нужно написать много кода, чтобы загрузить их и проверить. К тому же УЦ не всегда четко информируют о том, где искать CRL–список (предполагается, что адрес должен быть прописан в самом сертификате, но в большинстве случае это не так). Некоторые УЦ обновляют свои CRL редко, а есть и такие, что вообще не публикуют их.

Другую возможность предоставляет протокол онлайнового запроса статуса сертификата (OCSP – Online Certificate Status Protocol). Его назначение – уменьшить промежуток времени, в течение которого сервер уязвим, за счет внедрения онлайновой службы, у которой можно запросить статус сертификата. Но, как и в случае CRL, этот протокол не слишком хорошо поддерживается. (Вопреки требованиям стандарта IETF многие УЦ и библиотеки для работы с SSL не поддерживают его вовсе, а в тех, которые поддерживают, этот режим, скорее всего, по умолчанию отключен.) Кроме того, есть проблемы, присущие только OCSP. Самая очевидная из них – в том, что необходим доступ по сети к службе, отвечающей на запросы. Поэтому при реализации OCSP нужно считать сертификат недействительным в случае недоступности службы или хотя бы реализовать второй эшелон обороны: загружать и проверять CRL, причем отказываться принимать сертификат, если CRL последний раз обновлялся слишком давно.

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

Лорд Системы 12

Токсик Саша
12. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 12

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Инферно

Кретов Владимир Владимирович
2. Легенда
Фантастика:
фэнтези
8.57
рейтинг книги
Инферно

Нефилим

Демиров Леонид
4. Мания крафта
Фантастика:
фэнтези
боевая фантастика
рпг
7.64
рейтинг книги
Нефилим

Девятое правило дворянина

Герда Александр
9. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Девятое правило дворянина

Странник

Седой Василий
4. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Странник

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

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

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

Рядовой. Назад в СССР. Книга 1

Гаусс Максим
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1

Счастливый торт Шарлотты

Гринерс Эва
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Счастливый торт Шарлотты

Отмороженный 3.0

Гарцевич Евгений Александрович
3. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 3.0

Огни Аль-Тура. Завоеванная

Макушева Магда
4. Эйнар
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Огни Аль-Тура. Завоеванная

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3