OpenSSL TLS 하트비트 확장의 심각한 취약점 (CVE-2014-0160)

TLS/DTLS (transport layer security protocols) 하트비트 확장(RFC6520)의 OpenSSL 구현에 심각한 취약점이 있습니다.

이 심각한 취약점은 CVE 아이디 CVE-2014-0160 에 할당되었습니다.

악용하면 클라이언트에서 서버, 서버에서 클라이언트로 보내는 메모리의 내용이 노출될 수 있습니다. 공격자는 원격에서 메모리에 포함된 비밀 키나 SSL 암호화, 인증 토큰과 그 밖의 민감한 정보를 조회할 수 있습니다.

공격에 대한 좀 더 자세한 정보는 heartbleed.com을 확인하세요.

루비는 어떻게 영향 받나요?

루비는 OpenSSL의 C 확장을 통해 OpenSSL의 취약한 버전을 정적으로 컴파일할 때 영향을 받습니다.

OpenSSL 버전 1.0.1에서 1.0.1f까지 이 공격에 취약합니다. Ruby에 연결된 OpenSSL이 어떤 버전을 사용하는지 확인하려면 이렇게 하세요.

ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'

루비와 함께 설치된 OpenSSL의 버전을 확인하려면 이렇게 하세요.

ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'

emboss의 스크립트를 사용하여 클라이언트 소프트웨어나 운영하는 서비스가 취약한지 확인하실 수 있습니다.

해결책

1.0.1g보다 새로운 최신의 OpenSSL 버전으로 업그레이드하시려면, 운영체제의 현재 패키지 매니저에서 최신의 OpenSSL을 제공하는지 확인하셔야 합니다. 아마도 OpenSSL이 패치 되었는지, 관계없는 버전을 사용하는지 확인하시려면 운영체제의 배포자와 상담하실 필요가 있을 것입니다.

업그레이드하실 수 없으시다면, -DOPENSSL_NO_HEARTBEATS 옵션으로 빌드하실 때 패치 된 OpenSSL로 재컴파일하세요.

취약한 버전의 OpenSSL과의 링크가 없도록 확실히 하기 위해 업그레이드된 OpenSSL과 함께 Ruby도 재컴파일하시기를 추천합니다.

이 말은 루비를 빌드하기위한 툴들(RVM, ruby-build)을 업데이트하란 뜻입니다. 만약 직접 루비를 빌드하셨다면, 컴파일할 때 --with-openssl-dir 옵션으로 업그레이드된 OpenSSL 설치 디렉터리를 지정하세요.

$ ./configure --with-openssl-dir=/path/to/openssl
$ make
$ make install

OpenSSL과 루비를 업그레이드한 이후, 취약한 버전을 사용하던 모든 프로그램을 재 시작하는 것도 중요합니다.

많은 운영체제 배포판들이 이미 (혹은 가까운 시일 내에) 패치 된 버전과 이 공격에 취약점 있는 라이브러리를 사용하기 때문에 다시 빌드된 패키지를 제공하고 있습니다. 보안을 확실히 하려면 운영체제 배포판을 모니터링하는 것도 중요합니다.