Кіріспе
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 is a software library for applications that provide secure communications over computer networks against eavesdropping, and identify the party at the other end. It is widely used by Internet servers, including the majority of HTTPS websites. OpenSSL contains an open source implementation of the SSL and TLS protocols. The core library, written in the C programming language, implements basic cryptographic functions and provides various utility functions. Wrappers allowing the use of the OpenSSL library in a variety of computer languages are available. The OpenSSL Software Foundation (OSF) represents the OpenSSL project in most legal capacities including contributor license agreements, managing donations, and so on. OpenSSL Software Services (OSS) also represents the OpenSSL project for support contracts. OpenSSL is available for most Unix like operating systems (including Linux, macOS, and BSD), Microsoft Windows and 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 3.0 restored FIPS mode and underwent FIPS 140 2 testing, but with significant delays: The effort was first kicked off in 2016 with support from SafeLogic and further support from Oracle in 2017, but the process has been challenging. On October 20, 2020, the OpenSSL FIPS Provider 3.0 was added to the CMVP Implementation Under Test List, which reflected an official engagement with a testing lab to proceed with a FIPS 140 2 validation. This resulted in a slew of certifications in the following months.
Лицензиялау
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 кітапханасы әлі де қолжетімді емес.