정보보호 (Security)

웹사이트 SSL/TLS 암호화 통신 알고리즘 보안 가이드라인

날으는물고기 2024. 9. 13. 00:02

SSL/TLS 암호화 통신 알고리즘에 대한 보안 기준을 수립하는 것은 매우 중요합니다. 특히, 민감한 데이터를 보호하고 통신의 기밀성을 유지하기 위해 강력한 암호화 프로토콜과 안전한 사이퍼 슈트를 사용하는 것이 필요합니다. 다음은 TLS 1.3 및 이전 버전에 대한 보안 기준을 제시한 가이드입니다.

1. TLS 버전 관리

  • TLS 1.3 사용 권장
    • TLS 1.2: 지원하되, TLS 1.3이 사용 가능한 환경에서는 반드시 TLS 1.3을 우선적으로 사용하도록 설정.
    • TLS 1.1 및 1.0: 더 이상 안전하지 않으므로 지원 중단. 가능한 한 서비스 환경에서 완전히 제거.

2. Cipher Suite, 암호문의 집합 구성

  • TLS 1.3: TLS 1.3에서는 더 안전한 사이퍼 슈트를 사용하며, 이전 버전보다 간소화되어 있습니다. 아래는 권장하는 사이퍼 슈트입니다.
    • TLS_AES_256_GCM_SHA384
    • TLS_CHACHA20_POLY1305_SHA256
    • TLS_AES_128_GCM_SHA256
  • TLS 1.2: 안전한 사이퍼 슈트만을 사용하도록 설정합니다. 아래는 권장하는 사이퍼 슈트 목록입니다.
    • ECDHE-ECDSA-AES256-GCM-SHA384
    • ECDHE-RSA-AES256-GCM-SHA384
    • ECDHE-ECDSA-CHACHA20-POLY1305
    • ECDHE-RSA-CHACHA20-POLY1305
    • ECDHE-ECDSA-AES128-GCM-SHA256
    • ECDHE-RSA-AES128-GCM-SHA256

3. 키 교환 알고리즘

  • EC(DHE) 사용 권장: 키 교환에 있어서는 ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)를 사용하여 키 재협상 시마다 임시 키를 생성해 안전성을 높입니다.
    • ECDHE-ECDSA
    • ECDHE-RSA

4. 인증서 및 키 길이

  • 인증서: 신뢰할 수 있는 인증기관(CA)에서 발급된 인증서 사용.
  • 키 길이: 최소 2048비트 RSA 키 또는 256비트 ECC 키 사용 권장.

5. 해시 함수

  • SHA-2 계열: SHA-256, SHA-384와 같은 안전한 해시 함수를 사용.
  • SHA-1: 더 이상 안전하지 않으므로 사용 금지.

6. 보안 설정

  • HSTS(HTTP Strict Transport Security): 웹 서버 설정 시 HSTS를 활성화하여 HTTPS 사용을 강제.
  • OCSP Stapling: 인증서 상태 확인을 위해 OCSP 스테이플링 사용.
  • 서버 설정: 안전한 설정을 위해 불필요한 기능 비활성화 및 보안 패치 최신 상태 유지.

점검 포인트 및 권고 사항

  1. TLS 버전 검사: TLS 1.3 및 1.2가 설정되었는지 확인.
  2. 사이퍼 슈트 검사: 권장 사이퍼 슈트만이 활성화되어 있는지 점검.
  3. 인증서 유효성 검사: 인증서가 신뢰할 수 있는 CA로부터 발급되었고, 유효 기간 내에 있는지 확인.
  4. 서버 구성 검사: HSTS, OCSP 스테이플링 등의 보안 기능이 활성화되었는지 확인.
  5. 패치 상태 검사: 서버 및 관련 소프트웨어가 최신 보안 패치가 적용되었는지 점검.
  6. 취약점 스캔: 정기적인 취약점 스캔을 통해 최신 보안 취약점이 없는지 확인.

예시: Nginx TLS 1.3 설정

server {
    listen 443 ssl;
    server_name example.com;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_ecdh_curve secp384r1;
    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    # HSTS 설정
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

    # OCSP 스테이플링 설정
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4;
}

위의 설정 예시는 Nginx 웹 서버에 TLS 1.3을 설정하고 권장 사이퍼 슈트를 사용하는 방법을 보여줍니다. 이를 통해 보안 수준을 높이고 안전한 암호화 통신을 보장할 수 있습니다. 몇가지 예시로 취약사항 조치 및 보안 관점에서의 필수 변경 및 긴급도 평가에 대해 설명해 보겠습니다.

1) POODLE Attack에 대한 취약점 (SSL 3.0 비활성화)

배경 정보 및 문제점

  • POODLE(Padding Oracle On Downgraded Legacy Encryption) 공격은 SSL 3.0 프로토콜의 취약점을 이용하여 암호화된 데이터를 해독할 수 있는 공격입니다.
  • SSL 3.0은 오래된 프로토콜로, 현재는 더 안전한 TLS 프로토콜이 표준으로 사용되고 있습니다.

조치 사항

  • 서버 및 클라이언트 양쪽에서 SSL 3.0을 비활성화하고, TLS 1.1 또는 TLS 1.2를 사용하도록 설정합니다.
  • 설정 방법은 웹 서버 설정 파일을 수정하여 SSL 3.0을 비활성화하고, TLS 1.1 이상만을 허용하는 방식으로 이루어집니다.

긴급도

  • 매우 긴급: SSL 3.0의 취약점은 잘 알려져 있으며, 공격자가 이를 이용하여 데이터를 탈취할 수 있습니다. 따라서 즉각적인 조치가 필요합니다.

예시 설정 방법

  • Apache 웹 서버의 경우: SSLProtocol All -SSLv2 -SSLv3
  • Nginx 웹 서버의 경우: ssl_protocols TLSv1.1 TLSv1.2;

2) SHA-1 해시 함수 사용

배경 정보 및 문제점

  • SHA-1 해시 함수는 오래된 알고리즘으로, 충돌 공격(collisions)이 가능한 취약점이 존재합니다.
  • 현재는 SHA-256과 같은 더 안전한 해시 알고리즘이 사용되고 있습니다.

조치 사항

  • SHA-1 해시 알고리즘을 사용하는 모든 서버 및 어플리케이션에서 SHA-256 또는 그 이상의 해시 알고리즘으로 변경해야 합니다.
  • 변경 작업은 소프트웨어 및 라이브러리 업데이트, 설정 파일 수정 등을 포함합니다.

긴급도

  • 높음: SHA-1의 취약점은 이미 널리 알려져 있으며, 이를 악용한 공격이 가능하므로 가능한 한 빨리 교체해야 합니다.

예시 설정 방법

  • OpenSSL 설정 파일 (openssl.cnf)에서 다음과 같이 변경합니다.
    default_md = sha256

3) 3DES Cipher 지원

배경 정보 및 문제점

  • 3DES(Triple DES)는 Sweet32 공격에 취약한 암호화 알고리즘으로, 반복되는 패턴을 사용하여 데이터를 해독할 수 있는 취약점이 있습니다.
  • 현재는 AES와 같은 더 안전한 암호화 알고리즘이 사용되고 있습니다.

조치 사항

  • 3DES 암호화를 비활성화하고, AES와 같은 최신 암호화 알고리즘을 사용하도록 서버 설정을 변경합니다.
  • 웹 서버 및 기타 암호화 통신을 사용하는 서비스의 설정 파일을 수정해야 합니다.

긴급도

  • 높음: 3DES의 취약점은 데이터 탈취의 위험을 증가시키므로, 가능한 한 빨리 사용을 중지해야 합니다.

예시 설정 방법

  • Apache 웹 서버의 경우: SSLCipherSuite HIGH:!3DES
  • Nginx 웹 서버의 경우: ssl_ciphers 'AES256+EECDH:AES256+EDH';

위의 세 가지 취약점은 모두 심각한 보안 문제를 야기할 수 있으며, 각각의 조치는 가능한 한 빨리 수행되어야 합니다. SSL 3.0 비활성화와 SHA-1 해시 함수의 교체는 매우 긴급하게 처리해야 하며, 3DES 암호화의 중지 또한 신속하게 이루어져야 합니다. 이러한 조치를 통해 서비스의 보안을 크게 향상시킬 수 있습니다. SSL/TLS 보안 요소와 관련된 명령어 옵션 및 코드 예시를 통해 설정과 모니터링 방법을 설명합니다.

1. 프로토콜 버전 설정 및 모니터링

Apache 웹 서버에서 SSL 3.0 비활성화 및 TLS 1.2, 1.3 활성화

# Apache 설정 파일 (httpd.conf 또는 ssl.conf)
SSLProtocol -SSLv3 +TLSv1.2 +TLSv1.3

Nginx 웹 서버에서 SSL 3.0 비활성화 및 TLS 1.2, 1.3 활성화

# Nginx 설정 파일 (nginx.conf 또는 ssl.conf)
ssl_protocols TLSv1.2 TLSv1.3;

2. 암호화 알고리즘 설정 및 모니터링

Apache에서 안전한 암호화 알고리즘 설정

# Apache 설정 파일 (httpd.conf 또는 ssl.conf)
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
SSLHonorCipherOrder on

Nginx에서 안전한 암호화 알고리즘 설정

# Nginx 설정 파일 (nginx.conf 또는 ssl.conf)
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers on;

3. 해시 함수 설정

OpenSSL에서 SHA-256 해시 함수 사용 설정

# OpenSSL 설정 파일 (openssl.cnf)
default_md = sha256

4. 키 교환 알고리즘 설정

Apache에서 ECDHE를 사용하는 설정

# Apache 설정 파일 (httpd.conf 또는 ssl.conf)
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder on

Nginx에서 ECDHE를 사용하는 설정

# Nginx 설정 파일 (nginx.conf 또는 ssl.conf)
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;

5. 인증서 모니터링 및 관리

인증서 만료일 확인 (Bash 스크립트)

# 인증서 만료일 확인 스크립트 (check_ssl_expiry.sh)
DOMAIN="example.com"
EXPIRY_DATE=$(echo | openssl s_client -connect ${DOMAIN}:443 2>/dev/null | openssl x509 -noout -dates | grep 'notAfter=' | cut -d= -f2)
echo "SSL Certificate for ${DOMAIN} expires on: ${EXPIRY_DATE}"

6. SSL/TLS 설정 점검 도구 사용 예시

SSLyze를 사용한 SSL/TLS 설정 점검

# SSLyze 설치 및 사용 예시
pip install --upgrade pip
pip install sslyze

# SSLyze를 사용한 SSL/TLS 설정 점검
sslyze --regular example.com

testssl.sh를 사용한 SSL/TLS 설정 점검

# testssl.sh 다운로드 및 실행
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh example.com

7. CI/CD 파이프라인에서 SSL/TLS 설정 점검 통합 예시

Jenkins에서 SSLyze를 사용한 SSL/TLS 설정 점검 통합

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('SSL/TLS Scan') {
            steps {
                script {
                    sh 'sslyze --json_out=ssl_scan_results.json example.com'
                    archiveArtifacts artifacts: 'ssl_scan_results.json', allowEmptyArchive: true
                }
            }
        }
    }
}

8. 정기적인 모니터링 스케줄 설정 예시

매일 SSL/TLS 설정 점검을 위한 Cron job

# crontab -e 명령어로 크론탭 편집기 열기
0 0 * * * /path/to/check_ssl_expiry.sh >> /var/log/ssl_expiry.log 2>&1

위의 명령어, 옵션, 코드 예시들은 SSL/TLS 보안을 강화하기 위한 다양한 설정과 모니터링 방법을 구체적으로 설명합니다. 이러한 설정과 점검을 통해 웹 서버의 보안을 유지하고 잠재적인 취약점을 사전에 방지할 수 있습니다.

728x90