Кіріспе

OpenBSD операциялық жүйесінде қолданылатын қауіпсіздік мүмкіндіктері

OpenBSD операциялық жүйесі қауіпсіздікке және қауіпсіздік мүмкіндіктерін дамытуға бағытталған. Автор Майкл В. Лукастың айтуынша, OpenBSD "кез келген лицензиялық шарттар бойынша қол жетімді ең қауіпсіз операциялық жүйе деп кеңінен мойындалған".

API және құрастыру өзгерістері

Багтар мен қауіпсіздік кемшіліктері көбінесе бағдарламашылардың қателіктерінен туындайды. Қателердің кең таралған себебі – C бағдарламалау тіліндегі strcpy және strcat жол функцияларын дұрыс пайдаланбау. strncpy және strncat екі таралған баламасы бар, бірақ оларды түсіну қиын және оларды қате қолдану оңай, сондықтан OpenBSD әзірлеушілері Тодд К. Миллер мен Тео де Раадт strlcpy және strlcat функцияларын жасады. Бұл функциялар бағдарламашыларға буферлерді толық емес қалдыруға немесе олардың шегінен асып кетуіне мүмкіндік бермеуді қиындатуға арналған. Олар NetBSD және FreeBSD жобаларында қабылданды, бірақ GNU C кітапханасында қолданылмады. OpenBSD жүйесінде, strcpy, strcat немесе sprintf сияқты қауіпсіз емес жолдармен жұмыс істейтін функциялар табылғанда ескерту шығару үшін байланыстырғыш өзгертілді. OpenBSD кодындағы осы функциялардың барлық нұсқалары ауыстырылды. Сонымен қатар, компиляция кезінде басқа да кең таралған бағдарламалау қателіктерін анықтау үшін OpenBSD-ге статикалық шекара тексеру құралы қосылды. OpenBSD жобасымен әзірленген қауіпсіздікке қатысты басқа API-лер issetugid және arc4random.

Ядроны кездейсоқ таңдау

2017 жылдың маусым айындағы электрондық хатында Тео де Радт тұрақты жүйелердің бір кемшілігі – олардың бірнеше ай бойы үздіксіз жұмыс істеу мүмкіндігі екенін айтты. Ядрода кең ауқымды кездейсоқтық болғанымен, кейбір маңызды адрестер өзгермейді. Ағымдағы жоба сілтеу құралын (linker) өзгертеді, осылайша әр қосылғанда ядро да, басқа кездейсоқтықтар да қайтадан сілтеленеді. Бұл ядролық ASLR-дан (Address Space Layout Randomization) өзгеше; электрондық хатында ол «Нәтижесінде, әрбір жаңа ядро бірегей болады. Функциялар мен деректер арасындағы салыстырмалы арақашықтықтар бірегей. [Ағымдағы] өзгеріс – әр қайта жүктеуде жаңадан сілтелген ядроны қосуды қамтамасыз ететін негізгі құрылым, осылайша жаңа кездейсоқ ядро құрастырылады. Жылдам машинада бұл секундтан да аз уақыт алады. Қайта жүктеу жаңа ядроны іске қосады, ал келесі қосылу үшін тағы бір ядро құрылады. Ядро ішіндегі функциялар арасындағы айырмашылықтар шабуылшы күткендей болмайды, сондықтан оған жақсы ақпаратты алу қажет болады».

Жадыны қорғау

OpenBSD операциялық жүйесі буфер асып кету немесе бүтін сандар асып кету сияқты шабуылдардан қорғауға көмектесетін бірнеше технологияларды біріктіреді. ProPolice – Хироаки Этох әзірлеген GCC кеңейтімі. Ол қолданбаларды стек-смашинг шабуылдарынан қорғау үшін жасалған. Ол мұны бірқатар операциялар арқылы жасайды: жергілікті стек айнымалылары буферлерді көрсеткіштерден кейін орналастыру үшін қайта реттеледі, осылайша буфер асып кету жағдайында олардың зақымдануынан қорғалады; функция аргументтерінің көрсеткіштері жергілікті буферлерден бұрын орналастырылады; және жергілікті буферлерден кейін «канар» мәні орналастырылады, ол функция аяқталған кезде кейде буфер асып кетуін анықтау үшін пайдаланылуы мүмкін. ProPolice автоматты эвристикалық әдістерге негізделген буферді қорғауды немесе қорғамауды таңдайды, бұл оның осалдығын бағалайды және қорғаудың жалпы өнімділік шығынын азайтады. Ол 2002 жылдың желтоқсанында OpenBSD GCC нұсқасына енгізілді және алғаш рет OpenBSD 3.3 нұсқасында қолжетімді болды; ол 3.4 нұсқасында ядроға қолданылды. Кеңейту OpenBSD қолдайтын барлық процессор архитектураларында жұмыс істейді және әдепкі бойынша қосылған, сондықтан кез келген C коды пайдаланушының араласуынсыз қорғалады. 2004 жылдың мамыр айында OpenBSD SPARC платформасында StackGhost түрінде қосымша стек қорғанысын алды. Бұл буфер асып кетуді пайдалануды болдырмауға көмектесетін SPARC архитектурасының мүмкіндіктерін пайдаланады. SPARC64 қолдауы 2005 жылдың наурыз айында қосылды. OpenBSD 3.4 W^X енгізді, бұл жадты басқару схемасы жадтың жазуға немесе орындалуға болатындығын, бірақ ешқашан екеуін де қамтамасыз етпейтінін қамтамасыз етеді, бұл буфер асып кетуінен қорғанудың тағы бір қабатын ұсынады. Бұл x86 64 сияқты платформада іске асыру оңай болғанымен, OpenBSD – жалпы i386 платформасында осы мүмкіндікті қолдайтын санаулы операциялық жүйелердің бірі, себебі ол парақ бойынша орындалу бақылауларына ие емес. 3.8 нұсқасының даму кезеңінде malloc жадты басқару функцияларына өзгерістер енгізілді. Әдеттегі Unix операциялық жүйелерінде malloc Unix дерек сегментін кеңейту арқылы көбірек жадты бөледі, бұл практика қауіпсіздік проблемаларына қарсы күшті қорғанысты іске асыруды қиындатады. OpenBSD-дегі malloc іске асырылуы mmap жүйелік шақыруын пайдаланады, ол кездейсоқ жад мекенжайларын қайтарады және әртүрлі аймақтар бір-бірімен қатар карталанбауын қамтамасыз етеді. Сонымен қатар, ортақ аймақтардағы кіші блоктарды бөлу енді кездейсоқ болып табылады және free функциясы жадты процеске картаға түсірудің орнына ядроға дереу қайтару үшін өзгертілді. Дамуға көмектесу үшін қосымша, міндетті емес тексерулер де қосылды. Бұл мүмкіндіктер бағдарламалық қателерді анықтауды жеңілдетеді және оларды пайдалануды қиындатады: жад зақымдалған немесе жарамсыз кіру назарда қалмайтын орнына, олар көбінесе сегментация қатесіне және процестің тоқтатылуына әкеледі. Бұл OpenBSD 3.8-де жұмыс істейтін бағдарламалық жасақтамамен, әсіресе буфердің басынан немесе соңынан тыс мәліметтерді оқумен байланысты бірнеше мәселелерді анықтады, бұл бұрын тікелей анықталмайтын, бірақ енді қате тудыруы мүмкін қате түрі. Бұл мүмкіндіктерді іске асыру үш жылдан астам уақыт алды, бірақ өнімділікке елеулі әсер етпеді.

Криптография және кездейсоқ

OpenBSD жобасының мақсаттарының бірі – негізгі операциялық жүйеге күшті криптография құралдарын және бағдарламалық жасақтаманы интеграциялау. Осы мақсатта, төменгі деңгейдегі бірқатар мүмкіндіктер ұсынылады, соның ішінде берік псевдокезеңдік сандардың көзі; криптографиялық хэш функциялары мен түрлендірулер; және криптографиялық аппараттық қолдау (OpenBSD Cryptographic Framework). Бұл мүмкіндіктер OpenBSD-де кеңінен қолданылады, соның ішінде Брюс Шнайердің Blowfish блок шифрінен алынған bcrypt парольді хэштеу алгоритмі, ол CPU-ға үлкен жүктеме түсіретін Blowfish кілт кестесін пайдаланады, бұл күш қолданып шабуыл жасауды қиындатады. OpenBSD 5.3 нұсқасында толық дискіні шифрлеу мүмкіндігі енгізілді, бірақ оны OpenBSD орнату кезінде қосу үшін пайдаланушы орнатушыдан шығып, бірнеше командаларды қолмен енгізуі қажет болды. OpenBSD 7.3 нұсқасынан бастап, орнатушы қолмен араласусыз, басшылықпен жүргізілетін процедура арқылы толық дискіні шифрлеуді қосуды қолдайды. Парольдер сияқты құпия ақпаратты дискіге ағып кетуден қорғау үшін, олар көптеген жылдар бойы сақталуы мүмкін, OpenBSD алмасу кеңістігін шифрлейді. Алмасу кеңістігі әрқайсысына жеке шифрлеу кілті тағайындалған көптеген кішкентай аймақтарға бөлінеді, кілттер кездейсоқ түрде автоматты түрде құрылады, пайдаланушыдан ешқандай кіріс талап етілмейді, толығымен жадта сақталады және гибернация кезінен басқа дискке жазылмайды. Аймақтағы деректер қажет болмай қалғанда, OpenBSD шифрлеу кілтін жояды, сол аймақтағы деректерді пайдасыз қалдыққа айналдырады. Бұл мүмкіндікті бір sysctl конфигурация параметрін пайдалану арқылы қосуға болады және алдын ала орнатуды, дискіні бөлуді немесе бөлімдерге қатысты параметрлерді өзгертуді қажет етпейді. Сонымен қатар, шифрлеу параметрлерін таңдау мүмкіндігі жоқ (мысалы, алгоритм немесе кілт ұзындығы), өйткені күшті параметрлер әрқашан қолданылады. Бұл мүмкіндіктің зияны жоқ және функционалдылығы төмендемейді, өйткені алмастырылған процестерге қол жеткізу үшін қолданылатын шифрлеу кілттері компьютердің құлауы кезінде ғана жоғалады (мысалы, қуатты жоғалту), содан кейін барлық операциялық жүйелер жадтың және алмасу кеңістігінің бұрынғы мазмұнын тастайды, және гибернация бұл мүмкіндікпен әдеттегідей жұмыс істей береді. Бұл мүмкіндік OpenBSD 3.8 (2005 жылдың қарашасында шығарылған) және одан кейінгі нұсқаларында әдепкі бойынша қосулы болады. 2022 жылға қарай OpenBSD диск шифрлаудан және пайдаланушының паролінен тәуелсіз алмасуды шифрлейтін жалғыз танымал операциялық жүйе болып қала береді. (Windows пайдаланушы интерфейсінде көрсетілмейтін конфигурация параметрлерін ауыстыруды талап етеді, ал macOS, FreeBSD және Linux негізделген барлық операциялық жүйелер алмасуды шифрлеу үшін қолданыстағы дискіні шифрлеу мүмкіндіктеріне сенеді, олар көбінесе (а) пайдаланушы қолмен қосуы керек, (б) орнатуды талап етеді (егер дискіні шифрлеу операциялық жүйені орнату кезінде таңдалмаса), бұл OpenBSD-де алмасуды шифрлеуге қарағанда қиынрақ, және (с) пайдаланушы берген парольді пайдаланады, оны пайдаланушылар есте сақтауы керек және ол әлсіз немесе болжамды болуы мүмкін немесе тіпті пайдаланушылардан алынуы мүмкін.) Желілік стек қауіпсіздікті арттыру және шабуылдаушыға пайдалы болуы мүмкін әртүрлі мәндердің болжамдылығын азайту үшін кездейсоқ пайдалануды кеңінен қолданады, соның ішінде TCP бастапқы реттілік нөмірлері мен уақыт белгілері және уақытша бастапқы порттар. Желінің тұрақтылығы мен қол жетімділігін арттыру үшін бірқатар мүмкіндіктер де қосылған, соның ішінде ICMP-мен және CARP және pfsync сияқты артық бағдарламалық қамтамасыз етумен байланысты проблемаларға қарсы шаралар. Бұл жоба 1999 жылы SSH шифрланған демоны пайдасына жай мәтіндік telnet демонын өшіруді бірінші болып жасады және IPsec сияқты басқа да интеграцияланған криптографиялық бағдарламалық қамтамасыз етуді ұсынады. Telnet демоны OpenBSD 3.8 нұсқасы шығарылғанға дейін 2005 жылы OpenBSD-ден толықтай алынып тасталды. OpenBSD жобасы файлдарды криптографиялық түрде қол қою және тексеру үшін өз пайдалы құралын, signify-ді ойлап тапты, OpenPGP және GnuPG сияқты қолданыстағы стандарттар мен бағдарламалық жасақтаманы пайдаланбады. signify құралының авторы Тед Унангст 2015 жылы OpenPGP және GnuPG туралы былай деді: "Мен бұрынғы құралдарды пайдаланғанда маған күрделілік, сапа және тағы да күрделілік алаңдатып еді". Керісінше, басқа да бос бағдарламалық жасақтаманы қолданатын операциялық жүйелер және қауіпсіздікке бағытталған бағдарламалық жасақтама шығарылымды тексеру үшін OpenPGP-ді пайдаланады, және 2022 жылға дейін осылай істей береді, соның ішінде: Debian, басқа операциялық жүйелердің негізі ретінде де қолданылатын танымал операциялық жүйе; Kali Linux, ену сынағы, қауіпсіздік зерттеулері, цифрлық криминалистика және кері инженерия үшін арналған мамандандырылған операциялық жүйе; Qubes OS, қауіпсіздікке бағытталған операциялық жүйе; Tor Browser, анонимдік веб-шолушысы; SecureDrop, журналистер мен хабар берушілердің интернет арқылы ақпаратты қауіпсіз және анонимді түрде алмасуына арналған бағдарламалық пакет; және VeraCrypt, ағымдағы шифрлеу және толық дискіні шифрлеуге арналған бағдарлама.

X11

X11 OpenBSD-де, X серверінің де, X клиенттерінің де әдетте тікелей жад немесе аппараттық құқықтары жоғарылатылмайды: X-ті Intel(4) немесе Radeon(4) драйверлерімен іске қосып жатқанда, олар әдетте негізгі аппараттықпен Тікелей Рендерингті Басқару(4) ядролық интерфейсі арқылы ғана өзара әрекеттеседі, сондықтан төменгі деңгейдегі жад/аппараттыққа қол жеткізуді тек ядро ғана басқарады. WSFB сияқты басқа драйверлер де ұқсас схеманы қолданады. Осы себепті, OpenBSD-дегі X11 кейбір басқа жүйелердегідей және бұрынғыдай, пайдаланушы/root бағдарламаларына төменгі деңгейдегі жадты немесе аппараттыққа қол жеткізуді ашпайды, бұл жағдайда пайдаланушыға machdep. allowaperture параметрін бастапқы 0 мәнінен қауіпсіз емес мәнге өзгерту қажет болатын. OpenBSD-нің X Window System (Xenocara деп аталады) нұсқасында қауіпсіздікке қатысты бірнеше өзгерістер бар. Сервер және кейбір әдепкі қолданбалар құқықтарды бөлуді пайдалану үшін түзетілген, ал OpenBSD X-тің жадқа қол жеткізуін шектеу үшін "апертура" драйверін ұсынады. Бірақ Лоик Дюфлоттың X қауіпсіздігіндегі кемшіліктер бойынша жұмысынан кейін Тео де Радт апертура драйверінің тек "біз жасай алатынымыздың ең жақсысы" екенін және X-тің "университетте естіген барлық қауіпсіздік модельдерін бұзатынын" айтты. Ол сондай-ақ X-тің жасаушыларын "10 жылдан астам уақыттан бері шешілмей келе жатқан бұл мәселені шешуге уақыттарын жұмсамағаны үшін" сынға алды. 2006 жылдың 29 қарашасында X-ті апертура драйверінсіз, бірақ өте баяу жұмыс істеуге мүмкіндік беретін VESA ядролық драйвері жасалды. 2014 жылдың 15 ақпанында X root құқықтарынсыз жұмыс істеуге мүмкіндік беру үшін тағы да өзгерістер енгізілді. X-те қауіпсіздікке қатысты осалдық табылғаннан кейін OpenBSD X-ті root пайдаланушы ретінде іске қосуды қолдамайды және тек X-ті x11 пайдаланушысы ретінде дисплей менеджері арқылы іске қосуды қолдайды.

Басқа ерекшеліктері

Артықшылықтарды бөлу, артықшылықтарды жою, chrooting және кітапханаларды кездейсоқ жүктеу жүйе қауіпсіздігін арттыруда маңызды рөл атқарады. Олардың көптегені tcpdump және Apache сияқты кең таралған бағдарламалардың OpenBSD нұсқаларына, сондай-ақ BSD аутентификация жүйесіне қолданылды. OpenBSD командасы анықталған түрлі қателер мен қауіпсіздік бұзушылықтары туралы толық мәлімет беру дәстүрін қалыптастырды. Бұл жобаның слоганымен бейнеленеді: «Бірқатар ұзақ уақыттан бері әдепкі орнатуда тек екі алыс қашықтықтағы осал орын бар!» OpenBSD әдепкі бойынша қауіпсіз болуға тиіс, бұл барлық қажетсіз қызметтердің әдепкі бойынша өшірілуін қамтиды (бірақ оған шектелмейді). Бұл OpenBSD орнатылғаннан кейін пайдаланушылардан компьютерлерін қорғауды үйренуге және оған уақыт жұмсауға мәжбүрлемеу үшін жасалады, сонымен қатар пайдаланушылардың қауіпсіздік мәселелеріне көбірек мән беруін қамтамасыз ету мақсатында, олардың қауіпсіздігін төмендетуі мүмкін мүмкіндіктерді қосу үшін саналы шешімдер қабылдауларын талап етеді. OpenBSD 5.9 сол кездегі жаңа pledge жүйелік шақыруын қолдауды қамтыды (OpenBSD 5.8-де tame ретінде енгізілген және 5.9-да pledge деп қайта аталды), процестің мүмкіндіктерін дұрыс жұмыс істеуі үшін қажетті ең аз жиынтыққа шектеу үшін. Егер процесс бұзылып, күтпеген әрекеттерді орындауға тырысса, ол ядромен тоқтатылады. OpenBSD 6.4 файлдық жүйенің көрінуін ең төменгі деңгейге шектеу үшін unveil жүйелік шақыруын енгізді. Pledge және unveil қосымшаларды шектеу үшін бірге қолданылады, олар пайдаланушы тіркелгісі ретінде жұмыс істеген кезде рұқсат етілген нәрсені одан әрі шектейді. Pledge енгізілгеннен бері OpenBSD-дің негізгі бағдарламалары (OpenBSD жиынтығына кіретін), қосымшалар (олардың әзірлеушілерімен айналысады) және порттар (OpenBSD командасымен басқарылатын қосымшалар) pledge және/немесе unveil арқылы шектелу үшін жаңартылды. Осы мүмкіндіктермен жаңартылған үшінші тараптың қосымшаларына (олардың әзірлеушілері немесе OpenBSD-дің қосымша порттарында) Chromium және Firefox веб-браузерлері кіреді.