취약한 SSL/TLS 프로토콜을 사용해서는 안 됩니다.

 

이 규칙은 안전하지 않은 TLS 프로토콜 버전(“TLSv1.2”, “TLSv1.3”, “DTLSv1.2” 또는 “DTLSv1.3”과 다른 프로토콜)이 사용되거나 허용될 때 문제를 제기합니다.

최소 프로토콜 버전으로 TLS 1.2를 적용하고 TLS 1.0과 같은 이전 버전은 허용하지 않는 것이 좋습니다. 그렇게 하지 않으면 다운그레이드 공격에 노출될 수 있습니다. 연결을 가로챌 수 있는 악의적인 공격자가 요청된 프로토콜 버전을 수정하여 보안이 낮은 버전으로 다운그레이드할 수 있습니다.

대부분의 경우 기본 시스템 구성을 사용하는 것은 규정을 준수하지 않습니다. 실제로 애플리케이션이 다양한 구성을 가진 다양한 시스템에 배포될 수 있습니다. 최신 최신 시스템에서는 시스템의 기본값을 사용하는 것이 안전할 수 있지만, 구형 시스템에서는 그렇지 않을 수 있습니다. 따라서 모든 경우에 명시적으로 안전한 구성을 설정하는 것이 좋습니다.

규칙을 어긴 코드

from OpenSSL import SSL

SSL.Context(SSL.SSLv3_METHOD)  # 규칙을 어긴 코드
import ssl

ssl.SSLContext(ssl.PROTOCOL_SSLv3) # 규칙을 어긴 코드

aws_cdk.aws_apigateway.DomainNamed 의 경우:

from aws_cdk.aws_apigateway import DomainName, SecurityPolicy
class ExampleStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        DomainName(self, "example",
            domain_name="example.com",
            certificate=certificate,
            security_policy=SecurityPolicy.TLS_1_0 # 규칙을 어긴 코드
        )

aws_cdk.aws_opensearchservice.CfnDomain 의 경:

from aws_cdk.aws_opensearchservice import CfnDomain, EngineVersion
class ExampleStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        CfnDomain(self, "example",
            version=EngineVersion.OPENSEARCH_1_3
        ) # 규칙을 어긴 코드: 더 이상 사용되지 않는 프로토콜 버전인 TLS 1.0을 활성화합니다.

규칙을 준수한 해결책

from OpenSSL import SSL

context = SSL.Context(SSL.TLS_SERVER_METHOD)
context.set_min_proto_version(SSL.TLS1_3_VERSION)
import ssl

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.minimum_version = ssl.TLSVersion.TLSv1_3

aws_cdk.aws_apigateway.DomainNamed 의 경우:

from aws_cdk.aws_apigateway import DomainName, SecurityPolicy
class ExampleStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwa우rgs)
        DomainName(self, "example",
            domain_name="example.com",
            certificate=certificate,
            security_policy=SecurityPolicy.TLS_1_2
        )

aws_cdk.aws_opensearchservice.CfnDomain 의 경우:

from aws_cdk.aws_opensearchservice import CfnDomain, EngineVersion
class ExampleStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        CfnDomain(self, "example",
            version=EngineVersion.OPENSEARCH_1_3
            domain_endpoint_options=CfnDomain.DomainEndpointOptionsProperty(
                tls_security_policy="Policy-Min-TLS-1-2-2019-07"
            )
        )

같이보면 좋은 자료드

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project