컴퓨터 보안 - [SSL / TLS]

윤형·2024년 12월 2일

Security

목록 보기
9/14

원래의 http 웹에서의 데이터는 누구나 읽을 수 있는 텍스트 형태로 전송되었다. 따라서 중간에 가로채는 위험성에 많이 노출됐었다.

TCP/IP

TCP?
: TCP는 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, 신뢰성 있는 데이터 전송을 보장하는데 사용된다.
TCP는 연결 지향적이고, 데이터가 올바르게 전달되었는지 확인하고, 손실된 데이터를 재전송 하는 역할을 수행한다. 데이터의 순서를 보장하고 흐름제어 및 혼잡 제어를 통해 네트워크의 효율성을 높인다.

IP?
: 데이터 패킷을 네트워크를 통해 전송하는데 필요한 주소 지정 및 라우팅 기능을 제공한다.

TCP 특징

  1. 연결 지향적: TCP는 데이터 전송 전에 수신자와 송신자 간의 연결을 설정한다.
  2. 신뢰성: 데이터가 손실되거나 손상되면 재전송을 통해 신뢰성을 보장한다.
  3. 순서 보장: 데이터 패킷이 전송된 순서대로 수신된다.
  4. 흐름 제어: 수신자가 처리할 수 있는 속도로 데이터를 전송
  5. 혼잡 제어: 네트워크의 혼잡 상태를 체크, 전송 속도를 조절

네트워크에서 데이터가 전송되는 방식

+-------------------+
|   Application   	|
|      Data        	|
|     (오리진)		|
+-------------------+

1. 어플리케이션 데이터 추가: 어플리케이션에 전송할 데이터(ex:오리진 데이터)가 생성된다.
-> 어플리케이션 레이어 : http, etp등 프로토콜을 통해 데이터가 생성된다.

+-------------------+
|      	TCP         |
|      Header       |
+-------------------+
|    Application    |
|       Data        |
|      (오리진)     	|
+-------------------+

2. TCP 헤더 추가: 애플리케이션 데이터에 TCP헤더가 추가된다. TCP헤더에는 포트 번호, 순서 번호, 확인 응답 번호등의 다양한 정보가 포함된다. TCP는 신뢰성 있는 전송을 위해 패킷 순서를 관리하고, 패킷이 손상되었을 경우 재전송 요청을 할 수 있다.
-> Transport Layer(전송 계층)
-> TCP는 데이터의 무결성과 순서를 보장한다.
-> 기밀성은 보장할 수 없기 때문에 TCP위에서 작동하는 TLS/SSL을 이용해 데이터 자체를 암호화 한다. (중요)

+-------------------+
|       IP          |
|      Header       |
+-------------------+
|       TCP         |
|      Header       |
+-------------------+
|    Application    |
|       Data        |
|      (오리진)     	|
+-------------------+

3. IP헤더 추가: TCP세그먼트에 IP헤더를 추가한다. IP 헤더에는 송신자와 수신자의 IP주소, 프로토콜 정보등이 포함된다.
-> network Layer

+-------------------+
|    Data Link      |
|      Header       |
+-------------------+
|       IP          |
|      Header       |
+-------------------+
|       TCP         |
|      Header       |
+-------------------+
|    Application    |
|       Data        |
|      (오리진)   	|
+-------------------+

4. 데이터 링크 계층 헤더 추가: IP패킷에 데이터 링크 계층의 헤더를 추가한다. 이 헤더는 MAC(Media Access Control)주소와 같은 정보를 포함한다.
-> data Link Layer


이 과정을 통해 패킷을 만들고, 이를 네트워크 상에서 송신자가 수신자에게 전달하며 서로 데이터를 주고받는 것이다.

수신자는 송신자의 패킷 과정을 역으로 데이터를 확인하게 된다.

  1. 패킷 수신 : 네트워크를 통해 패킷을 받는다. 패킷은 IP 헤더와 TCP헤더를 포함하고 있다.

  2. IP헤더 처리 : 수신자는 먼저 IP헤더를 분석해 패킷의 목적지 IP주소가 자신의 IP와 일치하는지 확인한다. 일치하지 않으면 패킷을 무시하거나 다른 경로로 넘긴다.

  3. TCP헤더 처리: 패킷의 자신의 주소로 왔으면, TCP헤더를 분석한다. 여기서 수신자는 포트 번호를 확인해서 어떤 어플리케이션이 이 데이터를 처리해야 하는지를 확인한다.

  4. 세그먼트 재조합: TCP는 수신한 세그먼트를 재조합한다. 여러 세그먼트가 도착하면 TCP는 순서 번호를 이용해 세그먼트를 올바른 순서대로 정렬한다. 또한 손실된 내용이 있으면 재전송 요청을 보낸다.

  5. 데이터 전달 : 모든 세그먼트가 올바르게 수신되고 재조합 된다면, TCP는 원래 데이터로 복원에 해당 어플리케이션에 전달한다.

  6. 응답 처리: 필요에 따라 수신자는 송신자에게 응답을 보낼 수 있고, 이는 다시 TCP/IP 프로토콜 과정을 통해 네트워크 상으로 전달된다.


SSL

SSL?
: 인터넷에서 데이터 전송의 보안을 제공하기 위해 설계된 프로토콜이다. SSL은 주로 웹 브라우저와 서버간의 안전한 통신을 보장한다.
SSL/TLS는 데이터의 기밀성, 무결성, 인증을 보장한다.

  • 기밀성: SSL/TLS는 데이터를 암호화해서 전송한다. 이를 통해 중간에서 데이터를 가로채도 내용을 이해할 수 없다. - DES, IDEA, RC2
  • 무결성: 데이터가 전송중에 변조되지 않았음을 보장한다. 해시 함수를 사용해 무결성을 보장한다. - MD5
  • 인증: 서버-클라이언트 간의 신원을 확인할 수 있는 기능을 제공해 인증을 보장한다. - RSA

SSL 작동 방식

1. 핸드쉐이크(Handshake): SSL/TLS 연결을 설정하기 위해 클라이언트와 서버간의 헨드쉐이크 과정이 진행된다.

  • 클라이언트가 서버에 연결 요청을 보낸다.
  • 서버는 클라이언트에게 SSL/TLS버전, 암호화 알고리즘, 세션ID등을 포함한 응답을 보낸다.
  • 클라이언트는 서버의 인증서를 확인하고, 세션 키를 생성하여 서버에 전송한다.
  • 서버는 클라이언트의 세션키를 사용하여 응답을 암호화 해서 보낸다.

2. 데이터 전송: 헨드쉐이크가 완료되면, 클라이언트와 서버는 세션 키를 사용하여 데이터를 암호화해서 전송한다. 이 과정에서 데이터는 안전하게 보호된다.

3. 연결 종료: 데이터 전송이 완료되면, 클라이언트와 서버는 연결을 종료한다. 이 과정에서 세션키는 폐기한다.

SSL 특징

  • 부인방지기능은 제공이 안된다.(중요): 서버와 클라이언트 간의 세션을 설정하고, 이 세션 내에서 데이터를 암호화 해서 전송한다. 하지만 이 과정에서 각 당사자의 신원을 확인하는 것(인증)은 가능하지만, 그들이 특정 행동을 했다는 것을 증명할 수 있는 방법은 없다. -> 전자 서명을 사용해 보안한다.

  • TLS는 SSL의 다른 이름임 -> TLS는 최신버전 이름

  • replay attack(관찰된 통신내용을 그대로 재생하면 같은 결과를 얻을 수 있다)에 취약할 수 있다.

TLS 프로토콜 구성

프로토콜: 특정한 규칙이나 절차의 집합을 의미한다. 데이터 전송, 통신, 상호작용을 위한 규칙과 형식을 정의하는걸 의미한다.

Handshake

: Handshake 프로토콜은 TLS세션을 설정하는 과정에서 클라이언트와 서버간의 초기 협상을 담당한다.

  • 인증 : 서버는 일반적으로 인증서를 통해 자신의 신원을 증명하고 클라이언트는 필요에 따라 인증서를 제공한다.
  • 암호 알고리즘 협의 : 서버와 클라이언트는 서로 해시 알고리즘을 협상해 지원하는 알고리즘 목록을 교환하고 결정한다.
  • 키 교환: 세션 키를 생성하기 위한 키 교환 매커니즘이 수행된다. 이 과정에서 비대칭 암호화 기술이 사용된다.

Record Protocol

record 프로토콜은 실제 데이터 전송을 처리하는 역할을 한다.

  • 데이터 인증: 전송되는 데이터의 무결성을 보장하기 위해 메시지 인증 코드(MAC)을 사용한다. 이를 통해 데이터가 전송중에 변경되지 않음을 알 수 있다.
  • 암호화 처리: 전송되는 데이터를 암호화 해서 기밀성을 유지한다. 이 과정에서 handshake시 결정된 암호 알고리즘이 사용된다.
  • 메시지 송수신: 클라이언트-서버 간에 안전하게 데이터를 송수신한다. 이 프로토콜은 데이터 조각을 처리하고 이를 안전하게 전송하는 역할을 한다.

Change Cipher Spec

  • 암호 스펙 변경: handshake 프로토콜에서 협상된 새로운 암호화 및 인증 매개변수를 활성화 한다. 서버와 클라이언트는 새로운 암호화 설정을 사용하여 데이터 송수신할 준비가 되었음을 알리는 신호역할을 한다. (새로운 암호화 매개변수를 이용해 데이터 전송할 것을 알림)

Alert Protocol(TLS부터 생김)

  • 예외처리: TLS 세션 중에 발생할 수 있는 다양한 오류를 보고한다. (ex: 인증 실패, 암호화 실패, 프로토콜 버전 불일치 등등)
  • 세션 종료: 세션을 정상적으로 종료할 때도 Alert 프로토콜을 이용해 상대방에게 세션 종료를 알린다. 이를 통해 안전하게 연결을 종료한다.

세션 정보 생성 및 관리

  • Session ID: 세션을 식별하는 고유한 ID로, 클라이언트와 서버 간의 연결을 재사용할 때 사용된다. 이를 통해 핸드셰이크 과정을 반복하지 않고도 빠르게 연결할 수 있다.

  • Certificate: 서버의 인증서로, 클라이언트가 서버의 신원을 확인하는 데 사용된다. 이 인증서는 일반적으로 공인된 인증 기관(CA)에 의해 서명된다.

  • Cipher Spec: 클라이언트와 서버가 합의한 암호화 방법에 대한 정보이다. 여기에는 사용될 압축 방법, MAC(Message Authentication Code) 알고리즘 등이 포함된다.

  • Compression Method: 데이터 전송 전에 사용할 압축 알고리즘을 정의한다. 이는 데이터 전송의 효율성을 높이기 위해 사용된다.

  • Master Secret Key: 핸드셰이크 과정에서 생성되는 48비트의 비밀 키로, 이후의 데이터 암호화 및 복호화에 사용된다. 이 키는 클라이언트와 서버 간의 안전한 통신을 보장하는 데 중요한 역할을 한다.


1. Handshake

1~3 : Hello 메시지 교환으로 Seccion ID , 키 교환알고리즘, 인증 알고리즘, 암호 알고리즘, 압축 알고리즘을 결정한다.

4: 서버의 인증서와 검증을 위한 인증서 교환, 공개키 전송

5: client인증서 요구(opt)

6: 2단계 종료 메시지

7: client 인증서 전송

8: 48byte perameter secret 전송

9: client 인증서 검증

10-11: 암호사양 변경 메시지 교환을 통해 다음 세션에 적용될 암호 spec결정

2. Record Protocol(데이터 전송)

  1. 메시지를 최대 16KB 단위로 fragment(파편)
  2. 압축
  3. MAC추가
  4. Encryption
  5. SSL record header추가

Web Servers

Apache-SSL

: 아파치 HTTP 서버에 SSL(보안 소켓 계층) 기능을 추가한 모듈로, 전송 중 데이터 암호화를 통해 보안성을 높이는 데 사용된다. 이를 통해 비공식 데이터 송수신을 안전하게 보호할 수 있다.

Apache mod_ssl

: 아파치 웹 서버의 모듈 중 하나로, SSL 및 TLS 프로토콜을 통해 HTTPS를 지원하는 기능을 제공한다. 이 모듈을 사용하면 웹 서버는 입력 및 출력 데이터의 암호화를 지원하여 사용자와의 안전한 연결을 유지할 수 있다.

Stronghold

: C2Net에서 개발한 상업용 웹 서버로, SSL을 기본으로 지원한다. 이 서버는 높은 보안성을 강조하며, 사용자 인증 및 암호화를 통해 데이터 보호와 안전한 웹 호스팅 서비스를 제공한다.

Roxen

iNetStore

profile
제가 관심있고 공부하고 싶은걸 정리하는 저만의 노트입니다.

0개의 댓글