რეკლამის დახურვა

რამდენიმე დღის წინ 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 ხელის ჩამორთმევა. ამ ეტაპზე თქვენი აიფონი ამოწმებს, რომ არის მოცემულ სერვერთან კომუნიკაცია და ამავდროულად, ასიმეტრიული დაშიფვრის დახმარებით დგინდება სიმეტრიული გასაღები, რომელიც გამოყენებული იქნება ყველა შემდგომი კომუნიკაციისთვის. სიმეტრიული დაშიფვრა უფრო სწრაფია. როგორც უკვე დაიწერა, შეცდომა უკვე ხდება სერვერის გადამოწმების დროს. მოდით შევხედოთ კოდს, რომელიც იწვევს ამ სისტემის დაუცველობას.

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-ში ყველაფერი კარგადაა.

რესურსები: მე უფრო, Reuters
.