서버 보안 취약점 해결: TLS 1.0 비활성화, HSTS, CSP 설정

1. TLS 1.0 활성화 문제

설명
서버가 TLS 1.0 암호화를 지원하고 있습니다. TLS 1.0은 더 이상 안전한 프로토콜로 간주되지 않으며, PCI DSS 3.2.1 기준에 따라 2018년 6월 30일 이후로는 TLS 1.1 이상(권장 TLS 1.2)을 사용해야 합니다.

영향
공격자가 중간자 공격(MITM)을 수행하거나 통신 내용을 복호화할 가능성이 있습니다.

권장 조치
TLS 1.0을 비활성화하고 TLS 1.2 이상만 사용하도록 설정하세요.

해결 방법 (Nginx)
먼저 OpenSSL 버전을 확인합니다.

openssl version
# 출력 예: OpenSSL 1.0.2k-fips  26 Jan 2017
# CentOS 7.9 기본값은 위와 같으며, TLS 1.3을 지원하려면 OpenSSL 1.1.1 이상이 필요합니다.

TLS 1.2 지원 여부를 테스트합니다.

openssl s_client -connect example.com:443 -tls1_2

Nginx 설정 파일에서 ssl_protocols 지시문을 수정합니다.

ssl_protocols TLSv1.2;
# TLS 1.2만 허용. 필요시 TLSv1.3도 추가 가능

변경 후 Nginx를 재시작합니다.

2. 디렉터리 목록 노출

설명
웹 서버에서 특정 디렉터리에 인덱스 파일이 없을 때 디렉터리 내용을 자동으로 표시하는 기능이 활성화되어 있습니다. 이로 인해 의도치 않은 파일 정보가 노출될 수 있습니다.

영향
공격자가 디렉터리 내 모든 파일 목록을 확인하여 민감한 정보를 획득할 위험이 있습니다.

해결 방법
Nginx 기본 설정에서는 디렉터리 목록이 비활성화되어 있습니다. 만약 활성화되어 있다면 nginx.conf에서 다음 줄을 제거하거나 주석 처리하세요.

# autoindex on;
# autoindex_exact_size on;

설정을 저장한 후 Nginx를 재시작합니다.

3. HTTP 엄격 전송 보안(HSTS) 미적용

설명
HSTS(HTTP Strict Transport Security)는 브라우저가 HTTPS를 통해서만 사이트에 접속하도록 강제하는 보안 헤더입니다. 응답에 Strict-Transport-Security 헤더가 없으면 HSTS가 적용되지 않은 것입니다.

영향
HSTS가 없으면 중간자 공격(MITM)으로 인해 사용자가 HTTP로 연결되거나 프로토콜 다운그레이드 공격에 취약해집니다.

해결 방법
Nginx 설정에 다음 헤더를 추가합니다.

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
# 또는 preload 옵션 포함
add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload' always;
  • max-age: HSTS 정책 유효 기간(초), 31536000은 1년
  • includeSubDomains: 모든 하위 도메인에 적용
  • preload: 브라우저 프리로드 목록에 등록 가능

설정 후 Nginx를 재시작합니다.

4. 콘텐츠 보안 정책(CSP) 미적용

설명
CSP(Content Security Policy)는 XSS(Cross-Site Scripting) 및 데이터 인젝션 공격을 탐지하고 완화하기 위한 보안 계층입니다. Content-Security-Policy 헤더가 없으면 CSP가 적용되지 않은 상태입니다.

영향
CSP가 없으면 악성 스크립트 주입, 클릭재킹, iframe을 통한 위험 리소스 삽입 등에 취약합니다.

권장 조치
웹 애플리케이션에서 사용하는 모든 리소스 유형에 대해 허용 가능한 출처를 명시하는 CSP 헤더를 추가하세요.

해결 방법 (Nginx 예시)

# 기본 CSP 헤더 설정
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";

# 실제 운영 환경에서는 더 엄격한 정책을 권장합니다.
# 예: 외부 CDN 사용 시
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-cdn.com; style-src 'self' https://trusted-cdn.com cdn.jsdelivr.net; img-src 'self' https://images.example.com data:; font-src 'self' data: https://fonts.example.com cdn.jsdelivr.net;";
  • default-src 'self': 기본적으로 동일 출처만 허용
  • script-src: 스크립트 허용 출처 (가능하면 'unsafe-inline''unsafe-eval'은 배제)
  • style-src: 스타일시트 허용 출처
  • img-src, font-src: 이미지, 폰트 등 기타 리소스
  • 여러 출처는 공백으로 구분

설정 후 Nginx를 재시작하여 적용합니다.

태그: TLS 1.0 비활성화 HSTS 설정 CSP 헤더 Nginx 보안 SSL/TLS

8월 20일 08:57에 게시됨