대신증권 온라인 주식거래 서비스인 "크레온"을 사칭하는 피싱사이트가 발견되어 내용을 간단하게 정리해봤습니다.

피싱사이트는 어떻게 생겼나? 2% 부족한데?


크레온을 사칭한 피싱사이트 크라이 트레이딩 닷컴!

피싱사이트 제작자는 정상 크레온 사이트의 회사 로고와 동일한 아이콘과 명칭을 가져다가 사용한 것으로 보인다. 저 사이트를 처음 봤을 때 "크레온 서비스를 사용하는 사용자들을 대상으로 한 피싱사이트겠지?"라는 생각을 했다. 하지만 보통 주식거래를 하기 위해서는 공인인증서 로그인이 필수적이다. 수려한 웹 디자인에 속을 뻔했지만 여긴 한국이기 때문에 공인인증서를 피해 갈 수 있는 금융회사의 PC용 웹사이트는 없다.

그럼 뭐하는 곳이야?


긴가민가한 상태에서 회원가입 버튼을 눌러봤더니 뭐하는 곳인지 느낌이 왔다. 금융회사를 사칭했으니까 계좌번호 OK, 휴대폰 번호 OK, 추천인 코드는??? 어디서 많이 본 가입 양식이라고 느껴졌는데 바로 불법 도박사이트(사설토토) 가입 양식이었다.

추천 직원도 아니고 추천인 CODE는 뭐냐 ...

그래서 더 분석할 것도 없고 WOHIS로 마무리.

whois 결과 13일 밖에 안된 도메인이네

도박은 패가망신의 지름길이니 도박하지 마세요! 🥺

IoC (Indicator of compromise)


  • 사설토토 도메인, IP : cry1-trading[.]com, 104.27.149.61(미국, AS13335)
,

이제부터 너는 사람을 낚는 어부가 될 것이다.

피싱은 항상 이슈를 따라다닙니다. 이번에 발견된 피싱은 코로나 이슈를 따라 일본 정부의 정책으로 만들어진 지원 사업을 빙자해 피싱을 시도했습니다. 일본 내 이슈를 왜 분석을 했는지 궁금하실 텐데요. 그 이유는 피싱사이트가 한국 IP를 사용했기 때문입니다. 이에 관련된 내용을 간단하게 정리해 봤습니다.

어떻게 발견하였나?


2020년 10월 15일 일본 총무성(우리나라의 행안부) 공식 트위터에서 "총무성을 사칭하는 특별 지원금 사이트 개설과 관련된 내용을 담은 피싱이메일을 보낸 적이 없으니 주의하라"라는 트윗이 올라왔다.

총무성 공식 트위터에 올라온 피싱주의 트윗

 

트윗에 첨부된 이미지의 문구 번역

피싱 관련 주요 내용


총무성 사칭 피싱 이메일 내용은 다음 이미지와 같고, 내용은 "총무성에서 2차 특별 지원금 사이트를 개설했으니 링크에 접속해서 신청" 하라는 내용을 담고 있다.

피싱이메일 본문 내용

해당 피싱 이메일에 포함된 악성 링크의 도메인과 연결된 IP주소가 한국것으로 확인되며, 당시 시점에 접속했을 때 화면 캡처 등을 여기(https://urlscan.io/ip/14.63.172.200)에서 확인할 수 있다.

피싱사이트 접속화면

일본 총무성에서는 실제 지난 5월부터 특별 지원금 관련 사업을 진행하며 웹사이트(https://kyufukin.soumu.go.jp)를 운영중에 있으며, 1인당 10만 엔의 특별 지원금을 지급했는데 최근에 종료된 것으로 보인다.

총무성이 개설 운영중인 특별 지원금 정상사이트

두 사이트의 디자인은 유사하며, 정상사이트의 많은 리소스를 피싱사이트에서 가져다 쓴 것으로 보인다. 사람을 속이는 피싱에 있어 모방은 매우 중요하기 때문에 공격자가 자체적으로 디자인할 이유는 없다. 그리고 웹사이트에서 사용하는 CSS 등 디자인에 필요한 요소들은 서버사이드가 아니다 보니 숨길 수 없기 때문에 어쩔 수 없는 부분이다.

피싱 사이트 더 파보기


어쨋든 한국 IP를 사용하고 있는 피싱사이트를 더 살펴보면 공격 대상 국가는 일본이지만, 정상 사이트를 살펴봤을 때 등록된 외국인도 10만 엔을 지원받을 수 있는 것으로 확인된다. 따라서 일본인뿐만 아니라 일본 내에 거주하고 있는 등록된 외국인(한국인)도 피싱의 피해자가 될 수 있다.

Whois 서비스로 해당 IP를 확인해 봤을 때 KT에서 관리하는 한국 IP로 확인되며, 연결된 웹사이트가 23개임을 볼 수 있다. (10월 15일 기준으로 22개였는데, 10월 16일 기준으로 1개 늘어났다.)

피싱사이트 IP에 연결된 23개의 연결된 사이트

15일 기준으로 22개의 연결된 사이트는 다음과 같다.

account-rakuten-co-jp.icu
account-rakuten-co-jp.xyz
account-rakuten.top
account-rakuten.xyz
mon-check.xyz
rakuten-account.best
rakuten-account.cyou
rakuten-account.icu
rakuten-account.top
rakuten-account.world
rakuten-co-jp-account.best
rakuten-co-jp-account.cloud
rakuten-co-jp-account.club
rakuten-co-jp-account.cyou
rakuten-co-jp-account.top
rakuten-co-jp-account.xyz
rakuten-co-jp.live
rakuten-co-jp.men
rakuten-co-jp.trade
rakuten-co-jp.world
rakuten-verify.cyou
rakuten-verify.xyz

대부분의 도메인에서 "rakuten" 이 확인되는데, 일본에 "rakuten"이라는 유명 쇼핑몰 브랜드가 존재하는것을 확인했다. 다만, 라쿠텐과 특별 지원금과의 관계는 정확히 모르겠고, 라쿠텐이라는 회사도 OO페이 같은 지급결제 서비스가 존재하기 때문에 지원금 충전 목적의 계정 탈취 같은 시나리오가 있지 않을까 추정해본다.

아무튼 피싱사이트에서 지원금 신청하기를 진행하게 되면 개인정보를 입력하는 페이지로 이동되며, 한자이름, 일본어 이름, 국적, 생년월일, 성별, 주소, 마이넘버(우리나라의 주민등록번호), 여권번호 등 다양한 개인정보를 입력하게끔 구성되어 있다. 당연히 이런 정보를 입력하고 제출하게 되면 입력된 정보는 유출되게 되고 2차 피해를 당하게 될 것이다.

개인정보 입력을 받는 피싱페이지

결론


피싱은 사회적 이슈를 이용한다는 점과 주변 국가로 전파되는 특징이 있는데, 코로나 지원금은 이미 우리나라에서도 국가 정책으로 진행되었던 사업이다. 이런 유사한 피싱이 발생할 가능성은 충분히 있어 보인다. 그리고 국내 IP대역에서 타국을 대상으로 삼는 피싱사이트를 신속하게 발본색원해야 우리도 역으로 이런 비슷한 경우가 발생했을 때 적절한 조치를 요청할 수 있지 않을까 생각하며 이번 포스팅을 마무리한다.

IoC (Indicator of compromise)


  • Domain
    • account-rakuten-co-jp.icu
    • account-rakuten-co-jp.icu
    • account-rakuten-co-jp.xyz
    • account-rakuten.top
    • account-rakuten.xyz
    • mon-check.xyz
    • rakuten-account.best
    • rakuten-account.cyou
    • rakuten-account.icu
    • rakuten-account.top
    • rakuten-account.world
    • rakuten-co-jp-account.best
    • rakuten-co-jp-account.cloud
    • rakuten-co-jp-account.club
    • rakuten-co-jp-account.cyou
    • rakuten-co-jp-account.top
    • rakuten-co-jp-account.xyz
    • rakuten-co-jp.live
    • rakuten-co-jp.men
    • rakuten-co-jp.trade
    • rakuten-co-jp.world
    • rakuten-verify.cyou
    • rakuten-verify.xyz
  • IP
    • 14.63.172.200(한국)

 

,

해외에서는 Sextortion이라는 용어로 알려져 있습니다. 국내에서는 몸캠 사기, 몸캠 피싱과 같은 용어로 불려지고 있는데 엄밀히 따지자면 Sextortion은 성관련 협박 범죄를 총칭하는 의미가 될 수 있기 때문에 몸캠 피싱이 Sextortion 범죄의 여러 종류 중 하나라고 볼 수 있겠습니다. 몸캠 피싱의 주된 피해자는 남성이며 생식기가 대뇌의 컨트롤을 벗어난 경우에 주로 피해가 발생하게 됩니다. 주소록에 삭제하지 않은 전 여자 친구에게까지 본인의 나체를 영상으로 공유하고 싶은 게 아니라면, 모르는 이성과의 은밀한 데이트는 오프라인에서 만나 안전한 장소에서 합의하에 하시길 바랍니다. 이에 관련된 내용을 정리해 봤습니다.

 

몸캠 피싱 앱은 어떻게 생겼나?


몸캠 피싱 앱은 위와 같은 아이콘과 함께 "요가영상", "갤러리", "Support", "동영상", "상상톡", "비밀채팅", "야밤톡" 등 다양한 이름을 가지고 있다.

 

악성 앱 (com.android.mobilephone)


  • 몸캠 피싱에 사용되는 악성 앱이 요구하는 권한
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

  • 실행하면 보이는 화면

클랜 앱같은 소리 ...

악성 앱은 최초 실행 시 필요 권한을 사용자에게 요청하도록 팝업을 띄우게 되며 허용하는 순간 기기에 저장된 주요 정보가 C&C 서버로 유출된다. 여기서 말하는 주요 정보는 "전화번호, IMEI, 기기 모델명, 주소록, 전화 송수신 내역, SMS 송수신 내역, 저장된 사진과 동영상" 등이다. 즉, 감염되는 순간 매우 개인적인 정보들이 유출되는데 범죄자 입장에선 고마운 일이고, 피해자 입장에선 돌이킬 수 없는 결과를 낳게 된다.

 

C&C 서버 (222.239.248[.]195, KR, AS9318)


C&C 서버는 이렇게 생겼는데 한글이 보이네?

C&C 서버는 이렇게 생겼다. 아이디와 비밀번호를 입력하고 접속하게 되면 아마도 감염된 기기들이 리스트업 되어 있고, 감염된 기기에서 업로드된 정보들을 볼 수 있는 메뉴로 구성되어 있을 것이다. C&C 서버의 IP주소는 SKB가 관리하는 국내 대역이라는 건 불편한 진실이다.

 

결론


C&C 서버를 국내 대역을 쓰는만큼 수사가 시작되면 증거물 압수에는 문제가 없을 듯한데, 한 가지 이상한 점은 C&C 서버의 IP주소가 호스팅 업체 대역이 아니라 ISP 대역이라는 점이다. 정상적인 시스템을 해킹해서 C&C로 기생하고 있는 것인지 간 큰 공격자가 집에서 C&C를 돌리고 있는 건지는 모르겠다. 블로그에서 공개할 수 없는 재밌는 내용이 몇 개 있는데, 이 내용들은 따로 정리해서 비공개 모임에서 다룰 예정이다.

 

IoC (Indicator of compromise)


  • C&C 서버
    • http://222.239.248[.]195/erf/Home/
  • 분석에 사용된 샘플
    • (sha256) 0fad128f4aa25df09b5981c6949cb72a0d178b0d36e3a0a26dee45215e5d90bc
,

대한민국 법무부를 사칭하는 악성 앱이 발견되었는데, 악성 앱 내부에 또 다른 악성 앱이 숨겨져 있는 구조가 확인되었습니다. 이에 관련된 내용들을 정리해봤습니다.

악성 앱 안의 악성 앱


com.helloworld.mytest 안에 com.emersonclimate.aebulletin

com.helloworld.mytest 앱을 열어서 Assets 경로를 들여다보면 com.emersonclimate.aebulletin라는 앱이 숨겨져 있는 것을 확인할 수 있다. PE 악성코드에서도 실행파일의 리소스 영역에 악의적인 코드를 추가로 숨겨두는 경우가 종종 있는 것처럼 이 경우도 비슷한 경우라고 판단된다. 하지만 PE 악성코드처럼 리소스 영역으로 쉽게 분기하는 형태가 아니라 Assets 경로 안에 숨겨진 앱을 인스톨하는 형태기 때문에 관련된 코드들을 봤을 때 com.helloworld.mytest는 "악성 앱 인스톨러"라고 불러야겠다. 

com.helloworld.mytest 의 AndroidManifest.xml 중 일부
인스톨과 관련된 코드 중 일부

 

인스톨러 (com.helloworld.mytest)


인스톨러는 스팸전화와 관련된 앱들이 설치되었는지 확인하고 설치되어 있을 경우 사용자에게 악성 앱으로 소개하며 삭제를 유도한다.

this.setContentView(0x7F09001F);  // layout:activity_web
this.mPkgArray = new String[]{"com.ktcs.whowho", "gogolook.callgogolook2", "com.andr.evine.who", "com.whosthat.callerid", "kr.co.thecall", "com.whox2.lguplus", "com.lguplus.blocksmishing", "tpkorea.com.moim"};
this.mWebView = (WebView)this.findViewById(0x7F0700D4);  // id:webview
WebSettings v11_1 = this.mWebView.getSettings();
v11_1.setJavaScriptEnabled(true);
v11_1.setDomStorageEnabled(true);
this.mWebView.setWebViewClient(new e(this, null));
this.mWebView.loadUrl("file:///android_asset/web/" + this.mType + ".html");
this.mWebView.setBackgroundColor(0);
int v11_2 = this.mType;
if(v11_2 == 2) {
    this.mHandler.postDelayed(this.mRunnable, 666L);
}
else if(v11_2 == 3) {
    this.addedReceiver();
    c.b(this.mContext, "K_INIT_SCAN_DONE", "ok");
}
else if(v11_2 == 4) {
    try {
        c.a(this.mContext);
        this.startActivity(new Intent("android.intent.action.VIEW", Uri.parse("openqjaanqnauth://hello")));
    }
    catch(Exception unused_ex) {
    }
}

정상 앱들을 보고 악성 앱이라고 하지만 법무부를 사칭하기 때문에 사용자들은 충분히 속을 수 있다.

법무부를 사칭하는 악성 앱이 정상 앱을 삭제하라네 ... ?

만약 스팸전화와 관련된 앱들이 하나도 없다면 탐지된 스파이앱이 없다고 친절하게 알려준다.

스파이앱이 스파이앱이 없다고하면 ...

 

악성 앱 (com.emersonclimate.aebulletin)


  • 설치되는 악성 앱이 요구하는 권한
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.BOOT_COMPLETED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

 

  • 악성 앱 파일의 내부

인스톨러를 통해 설치되는 악성 앱의 내부

악성 앱 파일 내부를 보면 secret-classesN.dex 파일들이 존재하는데 이 파일에 실제 악의적인 행위를 하는 코드들이 들어 있다. 하지만 중국 개발자가 만든 프로텍터로 암호화 되어있기 때문에 복호화하지 않으면 정적 분석은 불가능하다. 물론 키값을 알고 있으면 복호화해서 정적 분석을 할 수 있는데, 이번 경우에는 개발자의 실수(?)로 인해 암호화된 dex 파일을 복호화하는 루틴과 관련된 키 값이 존재하지 않아 암호화된 dex 파일을 복호화할 수 없었다.

 

결론


2020년 9월 2일에 수집된 이 앱은 안타깝게도 정상적으로 동작하지 않는다. 개발자의 실수인지 의도인지 모르겠지만 인스톨러가 내부에 가지고 있는 악성 앱을 인스톨 조차 하지 못하는 문제가 있고, 숨겨진 악성 앱도 강제로 추출해서 확인해본 결과 앱 구성상에 문제가 있어 인스톨러가 악성 앱을 정상 설치 했더라도 동작하지 못했을 것이다. 공격자의 실수로 좋은 힌트를 얻었으니 이제 앞으로 벌어질 공격에 대비만 하면 되겠다.

 

IoC (Indicator of compromise)


  • 피싱 사이트
    • http://nimabi7.gnway[.]cc/seoul/kics/login.html
  • 앱 설치 후 등록되는 아이콘

이런 앱이 실제로 있나?

,