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

Пред неколку дена 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) е протокол кој се користи за безбедна комуникација. Се постигнува безбедност со помош на шифрирање и автентикација на страните кои комуницираат. Автентикацијата е верификација на презентираниот идентитет. Во реалниот живот, на пример, го кажувате вашето име (идентитет) и ја покажувате вашата лична карта за да може другата личност да ја потврди (автентицира). Автентикацијата потоа се дели на верификација, што е само пример со национална лична карта, или идентификација, кога дотичниот може да го одреди вашиот идентитет без вие однапред да му го презентирате.

Сега накратко би дошол до сертификатот за серверот. Во реалниот живот, вашиот сертификат може да биде, на пример, лична карта. Сè е засновано на асиметрична криптографија, каде што секој субјект поседува два клуча - приватен и јавен. Целата убавина лежи во тоа што пораката може да се шифрира со јавниот клуч и да се дешифрира со приватниот клуч. Ова значи дека само сопственикот на приватниот клуч може да ја дешифрира пораката. Во исто време, нема потреба да се грижите за пренесување на тајниот клуч на двете страни кои комуницираат. Сертификатот потоа е јавниот клуч на субјектот дополнет со неговите информации и потпишан од органот за сертификација. Во Чешка, еден од органите за сертификација е, на пример, Чешка Пошта. Благодарение на сертификатот, 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, Ројтерс
.