중간자 공격에 취약하지 않은 SSL/TLS 연결을 설정하려면 서버가 올바른 인증서를 제공하는지 확인해야 합니다.
인증서의 호스트 이름 관련 데이터는 서버 호스트 이름과 일치해야 합니다.
사용자 지정 호스트 이름 확인을 구현하여 새것을 만들지 않는 것이 좋습니다.
TLS/SSL 라이브러리에는 호스트 이름 확인 기능이 내장되어 있으므로 이를 사용해야 합니다.
규칙을 어긴 코드
Python ssl standard 라이브러리:
import ssl
ctx = ssl._create_unverified_context() # 규칙을 어긴 코드: 기본적으로 호스트 이름 확인은 수행되지 않습니다
ctx = ssl._create_stdlib_context() # 규칙을 어긴 코드: 기본적으로 호스트 이름 확인은 수행되지 않습니다
ctx = ssl.create_default_context()
ctx.check_hostname = False # 규칙을 어긴 코드
ctx = ssl._create_default_https_context()
ctx.check_hostname = False # 규칙을 어긴 코드
규칙을 준수한 해결책
Python ssl standard 라이브러리:
import ssl
ctx = ssl._create_unverified_context()
ctx.check_hostname = True # 규칙을 준수한 코드
ctx = ssl._create_stdlib_context()
ctx.check_hostname = True # 규칙을 준수한 코드
ctx = ssl.create_default_context() # 규칙을 준수한 코드: 기본적으로 호스트 이름 확인이 활성화되어 있습니다
ctx = ssl._create_default_https_context() # 규칙을 준수한 코드: 기본적으로 호스트 이름 확인이 활성화되어 있습니다
같이보면 좋은 자료
- OWASP Top 10 2021 Category A2 - 암호화 실패
- OWASP Top 10 2021 Category A5 - 보안 구성 오류
- OWASP Top 10 2021 Category A7 - 식별 및 인증 실패
- OWASP Top 10 2017 Category A3 - 민감한 데이터 노출
- OWASP Top 10 2017 Category A6 - 보안 구성 오류
- Mobile AppSec Verification Standard - 네트워크 통신 요구 사항
- OWASP Mobile Top 10 2016 Category M3 - 안전하지 않은 통신
-
MITRE, CWE-297 - 호스트 불일치로 인한 부적절한 인증서 유효성 검사
If you like SONARKUBE, don’t forget to give me a star.