본문 바로가기
Network/Wireshark

[Wireshark]SMTP, TLSv1.2 분석

by 다봄이 2020. 8. 6.

원본 포스팅: 내 네이버 블로그, 포스팅 날짜 2019-11-01


컴퓨터 네트워크 수업을 듣다보면, 메일 서비스는 SMTP 프로토콜을 쓴다는 소리를 주구장창 들을 것이다.

하지만 실제 메일 클라이언트는 SMTP를 쓰지 않는다(!!!)

이와 관련하여 와이어샤크 분석을 해 보았다.

메일을 전송하는 과정을 와이어샤크로 캡쳐해봤다.

SMTP 참고
Command
• HELO : 표준 SMTP 세션 시작
• EHLO : 메일 서비스 확장을 지원하는 SMTP 세션 시작
• MAIL : 메일 송신 주소
• RCPT : 메일 수신 주소
• DATA : 메일 전송
• QUIT : SMTP 연결 종료
응답 코드
• 220 : 서비스 준비
• 221 : 서비스 종료 중
• 250 : 요청한 동작을 승인 및 완료
• 354 : 메일 입력을 시작 & . 로 종료
• 452 : 저장 공간 부족


이제 수업시간에 귀에 딱지가 앉도록 메일 서비스는 SMTP를 사용한다고 들었으니, SMTP 프로토콜을 찾기 위해 필터링 해 보자. 그러면 위와 같이 5개 정도의 패킷만 캡쳐되고 끝난다.

음.

분명 수업시간엔 막 SMTP로 막 MAIL, RCPT, DATA 등을 통해서 막 송신 주소, 수신 주소, 내용이 전달된다고 배웠는데? 그 어디에도 SMTP를 통한 데이터 전송 과정 같은건 보이지 않는다.

여기서 마지막 패킷에 주목하자. 클라이언트에서STARTTLS를 보내면 서버에서 220 코드를 보낸 후Ready to start TLS라고 보낸다.

Ready to start TLS

TLS가 뭔지 알아보자. SMTP 필터를 빼 보면, SMTP 프로토콜 바로 아래가 쭉쭉 TLSv1.2임을 확인할 수 있다. 그렇다면 TLS 프로토콜이 무엇인가?


TLS란, TCP 위에서 동작하는 암호화 통신 프로토콜이다.

여기서 감이 오겠지만, 우리가 알고있는 SMTP는 암호화를 제공하지 않는다. 심지어는 메일 서비스에 로그인할 때 아이디와 비밀번호까지 전부 보여지기 때문에 해킹의 위험이 높다고 배운다.

앗 그러면 메일에서 TLS가 쓰이는건 암호화 서비스가 없는 SMTP에 암호화를 제공하기 위해서겠구나!

따라서 포트 번호도 SMPT 포트 넘버인 25가 아닌, 587로 되어 있다.

참고로 암호화 통신은 SSL이 먼저 등장하였고, 이를 보완하여 나온 프로토콜이 TLS이다. 와이어샤크를 다루다 보면 SSL이라고 써있는 것을 종종 볼 수 있는데, SSL이나 TLS나 같은 말이다.(SSL의 취약점을 보완하여 나온 것이 TLS이며, 현재 TPSv1.2를 가장 많이 쓰지만 이 또한 노후화된 프로토콜이기 때문에 뚫는 법이 꽤나 많이 알려져 있다. 이에 TLSv1.3이 비교적 최근 등장하였다.)

TLS 통신과정

TLS 통신은 다음과 같은 핸드쉐이크 과정을 거쳐 이루어진다.

좀 더 자세히 살펴보자.

사진 출처 : soul0.tistory.com

1.Client hello

  • SSL/TLS 버전 정보(version), 지원 가능한 암호방식(Cipher suites), 무작위 바이트 문자열(Random), 압축 방식(Compression method), 서명 방식 등을 서버에 전달.

2.Server hello

  • client hello에 대한 응답 - 클라이언트가 보낸 Cipher suite 중 자신이 지원하는 Cipher suite를 server hello 메세지에 넣어서 보냄. 이 때 두 Cipher suite를 서로 지원하지 못하면 연결이 끊어짐.
  • 새로운 session ID 할당.

3.Certificate


  • Certificate(server->client) : 서버 측 RSA 암호용 공개키가 저장된 인증서를 보냄.

4.Server key exchange

  • 대칭키 값 교환 및 server hello 종료.

5.Client key exchange

  • 클라이언트의 대칭키 교환. 이 과정이 끝나면 클라이언트와 서버는 사용할 TLS의 버전, Cipher suite를 결정하고, 상호간의 신원 확인이 끝난 상태가 된다.

6, 7.Client Cipher Spec

  • 암호 알고리즘 & 해시 알고리즘 전달 및 지금까지 협상한 방식으로 암호화를 진행할 것임을 알림.

8, 9.Change Cipher Spec

  • 서버도 알고리즘 목록 전달 후 핸드쉐이크 과정 종료. 이제부터 암호화 통신이 시작된다.

10.암호화 통신

  • 암호화된 메세지들이 Application data 패킷으로 전달된다.
  • 메세지 전달이 완료되고 나면 fin 플래그를 전송하여 4-way 핸드쉐이크 과정을 거친 후 서버와 클라이언트 간의 연결이 끊어진다.

11. 통신 종료

  • 이 때는 통신 종료 과정에 대해 배우기 전이라 정보를 찾아봤었는데, fin 플래그는 클라이언트에서 먼저 보낸다고 했었는데, 실제 와이어샤크 캡쳐를 통해 보니 fin 플래그는 클라이언트에서 먼저 보내기도 하고 서버에서 먼저 보내기도 했다. 나중에 교수님께서도 둘 중 아무데서나 보낸다고 말씀하셨다.
  • 참고로 3-way 핸드쉐이크 과정은 SMTP 통신 직전에 이루어진다.

    통계


    사용된 프로토콜을 살펴보면 다음과 같다. 메일 송수신 통신을 시작하기 위해 사용된 SMTP 프로토콜이 약간, 실제 데이터 전송을 위해 사용된 암호화 통신 TLS(SSL : Secure Socket Layer)이 대부분을 차지하고 있는 것을 확인할 수 있다.

참고로 컴퓨터 네트워크에서 가르치는 패킷의 크기는 1500B이다. 그러나 위의 와이어샤크 패킷 길이 분석 결과를 보면 평균 길이 약 1500B인 패킷이 1014개, 그 외의 크기를 갖는 패킷이 각각 444개, 15개 등 다양한 것을 볼 수 있다.

이를 통해 실제 데이터가 전송되는 패킷이 1014개, 나머지 패킷들은 핸드쉐이크 과정 등에서 쓰이는 control packet일 거라고 쉽게 추론할 수 있다.

여기까지가 배운 것과 실제가 달라서 매우 혼란스러웠던 메일 클라이언트의 메일 전송 과정을 와이어샤크로 캡쳐해 본 내용이다.. 처음에는 SMTP가 없어서 매우 당황스러웠는데, 찬찬히 따져보며 검색해가며 와이어샤크 패킷들을 따라가다 보니, SMTP 대신 TLS 통신을 이용함을 알 수 있었다.

'Network > Wireshark' 카테고리의 다른 글

[Wireshark]QUIC 분석, QUIC vs TCP 속도비교  (1) 2020.08.06

댓글