2015년 4월 13일 월요일

SSL 암호 통신

ㅇ ㅂㅇ

SSL 이란?

SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명한 것이다.
  1. [웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https://가 사용된다)
  2. [웹서버] Public Key를 인증서와 함께 전송한다.
  3. [웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주:Internet Explorer나 Netscape와 같은 웹브라우저에는 이미 Verisign, Thawte와 같은 널리 알려진 root CA의 인증서가 설치되어 있다) 또한 날짜가 유효한지, 그리고 인증서가 접속하려는 사이트와 관련되어 있는지 확인한다.
  4. [웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비롯한 URL, http 데이터들을 암호화해서 전송한다.
  5. [웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다.
  6. [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다.
  7. [웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 정보를 뿌려준다.

인증서(Certificate)

당신과 접속해있는 사람이나 웹 사이트가 믿을 수 있는지 어떻게 판단할 수 있을까? 한 웹사이트 관리자가 있다고 가정하자. 그 사람이 당신에게 이 사이트가 믿을만하다고 (심각할 정도로) 열심히 설명했다. 당신이 그 사이트의 인증서를 설치해 주기를 바라면서 말이다. 
인증서는 여러 부분으로 이루어져있다. 아래는 인증서 속에 들어있는 정보의 종류를 나타낸 것이다.
  1. 인증서 소유자의 e-mail 주소
  2. 소유자의 이름
  3. 인증서의 용도
  4. 인증서 유효기간
  5. 발행 장소
  6. Distinguished Name (DN)
    - Common Name (CN)
    - 인증서 정보에 대해 서명한 사람의 디지털 ID
  7. Public Key
  8. 해쉬(Hash)
SSL의 기본 구조는 당신이 인증서를 서명한 사람을 신뢰한다면, 서명된 인증서도 신뢰할 수 있다는 것이다. 이것은 마치 트리(Tree)와 같은 구조를 이루면서 인증서끼리 서명하게 된다. 그러면 최상위 인증서는? 이 인증서를 발행한 기관을 Root Certification Authority(줄여서 Root CA)라고 부르며, 유명한 인증 기관(역주:Verisign, Thawte, Entrust, etc)의 Root CA 인증서는 웹브라우저에 기본적으로 설치되어 있다. 이러한 인증 기관은 자신들이 서명한 인증서들을 관리할 뿐만 아니라 철회 인증서(Revoked Certificate)들도 관리하고 있다. 그러면 Root CA의 인증서는 누가 서명을 했을까? 모든 Root CA 인증서는 자체 서명(Self Signed)되어 있다.

 * SSL 암호화 통신

 1 단계 : 클라이언트는 자신의 SSL 버전과 암호화 알고리즘, 임의로 만든 데이터, 서버가 인증과 관련해 요구하는 일반 정보를 서버로 보냄
 2 단계 : 서버는 서버의 SSL 버전과 암호화 알고리즘, 클라이언트가 접속하는 데 필요한 정보를 클라이언트에 보냄
 3 단계 : 서버가 자신의 인증서를 클라이언트에 보내주면, 클라이언트는 서버가 보낸 인증서를 확인하여 서버를 인증, 인증에 실패할 경우 신뢰할 수 없는 서버임을 경고
 4 단계 : 인증이 확인되면 서버는 클라이언트에 'Master Secret'를 암호화하여 전송하고, 클라이언트와 서버는 'Master Secret'를 이용하여 통신에 사용할 세션키를 만들어 냄
 5 단계 : 이후 서버와 클라이언트 간에 전송되는 데이터는 모두 세션키를 통해 암호화하여 전송됨


 * SSL MITM 공격

 1. DNS 스푸핑 공격 (dnsspoof.hosts)
 2. webmitm을 이용 인증서 생성
  - mitm 공격 시작
 3. ettercap을 이용한 ARP 리다이렉트
 4. DNS 스푸핑
 5. DNS 정보를 지우고 https://~ 사이트 접속
 6. 사이트 접속과 인증서 오류 확인
 7. 접속중 패킷을 캡처
 8. ssldump 명령을 이용한 해석

접속할 사이트 : https://addons.mozilla.org/ko/firefox


 1. DNS 스푸핑 공격 준비(dnsspoof.hosts)


 2. webmitm을 이용 인증서 생성

< 아무런 값을 입력하여 생성 >

< cat 명령어로 인증서 확인 >

 6. 사이트 접속과 인증서 오류 확인

< 과정으로 인해서 접속이 막힌 https 사이트 >

< 인증서가 달라져 해당 메시지가 출력 된다. >

 7. 접속 중 패킷을 캡처한다.
  #tcpdump -w mitm.pcap
  > tcpdump로 패킷을 캡처 한 후 wireshark 등으로 읽을 수 있다.

< mozilla에 접속한 것을 확인 가능하다 >


 8. ssldump 명령을 이용한 해석
  > ssldump 설치
  #yum -y install ssldump


  ssldum 명령
  # ssldump -a -d -k [인증서 파일명] -r [패킷 덤프파일]

< 해당 파일을 해석 후 a.txt에 저장 >

< a.txt 를 vi 명령어로 열어서 확인한 모습 >



댓글 없음:

댓글 쓰기