내가 나한테 스팸메일을 보냈다구?

참 요즘에는 스팸메일도 많이 옵니다. 창과 방패의 싸움을 계속해야하는 저 같은 메일쟁이들은 정말 많은 유형의 스팸을 직접 겪어야하는데, 막으면 다른 방법으로 뚫고, 그 방법도 막으면 또 다른 방법을 동원하고. 요즘은 이런 것도 유행이 있더군요. 예를 들면 이런 내용입니다.

스팸메일 중, 가끔씩 보면 자기 자신의 메일 주소가 발신자로 지정되어있는 경우가 있어 화들짝 놀랄 때가 한번쯤은 있으실 겁니다. 누가 자신의 메일 계정을 해킹한 것인지, 서비스 회사가 동일 계정을 여러명에게 부여하는 (가능하지도 않은) 정신줄 놓은 짓을 한 것인지, 아니면 도대체 뭐가 어떻게 된 것인지 몰라서 당황하게 되지요. 상식적으로 생각해볼 때 자신의 메일 주소는 자신만이 사용할 수 있는 고유한 주소인데, 그게 누군가에 의해서 사용되었다 싶으면 가질 수 있는 근본적인 의문임에는 틀림이 없습니다만, 다행인지 불행인지 그런 것들과는 전혀 관계없는, 단순한 SMTP의 헛점을 이용한 사칭 메일에 불과합니다. 실제로 수신된 메일을 보면 이런 내용이죠. 보통.

네, 보시다시피 비아그라 광고입니다. 품목을 보면 비아그라, 시알리스 등 소위 남자한테 좋다는(…) 약품, 그러나 처방전없이는 구매할 수 없는 약품을 인터넷으로 판매한다는 내용이지요. 당연하게도 불법입니다(합법적인 서비스나 물품을 판매하는 스팸은 많지 않지요).

메일 내용은 그렇다치고, 화면을 보시면 보내는 이와 받는 이가 모두 widelake앳드림위즈닷컴으로 동일한 것을 보실 수 있을 겁니다. 제가 보냈냐구요? 어유, 그럴리가. 전 저런 약품을 구할 능력도 없고, 메일 로그에도 저런 걸 보낸 기록 자체가 없습니다. 그런데 저 메일은 어찌 된 것이냐.

RFC5321로 표준화되어있는 우리의 SMTP(Simple Mail Transfer Protocol)는 이름에서부터 알 수 있다시피 아주 간단합니다. 간단한 건 간단한 건데, 사용자를 인증하는 과정 자체가 너무 간단해서 문제가 되는 겁니다.

SMTP로 메일을 발송하는 방법은 크게 세 단계로 나눌 수 있습니다. ①보내는 이를 정의하고(mail from), ②받는 이를 정의한 다음(rcpt to), ③제목과 본문을 비롯한 데이터 영역을 작성하면 바로 보내집니다. 정말 심플하지요. 이 세 단계의 과정을 거쳐 전송된 메일을 가지고, 보통 웹메일이나 메일 클라이언트 인터페이스에서 받는이와 보내는이, 그리고 참조 등을 표시할 때는 ②단계인 rcpt to 부분의 데이터를 쓰는 것이 아니라, 바로 ③단계인 데이터 영역의 from, to, cc 문자열의 데이터를 참조한다는 얘기가 되겠습니다. 정말 그러냐구요? 정말 그렇습니다. -_-)a

제가 사용할 수 있는 SMTP 서버 중 드림위즈의 서버를 이용해서 한번 어떻게 콘솔에서 메일을 보내고, 또 콘솔에서 입력한 것이 웹메일에서는 어떻게 표시되는지 확인해보겠습니다.

Telnet으로 들어간 다음, smtp.dreamwiz.com:25 포트로 접속합니다.

환영메시지가 나옵니다.

만나서 반갑다고 EHLO(Extended HELO) dreamwiz.com 인사해줍니다(…)

이제 SMTP 서버에 로그인(auth login)을 해야지요. 대부분 base64로 인코딩된 문자열만 인정해줍니다.

인증이 끝났으니 보내는 이(Mail from)를 지정합니다. 관대한 드림위즈 SMTP씨는 드림위즈 메일이 아닌 다른 메일 주소를 넣어도 일단은 받아주고, 수신측에서 Return-path 또는 Envelope-from으로 인식하는 “보내는 이(mail from)” 메일 주소를 강제로 로그인한 드림위즈 계정으로 변경해서 받습니다(Gmail도 마찬가지입니다).

이렇게 강제로 변경해서 넣는 이유는 대부분의 메일 클라이언트(아웃룩 등)의 설정에서 Mail from과 데이터 영역의 from을 연동하기 때문에(사용자는 이 부분에 대해 손을 못댑니다) 다른 메일 주소를 사용하는 사용자들에게 불편함이 있기 때문에 분리할 수 있도록 적용한 것입니다(안되는 곳이 더 많습니다).

보내는 이를 넣었으니 이제 메일 받는 이(rcpt to)를 지정해야지요. rcpt to는 여러줄을 입력할 수 있습니다(하나 입력할 때마다 서버에서 제대로 된 메일 주소인지 체크합니다).

보내는 이, 받는 이를 다 입력했으면 이제 데이터 영역을 입력할 때가 되었습니다. data를 입력해서 데이터 영역의 시작을 알립니다.

먼저 밖으로 보이는 from, to, cc를 맘대로 입력합니다. 여기 to(받는이), cc(참조), bcc(숨은참조)에 어떤 메일 주소를 넣더라도 이 필드들에 입력된 메일 주소로는 메일이 안 갑니다(앞서 말했지만 이 영역의 필드값들은 “보여지기 위한” 부분입니다).

제목을 입력합니다. 원래는 문자셋을 지정하고 인코딩된 문자열을 넣어야하는데, EUC-KR이면 최소한 국내메일에서는 문자셋없어도 제대로 보여주니까 그냥 문자열만 넣어봅니다.

본문을 입력합니다. 그냥 필드명없이 쭉 입력하면 본문으로 처리됩니다.

입력이 다 끝났으면 .(마침표)를 한번 찍어주고 엔터(CR-LF)쳐주면 메일이 바로 발송됩니다(이 설정은 메일 서버마다 다릅니다. 네이버는 CR-LF + . + CR-LF로 입력해야 발송됩니다).

방금 보낸 메일이 도착했습니다.

메일을 열어보면 위에서 기입했던 데이터 영역의 값들이 그대로 나옵니다(이미지에서 받는 이-to가 다르지 않느냐! 하실지도 모르겠습니다. 콘솔에서 widelake@msn.com 을 입력하려다가 man.com으로 오타낸건데 그게 또 다른 도메인(www10.smartname.com)이 할당되어있나보군요-_-).

드림위즈 메일로 수신했는데 받는이와 참조에는 드림위즈 메일 주소가 없는 것을 보실 수 있습니다. 또 보낸이는 empas.com으로 되어있구요. 원문을 볼까요?

Message-Id: 아랫부분은 전부 제가 텔넷접속시 입력한 값들입니다. 또 상단의 Return-path는 위에서 말씀드렸다시피 드림위즈 주소로 바뀌어있구요(예시 이미지에서는 widelake 앳 aim 닷컴으로 입력했었지요).

위의 긴 내용에서 알 수 있듯, 웹메일이나 메일 클라이언트에서 보여주는 “보내는 이”는 데이터 영역의 from을 참조합니다. 즉, 이 부분은 아무렇게나 넣을 수 있기 때문에 사칭이 가능한 것입니다.

이런 사칭 메일은 포스트 서두에서 말씀드린 것 같은 불필요한 오해를 불러일으키기 때문에 골치가 아픕니다. 막는 것이야 그렇게 어렵진 않은데 이런 메일을 보고 기겁하신 분들이 서비스 회사를 족치거든요. 위의 내용을 간략하게 간추려서 답변드리면 일단 수긍은 하시는데 왠지 모를 위화감이 남더라구요. 마치 ‘이 색히들 구라치는거 같은데…’라는 말이 귓가에 들려오는 듯 합니다. -_-;;

이 SMTP의 취약점을 보강하기 위해 여러가지 기술이 나타나고 있습니다만, 대표적인 것은 Yahoo! – CISCO의 DKIM이 있습니다. 현재 RFC 표준(RFC5585)으로 등록되어있으며, 약간 받는 쪽 서버의 부하 문제가 있긴 한데 현재로써는 발신자를 인증하기 위한 수단 중에서는 가장 신뢰도있는 기술이라 할 수 있겠습니다. DKIM 이외에도 하루속히 발신자를 정당하게 인증하는 여러가지 좋은 방안들이 실 서비스에 적용되어 서비스 운영자들이 의심을 안 받는 날이 왔으면 좋겠습니다. ㅠ_ㅠ ⓣ

12 댓글

  1. 저도 예전에 프로그램 공부할때.. 메일 발송 페이지 (게시판과 메일은 공부에 필수죠^^)
    만들면서 보내느 사람으로 장난 많이 쳤었는데요.

    청와대 도메인에. 머 말도 안되는 cia.com / usarmy.com 머 이런식으로 ㅋ

    그나저나 스팸은 정말 지겨워요~

  2. 스팸메일 막는 일 하시나보네요.
    인터넷의 청소부!
    수고하세요.

  3. 저도 드림위즈 메일쓰는데 이상해서 후덜덜; 그러다가 어떻게 이 글을 보니까 조금 안심이 되네요. 멋지십니다! >.< 감사해요~

  4. 저도 드림위즈 메일 쓰다가 자꾸 저한테 메일이 오길래 혹시나 해서 검색해봤더니 님의 글이 나오는군요…그런 이유가..음..저도 해킹 당한건 줄 알고 패스워드까지 바꿨는데 계속 오길래 찾아봤슴다…근데 해결 방법은 없는건가요? ㅠ,.ㅜ

    1. 드림위즈 메일은 작년 말부터 해당 유형의 메일을 스팸통으로 분류하도록 설정을 변경했습니다. 아예 수신을 못하게 막기는 정책적/기술적 측면에서 어려움이 있구요..

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.