포스팅 내용

악성코드 분석 리포트

러시아, 우크라이나 등 일부 국가를 대상으로 유포된 Bad Rabbit 랜섬웨어 주의



안녕하세요? 이스트시큐리티 시큐리티대응센터(ESRC)입니다.


Adobe Flash Player파일로 위장한 'Bad Rabbit'이라 불리는 랜섬웨어가 유포되었습니다. 최근 러시아, 우크라이나와 같은 동유럽의 일부 국가에서 감염이 확인된 상태이며 추가적으로 국내로 유입될 가능성도 있으므로 이용자들의 각별한 주의를 당부드립니다. 


hxxp://1dnscontrol.com/index.php

hxxp://1dnscontrol.com/flash_install.php

[표 1] 유포지로 알려진 사이트


'Bad Rabbit’ 랜섬웨어는 파일과 디스크를 암호화하여 감염된 사용자에게 비트코인 결제를 요구합니다. 다음은 Bad Rabbit의 전체 흐름도입니다.


[그림 1] Bad Rabbit의 전체 흐름도


Dropper - install_flash_player.exe

해당 파일은 CreateFile(), WriteFile() 함수를 이용해 %Windows% 폴더 밑에 메인 DLL 파일인 infpub.dat 파일을 생성합니다. 이후 정상 rundll32.dll 파일을 이용해 infpub.dat 파일을 실행합니다. 실행인자는 다음과 같습니다. 


c:\windows\system32\rundll32.exe %Windows%\infpub.dat #1 15


참고로 마지막 인자 15는 스케줄러에 등록되는 인자로 재부팅 시간을 15분으로 설정하며 코드 내부에서 랜덤값을 생성하는데 함께 사용됩니다.


| 샘플 정보

파일 이름

install_flash_player.exe

Hash

MD5 : fbbdc39af1139aebba4da004475e8839

SHA1 : de5c8d858e6e41da715dca1c019df0bfb92d32c0

SHA265 : 630325cac09ac3fab908f903e3b00d0dadd5fdaa0875ed8496fcbb97a558d0da

 


Main DLL - infpub.dat

최초 Dropper에서 생성된 DLL파일로 대부분의 악성코드 행위를 수행하는 메인 DLL 파일입니다. 해당 파일은 해외 유명 보안업체의 모듈처럼 위장하기 위해 유효하지 않은 디지털 서명을 포함하고 있으며 파일을 암호화하고 디스크 암호화에 필요한 파일을 생성 및 실행합니다. 또한 SMB 네트워크 취약점을 통해 추가 감염을 위한 전파를 시도합니다.

 

| 샘플 정보

파일 이름

infpub.dat

Hash

MD5 : 1D724F95C61F1055F0D02C2154BBCCD3

SHA1 : 79116FE99F2B421C52EF64097F0F39B815B20907

SHA265 : 579FD8A0385482FB4C789561A30B09F25671E86422F40EF5CCA2036B28F99648

 

 [그림 2] 유효하지 않은 디지털 서명 화면


1) 시스템 권한 설정

악성 행위에 필요한 시스템 권한을 획득하기 위해 엑세스 토큰에 특권을 부여하고 중복 실행을 방지하기 위해 호스트 컴퓨터 이름을 기반으로 뮤텍스를 생성합니다.


[그림 3] 시스템 권한 설정 코드


[그림 4] 뮤텍스 생성 코드


2) Anti-Virus 프로세스 실행 유무 체크

현재 실행 중인 프로세스를 검색하여 각 프로세스의 해시를 계산합니다. 계산된 해시는 코드 상에 이미 저장되어 있는 해시들과 비교하여 현재 실행 중인 프로세스인지 체크합니다. 하드코딩된 해시는 Dr.Web과 McAfee 제품에서 사용하는 Anti-Virus 관련 프로세스들 입니다. 


[그림 5] 프로세스 해시 비교 코드


해시

프로세스명

0x4A241C3E

dwwatcher.exe

0x923CA517h

McTray.exe

0x966D0415h

dwarkdaemon.exe

0xAA331620h

dwservice.exe

0xC8F10976h

mfevtps.exe

0xE2517A14h

dwengine.exe

0xE5A05A00h

mcshield.exe

[ 1] 하드코딩된 해시 정보


3) 디스크 암호화 관련 파일 생성 및 작업 스케줄 등록

%Windows% 폴더 밑에 디스크 암호화 관련 기능과 로컬 계정 정보를 획득하는 ‘dispci.exe’, ‘cscc.da’t, ‘[16진수 랜덤 4자리].tmp’ 파일들을 순차적으로 생성합니다.


[그림 6] %Windows% 폴더 밑에 생성된 3개의 파일들


Windows% 밑에 생성된 파일들은 다음과 같은 악성 행위를 수행합니다.


C:\Windows\7A94.tmp – 커스터마이즈된 마마카츠 툴로써 사용자 자격 증명 정보 수집 및 infpub.dat 파일과 파이프 통신

C:\Windows\dispci.exe – 디스크 암호화 제어코드를 보내는 유저모드 실행파일

C:\Windows\cscc.dat – 실제 디스크 암호화를 수행하는 커널 드라이버 파일







[그림 7] ‘drogon’, ‘rhaegal’ 작업 스케줄러 등록 화면


drogon’ 작업 스케줄은(drogon.xml 파일) 다음과 같은 명령어를 통해 특정 연산으로 계산된 시간 값 이후 재부팅을 수행합니다.


cmd.exe /c schtasks /Create /SC once /TN drogon /RU SYSTEM /TR %WinDir%\system32\shutdown.exe /r /t 0 /f /ST : 시간

 

rhaegal’ 작업 스케줄은(rhaegal.xml) 다음과 같은 명령어를 통해 재부팅 후 드롭된 ‘dispci.exe’ 프로그램을 실행합니다. 이때 랜덤 값으로 생성된 감염자 id를 매개변수로 사용합니다.


cmd.exe /c schtasks /Create /RU SYSTEM /SC ONSTART /TN rhaegal /TR %WinDir%\system32\cmd.exe /C Start \\ \%WinDir%\dispci.exe\ -id [랜덤숫자]&& exit




[그림 8] drogon’ 작업 스케줄 등록 코드 일부


[그림 9] ‘rhaegal’ 작업 스케줄 등록 코드 일부


4) 서비스 등록 및 레지스트리 등록

%Windows% 폴더 밑에 생성된 ‘cscc.dat’ 드라이버 파일은 재부팅 후 ‘dispci.exe’ 파일과 통신 할 수 있도록 ‘cscc’라는 이름으로 서비스에 등록됩니다.


[그림 10] ‘cscc’ 이름으로 서비스에 등록


또한 다음과 같은 레지스트리 키를 추가됩니다.


[그림 11] 레지스트리 키 등록 코드


5) 파일 암호화

파일 암호화를 위해 AES 128 대칭키와 RSA 2048 비대칭키 알고리즘을 이용합니다.  CryptGenRandom() 함수를 이용해 생성된 난수로 AES 128 대칭키를 만들고 이 키로 파일 암호화를 진행합니다. 


[그림 12] CryptGenRandom API를 이용한 난수 생성


아래는 위에서 생성된 난수를 이용해 AES 128 키를 생성하는 코드입니다.


[그림 13] CryptDeriveKey를 이용한 AES 128키 생성


하드코딩된 RSA 공개키를 이용해 대칭키를 암호화 하고 나면 다음과 같은 확장자를 가진 파일들을 암호화 합니다.


[그림 14] 하드코딩된 RSA 공개키


[그림 15] 암호화 대상 확장자 목록


한편 다음과 같은 폴더명 아래 존재하는 파일들은 암호화에서 제외합니다.


암호화

제외 문자열

\Windows

\Program Files

\ProgramData

\AppData

 [ 2] 암호화 제외 폴더 문자열

 

파일 암호화가 정상적으로 수행되면 파일명에 새 확장자를 추가하는 대신 파일의 맨 마지막에 ‘encrypted’라는 문자열을 추가합니다.


[ 3] 파일 암호화 전 후 비교


파일 암호화가 모두 끝나면 %Root%폴더 하위에 ‘Readme.txt’ 랜섬노트 파일이 생성됩니다. 그리고 공격자는 암호화된 파일의 복구 방법을 안내하며 비트코인 지불을 위한 웹 페이지로 방문을 유도합니다.


[그림 16] ‘Readme.txt’ 랜섬노트  



6) 네트워크 전파

infpub.dat 파일은 추가 감염을 시도하기 위해 감염 PC와 연결된 네트워크 대역폭 안에서 SMB 취약점이 존재하는 조사합니다. 다음은 SMB 프로토콜에서 사용하는 139, 445 포트를 검사하는 코드의 일부입니다.


[그림 17] 139, 445 포트 검사 코드


그리고 IPC$ 연결을 위해 미리 하드코딩된 사용자 이름과 패스워드를 무작위로 대입해 원격 인증을 시도합니다. 다음은 공격자가 사용하는 사용자 이름과 패스워드 사전 정보입니다.


사용자 이름

패스워드

Administrator, Admin, Guest, User, User1, user-1, Test, root, buh, boss, ftp, rdp, rdpuser, rdpadmin, manager, support, work, other, user, operator, backup, asus, ftpuser, ftpadmin, nas, nasuser, nasadmin, superuser, netguest, alex

Administrator, administrator, Guest, guest, User, user, Admin, adminTest, test, root, 123, 1234, 12345, 123456, 1234567, 12345678, 123456789, 1234567890, Administrator123, administrator123, Guest123, guest123, User123, user123, Admin123, admin123, Test123, test123, password, 111111, 55555, 77777, 777, qwe, qwe123, qwe321, qwer, qwert, qwerty, qwerty123, zxc, zxc123, zxc321, zxcv, uiop, 123321, 321, love, secret, sex, god

[표 4] 하드 코딩된 사용자 이름과 패스워드 사전 정보


실제 테스트 위해 감염된 PC와 동일 대역에 있는 다른 시스템에 ‘boss’ 계정을 (비밀번호:12345) 생성해두었습니다. 아래는 비밀번호가 일치했을 경우 로그인이 성공한 패킷 화면입니다. 


[그림 18] ‘boss’ 사용자 계정으로 로그인이 성공한 패킷


로그인이 성공하면 ADMIN$ 폴더 하위에 infpub.dat 파일을 생성합니다. 다음은 관련 패킷의 일부와 실제 테스트 PC ADMIN$ 폴더 하위에 infpub.dat 파일이 생성된 화면입니다.


[그림 19] infpub.dat 드롭 패킷의 일부


[그림 20] 실제 테스트 PC에 생성된 infpub.dat 파일


이후, 원격 PC에 생성된 infpub.dat 파일은 SVCCTL 프로토콜을 사용하여 서비스 등록 후 실행됩니다


[그림 21] SCManager를 이용한 서비스 등록 패킷


[그림 22] 실제 테스트 시스템에 서비스로 등록된 화면

 

이 서비스는 rundll32.exe를 이용하여 #2, 15를 매개변수로 infpub.dat를 호출합니다.


C:\Windows\System32\rundll32.exe "C:\\Windows\infpub.dat,#2 15


호출된 함수는 최종적으로 지금까지 설명한 주요 악성 기능을 수행하기 위해 infpub.dat 파일의 Export #1 함수를 호출합니다.


 [그림 23] infpub.dat 파일의 Export #2 코드 일부 화면


7) 이벤트 로그 삭제

infpub.dat 파일은 재부팅 직전에 실행된 흔적을 삭제하기 위해 “wevtutil” 유틸리티를 이용하여 응용 프로그램, 보안, Setup, 시스템 등의 이벤트를 모두 삭제합니다. 참고로 실제 악성코드가 실행되면 서비스로 실행되는 이벤트 하나가 남습니다.


[그림 24] 이벤트 로그를 삭제하는 코드 일부 화면


[그림 25] 악성코드 실행 시 이벤트에 남는 로그 화면


8) EternalRomance 코드

Main DLL 파일인 Infpub.dat의 코드 끝 부분에는 EternalBlue 취약점을 사용했던 NotPetya와는 다르게 커스터마이즈된 EternalRomance 코드가 추가되어 있습니다깃허브에 공개된 EternalRomance POC는 Windows XP부터 Windows 8까지 지원하지만 해당 코드는 Windows7 x32, x64Windows8 x32, x64비트 만을 지원합니다. 그러나 일부 코드에서는 Windows XP, Windows 2000을 지원하는 전송코드가 존재합니다. 


[그림 26] Windows 7 세션정보를 가지고 있는 일부 코드


[그림 27] Windows 8 세션정보를 가지고 있는 일부 코드


[그림 28] Windows XP, 2000 전송정보를 가지고 있는 일부 코드


EternalRomance의 실제 코드는 socket(), connect() 함수를 실행한 후 SMBv1 패킷을 조립하여 send()함수를 통해 SMB 통신의 시작인 SMB Command: Negotiate Protocol (0x72) 패킷을 보냅니다. 그러나 패킷을 조립하는 과정 중 버그로 인해 패킷이 제대로 원격지 PC까지 보내지지 않습니다. 아래는 실제 패킷을 보내는 코드의 일부입니다.


[그림 29] send() 함수 호출 직전의 SMBv1 패킷 내용


아래는 깃허브에 오픈된 EternalRomance POC를 실행했을 때 패킷을 캡쳐한 것으로 패킷이 제대로 보내지는 것을 알 수 있습니다.


[그림 30] EternalRomance POC를 실행했을 때 보내지는 패킷 일부


[랜덤숫자].tmp

해당 파일은 커스터마이즈된 마미카츠 파일로 로컬 계정 정보 획득한 후 메인 DLL파일인 infpub.dat 파일과 명명화된 파이프를(Named pipe) 열어 통신을 시도합니다.

 

| 샘플 정보

파일 이름

[랜섬숫자].tmp

Hash

MD5 : 37945c44a897aa42a66adcab68f560e0

SHA1 : 16605a4a29a101208457c47ebfde788487be788d

SHA265 : 2f8c54f9fa8e47596a3beff0031f85360e56840c77f71c6a573ace6f46412035

 

아래는 커스터마이즈된 마미카츠 파일을 실행하는 코드입니다.


[그림 31] 커스터마이즈된 미미카츠 파일을 실행하는 코드 일부


커스터마이즈된 미미카츠 파일이 실행 후 대기 상태이 있을 때 메인 DLL 파일인 infpub.dat의 코드에서는 CoCreateGuid() 함수를 통해 유일한 GUID 값을 생성 한 후 대기 중인 미미카츠 프로세스와 명명화된 파이프를 열어 통신을 시도합니다.


[그림 32] 파이프 생성 후 클라이언트로부터 받아온 데이터를 읽어 파싱하는 코드 일부 화면


dispci.exe - 디스크 암호화 모듈(유저)

해당 파일은 오픈소스로 제작된 'cscc.dat' 드라이버 파일과 DeviceIoControl() 함수를 통해 디스크 암호화를 시도합니다.


| 샘플 정보

파일 이름

dispci.exe

Hash

MD5 : b14d8faf7f0cbcfad051cefe5f39645f

SHA1 : afeee8b4acff87bc469a6f0364a81ae5d60a2add

SHA265 : 8ebc97e05c8e1073bda2efb6f4d00ad7e789260afa2c276f0c72740b838a0a93

 

1) 디스크 암호화

디스크 드라이버 파일인 'cscc.dat'이 로드되고 나면 해당 파일은 이미 정의된 제어코드를 cscc.dat 모듈에 보내 디스크를 암호화 합니다.


[그림 33] cscc.dat 모듈에 디스크 제어코드를 보내는 코드 일부 화면


2) 스케줄러 등록

디스크 암호화가 끝나면 시스템이 셧다운 될수 있도록 “vserion”이라는 이름으로 작업 스케줄러를(viserion.xml)등록합니다.


 [그림 34] “viserion” 이름으로 작업 스케줄러 등록


3) 바로가기 생성 및 파일 복호화

디스크 암호화가 완료되면 바탕화면에 "DECRYPT.LNK" 바로가기 파일이 생성되고 해당 링크 파일을 실행할 경우 암호 입력 요구를 대기합니다. 참고로 파일 복호화를 위해서는 부팅 시에 필요한 Password#1과 파일 복호화를 위한 Password#2 즉, 두 개의 패스워드가 필요합니다. 아래는 파일 복호화를 위해 두 번째 패스워드를(Password#2) 입력하는 화면입니다.


 [그림 35] 파일 복호화를 위해서 Password#2를 입력하라는 대기 문구 화면


 [그림 36] 파일 복호화 코드 일부 화면


cscc.dat – 디스크 암호화 모듈(커널)

discpi.exe 파일에서 받은 제어코드를 통해 실제 디스크 암호화를 수행합니다.


| 샘플 정보

파일 이름

cscc.dat

Hash

MD5 : b4e6d97dafd9224ed9a547d52c26ce02

SHA1 : 59cd4907a438b8300a467cee1c6fc31135757039

SHA265 : 682adcb55fe4649f7b22505a54a9dbc454b4090fc2bb84af7db5b0908f3b7806

 

다음은 디스크 암호화와 관련된 제어명령어들과 관련 코드입니다.


[그림 37] 디스크 암호화와 관련 제어코드 일부


[그림 38] 제어코드를 받아 실제 디스크를 암호화하는 코드 일부


NotPetya와의 연관성

Bad Rabbit의 메인 DLL 파일은 기존 랜섬웨어인 NotPetya와 약 56% 코드 유사성을 가집니다. 또한 감염대상 확장자 중에 65개가 NotPetya와 동일한 특징을 가지고 있습니다. 이 밖에도 파일 암호화 방식과 메인 DLL을 실행시키는 방법이 유사합니다.


[그림 39] Bad Rabbit과 NotPetya의 코드 유사도


랜섬노트

Bad Rabbit 랜섬웨어는 지난 Petya 랜섬웨어처럼 MBR 영역을 암호화하고 비트코인 결제를 요구하는 랜섬노트를 보여줍니다. 


[그림 40] 부팅 시 랜섬노트 화면


랜섬노트에서는 'caforssztxqzf2nm[.]onion' 웹 주소로 접속하도록 유도합니다. 현재 다크넷 0.05 비트코인(약 31만원)을 요구하고 있습니다.


[그림 41] Bad Rabbit 랜섬웨어 다크넷 사이트 화면




※ 관련 글

WannaCry가 사용했던 SMB취약점으로 유포중인 PETYA 랜섬웨어 최신버전 주의! ▶ 자세히 보기



결론 

최근 동유럽 일부 국가에서 퍼진 'Bad Rabbit' 랜섬웨어는 기존 랜섬웨어들처럼 파일 암호화 및 디스크를 암호화하여 감염된 사용자에게 비트코인을 요구합니다. 분석 과정 중에 인상적이었던 점은 기존에 오픈소스 형태로 알려진 미미카츠, 디스크 크립터(diskcryptor), EternalRomance 등의 코드들을 사용했다는 점입니다. 그러나 오픈 소스를 추가한 후 제작자의 테스트 부족으로 인해 대부분의 코드가 실행이 되지 않았으며 Windows XP의 경우, 강제 재부팅 후 잦은 실행 에러로 인해 디스크 암호화가 진행되지 않았습니다.


대응방안

이용자들은 컴퓨터 암호를 특수기호, 숫자 등을 포함해 최소 8자리 이상의 복잡한 암호로 설정해 주시고, 사용 중인 애플리케이션과 윈도우 업데이트를 항상 최신 상태로 유지해 주시기 바랍니다.


더불어 출처가 불분명한 파일을 다운받고 실행하지 않도록 주의해주시기 바랍니다. 또한 중요한 자료는 외장 매체에 정기적으로 백업하여 피해를 최소화해주시기 바랍니다.

현재 알약에서는 'Bad Rabbit' 랜섬웨어를 'Trojan.Ransom.BadRabbit'로 진단하고 있습니다.




  1. Defid 2017.10.25 19:48 신고  수정/삭제  댓글쓰기

    항상 밑고 사용합니다^^
    힘내세요! 응원하겠습니다!

    • 알약(Alyac) 2017.10.26 13:08 신고  수정/삭제

      응원 감사합니다 ^^ 앞으로도 쭈욱 신뢰를 드리기 위해 노력하는 이스트시큐리티가 되겠습니다. 감사합니다.

  2. 김민희 2017.10.26 07:09 신고  수정/삭제  댓글쓰기

    항상 신속하게 정보 주셔서 공부하는데 많은 도움 받고 있습니다. 감사합니다. ☺

    • 알약(Alyac) 2017.10.26 13:09 신고  수정/삭제

      도움이 되셨다니 다행이네요! 앞으로도 지켜봐주시기 바랍니다. 감사합니다.

티스토리 방명록 작성
name password homepage