꿈을꾸는 파랑새

오늘은 국민건강보험 공단 피싱 사이트 인 yhasns(.)lol 에 대해 글을 적어 보겠습니다.
일단 예전에는 윈도우 환경에서 들어오면 해당 사이트를 국민건강보험으로 넘겨지고 사파리 즉 iOS 인 애플 아이폰 등을 사용해서 접속해도 해당 피싱 사이트는 접속이 이루어집니다.
안드로이드이고 컴퓨터이고 애플 아이폰이든 접속을 하고 파일을 다운로드 할 수가 있지만, 악성코드는 안드로이드 스마트폰 사용자를 노리는 사이트입니다. 물론 해당 애플 아이폰 사용자 분들은 악성코드는 설치할 수가 없지만, 전화번호를 입력하면 다른 전화금융사기를 통해서 피해가 우려될 수도 있습니다.
예전에는 KMI 한국의학연구소로 넘겨 버렸는데 이제는 진짜 국민건강보험공단으로 날려 버립니다.
일단은 해당 사이트에 인증서는 없어서 금방 피싱(Phising) 이라는 것을 눈치를 챌 수가 있을 것입니다.
유포 사이트는 다음과 같습니다.

왼쪽 국민건강보험 피싱 사이트 오른쪽 진짜 국민건강보험 사이트
왼쪽 국민건강보험 피싱 사이트 오른쪽 진짜 국민건강보험 사이트

http://yhasns(.)lol/

기본적인 피싱 방법은 간단합니다. 먼저 해당 사이트에 접속하면 묻지도 않고 그냥 전화번호를 입력을 요구합니다.
그리고 조회를 입력하면 다음과 같이 이름, 생년월일을 입력하라고 합니다. 해당 방법은 몇 년이 지나도 똑같은 느낌이 드네요.
여기서 생년월일을 잘못 입력하면 다음과 같은 화면을 볼 수가 있는데 보면 한국어가 이상한 것을 확인할 수가 있습니다.
생년월일을 정화하게 입력하세요.
이것을 확인하기 위해서 common.js를 열어보면 됩니다.
그러면 다음과 같은 자바스크립트가 있는 것을 확인할 수가 있습니다.

국민건강보험 피싱 사이트 피싱 사이트 common.min.js 내부 모습
국민건강보험 피싱 사이트 피싱 사이트 common.min.js 내부 모습

function gourl(o,n){n?window.open(o):window.location.href=o}function form_Search(){var o=/^\d{4}$/,n=document.location.hostname,e=$("input[name='mobile_no1']").val()(+)$("input[name='mobile_no2']").val()+$("input[name='mobile_no3']").val();return o.test($("input[name='mobile_no2']").val())?o.test($("input[name='mobile_no3']")(.)val())?void $.ajax({url:"/XmsWeb/ConfirmPhoneNo",type:"POST",dataType:"json",timeout:15e3,data:{phoneNo:e,domain:n},success:function(o){localStorage.phone=e,gourl("/info.html")},error(:)function(){alert("네트워크가 비정상입니다. 네트워크를 확인하십시오.")}}):(alert("핸드폰 번호를 입력하시고 건강검진서를 확인해주세요."),void $("input[name(=)'mobile_no3']").focus()):(alert("핸드폰 번호를 입력하시고 건강검진서를 확인해주세요."),void $("input[name='mobile_no2']").focus())}function finish(){var o(=)/^\d{6}$/,n=$("input[name='name']")(.)val(),e=$("input[name='birth']").val();return n.length<2||n.length>5?(alert("실명 입력이 필요 합니다."),void $("input[name='name']").focus()):o(.)test(e)?void $.ajax({url:"/XmsWeb/Submit",type:"POST",dataType:"json"(,)timeout:15e3,data:{phoneNo:localStorage(.)phone,name:n,birth:e},success:function(o){1==o.Status?gourl("/finish.html"):alert(o.Message)}(,)error:function(){alert("네트워크가 비정상입니다. 네트워크를 확인하십시오.")}}):(alert("생년월일을 정화하게 입력하세요."),void $("input[name='birth']").focus())(})function browse(){$.ajax({url:"/XmsWeb/Confirm",type:"POST",dataType:"json"(,)timeout:15e3,data:{domain:window.location.hostname},success:function(){},error:function(){}})}function click_download(){$(.)ajax({type:"POST",url:"/XmsWeb/Download",data:{domain:window.location.hostname},success:funct(i)on(){},error:function(){}})}localStorage.phone||(localStorage.phone="010");

해당 자바스크립트를 해석하면 다음과 같습니다.
JavaScript 코드는 웹 페이지에서 양식 제출 및 상호 작용을 처리하는 데 사용
1.gourl(o, n):해당 함수는 매개변수 o 로 전달된 URL로 이동하거나 새 창에서 해당 URL을 열고 매개변수 n 이 true 이면 새 창에서 열고 false 이면 현재 창에서 열게 설정
2.form_Search():해당 함수는 양식을 검증하고 서버로 데이터를 전송하는 역할을 하며 핸드폰 번호와 관련된 입력 값을 확인하여 유효성을 검사하고 AJAX를 사용하여 서버에 데이터를 전송
3.finish():해당 함수는 이름과 생년월일을 검증하고 서버로 데이터를 전송하는 역할 입력된 이름과 생년월일을 확인하여 유효성을 검사하고 AJAX를 사용하여 서버에 데이터를 전송함
4.browse():해당 함수는 AJAX를 사용하여 현재 페이지의 도메인을 서버에 전송하는 역할
5.click_download():해당 함수는 AJAX를 사용하여 현재 페이지의 도메인을 서버에 전송하는 역할
6.localStorage.phone 설정:해당 코드는 브라우저의 로컬 스토리지를 사용하여 phone이라는 이름의 데이터를 저장 해당 데이터가 없는 경우 기본값으로 010 을 저장
해당 코드는 웹 페이지에서 사용자의 입력을 처리하고 서버와의 상호 작용을 관리하는 데 사용
그리고 웹 소스를 보면 다음과 같이 돼 있는 것을 확인할 수가 있습니다.
웹 소스는 다음과 같습니다.

국민건강보험 피싱 사이트 웹소스
국민건강보험 피싱 사이트 웹소스

<div class="search">
			<strong><label for="invc_no">핸드폰 번호를 입력하시고 건강검진서를 확인해주세요.
            </label></strong>
			<span class="intsearch">
				<input type="text" value="010" readonly="" maxlength="3"
                name="mobile_no1">-
				<input type="text" maxlength="4" name="mobile_no2">-
				<input type="text" maxlength="4" name="mobile_no3">
			</span>
			<a href="javascript:form_Search();" class="sbtn" title="조회">조회</a>
		</div>
		<div class="footer" style="cursor: pointer;" onclick="javascript:form_Search();">
			<img src="static/images/top2(.)png" width="100%">
			<img src="static/images/index_foot(.)jpg" width="100%">
			<img src="static/images/index_foot(.)png" width="100%">
			<img src="static/images/foot2(.)png" width="100%">
		</div>
	</div>
	<script type="text/javascript" src="static/js/jquery(.)js"></script>
	<script type="text/javascript" src="static/js/common.min(.)js"></script>
	<script type="text/javascript">
		$(function () {
			browse();
		});
	</script>

설명을 하면 다음과 같습니다.
해당 코드는 HTML과 JavaScript를 사용하여 만들어진 웹 페이지의 일부분이며 해당 코드 핸드폰 번호를 입력하여 건강검진서를 조회하는 기능을 제공하는 것으로 각 부분에 대한 설명입니다.
1.<div class="search"> ... </div>:건강검진서 조회를 위한 입력 폼과 조회 버튼이 포함된 부분
<label for="invc_no">... </label>: "핸드폰 번호를 입력하시고 건강검진서를 확인해주세요."라는 메시지를 나타내는 레이블
<input type="text" value="010" readonly="" maxlength="3" name="mobile_no1">-: 핸드폰 번호의 첫 번째 세 자리를 입력하는 입력 상자 초기 값은 010 이며 사용자가 수정할 수 없도록 readonly 속성이 추가되어 있습니다.
<input type="text" maxlength="4" name="mobile_no2">-:핸드폰 번호의 중간 네 자리를 입력하는 입력 상자
<input type="text" maxlength="4" name="mobile_no3">:핸드폰 번호의 마지막 네 자리를 입력하는 입력 상자
<a href="javascript:form_Search();" class="sbtn" title="조회">조회</a>:조회 버튼을 나타내는 링크
해당 버튼을 클릭하면 JavaScript 함수 form_Search() 가 호출되며, 입력한 핸드폰 번호로 건강검진서를 조회하는 동작을 수행
2.<div class="footer"> ... </div>:페이지 하단에 있는 이미지들을 포함한 부분이며 해당 부분은 화면에 이미지를 표시하고 사용자가 클릭하면 form_Search() 함수를 호출하여 건강검진서 조회를 수행
3. <script> 태그들: JavaScript 코드를 포함하고 있습니다.
$(function () { ... });:jQuery 라이브러리를 사용하여 페이지가 로드될 때 실행되는 함수
browse() 함수가 호출
해당 코드 들은 피싱 사이트 에서 핸드폰 번호를 입력받아 건강검진서를 조회하는 기능을 구현한 것입니다.

국민건강보험 피싱 사이트 개인정보 입력
국민건강보험 피싱 사이트 개인정보 입력

개인정보 전송 사이트

http://yhasns(.)lol/XmsWeb/Submit

HTTP Debugger Pro 본 국민건강 보험 피싱 사이트 개인정보 전송
HTTP Debugger Pro 본 국민건강 보험 피싱 사이트 개인정보 전송

이며 여기서 보면 개인정보들이 잘 입력이 돼 있는 것을 확인할 수가 있으며 Raw 값은 다음과 같습니다.

POST /XmsWeb/Submit HTTP/1.1
Host: yhasns(.)lol
User-Agent: Mozilla/5.0 (Linux; Android 13; SAMSUNG SM-S918N) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/22.0.3.1 Chrome/116.0.0.0 Mobile Safari/537.36
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
X-Requested-With: XMLHttpRequest
Origin: http://yhasns(.)lol
DNT: 1
Connection: keep-alive
Referer: http://yhasns(.)lol/info.html
Accept-Encoding: gzip, deflate
Content-Length: 74
phoneNo=01023456789&name=%EB%A9%B8%EA%B3%B5%ED%86%B5%EC%9D%BC&birth=570723

입니다.
여기서 이름, 생년월일을 입력하면 다음 과정인 악성코드 다운로드 사이트로 이동하고 다음과 같은 내용을 확인할 수가 있습니다.

http://yhasns(.)lol/finish.html -> http://yhasns(.)lol/download

으로 되며 다운로드 되는 악성코드는 자신이 입력한 전화번호 형식으로 된 apk 파일을 통해서 다운로드가 됩니다.
어플을 다운로드후에 설치를 누르시면 권한혀용이 뜹니다. 허용을 해주시면 어플설치할수 있습니다.
Play프로젝트에 의해 차단됨 이라는글이 나올시에는 밑에무시하고 설치를 누르시면 됩니다.
설치방법 다운로드에->설치->어플을찾아서 더블클릭 (또는 클릭) 하여 설치가 가능합니다.
*금년도 검진대상이 확인된 분은 신분증을 지참하고 검진기관에 방문하셔도 검진이 가능합니다.
검진표를 분실하거나 수령치 못한경우에는 1577-1000번이나 가까운 지사에 신청하시면 검진대상자 확인서를 발급해 드립니다.
여기서 악성코드 설치를 유도하기 위해서 안드로이드 스마트폰 보안 설정인 외부 앱 설치를 하려는 방법을 가르쳐 주고 있습니다.
여기서 악성코드는 자신이 입력한 번호가 이름인 파일을 다운로드를 진행을 합니다.

국민건강보험 피싱 사이트 악성코드 다운로드 준비 끝
국민건강보험 피싱 사이트 악성코드 다운로드 준비 끝

다운로드 되는 악성코드의 해쉬값은 다음과 같습니다.
파일명:01023456789(.)apk
사이즈:3.36 MB
CRC32:8a362df5
MD5:08681e3f16625260bc5a951f10616484
SHA-1:a868c62c36c62ca6fd0d7deefd2e399d56d5cf19
SHA-256:03cb243bffa4546c8a04f9f9ca4128d81415d9636f58e32bde54f81bfbda9ebb
2023-08-27 23:22:58 UTC 기준 바이러스토탈에서 탐지되는 보안 업체들은 다음과 같습니다.
AhnLab-V3:Trojan/Android.SMSstealer.1201862
Alibaba:TrojanSpy:Android/SmsThief.357c0861
Avast-Mobile:Android:Evo-gen [Trj]
Avira (no cloud):ANDROID/Spy.Agent.lkokk
Cynet:Malicious (score: 99)
DrWeb:Android.Siggen.Susp.3943
ESET-NOD32:A Variant Of Android/Spy.Agent.CPA
F-Secure:Malware.ANDROID/Spy.Agent.lkokk
K7GW:Spyware ( 005a1d2f1 )
Kaspersky:HEUR:Trojan-Spy.AndroidOS.SmsThief.to
McAfee:Artemis!21C62CCD8BD7
McAfee-GW-Edition:Artemis
Symantec Mobile Insight:AdLibrary:Generisk
Tencent:A.privacy.InfoStealer
ZoneAlarm by Check Point:HEUR:Trojan-Spy.AndroidOS.SmsThief.to
일단 기본적으로 신뢰할 수가 있는 보안 업체의 백신앱을 설치를 해서 사용을 하면 해당 악성코드 탐지 및 제거를 통해서 안전하게 사용을 할 수가 있으면 구글 플레이 스토어 에서도 악성코드도 있습니다. 즉 AV-TEST에서 평가가 좋은 보안 업체에서 제공을 해주는 백신 앱을 사용을 하시는 것을 추천합니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band