본문 바로가기

Information Security/Security Solution

SSL / TLS (Secure Sockets Layer / Transport Layer Security)

반응형

* SSL/TLS : 웹 브라우저와 서버 양단(Client/Server 환경) TCP 기반 통신 시(보통 위치가 지정되지 않은 구성의 VPN이나 일반 웹서비스), 응용 계층 및 TCP 전송 계층 사이 보안 채널 형성 및 암호화하는 보안 프로토콜

- SSL에서 TLS로 변경되었지만, 방식은 동일

- 각 프로토콜이 SSL을 사용 할 시, 이를 구분하기 위한 고유 Well-Known 포트 할당
(HTTPS-443/TCP, SMTPS-465/TCP, FTPS-990/TCP, TELNETS-992/TCP 등)

 

 

 

* SSL 제공 보안 서비스

SSL 보안 서비스 내용
기밀성
(Confidentiality)
* 대칭 암호(Symmetric Cipher)를 이용한 송수신 메세지 암호화를 통해, 기밀성 제공
무결성
(Integrity)
* 메세지 인증 코드(MAC : Message Access Code)를 통해, 송수신 메세지의 위/변조 여부를 확인할 수 있는 무결성 제공
인증
(Authentication)
* 공개키 인증서를 이용한 Server/Client 간 상호 인증을 수행

 

 

 

* SSL/TLS 프로토콜 구조(STACK)

SSL/TLS 프로토콜 구조

1) SSL/TLS 계층 및 세부 프로토콜

계층 세부 프로토콜 내용
상위 계층 Handshake Protocol * 종단 간에 보안 파라미터(Security Parameter)를 협상함
Change Cipher Spec * 종단 간 협상된 보안 파라미터를 이후부터 적용/변경함을 알림
Alert * SSL/TLS 통신 과정에서 발생하는 오류를 통보
Application Data * Application 계층의 데이터를 전달
하위 계층 Record * 적용/변경된 보안 파라미터를 이용하여 실제 암/복호화, 무결성 보호, 압축/압축 해제 등의 기능을 제공

2) 상태 유지(Stateful) Protocol : 완전 협상(Full Handshake)을 통해 세션을 생성, 해당 세션 정보를 공유하는 다수의 연결을 단축협상(Abbreviated Handshake)을 통해 생성하는 세션과 연결 기반의 상태 유지 프로토콜

SSL/TLS 상태 유지 프로토콜

- Stateful Session State 정보 : 양 종단간 완전 협상을 통해 생성되는 상태정보로, 세션이 유지되는 동안은 지속적으로 다수의 연결에 의해 사용되는 보안 파라미터 정보가 관리됨

필드 설명
Session ID * 둘 사이의 세션 식별자, 32 Byte로 구성
peer certificate * 상대방의 인증서 (X.509v3)
cipher spec
(암호 명세)
* 암호 명세로 아래 정보를 담고 있음
- 대칭 암호 알고리즘, 키 길이, 블럭 암호 모드 등
- HMAC용 해시 알고리즘
compression
method
* 압축 방식, 현재는 Null만 정의
master secret * 키 블럭 생성을 위한 Server와 Client가 공유하는 48Byte 비밀값


* 완전 협상을 통해 생성한 premaster secret, server random, client random을 조합/해시하여 master secret 생성


* server random, client random은 master secret 생성을 위한 salt 값 역할
is resumable * 현재 세션이 재사용 될 수 있는지 여부 플래그
- 여러 연결에 의해 다시 사용될 수 있는지를 의미

- SSL/TLS Connection State 정보 : 실제 데이터 송수신 단위로, 단축 협상을 통해 생성되며 세션 상태를 공유하면서 통신을 수행

필드 설명
Server/Client Random * 단축 협상을 통해 서버/클라이언트가 생성한 32Byte 난수 값


* 세션에 저장된 master secret와, 단축 협상을 통해 생성된 Client random, Server random을 조합/해시하여 키 블럭을 생성한 후, 이를 이용하여 다양한 키를 생성


* Server/Client random은 키 블럭 생성을 위한 salt 역할 수행
Server/Client write key * 서버/클라이언트가 암호화에 사용하는 비밀키
Server/Client Write
MAC Secret
* 서버/클라이언트가 MAC 생성 시 사용하는 인증 키
Server/Client
Write IV
* 서버/클라이언트가 블록 암호 모드에 사용하는 IV(Initialize Vector)
Sequence number * 전송 메세지 순번

- 세션 상태정보(Session State)와 연결 상태(Connection State) 정보를 이용한 키 생성 과정

SSL/TLS Key 생성 과정

  • 완전 협상을 통해 주고 받은 Premaster Secret, Client/Server Random을 조합(해시)하여 Master Secret 생성
  • 생성한 Master Secret은 다수 연결이 이용할 수 있도록 세션 상태에 저장
  • 이후, 단축 협상을 통해 주고 받은 Client/Server Random과 세션에 저장된 Master Secret을 조합(해시)한 결과로 Key Block을 생성
  • Key Block으로부터, Server/Client 각각의 암호용 비밀키(Write Key), MAC용 인증키(Write MAC Key), 블럭 암호 모드용 IV를 계산해 냄

3) 완전 협상 과정(Full HandShake) Protocol

SSL/TLS 완전 협상 과정

SSL/TLS 완전협상 과정 내용
1. Client Hello * 클라이언트가 지원 가능한 SSL/TLS 버전, 암호 도구 목록(Cipher Suites), 압축 방식 등을 Server에 전달하는 메세지


* Client Random : 클라이언트가 생성하는 32Byte 난수값
- 임의 난수 28byte + 현재 시간 및 날짜 4byte으로, Master Secret 및 Key Block 생성 시, Salt 역할 수행


* Session ID : 서버 세션 식별을 위한 ID
- 클라이언트가 처음 세션을 생성할 때(완전 협상)에는, 빈값을 전달하고, 이미 생성된 세션을 재사용할 때(단축 협상)에는, 세션 ID를 담아서 전달


* 암호 도구 목록(Cipher Suites) : 클라이언트에서 지원 가능한 정보를 담아서 전송
- 키 교환 및 인증 알고리즘, 암호 명세(Cipher Spec)으로 구성 -> 형식 : SSL/TLS_(키 교환 및 인증 알고리즘)_WITH_(Cipher Spec)
- Cipher Spec(암호 명세) : 대칭 암호 알고리즘, 암호키 길이, 블럭 암호모드, HMAC용 해시 알고리즘 등으로 구성
ex) TLS_RSA_WITH_AES_256_CBC_SHA256 : 키 교환 및 인증 알고리즘으로 RSA 사용, 대칭 암호 알고리즘으로 AES 사용, 암호키 길이 256bit, 블록 암호 모드는 CBC, HMAC용 해시 알고리즘은 SHA-256 사용
ex) TLS_DHE_DSS_WITH_AES_256_GCM_SHA256 : 키 교환 알고리즘으로 DHE(Ephemeral Diffie-Hellman), 인증 알고리즘으로 DSS, 대칭 암호 알고리즘 AES, 암호 키 길이 256, 블럭 암호 모드 GCM, HMAC용 해시 알고리즘 SHA-256 사용


* SSL/TLS에서 Diffie-Hellman 키 교환 유형
1. Ephemeral Diffie-Hellman(임시 디피 헬먼) : 매 협상 시 마다, 새 Diffie Hellman 개인키(임의 정수값)을 생성, 공개 Diffie-Hellman 매개변수에 대한 서명(Cipher Suite의 인증/서명 알고리즘 이용)을 통해 인증을 수행


2. Anonymous Diffie-Hellman(익명 디피 헬먼) : 임시 방식과 동일하게 새로운 Diffie-Hellman 개인키(임의 정수값)을 생성하나, 매개변수에 대한 인증을 수행하지 않아 MITM 공격에 취약, 해당 키 교환 방식의 Cipher Suite는 사용하지 않는 것을 권고
2. Server Hello * 사용할 SSL/TLS 버전, 암호 도구(Ciper Suite), 압축 방식 등을 클라이언트에 전달하는 메세지


* Server Random : 서버가 생성하는 32byte 난수값
- 임의 난수 28byte + 현재 시간 및 날짜 4byte로, master secret 및 Key block 생성 시, Salt 역할 수행


* Session ID : 새롭게 생성하거나 존재하는 세션 ID 정보
3. Server Certificate
(선택적 메세지)
* 필요 시, 서버 인증서 목록(서버 인증서 및 인증서에 서명한 인증기관들의 인증서 목록)을 클라이언트에게 전달
4. Server Key Exchange
(선택적 메세지)
* 필요 시, 키 교환에 필요한 정보를 전달
- 키 교환 알고리즘으로 Ephemeral Diffie-Hellman을 사용할 시, 공개 Diffie-Hellman 매개변수(소수 p, 원시근 g, 서버 Diffie-Hellman 공개키)를 서명 알고리즘으로 서명하여, 서명값과 함께 전달
5. Certificate Request
(선택적 메세지)
* 필요 시, 클라이언트 인증을 위한 인증서를 요청
- 요청 시, 서버측에서 인증 가능한 인증기관 목록을 제공
6. Server Hello Done * Server Hello 종료 과정을 알림
7. Client Certificate
(선택적 메세지)
* 필요 시(서버의 Certificate Request 메세지 수신 시), 클라이언트 인증서 목록을 전달
8. Client Key Exchange * 키 교환에 필요한 premaster secret을 생성 후 서버에 전달하는 메세지
- 키 교환 알고리즘에 따라 premaster secret 생성 방식이 다름


RSA : premaster secret(난수값) 생성 후 수신한 서버 인증서의 공개키를 이용하여 암호화 전송


Diffie-Hellman : 클라이언트 Diffie-Hellman 공개키를 생성하여 서버에 전달, 클라이언트와 서버는 각각 Diffie-Hellman 연산을 통해 공통의 premaster secret 생성
9. Certificate Verify
(선택적 메세지)
* 필요 시(서버의 Certificate Request 메세지 수신 시), 클라이언트가 보낸 인증서에 대한 개인키를, 클라이언트가 가지고 있음을 증명
- 현재까지의 핸드셰이크 과정에서 주고 받은 메세지와, master secret을 조합한 해시값에, 클라이언트의 개인키로 서명하여 전달
10. Change Cipher Spec * 협상한 암호명세(Cipher Spec)를 이후부터 적용/변경함을 알리는 메세지
11. Finished * 협상 완료를 서버에 알림
12. Change Cipher Spec * 협상한 암호명세(Cipher Spec)를 이후부터 적용/변경함을 알리는 메세지
13. Finished * 협상 완료를 클라이언트에 알림

4) 단축 협상 과정(Abbreviated Handshake)

SSL/TLS 단축 협상 과정

SSL/TLS 단축협상 과정 내용
1. Client Hello * 사용할 Session ID와 Client Random을 전달
2. Server Hello * Server Random을 전달

- 나머지 과정은 위 이미지와 동일하나, 일정시간 클라이언트의 요청이 없어, 서버측 세션 정보가 만료될 시, 만료된 세션을 클라이언트가 요청하게 되면, 새로운 세션 ID를 생성하여 클라이언트에게 전달 후, Full Handshake를 수행


5) Recored Protocol 동작 방식 : 협상된 알고리즘을 이용하여 메세지를 압축/압축 해제, 무결성 검증, 암/복호화하여 송수신 하는 기능을 수행

Record Protocol 동작 방식

SSL/TLS Record Protocol 순서 내용
1. 단편화 * Application Data를 일정 크기로 단편화 수행
2. 압축 후 MAC 추가 * 단편화된 데이터를 협상을 통해 적용된 압축 알고리즘으로 압축 후, MAC 값을 계산하여 추가
3. 암호화 * 압축된 데이터와 MAC값을, 협상을 통해 적용된 암호 알고리즘으로 암호화
4. Record 헤더 추가 * 암호화된 데이터에 Record 헤더를 추가하여 전송

 

 

 

* PFS (Perfect Forward Secrecy : SSL/TLS와 완전 순방향 비밀성) : SSL/TLS 통신의 서버 개인키 노출 문제점을 해결하기 위해 등장암호학적 성질순방향 비밀성(FS) 또는 완전 순방향 비밀성(PFS)라고 칭함

1. SSL/TLS 통신 서버 개인키 노출 문제점 특징
1. 서버 공개키와 개인키를 이용, 키 교환을 수행(RSA 방식)할 시, 공격자는 MITM을 통해 트래픽을 가로채고, 서버 개인키를 이용하여 세션키/비밀키 및 송수신 데이터 복호화가 가능
2. 희생자는 유출된 서버 인증서를 폐기(CRL 또는 OCSP Protocol을 통한 폐기)하여도, 유출된 서버 개인키로 보호되는 이전 트래픽 정보를 공격자가 보관한다면, 이들 모두 복호화가 가능

2. PFS : 클라이언트 서버 간, 키 교환에 사용되는 개인키가 노출 되어도, 이전 트래픽의 세션키/비밀키 기밀성은 그대로 유지되어 통신 내용을 알 수 없는 암호학적 성질


3. SSL/TLS 통신의 PFS 지원 : 키 교환 때 마다 클라이언트/서버가 새로운 Diffie-Hellman 개인키(임의 정수 값)을 생성하는 Ephemeral(임시) Diffie-Hellman 키 교환을 통해 클라이언트/서버간 공통의 비밀값을 생성, 서버 개인키는 서버의 Diffie-Hellman 파라미터를 인증하는 목적으로만 사용 (키 교환 용도 x)하여, 서버 개인키 노출에 따른 취약점을 방지


4. PFS 적용의 어려움 : Diffie-Hellman 키 교환은 RSA에 비해 처리 속도가 느려, DHE(Ephemeral Diffie-Hellman), ECDHE(Elliptic Curve DHE) 관련 cipher suite를 비활성화 하는 경우가 존재하거나, 특정 웹 브라우저의 경우 해당 기능 자체를 지원하지 않아, 호환성을 위해 RSA 키 교환을 함께 사용하는 경우가 존재

 

 

 

* SSL/TLS History : 2020년 대부분 TLS 1.2를 사용하나 TLS 1.3으로 변경되고 있는 추세

프로토콜 역사 설명
SSL 1.0 취약점으로 인한 외부 미공개 처리
SSL 2.0 ~ 3.0 SSL DROWN ATTACK, 패딩 오라클 공격
TLS 1.0 ~ TLS 1.2 SSL POODLE ATTACK으로 포로토콜 하향화 문제
TLS 1.2 속도, 프라이버시 이슈(SNI 차단으로 인한) 문제
TLS 1.3 신규 TLS 최신 암호화 버전 출시

 

 

 

* SSL/TLS 복호화(Offloading) : 별도 SSL 암/복호화 장비를 통해, 이후 네트워크단의 부하를 감소시키는 기능/장비
(즉, 암/복호화를 대신해주는 장비)

SSL 암/복호화 매커니즘


* SSL/TLS 복호화 장비 특징

- SSL 환경으로 변화하며 문제였던, 암호화로 인한 보안솔루션 탐지기능 문제점 해결

- 암/복호화 전용 장비를 통해 서버 증설 비용 절감 및 성능 향상

- 암/복호화에 대한 단일 포인트 확인 가능

반응형