Computer Science/Network Security

[CS][알기 쉬운 정보보호개론 3판] Chapter15. SSL/TLS

y-seo 2023. 12. 6. 12:28

 

 
 

웹 보안의 필요성

  • 인터넷은 처음 개발 당시, 서비스/네트워크가 더 시급했기 때문에 보안을 고려하지 않았다. 추후에 보안 서비스를 추가하게 되었다 그것이 TLS/SSL이다.
  • WWW는 인터넷과 TCP/TP 상에서 돌아가는 클라이언트 및 서버 응용프로그램이다.
  • 다음과 같은 이유로 WWW에는 보안 기술이 요구된다.
    • 웹 서버를 구성하고 웹 컨텐츠를 개발하는 것은 점점 쉬워지고 있지만, 그 내부에서 돌아가는 것들은 매우 복잡하다. 따라서 우리가 알지 못하는 보안적 결함이 숨어 있을 수 있따.
    • 웹 서버(외부에서의 관문)를 침입 기반으로 하여 (다른) 전체 시스템에 침입할 수 있다.
    • 웹 기반 서비스 이용자는 상대적으로 보안에 대하여 잘 알지 못하는 사람이 대부분이다. (이용자에게 신뢰를 주어야 해서)

 

 
 

웹 보안 위협

알기 쉬운 정보보호개론 3판

 

 
 

SSL/TLS

  • 응용 계층 보안을 위한 기술로 웹에서 가장 많이 사용되고 있는 보안 서비스 중 하나이다.
    • 응용 계층 : OS 7계층에서 가장 위
  • 처음에는 Secure Socket Layer 기술이 개발되어 널리 사용되었지만 보안 결함으로 인해 더욱 업그레이드 된 Transport Layer Security (TLS)가 개발되어 사용되고 있다.
  • 다음과 같은 서비스를 제공한다.
    • 기밀성/무결성/인증을 위해서
    • 가용성은 없다.
    • 서버와 클라이언트 사이에 전송되는 데이터를 암호화한다.
    • 서버와 클라이언트는 공개키 기반 암호 시스템을 이용하여 서로를 인증한다.
    • MAC을 이용하여 전송되는 모든 메세지의 무결성을 검사한다.
  • 현재, 웹브라우저를 포함한 많은 응용프로그램에 TLS 패키지가 내장되어 있다.

 

 
 

TLS 구조

  • 2개의 계층에 걸쳐있는 프로토콜
  • 응용 계층
    • 상위 계층 : Handshake Protocol, Change Cipher Specification Protocol, Alert Protocol, Heartbeat Protocol, HTTP
    • 하위 계층 : Record Protocol - 상위계층 프로토콜에 기본적인 보안 서비스 제공
  • HTTP도 TLS 위에서 동작이 가능하다. (Ex. HTTPS)
  • 연결 : 통신에서 정보 전달을 위해 개체 간에 설정된 통신로
  • 세션 : 개체 간의 통신을 위한 논리적 연결로 서로를 인식한 이후부터 통신을 마칠 때까지를 말한다.

알기 쉬운 정보보호개론 3판

 

 
 

TLS Handshake Protocol

  • 서버와 클라이언트가 세션을 만들기 위해 처음으로 수행하는 프로토콜
  • 암호화 방법, 메세지 인증, 압축 방법, 사용되는 각종 키들을 정한다.
  • Handshake Protocol 결과, 서버와 클라이언트는 동일한 premaster secret 값을 가지게 된다. 각각은 이 값으로부터 master secret을 유도해낸다.
  • 목표 : 클라이언트와 서버가 상대방의 공개키를 받아서 인증한다, 세션키와 MAC용 키를 공유한다.

 

 
 

TLS Record Protocol

  • 전송 데이터의 보안을 위해 실질적으로 MAC 코드를 생성하고 암호화하는 과정이다.
  • 다음 두가지 서비스를 제공한다.
    • 기밀성 : Handshake Protocol에서 정의한 대칭키를 이용하여 전송 데이터를 암호화한다. (단계3)
    • 무결성 : MAC을 생성하여 전송된 데이터의 무결성을 증명해준다.
  • 다음 다섯 단계로 데이터를 처리한다.
    1. 단편화 (Fragmentation) : 16,384바이트(16KB) 이하의 블록으로 나눈다. (큰 데이터로 일정하게 쪼개기)
    2. 압축 (Compression)
    3. 메시지 인증 코드 계산 : HMAC 이용한다.
    4. 암호화 : AES나 3DES, RC4 알고리즘을 사용한다.
    5. 헤더 붙이기 : 컨텐츠 유형, 주버전, 서브버전, 압축된 데이터의 길이로 구성된다.
      • 컨텐츠 유형은 change_cipher_spec, alert, handshake, application_data 중 하나의 값을 갖는다. (상위계층 중 하나로)

 

 
 

TLS에서 발생할 수 있는 여러가지 공격들

  • HandShake Protocol에 대한 공격 (가장 취약한 부분이다.)
    • 웹사이트 금지 방법
      1. Domain Name을 차단한다.
      2. 서버의 IP 주소를 차단한다.
      3. Contents를 보고 차단한다. (Https를 사용하면 무용지물)
  • 레코드와 응용데이터 프로토콜에 대한 공격 : Chosen Ciphertext attack에 취약하다고 알려져 있다. (그렇긴 한데, 뚫리진 않는다.)
  • PKI에 대한 공격 : X.509는 다양한 취약점들이 발견되었는데 이를 기반으로 한 TLS에는 이 취약점을 이용한 공격들이 일어나고 있다.
    • X.509을 사용하는 대부분이 타겟이다.
  • 개개인의 암호 기술에 대한 공격 (하나라도 뚫으려고)
  • OpenSSL의 HeartBleed 취약성 : 서버가 잘 살아있는지 응답, 필요보다 큰 Byte를 요구해도 다 들어준다. → 문제가 발생한다. (10Byte를 보내면서 10Byte가 아닌 30Byte를 달라해도 준다. 나머지 20Byte에 민감한 정보가 있을 수도 있다.)
  • POODLE 공격 : 예전 버전과 통신할 수 있다.(다운그레이드해서 통신해주어야 한다.)
  • FREAK 공격 : 각각의 암호 기술에 대해서
  • 의사난수 생성기에 대한 공격
  • 인증서의 취약점을 노리는 공격
  • Handshake를 과도하게 발생시켜서 DoS 공격을 한다.
    • DoS : 가용성을 침해하는 모든 공격
 
 

HTTPS

  • HTTP와 SSL/TLS의 결합
  • 지원 기능
    • 현재 접속하고 있는 웹사이트 검증
    • 전송되는 모든 데이터 암호화
  • HTTP는 80포트를 사용하지만 HTTPS는 443포트를 사용한다.
  • HTTPS를 사용하면 다음 내용들이 암호화된다.
    • URL
    • 문서내용
    • 브라우저 양식 내용
    • 쿠키
    • HTTP 헤더

 

 
 

HTTP vs HTTPS

  • HTTP : 평문으로 통신
  • HTTPS : 내 PC에서 서명/암호화 완료 후 전송 → 도청해도 소용없다. 웹브라우저 단에서 서명/암호화 한다.

알기 쉬운 정보보호개론 3판

 

 
 

HTTPS의 연결 개시와 연결 종료

  • HTTPS 연결 시작을 위한 과정
    • 클라이언트가 적절한 포트를 통해 TLS_ClientHello를 서버에 보냄으로써 연결 시작
    • TLS 핸드셰이크가 마무리되면 첫번째 HTTP 요청을 전송한다.
    • 모든 HTTP 데이터는 TLS 응용 데이터로 전송한다.
  • HTTPS 연결 종료를 위한 과정
    • 클라이언트나 서버가 HTTP 레코드 안에 “Connection: close”를 삽입해서 연결을 종료한다.
    • 오류로 인하여 연결 중단되었을 때는 close_notify 경보를 띄우고 사용자에게 경고 메세지를 나타내어준다.

 

 
 

SSH

  • 쉽게 구현이 가능하고 저비용 설계된 안전한 네트워크 통신용 프로토콜
  • SSH 서버는 22번 포트를 사용한다. (Telnet은 23번, 원격 리눅스 머신 등에 접속할 때 사용한다.)
  • Telnet의 보안 문제를 해결하기 위해 만들어졌다.
  • SSH는 Telnet보다 일반적인 클라이언트/서버 기능과 파일 전송, 전자메일 기능을 제공한다. (SSH보다 기능이 많다.)
  • 초기버전은 SSH1으로 안전한 원격 로그온 기능을 제공하는 데에 중점을 두었다. (현재는 SSH2)
  • SSH1의 보안 문제를 해결한 것이 SSH2이다.

 

 
 

SSH 구성

  • SSH 전송층 프로토콜
  • 사용자 인증 프로토콜 (User Authentication Protocol)
  • 연결 프로토콜 (Connection Protocol)

 

 
 

SSH Port Forwarding

  • 직접 접근 못하는 서버에 접속하기 위해서이다. (Ex.Proxy, VPN, Port Forwarding)
  • 임의의 안전하지 않은 TCP 연결을 안전한 SSH 연결로 변환한다.
  • SSH 터널링이라고 한다.
  • SSH는 두가지 유형의 Port Forwarding을 지원한다.
    • 로컬 포워딩 (local forwarding) : client가 요청한다.
    • 원격 포워딩 (remote forwarding) : SSH Server가 요청한다.
    • 원리는 같다. : 터널링을 한다.
  • 주로 일반적인 방법으로는 연결이 불가능한 컴퓨터에 연결할 때 사용한다.

 

 
 

Local SSH Port Forwading

  • 사용자의 특정 포트로 들어오는 패킷을 SSH 연결을 통하여 SSH 서버로 전송한 뒤, 최종목적지로 전송하는 기법이다.
  1. 사용자가 다음 명령어를 입력했다고 가정한다. ( ssh -L 9999:mailserver.com:110 203.153.1.2)
  2. 사용자 컴퓨터의 9999번 포트로 들어오는 모든 패킷은 SSH를 통하여 SSH서버로 전송 된다. 그리고 서버는 일반 연결을 통해 mailserver.com의 110번 포트로 전송된다.
  3. mailserver.com의 110번 포트로부터 응답이 오면 SSH서버는 SSH 연결을 통해 사용 자의 9999번 포트로 전송해준다.
  • 여러 client가 접속할 수 있다.

 

 
 

Remote SSH Port Forwarding

  • 누가 SSH 연결을 시도하는지가 다르다.
  • 서버가 클라이언트로 하여금, SSH 서버를 통하여 자기 자신 서버와 연결되게끔 해 주는 기술이다.
  • 서버 운영자가 특정 서비스를 외부 사용자에게 접속을 허락해주기 위해 주로 사용한다.
  1. 서버 운영자가 다음 명령어를 입력했다고 가정 (ssh -R 9999:company.com:3389 203.153.1.2)
  2. 이는 Client(203.153.1.2)의 9999번 포트로 들어오는 모든 메시지는 company.com의 3389번 포트로 자동으로 릴레이 되게 해 준다.
  3. server.com으로부터 응답이 오면 SSH서버는 SSH 연결을 통해 사용자의 컴퓨터로 전송 해준다.
  • Server가 접속할 Client를 한정할 수 있다. (Client 주소를 명시해서)