상세 컨텐츠

본문 제목

Trojan.Ransom.Sage 악성코드 분석 보고서

악성코드 분석 리포트

by 알약(Alyac) 2017. 7. 24. 13:27

본문


안녕하세요. 이스트시큐리티입니다. 


최근 워너크라이(WannaCry)를 비롯한 다양한 랜섬웨어들이 출현하고 있는 가운데 기존 sage2.0 랜섬웨어의 변종인 sage2.2 랜섬웨어가 지속적으로 발견되고 있습니다. sage 2.2 랜섬웨어는 sage 2.0 랜섬웨어와는 다르게 한글 안내페이지를 지원하는 특징을 가지고 있습니다. 또한 spora 랜섬웨어와 같이 오프라인 암호화를 진행하며 Cerber 랜섬웨어와 같이 감염 시 음성을 지원합니다. 


sage2.2 랜섬웨어는 스팸 메일을 통한 유입이나 웹 사이트 방문 시 노출되는 취약점을 통해 감염이 이루어졌을 것으로 추정됩니다.


이번 보고서에서는 sage2.2 랜섬웨어를 상세 분석해보고자 합니다.


악성코드 분석


※ Rj3fNWF3.exe 상세 분석


1) 자가 복제 및 자동 실행 등록


윈도우 Vista 이상의 버전에서는 UAC(User Account Control)을 통해 컴퓨터 관리자 계정에서 응용 프로그램 실행을 제한하여 보안성을 높이고 있습니다. 따라서 랜섬웨어 제작자는 이러한 실행 제한을 우회하기 위해, 현재 실행된 프로세스가 관리자 권한으로 실행되지 않았을 경우, eventwvr.exe(이벤트 뷰어 프로그램)을 통하여 권한을 상승해 실행합니다. 


[그림1] 권한 상승 코드의 일부


부팅 시 자동 실행되도록 시작프로그램 폴더에 자가 복제된 파일의 바로가기 파일을 생성합니다.


[그림 2] 자동 실행 등록


2) 감염 PC 정보 전송


무선 네트워크를 사용하고 있는 경우, 지역 정보를 수집하기 위해 감염 기기 주변 무선 네트워크들의 맥 어드레스, SSID(무선 네트워크 이름) 정보를 구글맵스로 전송합니다. 


다음은 UDP 방식으로 서버에 암호화된 데이터를 전송하는 코드입니다. 전송되는 시스템 정보에는 컴퓨터 이름, 사용자 계정 이름, 어댑터, CPU 정보, 감염 기기의 로컬 언어, 관리자 권한 실행 여부, 종료 코드, 구글맵스 지리 정보가 포함됩니다. 


[그림 3] 데이터 전송 코드


3) 파일 암호화


3-1) 감염 ID 발급 및 암호화에 사용된 키


파일 암호화에 앞서, %APPDATA% 하위에 임의의 이름을 가진 파일(*.tmp)을 드롭합니다. 생성된 파일에는 감염 PC의 식별을 위한 ID와 암호화에 사용된 키가 포함됩니다. 감염 PC의 ID 발급 시 CURVE25519 알고리즘으로 0x20 크기의 ID 값을 생성합니다. 다음은 임의의 이름을 가진 파일(*.tmp) 드롭 코드의 일부입니다. 


[그림 4] 감염 ID 발급 코드의 일부


발급된 ID는 추후 구글 맵스 전송 결과 값과 함께 Base64 로 인코딩되며, 비트코인 결제 안내를 위해 생성되는 랜섬노트 및 바탕화면에서 '감염 PC 식별 키'로 사용됩니다. 


3-2) 데이터 베이스 관련 프로세스 종료


데이터베이스와 연관된 프로세스를 탐색 및 종료합니다. 종료하는 목적은 데이터 베이스(Database) 파일에 접근하여 암호화를 원활히 하기 위함으로 추정됩니다. 다음은 종료되는 프로세스 목록입니다.


 msftesql.exe

synctime.exe 

encsvc.exe 

sqlagent.exe 

mydesktopqos.exe 

firefoxconfig.exe 

sqlbrowser.exe 

agentsvc.exe 

tbirdconfig.exe 

sqlservr.exe 

isqlplussvc.exe 

ocomm.exe 

sqlwriter.exe 

xfssvccon.exe 

mysqld.exe 

oracle.exe 

mydesktopservice.exe 

mysqld-nt.exe 

ocssd.exe 

ocautoupds.exe 

mysqld-opt.exe 

dbsnmp.exe 

agntsvc.exe 

dbeng50.exe 

 

 

sqbcoreservice.exe 

[표 1] 종료되는 프로세스 목록


3-3) 복구 기능 무력화


시스템 복구 기능을 무력화하여 암호화 이전 상태로 돌아가는 것을 방지합니다. 이를 위해 다음과 같은 명령어로 '볼륨 섀도 카피본 삭제', 'Windows 오류 복구 알림창 표시 끄기', '복구 모드 사용 안함' 기능을 수행합니다. 


[그림 5] 추가 명령어 동작


3-4) 파일 암호화


암호화 하기 이전, 제외 대상 PC 여부를 체크합니다. 키보드 입력 환경이 벨라루스, 카자흐, 우크라이나, 우즈베키스탄, 사하 공화국, 러시아, 라트비아언어로 설정되어 있다면 해당 PC는 암호화 대상에서 제외하고 위에서 언급한 감염 PC의 정보만을 전송한 뒤 종료됩니다. 


[그림 6] 키보드 로컬 언어 확인


위 국가어를 사용하지 않는 PC 의 경우, 암호화를 진행합니다. 암호화 진행을 위해 암호화 조건에 부합되는 파일들을 검색 및 리스팅을 시작합니다. 암호화 대상 확인 조건은 총 3 가지로 암호화 대상 확장자, 암호화 제외 파일, 암호화 제외 문자열이 존재합니다. 암호화 대상 확장자는 다음과 같습니다.


.wav .mp3 .m4u .m3u8 .m3u .flac .bmp .xlk .vhdx .tibs .tib .spi .spf .pvhd .pfi .pbf .pbd .paq .old .obk .npf .mrimg .gbp .gbm .ebk .cbu .c004 .c003 .c002 .c001 .c000 .bkf .bk2 .bjf .bif .bak5 .bak4 .bak3 .bak2 .bak1 .bak .backupdb .back .adi .010 .009 .008 .007 .006 .005 .004 .003 .002 .001 .xqx .xeq .xdi .xaa .wmf .wbk .wbcat .vyr .vyp .vdf .vc8 .vc7 .vc6 .vbpf .v30 .uot .uop .umv .u12 .u11 .u10 .u08 .trm .tmd .tkr .tfx .ta2 .str .stm .ssg .skg .seam .sbf .sbd .sbc .saj .rwl .rw2 .reb .ra .qxf .qwmo .quo .qpg .qmtf .qem .qdfx .qbz .qbmd .q43 .q09 .q08 .q07 .q06 .prpr .pp5 .pp4 .pls .pg .pd6 .pcif .op .oet .ocr .obi .nrg .nl2 .nd .nba .n43 .myox .mye .mx0 .ms11 .mrq .mql .mone .mnp .mne .mlc .meta .mem .mef .mds .mbsb .mac .m16 .m14 .m11 .m10 .log .lld .lhr .let .ldr .ldc .kmo .kd3 .kb7 .jsda .itf .iso .ipg .inx .int?.ini .indt .indl .idml .iban .i2b .i05 .i04 .i03 .i02 .i01 .hts .h12 .h11 .h10 .gsf .gsb .gpc .gnc .gem .fyc .fxw .fx1 .fx0 .ful .fef .fcr .fcpr .fcpa .fca .fa2 .fa1 .ets .etq .esv .esk .ert .eqb .epb .epa .ent .emd .efsl .efs .ec8 .ebq .ebd .ebc .dwf .dvd .dtau .defx .dat .dac .cur .cue .css .cso .cpw .cpbdf .cnt .cmd .ch .cgn .cfg .cfdi .cf9 .cf8 .cb .cat .btif .bpdx .bin .bd3 .bd2 .bc9 .bc8 .bat .b5i .awd .ati .arv .amj .afm .aepx .adp .acm .aci .acc .ac2 .aa ._vc .500 .4dd .3pe .3me .210 .13t .11t .10t .09t .09i .08i .07i .07g .00c .xhtm .wmv .wma .vob .rm .png .pdf .mpg .mpeg .mpe .mpa .mp4 .mp2 .mov .mkv .mhtm .m4v .m4a .m .jpg .jpeg .jp2 .html .gif .flv .djvu .djv .avi .asf .aac .3gp .3g2 .264 .wtv .jtv .iva .eye .dvr .camrec .fjp .vmxf .vmx .vmsd .vmdk .vhd .vdi .vbox .qed .qcow2qcow .hdd .zipx .zip .tgz .tar .s7z .rz .rar .lz .gz .cab .bz2 .arj .arc .ace .7z .wdseml .tbp .tbk .tbi .tbb .tab .slt .shlb .pst .p7z .p7s .ost .oab .msg .msf .msb .mozeml .mim .mflmbox .mar .mab .ldif .ldi .flx .eml .email .ebi .abd .xml .xlw .xltx .xltm .xlt .xlsx .xlsm .xlsb .xls .xlr .xlm .xll .xlc .xlam .xla .wps .wpd .wks .wk4 .wk3 .wk1 .wb2 .vcf .txt .text .sxw .sxm .sxi .sxd .sxc .stw .sti .std .stc .slk .sldx .sldm .shw .rtf .rss .pptx .pptm .pptf .ppt .ppsx .ppsm .pps .ppam .potx .potm .pot .per .ott .ots .otp .otg .odt .ods .odp .odm .odg .odc .mws .hwp .gfi .ess .eps .efx .dotx .dotm .dot .docx .docm .docb .doc .dif .csv .cntk .cht .cal .123 .vbs .vb .rb .py .pl .php .pas .lua .jsp .json .js .java .jar .hpp .h .fla .cs .cpp .class .cd .c .asx .asp .asm .as3 .as .yuv .xpm .xcf .x3f .wpg .wi .vsd .ttf .tpl .tiff .tif .tga .swf .svg .srf .sr2 .slp .set .ses .sct .sch .s12 .rpf .rif .raw .raf .r3d .pxa .pvc .ptx .psp .psd .ps .prn .prf .prel .ppj .ppf .por .pns .pmd .plt .plb .pic .pfb .pdd .pcx .pct .pcd .pat .p7m .orf .npc .nef .nap .mml .mmb .mid .met .mda .md .max .m15 .m12 .lin .ldf .lcd .lay6 .lay .kdc .jsd .jng .ipe .indd .imp .img .iff .ico .fpx .fon .fmv .ens .emp .dxf .dwg .dtl .dtd .dsf .dsb .ds4 .drw .dng .dip .dds .dcr .dch .d07 .csl .cpx .cpt .cmx .clk .cgm .cdx .cdt .cdr .brd .bay .asc .ai .aet .aep .aaf .3ds .3dm.$ac .zka .zix .zdb .wac .vnd .vmb .usa .txf .tt20 .tt19 .tt18 .tt17 .tt16 .tt15 .tt14 .tt13 .tt12 .tt11 .tt10 .trn .tom .tlg .tdr .tb2 .tax20 .tax2 .tax19 .tax18 .tax17 .tax16 .tax15 .tax14 .tax13 .tax12 .tax11 .tax10 .tax1 .tax0 .tax .ta9 .ta8 .ta6 .ta5 .ta4 .ta1 .t99 .t19 .t18 .t17 .t16 .t15 .t14 .t13 .t12 .t11 .t10 .t09 .t08 .t07 .t06 .t05 .t04 .t03 .t02 .t01 .t00 .sic .sdy .scd .sba .say .saf .rtp .resx .rec .rdy .rda .rcs .qwc .qw5 .quic .qtx .qst .qss .qsm .qsd .qpi .qph .qpd .qpb .qob .qnx .qmt .qml .qme .qix .qif .qfx .qfi .qel .qdt .qdf .qch .qby .qbx .qbw .qbr .qbp .qbo .qbmb .qbm .qbk .qbi .qbb .qba .qb2020 .qb2019 .qb2018 .qb2017 .qb2016 .qb2015 .qb2014 .qb2013 .qb2012 .qb2011 .qb2010 .qb1 .q98 .q01 .q00 .ptk .ptdb .ptb .pr5 .pr4 .pr3 .pr2 .pr1 .pr0 .pma .pfd .p08 .omf .ofx .ofc .nv2 .nv .mwi .mny .mn9 .mn8 .mn7 .mn6 .mn5 .mn4 .mn3 .mn2 .mn1 .mmw .m90 .m80 .m70 .m60 .m50 .m40 .m30 .m20 .lmr .lid .lgb .kmy .inv .intu .iif .hsr .hif .hbk .gto .fxr .fp9 .fp8 .fp7 .fp6 .fp5 .fp4 .fp3 .fp2 .fim .f91 .f90 .f81 .f80 .f71 .f70 .f61 .f60 .f51 .f50 .f41 .f40 .f31 .f30 .f21 .f20 .exp .dxi .dgc .des .ddd .cus .coa .chg .cfp .cdf .brw .bpw .bpf .bgt .aif .acr .ach .ab4 .2020 .2019 .2018 .2017 .2016 .2015 .2014 .2013 .2012 .2011 .2010 .1pe .1pa.#vc .nni .ml9 .ml2 .ffd .sqli .sql2 .sql1 .sql .sdf .sdb .pdb .odb .myi .myd .mlb .mdf .mdb .indb .ibd .gdb .frm .dbs .dbf .db3 .db .accdb .pfx .pem .p7c .p7b .p12 .lic .key .gpg .der .csr .crt .aes 

[표 2] 암호화 대상 확장자 목록


다음은 암호화에서 제외되는 파일 목록입니다. 


thums.db 

desktop.ini

ntuser.dat

ntuser.ini

ntuser.dat.log

autoexec.bat

boot.ini

index.dat

BOOTSECT.BAK

[표 3] 암호화 제외 파일


다음은 암호화 제외 대상 문자열 목록입니다.


tmp              

Temp

winnt

Application Data

AppData

ProgramData

Program Files (x86)

Program Files

$Recycle.Bin

$RECYCLE.BIN

Windows.old

$WINDOWS.~BT

DRIVER

DRIVERS

System Volume Information

Boot

Windows

WinSxS

DriverStore

League of Legends

steamapps

cache2

httpcache

GAC_MSIL

GAC_32

GOG Games

Games

My Games

Cookies

History.IE5

Content.IE5

node_modules

All Users

AppData

ApplicationData

nvidia

intel

Microsoft

System32

Sample Music

Sample Pictures

Sample Videos

Sample Media

Templates


[표 4] 암호화 제외 문자열


위와 같은 파일과 문자열이 존재할 경우, 암호화를 진행하지 않습니다. 이는 시스템 동작에 필요한 폴더 및 암호화 진행 간 불필요한 폴더를 제외하여 시스템 오류 방지와 암호화 속도를 높이기 위함으로 보입니다. 


리스팅된 파일들은 스트림 암호화 방법 중 하나인 ChaCha20 알고리즘을 통해 최대 파일의 오프셋 0x20000 영역까지 암호화합니다. 다음은 암호화 코드의 일부입니다. 


[그림 7] 암호화 코드 일부


암호화된 파일은 확장자가 'sage'로 변경되며 암호화된 파일내부에는 시그니쳐, 감염 PC 발급 ID, 파일 암호화에 사용된 키, 원본파일크기, 암호화 option 이 담겨있습니다. 암호화 진행 시 파일 원본크기를 두 번 저장하는 특징이 있습니다. 다음은 암호화 파일의 구조를 나타낸 것입니다. 


[그림 8] 암호화 파일 포맷


3-5) 결제 안내


Sage 랜섬웨어에 감염된 사실과 결제를 안내하기 위해 암호화된 파일의 경로와 공용 및 사용자 계정의 바탕화면, 문서 폴더 경로에 랜섬노트 파일을 생성과 vbs 를 통한 음성안내를 수행합니다. 다음은 음성안내 vbs 코드의 일부입니다. 


[그림 9] 음성안내 스크립트


다음은 랜섬노트파일을 드롭하는 코드입니다.


[그림 10] 랜섬노트 드롭 일부 코드


또한 바탕화면을 임시 폴더(%Temp%)에 생성된 결제 안내 그림파일인 '[랜덤파일명].bmp' 파일로 변경합니다.


[그림 11] 바탕화면 변경 코드의 일부


Sage 랜섬웨어는 타 랜섬웨어와는 다른 특이점이 있습니다. 이는 레지스트리에 아이콘을 등록하여 'sage' 및 'hta' 확장자의 아이콘을 각각 열쇠 및 자물쇠로 변경 및 새로고침합니다. 이는 감염 사실을 알리기 위한 것으로 보입니다. 


[그림 12] 아이콘 설정 코드


다음은 변경되었을 때 아이콘입니다.


[그림 13] 일부 확장자 암호화 확인


모든 암호화가 진행되고 바탕화면에 생성된 '!HELP_SOS.hta' 랜섬노트 파일을 실행하여 암호화 사실과 복호화를 위한 결제방법을 안내합니다. 


[그림 14] 파일 복구 지침 방법 안내


4) 자가 삭제


모든 암호화가 진행된 이후 자가 복제한 파일, 시작 프로그램의 .Ink 파일을 삭제합니다. 다음은 자가 삭제 코드의 일부입니다. 


[그림 15] 자가 삭제 코드


결론


이번에 다룬 sage2.2 악성코드는 사용자의 중요파일을 암호화 시킨 후 복구가 불가능하게 하며, 복구를 원할 시 복호화 비용으로 비트코인 결제를 요구하는 sage2.2 랜섬웨어입니다. sage2.0 과는 다르게 sage2.2 에서는 한국어로 번역된 복호화 안내를 진행함으로써 국내 사용자들의 피해가 더 증가할 것으로 보입니다. 


또한 spora 랜섬웨어처럼 암호화에 필요한 key 를 주고받는 C&C 서버가 존재하지 않습니다. 즉, 오프라인에서도 감염될 위험성이 큰 만큼 폐쇄망을 사용하는 기업들의 대비가 필요합니다.


따라서 지속적으로 변종이 등장하고 있는 만큼 사용자는 주기적으로 중요 파일을 백업하여야 하며, 패치 누락으로 인한 취약점이 발생하지 않도록 OS 와 소프트웨어는 최신 버전의 업데이트를 유지해야 합니다. 메일로 첨부되는 파일에 대해서는 실행 시 주의해야 하고 백신을 최신 업데이트 상태로 유지하며 주기적인 검사를 실시하여야 합니다. 


감사합니다. 






관련글 더보기

댓글 영역