라이브러리 파일 이용 국내 기업 APT 공격

최근 국내 기업들을 대상으로 지속적인 타깃 공격이 발생하였다. 기업의 침해 시스템에서 수집된 악성 파일 중 상당수는 동적 라이브러리(DLL) 파일이었다. 그러나 이번 공격에 사용된 파일은 일반적인 DLL 파일과는 달랐다. 수집된 파일은 정상 라이브러리가 다양한 방식으로 악의적으로 변조된 파일이었다.

어떤 경로로 시스템에 악성 파일이 생겼는지, 최초 공격 유입 경로는 무엇이었는지는 알려지지 않았다. 또한 단독 실행이 불가능한 라이브러리 특성상 이를 실행하는 트리거 행위나 추가 파일 정보도 확인되지 않았다. 그러나 현재까지 수집된 파일만으로도 이번 공격의 명확한 특징이 있다.

  • 정상 라이브러리(DLL) 파일의 Export 정보를 변조(추가, 교체, 변경)한 악성 파일
  • 악성 파일을 실행하기 위해 유효한 인자나 데이터 파일 필요
  • 인자나 데이터 파일을 통해 기능의 모듈화 및 기능 교체 가능

라이브러리 파일 이용 공격 특징

정상 라이브러리 파일에 Export 함수를 새로 추가하거나 함수 형식을 교체, 또는 기존 함수의 코드를 변경하는 방식으로 악성 파일을 제작하였다. 정상적인 코드가 대부분이기 때문에 유심히 보지 않으면 정상 파일로 오판할 가능성이 높다.

악성 파일이 실행되기 위해서는 유효한 인자나 데이터 파일이 필요하다. 즉, 단독 파일만으로는 파악할 수 있는 기능에 한계가 있다. 자동화된 분석 장비에서도 유의미한 실행 결과가 나오지 않는다.

인자나 데이터 파일을 이용하여 기능을 파편화(모듈화)하였다. 어떤 정보가 입력되는지에 따라 메모리에서 실행되는 코드나 C&C 주소 등이 달라질 수 있다. 시스템이 장악된 상태라면 공격자가 기능을 실시간으로 계속 교체할 수 있다.

라이브러리 변조 및 동작 방식에 따른 악성 파일 유형

기업 침해 시스템에서 수집된 악성 라이브러리 파일은 변조 및 동작 방식에 따라 4가지 유형으로 분류 가능하다. [표 1]은 공격자가 변조했을 것으로 추정되는 정상 라이브러리 파일명과 악성 라이브러리 파일의 수집 당시 파일명, 그리고 PE 파일 포맷 상 ‘Export Directory’에 명시된 DLL 이름을 유형별로 나열한 것이다. 파일의 기능만 보았을 때는 유형 간 직접적인 연관성은 없다.

수집된 악성 라이브러리 파일은 정상 원본 라이브러리 파일을 변조한 형태이지만 파일명은 다르다. 만약 파일명이 동일했다면 공격자가 라이브러리 파일을 교체하는 DLL 하이재킹(Hijacking) 방식으로 악성코드를 실행했을 가능성이 있다. 그러나 공격의 최초 유입 경로를 포함한 부가 정보가 확인되지 않았기 때문에 파일명이 변경된 것인지, 단순히 정상 라이브러리 파일을 변조해 위장한 것인지는 알 수 없다. 즉, 어떻게 악성 라이브러리 파일을 실행했는지는 현재 확인되지 않는다.

수집된 악성 라이브러리 파일명은 ‘Export Directory’ 구조체에 명시된 DLL 이름과도 다르다. 그러나 ‘Export Directory’ 구조체의 DLL 이름은 라이브러리가 로드될 때 영향을 주지 않는 영역이기 때문에 큰 의미는 없다. 다만 공격자가 정상 라이브러리 파일을 변조하는 과정에서 이를 수정했을 것으로 예상된다.

유형정상 DLL 파일명악성 DLL 파일명악성 DLL 파일의 Export DLL 이름
AlibGLESv2.dlllibGLESv2.dll
B-1libxml2.dllpchsvc.dlllibxml2.dll
B-2알 수 없음srsvc.dllaudiosrv.dll
CNppExport.dllwmicr.dllsvcloader.dll
Ddokan1.dlldokan1.dll
Ddokan1.dlluso.datdokan1.dll
Ddokan1.dllzlib1.cabdokan1.dll
공격에 이용된 악성 라이브러리 파일 유형 분류

[유형 A] 악성 Export 함수 추가, 인자 필요

정상 libGLESv2 라이브러리 파일에 악성 Export 함수 glInitTexture를 추가하였다. 함수가 추가된 것이기 때문에 ‘Export Directory’ 구조체의 Export 함수 개수도 정상보다 1개 더 많다. glInitTexture 함수가 실행되면 32자 길이의 실행 인자 조건을 확인한다. 인자를 이용하여 내부 연산을 하고 이후 메모리에서 악성 PE를 실행한다. 유효 인자 정보가 확인되지 않아 실행되는 PE의 기능은 알 수 없다.

유형 A 악성 파일의 Export 함수

[유형 B-1] 정상 함수를 악성 ServiceMain 함수로 교체, ADS 데이터 필요

정상 libxml2 라이브러리 파일의 첫번째 Export 함수인 DllMain 함수를 악성 ServiceMain 함수로 교체하였다. Export 함수 개수는 변화가 없다. ServiceMain 함수이기 때문에 윈도우 서비스로 동작한다. 실행 과정에서 ADS (Alternate Data Streams) 데이터를 읽는다. ADS를 이용해 실행에 필요한 악성 데이터를 사용자 눈에 보이지 않게 숨겼다. zone과 data 스트림은 각각 암호화된 데이터와 암호를 풀기위한 키 데이터이다. 내부 연산 이후 메모리에서 악성 PE를 실행한다. 실행된 악성 PE는 rsrc 스트림 데이터를 필요로 한다. 최종 기능은 C&C 접속이다.

유형 B-1 악성 파일의 Export 함수
‘data’ ADS 데이터와 ‘zone’ ADS 데이터

[유형 B-2] 악성 ServiceMain 함수 단독 존재, ADS 데이터 필요

정상 라이브러리 파일 존재 여부가 불분명하다. Export 함수로 윈도우 서비스 ServiceMain 함수만 존재한다. 다른 유형과는 다르게 파일 리소스 버전 정보가 없고 악성 ServiceMain 함수를 제외한 Export 함수가 없는 점을 고려하였을 때 단독으로 제작된 악성 라이브러리 파일일 수 있다. 코드 전개 차이는 있지만, B-1 유형과 기능이 유사하며 zone과 data 이름의 ADS 데이터가 필요하다. 스트림 데이터가 수집되지 않아 이후 기능은 알 수 없다.

유형 B-2 악성 파일의 Export 함수
ADS 데이터에 접근

[유형 C] 악성 ServiceMain 외 함수 추가, 데이터 파일 필요

Notepad++ 플러그인 NppExport 라이브러리를 변조하였다. 정상 라이브러리에는 없는 Export 함수를 4개 추가하였는데, 윈도우 서비스로 동작하기 위한 ServiceMain과 ServiceHandler 악성 함수 외에 AttachMove와 DetachMove 함수가 특징적이다. AttachMove와 DetachMove 함수는 기능상으로는 정상이며, 원본 라이브러리에서 DllMain 함수에 있던 코드가 옮겨졌다. 고정 경로에 존재하는 wmicc.dat 데이터 파일을 이용하여 내부 연산을 하고, 이후 메모리에서 악성 PE를 실행한다. 실행된 악성 PE는 wmicd.dat 데이터 파일이 필요하고 최종 기능은 C&C 접속이다.

유형 C 악성 파일의 Export 함수

[유형 D] 기존 함수의 코드 변경, 인자 필요, 데이터 파일 생성 및 로드

정상 Dokan 라이브러리를 변조하였다. 가장 독특한 변조 형태로서 Export 함수 추가나 교체가 아닌 함수 내 바이너리 코드만 변경하였다. 기존 유형처럼 ‘Export Directory’ 구조체 정보로는 변조 여부를 확인하기가 쉽지 않다. 또한 기존 VC++ 파일을 Vmprotect로 패킹하여 전체 코드 패턴을 바꿨기 때문에 코드 변경 여부와 기능 파악을 어렵게 하였다. Vmprotect를 언패킹하고 Export 함수별로 비교하여 변경된 코드를 확인할 수 있다. 코드가 변경된 함수는 DokanNotifyXAttrUpdate 이다.

악성 Export 함수 호출 시 ‘-s’ 로 시작하는 유효 인자가 전달되어야 동작한다. 인자가 주어지면 시스템 %Temp% 경로에 VirtualStore.cab 데이터 파일을 생성할 수 있고, 특정 조건에 맞는 인자일 경우에는 데이터 파일을 로드한다. 데이터 파일은 C&C 통신을 위한 코드 실행과 URL 정보이다. 침해 시스템에서 다수의 VirtualStore.cab 데이터 파일이 확인되었는데, 공격자가 C&C 서버를 실시간으로 바꾼 것으로 보인다.

유형 D 악성 파일의 함수 코드 패치
VirtualStore.cab 데이터 파일
DokanNotifyXAttrUpdate 함수에서 데이터 파일 접근
C&C 주소 접속

[파일 진단]

Backdoor/Win.Akdoor
Trojan/Win.Agent
Data/BIN.Encrypted
Data/BIN.EncryptKey
Data/BIN.EncPe

[IOC]

141c6e0f5a90b133b00a8d85aa22be67
a4a22eef112bf5d37f0fe422ebf629e5
0c1bd80923691eb5277f5969dc456c50
2ba1443fa75ced874f49586d39fa929a
798038a1546d2a0625b258885ceba88e
460507242876e7582d6744fa628cfcb6
c59552c62fb99bfd7d63f988c20125ad
08f6ab305b6fcb1ed14b48f6c8b8db76
d4e401a7ce5e5518b13e9344f70f2382
36e1c4a359e2f60007b3f87194503750
dd0eddacd65fe208baf06548635584a7
47a07dc9a87ec29f2aee20287330fa34
78c6f1cb87039ad99f39b8a880a016b2
fcb1cbc5abfa4f5644b32368f2593de3
4e3724128e3a8775d8b8ec98ea94dbc2
9731ae209364fe224d873b49e284a19f
e600fe93690175b85415f021165ca111
1509727ff1d47cf701068000d8b137ab
2fec123d69d8958c5f1e1c512da30888
dfa0adb2d2d8208f0dc7dabe97541497

hxxps://www.dbclock.com/bbs/media/preview.php
hxxp://www.krtnet.co.kr/images/support/faq.php
hxxp://www.donganmiso.com/hm_board/works/libs/info.php
hxxps://www.akdjbcc.co.kr/api/score_list.asp
hxxp://charmtour.co.uk/common/shopsearch.asp
hxxps://www.okcc.co.kr/html/board/reserve03_add.asp
hxxp://www.kwangneungcc.co.kr/admin/board/Event/list_add.asp
hxxps://www.shopingbagsdirect.com/.well-known/validation.asp
hxxps://www.kkw119.com/.well-known/pki-validation/auth.asp
hxxps://www.shoppingbagsdirect.com/.well-known/validation.asp
hxxps://www.myungokhun.co.kr/_proc/member/sitemap.asp
hxxp://youthc.or.kr/community/template.asp
hxxp://paadu.or.kr/sitemap.asp
hxxps://www.shoppingbagsdirect.com/.well-known/validation.asp
hxxp://www.youthc.or.kr/community/template.asp
hxxp://pasc.co.kr/family/data/smartlist.asp
hxxp://www.paadu.or.kr/sitemap.asp

전체 코드와 보다 자세한 기능 설명은 ‘차세대 위협 인텔리전스 플랫폼’ ATIP 에서 제공하고 있습니다.

Categories:악성코드 정보

Tagged as:, ,

5 1 vote
별점 주기
guest
0 댓글
Inline Feedbacks
View all comments