정보보안

openssl 취약점

swzz 2020. 11. 12. 19:12

1. 개요

 

1.1 

 

openssl이란 인터넷을 통해 클라이언트와 서버가 통신할 때 통신 내용을 안전하게 보호하는 방법으로 ssl(secure socket layer)을 사용할 수 있습니다 ssl은 서버 인증, 클라이언트 인증 그리고 데이터 암호화 기능을 제공합니다 인증은 통신의 상대방이 맞는지 확인하는 절차를 의미합니다. 암호화는 데이터가 노출되어도 외부에서 이 내용을 해독할 수 없게 하는 걸 의미합니다. ssl을 사용하는 동안 url은 흔히들 알고 있는 https 라는 스킴을 사용하여 구분합니다.

 

 

2. 공개키 비밀키 인증서

 

2.1 

 

인증을 수행할 때 ssl은 공개키 암호화라는 기술을 사용합니다 공개키 암호화는 공개키와 비밀키 이 둘의 조합에 근거한 알고리즘입니다. 공개키로 암호화된 데이터는 그 공개키와 짝이 되는 비밀키에 의해서만 복호화가 가능합니다. 반대로 비밀키로 암호화된 데이터 역시 짝이 되는 공개키로 복호화할 수도 있습니다. 이 키 쌍을 가지고 있는 소유자는 이 중에서 공개키를 아무에게나 공개할 수 있습니다 반면에 비밀키는 그 반대로 노출이 되어서는 안됩니다. 인증서는 소유가의 공개키가 맞는지를 검증하는 도구입니다. x.509표준을 준수하는 인증서는 다음과 같은 데이터와 서명 영역을 가지고 있습니다. 공개키를 소유하고 있는 자의 구별 가능한 이름 공개키를 발급한 자의 구별 가능한 이름 이 인증서가 언제까지 유효한지를 나타내는 유효기간 공개키 그 자체를 포함하고 있습니다. 인증서는 ca를 통해 인증서를 발급 받을 수도 있고 스스로 자기서명 인증서를 만들수도 있습니다.

 

 

3. 인증서 발급 기관

 

3.1 

 

인증서는 ppa(정책승인기관)  pca(정책인증기관) ca(인증기관) ra(등록기관) va(검증기관)로 구성되어있다.

 

 

 

3.2

 

정책승인기관은 PKI 전반에 사용되는 정책과 절차를 생성하고 PKI 구축의 root ca역할을 수행한다 root ca만 존재 bestroot 같은 root는 존재 하지 않는다 한국의 경우 행정안전부 과학기술정보통신부등이 되겠다 정책인증기관은 paa 아래 계층으로 자신의 도메인 내의 사용자와 인증기관이 따라야 할 정책을 수립하고 인증기관의 공개키를 인증하고 인증서 인증서 폐지 목록 등을 관리합니다. 여기서 인증서 폐지 목록은 crl 그리고 비용은 발생하지만 인증서 폐지목록을 비교적 실시간으로 확인 할 수 있는 ocsp가 있습니다. 인증기관은 공개키 인증서를 발급하고 또 필요에 따라 취소합니다. 공개키를 사용자에게 전달 인증서 인증서 취소목록 등을 보관한다. 검증기관은 인증서와 관련된 거래의 유효성을 확인하고 여기에 사용되는 인증서의 유효성 여부와 인증서가 적절한 개체로 발급되었다는 것을 신뢰 당사자에게 확인 시켜줍니다 등록기관은 인증기관과 멀리 떨여져 있는 사용자들을 위해 인증기관과 사용자 사이에 등록기관을 두어 인증기관 대신 사용자들의 인증서 신청 시 그들의 신분과 소속을 확인하는 기능을 수행한다 사용자들의 신분을 확인한 수 등록기관은 인증서 요청에 서명하여 인증기관에 제출한다 인증기관은 등록기관의 서명을 확인하여 사용자의 인증서를 발행한 후 등록기관에 되돌리거나 사용자에게 직접 전달한다.

 

3.3 

 

저장소(디렉토리)도 존재하는데 인증서와 사용자 관련정보 상호 인증서 쌍 및 인증서 취소 목록 등을 저장 및 검색하는 장소로 응용에 따라 이를 위한 서버를 설치하거나 인증기관에서 관리한다 디렉터리를 관리하는 서버는 LDAP을 이용하여 x.500 디렉터리 서비스를 제공한다.

 

 

4. openssl 취약점

 

4.1

 

가장 대표적인 취약점으로 heartbleed가 존재한다 (cve-2014-0160)  2014년우리의 인터넷 생활을 함께 해 온 xp운영체제의 업데이트 지원이 종료되었으며 그 다음날에 발견 되었습니다. openssl을 구성하고 있는 tsl/dtls의 heartbeat 확장규격에서 발견된 취약점으로 해당 취약점을 이용하면 서버와 클라이언트 사이에 주고받는 정보들을 탈취할 수 있습니다(개인정보) openssl은 정해진 규격의 네트워크 보안 프로토콜을 범용 라이브러리로 구현하기 위한 목적으로 만들어졌으며 ssl이나 tls를 이용한 암호화를 구현할 수 있습니다. 강력한 암호화 기능을 제공하기 때문에 보안이 중요한 대형 포털서비스 이메일 서비스 금융권등에서 데이터 통신시 이용하고 있습니다. 최근까지 계속해서 발생하고 있습니다. 반복입력으로 스택을 초과하여 발생하는 서비스 거부 취약점(cve-2018-0739) (cve-2018- 0733)

 

 

5. heartbleed 취약점

 

5.1

 

하트블리드 취약점(심장출혈)은 openssl 라이브러리의 구조적인 취약점입니다 openssl 확장규격 중 하나인 hearbeat는 서버와 클라이언트 사이에 무슨 문제는 없는지 또는 안정적인 연결을 유지하기 위한 목적으로 일정 신호를 주고 받을 때 사용하는 확장규격입니다 클라이언트는 heartbeat 확장프로토콜을 이용하여 임의의 정보를 그 정보의 기링와 함꼐 서버에 전송합니다 그 후 서버는 전달받은 정보를 다시 클라이언트에 전달해 주는 과정을 통해 자신의 존재 사실을 알려줍니다 이때 클라이언트로부터 전달받은 정보와 그 정보의 길이가 일치하지 않는다면 클라이언트의 요청에 서버는 응답을 하지 않는 것이 정상적인 동작인데 heartbleed 취약점은 서버가 클라이언트로부터 전달받은 정보의 내용과 그 정보의 길이의 일치 여부를 검증하지 않은 채 정보를 보내주면서 문제가 발생된 것입니다.

 

 

 

6. heartbleed 대응방안

 

6.1 

 

영향을 받는 버전으로 OpenSSL 1.0.1 ~ OpenSSL 1.0.1f OpenSSL 1.0.2-beta, OpenSSL 1.0.2-beta1등이 있으며 전체 시스템 업데이트 그리고 openssl 버전 업데이트로 대응할 수 있으며 운영환경의 특수성 때문에 패키지 형태의 업데이트가 어려운 경우 heartbeat를 사용하지 않도록 컴파일 옵션을 설정하여 재컴파일이 가능하고 또한 snort 탐지룰을 적용하여 ids/ips 시스템에 패턴 업데이트 적용을 통해 대응가능합니다.