티스토리 뷰

study/pentest

[pentest] SMTP

hoppi 2022. 2. 23. 20:40

78번째 글.

 

 

1. SMTP란?

STMP는 Simple Mail Transfer Protocol의 약자로 이메일을 주고받기 위한 프로토콜이다.

기본적으로 client-server 사이에서 사용되기도 하지만 두개의 SMTP 서버 사이에서도 사용 가능하다.

25번 포트를 이용하지만 새로운 SMTP 서버의 경우는 587번을 사용한다.

 IMAP 또는 POP3와 함께 결합하여 사용되기도 한다.

 

 

2. SMTP와 보안

SMTP 서버에서 연결 초기에 사용자의 이름과 패스워드를 이용해 신원을 인증한다.

이메일이 보내지면 연결은 종료되고 이메일서버가 이메일을 다른 SMTP 서버로 전송하게 된다.

이 과정에서 SMTP는 인증되지 않은 사용자가 읽는 것을 방지하기 위해서 SSL/TLS 암호화를 사용하는데

특정 상황에서 서버는 암호화를 위해서 25번 포트가 아닌 465번 포트를 사용하기도 한다.

SMTP 서버의 필수적인 기능은 인증 매커니즘을 이용하여

인증된 사용자만이 메일을 보내게 하여 스팸을 방지하는 것이다.

이런 목적으로 최근의 SMTP 서버들은 SMTP-auth를 사용하는 확장 프로토콜인 ESMTP를 지원한다.

 

 

3. 이메일 전송과정

사용자가 메일을 발송하면 MUA(Mail User Agent)라 하는 SMTP 클라이언트는 메일을 헤더와 본문으로 변환하여 

SMTP 서버에 업로드한다.
이런 절차는 MTA(Mail Transfer Agent)라 하는 이메일을 보내고 받는 소프트웨어 기반을 가진다.
MTA는 이메일의 사이즈와 스팸 여부를 체크한 다음 저장한다.
MTA의 부담을 덜기 위해서 MSA(Mail Submission Agent)가 선행되기도 하는데 이메일의 유효성(발신지)을 확인한다.
이 MSA는 Relay 서버라고도 한다. (잘못된 설정으로 Open Relay Attack의 기반이 됨)
그런 다음 MTA는 DNS에서 수신하는 메일서버의 IP주소를 검색한다.
목적지 SMTP 서버에 도착하면 데이터 페킷들은 완전한 이메일로 재조합된다.
여기서 MDA(Mail Delivery Agent)가 수신자의 메일박스에 메일을 전송한다.

 

 

4. SMTP의 단점

  • SMTP를 이용하여 이메일을 보내면 usable delivery confirmation이 반환되지 않는다.
  • open SMTP relay는 스팸을 대량으로 보내는데 오용이 된다.
  • 발신자는 임의의 가짜 주소를 사용하여 메일 스푸핑이 가능하다.

 

 

5. 기본 명령어

5.1 HELO/EHLO

클라이언트가 서버에 HELO or EHLO 명령어를 전송하여 다른 서버와 세션을 맺음을 의미한다.

EHLO(Extended HELO)는 HELO와 동일하지만 확장 SMTP를 사용할 수 있음을 알린다.

 

5.2 VRFY

서버에 존재하는 메일박스 즉 유저들을 검색할 수 있다. (항상 동작하지는 않음)

 

 

6. 위험한 설정

 mynetworks = 0.0.0.0/0

 

송신자가 보낸 메일이 스팸 필터에 의해서 걸러지는 것을 막기 위해서 

보낸 사람은 수신자가 신뢰하는 릴레이 서버를 이용할 수 있다.

하지만 이런 릴레이 서버가 위처럼 모든 IP주소를 허용하도록 설정되어있다면 

위에서 서술했듯이 스팸을 대량으로 보내는 데 사용이 가능해진다.

 

 

7. Enumeration SMTP

nmap의 smtp-open-relay 나 smtp-enum-users 스크립트를 이용하여 enumeration을 진행할 수 있다.

 

nmap 10.129.42.195 -p25 --script smtp-open-relay -v

 

이 외에도 메타스플로잇을 이용한 방법도 있으며 smtp-user-enum 이라는 모듈을 사용하는 방법도 있다.

 

 

Reference

https://academy.hackthebox.com/module // Footprinting