Dork's port

S/MIME (Secure/Multipurpose Internet Mail Extension) - 3 본문

Network

S/MIME (Secure/Multipurpose Internet Mail Extension) - 3

Dork94 2019. 4. 5. 17:10

 

S/MIME (Secure/Multipurpose Internet Mail Extension) - 1 에서는 S/MIME을 알기에 앞서 MIME에 대해 알아보았고, 

S/MIME (Secure/Multipurpose Internet Mail Extension) - 2 에서 기본적인 S/MIME에 대해서 알아보았다.

 

 

 

  #DKIM(Domainkeys Identified Mail) 

 

DKIM는  e-mail messages를 서명하기 위한 기술이다. 메세지 수신자는 signer의 domain에 직접 query를 날려 public-key를 가져옴으로써, 메세지가 signing domain의 private-key로 sign되었는지를 확인하여 서명을 확인할 수 있다.

 

즉, 메일이 오면 메세지에 적혀있는 도메인으로 query를 날려 서명을 비교하여 실제 그 도메인에서 발송된 메일인지, 아닌지를 판별할 수 있다.

 

DKIM은 RFC 4871에 정의되어 있으며 많이 사용되고 있다.

 

E-mail Flow

  • MUA
    • Message User Agent로 사용자가 사용하는 메일 프로그램 등
  • MSA
    • Mail Submission Agent로 MUA로부터 메세지를 받아서 전달해주며, 보통 MUA와 함께 있거나 기능으로 제공된다.
  • MTA
    • Message Transfer Agent로 메일을 전달해준다. 쉽게 말해 네트워크에서 라우터나 스위치 같은 역할이며, 서버라고 보면 될 듯 하다.
  • MDA
    • MHS와 MS사이에 전달을 해주는 다리 같은 역할
  • MS
    • MUA와 같이 있거나 원격 서버의 형태로 존재할 수 있으며 POP이나 IMAP을 통해 메세지를 가져온다.

 

뭔가, 이 저자는 엄청 상세하게 나눈 것 같다. 보통은 (sender)MUA-MTA-MDA-MUA(receiver)의 순서로 생각하면 될 것 같다.

 

 

  #E-mail Threat 

 

RFC 4686에서는 DKIM의 Characterisitics, Capabilities, location에 대한 Threat들을 설명하고 있다.

 

  1. Characterisitic
    1. recipient가 원하지 않는 메일을 Attacker가 보내려고 할때 Sender의 Address를 변조해 바꿀 수 있다. 이러면, 스팸을 필터링하기 쉽지 않다.
    2. 다량의 스팸메일을 보내는 Attacker는 Third party대신 상업 enterpise를 이용하며, Tool을 많이 사거나, MTA나 Zombie등을 이용해 attack하기도 한다.
    3. DNS cache-posioning Attack 이나 , IP routing attack등 가능한 모든 방법을 동원해서 직접적인 금전 이득을 얻는 Attacker도 있다.
  2. Capabilities
    1. MTA와 MSA에 메세지를 보낼 수 있다.
    2. Message Header field를 자유롭게 수정할 수 있다.
    3. domain을 대신해 message에 sign할 수 있다.
    4. DoS Attack에 이용하기 위해 unsigned되거나 signed된 것처럼 보이는 메세지를 생성할 수 있다.
    5. 이미 Signed된 메세지를 다시 보낼 수 있다. 
    6. 모든 envelope information을 이용해서 메세지를 보낼 수 있다.
    7. 취약한 컴퓨터에 대해 signed된 메세지 처럼 보낼 수 있다.
    8. IP routing을 이용해 IP 추적이 어려운 주소를 이용해 메세지를 전송하거나 메세지를 특정 domain으로 forwarding 할 수 있다.
    9. DNS를 이용하는 한계 때문에 DNS를 이용한 Attack을 할 수 있다.
    10. 특정한 자원을 감염된 좀비를 통해 Access할 수 있다. (DDoS나 Brute Force 등)
    11. Wireless환경에서 Packet Sniffing을 할 수 있다.

DKIM은 e-mail 인증 을 제공하기 위해 디자인되었다. 사용자의 이메일은 sender의 administrative domain의 private-key로 signed된다.  message header와 content전부를 signed 하며, MDA가 DNS의 public-key를 이용해 검증한다.

 

이 검증 과정을 통해 Domain에서 온 것임을 증명한다. 그래서 이 인증과정에 문제가 있을 경우(Public-key로 복호화를 시도했을때 제대로 복호화가 되지 않은 경우)는 거절될 수 있다.

 

S/MIME는 Sender와 Receiver모두 S/MIME 를 사용해야 한다. 거의 대부분 수신시에 S/MIME을 사용하지 않으며 보낼때 역시 수신자가 S/MIME을 사용하지 않는다. 게다가 S/MINE은 message content에 대해 sign만 진행해서 header에 대해서는 취약할 수 있다.

 

DKIM은 Client program(MUA)에서 구현되지 않아서 사용자에게 전달될때 다른 조치를 취하지 않아도 된다. 그리고 DKIM은 모든 domain을 사용하는 메일에 적용되며 domain을 이용해 속일 수 없도록 만들어준다.

 

DKIM Flow

 

 

DKIM은 위처럼 동작한다. 먼저, 보내고자 하는 메일을 MSA(Mail Submission Agent)를 이용해 메세지를 보내게 되는데(이때 MSA는 User가 이용하는 domain에 속해있다), MSA에게 보낼때는 MSA의 공개키를 이용해 암호화해서 보낸다.

 

그 후, MSA가 Sign을 하게되고 MTA에게 메일을 전송하게 되고 받고자 하는 사용자의 MDA에 전달되게 된다. 이때 MDA는 MSA의 DNS Server에 public-key에 대한 query를 요청한다.

 

그리고 응답으로 Sign을 했다고 주장하는 MDA의 Public-key를 받아 Sign을 verify하게 된다. public-key를 이용해 복호화에 성공하면 MUA에게 정상적으로 보내고 그렇지 않으면 상황에 따라 다르게(MDA의 정책에 따라) 수신 여부를 결정하게 된다.

 

DKIM에서 message를 처리하는 것은 Signing ADMD(Administrative Management Domain)과 Verifying ADMD로 나뉘며, Singing은 Signing ADMD에서 이뤄지고, Key Store에서 private-key에 대한 정보를 얻어서 사용한다. 

 

 

DKIM Flow

 

 

 

 

DKIM은 RFC 5322 Header에 부가적으로 존재하며 아래 처럼 생겼다.

 

v = DKIM version

a = signature을 서명할때 사용한 알고리즘으로 rsa-sha1이거나 rsa-sha256이어야 한다.

c = Canonicalization method(아래에서 짧게 설명한다)

d = domain name (SDID)

s = selelctor로 같은 도메인에 대해 다른상황에서 다른키가 사용될 수 있기 때문에, s를 지정해준다.

h = Signed Header field  여러개의 값이 존재하며 ':' 각 field를 구분한다.

bh = c의 method를 이용해 canonicalized된 body에 대한 hash값이다.

b = encrypt된 hash로 base64의 형태로 인코딩 되어있다. 

DKIM Header

 

그리고 실제로 사용중인 메일에서 확인을 해보았다. 

 

Applie Mail Application에서 캡쳐한 DKIM Header

...더보기

Apple Mail Application에서는 보고자 하는 메일에서 상태바의 View-message-Raw Source를 통해 확인할 수 있다(단축키는 -option+ command + u). 또한 gmail에서도 아래와 같은 옵션으로 확인할 수 있다.

원본 보기를 클릭하면 마찬가지로 Raw Data를 볼 수 있다.

 

네이버에서 이런 서비스도 제공하고 있는데, 아마 DKIM을 이용하거나 본인들의 도메인 IP에서 발송된 IP가 아니면 경고를 띄워주는 방식인 듯하다. naver mail에서 Raw data를 볼 수 있는 항목은 못찾았다.

 

Canonicalization은 character encoding, white space에 대한 처리, 헤더의 foding과 unfoding 기능에 처리 과정중 변화 가능성을 다루기 위해 필요하며, header와 body에 모두에 대해서 처리된다.

 

...더보기

Canonical이라는 단어가 생소해서 찾아보니 IT 문서에서 다루는 Canonical의 뜻은 "authoritative", "standard", "official과 같은 단어라고 한다. 

Ref: https://english.stackexchange.com/questions/34920/what-does-canonical-mean

 

Canonicalization은 송신 메세지를 작게 하기 위해서 사용되며 body field를 위한 2가지 알고리즘(simple, relaxed)이 있다. simple 알고리즘은 거의 수정을 하지 않으며, 반면 relaxed 알고리즘의 경우 수정을 한다. 

 

요렇게 DKIM도 끗! 

 

간단히 말하면, 그냥 sender의 도메인의 dns에 접속해서 실제 그 도메인을 통해 왔는지, 아닌지를 위의 형식(DKIM-signature)를 통해 검사하는 process 이다.

 

틀린 정보나 궁금한 점이 있으면 댓글로 부탁드립니다 :)

Comments