SPF, DKIM, DMARC

Glen·2022년 8월 26일
0

SPF(Sender Policy Framework)

  • 메일서버의 정보를 DNS의 등록하여, 발송자의 정보가 실제 메일서버에서 보낸것이 맞는지 확인

발신자

  • 메일서버 정보와 정책을 나타내는 SPF레코드를 DNS에 등록

수신자

  • 메일 수신시 DNS에 등록된 SPF레코드를 참고하여 발송IP를 대조하여 확인함
  • 수신 메일서버에 SPF가 설정되어있어야함.

SPF 레코드 예시

**v=spf1 include:_spf.google.com ip4:222.111.222.214 ip4:222.110.222.103 ip4:222.110.222.248 ip4:222.110.222.104 ip4:222.110.222.105 ~all**

  • 명시된 ipv4 영역이거나 도메인 '_spf.google.com'의 SPF 레코드에 포함된 발송 서버는 통과합니다. (~all) 통과하지 못한 나머지는 실패되지만 수신 될 수 있습니다.
  • v=spf
    • 버전
  • include : _ spf.goole.com ip4~~~
    • 메커니즘, 매칭방식을 뜻함
  • ~all
    • spf 인증 성공여부에 따른 처리를 정의

SPF 단점

  • MAIL FROM과 FROM이 존재
  • 발송서버는 SPF레코드가 등록된 변조된 MAIL FROM을 신뢰하게됨.
C: MAIL FROM:<bob@spoofing.com>    <-- SPF 인증시 확인하는 주소
S: 250 Ok
C: RCPT TO:<alice@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Bob Example" <bob@trust.com>  <-- 수신자는 From을 보기때문에 속을  있음
C: To: Alice Example <alice@example.com>

DKIM (도메인 키 인증 메일)

  • 수신 서버에서 이메일이 위변조 되지 않았다는걸 디지털 서명으로 검증
  • 발송 서버는 이메일 발송시 발송자, 수신자, 제목, 내용등을 비밀키로 서명함
  • 해당 서명값을 DKIM-Signature header에 추가함
  • 수신서버는 DKIM-Signature header에 있는 dns를 참조.
    dns에 DKIM레코드(공개키와 서명알고리즘 등)를 조회하고 서명 검증

DKIM 레코드 예시

v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDmzRmJRQxLEuyYiyMg4suA2SyMwR5MGHpP9diNT1hRiwUd/mZp1ro7kIDTKS8ttkI6z6eTRW9e9dDOxzSxNuXmume60Cjbu08gOyhPG3GfWdg7QkdN6kR4V75MFlw624VY35DaXBvnlTJTgRg/EW72O1DiYVThkyCgpSYS8nmEQIDAQAB
  • v (선택) : 레코드버전
  • r (선택) : 알고리즘 종류
  • p : 서명검증에 필요한 공개키, base64인코딩, 발송서버에서 발급

DKIM-Signature 구조

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=domain-com.20210112.gappssmtp.com; s=20210112;
        h=mime-version:from:date:message-id:subject:to:cc:x-original-sender
         :x-original-authentication-results:precedence:mailing-list:list-id
         :list-post:list-help:list-archive:list-unsubscribe;
        bh=xvI5AvIrpt+075+wRKkXgJpU/Eht9YLvqZWj4rcHKUE=;
        b=AynqMNO+zcc1wZ5Y/EYurlr2rCRKR+lmVfGK4OXqvaumOAB1tGfkJ0TOzMa/H5nEa7
         VmYav3JXtekSsT2joeS4pnlUBMn7MUJxC9ODFn8/IgavWguY++VxHk2f7Goh5X+MN71z
         wh92gX2zAVAOKbP91Vy9kgIq/CdLDW65acWNdeXdRhBr7NBV/ircVMzIPVMcfmhSsVtb
         /AHpw3vqvKs0tiW+xi2tLbIIypy4itb1NhONc+intIdH6h5X1aKVabgv3wEQIU5ov/ch
         3vAs9iVfpbjMLBTzxmSnii1jRZxwCf2vcK6Sc7GCx5ybdfclDZQsvKJX6iWw5dtjNaZe
         TKzA==
  • v : 버전
  • a : 알고리즘
  • c (선택) : 헤더,바디 정규화 알고리즘
  • d : 도메인정보, 지정자(s)와 함께 DKIM 서명을 검증하기위해 레코드를 조회할때 사용됨
  • s : 지정자, 수신서버가 어떤 dns에서 DKIM레코드를 확인해야하는지 알려줌
  • h : 서명할 헤더 정보
  • b : 헤더 서명값
  • bh : 이메일 본문 서명값

DKIM 인증 한계

  • DKIM도 이메일 내용의 위변조여부를 인증할뿐 MAILFROM <> FROM의 관계를 검증하지 않기 때문에 여전히 spoofing이 가능하다.
C: MAIL FROM:<bob@spoofing.com><-- SPF 레코드가 등록된 From과 다른 공격자 도메인을 사용
S: 250 Ok
C: RCPT TO:<alice@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: DKIM-Signature: v=1; a=rsa-sha256; d=spoofing.com; s=brisbane; 
<-- 공격자 도메인과 지정자
      c=simple; q=dns/txt; i=@eng.example.net;
      t=1117574938; x=1118006938;
      h=from:to:subject:date;
      bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
      b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4ZHRNiYzR
C: From: "Bob Example" <bob@trust.com>  
<-- 수신자는 MAIL FROM이 아닌 From을 보기때문에 속을  있음
C: To: Alice Example <alice@example.com>

DMARC(Domain-based Message Authentication, Reporting and Conformance)

  • 수신된 메일의 발신자정보와 메일내용이 변조되지 않았음을 인증
  • SPF, DKIM을 통해 인증하고 인증되지 않은 메일들을 어떻게 처리 할 것인지 설정
  • SPF, DKIM이 설정되어있지 않더라도 DMARC정책으로 수신 실패 모니터링 가능
  • 수신서버는 발신자 주소 dns에서 dmarc 레코드를 조회
  • spf, dkim을 사용하는지
  • 인증에 실패했을경우 메일처리를 어떻게 할지 판단함.

DMARC 레코드

"v=DMARC1;p=none;sp=quarantine;pct=100;rua=mailto:dmarcreports@example.com;"

v : 버전

p : 실패 처리 정책

  • none : SPF,DKIM을 사용하지 않을때 설정
  • quarantine : 실패한 메일을 스팸처리
  • reject : 실패한 메일을 반송

sp : 서브도메인 실패 처리 정책

adkim(선택) : DKIM-Signature의 도메인과 From의 일치 검증

aspf(선택) : SPF 인증시 MAILFROM과 From의 일치 검증

-s : 엄격. 도메인 정확히 일치해야함

-r : 유연함. 서브도메인 가능함.

ptc(선택) : 100

rua(선택) : 주기적 집계 실패 보고서 수신할 주소

참고

profile
어제보다 나은 엔지니어가 되기 위해서 공부중

0개의 댓글