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 검증 메커니즘 그대로 사용)
- MD 추출 via public key of CA : 검증 대상 certificate 내 포함된 signature를 검증 주체 자신이 가진 CA certificate 내 public key로 복호화
- MD 추출 via hashing : 검증 대상 certificate을 hashing
- 추출된 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 원리


-
server(SSL 검증 대상)과 victim(SSL 검증 주체)의 network channel 사이에 attacker 위치
-
Attacker는 DNS Spoofing 준비(e.g. DNS Server 또는 victim host 탈취, DNS packet 감청을 통한 가짜 DNS response 전송(진짜보다 먼저))
-
victim은 DNS spoofing 공격으로 인해 server 접근 시 attacker로 접근
-
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 지원 없이 발급된 인증서는 오류 문구 처리)
-
동작 구조

.png)
기타
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의 취약점 해결
- 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
- SSL Pinning : https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning / https://cheatsheetseries.owasp.org/cheatsheets/Pinning_Cheat_Sheet.html
- Certificate / CA Pinning : https://security.stackexchange.com/questions/51352/is-certificate-pinning-different-from-ca-pinning
- HPKP : https://developer.mozilla.org/en-US/docs/Web/HTTP/Public_Key_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

Comments