Apache HTTP Server

OpenSSL 보안 취약점 관련 여러 고민들과 suites

제끼나·2016년 8월 9일·조회 10,003

요즘 openssl 보안 취약점 관련해서 과연 어떤 설정이 가장 보안에 안전할까에 대한 고민이 많습니다.

최근 몇년 새에 심각한 취약점들이 발표되었었죠..

몇 가지 주요한 취약점들을 나열해보면,

RC4 in TLS is Broken, Poodle Attack, FREAK, Logjam, DROWN Attack, Oracle Padding Attack 정도 될 것 같습니다.

이러한 취약점들의 조치 방안으로 지속적으로 openssl 버전 업그레이드가 되어왔는데요~

버전 업그레이드를 해야만 하는 경우도 있었지만, 설정으로 취약점을 보완할 수 있는 경우도 있었답니다.

현재 1.0.1 버전은 t까지 업데이트 되었더라구요..이 버전에서 올해 5월에 나온 Oracle Padding Attack 관련 취약점이 fix되었다고 합니다.

먼저 위에 나열했던 주요 취약점들에 대해 조치 해왔던 사항들에 대해 정리해보았어요.

* Poodle Attack 방지를 위해 SSLProtocol에서 SSLv2와 SSLv3를 제외시켰구요~

(SSLCipherSuite에서 한번더 !(NOT)연산자로 제외해주기도 했답니다.)

* 취약한 Cipher들을 제외시켰습니다.

-> SSLCipherSuite에 !RC4 추가, !EXPORT(또는 !EXP)추가, AES_CBC 방식을 AES_GCM(요게 safe하다고 해요)으로 변경!

제가 조치해왔던 거면 충분한 것일지 의문이 들기 시작했답니다..ㅎㅎ

Secure한 CipherSuites를 설정하려면 어떻게 해야할까 찾아보았어요..

참고한 사이트는 https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices 여긴데..

이곳에서 얘기하는대로 따르면..

첫번째! 우선, 아래와 같은 설정은 피해야 한다고 하네요..

  • Anonymous Diffie-Hellman (ADH) suites do not provide authentication.
  • NULL cipher suites provide no encryption.
  • Export cipher suites are insecure when negotiated in a connection, but they can also be used against a server that prefers stronger suites (the FREAK attack).
  • Suites with weak ciphers (typically of 40 and 56 bits) use encryption that can easily be broken.
  • RC4 is insecure.
  • 3DES is slow and weak.

==> 참고해서 suites를 작성해봅니다. 네번째 항목 빼고는 포함된 것 같네요!

!ADH:!aNULL:!eNULL:!EXPORT:!RC4:!3DES

두번째! 아래와 같이 RSA와 ECDSA keys로 디자인된 알고리즘을 설정하라고 하네요..

ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES128-SHA
ECDHE-ECDSA-AES256-SHA
ECDHE-ECDSA-AES128-SHA256
ECDHE-ECDSA-AES256-SHA384
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES128-SHA
ECDHE-RSA-AES256-SHA
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES256-SHA384
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES128-SHA
DHE-RSA-AES256-SHA
DHE-RSA-AES128-SHA256
DHE-RSA-AES256-SHA256
EDH-RSA-DES-CBC3-SHA

==> 이런 포맷으로도 변환해봤습니다.

(https://www.openssl.org/docs/manmaster/apps/ciphers.html 이곳의 도움을 받았지요 ㅎ 이렇게 매핑이 된다고 합니다..이런 노가다가;ㅋㅋ)

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:TLS_DHE_RSA_WITH_AES_128_CBC_SHA:TLS_DHE_RSA_WITH_AES_256_CBC_SHA:TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA

Nginx와 Apache HTTP Server에 SSLCipherSuite를 어떻게 설정할지 확인해봤습니다.

* Apache HTTP Server

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

* Nginx

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

추가로 하나 더 해보았어요~

여기 삵에 게시된 글 중에 ssl 설정 제너레이터 주소를 공유해 주셨었는데요~ (https://mozilla.github.io/server-side-tls/ssl-config-generator/)

여기서 돌려보니, 이렇게! 살짝 보안에 대해서는 약한 suite로 생성해주는 감이 있긴 하네요^^

ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS


오늘은 여기까지!! :)

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.