본문 바로가기

와사비크래커 IT Tip/보안

[보안] 전송 레벨 보안: SSL, TLS

728x90
반응형

1     전송 레벨 보안: SSL, TLS

1.1     SSL (Secure Sockets Layer)

1.1.1     SSL 구조

SSL  프로토콜 스택

-      SSL은 신뢰할 수 있는 종단--종단의 안전한 서비스를 제공하기 위해 TCP를 사용하도록 설계되었다.

-      SSL은 하나의 프로토콜로 이루어진 것이 아닌, 두 계층의 프로토콜로 이루어져 있다.

-      SSL 레코드 프로토콜은 다양한 상위 계층 프로토콜에 기본적인 보안 서비스를 제공한다.

-      웹 클라이언트/서버 상호 교환을 위해 전송 서비스를 제공하는 HTTPSSL위에서 작동할 수 있다.

-      SSL 연결(Connection)

s   연결이란 적절한 서비스를 제공하는 전송을 말한다.

s   SSL에 있어서 연결은 대등--대등 관계이다.

s   연결은 일시적이며 모든 연결은 한 개의 세션과 연관된다.

-      SSL 세션(Session)

s   SSL 세션이란 한 클라이언트와 한 서버 사이의 연관을 말한다.

s   세션을 시작하려면 핸드 셰이크 프로토콜을 이용해야 한다.

s   세션은 다수의 연결이 공유하는 암호적 보안 매개변수를 정의한다.

s   각 연결마다 해야 하는 새 보안 매개변수 협상을 피하기 위해 세션을 사용한다.

 

1.1.2     SSL 레코드 프로토콜 (SSL Record Protocol)

-      SSL 레코드 프로토콜은 전송할 응용 메시지를 다룰 수 있는 크기의 블록으로 잘라내어 단편화한다.

-      옵션으로 데이터를 압축하고, MAC을 적용하여 암호화를 하고, 헤더를 추가하여 결과를 TCP 단편으로 전송한다.

-      수신된 데이터는 복호화하고, 확인하며 압축을 풀고 재조립하여 상위 계층 사용자에게 전달한다.

-      SSL 레코드 프로토콜(SSL Record Protocol)SSL 연결을 위해 2가지 서비스를 제공한다.

s   기밀성(Confidentiality): 핸드셰이크 프로토콜은 SSL 페이로드를 관용 암호화하는데 쓸 공유 비밀키를 정의한다.

s   메시지 무결성(Message Integrity): 핸드셰이크 프로토콜은 또한 메시지 인증 코드(MAC)를 생성하는데 사용할 공유 비밀키를 정의한다.

-      SSL 레코드 프로토콜 동작

SSL 레코드 프로토콜의 전반적인 동작

1)    단편화 (fragmentation)

s   각 상위 계층 메시지는 214바이트나 이보다 작은 블록으로 단편화한다.

2)    압축 (compression)

s   압축을 할 때는 손실이 없어야만 하며, 내용의 길이가 1024바이트 이상이 되면 안 된다.

3)    메시지 인증 코드(MAC) 계산

s   압축된 데이터의 메시지 인증 코드를 계산하는데, 이 때 공유 비밀키를 사용한다.

4)    암호화

s   압축된 메시지와 MAC을 대칭 암호로 암호화한다.

s   암호화를 할 때 내용의 길이가 1024바이트 이상 늘어나서는 안 된다. , 총 길이가 214+2048바이트를 초과하지 않도록 해야 한다.

5)    SSL 레코드 헤더 붙이기

헤더는 다음의 필드로 구성된다.

s   콘텐츠 유형 (Contents Type): 포함된 단편을 처리할 때 사용하는 상위 계층 프로토콜이다.

s   주 버전 (Major Version): 사용 중인 SSL의 주 버전을 나타낸다.

s   부 버전 (Minor Version): 사용 중인 서브버전을 나타낸다.

s   압축된 길이 (Compressed Length): 평문 단편의 바이트 단위 길이로 최댓값은 214+2048이다.

SSL  레코드 형식

1.1.3     암호명세 변경 프로토콜 (Change Cipher Spec Protocol)

-      SSL 레코드 프로토콜을 사용하는 3가지 SSL 지정 프로토콜 중의 하나이며 가장 간단하다.

-      한 바이트로 구성되고 값 1을 갖는 한 개의 메시지로 구성된다. 이 메시지의 유일한 목적은 계류 상태를 현재 상태에 복사하는 것이다.

SSL  레코드 프로토콜 페이로드

1.1.4     경고 프로토콜 (Alert Protocol)

-      경고 프로토콜의 각 메시지는 2바이트로 구성된다.

s   첫 번째 바이트는 메시지의 엄밀성을 전달하기 위해 경고 혹은 심각이라는 2가지 값을 갖는다.

레벨이 심각이라면, SSL은 즉시 연결을 단절한다. 동일한 세션 중의 다른 연결은 계속될 수 있지만 이 세션에서 어떤 새로운 연결을 설정하지는 못한다.

s   두 번째 바이트에는 특정 경고를 나타내는 코드가 들어있다.

1.1.5     핸드셰이크 프로토콜 (Handshake Protocol)

-      서버와 클라이언트가 서로를 인증하고 암호와 MAC 알고리즘, SSL 레코드 안에 보낸 데이터를 보호하는데 사용할 암호키를 협상할 수 있다.

-      모든 응용 데이터를 전송하기 이전에 사용된다.

-      클라이언트와 서버가 교환한 연속된 여러 메시지로 구성되며, 각 메시지는 3개의 필드로 구성된다.

s   유형 (Type): 10개의 메시지 중 하나를 나타내며 메시지의 유형을 나타낸다.

s   길이 (Length): 메시지의 길이를 바이트로 나타낸다.

s   내용 (Content): 메시지와 연관된 매개변수이다.

1.1.5.1      핸드 셰이크 프로토콜 동작

단계 1)            보안 기능 설정

s   논리적 연결을 시작하고 이 연결과 연관될 보안 기능을 설정하는데 사용된다.

s   프로토콜 버전, 세션 ID, 암호 조합, 압축 방법, 조기 랜덤 넘버를 포함한다.

s   클라이언트는 client_hello message를 보내는 것으로 교환을 시작한다.

s   client_hello message를 보낸 다음 클라이언트는 client_hello message와 동일한 매개변수를 갖는 server_hello message를 기다린다.

단계 2)            서버 인증과 키 교환

s   서버가 필요하다고 생각되면 인증서, 키 교환을 보내고 인증서를 요청한다.

s   hello 메시지 단계를 끝내는 것을 말한다.

단계 3)            클라이언트 인증과 키 교환

s   클라이언트는 요청된 인증서를 보낸다.

s   요청이 있었을 경우, 클라이언트는 키 교환을 보낸다.

s   클라이언트는 인증서에 대한 확인을 보낼 수도 있다.

단계 4)            종료

s   암호 조합을 확인하고 핸드 셰이크 프로토콜을 종료한다.

핸드셰이크 프로토콜 동작

1.2     TLS (Transport Layer Security)

-      TLSSSL을 인터넷 표준 버전이 되도록 만든 IETF[1] 표준이고, RFC[2] 2246로 제안된 인터넷 표준으로 정의되었다.

-      TLS는 인터넷 상에서 통신하고 있는 애플리케이션과 그 사용자들 간에 프라이버시를 지키기 위한 프로토콜이다.

-      서버와 클라이언트가 통신할 때, 어떠한 메시지에 대해서도 제 3자가 엿듣거나 손을 댈 수 없도록 안전하게 지켜준다.

-      TLSTLS 레코드 프로토콜과 TLS 핸드셰이크 프로토콜의 두 계층으로 구성된다.

-      TLS 레코드 프로토콜은 DES와 같은 일부 암호화 방식을 이용하여 접속 보안을 제공하고, 암호화 없이도 사용될 수 있다.

-      TLS 핸드셰이크 프로토콜은 데이터가 교환되기 이전에 서버와 클라이언트가 서로 인증하고, 암호화 알고리즘 및 암호 키를 결정하게 해 준다.

-      TLS 프로토콜은 SSLv3.0 프로토콜에 기반을 두고 있지만, TLS와 SSL 간에는 상호운용성이 없다.

-      TLS 프로토콜은 TLS 구현을 SSLv3.0으로 낮추어 허용하는 메커니즘을 담고 있으며, 최신 버전의 브라우저는 TLS를 지원한다.

1.3     HTTPS

-      HTTPS는 웹 브라우저와 웹 서버 간의 안전통신을 구현하기 위한 HTTPSSSL의 결합니다.

-      HTTPS 기능은 현재 모든 웹 브라우저에 내장되어 있다.

-      검색엔진에는 HTTPS를 지원하지 않는다. , HTTPS 통신을 지원하는 웹 서버에 따라 다르게 사용된다.

-      정상적인 HTTP80번 포트를 사용하지만, HTTPS가 지정되면 443번 포트를 사용하여 SSL을 호출한다.

-      HTTPSHTTP Over TLS라고 하는 RFC 2818 문서로 이루어졌다.

-      SSL을 사용하건 TLS를 사용하건 이를 이용하는 HTTP는 기본적으로 차이가 없기 때문에 두 가지 구현을 모두 HTTPS라고 한다.

1.3.1     연결 개시

-      HTTPS에서 HTTP 클라이언트 역할을 하는 에이전트는 TLS 클라이언트 역할도 한다.

-      클라이언트는 적절한 포트를 통해 서버에 연결을 시작하고, TLS 핸드셰이크를 시작하기 위해 TLS Client_Hello를 전송한다.

-      TLS 핸드셰이크가 마무리되면 클라이언트는 첫 번째 HTTP 요청을 보낸다.

-      모든 HTTPS 데이터는 TLS 응용데이터로서 전송되고, 일반적으로 HTTP는 연결 상태를 유지하면서 다음과 같이 작동한다.

s   HTTP 수준에서 HTTP 클라이언트는 하위 계층(TCP 또는 TLS/SSL)으로 연결 요청 메시지를 보내어 HTTP 서버에게 연결 요청을 한다.

s   TLS 수준에서 TLS 클라이언트와 TLS 서버 사이의 세션이 설정된다.

s   연결 설정을 위한 TLS 요청은 클라이언트 측의 TCP 개체와 서버 측 TCP 개체 간의 TCP 연결을 설정하여 시작한다.

1.3.2     연결 종료

-      HTTP 클라이언트나 서버는 HTTP 레코드에 Connection: close 줄을 집어넣어 연결이 종료되는 걸 나타낼 수 있다.

-      HTTPS 연결을 종료하기 위해, TLS가 원격에 있는 상대방의 TLS 개체와의 연결을 종료해야 하는데 그렇게 하려면 하위 TCP 연결을 종료해야 한다.

-      TLS 수준에서 연결을 종료하기 위한 적합한 방법은 양쪽에서 close_notify 경보를 보내는 TLS 경보 프로토콜을 사용해야 한다.

-      TLS를 종료하기 전에 종료 경보 교환을 시작한다.

-      TLS는 종료 경보를 보낸 상대방이 종료 경보를 보낼 때까지 기다리지 않고 연결을 종료해버려서 불완전 종료 상태로 남아 있기도 한다.

-      세션을 재사용하려고 할 때에도 이렇게 수행되기도 하며, 세션 재사용을 하려면 응용 프로그램이 필요한 모든 메시지를 수신했다는 사실을 알고 있을 때에만 그렇게 수행되어야 한다.

-      HTTP 클라이언트는 서버 프로그램 오류나 TCP 연결 중단을 일으키는 통신 오류로 인해 발생되는 하위 TCP 연결이 사전 close_notify 경보와 Connection: close 지시자 없이 종료되는 상황에 대처할 수 있어야 한다.

-      만약 갑자기 TCP가 종료되었다면 모종의 공격이 있다는 뜻으로, HTTPS 클라이언트는 이런 상황이 발생하면 보안 경고를 발령해야 한다.

 

1.4     SSH

-      적은 비용으로 설계한 안전한 네트워크 통신용 프로토콜이다.

-      네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 프로토콜을 가리킨다.

-      강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다.

-      기본적으로는 22번 포트를 사용한다.

-      SSH는 암호화 기법을 사용하기 때문에 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다.

-      SSHTCP 상에서 일반적으로 수행되는 3개의 프로토콜로 구성된다.

s   전송 계층 프로토콜 (Transport Layer Protocol)

전방향 기밀[3]을 만족하는 서버인증, 데이터 기밀성과 데이터 무결성을 제공한다. 또한, 전송 계층에서는 옵션으로서 압축을 할 수 있다.

s   사용자 인증 프로토콜 (User Authentication Protocol)

서버에게 사용자를 인증한다.

s   연결 프로토콜 (Connection Protocol)

하나의 기본 SSH 연결을 사용하여 여러 개의 논리적 통신 채널을 다중화한다.

 


[1] 인터넷 국제 표준화 기구(IETF: Internet Engineering Task Force): 인터넷의 운영, 관리, 개발에 대해 협의하고 프로토콜과 구조적인 사안들을 분석하는 인터넷 표준화 작업기구로 망 설계, 운영자, 업체, 연구자들에 의해 구성되었다.

[2] RFC(Request For Comments): 인터넷 기술과 관련된 공문서 간행물로, 인터넷 연구와 개발 공동체의 작업 문서이다.

[3] 전방향 기밀(Forward Secrecy): 한 세션에서 세션키나 영구 개인키가 손상되더라도 이것은 이전 세션의 기밀성에 영향을 미치지 않는다.

반응형