제퍼넷 로고

OpenSSL은 높은 심각도의 데이터 도용 버그를 수정합니다 – 지금 패치하세요!

시간

세계에서 가장 널리 사용되는 암호화 라이브러리는 아니지만 아마도 가장 잘 알려진 OpenSSL이 삼박자 보안 업데이트.

이 패치는 조직이 모든 사람을 위해 지원하는 두 가지 현재 오픈 소스 버전과 프리미엄 지원 비용을 지불하는 고객에게만 업데이트가 제공되는 "이전" 1.0.2 버전 시리즈를 포함합니다.

(더 이상 지원 비용을 지불할 필요가 없는 위치에 도달하는 것이 아마도 비용에 대해 신경 쓰지 않더라도 더 나을 것입니다. OpenSSL 자체가 폐기하려고 시도한 버전에서 마침내 벗어날 수 있음을 의미하기 때문입니다. 여러 해 전에.)

업데이트 후 확인하려는 버전은 다음과 같습니다.

  • OpenSSL 3.0 시리즈: 새 버전은 3.0.8.
  • OpenSSL 1.1.1 시리즈: 새 버전은 1.1.1t (마지막에 T-for-Tango입니다).
  • OpenSSL 1.0.2 시리즈: 새 버전은 1.0.2zg (줄루-골프).

이전 버전에 세 개의 숫자와 끝에 문자가 있는 이유가 궁금하다면 OpenSSL 프로젝트에 네 부분으로 된 버전 식별자가 있었고 후행 문자가 26개의 하위 버전을 지원할 수 있는 카운터 역할을 했기 때문입니다.

버전 1.0.2에서 일어난 일에서 볼 수 있듯이 26개의 하위 버전이 충분하지 않은 것으로 판명되어 버전 Z-for-Zulu 이후에 해야 할 일에 대한 진퇴양난을 남겼습니다. 주문하거나 Z-for-Zulu를 고수하고 A-to-Z의 하위 하위 버전 주기를 시작하세요.

또한 기억하시겠지만 버전 1.1.1l(L-for-Lima)이 등장했을 때 숫자와 소문자의 불일치가 특히 혼란스러웠습니다.

Naked Security는 소문자 L 문자가 대문자 Is 및 숫자 1과 완전히 다른 많은 국가에서 여전히 사용되는 Bauhaus 시대의 도로 표지판 문자를 기반으로 하는 서체를 행복하게 사용하지만 많은 서체가 낮은 L을 렌더링합니다. 그리고 위-I 동일하게.

버전 3이 나왔을 때 OpenSSL 팀은 현재 인기 있는 XYZ XNUMX자리 버전 관리 시스템을 채택하기로 결정했기 때문에 현재 버전 시리즈는 3.0 하위 버전은 이제 8. (현재 개발 중인 다음 버전은 3.1이 될 것입니다.)

궁금한 점이 있으신가요? 일반 OpenSSL 2.x 시리즈는 없었습니다. 해당 버전 번호는 IPv4 다음에 IPv6이 오는 것과 같은 방식으로 이미 다른 용도로 사용되었기 때문입니다. 짧은 시간 동안 혼란을 야기했을 수 있습니다.

무엇이 잘못 되었습니까?

총 XNUMX개의 CVE 번호가 매겨진 버그 수정이 있으며, 이 중 XNUMX개가 잘못된 메모리 관리로 인해 발생했다는 소식을 들어도 놀라지 않을 것입니다.

처럼 OpenSSH를OpenSSL은 C로 작성되었으며 C 프로그램에서 메모리 할당 및 할당 해제를 처리하려면 일반적으로 많은 "직접 수행"이 필요합니다.

불행하게도, 숙련된 프로그래머조차도 자신의 malloc() 통화 및 그들의 free() 올바르게 호출하거나 프로그램의 어떤 부분에 속하는 메모리 버퍼를 추적하지 못할 수 있습니다.

XNUMX가지 메모리 관련 버그는 다음과 같습니다.

  • CVE-2023-0286 : X.400 GeneralName의 X.509 주소 유형 혼동. 높은 심각도; 버그는 모든 버전(3.0, 1.1.1 및 1.0.2)에 영향을 미칩니다.
  • CVE-2023-0215 : BIO_new_NDEF를 따르는 Use-after-free. 중등도; 버그는 모든 버전(3.0, 1.1.1, 1.0.2)에 영향을 미칩니다.
  • CVE-2022-4450 : PEM_read_bio_ex를 호출한 후 두 번 무료입니다. 중등도; 버그는 버전 3.0 및 1.1.1에만 영향을 미칩니다.
  • CVE-2022-4203 : X.509 이름 제약 읽기 버퍼 오버플로. 중등도; 버그는 버전 3.0에만 영향을 미칩니다.
  • CVE-2023-0216 : d2i_PKCS7 함수에서 유효하지 않은 포인터 역참조. 중등도; 버그는 버전 3.0에만 영향을 미칩니다.
  • CVE-2023-0217 : NULL 역참조 유효성 검사 DSA 공개 키. 중등도; 버그는 버전 3.0에만 영향을 미칩니다.
  • CVE-2023-0401 : PKCS7 데이터 확인 중 NULL 역참조. 중등도; 버그는 버전 3.0에만 영향을 미칩니다.

메모리 버그 설명

설명하기.

A NULL 역참조 숫자 0을 메모리 주소로 취급하려고 할 때 발생합니다.

XNUMX은 데이터를 저장하기에 유효한 장소로 간주되지 않기 때문에 종종 잘못 초기화된 저장 변수를 나타냅니다.

실제로 모든 최신 운영 체제는 고의적으로 처음 수천 바이트 이상의 메모리를 사용할 수 없는 것으로 표시하므로 소위 "제로 페이지"를 읽거나 쓰려고 하면 하드웨어 수준 오류가 발생하여 운영 체제가 문제를 해결할 수 있습니다. 프로그램 다운.

실제로 의도된 것이 무엇인지 추측하는 것이 불가능하기 때문에 이런 종류의 실수를 복구할 합리적인 방법이 없습니다.

결과적으로 이러한 유형의 원격 트리거 가능한 버그가 있는 프로그램은 서비스 거부(DoS) 공격에 취약합니다. 여기서 사이버 범죄자는 의도적으로 취약성을 유발하여 프로그램을 강제로 중단시킵니다.

An 잘못된 포인터 역참조 유사하지만 메모리 주소를 나타내는 것처럼 나타내지 않는 숫자를 사용하려고 시도함을 의미합니다.

가짜 메모리 주소가 실제로 존재하지 않기 때문에 이러한 종류의 버그는 일반적으로 아무 것도 손상시키지 않습니다. 마치 존재하지 않는 부동산에 가짜 소환장이나 허위 송장을 우편으로 발송하여 누군가를 속이려는 것과 같습니다.

그러나 NULL 역참조와 마찬가지로 부작용(프로그램 충돌)이 DoS 공격으로 바뀔 수 있습니다.

읽기 버퍼 오버플로 그들이 말하는 것을 의미합니다. 즉, 예상되는 곳을 지나서 데이터에 액세스하므로 일반적으로 실행 중인 프로그램을 손상시키거나 장악하기 위해 직접 악용될 수 없습니다.

그러나 그들은 암호화 응용 프로그램에서 항상 걱정하고 있습니다. 왜냐하면 공격자가 엿볼 수 있는 불필요한 데이터에는 그들이 볼 수 없도록 되어 있는 해독된 정보나 암호 또는 개인 키와 같은 암호화 자료가 포함될 수 있기 때문입니다.

역사상 가장 유명한 읽기 오버플로 중 하나는 다음과 같이 알려진 OpenSSL 버그였습니다. Heartbleed와여기서 클라이언트는 서버에 메시지가 아직 살아 있음을 증명하기 위해 짧은 메시지(알려진 하트비트)를 "바운스 백"하도록 요청할 수 있지만 원래 포함된 수신 메시지보다 최대 64KB 더 많은 데이터를 다시 보내도록 수신자를 속일 수 있습니다. . 서버에서 계속해서 데이터를 "블리딩"함으로써 공격자는 공개되어서는 안 되는 모든 종류의 데이터 조각(때로는 암호화 키 포함)을 점진적으로 한데 모을 수 있습니다.

A 사용 후 무료 메모리를 시스템에 되돌려 주면 프로그램의 다른 부분에 메모리를 넘길 수 있지만 사용자가 모르는 사이에 메모리 블록이 변경된 경우에도 해당 메모리 블록에 있는 내용에 계속 의존합니다.

이론적으로 이것은 공격자가 코드를 잘못 지시하거나 제어하는 ​​메모리 변경을 유발하려는 고의적인 목적으로 프로그램의 다른 부분에서 겉보기에 무해한 행동을 유발할 수 있습니다. 더 긴 제어.

A 더블 무료 이것은 이전에 이미 반환한 메모리 블록을 시스템에 반환하여 프로그램의 다른 곳에 이미 할당되었을 수 있음을 의미하지만 비슷합니다.

use-after-free와 마찬가지로 이것은 프로그램의 두 부분이 동일한 메모리 블록을 신뢰하는 결과를 초래할 수 있으며 각 부분은 데이터가 존재할 것으로 예상하고(그리고 이미 유효성을 검사했을 수 있으므로 기꺼이 사용할 수 있음을) 알지 못합니다. 즉시 의존)이 다른 부분에 의해 악의적으로 전환되었을 수 있습니다.

마지막으로, 유형 혼동 버그는 여기에서 가장 심각한 것입니다.

유형 혼동은 간단히 말해서 한 유형의 데이터를 포함하는 것처럼 가장하여 프로그램에 매개변수를 제공하지만 나중에 프로그램이 이를 다른 종류의 매개변수로 받아들이도록 속이는 것을 의미합니다.

아주 간단한 예로서 "스마트" 가정용 오븐에 시간을 설정해야 한다고 말할 수 있다고 상상해 보십시오. 13:37 정수 값 1337을 전송합니다.

수신 코드는 시계가 잘못된 시간으로 설정되는 것을 방지하기 위해 숫자가 0에서 2359 사이이고 100으로 나눈 나머지가 0에서 59까지 범위에 있는지 신중하게 테스트할 것입니다.

그러나 이제 시간을 온도로 대신 사용하도록 오븐을 설득할 수 있다고 상상해 보십시오.

온도를 제공하고 있다는 사실을 미리 인정했다면 발생했을 수 있는 확인을 몰래 우회했을 것입니다(1337은 K, °C 등 현재 사용 중인 일반 저울에서 요리용 오븐에 사용하기에는 너무 뜨겁습니다. 또는 °F).

메모리 비교의 오용

C 프로그램에서 유형 혼동은 메모리 포인터로 일반 숫자를 바꿀 수 있기 때문에 종종 특히 위험합니다. 따라서 비밀로 간주되는 메모리 주소를 몰래 발견하거나 훨씬 더 나쁘게는 메모리 블록에서 읽거나 쓸 수 있습니다. 출입금지라고 합니다.

OpenSSL 팀이 인정한 바와 같이 위의 높은 심각도 유형 혼동 버그와 관련하여 "인증서 해지 목록 확인이 활성화되면 이 취약점으로 인해 공격자가 임의의 포인터를 memcmp() [메모리 비교] 호출, 메모리 내용을 읽을 수 있도록 함”.

두 메모리 블록 중 하나를 잘못 지시할 수 있는 경우 memcmp()그런 다음 비밀 메모리 버퍼를 선택한 메모리 블록과 반복적으로 비교하여 점차 비밀 버퍼에 무엇이 있는지 알아낼 수 있습니다. 예를 들어, "이 문자열은 다음으로 시작합니까? A?” 그렇지 않다면 어떻습니까? B? 예? 무엇 향후 계획? 어때 BA? BB? 등등.

타이밍 버그가 XNUMX개를 완성합니다.

여덟 번째 버그는 다음과 같습니다.

  • CVE-2022-4304 : RSA 복호화에서 Oracle 타이밍. 중등도; 버그는 모든 버전(3.0, 1.0.1 및 1.0.2)에 영향을 미칩니다.

암호화 코드는 다양한 계산에 걸리는 시간에 특히 민감해야 공격자가 응답 속도가 일종의 "쉬운" 사례가 적용되는지 확인하기 위해 조사하여 관련된 텍스트 문자열이나 숫자를 추측할 수 없습니다.

간단한 예로 머리 속으로 주어진 숫자에 13을 곱하라는 요청을 받았다고 상상해 보십시오.

숫자에 0(즉시 응답: 1!) 또는 10(즉시 응답: 동일한 숫자, 변경되지 않음)을 곱하는 것보다 훨씬 오래 걸리고 XNUMX을 곱하는 것보다 상당히 오래 걸릴 것입니다( 끝에 XNUMX을 붙이고 새 숫자를 읽습니다).

암호화에서는 메모리에서 데이터 조회, 텍스트 문자열 비교, 산술 수행 등과 같은 모든 관련 작업이 "쉬운" 경우의 속도를 늦추는 것을 의미하더라도 동일한 시간이 소요되도록 해야 합니다. 모든 일을 가능한 한 빨리 처리하여 시간을 절약하려는 것입니다.

무엇을해야 하는가?

진정해.

오늘 패치: 다음 중 일부 또는 전부가 필요합니다. 1.0.2zg (줄루-골프), 1.1.1t (T-for-Tango) 및 3.0.8.

많은 Linux 배포판의 경우 다양한 애플리케이션에서 사용하는 공유 라이브러리에 적용되는 운영 체제 업데이트를 설치해야 하지만 자체 버전의 OpenSSL을 가져오고 업데이트가 필요한 애플리케이션이 있을 수도 있음을 잊지 마십시오. .

일부 앱에는 서로 다른 두 버전의 OpenSSL이 포함될 수도 있으며 둘 다 패치가 필요합니다.

미루지 말고 오늘 하세요!


spot_img

최신 인텔리전스

spot_img