Зачыніць аб'яву

Некалькі дзён таму 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
.