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

ЖАНРЫ

Защита от хакеров корпоративных сетей

авторов Коллектив

Шрифт:

Ясно, что такой обмен нежелателен, потому что третье лицо не только может получить доступ к конфиденциальной информации, но и изменить ее по своему желанию. При этом типе атак криптографические алгоритмы не взламываются, потому что для Боба секретные ключи Алисы и Чарли остались неизвестными. Так что фактически алгоритм Диффи-Хеллмана не взломан. Следует осторожно подходить к использованию механизма обмена ключами, реализованному в любой криптосистеме с открытым ключом. Если протокол обмена ключами не поддерживает установления подлинности одной, а лучше двух сторон, участвующих в обмене информации, то он может быть уязвим к атаке типа MITM. В системах аутентификации используются цифровые сертификаты (обычно X.509 – стандарт на шифрование данных при их передаче в сетях), например поставляемые Thawte или VeriSign.

Кэширование пароля по частям

Ранние версии клиентов Windows запоминали пароли в формате кэш-величин LanManager (LANMAN), который на самом деле чрезвычайно опасен с точки зрения безопасности аутентификации. Но поскольку эта глава посвящена криптографии, то обсуждение аутентификации LANMAN будет ограничено обсуждением уязвимостей хранения паролей.

Так же как и в UNIX, пароли LANMAN никогда

не хранятся в читаемом формате. Они всегда записаны в формате кэш-величин. Ошибка заключается в том, что, несмотря на использование для шифрования паролей криптостойкого алгоритма DES, формат хранения кэшированных величин таков, что его можно относительно просто вскрыть. Каждый пароль должен состоять из 14 символов. Если в пароле менее 14 символов, то он дополняется до 14 символов. При шифровании пароль разбивается на две половинки по 7 символов в каждой, каждая из которых зашифрована алгоритмом DES. Результирующая кэш-величина пароля состоит из двух соединенных половинок пароля, зашифрованных алгоритмом DES.

Поскольку известно, что DES – это криптостойкий алгоритм, то в чем ошибка реализации? Разве просто взломать алгоритм DES? Не все так просто. Вспомните, что существует приблизительно 100 символов, которые можно использовать для записи пароля. Выбирая пароли из 14 символов, получается около 100 14 или 1.0x10 28 возможных вариантов. Пароли LANMAN сильно упрощены, потому что в них прописные и строчные буквы не различаются: все символы представлены прописными буквами. Более того, если пароль состоит менее чем из 8 символов, то вторая половинка всегда идентична первой и нет необходимости в ее взломе. Если используются только буквы (без цифр и знаков пунктуации), то число всевозможных комбинаций пароля сокращается до 26 7 (грубо говоря, до 8 млрд). Это число может показаться слишком большим для атаки «грубой силы», но вспомните, что это теоретическая оценка наибольшего числа возможных комбинаций. А поскольку большинство паролей пользователей повторяются, то атака со словарем приведет к успеху быстрее. Суть в том, что атака со словарем на два пароля из 7 символов (или даже на один) приведет к взлому пароля намного быстрее, чем та же атака на пароль из 14 символов.

Предположим, что в процедуре кэширования паролей LANMAN используются сильные пароли из двух и более символов. К сожалению, среди пользователей распространена привычка добавлять в конец пароля дополнительные символы. Например, если пользователь добавит в строку чисел или символов свой день рождения, например «MONTANA45 %», то пароль безопаснее от этого не станет. LANMAN разобьет его на две строки: «MONTANA» и «45 %». Вероятно, и первая, и вторая строки будут быстро определены. Первая – в результате атаки со словарем, а вторая – атаки «грубой силы», потому что она состоит только из трех символов. Поэтому в операционных системах Windows NT и Windows 2000 следует по возможности исключить кэширование LANMAN, но при этом клиенты Win9x не смогут установить их подлинность.

Генерация длинного ключа из короткого пароля

Про качество паролей уже говорилось во время обсуждения «грубой силы». С появлением схем шифрования PKE, как, например, программы PGP, большинство открытых и секретных ключей генерируются на основе паролей или ключевых фраз, уязвимых к атаке «грубой силы». Если в выбранном пароле недостаточно символов, то он может быть вскрыт в результате атаки «грубой силы». Поэтому системы PKE, как, например, RSA, могут быть взломаны при помощи «грубой силы». Причем это произойдет (если вообще произойдет) не из-за ошибки в алгоритме, а из-за дефектов генерации ключей. Лучшая защита от подобных «косвенных» атак – использование сильных паролей при генерации любых ключей. Сильный пароль – это пароль, образованный из строчных и прописных букв, чисел и символов, желательно встречающихся на протяжении всего пароля. Принято считать, что 8 символов – минимальная длина сильного пароля, но, принимая во внимание серьезность последствий выбора слабых паролей, для генерации ключей рекомендуется использовать, по крайней мере, 12 символов.

Про высококачественные пароли часто говорят, что у них высокая энтропия. Энтропия – это мера измерения его неопределенности, с помощью которой оценивают качество пароля. Обычно у длинных паролей энтропия выше, чем у коротких. Случайный выбор символов, образующих пароль, также увеличивает энтропию пароля. Например, у пароля «albatross» (энтропия приблизительно равна 30 единицам) разумная длина, но энтропия могла быть больше, если в пароле такой же длины каждый символ выбирать случайным образом, как, например, «g8 %=MQ+p» (около 48 единиц энтропии). Первый пароль может оказаться в списке широко известных имен птиц, в то время как второй – никогда. Очевидно, второй пароль предпочтительнее, и поэтому лучше его использовать. А вывод таков: хорошие алгоритмы шифрования, как, например, 3-DES c 168-битным секретным ключом, могут быть легко взломаны, если энтропия его секретного ключа составляет несколько единиц.

Ошибки хранения частных или секретных ключей

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

Поскольку ключи – обычные данные, то, как правило, они хранятся где-нибудь в файле на жестком диске вашей системы. Например, секретные ключи протокола SSH-1 запоминаются в файле идентификации, размещенном в поддиректории. ssh домашней директории пользователя. Если файловая система позволяет всем читать этот файл, то пароли могут быть скомпрометированы. Как только кто-нибудь завладеет секретным ключом, чтение зашифрованных сообщений станет тривиальным. (Отметим, что файл идентификации SSH используется для установления подлинности, а не для шифрования. Но идея понятна.)

В некоторых реализациях ключи могут быть скомпрометированы из-за невозможности обеспечения безопасности хранения данных в оперативной памяти (RAM). Как известно, обработка любой информации,

в том числе секретных или частных ключей, так или иначе затрагивает оперативную память компьютера. Если ядро операционной системы не хранит эти ключи в защищенной области памяти, то, вероятно, ими можно завладеть, переписав образ оперативной памяти в файл и проанализировав его на досуге. Такие файлы в UNIX называются дампом памяти, или разгрузкой оперативной памяти (core dumps). Обычно они создаются во время атак, направленных на достижение отказа в обслуживании (DoS-атак). В результате DoS-атаки при исчерпании оперативной памяти ее образ вместе с ключами переписывается в виртуальную память на диске. Таким способом удачливый хакер сможет вынудить систему выдать дамп памяти и извлечь ключи из образа памяти. К счастью, к настоящему времени об этом знает большинство разработчиков и на практике это встречается все реже, потому что сейчас ключи хранятся в защищенной области памяти.

...

Инструментарий и ловушки…

Реализация компанией Netscape оригинального протокола SSL: как избежать выбора случайных чисел

В этой секции попытаемся объяснить, почему иногда хороший криптографический алгоритм не обеспечивает необходимой безопасности. При неправильном использовании алгоритма возможны бреши в системе защиты. Это хорошо иллюстрирует некорректный выбор начального числа при генерации псевдослучайных чисел в реализации протокола защищенных сокетов SSL (SSL – Secure Sockets Layer) браузера Netscape версии 1.1 (SSL – протокол, гарантирующий безопасную передачу данных по сети. Комбинирует криптографическую систему с открытым ключом и блочное шифрование данных). Без всякого сомнения, читатель знает, что этому недостатку безопасности браузера несколько лет и поэтому сегодня его значение сильно ограничено. За внешним проявлением этого специфического недостатка скрывается классический пример того, как и поныне разработчики программ ухудшают криптографические алгоритмы. Поэтому его разбор уместен и в настоящее время. Несмотря на аналогичную уязвимость протокола SSL для PC и Macintosh, в книге будет рассмотрена найденная Ианом Голдбергом (Ian Goldberg) и Дэвидом Вагнером (David Wagner) уязвимость UNIX-версии протокола SSL компании Netscape.

Перед рассмотрением сути этой уязвимости следует осветить некоторые второстепенные вопросы технологии SSL и генерации случайных чисел. SSL – это сертифицированная система аутентификации и шифрования, разработанная Netscape во времена неоперившейся электронной коммерции. Она предназначалась для защиты коммуникаций, например транзакций сделок по кредитной карточке, от прослушивания потенциальными ворами. Более криптостойкая и практически не вскрываемая версия протокола со 128-битными ключами не получила широкого распространения в мире из-за экспортных ограничений США. Фактически даже внутри США большинство пользователей Netscape имели дело со слабой международной версией программы с 40-битовыми ключами.

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

Для версии браузера Netscape версии 1.1 для UNIX была использована следующая совокупность величин: текущее время, идентификаторы (PID) процесса и его родителя. Предположим, что злоумышленник и пользователь Netscape одновременно получили доступ к машине, что является нормой для многопользовательской архитектуры UNIX-систем. Для злоумышленника не составит особого труда просмотреть список процессов на машине и определить PID процесса Netscape и PID его родителя. Если злоумышленник сможет перехватить поступающие в компьютер пакеты TCP/IP и прочитать отметки времени в заголовках пакетов, то он сможет вполне точно узнать время генерации сертификата по протоколу SSL. Перечисленных сведений хватит для уменьшения ключевого пространства приблизительно до 10 6 комбинаций, среди которых найти ключ методом «грубой силы» достаточно просто даже в почти реальном масштабе времени. После определения начального числа генерации псевдослучайных чисел, используемых для построения сертификата по протоколу SSL компании Netscape, злоумышленник сможет сначала сгенерировать аналогичный сертификат для себя, а затем прослушать или похитить текущую сессию.

Очевидно, что рассмотренное – серьезная ошибка нарушения безопасности, которую Netscape обязана была исправить в последующих версиях, что и было сделано. Netscape выпустила патчи для браузеров версий 1.x и разработала совершенно новый генератор случайных чисел для браузеров версии 2.x. Детальнее об этом специфическом недостатке браузера можно узнать в архиве журнала доктора Добба по адресу www.ddj.com/documents/s=965/ddj9601h.

Любительская криптография

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

Классификация зашифрованного текста

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

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

Поделиться с друзьями: