ფილიალის პროგნოზიტორი არის CPU-ს თანამედროვე არქიტექტურის კრიტიკული კომპონენტი, რომელიც შექმნილია მუშაობის გასაუმჯობესებლად ფილიალების ინსტრუქციების მიმართულების სპეკულირებით (მაგ., if-else განცხადებები) სანამ ისინი გადაწყვეტენ. ეს სპეკულაცია CPU-ს საშუალებას აძლევს წინასწარ მოიძიოს და შეასრულოს ინსტრუქციები პროგნოზირებულ გზაზე, რითაც ამცირებს აღქმულ შეყოვნებას და აუმჯობესებს საერთო გამტარუნარიანობას. თუმცა, მუშაობის ეს ოპტიმიზაცია წარმოგიდგენთ პოტენციურ დაუცველობას, რომელთა გამოყენება შესაძლებელია CPU-ის დროის შეტევებში, განსაკუთრებით მგრძნობიარე ინფორმაციის გაჟონვის კონტექსტში.
ფილიალის პროგნოზირება მუშაობს ფილიალების შედეგების ისტორიის შენარჩუნებით და ამ ისტორიის გამოყენებით მომავალი ფილიალების პროგნოზირებისთვის. როდესაც ფილიალის ინსტრუქცია გვხვდება, პროგნოზიტორი იყენებს ამ ისტორიულ მონაცემებს, რათა გამოიცნოს განშტოება იქნება თუ არა აღებული. თუ პროგნოზი სწორია, CPU აგრძელებს შესრულებას შეფერხების გარეშე. თუ არასწორია, CPU უნდა დააბრუნოს და შეასრულოს სწორი გზა, რაც იწვევს შესრულების ჯარიმას. ეს ჯარიმა, თუმცა მცირე, შეიძლება შეფასდეს და გამოიყენოს თავდამსხმელები.
თავდამსხმელებს შეუძლიათ მანიპულირება განშტოების პროგნოზით, რათა შექმნან გაზომვადი დროის სხვაობა სწორად და არასწორად პროგნოზირებულ ტოტებს შორის. ეს განსხვავება შეიძლება გამოყენებულ იქნას პროგრამის შესრულების გზის დასადგენად, რომელსაც შეუძლია, თავის მხრივ, გამოავლინოს მგრძნობიარე ინფორმაცია. ასეთი თავდასხმის ერთ-ერთი ყველაზე ცნობილი მაგალითია Spectre დაუცველობა, რომელიც იყენებს სპეკულაციურ შესრულებას და ფილიალების პროგნოზირებას არაავტორიზებული მეხსიერების ადგილებზე წვდომისთვის.
ტიპიური Spectre შეტევის დროს თავდამსხმელი ჯერ ავარჯიშებს განშტოების პროგნოზირს, რათა დაიცვას კონკრეტული ნიმუში. ტრენინგის ეს ეტაპი მოიცავს განშტოების ინსტრუქციების თანმიმდევრობის შესრულებას, რომელიც განაპირობებს პროგნოზირს კონკრეტული პროგნოზის გაკეთებას. მას შემდეგ, რაც წინასწარმეტყველი გაწვრთნის, თავდამსხმელი ახორციელებს მსხვერპლის კოდის სეგმენტს, რომელიც მოიცავს საიდუმლო მონაცემებზე დამოკიდებულ ფილიალს. თუ წინასწარმეტყველი აკეთებს არასწორ პროგნოზს თავდამსხმელის ვარჯიშზე დაყრდნობით, CPU სპეკულაციურად შეასრულებს ინსტრუქციებს, რომლებიც წვდებიან მეხსიერებას საიდუმლო მონაცემებზე დაყრდნობით. მიუხედავად იმისა, რომ ეს სპეკულაციური ინსტრუქციები საბოლოოდ უგულებელყოფილია, ისინი ტოვებენ კვალს CPU-ის ქეშში.
შემდეგ თავდამსხმელს შეუძლია გაზომოს მეხსიერების სხვადასხვა ადგილას წვდომის დრო, რათა დაადგინოს, რომელ მონაცემებზე იყო სპეკულაციური წვდომა. ეს ტექნიკა, რომელიც ცნობილია როგორც ქეში დროის შეტევა, საშუალებას აძლევს თავდამსხმელს გამოიტანოს საიდუმლო მონაცემები დაკვირვებული დროის განსხვავებების საფუძველზე. ასეთი თავდასხმის ძირითადი ნაბიჯებია:
1. ფილიალის წინასწარმეტყველის ტრენინგი: თავდამსხმელი აწარმოებს ინსტრუქციების კონტროლირებად თანმიმდევრობას, რომელიც გავლენას ახდენს ფილიალის პროგნოზირების მდგომარეობაზე. მაგალითად, განშტოების ინსტრუქციის განმეორებით შესრულება თანმიმდევრული შედეგით (მაგ., ყოველთვის მიღებული) განაპირობებს წინასწარმეტყველს, რომ მოელოდეს ამ შედეგს მომავალ შესრულებაში.
2. სპეკულაციური აღსრულების გააქტიურება: თავდამსხმელი აწარმოებს მსხვერპლის კოდს ფილიალის ინსტრუქციით, რომელიც დამოკიდებულია საიდუმლო მონაცემებზე. თავდამსხმელის წინასწარი ვარჯიშის გამო, ფილიალის პროგნოზირებადი სპეკულაციურად ახორციელებს არასწორ გზას, რაც გულისხმობს მეხსიერებაში წვდომას საიდუმლო მონაცემებზე დაყრდნობით.
3. ქეში წვდომის დროის გაზომვა: სპეკულაციური შესრულების შემდეგ, თავდამსხმელი ზომავს დროს, რომელიც სჭირდება მეხსიერების კონკრეტულ ადგილებზე წვდომას. უფრო სწრაფი წვდომის დრო მიუთითებს იმაზე, რომ მონაცემები იმყოფება ქეშში, რაც ნიშნავს, რომ მასზე სპეკულაციური წვდომა იყო. ამ დროის გაანალიზებით, თავდამსხმელს შეუძლია საიდუმლო მონაცემების დასკვნა.
ამის საილუსტრაციოდ კონკრეტული მაგალითით, განიხილეთ სცენარი, სადაც საიდუმლო მონაცემები განსაზღვრავს მასივის წვდომის ინდექსს ფილიალში. თავდამსხმელი ჯერ ავარჯიშებს განშტოების პროგნოზირს, რათა მიიღოს განშტოების გარკვეული მიმართულება. როდესაც მსხვერპლის კოდი გადის, ფილიალის პროგნოზირებადი სპეკულაციურად ახორციელებს მასივის წვდომას გაწვრთნილი მიმართულების საფუძველზე. თუ სპეკულაცია გულისხმობს მასივის კონკრეტულ ელემენტზე წვდომას, შესაბამისი ქეშის ხაზი იტვირთება. შემდეგ თავდამსხმელს შეუძლია განახორციელოს მეხსიერების დროული წვდომის სერია, რათა დადგინდეს, რომელი ქეშის ხაზებია ჩატვირთული, რითაც გამოიტანს საიდუმლო ინდექსს.
ასეთი თავდასხმების შერბილება რამდენიმე სტრატეგიას მოიცავს. აპარატურაზე დაფუძნებული გადაწყვეტილებები მოიცავს იზოლაციის გაუმჯობესებას სპეკულაციური და არასპეკულაციური შესრულების ბილიკებს შორის და იმის უზრუნველყოფას, რომ სპეკულაციური შესრულება არ იმოქმედებს გაზიარებულ რესურსებზე, როგორიცაა ქეში. პროგრამულ უზრუნველყოფაზე დაფუძნებული გადაწყვეტილებები მოიცავს ისეთ ტექნიკას, როგორიცაა "ღობე" ინსტრუქციების ჩასმა, რათა თავიდან იქნას აცილებული სპეკულაციური შესრულება კოდის გარკვეულ წერტილებში, ან მუდმივი დროის პროგრამირების პრაქტიკის გამოყენებას იმის უზრუნველსაყოფად, რომ შესრულების დრო არ არის დამოკიდებული საიდუმლო მონაცემებზე.
ფილიალების პროგნოზირებზე დაფუძნებული დროის შეტევების სირთულე და დახვეწილობა ხაზს უსვამს მუდმივი კვლევისა და განვითარების აუცილებლობას როგორც ტექნიკის, ისე პროგრამული უზრუნველყოფის უსაფრთხოებაში. როგორც CPU არქიტექტურა განაგრძობს განვითარებას, ასევე უნდა იყოს სტრატეგიები დაცვის ამ და სხვა ფორმების გვერდითი არხის შეტევებისგან.
სხვა ბოლოდროინდელი კითხვები და პასუხები CPU დროის შეტევები:
- რა არის გარკვეული გამოწვევები და კომპრომისები, რომლებიც დაკავშირებულია ტექნიკისა და პროგრამული უზრუნველყოფის შერბილების განხორციელებაში დროის შეტევების წინააღმდეგ, სისტემის მუშაობის შენარჩუნებისას?
- როგორ შეუძლია მუდმივი დროის პროგრამირება დაეხმაროს კრიპტოგრაფიულ ალგორითმებში დროული შეტევების რისკის შემცირებას?
- რა არის სპეკულაციური შესრულება და როგორ უწყობს ხელს ის თანამედროვე პროცესორების დაუცველობას Spectre-ის მსგავსი შეტევების დროის მიმართ?
- როგორ იყენებენ დროის შეტევები შესრულების დროის ცვალებადობას სისტემისგან მგრძნობიარე ინფორმაციის გამოსატანად?
- რა არის დროის შეტევა?