안드로이드의 푸들(Padding Oracle On Downloaded Legacy Encryption: Poodle) 취약점

SSLv3에서 푸들(Padding Oracle On Downloaded Legacy Encryption: Poodle) 취약점이 발견되었다. SSLv3가 시장에 나온지 15~18년정도가 되었고, 이미 SSL/TLS1.0 ~ 1.2까지 개선된 대체기술이 나왔으므로, SSLv3 지원 옵션을 끄라는 권장사항이 많다.

푸들 취약점에 간략하게 소개하면, TLS 상위 버전부터 서버와 연결을 시도해서 실패한 경우 클라이언트는 하위버전으로 계속 내려가면서 시도할 수 있다. 클라이언트(이 그림에서는 브라우저)가 TLS 1.2 ~ 1.0까지 계속된 실패로 SSLv3로 시도하게 되면 이 때 취약점을 이용해 개인 정보를 훔친다.

POODLE
http://blog.trendmicro.com/trendlabs-security-intelligence/poodle-vulnerability-puts-online-transactions-at-risk/

그 밖에

권장안에 따라, 서버에서 SSLv3 끈 경우 안드로이드 클라이언트가 SSLv3를 통해 핸드쉐이크를  시도할 때 아래와 같은 에러가 날 수 있다.

Caused by: javax.net.ssl.SSLHandshakeException: Handshake failed
 	at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:374)
 	at com.android.okhttp.Connection.upgradeToTls(Connection.java:1253)
 	at com.android.okhttp.Connection.connect(Connection.java:1184)
 	at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:395)
 	at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:298)
 	at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:399)
 	at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:110)
 	at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:221)
 	at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
	at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25)
	at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:248)
	at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:218)
	at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110)
	at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
	... 1 more
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb82aeef8: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:765 0xa334aba5:0x00000000)
	at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
	at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:302)
	... 14 more

만약 위와 같은 문제를 볼 경우, SSLv3를 끄는 것은 서버 운영자로서 정상적인 선택이므로, 그 이전에 통신에 문제가 있던 것은 아닌지 확인해볼 필요가 있다.

참조

“안드로이드의 푸들(Padding Oracle On Downloaded Legacy Encryption: Poodle) 취약점”에 대한 6개의 생각

  1. 핑백: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb82aeef8: Failure in SSL library, usually a protocol error | Dog발자

  2. 핑백: HttpsUrlConnection의 TLS Intolerance Support | Dog발자

  3. 혹시 안드에서 해결할 수 있는 방법이 있나요? 저도 okhttp를 사용하는데 https에 접속하니 저런 에러가 나와서요.

    1. 안녕하세요,
      저는 이글을 참고하여 해결하였습니다.
      간략히 요약하면, 재시도 시에 SSLv3는 사용하지 않도록 하는 것입니다.

      더 좋은 방법이 있다면 나중에 공유해주세요 🙂

      1. 답변 달아주셔서 감사합니다.

        혹시 okhttp를 사용하셔서 해결 하셨다면?
        ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
        .tlsVersions(TlsVersion.TLS_1_2)
        .cipherSuites(
        CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
        CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
        CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
        .build();
        이코드가 처럼 작성하신건가요? 링크걸어주신건 httpurlconnection일떄일거 같고 okhttpo는 ConnetionSpec클래스로 만들어서 넣어주어야 할거 같은데 조언줌 해주시기 바랍니다.

        1. 저는 HttpURLConnection을 사용해서요 ^^; 아쉽게도 아직 okhttp는 사용해 본적이 없네요.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.