Кіріспе

Компьютерлік жүйелердегі қорғаныс қабаты

Компьютерлік ғылымда иерархиялық қорғаныс домендері, көбінесе қорғаныс сақиналары деп аталады, деректер мен функционалдылықты ақаулардан (қатеге төзімділікті арттыру арқылы) және қасақана зиянды әрекеттерден (компьютерлік қауіпсіздікті қамтамасыз ету арқылы) қорғау механизмі болып табылады. Компьютерлік операциялық жүйелер ресурстарға әртүрлі деңгейде қол жеткізуді қамтамасыз етеді. Қорғаныс сақинасы – компьютерлік жүйенің архитектурасындағы екі немесе одан көп иерархиялық деңгейлердің немесе артықшылықтардың бірі. Бұл әдетте, CPU архитектураларының кейбіреулерімен қамтамасыз етілетін, аппараттық немесе микрокод деңгейіндегі аппараттық қолдау арқылы іске асырылады, олар CPU-ның әртүрлі режимдерін ұсынады. Сақиналар иерархия бойынша орналасқан, ең жоғары артықшылықты (ең сенімді, әдетте нөл нөмірімен) ең төмен артықшылықтыдан (ең аз сенімді, әдетте ең жоғары сақина нөмірімен) бастап. Көптеген операциялық жүйелерде 0-шы сақина ең көп артықшылыққа ие деңгей болып табылады және физикалық жабдықпен, мысалы, белгілі бір CPU функционалдығымен (басқару тізілімдері сияқты) және I/O контроллерлерімен тікелей өзара әрекеттеседі. Виртуализацияның кеңінен таралуымен көптеген CPU гипервизор үшін тағы бір деңгейді (концептуалды түрде 1-ші сақина) қосты. Сыртқы сақинаның ішкі сақинаның ресурстарын белгіленген тәртіппен пайдалануына мүмкіндік беретін арнайы механизмдер қарастырылған, кездейсоқ пайдалануға жол берілмейді. Сақиналар арасындағы қол жеткізуді дұрыс шектеу, бір сақинадағы немесе артықшылық деңгейіндегі бағдарламалардың басқа сақинаға арналған ресурстарды дұрыс пайдаланбауының алдын алып, қауіпсіздікті арттыруға көмектеседі. Мысалы, 3-ші сақинадағы пайдаланушы бағдарламасы ретінде жұмыс істейтін шпиондық бағдарлама пайдаланушыны хабарламастан веб-камераны қосуына жол берілмеуі керек, өйткені аппараттық қол жеткізілім 1-ші сақинадағы құрылғы драйверлеріне арналған функция болуы тиіс. Жоғары нөмірленген сақиналарда жұмыс істейтін веб-браузерлер сияқты бағдарламалар желіге қол жеткізуді сұрауы керек, бұл ресурс төмен нөмірленген сақинамен шектелген.

Гипервизор режімі

Intel және AMD компанияларының соңғы процессорлары гипервизорға Ring 0 аппараттық кіруін басқару үшін x86 виртуализациялық нұсқауларын ұсынады. Олар өзара үйлесімсіз болғанымен, Intel VT-x (кодтық атауы "Vanderpool") және AMD-V (кодтық атауы "Pacifica") жаңа "Ring −1" деңгейін құрайды, соның арқасында қонақ опералық жүйе басқа қонақтарға немесе хост жүйеге әсер етпей, Ring 0 операцияларын түпкілікті түрде орындай алады. Виртуализация процесіне көмектесу үшін VT-x және SVM 0 деңгейінің астына жаңа артықшылық деңгейін қосады. Екеуі де гипервизор пайдалануына арналған, "Ring −1" деңгейінде ғана жұмыс істейтін тоғыз жаңа машиналық код нұсқауларын қосады.

Арнайылық деңгейі

x86 нұсқаулар жиынтығындағы артықшылық деңгейі процессорда қазіргі уақытта орындалып жатқан бағдарламаның жад аймақтары, I/O порттары және арнайы нұсқаулар сияқты ресурстарға қол жеткізуін басқарады. 4 артықшылық деңгейі бар, 0-ден бастап, ең жоғары артықшылықты, 3-ке дейін, ең төменгі артықшылықты. Көптеген қазіргі заманғы операциялық жүйелер ядро/атқарушы үшін 0 деңгейін, ал қолданбалық бағдарламалар үшін 3 деңгейін пайдаланады. n деңгейіне қол жетімді кез келген ресурс 0-ден n-ге дейінгі деңгейлерге де қол жетімді, сондықтан артықшылық деңгейлері сақиналар деп аталады. Төмен артықшылықты процесс жоғары артықшылықты процеске қол жеткізуге тырысқанда, жалпы қорғаныс қатесі туралы операциялық жүйеге хабарлама жіберіледі. Барлық төрт артықшылық деңгейін пайдалану міндетті емес. Microsoft Windows, macOS, Linux, iOS және Android сияқты кең таралған операциялық жүйелер көбінесе пагинация механизмін пайдаланады, онда артықшылық деңгейін анықтау үшін тек бір бит қолданылады – қадағалаушы немесе пайдаланушы (U/S биті). Windows NT екі деңгейлі жүйені қолданады. 8086-дағы нақты режимдегі бағдарламалар 0 деңгейінде (ең жоғары артықшылық деңгейі), ал 8086-дағы виртуалды режимдегі барлық бағдарламалар 3 деңгейінде орындалады. x86 ISA отбасы қолдайтын көптеген артықшылық деңгейлерін болашақта контейнерлеу және виртуалды машиналар үшін пайдалануға болады. Хост операциялық жүйенің ядросы толық артықшылықпен нұсқауларды қолдана алады (ядролық режим), ал виртуалды машинадағы немесе контейнердегі қонақ операциялық жүйеде жұмыс істейтін қолданбалар пайдаланушы режимінде артықшылықтың ең төменгі деңгейін пайдалана алады. Виртуалды машина мен қонақ операциялық жүйенің ядросы өздері аралық деңгейдегі нұсқау артықшылықтарын пайдалана алады, яғни қонақ операциялық жүйенің көзқарасы бойынша жүйелік шақырулар сияқты ядролық режимдегі операцияларды шақыру және виртуалды ету үшін.

ЖОЖК

IOPL (I/O Privilege level) туы - барлық IA 32 үйлесімді x86 процессорларында кездесетін ту. Ол FLAGS тіркеліміндегі 12 және 13 биттерді иеленеді. Қорғалған режимде және ұзақ режимде ол ағымдағы бағдарламаның немесе міндеттің I/O артықшылық деңгейін көрсетеді. Міндеттің немесе бағдарламаның ағымдағы артықшылық деңгейі (CPL) (CPL0, CPL1, CPL2, CPL3) I/O порттарына қол жеткізу үшін IOPL-ден кем немесе тең болуы керек. IOPL-ді POPF(D) және IRET(D) арқылы тек қана ағымдағы артықшылық деңгейі Ring 0 болғанда ғана өзгертуге болады. IOPL-ден өзге, TSS-дегі I/O порттарына рұқсаттар да міндеттің I/O портына қол жеткізу мүмкіндігін анықтауға қатысады.

Әр түрлі

x86 жүйелерінде x86 аппараттық виртуализациясы (VT-x және SVM) «сақина −1» деп, жүйелік басқару режимі «сақина −2» деп, ал Intel басқару тетігі мен AMD платформалық қауіпсіздік процессоры кейде «сақина −3» деп аталады.

Жабдықтардың ерекшеліктерін пайдалану

Көптеген CPU аппараттық архитектуралары олар әдетте жұмыс істейтін операциялық жүйелерден әлдеқайда көп икемділікті ұсынады. Күрделі CPU режимдерін тиімді пайдалану операциялық жүйе мен CPU арасындағы тығыз ынтымақтастықты қажет етеді, сондықтан OS-ті CPU архитектурасына тәуелді етеді. Егер OS және CPU бір-біріне арнайы жасалған болса, бұл мәселе емес (бірақ кейбір аппараттық мүмкіндіктер толыққанды пайдаланылмауы мүмкін), бірақ егер OS бірнеше түрлі CPU архитектураларымен үйлесімді болуға арналған болса, CPU режимдерінің көп бөлігі OS тарапынан назардан тыс қалуы мүмкін. Мысалы, Windows тек екі деңгейді (сақина 0 және сақина 3) пайдалануының себебі – бұрын қолдау көрсетілген кейбір аппараттық архитектуралар (мысалы, PowerPC немесе MIPS) тек екі артықшылық деңгейін іске асырған. Multics – нақты CPU архитектурасы үшін арнайы жасалған операциялық жүйе (ал ол өз кезегінде Multics үшін арнайы жасалған), және ол өзіне қол жетімді CPU режимдерін толыққанды пайдаланды. Дегенмен, бұл ережеден туындаған ерекшелік еді. Бүгінгі таңда OS пен аппараттық құралдар арасындағы осындай жоғары деңгейдегі өзара әрекеттесу, қауіпсіздік пен тұрақтылықтың әлеуетті артықшылықтарына қарамастан, көбінесе экономикалық тұрғыдан тиімді емес. Соңында, CPU-дың ерекше жұмыс режимдерінің мақсаты – бағдарламалық жасақтама арқылы жүйелік ортаның кездейсоқ немесе қасақана зақымдануына (және жүйелік қауіпсіздіктің тиісті бұзушылықтарына) қарсы аппараттық қорғаныспен қамтамасыз ету болып табылады. Жүйелік бағдарламалық жасақтаманың тек "сенімді" бөліктері ғана ядролық режимнің шектеусіз ортасында орындалуға рұқсат етіледі, және парадигмалық жобаларда тек қажет болған жағдайларда ғана. Барлық басқа бағдарламалық жасақтама бір немесе бірнеше пайдаланушы режимінде орындалады. Егер процессор пайдаланушы режимінде қателік немесе ерекше жағдай тудырса, көп жағдайда жүйелік тұрақтылыққа әсер етпейді; егер процессор ядролық режимде қателік немесе ерекше жағдай тудырса, көптеген операциялық жүйелер жүйені қалпына келтірілмейтін қатемен тоқтатады. Егер режимдердің иерархиясы болса (сақиналық қауіпсіздік), бір артықшылық деңгейіндегі қателіктер мен ерекше жағдайлар жоғарырақ нөмірленген артықшылық деңгейлерін ғана тұрақсыздандыруы мүмкін. Осылайша, 0 сақинадағы (ең жоғары артықшылыққа ие ядролық режимдегі) қателік бүкіл жүйені құлатады, бірақ 2 сақинадағы қателік тек 3 сақинаны және одан жоғары деңгейлерді, сондай-ақ ең көп дегенде 2 сақинаны әсер етеді. Режимдер арасындағы ауысулар, орындалу тізбегі жоғары артықшылық деңгейінен төмен артықшылық деңгейіне (мысалы, ядроден пайдаланушы режимдеріне) ауысқанда тізбектің қалауынша жүзеге асырылады, бірақ төмен артықшылық деңгейінен жоғары деңгейге ауысу тек арнайы нұсқауларды орындау немесе сыртқы үзілістерді қабылдау арқылы жүзеге асырылатын қауіпсіз, аппараттық бақыланатын "қақпалар" арқылы ғана мүмкін. Микроядролық операциялық жүйелер қауіпсіздік пен эстетикалық тұрғыдан артықшылықты режимде жұмыс істейтін кодтың мөлшерін азайтуға тырысады, бірақ соңында өнімділікті құрбан етеді.