발신자 위조와 이메일 스푸핑
- sendmail을 사용해 간단하게 MTA를 통한 메일 전송을 실습할 때, 존재하지 않거나 내 소유가 아닌 도메인을
MAIL FROM에 입력하고 메일을 보내도 메일이 잘 발송되었다.
- 해당 도메인은 실제로 존재하지만, MX 레코드가 설정된 도메인인지는 알 수 없다.
- TLD가
localdomain임에도 불구하고 메일이 발송되었다.
- 도메인의
local-part부분은 실제로 존재하는 사용자가 아니다.
- 왜 존재하지 않는 도메인을 입력해도 메일이 발송되는걸까?
- 이는
MAIL FROM의 검사 과정을 보면 알 수 있다.
- 이는 이메일 스푸핑 공격에도 함께 사용될 수 있다.
MAIL
- RFC 5321 문서에서
MAIL FROM 명령에 반드시 포함해야 하는 매개 변수 reverse-path의 검증 관련 내용이 작성됨
reverse-path는 SMTP 봉투에 작성된 주소로, 메일의 FROM과는 다름
- 메일 발송 시 발생하는 오류 메시지를 전송하는 주소(3.3)
reverse-path의 주소는 완전하고 즉각적인 검증이 수행되지 않거나 지연될 수 있음
reverse-path의 검증 방법은 명확히 정의되어 있지 않으며, 권장되는 특정한 방법이 없음(3.6.2)
reverse-path가 유효하지 않다는 것을 확실하게 검증하는 것은 어렵고 시간이 많이 소요(6.2)
reverse-path의 문법적인 내용은 ABNF로 명확하게 작성되어 있음(4.1.1.2, 4.1.2), SMTP 서버는 유효하지 않은 문법으로 작성된 reverse-path를 거부할 것임
- 이것을 보아
reverse-path는 문법적으로는 검증되지만 실제로 존재하거나, 유효한지는 검증하지 않을 수 있는 것으로 판단됨
- 따라서 존재하지 않는 발신 도메인이어도 충분히 메일 발송이 가능하다고 판단 가능
이메일 스푸핑이란?
- 공격자는 이메일 헤더를 통해 신원을 위장하고 합법적인 발신자로 가장
- 단순한 이메일 헤더 정보 위조 공격과는 다름
- 단순한 정보 위조라면
- 타이포스쿼팅: 철자가 잘못된 도메인을 사용(
@example.com -> @examp1e.com)
- 전혀 연관이 없는 주소를 사용, 이메일 본문을 통해 진짜인 것처럼 위장
- 이메일 스푸핑은 합법적이고 완전한 도메인이 나타남
- 이는 이메일 헤더와 SMTP 봉투의 주소가 일치할 필요가 없기 때문에 나타나는 오류
- 공격자는 이메일 헤더를 조작해 이메일 헤더의
From에는 합법적이고 완전한 주소를 설정
- SMTP 봉투의
reverse-path와 From의 주소가 불일치해도 메일은 정상적으로 발송됨
MAIL 검증
- 공격자는 SMTP에서
reverse-path가 제대로 검증되지 않을 수 있다는 점을 이메일 스푸핑에서 함께 사용할 수 있음
- 메일 발송 시, 자신의 도메인이 아닌 다른 도메인을
reverse-path에 사용 가능
- 메일 발송 시, 존재하지 않는 도메인을
reverse-path에 사용 가능
공격자 시나리오
- 공격 대상
- 가상의 메일 서버
example.com를 갖는 회사
- 해당 회사는 중요한 메일을 모두
admin@example.com 계정을 사용해 전송
- 공격 시나리오
- 공격자는 이메일 헤더를 조작해
From의 주소를 admin@example.com로 변경해 메일을 전송함
- 공격자는 해당 메일의 제목, 본문에 회사 로고나 내용을 포함해 진짜인 것처럼 위장
- 공격자는
MAIL의 reverse-path에도 admin@example.com을 사용할 수 있음
- 이 경우, 해당 회사에서 메일 보안 레코드(SPF, DKIM, DMARC)가 설정되지 않음
참고자료
cloudflare: 이메일 스푸핑이란?