Закрыть объявление

Несколько дней назад Apple выпустила сотый Обновление iOS 7.0.6, о выходе которого мы вам сообщили. Многие, возможно, были удивлены тем, что обновление также было выпущено для более старых iOS 6 (версия 6.1.6) и Apple TV (версия 6.0.2). Это патч безопасности, поэтому Apple не могла позволить себе обновлять только часть своих устройств. Более того, эта проблема также затрагивает OS X. По словам представителя Apple Труди Мюллер, обновление OS X будет выпущено как можно скорее.

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

SSL (Secure Socket Layer) — это протокол, используемый для безопасной связи. Безопасность достигается за счет шифрования и аутентификации взаимодействующих сторон. Аутентификация — это проверка предъявленной личности. В реальной жизни, например, вы называете свое имя (личность) и показываете свое удостоверение личности, чтобы другой человек мог его проверить (аутентифицироваться). Аутентификация затем делится на проверку, например, с использованием удостоверения личности, или на идентификацию, когда заинтересованное лицо может определить вашу личность без вашего предварительного предъявления ему этой карты.

Теперь я бы вкратце добрался до сертификата сервера. В реальной жизни вашим сертификатом может быть, например, удостоверение личности. Все основано на асимметричной криптографии, где каждый субъект владеет двумя ключами — закрытым и открытым. Вся красота заключается в том, что сообщение можно зашифровать открытым ключом и расшифровать закрытым ключом. Это означает, что только владелец закрытого ключа может расшифровать сообщение. При этом нет необходимости беспокоиться о передаче секретного ключа обеим общающимся сторонам. Сертификат представляет собой открытый ключ субъекта, дополненный его информацией и подписанный центром сертификации. В Чехии одним из органов сертификации является, например, Česká Pošta. Благодаря сертификату iPhone может убедиться, что он действительно взаимодействует с данным сервером.

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

static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa,
SSLBuffer signedParams, uint8_t *signature, UInt16 signatureLen)

{
   OSStatus err;
   …

   if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
       goto fail;
   if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
       goto fail;
       goto fail;
   if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
       goto fail;
   …

fail:
   SSLFreeBuffer(&signedHashes);
   SSLFreeBuffer(&hashCtx);
   return err;
}

Во втором условии if вы можете увидеть две команды ниже перейти к неудаче;. И это камень преткновения. Затем этот код вызывает выполнение второй команды на этапе проверки сертификата. перейти к неудаче;. Это приводит к пропуску третьего условия. if и проверки сервера вообще не будет.

Последствия заключаются в том, что любой, кто знает об этой уязвимости, может предложить вашему iPhone поддельный сертификат. Ты или ваш iPhone, вы будете думать, что общаетесь в зашифрованном виде, хотя между вами и сервером находится злоумышленник. Такая атака называется атака "человек посередине", что примерно переводится на чешский как атака «человек посередине» или человек среди. Атака с использованием этой конкретной уязвимости в OS X и iOS может быть выполнена только в том случае, если злоумышленник и жертва находятся в одной сети. Поэтому лучше избегать общедоступных сетей Wi-Fi, если вы не обновили iOS. Пользователи Mac по-прежнему должны быть осторожны с тем, к каким сетям они подключаются и какие сайты посещают в этих сетях.

Невероятно, как такая фатальная ошибка могла попасть в окончательные версии OS X и iOS. Это могло быть непоследовательное тестирование плохо написанного кода. Это означало бы, что и программист, и тестировщики будут допускать ошибки. Это может показаться маловероятным для Apple, и поэтому возникают предположения, что эта ошибка на самом деле является бэкдором, т. н. черный ход. Не зря говорят, что лучшие бэкдоры выглядят как тонкие ошибки. Однако это лишь неподтвержденные теории, поэтому будем считать, что кто-то просто допустил ошибку.

Если вы не уверены, что ваша система или браузер застрахованы от этой ошибки, посетите страницу gotofail.com. Как видно на изображениях ниже, Safari 7.0.1 в OS X Mavericks 10.9.1 содержит ошибку, тогда как в Safari в iOS 7.0.6 всё в порядке.

Ресурсы: iMore, Reuters
.