ვინაიდან პოსტი საკმაოდ დიდი გამომივიდა, გადავწყვიტე ცალკე თემა გამეხსნა, თავდაპირველი თემა (ჭორაობის თემა) რო არ დავანაგვიანო. პოლიტგანყში არ მაქვს თემის გახსნის უფლება, იმ თემაში დავლინკავ ამას და ვისაც უნდა და არ დაეზარება წაიკითხოს. ვინც არ არის საქმის კურსში, დისკუსია გაიმართა პოლიტგანყში თემაში გადავდივარ Telegram-ზე, მივაჯვი Skype-ს და Viber-ს, სადაც იუზერთა სიბნელემ მაიძულა ეგზომ დიდი პოსტი გამომეცხო. Ser_Waymar_Royceკატანკაძაან კი მეზარება ხოლმე ტრაქტორისტთან ბირთვულ ფიზიკაზე საუბარი, მაგრამ რადგან არ იშლით:
პროცესს აღვწერ ტექნიკურად. ადამიანს რომელიც ცდილობს საპირისპიროს დამტკიცებას (თუნდაც თეორიულ დონეზე დაშვებას) მოუწევს ჩემს მსჯელობაში შეცდომის პოვნა. მოკლედ სიტუაცია შემდეგია:
სკაიპი/ვაიბერი/ნებისმიერი ნორმალური მესენჯერი რომელიც ტრაფიკის შიფრაციას ახდენს შეგვიძლია ავიღოთ მაგალითად.
არის სერვერი და ორი კლიენტი - A და B, რომელთაც სურთ დაკავშირება ერთმანეთთან. პროცედურა შემდეგია: A უკავშირდება სერვერს დაცული არხით, ანუ SSL-ის გამოყენებით, და აცნობებს რომ სურს B-სთან კავშირის დამყარება. სერვერი უგზავნის მას შიფრირების გასაღებს. ამ დროს სერვერი უკავშირდება B-ს ასევე SSL კავშირით და აძლევს იმავე შიფრაციის გასაღებს. ამის შემდეგ A და B ერთმანეთს უკავშირდებიან და მთელი ტრაფიკი იშიფრება ამ გასაღებით, რომელიც ორივემ სერვერისგან მიიღო. ამ ტრაფიკის დეშიფრაციის ერთადერთი გზა არის ამ გასაღების მოპოვება. აქამდე გასაგებია ხო? გავაგრძელოთ.
შიფრაციის გასაღების მისაღებად საჭიროა კლიენტების სერვერთან კომუნიკაციის გადაჭერა, ანუ SSL ტრაფიკის გაშიფრვა. იგულისხმება რომ მკითხველს აქვს მინიმალური წარმოდგენა SSL-ზე და ზოგადად PKI-ზე, და არ არის საკამათო ის ფაქტი რომ SSL კავშირის გაშიფრვა შესაძლებელია მხოლოდ MITM (Man-In-The-Middle) შეტევის შემთხვევაში, ხოლო ეს უკანასკნელი განხორციელებადია მხოლოდ სპეციფიურ პირობებში. რა პირობებზეა საუბარი? კერძოდ, იმისათვის რომ ორ ენდპოინტს შორის ჩაჯდეს შემტევი, SSL კავშირის შემთხვევაში შესაძლებელია მხოლოდ მაშინ, თუ ის წარმატებით მოახერხებს კლიენტის წინაშე იმპერსონაციას როგორც სერვერი, და სერვერის წინაშე იმპერსონაციას როგორც კლიენტი.
გადახვევა პირველი: რას გულისხმობს SSL კომუნიკაცია? მოგიწოდებთ დაგუგლოთ თუ არ იცით, ორი სიტყვით კი აქ აღვწერ ძალიან მოკლედ. სერვერი უგზავნის კლიენტს თავის Public Key-ს, კლიენტი შიფრავს თავის პასუხს ამ Public Key-თ და უგზავნის სერვერს. მთელი იდეა (და გენიალურობა) იმაშია რომ ამ Public Key-თ დაშიფრული ინფორმაციის დეშიფრირება შესაძლებელია მხოლოდ შესაბამისი Private Key-ს გამოყენებით, რომელიც მხოლოდ სერვერს აქვს და ქსელში უბრალოდ არ გადაიცემა. ეს უზრუნველყოფს იმას რომ სწორად შედგენილი SSL კავშირის შემთხვევაში ტრაფიკის სრული წაკითხვის დროსაც კი შეუძლებელია დეშიფრაცია, თუ სერვერის Private Key არ არის გაჟონილი. აქამდე დეტსკი სადია და იმედია ყველამ გავიგეთ. გავაგრძელოთ.
გადახვევა მეორე: განვიხილოთ როგორ ხდება MITM შეტევა SSL კავშირის დროს. სერვერის წინაშე იმპერსონაცია (მისი მოტყუება თითქოს კლიენტს წარმოვადგენთ) ტრივიალურია, თუ მოვახერხებთ კლიენტის წინაშე სერვერად იმპერსონაციას. SSL-ის გამოყენების ტიპიური სცენარი, მაგალითად ბრაუზერში HTTPS კავშირის დროს არის შემდეგი: სერვერი უგზავნის კლიენტს X.509 სერტიფიკატს საკუთარი ვალიდურობის დასადასტურებლად (მოწმდება უშუალოდ დომენის ვალიდურობა). სერტიფიკატის მფლობელს ამ შემთხვევაში არ აქვს მნიშვნელობა, რადგად სერტიფიკატი კლიენტზე მოწმდება კლიენტზე ინსტალირებული სერტიფიკატთა დამმოწმებელ ორგანოთა (Certificate Authority - CA) ჯაჭვის საშუალებით: თუ სერტიფიკატი გაცემულია იმ CA-ს, რომელსაც თავის მხრივ ჰყავს დამმოწმებელი კლიენტზე არსებული CA იერარქიის ფარგლებში, სერთიფიკატი ითვლება ვალიდურად. ანუ მაგალითად თუ შემტევი მოახერხებს რაიმე self-signed საკუთარი სერთიფიკატის (რომლის Private Key-ც გააჩნია) ინსტალირებას კლიენტზე როგორც root CA, მაშინ ის შეძლებს HTTPS კავშირის დროს შუაში ჩადგომას და სერვერის სახელით იმპერსონაციას, რადგან მოახდენს აღნიშნული დომენისთვის საკუთარი სახელით სერთიფიკატის გენერირებას, რომელიც კლიენტზე უჩუმრად გაივლის ვალიდაციას, რადგან შესაბამისი CA იქნება მანამდე დაყენებული. ეს ყველაფერი გლეხური ენით რო ვთქვათ და ჩვეულებრივი იუზერისთვის შევაჯამოთ: თუ თქვენ ხართ რაიმე კორპორატიულ გარემოში (მუშაობთ კომპანიაში რომელსაც თავისი IT ყავს), და თქვენი სისადმინი თქვენს კომპში დააყენებს სპეციალურ სერთიფიკატს (დაამატებს საჭირო ადგილას ერთ პატარა ფაილს), მას შეეძლება თეორიულად წაიკითხოს თქვენი კომპიუტერიდან დაშიფრული კომუნიკაციაც, ანუ მაგალითად თქვენი GMAIL კომუნიკაცია და ა.შ. ეს რაც შეეხებოდა ზოგადად SSL-ზე MITM შეტევას. ეხლა დავუბრუნდეთ ჩვენს შემთხვევას.
ჩვენს შემთხვევაში კლიენტი წარმოადგენს არა ბრაუზერს (რომელსაც არა აქვს ცოდნა კონკრეტული სერვერის შესახებ), არამედ კონკრეტულ აპლიკაციას, რომელმაც ზუსტად იცის რომელ სერვერს უნდა დაუკავშირდეს, და შესაბამისად - უკვე აქვს წარმოდგენა იმის შესახებ თუ ვინ უნდა იყოს ამ სერვერის სერთიფიკატის მფლობელი. სერთიფიკატის ვალიდაცია ამ შემთხვევაში კლიენტზე (კომპიუტერი იქნება ეს თუ მობილური) არსებული CA ჯაჭვის მეშვეობით არ ხდება (რომელშიც როგორც აღვნიშნე შეიძლება ვინმემ რამე ჩაამატოს). არამედ,
კლიენტს უკვე აქვს თავისი სერვერის Public Key ჩაყოლებული და კავშირის ინიციალიზაციისას საკუთარი მონაცემების შიფრაციას პირდაპირ ამ გასაღებით ახორციელებს, ამის დეშიფრირება კი მხოლოდ სერვერს შეუძლია, რადგან მხოლოდ მას აქვს შესაბამისი Private Key! რა უნდა ქნას შუაში მდგომმა ამ შემთხვევაში? მან დავუშვათ იცის სერვერის Public Key, მაგრამ კლიენტის პაკეტს ის ვერ გაშიფრავს, რადგან როგორც ვთქვი სერვერს აქვს მხოლოდ შესაბამისი Private Key. ის ვერ შეძლებს კლიენტს დაუბრუნოს ადეკვატური პასუხი, შესაბამისად ის ვერ შეძლებს სერვერად იმპერსონაციას. უფრო სწორად მას შეუძლია ჩვეულებრივი პროქსის როლი შეასრულოს, მაგრამ კომუნიკაციის დეშიფრირება შეუძლებელია.
ეს ყველაფერი ეფუძნება არა რაიმე კომპანიის (სკაიპი, ვაიბერი, თუ სხვა) რესურსებს, ან მათი პროგრამისტების გამორჩეულ გენიალურობას. ეს ყველაფერი ეფუძნება არც ისე რთულ (და ამ დროს - გენიალურ) მათემატიკურ (კრიპტოგრაფიულ) აპარატს, რომელსაც ზოგადად ასიმეტრიული კრიპტოსისტემა ქვია. ეს არის სისტემა, სადაც
ერთი გასაღებით (Public Key) დაკეტილი კარის გაღება ამავე გასაღებს კი არ შეუძლია, არამედ მის შესაბამის სხვა გასაღებს (Private Key).შესაბამისად არათუ პრაქტიკულად, არამედ
თეორიულად ხდება შეუძლებელი ასეთი კომუნიკაციის დეშიფრირება, თუ რათქმაუნდა თავად სერვერის მფლობელმა არ გაამჟღავნა თავისი Private Key.
იმედია ტყუილად არ ვწერე ამდენი და ვინმესთვის მაინც გახდა გასაგები რატომ ვერ გახსნიან ასეთ ტრაფიკს ვერასდროს ქართული სპეცსამსახურები. თუ ვინმეს შეკითხვა აქვს ზემოთთქმულთან დაკავშირებით, მზად ვარ ვუპასუხო. თუ ვინმეს შეუძლია შემეკამათოს ზემოთქმულის ჭეშმარიტების თაობაზე, მზად ვარ ვიკამათო. ნებისმიერი საშუალო დონის კრიპტოგრაფი დაადასტურებს რო ზემოთქმული არის ორჯერ ორი (თუარა ხუთჯერ ხუთი მაინც

) დანარჩენი ყველაფერი იმ თემაში გამოთქმული ყოვლად ტექნიკურად დაუსაბუთებელი აზრები არის ჭორაობა და ბაბუშკინი სკაზკი.
და ბოლოს - მოსმენები ხდება და ხდება კონკრეტული კომპების (და არა მობილურების!) დავირუსების გზით

მე ამ პოსტში ვისაუბრე ქსელური ტრაფიკის მოსმენაზე, ანუ თქვენს მოსმენაზე თქვენს კომპში/მობილურში ვირუსის წინასწარი ინსტალირების გარეშე. თუ წინასწარ ჩაგიყენეს "ჟუჩოკი" მაშინ რაზე ვსაუბრობთ საერთოდ

იმასაც ხაზს ვუსვამ რომ ასეთი ვირუსის ჩაყენება "დაურუთავ" სისტემებში ასევე გამორიცხულია. და "ბატარიაში ჩაყოლებული ჟუჩოკების" ვისაც გჯერათ, თქვენ კარგად იყავით ასი წელი