Introduction
SSL/TLS 관련 심화 주제를 다룹니다.
TLS의 Cipher Suite
•
TLS는 쌍방이 사용할 4개의 알고리즘 즉, 키교환, 전자서명, 대칭키 암호화, MAC 알고리즘을 handshaking 과정을 통해 합의한다. 아래와 같은 형식으로.
•
대칭키 교환 방식은 ECDHE(Elliptic Curve Diffie Hellman Ephemeral)을 사용
•
인증서 서명 방식은 RSA로 서명된 인증서로 상호 간의 신원을 확인
•
대칭키 암호화 알고리즘은 AES 256bit와 GCM을 사용
•
HMAC 알고리즘으로는 SHA-384를 사용해서 메시지의 무결성을 확인
TLS authentication 메커니즘
Domain 유효성 검증
•
접근한 domain name과 certificate 내 CN(Common Name) field 값의 동일성 비교
•
참고 : CN에는 일반적으로 domain name이 들어감(wildcard 포함 가능)
signature 검증
사전 지식
•
검증 대상 certificate 내 signature는 CA의 private key로 sign됨
•
검증 주체는 검증 대상 certificate을 sign한 CA certificate을 갖고 있음
검증 절차(digital signature 검증 메커니즘 그대로 사용)
1.
MD 추출 via public key of CA : 검증 대상 certificate 내 포함된 signature를 검증 주체 자신이 가진 CA certificate 내 public key로 복호화
2.
MD 추출 via hashing : 검증 대상 certificate을 hashing
3.
추출된 MD 간의 동일성 비교
조건
검증 대상 certificate의 CA와 검증 주체가 가진 CA는 동일해야 함
기타
•
본 설명에서 expiration / activation date 검증 및 revocation 검증 작업에 대해서는 생략함
•
DV vs OV vs EV SSL
SSL Spoofing / SSL Strip
•
SSL에 대한 MITM(Man In The Middle) attack 기법으로, 가짜 인증서 또는 non SSL/TLS(e.g. HTTP) 기반으로 통신하도록 하는 공격 기법
•
Strip은 Spoofing의 일종으로 SSL/TLS layer를 벋겨내어 spoofing 대상 host에 message를 전달
SSL Spoofing / Strip 원리
1.
server(SSL 검증 대상)과 victim(SSL 검증 주체)의 network channel 사이에 attacker 위치
2.
Attacker는 DNS Spoofing 준비(e.g. DNS Server 또는 victim host 탈취, DNS packet 감청을 통한 가짜 DNS response 전송(진짜보다 먼저))
3.
victim은 DNS spoofing 공격으로 인해 server 접근 시 attacker로 접근
4.
attacker는 victim과 server 사이의 모든 message에 대한 변조
•
attacker와 server 사이에는 정상적인 HTTPS 통신
•
attacker와 victim 사이에는 HTTP(SSL Strip 경우) 또는 (attacker의) 비정상 certificate 기반 통신
SSL Spoofing / Strip 방어 방법 : SSL/TLS 사용 강제화 및 인증서 유효성 확인
•
HSTS 사용 : Browser Level에서 강제적으로 HTTPS만 사용하도록 함
•
SSL Pinning(Certificate Pinning 또는 CA Pinning)
•
Certificate Transparency
•
기타
◦
SSL Spoofing / Strip 공격은 SSL MITM 공격의 일종임
◦
SSL MITM 공격으로 상기 공격 이외에도 POODLE, FREAK 등 다양함.
HSTS
•
HTTP Strict Transport Security의 약자로서 HTTP 대신 HTTPS만을 사용하여 통신해야 한다고 웹사이트가 브라우저에 알리는 보안 기능. RFC-6797 정의.
•
HTTP Header 형식 : Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
•
includeSubDomains가 설정되지 않으면 DNS Spoofing을 통해 유사 악의 domain으로 연결될 수 있음을 유의
SSL Pinning
•
정의 : SSL Spoofing / SSL Strip 공격을 피하기 위한 대응 기법
•
원리 : certificate 또는 public key를 인증 주체 모듈에 내장하여, TLS 인증서 검증 과정 시 외부(e.g. CA, DNS)에 대한 의존없이 인증 가능토록 함.
•
HPKP(HTTP-Based Public Key Pinning)
◦
HTTP 기반에서 사용하는 SSL Pinning 기법.
rust on First Use (TOFU) 기법 중 하나로, 최초 연결 시 해당 사이트의 public key를 HTTP header로 전달, 이후 연결에서 해당 public key를 인증에 사용하도록 함.
◦
HTTP header 형식 : Public-Key-Pins: pin-sha256="base64=="; max-age=expireTime [; includeSubDomains][; report-uri="reportURI"]
◦
Chrome에서는 HPKP 기능을 제거함(DoS와 잘못된 값을 pinning하는 side effect를 만들기에..)
•
SSL Pinning 단점
◦
인증 주체에 저장된 certificate / public key가 무효화될 경우(만료 등) 갱신 필요
◦
HPKP의 경우 Chrome은 지원하지 않음
▪
지원하다가 제거함. 상기 갱신 필요성을 포함한 다양한 운영 상 이슈 및 낮은 도입률로 인함
(e.g. 잘못된 HPKP header가 한번 전달되면 해당 client는 복구가 매우 어려움)
▪
HPKP 대신 Expect CT header 사용(Certificate Transparency 섹션 참조)
Certificate Transparency
•
정의: 인증서 모니터링 / 감사를 위한 Google이 발의/주도의 인터넷 보안 표준 / 오픈소스 프레임워크. RFC 6962.
•
원리: CA 및 통신 peer 모두가 신뢰하는 곳에 인증서 발급/사용에 대한 로그를 적재함으로 로그를 통해 인증서의 유효성을 판별
•
현황: Chrome / Safari는 현재 모든 인증서가 CT를 지원하도록 강제함(CT 지원 없이 발급된 인증서는 오류 문구 처리)
•
동작 구조
기타
SNI(Server Name Indication)
•
TLS 확장 표준 중 하나로 server가 여러 domain을 가질 경우, client가 요청하는 server domain을 나타내는 field임. HTTP의 Host header와 동일한 역할
•
평문 기반인 SSL handshaking 과정 중에 전송되기에, site filtering 등의 오용 여지가 있음(국내의 경우 인터넷 검열 논란 등).
•
=> TLS 1.3 및 ESNI(Encrypted ENI) 적용을 통해 방지 가능
TLS 1.3
•
핸드셰이크에 ‘0-RTT’ 모드 추가 : handshaking step 축소로 성능 증대
•
정적인 RSA와 디피-헬먼 암호화 스위트(Diffie-Hellman Cipher Suite) 제거
•
핸드셰이크를 가능한 최대한 암호화 : 기밀성 강화
•
타원 곡선 알고리즘을 기본으로 지원 : 기밀성 강화키 교환과 암호화 방식을 암호화 스위트(Cipher Suite)방식이 아니라, 개별적으로 결정 : 알고리즘 관리 복잡도 완화
•
TLS 1.2은 CBC 운용 모드 지원으로 인해 POODLE attack과 유사한 취약점 존재(Zombie POODLE / GOLDENDOODLE)
•
이를 해결하기 위해서는 CBC 운용 모드 지원을 제거하던가, TLS 1.3으로 업그레이드해야 함.
POODLE attack
•
취약점: 암호 해독 및 SSL/TLS version downgrading을 유발 가능
•
해결안: SSL 3.0 버전 이하 사용 금지
References
•
RFC 6125 Representation and Verification of Domain-Based Application Service Identity within Internet PKI - X.509 Certificates in the Context of TLS : https://tools.ietf.org/html/rfc6125#section-6.6.2
•
How SSL Certificates Use Digital Signature : https://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art012
•
Understanding SSL Certificate Authentication & Validation : https://www.geocerts.com/blog/understanding-ssl-certificate-authentication-validation
•
Certificate / CA Pinning : https://security.stackexchange.com/questions/51352/is-certificate-pinning-different-from-ca-pinning
•
SSL Spoofing(SSL Strip) : SSL_Spoofing.pdf
•
SSL Strip 공격과 방어 기법 : http://noplanlife.com/?p=1418
•
How SSL and TLS provide authentication : https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_7.1.0/com.ibm.mq.doc/sy10670_.htm
•
Certificate Transparency : https://www.certificate-transparency.org/
•
중국 SSL MITM 공격 사건 정리 및 공격 원리 : https://blog.alyac.co.kr/204
•
TLS 1.3 : https://b.luavis.kr/server/tls-1.3
•
Zombie POODLE and GOLDENDOODLE / Exploits for TLS 1.2 : https://www.thesslstore.com/blog/zombie-poodle-and-goldendoodle-two-new-exploits-found-for-tls-1-2/
•
인증서 투명성 개요 : https://blog.yeon.me/goto/1212
•
인증서 투명성 작동 방식 : https://blog.yeon.me/goto/1219
•
Certificate Transparency Home : http://www.certificate-transparency.org/
•
Expect-CT HTTP Header : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect-CT
•
SSL Vulnerabilites : https://www.digicert.com/cert-inspector-vulnerabilities.htm