Փակել գովազդը

Մի քանի օր առաջ 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) անվտանգ հաղորդակցության համար օգտագործվող արձանագրություն է: Այն ապահովում է անվտանգություն հաղորդակցվող կողմերի գաղտնագրման և նույնականացման միջոցով: Նույնականացումը ներկայացված ինքնության ստուգումն է: Իրական կյանքում, օրինակ, դուք ասում եք ձեր անունը (ինքնությունը) և ցույց եք տալիս ձեր ID-ն, որպեսզի դիմացինը կարողանա ստուգել այն (հաստատել): Նույնականացումը այնուհետև բաժանվում է ստուգման, որը ընդամենը օրինակ է ազգային ինքնության քարտով կամ նույնականացման, երբ տվյալ անձը կարող է որոշել ձեր ինքնությունը՝ առանց նախապես նրան ներկայացնելու:

Հիմա ես համառոտ կհասնեմ սերվերի վկայականին: Իրական կյանքում ձեր վկայականը կարող է լինել, օրինակ, նույնականացման քարտ: Ամեն ինչ հիմնված է ասիմետրիկ ծածկագրության վրա, որտեղ յուրաքանչյուր առարկա ունի երկու բանալի՝ մասնավոր և հանրային: Ամբողջ գեղեցկությունը կայանում է նրանում, որ հաղորդագրությունը կարող է գաղտնագրվել հանրային բանալիով և վերծանել անձնական բանալիով: Սա նշանակում է, որ միայն անձնական բանալիի սեփականատերը կարող է վերծանել հաղորդագրությունը: Միևնույն ժամանակ, կարիք չկա անհանգստանալու գաղտնի բանալին երկու հաղորդակցվող կողմերին փոխանցելու համար: Այնուհետև վկայագիրը առարկայի հանրային բանալին է, որը լրացվում է իր տեղեկություններով և ստորագրվում սերտիֆիկացման մարմնի կողմից: Չեխիայի Հանրապետությունում սերտիֆիկացման մարմիններից մեկը, օրինակ, Č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. Ինչպես տեսնում եք ստորև ներկայացված նկարներում, OS X Mavericks 7.0.1-ում Safari 10.9.1-ը պարունակում է սխալ, մինչդեռ Safari-ում iOS 7.0.6-ում ամեն ինչ կարգին է:

Ռեսուրսներ: iMore- ը, Reuters
.