강좌
클라우드/리눅스에 관한 강좌입니다.
네트워크 분류

메일헤더 분석 및 역추적 방법 강좌 #1

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

메일헤더 분석 및 역추적 방법 강좌 #1



 

최근의 스팸 메일이나 바이러스 메일 등은 송신자와 수신자를 수시로 바꾸어 가면서 전송되기 때문에 실제로 From이나 To로 보이는 정보는 더 이상 의미가 없다.

 

 

그래서 전송된 메일의 헤더를 제대로 이해하지 못하면 실제로 어디에서 어떠한 경로로 어떻게 전송된 메일인지 알 수가 없다.

 

 

결국 스팸이나 바이러스 메일뿐만 아니라 메일과 관련된 여러 문제를 분석하고 해결할 수 있는 근거가 되는 메일의 헤더를 분석하여야 하는데, 이는 다소 어렵게만 알고 있는 것이 사실이지만 실제로는 그리 어렵지 않다.

 

 

따라서 이번 절에서는 메일의 헤더를 분석하고 IP 주소 등을 추적하는 방법에 대해 알아보도록 하자.

 

 

1. 메일의 전송과정

 

e-mail은 발신자로부터 수신자까지 여러 프로세스를 거쳐 전송되는데, 각 단계별로 간단하게 도식하자면 다음과 같다.

 

발송자 -> MUA -> MTA -> 라우팅 -> MTA -> MDA -> MUA -> 수신자

① ② ③ ④ ⑤ ⑥

 

MUA : MUAMail User Agent의 약자로 아래에서 설명할 MTA와 사용자간의 인터페이스를 제공하는데, 대표적인 예로 유닉스의 메일프로그램인 /bin/mail, elm, pine이나 유도라, MS 아웃룩 익스프레스 등이 있다.

 

 

 

MTA : Mail Transfer Agent의 약자로 메일 메시지를 저장하고 포워딩하거나 전송하는 역할을 하는데, 대표적인 예로 일반적인 메일서버 프로그램인 sendmail이나 qmail 또는 MS Exchange 서버 등이 있다.

 

 

 

MDA : Mail Delivery Agent의 약자로 서버에서 메일을 유저의 로컬메일 박스 파일(: /var/spool/mail/userid)로 옮기는 역할을 한다.

 

대표적인 예로 procmail이 있다.

 

 

최근에는 MSA(Mail Submission Agent) 라는 것도 있는데, 최근 버전의 sendmail에서 보이는 /var/spool/clientmqueue가 그 부분이다.

이는 기존 MTA의 역할을 분리한 것으로 생각하면 되는데, 송수신 메일 주소가 문법에 맞는지 등의 주소 확인 및 보안의 관점에서 로컬에서 메일 발송 기능을 담당하고 있다.

 

 

위의 번 단계처럼 유저가 MUA를 이용하여 메일을 작성하는 과정에서는 아래의 메일 헤더가 사용된다.

 

 

From, To, Cc, Bcc, Subject, Reply-to, Priority, Precedence, Resent-To, Resent-Cc

 

번 단계처럼 MUA를 통하여 메일을 발송 할 때에는 아래의 헤더가 추가된다.

 

 

Date, From, Sender, X-Mailer, Mime-Version, Content-Type, Content-Transfer-Encoding

 

번 단계와 같이 MTA에서 MUA를 통해 발송된 메일을 수신 할 때에는 아래와 같이 추가적인 헤더가 포함된다.

 

 

From, Date, Message-Id, Received, Return-Path

 

MTA에서 다른 MTA로 전송되는 과정에서는 Received 헤더가 추가된다.

 

 

 

끝으로 단계와 같이 MTAMDA로 전송하는 과정에서 Apparently-ToFrom 헤더가 추가된다.

 

 

 

 


2. 메일헤더 분석

 

일반적으로 많이 사용하는 아웃룩 익스프레스에서 메일헤더를 확인하려면 해당 메시지를 선택한 후 오른쪽 마우스-->속성-->자세히를 선택하면 아래와 같이 확인할 수 있다.

 

0221f5bf7074739e2913f1797d02a3f1_1670917154_4844.png
 

[그림] 메일 헤더




그럼, 이제 실제로 스팸 메일의 헤더를 예로 들어 헤더의 의미를 분석해 보자.

 

 

Received: from medentech.isdn.esat.net (medsvr01.medentech.com)[193.120.114.219]

by relay03.avnetcom.co.kr(8.11.6/8.11.6) with ESMTP id 18qi5I-0002Is-00 for mkeh@avnetcom.co.kr; Wed, 05 Mar 2004 23:14:01 +0000

Received: from test.com ([200.59.38.130]) by medsvr01.medentech.com

with Microsoft SMTPSVC(5.0.2195.5329); with SMTP id h093ANn04454; for mkeh@avnetcom.co.kr; Wed, 5 Mar 2004 23:10:53 +0000

Return-Path: hahaha@tt.co.kr

From: "섹시마스터" <hahaha@daum.net>

To: "mkeh@avnetcom.co.kr" <mkeh@avnetcom.co.kr>

Date: 5 Mar 2004 23:10:55 +0000

Message-ID: <MEDSVR01kNsjUHQHh2w00000278@medsvr01.medentech.com>

Subject: 지금 바로 확인해 보세요.

 


각줄의 메일 헤더들이 어떤 의미를 가지고 있는가에 대해서 각 줄의 의미를 순서대로 알아보도록 하자.

 

Received: from medentech.isdn.esat.net

 

자기 자신이 medentech.isdn.esat.net라고 언급한 호스트(이는 발신 호스트에서 수신 호스트에게 “HELO 호스트이름또는 “EHLO 호스트이름형식으로 알려준다.)로부터 메일을 수신하였다는 의미이다.

 

(medsvr01.medentech.com)[193.120.114.219]

 

실제 IP193.120.114.219이고 호스트의 이름은 medsvr01.medentech.com라는 것을 의미한다.

 

수신하는 메일서버에서는 발신 호스트의 IP193.120.114.219에 대한 Reverse DNS 질의(일반적인 호스트 이름에 대한 IP 주소 질의를 Forward DNS 질의라 하고 반대로 IP 주소에 대한 호스트이름 질의를 Reverse DNS 질의라 한다.

 

)를 하여 호스트의 이름이 medsvr01.medentech.com라는 것을 확인한 것이다.

만약 Reverse DNS 질의를 했을 때 응답이 없으면 공란으로 나오게 된다.

 

 

 

by relay03.avnetcom.co.kr(8.11.6/8.11.6)

 

메일을 수신한 호스트는 relay03.avnetcom.co.kr이고 메일 프로그램의 버전은 8.11.6이라는 것을 알 수 있다.

 

버전 정보로 보아 sendmail로 예상된다.

 

 

with ESMTP id 18qi5I-0002Is-00

 

esmtp 프로토콜을 통해 수신하는 호스트에서 해당 메시지를 구별하기 위해 18qi5I-0002Is-00라는 ID를 부여하였다. ID는 해당 호스트에서 내부적으로 사용하기 위해 쓰이는데, 관리자가 메일의 로그파일에서 해당 메일을 검색할 때 사용되기도 한다.

 

 

for mkeh@avnetcom.co.kr

 

메시지가 전송될 메일주소이다.

 

 

Wed, 05 Mar 2004 23:14:01 +0000

 

이 메일이 전송된 시각이다.

200435일 오후 11141초에 전송되었다는 것을 알 수 있다.

 

 

 

Return-Path: hahaha@tt.co.kr

 

메일 전송에 실패하였을 경우 Return-Path:에서 지정한 주소로 반송된다.

 

 

Received: from test.com ([200.59.38.130]) by medsvr01.medentech.com

with Microsoft SMTPSVC(5.0.2195.5329); with SMTP id h093ANn04454; for mkeh@avnetcom.co.kr; Wed, 5 Mar 2004 23:10:53 +0000

 

이는 IP200.59.38.130이고 호스트 이름이 test.com인 호스트에서 호스트 이름이 medsvr01.medentech.com인 메일서버로 메일이 전송되었다는 것을 의미한다.

 

 

이는 2004351110분경에 전송되었으며(, test.com에서 medsvr01.medentech.com을 경유하여 relay03.avnetcom.co.kr으로 전송까지는 약 4분정도 소요된 것을 알 수 있다.

 

그러나 서버의 시간이 정확하게 설정되어 있지 않으면 이는 의미가 없을 수 있다.

 

) 해당 메일서버 프로그램은 Microsoft SMTPSVC이며 버전은 5.0.2195.5329라는 것을 알 수 있다.

 

 

Message-ID: <MEDSVR01kNsjUHQHh2w00000278@medsvr01.medentech.com>

 

Message-ID: 또는 Message-IdMessage-id로 사용되는데, ID는 메일 전송 내내 해당 메일을 인식하고 구분하기 위한 용도로 사용되는 것으로 Received: 헤더에 있는 SMTP ID와는 다른 것이라는 점에 주의하여야 한다.

 

 

SMTP ID는 특정한 메일 전송과정에만 의미가 있는 반면(따라서 한 호스트의 SMTP ID는 다른 호스트에게는 의미가 없다.

 

) Message-ID는 메일전송이 완료될 때까지 의미를 가지고 있다.

 

때때로 Message-ID에는 발송자의 메일 주소가 일부 포함되기도 한다.

 

 

 

메일 헤더에서 특히 주목해야 할 부분은 Received: from 부분이다.


 

Received:는 각각의 MTA가 릴레이를 하면서 추가되는데, 실제로 메일 전송의 경로를 추적할 때 매우 유용하게 사용되며 앞에서 본 바와 같이 사용되는 형식은 다음과 같다.

 

Received: ["from" 발송 호스트] "by" 수신 호스트 ["with" 메일 프로토콜] "id" 문자열 ["for 수신자메일주소" ] ";" 날짜 및 시각

 

또한 다음의 형식도 가능하다.

 

 

Received: from 발송호스트의 이름([발송 호스트의 ip 주소]) by 수신 호스트 (수신서버의 메일 소프트웨어)


 

, Received: from이 있는 제일 아래 부분에서 위쪽으로 순서대로 메일이 전송된 것이므로 위 예에서 보이는 헤더의 경우 실제 해당 메일을 처음 발송한 곳은 제일 아래쪽에 있는 Received: fromtest.com ([200.59.38.130])이라는 것을 알 수 있다.

 

그러나 이러한 추적을 어렵게 하기 위해 최근에 일부 이용되는 방식중 하나는 실제 메일 발송전에 아래와 같이 위조된 Received: 헤더를 추가하는 경우도 있다.

 

이를테면 다음과 같은 것이다.

 

(아래 3줄 중 줄이 위조되어 추가된 헤더이다.

)

 

Received: from galangal.org ([104.128.23.115]) by mail.bieberdorf.edu (8.8.5)...

Received: from nowhere by fictitious-site (8.8.3/8.7.2)...

Received: No Information Here, Go Away!

 

메일 발송자의 입장에서 볼 때 이미 메일 서버를 통해 발송된 메일에 대해서는 헤더 추가나 변경등 메일에 대한 제어를 할 수 없고, 또한 Received: 헤더는 메일 전송과 함께 아래에서 위로 순서대로 추가되기 때문에 위조된 부분은(만약 위조하였다면) 통상적으로 아래 부분에 보이게 될 것이다.


 

만약 이러한 경우라면 이는 곧 다른 말로 Received: 헤더 부분에서, 위조된 부분 이하부터는 의미가 없다는 것을 뜻한다.

 

 

가끔 스팸메일을 받아 보면 받는 사람에 나의 메일 주소가 아니라 동료 또는 오래전 퇴사한 직원의 메일주소가 적혀있는 경우가 있다.

 

 

이러한 경우 대부분 나의 메일 주소가 숨은참조로 되어 있기 때문이라고 생각하는데, 이는 그렇지 않다


이를테면 아래와 같이 메일을 발송했다고 가정해 보자. 아래에서 검정색 부분이 입력한 부분이다.

 

 

# telnet www10.tt.co.kr 25

Trying 211.47.66.50...

Connected to www10.tt.co.kr (211.47.66.50).

Escape character is '^]'.

220 www10.tt.co.kr ESMTP

HELO SULINUX

250 www10.tt.co.kr Hello [211.47.65.57], pleased to meet you

MAIL FROM:antihong@antihong.com

250 2.1.0 antihong@antihong.com... Sender ok

RCPT TO:antihong@tt.co.kr

250 2.1.5 antihong@tt.co.kr... Recipient ok

DATA

354 Enter mail, end with "." on a line by itself

Received: from antihong.com (antihong.com [300.300.300.300]) by tt.co.kr (8.11.6)

Received: from mail.superuser.co.kr (mail.superuser.co.kr [400.300.200.100]) by antihong.com (8.14.5) id 004A21

From: root@superuser.co.kr (SUPERUSER)

To: antihong@antihong.org

Date: Tue, Mar 18 1997 14:36:14 KST

Message-Id: <rth031897143614-00000298@mail.superuser.co.kr>

X-Mailer: Aantihong v1.22

Subject: Hello??

Hello...

.

250 2.0.0 m1S2leXJ015516 Message accepted for delivery

quit

221 2.0.0 www10.tt.co.kr closing connection

Connection closed by foreign host.

 

메일을 수신해 보면 다음과 같이 보이게 된다.

 

분명 나의 메일 주소는 antihong@tt.co.kr 인데 받는 사람에는 존재하지도 않는 메일 주소(antihong@antihong.org) 로 되어 있는 것을 알 수 있다.

 

 

0221f5bf7074739e2913f1797d02a3f1_1670917178_6416.png
 

 

이때 보이는 헤더를 보면 다음과 같다. 위의 입력한 명령어와 실제로 수신한 메일의 헤더를 비교해 보기 바란다.

 

 

여기에서, 진한 Received: from은 모두 DATA 이후에 임의로 입력한 위조된 헤더로서 스패머가 자신의 메일 발송지를 속이기 위함이다.


 

그리고 위의 부분에서 FromTo가 각각 앞 부분(MAIL FROMRCPT TO)DATA 이후에 보이는 부분(From To) 이 있는 것을 알 수 있는데, To 부분만 보면 앞의 RCPT TO(antihong@tt.co.kr)가 실제 해당 메일이 보내어지는 주소이고 뒤에 보이는

To(antihong@antihong.org)는 단지 위 메일을 수신한 사람에게 보여 지는 주소일 뿐이라는 것을 알 수 있다.

 

 

 

 

 

Received: from SULINUX ([211.47.65.57])

by www10.tt.co.kr (8.13.8/8.13.8) with SMTP id m1S2leXJ015516

for antihong@tt.co.kr; Thu, 28 Feb 2008 11:48:01 +0900

Received: from antihong.com (antihong.com [300.300.300.300]) by tt.co.kr (8.11.6)

Received: from mail.superuser.co.kr (mail.superuser.co.kr [400.300.200.100]) by antihong.com (8.14.5) id 004A21

From: root@superuser.co.kr (SUPERUSER)

To: antihong@antihong.org

Date: Tue, Mar 18 1997 14:36:14 KST

Message-Id: <rth031897143614-00000298@mail.superuser.co.kr>

X-Mailer: Aantihong v1.22

 

그럼, 아래의 큐는 어떻게 해석할 수 있을까?

 

이는 실제로 스팸이 발송되고 있는 서버의 큐에 남아있던 파일인데, 아래에서, RPFD로 보이는 8명의 메일주소로 아래 대출관련 메일이 발송되고 그 사람들이 메일을 받게 되면 받는 사람에 자신의 메일 주소가 아닌 "tmfdktkfkdgo" <tmfdktkfkdgo@hanmir.com>로 보이게 되는 것임을 알 수 있다.

 

 

"tmfdktkfkdgo"는 별도의 의미가 있는 것은 아니며 단지 여러 메일 주소 중 처음에 보이는 메일 주소를 선택한 것 뿐이다.

 

RPFD:<tmfdktkfkdgo@hanmir.com>

RPFD:<tmfdk99@hanmir.com>

RPFD:<tmfdk91@hanmir.com>

RPFD:<tmfdk5573@hanmir.com>

RPFD:<tmfdk486@hanmir.com>

RPFD:<tmfdk4352@hanmir.com>

RPFD:<tmfdk3587@hanmir.com>

RPFD:<tmfdk222@hanmir.com>

RPFD:<tmfdk0102@hanmir.com>

H?P?Return-Path: <>

H??Received: from tu.net ([218.145.217.174])

(authenticated)

by smtp.xxxxxx.co.kr (8.11.6/8.11.6) with ESMTP id j48DruD04861;

Sun, 8 May 2007 22:53:56 +0900

H?M?Message-Id: <200505081353.j48DruD04861@smtp.xxxxxx.co.kr>

H??From: "sardasda" <sardasda@hotmail.com>

H??To: "tmfdktkfkdgo" <tmfdktkfkdgo@hanmir.com>

H??Subject: 무조건 누구라도 바로 빌려드립니다 가장 싸게 무조건 바로 말만하세요

 

그럼, 어떻게 한통에 여러 사람에게 보이는 것일까? 간단하다. 다음과 같이 RCPT TO: 입력후 DATA를 입력하기 전에 여러 메일 주소를 한꺼번에 계속 입력하면 되는 것이다.

 

250 www10.tt.co.kr Hello [211.47.65.57], pleased to meet you

MAIL FROM:antihong@antihong.com

250 2.1.0 antihong@antihong.com... Sender ok

RCPT TO:antihong@tt.co.kr

250 2.1.5 antihong@tt.co.kr... Recipient ok

RCPT TO:antihong2@tt.co.kr

250 2.1.5 antihong2@tt.co.kr... Recipient ok

RCPT TO:antihong3@tt.co.kr

250 2.1.5 antihong3@tt.co.kr... Recipient ok

...........

 

 



지금까지 메일의 헤더를 분석하는 방법에 대해 알아보았다. 그런데, 이 헤더 정보를 이용하면 스팸 메일은 물론이고 바이러스 메일이 최초로 어떤 IP에서 발송되었는가의 정보도 알 수 있다.

 

 

이를테면, 예전에는 abc@server.com에서 메일이 오면 이 메일 계정을 사용하는 사용자가 바이러스에 감염되었다고 생각했지만 최근에는 그렇게 생각하지 않는다. 왜냐하면 최근 웜 바이러스와 관련하여 새롭게 대두되는 문제 중 하나인 "E-mail spoofing(위조)"이라는 것 때문이다.


 

"E-mail spoofing"은 최근의 바이러스 경향과 관련이 있는데, 최근에 보여지는 대부분의 각종 바이러스는 감염된 PC에서 주소록이나 하드디스크에 저장된 HTML 파일에 있는 임의의 메일 주소를 이용하여 무작위로 From(발신자)To(수신자)에 지정하여 메일을 발송하기 때문에 자신이 바이러스에 감염되지 않아도 마치 자신이 바이러스 메일을 발송하는 것처럼 보이게 되는 것이다.


 

따라서 발송자 메일 주소와는 관계없이 메일의 헤더를 살펴보고 제일 아래에 있는 Received:에 보이는 IP가 바로 바이러스에 감염된 주소라 할 수 있다.

 

 

IP를 확인한 후에는 이 IP를 사용하는 기관이나 국가가 어디인지 확인하여야 할 경우가 있는데, 다음절에서 이에 대한 답을 찾아보도록 하자

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,807 개
  • 현재 접속자 :  121 명