취약하거나 위험한 암호 알고리즘 사용
Use of a Broken or Risky Cryptographic Algorithm
설명
이 취약점은 TLS 설정에서 이미 취약하다고 알려진 CipherSuite(암호 스위트)를 직접 지정해서 사용하는 경우에 발생합니다. RC4, 3DES, AES-CBC 등의 오래되었거나 설계상 문제가 있는 알고리즘들은 통신 내용을 복호화하거나 위·변조할 수 있는 여러 공격에 취약합니다. 공격자는 네트워크를 가로채는 Man-in-the-Middle(MITM) 공격이나 프로토콜 다운그레이드 공격 등을 통해, 취약한 CipherSuite가 사용되는 연결을 유도하고, 암호화된 데이터를 점진적으로 복호화하거나 세션 정보를 탈취할 수 있습니다.
잠재적 영향
민감 정보 노출: 취약한 CipherSuite를 통한 TLS 통신은 암호 강도가 낮아, 세션 키나 개인정보, 인증 토큰 등이 장기간에 걸쳐 복호화될 수 있습니다.
통신 위·변조: 공격자가 TLS 세션을 부분적으로 해독하면서, 요청/응답 데이터를 조작하거나 피싱 페이지로 리다이렉트하는 등의 MITM 공격이 가능해질 수 있습니다.
암호 강도 저하: 서비스 자체는 TLS를 사용하지만, 안전하지 않은 CipherSuite 때문에 실제 보안 수준이 크게 떨어져 규제나 보안 요구사항을 충족하지 못할 수 있습니다.
해결 방법
최신 권고 CipherSuite 사용: Go의
tls.CipherSuites()또는 공식 문서를 참고하여,TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384등 현대적인 AEAD(GCM/CHACHA20-POLY1305) 기반 CipherSuite만 선택합니다.취약 CipherSuite 명시적 차단: RC4, 3DES, AES-CBC 기반 CipherSuite는 설정에서 제거하고, 가능하면 CipherSuites를 직접 나열하기보다 기본 안전 설정에 의존합니다(최신 Go 버전 기준).
TLS 버전 상향:
MinVersion을tls.VersionTLS12이상(가능하면tls.VersionTLS13)으로 설정하여, 프로토콜 다운그레이드 및 구식 CipherSuite 사용 가능성을 줄입니다.정기적인 보안 가이드 업데이트: 운영 중인 서비스는 주기적으로 Go 릴리스 노트 및 보안 가이드를 확인하여, 더 이상 안전하지 않은 CipherSuite가 없는지 점검합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: 위 비준수 코드는 TLS 설정에서
tls.TLS_RSA_WITH_RC4_128_SHA,tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256와 같이 취약하거나 비권장된 CipherSuite를 명시적으로 사용하고 있습니다. RC4는 통계적 약점으로 인해 평문 복구 공격이 가능하고, 3DES는 블록 크기가 작아 SWEET32 같은 공격에 취약합니다. AES-CBC는 구현/패딩 처리에 따라 여러 패딩 오라클 공격에 노출될 수 있습니다. 또한MinVersion을 TLS 1.0으로 낮게 두면, 프로토콜 다운그레이드 공격으로 더 취약한 조합이 사용될 수 있습니다.안전한 코드: 준수 코드는 다음과 같은 방식으로 취약점을 완화합니다.
MinVersion: tls.VersionTLS12로 최소 TLS 버전을 상향하여, 오래된 프로토콜(TLS 1.0/1.1)과 그에 따른 취약 CipherSuite 사용을 차단합니다.CipherSuites 배열에는 GCM 또는 CHACHA20-POLY1305 같은 AEAD 방식을 사용하는 현대적인 CipherSuite만 포함해, 기설계 취약점이 있는 RC4/3DES/AES-CBC 기반 Suite를 제거했습니다.
이로 인해 공격자가 MITM이나 다운그레이드 공격을 시도해도, 약한 암호 조합으로 세션을 유도하기가 어렵고, 장기적인 복호화 및 세션 탈취 위험이 크게 줄어듭니다.
참조
Last updated