Back

SMTP email authentication

메일 기능을 추가해야했다.

테스트를 위해 이미 잘 운영중인 별도의 다른 서비스에 메일 기능을 담당하는 코드를 예제로 사용했고, 로컬은 물론 개발 테스트 서버 환경에서도 메일서버를 담당하는 포트가 열려있지 않다는 오류를 받게 되었다.

알고보니 해당 메일기능을 사용하는 회사 서비스는 메일 전송을 위해 직접 SMTP 메일 서버를 열고 메일 발신을 한다.

이전에 개인적으로 메일 발신을 구현했을 때는 직접 배포하는 서버가 메일서버를 구축한 것이 아니었다. 구글과 같이 타 서버에서 사용 가능하도록 만들어놓은 것을 계정인증을 통해서 사용했다.

아무튼 필요한 내용을 보고하고, 이런 환경세팅이 완료된 이후 테스트를 해보게 되었다.

그런데 내 마음대로 발신자의 이메일 주소를 사용할 수 있다는 것을 확인했다. 심지어 도메인도 내 마음대로 가능했다. 이런 조작된 메일이 내 개인 구글 메일함에 정상적으로 메일이 도착했다.

스마트폰이 없던시절 문자메세지 발신자번호를 1004로 바꾼 행운의 편지같은 다단계 문자메세지를 받았던 기억들이 떠올랐다.

그런데 이렇게 쉽게 변경이 되는 이유가 무엇이며, 이로인한 피해가 없었을지, 이런 조작된 메일을 파악할 수 있는 방법은 없는지 여러가지로 궁금했다.

이 주제로 같이 잠시 고민을 해보던 분께 SPF(Sender Policy Framework)라는 키워드를 받게되었다.

내 자외선 차단제에 적혀있는 SPF50+++가 떠올랐지만 더 이상 생각을 확장하지 않고 바로 찾아봤다. SPF는 SMTP 자체에는 인증과 관련한 것들이 포함이 되어있지 않아 이런 검사를 하지 못하여 이 SMTP 프로토콜 위에서 위조를 감지하고 스팸을 방지할 수 있도록 설계된 기술이라고 한다.

SMTP는 Simple Main Transfer Protocol이라는 이름에서 알 수 있듯이 아주 간단하게 메일 전송을 하기 위해 설계 되었기 때문에 보안과 관련한 것들은 별도의 기능을 통해 검증한다고 한다.

그런데 찾아보게되니 이런 보안 시스템은 SPF 하나만 있는 것이 아니었다.

SPF, DKIM, DMARC 이렇게 세가지가 있었고, 이런 것들이 올바르게 구성이 되어있는지 체크를 통해 위조된 메일인지 확인할 수 있다고 한다.

이것들이 무엇인지 간단하게 작성을 해보겠다.

SPF

  • Sender Policy Framework의 약자다.
  • 위조된 메일을 제어한다.
  • 직접 차단을 하는 것이 아닌, 도메인 소유자에게 메일이 정상적인 메일인지 아닌지 구분할 수 있는 방법을 제공하는 시스템이다.
  • 실제로 받은 메일이 도메인 서버가 인증한 메일 서버의 IP와 일치하는지 확인해준다.
  • 메일 헤더에는 발송한 서버의 IP가 존재하고, 헤더의 메일 주소의 도메인에 등록된 TXT 레코드 값이 존재한다. 이 두개를 검사하는데, 검사를 하기 전, 도메인의 소유주가 먼저 해야 하는 것이 있다. 도메인을 가지고있는 소유주는 DNS 서버에 자신의 메일 서버를 등록시키고, 메일 수신자는 발송 서버를 검증할 수 있도록 한다.
  • 이 SPF를 통해 메일을 받는 사람들도 안전하게 메일을 수신할 수 있지만, 도메인의 소유자의 입장에서도 자신의 도메인을 사칭하는 메일을 예방할 수 있다.

DKIM

  • DomainKeys Identified Mail의 약자다.
  • 이메일 스푸핑을 탐지하도록 설계된 이메일 인증 방법이다.
  • 모든 메세지마다 디지털 서명을 추가하여 전송 중간에 변경이 일어났는지 검사를 해준다. 이 방법을 통해 수신자는 특정 도메인으로 온 것으로 주장하는 이메일이 해당 도메인 소유자가 실제로 승인했는지 확인할 수 있다.
  • 비대칭 암호화(공개 키 암호화)를 사용하여 private key를 만들어 이를 메일에 첨부한다. 수신 서버는 이 private key를 DNS에 있는 public key를 통해 복호화 한 후 메일이 중간에 변조가 되었는지 확인할 수 있다.

DMARC

  • SPF와 DKIM을 기반으로 구축되었다.
  • 위에 소개한 두가지 보안 시스템을 사용함과 동시에 모니터링도 하며, 문제가 있는 메일이 올 경우 스팸 폴더로 이동하거나 메일을 전혀 수신하지 않도록 해준다.
  • 보고서도 받을 수 있는데, 얼마나 많은 문제있는 메일이 발송되고 있는지를 파악할 수 있도록 해준다.
  • SPF는 중간에 메일이 변조되어서 피싱메일로 바뀌어도 검증할 수 없고, DKIM의 경우에는 메일 자체가 피싱 사이트에서 왔을 때 검증할 수 없다. 그래서 DMARC는 이를 모두 사용하여 메일이 제대로된 곳에서 왔는지, 위/변조 되지 않았는지 검증해준다.