본문 바로가기
악성코드 정보

압축 툴마다 압축해제 방식의 차이를 이용한 공격기법 (WinRAR 사용유도)

by 분석팀 2020. 3. 30.

ASEC 분석팀은 3월 23일 비 정상적인 압축 악성 파일이 메일을 통해 유포되고 있음을 확인하였다. 메일의 내용은 아래의 그림과 같고, 첨부파일은 ZIP 확장자이나, "Use Winrar." 라는 문구를 포함하여 특정 압축해제 프로그램으로 압축해제를 유도한다.

 

[그림  .1]  메일로 유포된 압축 파일 형태의 악성코드

 

압축된 악성 코드가 메일을 통해 유포되는 방식은 이전부터 알려진 방식이다. 그러나 해당 메일의 경우 사용자에게 [그림 1.]의 빨간 글씨(Use Winrar)와 같이 ‘WinRAR’로 압축 해제할 것을 유도한다. 해당 방식으로 유포된 샘플은 현재까지 총 2가지 이름으로 확인되었다.

 

  • MV_GLOVIS_B35C_191850_12_02_2020.zip
  • Scan_Covid19_2020.zip

아래 설명부터는 코로나 이름과 관련된 "Scan_Covid19_2020.zip" 샘플로 설명하겠다.

 

메일 유포자의 의도대로 WinRAR 압축 프로그램을 사용해 압축 파일을 추출 시, [그림 2.]와 같은 악성 실행 파일(.exe)이 추출됨을 확인할 수 있다.

 

[ 그림  2.] WinRAR  해제 시 확인되는 악성 실행 파일 (.exe)

 

그러나 한국에서 흔히 사용하는 반디집이나 7zip(최신) 압축 프로그램을 사용하는 경우, 악성 실행 파일이 아닌 아래 [그림 3.]과 같이 정상 *.jpg파일이 추출됨을 확인할 수 있다.

 

 

[ 그림  3.]  압축 해제 시  *.jpg  그림 파일이 확인된다 . (  반디집 ( 상 )/ 7zip 최신( 하 ) )

 

동일한 압축 파일의 추출 결과가 왜 다를까? 결론부터 말하자면, 해당 악성 압축 파일(ZIP)은 두 압축 파일을 결합한 비 정상적인 압축 구조를 갖고 있다는 점이다. 이러한 비 정상적인 구조를 설명하기 위해, ZIP의 정상적인 구조를 최대한 간단히 설명하려 한다.

 

ZIP 압축 구조

우선 ZIP 파일 구조를 설명하기 앞서 일반적으로 알려진 구성 요소의 명칭과 010 editorTemplate기능으로 표현되는 요소의 명칭이 달라 혼선을 줄 수 있으므로, 사용할 명칭은 아래와 같이 정리한다

 

ZIP

What is a ZIP file? ZIP file extension represents archives that can hold one or more files or directories. The archive can have compression applied to the included files in order to reduce the ZIP file size. ZIP file format was made public back in February

wiki.fileformat.com

  • Record = Local File Header + File Data(Compressed)
  • DirEntry = Central Directory
  • EndLocator= End of Central Directory Record

정상적인 ZIP 파일([그림 4.])을 만들어, ZIP 포맷 형태로 표현하면 [그림 5.]와 같다.

 

[ 그림  4.]  정상적인  ZIP  내부 파일
[ 그림  5.]  정상적인  ZIP  압축 구조를 갖춘 파일

 

일반적으로 ZIP 압축 포맷은 압축된 파일의 개수만큼 RecordDirEntry를 지니며, 단 하나의 EndLocator가 존재한다. 따라서 [그림 4.]와 같이 3개의 파일을 압축한 경우, [그림 5.]의 Record 3개, DirEntry 3개, EndLocator 1개 순으로 존재하는 것을 확인할 수 있다.

 

대부분의 압축 프로그램은 ZIP 형태로 압축된 내부 파일을 읽을 시, 일반적으로 'EndLocator'라는 구조를 가장 먼저 참조한다.

 

[ 그림  6.] ZIP  압축 구조  – EndLocator 의 정보

 

EndLocator는 [그림 6.]의 가장 하단에 있는 구조체로, 압축된 파일의 개수를 알 수 있는 elEntriesInDirecotryDirEntry형태의 첫번째를 Offset(빨간 화살표)을 가리키는 elDirecotryOffset, 모든 DirEntry의 전체 크기를 알 수 있는 elDirectorySize 등의 정보를 가지고 있다. 그 다음엔 DirEntry를 참조하여 Record를 읽어낸다. DirEntry는 각 Record의 정보를 가지고 있어, 압축된 데이터의 개수만큼 반복해 Record에 압축된 데이터를 확인할 수 있다.

 

[ 그림  7.] ZIP 파일 포맷의 전체적인 구조

 

비 정상적인 부분 2가지

해당 문서에서 소개하는 악성 파일은 두 가지 비 정상적인 부분이 존재한다.

 

1)     EndLocator의 개수

ZIP으로 압축된 정상적인 파일의 구조는 [그림 5.]와 같이 1개의 EndLocator만 존재하는 것을 알 수 있다.

 

[ 그림  8.]  악성 샘플의  ZIP  압축 구조

 

그러나 해당 샘플은 [그림 8.]과 같이 EndLocator2개 가지고 있으며, 또 압축된 파일의 개수를 알 수 있는 elEntriesInDirecotry 값이 ‘2’가 아닌 ‘1’이다. , 해당 샘플은 *.jpg *.exe 를 각각 ZIP으로 압축 파일로 만들고 이 둘을 결합한 것으로 추정할 수 있다.

 

 

2)     EndLocatorelDirecotryOffset

[ 그림  9.] EndLocator 의  elDirecotryOffset  값과  DirEntry  값 비교

 

일반적으로 ZIP 압축 파일의 elDirecotryOffset 값은 DirEntry의 오프셋을 넣게 되어 있다. 그러나 해당 샘플은 [그림 9.]와 같이 상응하는 DirEntry[1] 오프셋(0xDC66)이 아닌 *.exeRecord[1] Size(0x7630)가 들어 있다. 이것은 분명 정상적이지 않은 값이지만, 압축 프로그램마다 손상된 압축 형태(또는 일반적이지 않은 형태)를 '어떻게 처리할 것인지' 처리 방법의 차이가 있기 때문인 것으로 보인다. 그래서 특정 프로그램에서는 가장 윗 데이터인 *.jpg가 추출되는 한편 WinRAR와 같이 *.exe가 추출되기도 한다. 그리고 어느 프로그램에선 손상된 형태로 인지하여 *.jpg와 *.exe 두 파일 모두 읽을 수 있도록, 아예 정상적인 압축파일로 만들어 내기도 한다.

해당 악성 코드의 방식은 정상 그림과 악성 파일 각각 압축하여 결합한 형태로 무척 간단하다. 이는 백신이나 특정 제품에서 사전 차단되는 것을 우회하기 위해 사용한 것으로 추정된다.

 

V3 제품은 환경설정 > PC 검사 설정 > 정밀 검사 > 검사 대상에서 압축 파일을 체크해주면 진단되는 것을 확인할 수 있다.

 

[참조] V3 환경설정 > PC 검사 설정 > 정밀 검사 > 검사 대상

 

이러한 샘플의 감염을 예방하기 위해선 출처가 불분명한 메일의 첨부파일 및 링크는 열어보면 안되며, OS 보안 업데이트 및 Anti-Virus 제품의 최신 업데이트를 해야한다.

 

현재 V3에서는 이와 같은 내부 파일을 다음과 같은 진단명으로 진단하고 있다.

 

  • Trojan/Win32.Vbkrypt (2020.03.28.01)

 

 

댓글