Затвори рекламата

Преди няколко дни 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 можете да видите две команди по-долу goto fail;. И това е препъникамъкът. След това този код кара втората команда да бъде изпълнена на етапа, когато сертификатът трябва да бъде проверен goto fail;. Това води до пропускане на третото условие 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, Ройтерс
.