Кіріспе

SSL және TLS протоколдарының ашық кодты іске асыруы OpenSSL – компьютерлік желілерде сырттан тыңшылыққа қарсы қауіпсіз байланысты қамтамасыз ететін және байланысқан тарапты анықтайтын қосымшаларға арналған бағдарламалық кітапхана. Ол көптеген интернет-серверлерде, соның ішінде көптеген HTTPS веб-сайттарында кеңінен қолданылады. OpenSSL SSL және TLS протоколдарының ашық кодты іске асыруын қамтиды. C бағдарламалау тілінде жазылған негізгі кітапхана негізгі криптографиялық функцияларды іске асырады және түрлі қосымша функцияларды ұсынады. OpenSSL кітапханасын әртүрлі компьютерлік тілдерде пайдалануға мүмкіндік беретін интерфейстер бар. OpenSSL Software Foundation (OSF) OpenSSL жобасын көптеген құқықтық мәселелерде, соның ішінде үлескерлердің лицензиялық келісімдерін және қайырымдастықтарды басқару сияқты мәселелерде ұсынады. OpenSSL Software Services (OSS) сондай-ақ OpenSSL жобасын қолдау шарты бойынша өкілдік етеді. OpenSSL көптеген Unix-қа ұқсас операциялық жүйелерде (Linux, macOS және BSD-ді қоса алғанда), Microsoft Windows және OpenVMS-те қолжетімді.

Жобаның тарихы

OpenSSL жобасы 1998 жылы Интернетте қолданылатын кодты шифрлауға арналған тегін құралдар жиынтығын ұсыну мақсатымен құрылды. Ол Эрик Эндрю Янг және Тим Хадсон жасаған SSLeay-дің түйінді нұсқасына негізделген, ол 1998 жылдың 17 желтоқсанында Янг пен Хадсон RSA Security компаниясында жұмыс істеуге кеткен кезде ресми емес түрде тоқтатылды. Бастапқы негіздеушілер – Марк Кокс, Ральф Энгельсхалл, Стивен Хенсон, Бен Лори және Пол Саттон. 2018 жылы OpenSSL нұсқалау жүйесі 1.1.1-ден 3.0.0-ге секірді, OpenSSL модульдерінің бірімен қақтығысты болдырмау үшін 2 нөмірін басты нұсқа ретінде пайдаланбады. 3.0.0 нұсқасы Apache лицензиясын алғаш рет қолданды. 2019 жылға қарай OpenSSL басқару комитеті жеті адамнан тұрды және кодқа өзгерістер енгізу құқығы бар он жеті бағдарламашы болды (олардың көпшілігі OpenSSL басқару комитетінің құрамында). Барлығы екі толық уақытты қызметкер (фелло) бар, ал қалғаны – еріктілер. Жобаның жылдық бюджеті 1 миллион АҚШ долларынан кем және ол негізінен қайырымдамаларға сүйенеді. TLS 1.3 әзірлемесіне Akamai компаниясы демекшілік етті.

FIPS 140-қа сәйкестігін растау

FIPS 140 – криптографиялық модульдерді сынау және сертификаттау үшін АҚШ-тың федералдық бағдарламасы. OpenSSL-дің FOM 1.0 үшін FIPS 140 1 сертификаты 2006 жылдың шілдесінде «сертификатталған модульдің сыртқы бағдарламалық қамтамасыз етумен өзара әрекеттесуі туралы сұрақтар туындаған кезде» күшін жойды. Модуль FIPS 140 2 стандартына ауысудан бұрын 2007 жылдың ақпан айында қайта сертификатталды. OpenSSL 1.0.2 FIPS 140 2 ортасында FIPS мақұлдаған алгоритмдерді жеткізу үшін жасалған OpenSSL FIPS Object Module (FOM) пайдалануды қолдады. OpenSSL 1.0.2 архитектурасын FIPS режимін қолдайтын OpenSSL-дің жалғыз нұсқасы екендігіне қарсылық білдіргеніне қарамастан, 2019 жылдың 31 желтоқсанынан бастап «қолдану мерзімі бітті» немесе «EOL» деп санауға шешім қабылдады. EOL салдарынан көптеген пайдаланушылар FOM 2.0-ды дұрыс қолдана алмады және 1.0.2 архитектурасына ұзартылған қолдауды қамтамасыз етпегендіктен, талаптарға сай келмеді, бірақ FOM өзі тағы сегіз ай бойы жарамды болып қалды. FIPS Object Module 2.0 бірнеше форматта 2020 жылдың 1 қыркүйегіне дейін FIPS 140 2 стандартына сәйкес болды, содан кейін NIST FIPS 186 2 стандартын цифрлық қолтаңба стандарты үшін қолдануды тоқтатты және барлық талаптарға сай келмейтін модульдерді «тарихи» деп белгіледі. Бұл белгі федералдық агенттіктерге модульді жаңа сатып алуларға қосуға болмайтындығын ескертеді. OpenSSL-дің барлық үш растауы – OpenSSL FIPS Object Module (сертификат №1747), OpenSSL FIPS Object Module SE (сертификат №2398) және OpenSSL FIPS Object Module RE (сертификат №2473) ескіргенге енді. Көптеген «жеке брендтік» OpenSSL негізіндегі растаулар мен консультанттар жасаған көшірмелер де тарихи тізімге көшірілді, бірақ кейбір FIPS растаулы модульдер, мысалы, Google-дың BoringCrypto және SafeLogic-тің CryptoComply сияқты модульдер алмасуға үйлесімді болғандықтан ескіруден құтылды. OpenSSL басқару комитеті нұсқалау схемасын өзгерту туралы хабарлады. Осы өзгерістерге байланысты келесі негізгі нұсқаның нөмірі екі есеге артты, себебі OpenSSL FIPS модулі осы нөмірді иемденген. Сондықтан OpenSSL 2.0 нұсқасының нөмірін өткіріп, OpenSSL 3.0 нұсқасына көшілді. OpenSSL 3.0 FIPS режимін қалпына келтірді және FIPS 140 2 сынағынан өтті, бірақ елеулі кешігулер болды: Бұл жұмыс 2016 жылы SafeLogic қолдауымен және 2017 жылы Oracle қолдауымен басталды, бірақ процесс қиын болды. 2020 жылдың 20 қазанында OpenSSL FIPS Provider 3.0 CMVP іске асыру бойынша сынақ тізіміне қосылды, бұл FIPS 140 2 растауын жүргізу үшін сынақ зертханасымен ресми келісімге келгенін көрсетеді. Соның нәтижесінде келесі айларда көптеген сертификаттар берілді.

Лицензиялау

OpenSSL OpenSSL лицензиясы және SSLeay лицензиясы бойынша қос лицензияланған, яғни екі лицензияның шарттарын қолдануға болады. OpenSSL лицензиясы Apache License 1.0, ал SSLeay лицензиясы 4-тармақты BSD лицензиясына ұқсас. OpenSSL лицензиясы Apache License 1.0 болғандықтан, бірақ Apache License 2.0 емес, жарнама материалдарында және кез келген қайта таратуларда «Бұл өнім OpenSSL Toolkit-те пайдалану үшін OpenSSL жобасымен әзірленген бағдарламалық құралды қамтиды» деген сөз тіркесі болуы керек (OpenSSL лицензиясының 3 және 6-тармақтары). Осы шектеуге байланысты OpenSSL лицензиясы және Apache 1.0 лицензиясы GNU GPL-мен үйлесімсіз. Кейбір GPL әзірлеушілері өз лицензияларына OpenSSL ерекшелігін қосты, ол олардың жүйелерімен OpenSSL-ді пайдалануға рұқсат береді. GNU Wget және climm осындай ерекшеліктерді қолданады. Кейбір пакеттер (мысалы, Deluge) GPL лицензиясын лицензияның басына ерекшелікті сипаттайтын қосымша бөлім қосу арқылы өзгертеді. Басқа пакеттер LGPL лицензиясы бар GnuTLS, BSD лицензиясы бар Botan немесе MPL лицензиясы бар NSS-ті пайдаланады, олар бірдей міндетті орындайды. OpenSSL 2015 жылдың тамызында көптеген үлескерлерден үлескерлер лицензиялық келісіміне (CLA) қол қоюын талап ететінін және OpenSSL ақырында Apache 2.0 лицензиясының шарттары бойынша қайта лицензияланатынын жариялады. Бұл процесс 2017 жылдың наурыз айында басталды және 2018 жылы аяқталды. 2021 жылдың 7 қыркүйегінде OpenSSL 3.0.0 Apache License 2.0 бойынша жарияланды.

Қызмет көрсетуден бас тарту: ASN.1 талдау

OpenSSL 0.9.6k-де 2003 жылдың 4 қарашасында анықталған, белгілі бір ASN.1 тізбектері Windows жүйелерінде көптеген рекурсияларды тудыратын қате бар. Windows үлкен рекурсияларды дұрыс өңдей алмағандықтан, OpenSSL осының салдарынан құлап түсті. Кез келген мөлшерде ASN.1 тізбектерін жіберуге мүмкіндік OpenSSL-дің құлауына себеп болар еді.

OCSP-тің түйісудегі осалдық

Қол алысу жасау кезінде клиент дұрыс форматталмаған ClientHello хабарын жіберуі мүмкін, нәтижесінде OpenSSL хабардың соңынан артық мәліметтерді талдауға мәжбүр болады. CVE жобасымен тағайындалған идентификатор бойынша, бұл OpenSSL нұсқаларының 0.9.8h-ден 0.9.8q-ға дейін және 1.0.0-ден 1.0.0c-ге дейінгі барлық нұсқаларына әсер етті. Талдау қате жад мекенжайынан мәліметтерді оқуға алып келуі мүмкін болғандықтан, шабуылшы DoS шабуылын (қызметтен бас тарту) тудыруы мүмкін. Сондай-ақ, кейбір қолданбалар талданған OCSP кеңейтімдерінің мазмұнын жарияласа, шабуылшы ClientHello хабарынан кейін орналасқан жадтың мазмұнын оқи алуы мүмкін.

ASN.1 BIO-ның осал тұсы

Basic Input/Output (BIO) немесе FILE негізделген функцияларын сенімсіз DER форматындағы деректерді оқу үшін пайдаланғанда OpenSSL осал болады. Бұл осалдық 2012 жылдың 19 сәуірінде анықталды және CVE идентификаторы берілді. OpenSSL-дің SSL/TLS кодына тікелей әсер етпесе де, ASN.1 функцияларын (әсіресе d2i_X509 және d2i_PKCS12) пайдаланатын кез келген қосымша да осал болады.

SSL, TLS және DTLS ашық мәтіндік қалпына келтіру шабуылдары

SSL, TLS және DTLS протоколдарында CBC шифр топтамаларын өңдеу кезінде OpenSSL-де MAC өңдеу барысында уақыт өлшеу шабуылына (timing attack) сезімталдық анықталды. Бұл мәселені Надем Альфардан мен Кенни Паттерсон ашты және олар өз зерттемелерін 2013 жылдың 5 ақпанында жариялады. Бұл осалдыққа CVE идентификаторы тағайындалды.

Болжамды жеке кілттер (Debian-ке тән)

OpenSSL псевдокезекті сан генераторы күрделі бағдарламалау әдістерін пайдаланып энтропияны қамтиды. Valgrind талдау құралының байланысты ескертулер шығаруын болдырмау үшін Debian дистрибутивінің күтушісі OpenSSL жиынтығының Debian нұсқасына түзету енгізді, бұл кездейсоқ сан генераторын 32 768 жеке кілттің жалпы санын шектеу арқылы бұзды. Бұзылған нұсқа 2006 жылдың 17 қыркүйегіндегі Debian шығарылымына (0.9.8c 1 нұсқасы) қосылды, сондай-ақ басқа Debian негізіндегі дистрибутивтерге, мысалы Ubuntu-ға да қауіп төндірді. Пайдалануға дайын эксплойттар оңай қолжетімді. Debian бұл қате туралы 2008 жылдың 13 мамырында хабарлады. Debian 4.0 дистрибутивінде (etch) бұл мәселелер 0.9.8c 4etch3 нұсқасында түзетілді, ал Debian 5.0 дистрибутивінде (lenny) түзетулер 0.9.8g 9 нұсқасында ұсынылды.

Жүрек қаны

OpenSSL 1.0.1-ден 1.0.1f-ге дейінгі нұсқаларында TLS Heartbeat Extension-ді іске асыруда жадты өңдеудегі ауыр қате бар, оны әр жүрек соғуымен 64 КБ-ға дейін қолданбаның жадынан табуға болады. Веб-сервердің жадынан оқып, шабуылшылар құпия деректерге, соның ішінде сервердің жеке кілтіне қол жеткізе алады. Бұл шабуылшыларға бұрын тыңдалған хабарларды кодтау мүмкіндігін береді, егер шифрлау протоколы толықтай құпиялылықты қамтамасыз етпесе. Жеке кілт туралы білім шабуылшыға болашақтағы кез келген байланысқа қарсы орта шабуыл жасауды қамтамасыз етуі мүмкін. Қауіпті жер басқа пайдаланушылардың құпия сұраныстары мен жауаптарының шифрланбаған бөліктерін, соның ішінде сеанстық cookie файлдары мен парольдерді ашады, бұл шабуылшыларға басқа пайдаланушының жеке басын ұрлауға мүмкіндік береді. 2014 жылдың 7 сәуірінде оның ашылуы кезінде сенімді органдар сертификаттаған Интернет-серверлердің шамамен 17% немесе жарты миллион қауіпсіз веб-серверлері шабуылға ұшырайды деп саналды. Алайда, Heartbleed сервер мен клиентке де әсер етуі мүмкін.

CCS инъекциясының осалдығы

CCS Injection Vulnerability - материалды кілттеу үшін қолданылатын OpenSSL әдістерінің әлсіздігіне байланысты қауіпсіздікті айналып өту. Бұл осалдықты адам ортадағы шабуыл арқылы пайдалануға болады, онда шабуылшы транзит кезінде трафикті шифрлап, өзгерте алады. Қашықтан аутентификацияланбаған шабуылшы бұл осалдықты арнайы жасалған қол алысу арқылы әлсіз кілт материалдарын қолдануға мәжбүрлеу үшін пайдалана алады. Сәтті пайдалану шабуылшы әлеуетті құпия ақпаратқа қол жеткізе алатын қауіпсіздік айналмасына әкелуі мүмкін. Шабуыл тек зақымданған клиент пен сервер арасында ғана орындалуы мүмкін. OpenSSL клиенттері OpenSSL-дің барлық нұсқаларында 0.9.8za, 1.0.0m және 1.0.1h нұсқаларына дейін осал. Серверлер OpenSSL 1.0.1 және 1.0.2 beta1 нұсқаларында ғана залалға ұшырағаны белгілі. 1.0.1 нұсқасынан бұрынғы OpenSSL серверлерін пайдаланушыларға алдын ала жаңарту ұсынылады.

КлиентСау болыңыз DoS

Бұл осалдық кез келген адамға сертификатты алуға, оның мазмұнын оқып алуға және оны клиенттің немесе сервердің құлдырауына әкелетін осалдықты пайдалану үшін дәл өзгертуге мүмкіндік береді. Егер клиент OpenSSL 1.0.2 серверіне қосылып, жарамсыз қолтаңба алгоритмдерінің кеңейтуімен қайта келіссөздер жүргізсе, нөлдік сілтемеден бас тарту пайда болады. Бұл серверге DoS шабуыл жасауға әкелуі мүмкін. Стенфордтың қауіпсіздік зерттеушісі Дэвид Рамос жеке эксплойт жасады және OpenSSL командасына ұсынды, содан кейін ол мәселені түзетті. OpenSSL бұл қателіктерді жоғары қауіптілік деп санап, 1.0.2 нұсқасының зардап шеккенін атап өтті.

Диффи-Геллман кішігірім топтарына шабуыл жасау

Бұл осалдық, белгілі бір шарттар орындалғанда, OpenSSL серверінің жеке Diffie–Hellman кілтін алуға мүмкіндік береді. Adobe System Security зерттеушісі Антонио Сансо бұл осалдық туралы жеке хабарлаған. OpenSSL бұл қателікті жоғары деңгейдегі қауіп деп жіктеді, сонымен қатар тек 1.0.2 нұсқасының осал екенін көрсетті.

Агломерацияланған SSL

2009 жылы бастапқы OpenSSL API-мен туындаған мәселелерден кейін, сол кездегі OpenBSD әзірлеушісі Марко Пиребум бастапқы API-ді Agglomerated SSL (assl) құру арқылы бөліп шығарды, ол ішкі жағынан OpenSSL API-ді пайдаланады, бірақ әлдеқайда қарапайым сыртқы интерфейс ұсынады. Кейіннен, шамамен 2016 жылы LibreSSL құрылғаннан кейін ол қолданудан шығарылды.

LibreSSL- тің атауы

2014 жылдың сәуірінде Heartbleed-тің салдарынан OpenBSD жобасының мүшелері 1.0.1g тармағынан басталып, LibreSSL деп аталатын жобаны құру үшін OpenSSL-ді бұтақтады. OpenSSL код базасын кесудің алғашқы аптасында C кодының 90 000-нан астам жолы бұрандадан алынып тасталды.

BoringSSL-тің атауы

2014 жылдың маусым айында Google BoringSSL деп аталатын OpenSSL-дің өз бұрылысын жариялады. Google OpenSSL және LibreSSL әзірлеушілерімен бірлесіп жұмыс істеуді жоспарлап отыр. Google жаңа кітапхананы, Tink, BoringSSL негізінде әзірледі.

Артқа қарай үйлесімділік

Дамушылар қауымдастықтарында OpenSSL әр жаңа негізгі нұсқасымен API үйлесімділігін бұзуымен жиі аталады, бұл жаңа нұсқаларды қабылдауды кешіктіретін бағдарламалық қамтамасты бейімдеуді қажет етеді. Мұның үстіне, бұрынғы нұсқалар жаңа негізгі нұсқа шыққаннан кейін әдетте екі жылдан аспайтын уақытқа қолдау көрсетіледі, бұл кейбір жеткізушілерді бағдарламалық қамтамасты көшіруді ертерек жоспарлауға мәжбүр етеді, бірақ жаңа нұсқаға жаңартуға уақыт жетпейді, кейде бұл қолданыстағы бағдарламалық қамтамастың үйлесімділігін жоғалту немесе регрессия қаупіне әкелуі мүмкін.

Босатулар арасындағы кідіріс

LTS (ұзақ мерзімді қолдау) нұсқалары 5 жыл бойы сақталады, ал шығарылу мерзімдерінің жинақталған кешігуі операциялық жүйелер өндірушілерін соңғы қолдау тапқан нұсқада ұзақ уақыт ұстануға мәжбүр етеді, жаңа нұсқа қол жетімді болған кезде маржа аз болады. Мысалы, OpenSSL 3.0 бастапқыда 2019 жылдың 4-тоқсанына күтілді және ақыры 21 айдан кейін шығарылды OpenSSL тобы осындай үлкен өнімділік регрессиялары туралы есептерді орталықтандыру үшін мета-материалды жасады. Бұл репортерлердің жартысына жуығы 3.0 нұсқасына жаңартудың мүмкін еместігін айтады, бұл 1.1.1-нің бұрынғы нұсқасына қол жеткізуге аз уақыт қалғандықтан туындаған қиындықты арттырады.

Пайдаланушылардың талаптарын ескеру

QUIC транспорттық қабаты HTTP протоколының үшінші нұсқасын қолдау үшін жұмыс істеп жатқанда, қауіпсіздікті қамтамасыз ету үшін TLS пайдалану ұсынылды және TLS кітапханаларына кейбір өзгерістер енгізілуі қажет болды. Мұндай түзетулер BoringSSL кітапханасына, сол кезде QUIC әзірлеушілері негізінен қолданған кітапханаға енгізілді, кейін басқа кітапханаларға көшірілді. Бұл түзетулерді OpenSSL кітапханасына жылдам ұсыну ұсынылды. Сол күні талқылаулар басталғанымен, ол тез тоқтап, бастапқыда лицензиялық мәселелерге байланысты тоқтатылды, себебі жаңартулар жинағы API уақыт өте келе өзгеруі мүмкін деген қорқынышпен 3.0 нұсқасына қабылданбады. 3.0 нұсқасының шығарылуы жоспарланғаннан бір жылдан астам уақыт өткен соң, Akamai және Microsoft компанияларынан еріктілер тобы жобаны QuicTLS ретінде бөліп шығуға және QUIC дамуын ары қары қарай жүргізу үшін OpenSSL кодының үстінде осы түзетулерді қолдауға шешім қабылдады. Бұл әрекет қоғам тарапынан жақсы қабылдады. Соңғы кезде OpenSSL 3.0 нұсқасы шығарылғаннан кейін QUIC түзетулер жинағы қайта қарастырылды, бірақ одан бас тартылды, бұл қоғамда ондаған, тіпті жүздеген наразылық реакцияларын тудырды. Олар операциялық жүйелерді жасаушылардан QuicTLS-тің баламалы нұсқасын қолдауды сұрауға немесе басқа шешімдер іздеуге мәжбүр болды. Ақырында, QuicTLS бөлінісінің негізін қалаушы Рич Салц QuicTLS негізінде Apache жобасын бөліп шығуға қызығушылық танытты. 2023 жылдың 25 ақпанына дейін операциялық жүйелерде пайдаланушылардың оны бастапқы кодтан қайта құрауын қажет етпейтін, QUIC-пен үйлесімді, ұзақ мерзімді қолдау көрсетілетін TLS кітапханасы әлі де қолжетімді емес.