부적절한 인증서 검증
Improper Certificate Validation
설명
부적절한 인증서 검증(Improper Certificate Validation)은 애플리케이션이 SSL/TLS 인증서를 올바르게 검증하지 못할 때 발생하는 취약성입니다. 이는 중간자 공격(Man-in-the-Middle, MITM)을 허용하여 공격자가 통신을 가로채거나 변조할 수 있게 합니다.
잠재적 영향
중간자 공격: 공격자가 클라이언트와 서버 간의 통신을 가로채거나 변조할 수 있습니다.
데이터 유출: 민감한 데이터가 공격자에게 노출될 수 있습니다.
서비스 무결성 손상: 통신의 무결성과 기밀성이 손상될 수 있습니다.
해결 방법
인증서 검증 활성화: SSL/TLS 인증서 검증을 반드시 활성화합니다.
보안 라이브러리 사용: Python의
requests라이브러리 등과 같은 보안 라이브러리를 사용하여 올바른 인증서 검증을 수행합니다.최신 인증서 사용: 유효하고 최신의 인증서를 사용하여 신뢰할 수 있는 CA(Certificate Authority)로부터 발급받습니다.
취약한 코드 및 안전한 코드 예시
Standard Library - SSL
취약한 코드
안전한 코드
설명:
취약한 코드:
ssl._create_stdlib_context(),ssl._create_unverified_context()및verify_mode에ssl.CERT_NONE을 사용시 SSL 인증서 비활성화되어 중간자 공격에 취약합니다.안전한 코드:
verify_mode에ssl.CERT_REQUIRED및ssl._create_default_https_context()을 사용하여 SSL 인증서 검증을 활성화하여 통신의 무결성과 기밀성을 유지합니다.
OpenSSL
취약한 코드
안전한 코드
설명:
취약한 코드:
set_verify설정 없이 사용하거나SSL.VERIFY_NONE을 사용하여 SSL 인증서 검증을 비활성화하여 중간자 공격에 취약합니다.안전한 코드:
set_verify설정을 통해SSL.VERIFY_PEER을 사용하여 SSL 인증서 검증을 활성화하여 통신의 무결성과 기밀성을 유지합니다.
Requests
취약한 코드
안전한 코드
개인 인증서를 사용한 인증서 검증
설명:
취약한 코드:
verify=False를 사용하여 SSL 인증서 검증을 비활성화하여 중간자 공격에 취약합니다.안전한 코드:
verify=False와 같은 코드를 제거하거나verify=True를 사용하여 SSL 인증서 검증을 활성화하여 통신의 무결성과 기밀성을 유지합니다.개인 인증서를 사용하여 verify 실패가 발생할 경우 위의 예제와 같이 verify에 개인 인증서 경로를 추가하여 검증을 활성화하여 통신의 무결성과 기밀성을 유지합니다.
HTTPX
취약한 코드
안전한 코드
개인 인증서를 사용한 인증서 검증
또는 아래와 같이 사용자측 인증서를 지정하여 사용
설명:
취약한 코드:
verify=False를 사용하여 SSL 인증서 검증을 비활성화하여 중간자 공격에 취약합니다.안전한 코드:
verify=False와 같은 코드를 제거하여 SSL 인증서 검증을 활성화하여 통신의 무결성과 기밀성을 유지합니다.개인 인증서를 사용하여 verify 실패가 발생할 경우 위의 예제와 같이
verify에 개인 인증서 경로를 추가하거나 사용자측 인증서를 지정하여 검증을 활성화해 통신의 무결성과 기밀성을 유지합니다.
aiohttp
취약한 코드
안전한 코드
설명:
취약한 코드:
verify_ssl=False를 사용하여 SSL 인증서 검증을 비활성화하여 중간자 공격에 취약합니다.안전한 코드:
verify=False와 같은 코드를 제거하거나verify_ssl=True로 설정하여 SSL 인증서 검증을 활성화하여 통신의 무결성과 기밀성을 유지합니다.
urllib3
취약한 코드
안전한 코드
설명:
취약한 코드:
cert_reqs='CERT_NONE'을 사용하여 SSL 인증서 검증을 비활성화하여 중간자 공격에 취약합니다.안전한 코드:
cert_reqs='CERT_REQUIRED'을 사용하도록 적용하고 개인 인증서 사용이 필요할 경우ca_certs에 인증서 경로를 추가하여 SSL 인증서 검증을 활성화하여 통신의 무결성과 기밀성을 유지합니다.
참조
OWASP: SSL/TLS Best Practices
SSL - HTTPX: https://www.python-httpx.org/advanced/ssl/
Last updated