GMMGive Me Money

소개글

RATP Introduction

team.GMM 2020-11-18

안녕하세요. 랜섬웨어 분석 학습 플랫폼을 사용해주셔서 감사합니다.

우리는 학습자들이 통해서 랜섬웨어를 분석하는 과정 속에서 다양한 지식을 습득할 수 있는 서비스를 제공합니다.

Q. 어떤 사람이 공부하기에 적합한가요?

정보보안을 공부하는 사람 중 랜섬웨어, 악성코드를 처음 분석하는 사람에게 적합합니다. 그리고 랜섬웨어가 동작하는 흐름을 익히기에 적합한 난이도로 진행이 됩니다.

Q. 암호화된 파일은 복구가 안되나요?

모든 파일은 복구가 가능하도록 제작되어 있습니다. 하지만 그렇다고 해도 절대로 악용하시면 안되며 무단배포도 금지합니다.

Q. 요즘은 다 Windows10 쓰는데 왜 7을 쓰시나요?

10과 7은 많은 공통점이 존재하지만 큰 차이가 하나 있습니다. 그건 바로 윈도우디펜더의 기능향상과 비중향상입니다. 윈도우10 같은 경우에는 윈도우 디펜더가 실습을 까다롭게 만들기 때문에 윈도우7환경에서 분석할 수 있도록 제공하고 있습니다.

Q. 최신에 유행하는 랜섬웨어와 비슷한 샘플을 제공하나요?

저희는 초심자를 대상으로 진행하기 때문에 최신에 배포되는 악성코드보다는 유행이 좀 지난 예전 파일들의 메커니즘을 주로 사용하였습니다. 그 이유는 역시 초심자를 대상으로 진행하기 때문이며 추후에 최신동향을 포함하는 다양한 샘플도 제공할 계획입니다.

로드맵

Road map

team.GMM 2020-11-17

로드맵

랜섬웨어 설명

실습 환경 설정

사용 도구

실습환경설정, 사용 도구, 랜섬웨어 개념, 우리 자료로 어떤부분을 배우는지에 대한 관점에

랜섬웨어(RansomWare)란?

값을 뜻하는ransom과software가 더해진 합성어로서 컴퓨터의 정보를 인질로 잡아 돈을 요구한다고 해서 붙여진 이름입니다. 랜섬웨어는 사용자의 컴퓨터 내부에서 특정 확장자를 가진 파일들을 암호화 시킵니다.

_2020-10-30__3 06 13

우리는 이러한 랜섬웨어의 흐름을 파악하고 스스로 분석할 수 있는 힘을 기를 수 있도록 도와드릴 것입니다.

Q. 랜섬웨어는 갠드크랩 사건 종료이후로 조용하지 않나요?

일반 사용자를 향한 공격은 많이 줄었을 수도 있습니다. 하지만 아직도 기업을 대상으로 한 피해는 상당히 많이 일어나고 있습니다.

보안 관련 뉴스들을 보더라도 다양한 사건들이 일어나고 있는 것을 알수 있습니다.

2020년의 가장 큰 사이버 위협은 압도적으로 랜섬웨어

현재는 기업을 대상으로 정보를 탈취하고 판매하겠다고 협박하는 유형이 증가하고 있는 추세입니다. 그래서 우리는 계속해서 발전 중인 랜섬웨어의 뿌리인 암호화의 흐름을 공부하면서 파일을 암호화 하기 위해서, 복호화를 방해하기 위해서 어떠한 동작들을 하는지 초심자의 눈으로 다가가서 볼 수 있도록 도와드릴 것입니다.

랜섬웨어의 동작 흐름

본격적인 학습에 앞서서 간단한 흐름을 파악하고 가겠습니다.

랜섬웨어는 이름에서 알수 있듯이 금전적인 목적으로 협박을 진행합니다. 그리고 이 부분이 타 악성코드에 비해 엄청난 손해를 일으키는 원인이기도 합니다. 그래서 다수의 일반 사용자들도 한동안 많은 피해를 받기도 했습니다.

그러면 어떻게 해서 피해자에게 금전적인 부분을 협박할 수 있는 근거를 얻었을까요?

_2020-10-30__3 24 24

  1. 다른 악성코드와 비슷한 방식으로 피해자들에게 파일이 유표됩니다.
  2. 피해자가 인지하지 못한채로 랜섬웨어가 실행이 됩니다.
  3. 주로 주요한 문서나 사진들을 사용못하게 데이터를 암호화 시킵니다.
  4. 랜섬웨어 배포자는 랜섬노트(랜섬웨어가 실행되고 생성되는 txt파일로 자신에게 돈을 전송하라는 내용이 적혀있다.)를 만들어서 일정 금액을 지불하면 파일을 복호화 할 수 있는 키를 주겠다고 피해자를 협박합니다.

Q. 그러면 진짜 돈을 지불해야만 파일을 복구할 수 있나요?

돈을 지불하지 않고서도 복구할 수 있도록, 복구가 안된다면 실행을 방지할 수 있도록 지금도 악성코드 분석가분들이 분주하게 일하며 해커들과 싸우고 계십니다. 그리고 현재 미국 재무부에서는 랜섬웨어 배포자에게 돈을 지불하는 것을 불법으로 제정하기도 했습니다.

랜섬웨어에 돈 내는 것이 불법으로 규정되자 보안 업계 의견 갈려

우리는 플랫폼에서 랜섬웨어의 동작을 분석하는것에서 멈추지 않고 어떻게 복호화 시킬 수 있을지도 생각할 수 있게 도와드리며 함께 복호화를 진행하는 실습도 컨텐츠에 포함시켰습니다.

실제 랜섬웨어 방어와 그에따른 변형이 이루어지는 사건들에 대해서 자세히 알고 싶다면 아래의 사이트를 참고하는 것도 좋은 방법입니다.

이제는 말할 수 있다! 안랩 vs 갠드크랩(GandCrab)

실습 환경 설명

학습에 사용될 파일은 ova 파일로 제공하고 있습니다. vmwarevirtualbox 등의 가상머신을 이용하여 파일을 열어서 사용해주시면 됩니다. 사이트에서 제공하는 학습가이드를 보면서 가상머신에서 실습을 할 수 있게 제공하고 있습니다.

ova 파일 안에는 다음과 같은 파일들이 존재합니다. ova에 들어있는 파일 : 랜섬웨어 샘플, 디버거(윈디버거? ollydbg? x86dbg?), 와이어 샤크, peview, procmon, … 등등

따로 준비해야 하는 파일 : 디컴파일러(ida 혹은 기드라) ida가 없는 분들은 NSA에서 무료로 제공하는 도구인 기드라를 사용하는 것을 권장합니다.

Ghidra

주의사항

절대로 HOST 환경에서 샘플을 실행하지 마시고 동적 분석시에는 꼭 VM 내부에서 진행하시기 바랍니다. HOST에서는 디컴파일러를 이용한 분석만을 이용하시는 것을 권장합니다.

자료실

RATP Drive

team.GMM 2020-11-16

RATP Drive

  • gmm.ova를 다운받은 후 가상머신에 임포트하여 사용합니다. attacker.egg를 다운받은 후 가상머신에 임포트하여 사용합니다.



  • 디컴파일러는 개별 준비가 필요합니다.
    무료 디컴파일 툴로는 기드라(Ghidra)가 있습니다.

GMM01

Sample01

team.GMM 2020-11-15

시나리오

신일이는 최근 가장 잘나가는 게임인 gmm을 하고싶지만 구매하기에는 돈이 아까워했다. 그래서 인터넷에 gmm 무료 설치파일을 발견하고 다운로드 받았다. "설치방법.txt"에 나온대로 "GMM1.exe"를 관리자 권한으로 실행하였다. 하지만 그 파일은 사실 랜섬웨어였고 신일이의 PC는 랜섬웨어에 감염이 되고만다. 감염 후 자신의 행동을 반성하고자 gmm 사이트에 접속하여 랜섬웨어 분석 공부를 시작하게 되었는데...

분석 순서

  1. vm에 ova(or ovf) 파일을 import한다.
  2. “basic-0” 스냅샷으로 이동한다.
  3. 전원을 키고 바탕화면에 있는 GMM1.exe를 관리자 권한으로 실행한다.
  4. 실행 후 변화를 인지하고 스냅샷 “basic-0”으로 돌아온다.
  5. 랜섬웨어인 GMM1.exe을 분석해본다.
사용툴 : Exeinfo PE, Bin Text, PEview, Process Monitor, processHacker, OllyDBG Exeinfo PE(PE파일 분석툴)을 사용하여 패킹여부 확인 및 사용언어 C++ 확인 [빌드에 사용된 프로그램 Visual studio사용 확인]

패킹여부와 컴파일 프로그램 확인

문자열 검색


패킹이 안 되있는 것을 확인 후 문자열 검색툴인 BinText 사용 문자열 검색은 C&C서버의 주소, 프로그램의 출력메세지, 윈도우 함수 명령 등을 추출가능 공격자가 의도치 않게 놓친 문자열을 보고 해당 프로그램의 취약점을 발견 가능하다. 만일 문자열이 적게 검색 되거나 의미없는 문자열만 존재한다면 패킹이나 난독화를 의심

GMM1.exe 실행후 프로세스 변화


ProcessHacker 툴을 사용하고 GMM1.exe를 실행하여 프로세스가 실시간으로 어떤 변화가 있는지 확인하고 해당 프로세스들이 SearchProtocol, SearchFilterHost, dllhost, conhost 4가지의 프로세스가 추가됨을 알수있다.
  1. SearchProtocol과 SearchFilterHost를 보아 해당 샘플은 감염PC에서 무언가를 검색하여 찾아내며,
  2. conhost(콘솔창)를 사용하여 명령어를 사용하지만 콘솔창을 숨기고 알수없는 명령어를 실행한다는것
  3. dllhost.exe 같은 경우 window에서 기본적으로 사용하는 응용프로그램 관리 프로세스지만 PC자원을 많이 소비하는 등의 이상징후가 있는 경우 악성코드를 의심해봐야한다.

이후 프로세스의 흐름을 따라가보기 위해 GMM1.exe를 실행하기전의 스냅샷으로 돌아가procmon을 실행

Procmon (프로세스 모니터 실행 화면)


실행후 Ctrl + E를 눌러 캡쳐 시작하면 무수히 많은 프로세스가 나오는것을 확인할수있음 그 상태에서 GMM1.exe를 실행하고 파일이 삭제될때까지 캡쳐후 Ctrl + E를 눌러 캡쳐중지 무수히 많은 프로세스중 우리가 필요한 프로세스만을 확인 하기 위해 Ctrl+L을 눌러 필터링 창을 열고 Process Name is GMM1.exe에 맞춰 검색한다.


프로세스 모니터 필터링


그래도 아직 많은 프로세스들이 확인되고 있기 때문에 우리가 전 단계에서 확인했던 명령프롬프트를 실행한다는 점을 고려하여 Path Contains cmd를 추가하고 더 확실하게 하기 위하여 Operation is Process Create을 추가해주면 단 3개의 프로세스를 확인 할 수있다.


프로세스 모니터 필터링


이로서 전단계에서 백드라운드 실행이 된 명령어가 특정폴더에 있는 .GMM파일을 삭제한다는 것을 확인할수 있었으며, 간단하게 Ctrl + T를 눌러 프로세스 트리를 확인하여 확인할수도있다.


프로세스 트리로 확인한 모습


다음은 샘플에서 어떤 DLL을 호출하고 어떤 함수를 사용하는지 확인하기 위해 Peview 실행해보겠다.


Peview를 사용하여 본 DLL 호출 목록


PEview로 확인한 결과 GMM1.exe는 libcrypto.dll Kernel32.dll user32.dll Advapi32.dl lVCruntime.dll api-ms-win-crt ~ .dll 등을 호출하는것을 알수있으며 각자 임포트되는 함수목록은 IMPORT Address Table 항목에 나와있다. 우리가 여기서 눈 여겨 보아야 하는 함수 목록은 lipcryto.dll이다. 해당 함수들은 랜섬웨어에서 주로 사용하는 AES, DES, RSA등의 암호화를 지원하는 Openssl의 기본암호화 루틴을 제공해준다. 해당 샘플 랜섬웨어가 외부에서 암호화키를 받아오는 방식이 아닌 내부 프로그램에 키가 존재하는것을 확인했다면 openssl을 사용한다는것을 알아낼수있다.


libcryto 사용 함수목록


그외 우리가 눈 여겨봐야하는 함수들은 다른 악성코드들에게서 많이 보이는 Kernel 32.dll 에서의 프로세스, 힙, 스레드 및 모듈의 스냅샷을 만드는데 사용 되는 CreateToolhelp32Snapshot 함수 프로세스를 종료시키는 TerminateProcess 함수 명령을 대기시키는 sleep 함수 레지스트리값 불러오기 및 읽어오는 advapi32.dll api-ms-crt-filesystem의 remove 삭제함수 등이 있다. 이제 OllyDBG를 통해 코드를 확인해보도록 한다. OllyDBG 실행 후 View의 SourceFiles를 누르면


이처럼 GMM1.exe에 사용된 세더와 소스들이 보인다. GMM1.exe는 소스코드에 대한 난독화나 암호화가 진행 되어있지 않기 때문에 쉽게 소스를 볼 수 있으며, 우리는 해당 샘플이 C 를 사용한다는 것을 PE파일 분석에서 이미 알았기 때문에 CPP파일을 열어보면 해당 샘플이 어떤 코드들로 이루어져있는지 볼 수 있다. 이후 아래부터는 C코드와 어셈블리 코드를 같이 적으면서 searchfor -> all intermodular calls를 누르면 GMM1.exe의 사용함수들을 볼수있다. 우리는 이제 PEview에서 확인했던 함수중 하나인 CreateProcess32Snapshot을 따라가보도록 하겠다. address에 나와있는 <011A29CB>를 Ctrl + G를 눌러 입력하고 따라가보면


OllyDBG에서 확인한 디컴파일 소스파일


해당 기능은 CreateToolhelp32Snapshot으로 먼저 프로세스를 스캔한다. 이후 스냅한 프로세스중 TargetProcess에 지정된 프로세스가 있다면 이후의 OpenProcess로 핸들값을 얻어온다.


해당 트리는 OpenProcess로 프로세스의 핸들값을 얻어온 이후의 흐름도를 나타낸것이다.


이후 핸들값을 얻어와 TargetProcess와 일치하는 프로세스들을 TerminateProcess로 해당 프로세스들을 종료시킨다. 다음에 알아볼 기능은 레지스트리와 관련된 DLL중 advapi32.dll과 관련된 기능을 알아볼것이다. 해당 샘플에선 특정 레지스트리 키값을 가져오는것을 확인할수있다.


Reg값 불러오기


RegOpenKeyExA 지정된 레지스트리 키 열기 Regclosekey 지정된 레지스트리 키 닫기 RegQueryValue 지정한 키의 기본값 가져오기RegOpenKeyA 확인결과 Control panel\\Internetional의 sLanguage의 키값을 비교하여 KOR와 일치하는지 확인하며 KOR와 일치하면 암호화가 실행되도록 설계되어있다. 대표적인 예로 GandCrab 랜섬웨어는 레지스트리에 러시아어가 있다면 암호화가 실행되지 않도록 되어있다. 다음으로


libcryto 사용 함수목록


암호화에 어떤 알고리즘이 사용되었으며 어떤 방식으로 암호화가 되었는지 알아보겠다. libcryto.dll은 openssl 암호화를 지원하며, 랜섬웨어에서 자주쓰이는 RSA, AES뿐만 아니라 CCM, CBC, CTR등의 여러가지 암호화를 지원해준다.


OpenSSL_add_all_ciphers () // OpenSSL 모든 암호화 알고리즘을 테이블에 추가 EVP_get_cipherbyname // 암호 이름으로 구조전달 및 구조 반환


노출된 암호화키


암호화에는 AES-128-CBC 방식을 적용하며 키값은 문자열에 적혀있듯(디버거의 문자열 검색 활용) password01234567 초기화벡터는 iv12345678901234 를 사용 한다는 것을 확인 할 수 있었다 (초기화벡터란? 첫 블록을 암호화할 때 사용되는 값을 의미하며 고정으로 지정된 IV값으로 암호화 진행시는 동일한 값만 나오기 때문에 복호화가 더 쉬워진다 ) 이제 우리는 GMM1.exe의 기능중 하나인 [일정 시간후 파일삭제]가 실행되기전에 복호화를 실행해야한다. AES암호화 방식은 양방향 암호화 방식으로 암/복호화에 동일한 키를 사용하는 암호화 방식이다. 우리는 여태까지의 절차를 밟으며, 해당 암호화에 사용되는 키값과 초기화벡터값을 알아냈다. 아래는 OpenSSL에서 제공하는 EVP함수에서 사용하는 대칭키 암호화 복호화에 대한 메뉴얼이다.


EVP Symmetric Encryption and Decryption 링크 클릭

OpenSSL 메뉴얼을 참고하여 만든 예제 소스 1

OpenSSL 메뉴얼을 참고하여 만든 예제 소스 2


해당 코드들에 특정폴더 및 특정파일 확장자 검색기능을 추가하면 복호화 기능을 구현할 수 있다.

복호화 기능 구현


  • 이 외 참조사이트

/docs/man1.0.2/man3/EVP_EncryptUpdate.html 링크 클릭


모든 Windows 10 장치에 있는 Api (모듈별 그룹화 됨) - Windows UWP applications 링크 클릭


GMM02

Sample02

team.GMM 2020-11-14

Coming Soon…

Reference

GMM02 분석 보고서(click here)

GMM03

Sample3

team.GMM 2020-11-13

Coming Soon…

Reference

GMM03 분석 보고서(click here)

vss

Volume Shadow Copy Services

team.GMM 2020-11-12

VSS 가이드


1. 볼륨 섀도 복사본 서비스


  • Volume Shadow Copy Service (VSS)

     시스템을 이전에 설정된 복원 지점으로 되돌려 복원하는 기능

  • 복원 지점이 자동으로 생성될 때

       애플리케이션 설치 시 : 설치 이전 지점 생성

      윈도우 업데이트, 자동 업데이트 설치 시 : 설치 이전 지점 생성

      시스템 복원 시 : 복원 작업 전 생성

      사용자가 수동 생성

  • 복원 시 변경되는 것

      윈도우 시스템 파일, 레지스트리, 프로그램, 스크립트, 배치 파일 및 기타 유형의       실행 파일

      문서, 전자 메일, 사진, 음악 파일과 같은 개인 파일은 변경되지 않음

  • HKLM\SYSTEM\ControlSet001\Control\BackupRestore\FilesNotToSnapshot
해당 레지스트리 키를 이용하여 섀도 복사본에서 특정파일 제외 가능

2. 시스템 복원

1) 복원 지점 확인

System > System protection > System Restore
< /pre>
  

프로그램이 설치되었을 때 자동으로 생성된 복원 지점 확인 가능
< /pre>
  

2) 새 복원 지점 추가

3) 생성한 복원 지점으로 시스템 복원

Yes를 누르면 복원이 시작되고 재부팅됨
< /pre>
  

4) 시스템 복원 완료


3. VssAdmin

  • VssAdmin : Windows 운영 체제에서 VSS 작업을 위해 제공하는 도구

1_basic-1로 이동

basic-1 으로 이동

gmm실행1

GMM1.exe 실행

감염된파일

GMM1.exe가 감염시킨 파일 확인

cmd실행

관리자 권한으로 cmd 실행

list출력

vssadmin list shadows : 현재 가지고 있는 볼륨 섀도 복사본 목록 출력

해당 섀도 복사본이 생성된 시점과 파일에 접근할 때 필요한 “Shadow Copy Volume”확인

링크걸기

해당 섀도 복사본에 대한 심볼릭 링크를 생성할 것임

mklink 명령어를 통해 C:\vsc에 링크 걸기

링크확인

C:\vsc에 링크 걸린 것 확인

12링크된VSC확인

C:\vsc 디렉터리로 이동하면 복사되어 있는 해당 시점의 C:\ 확인 가능

기존파일확인

C:\vsc\Users\gmm\Desktop\test 경로로 가서 암호화 되지 않은 상태인 기존 파일 확인

배경화면복붙

배경화면으로 다시 복사해서 복원 완료

작업 종료 후 “rmdir c:\vsc” 입력하여 심볼릭 링크 제거

ntfs

New Technology File System

team.GMM 2020-11-11

Comming Soon

mbr

Master Boot Record

team.GMM 2020-11-10

Comming Soon

// ## MBR 복구 가이드.docx 다운로드