0. 개요

1. 분석

.... 1.1 기본적인 내용

.... 1.2 바로가기 파일

.... 1.3 악성 스크립트

........ 1.3.1 기본

........ 1.3.2 디코딩

........ 1.3.3 간단한 분석

........ 1.3.4 자세한 분석

2. 치료

.... 2.1 원본 파일 복구

.... 2.2 악성코드 확인 및 종료

.... 2.3 완전히 삭제

3. 결론





0. 개요

  프린트를 목적으로 학교의 공용 컴퓨터를 사용하다가 일명 "USB 바이러스"라고 불리는 악성코드에 여러 번 감염되었다. 어느날 시간이 남기도 하고 스크립트 악성코드 분석도 공부할 필요가 있다는 생각에 VBS부터 공부한 후 이 악성코드를 분석해 보기로 했다.


  조사해서 찾아보았는데 2개를 확인하였고 하나는 감염된 컴퓨터가 있어서 직접 조사할 수 있었으며 다른 하나는 백신 프로그램의 로그를 통해 확인하였다. 인터넷을 찾아보니 굉장히 오래된 악성코드로 보이며 변경된 사항이 있는지는 모르겠지만 기본적인 행위는 비슷해 보인다. 


  당연히 어지간한 안티바이러스 프로그램에서도 탐지가 되긴 하지만 겸사겸사 공부도 할 겸 그리고 불안한 것도 있고 해서 분석해 보기로 했다. 또한 이렇게 오래된 것임에도 불구하고 라이선스 문제 때문인지 안티바이러스 프로그램이 설치되지 않은 여러 공용 컴퓨터들에서 아직까지 살아남아 있는 것을 보면 보안에 무관심한 사람들이 정말 많구나라는 생각도 든다.





1. 분석

1.1 기본적인 내용

  먼저 기본적인 내용부터 살펴보겠다. 이 악성코드는 이미 감염된 컴퓨터에 USB를 꽂을 시 악의적인 행위를 수행한다. 루프문을 돌다가 USB가 꽂아지면 먼저 원본 파일들에 "시스템 파일" 및 "숨김" 속성을 추가하여 일반적인 경우에 보이지 않게 한다. 대신 해당하는 모든 파일들에 상응하는 바로가기 파일들을 각각 생성한다. 그리고 악성 스크립트 파일을 USB에 복사한 후 똑같이 "시스템 파일" 및 "숨김" 속성을 추가한다.


  이후 다른 컴퓨터에서 바로가기 파일이 실행 되면 원본 파일과 동시에 악성 스크립트 파일을 실행시킨다. 악성 스크립트는 이 컴퓨터를 감염시키는데 주된 행위는 백도어와 다른 USB 감염이다. 또한 오토런에도 등록되어 컴퓨터 부팅 시마다 실행된다.


  참고로 안티바이러스 프로그램을 설치하지 않은 경우에는 위와 같이 위험한 상황이 되지만 상당히 오래된 악성코드이기 때문에 기본적으로 백신은 잘 탐지한다. 그래서 USB를 꽂자마자 바로가기 파일들과 VBE 파일이 삭제되는 것을 볼 수 있다. 하지만 문제는 원본 파일들은 계속 숨김 속성을 가지고 있기 때문에 USB를 보면 파일은 하나도 없는데 용량만 차지하는 것을 볼 수 있다. 이 경우에는 해당 폴더에서 이 속성들을 제거해 주어야 한다.



1.2 바로가기 파일

  바로가기 파일을 사용하는 이유는 피해자들이 이것을 USB가 감염되기 전과 같이 원본 파일인로 여기게 하는 것이다. 그래서 아무런 생각 없이 이 바로가기 파일을 실행하게 된다. 앞에서도 설명했듯이 바로가기 파일들은 두 가지 목적이 있다. 하나는 악성 스크립트를 실행시킴으로써 악성코드 트리거의 역할을 하는 것이고 다른 하나는 피해자들이 눈치채지 못하게 원본 파일도 실행시킴으로써 이것이 악성코드에 감염된 것인지를 눈치채지 못하게 하는 것이다.

 

  바로가기 파일 즉 .lnk 파일은 마우스 오른쪽 클릭을 통해 속성을 누른 후 "대상" 탭을 보면 알겠지만 사실 명령어로 이루어졌다고 보면 된다. 일반적인 경우 원본 파일의 경로만 적어져 있지만 이곳에 cmd.exe 즉 명령 프롬프트를 통해 실행 가능한 명령어를 넣은 경우 그 명령어가 실행된다. 이 명령어는 다음과 같은 형태로 되어있다.


C:\windows\system32\cmd.exe /c start MerciJacquieMichel.vbe&start [원본 파일] &exit


  참고로 MerciJacquieMichel.vbe는 여기서 분석하는 분석 대상인 악성 스크립트 파일이다. 이 것을 보면 알겠지만 악성 스크립트와 원본 파일이 동시에 실행되는 것을 볼 수 있다.



1.3 악성 스크립트

1.3.1 기본

  이제 악성 스크립트 파일에 대해서 알아보자. 개인적으로 감염된 컴퓨터들을 조사하다가 ymrimwqtym.vbe라는 것도 발견했다. 이것은 V3의 로그를 통해서 확인했기 때문에 원본 파일을 확보하지 못했고 그래서 분석을 못했다. 하지만 하는 행위를 봤을때 바로가기 파일들을 생성하는 것과 숨기는 것 등 일반적인 행위는 같아 보이므로 이름만 바뀐 것인지 아니면 둘 중 하나가 업그레이드 버전인지 모르겠지만 어쨌든 큰 차이는 없을 것 같다.


  인터넷에서 이름들을 검색해보니 ymrimwqtym.vbe라는 이름을 가진 바이러스는 2014년 말에도 활동한 걸로 보이며 MerciJacquieMichel.vbe는 더 최근인 것으로 보이므로 전자의 바이러스를 업그레이드한 것인지 이름만 바뀐 것인지는 잘 모르겠지만 비슷한 행위를 하는 것은 확실한 것 같다.


  이제 실질적인 분석을 하기로 한다. 먼저 vbe 확장자는 Encoding된 즉 암호화된 VBS(Visual Basic Script)다. VBS는 과거 Visual Basic을 기반으로 만든 스크립트 언어인데 당연히 문법적으로 많이 닮았고 이 외에도 VBA도 비슷한 개념이다. 만약 엑셀을 공부하면서 마이크로소프트 오피스의 VBA(Visual Basic for Application)를 배웠다면 관련 언어에 대해서 문법적으로는 어느 정도 익숙해 졌다고 보면 된다. VB를 이용해 엑셀 등에서 사용할 수 있게 만든 것이 VBA라면 VBS는 원래 자바스크립트와 비슷한 목적으로 만들어졌다가 이후 윈도우에서 컴퓨터를 관리하는 용도로 사용되고 있다. 물론 악성코드에서도 많이 사용되었고 요즘은 악성코드에서든 관리 용도에서든 많이 사용되는 편은 아닌것 같다.


  과거 MS에서는 screnc.exe라는 툴로 vbs를 vbe로 인코딩하는 기능을 제공해 왔다. 하지만 비스타부터는 이 프로그램이 기본 제공이 아니다. 참고로 이 파일을 직접 다운로드해서 사용할 수 있으며 윈도우 7까지는 사용 가능하다고 한다. 물론 인코딩과 디코딩 스크립트를 이용해서 직접 사용할 수도 있다. 다음 링크에서 [ https://gallery.technet.microsoft.com/Encode-and-Decode-a-VB-a480d74c ] 인코딩 및 디코딩 기능이 담긴 vbs 스크립트 파일들을 다운로드 받을 수 있다. 사실 인코딩 관련 내용보다는 난독화와 관련된 내용이 더 중요할 것으로 보인다.



1.3.2 디코딩

  악성코드를 분석하다 보니 이것은 확장자만 VBE지 실제 내용은 VBS였다. 대신 여러 난독화 기법을 이용해 암호화된 것으로 보이게 만든 것이다. 물론 스크립트의 특성 상 일일이 보다 보면 그리고 진행하다 보면 쉽게 원본 코드를 획득할 수 있다. 


  조금 더 자세히 설명하자면 처음 형태는 주석과 수 많은 개행 문자들, 그리고 암호화된 데이터가 존재하지만 동시에 복호화 코드 및 실행 코드도 존재하므로 wscript.echo를 통해 쉽게 받아낼 수 있다. 이 말은 Execute나 ExecuteGlobal 대신 wscript.echo 명령어를 사용하면 실행 되신 결과를 보여주는 메커니즘을 이용한 것이다. 그리고 각 명령어들에서 사용되는 난독화 부분도 마찬가지로 wscript.echo로 출력시키면 결론적으로는 완성된 내용이 나오기 때문에 쉽게 분석할 수 있다. 


  참고로 간단한 난독화 부분이야 한 문장 짜리일 것이고 간단하게 옮겨적으면 되지만 코드 전체는 매우 큰 편이고 명령 프롬프트에 다 안들어올 수 있다. 이럴 경우에는 간단하게 명령 프롬프트에서 다음과 같이 사용하면 된다. cscript.exe는 현재 가상환경이 윈도우 XP여서인지 wscript.exe를 이용한 실행이 되지 않아서 사용했다.


> cscript.exe aa.vbs > bb.txt


  문제는 이렇게 복호화한 내용도 또 다시 암호화되어 있다는 것이다. 앞의 예제와 같이 인코딩된 데이터와 디코딩 함수가 존재하며 난독화된 부분도 존재한다. 난독화된 부분을 조금 보면 이 스크립트 파일을 실행하는 프로세스가 wscript.exe인지를 확인하는 부분이 나온다. 어쨌든 이것을 복호화시키면 또 다른 형태가 나온다. 이것도 마찬가지의 형태이다. 마지막으로 이것을 복호화시키면 드디어 원하는 코드를 얻을 수 있다. 문제는 이 코드도 대부분은 아니지만 조금씩 난독화된 부분이 있는데 이것도 wscript.echo를 이용해 출력하다 보면 쉽게 처리할 수 있다. 어쨌든 스크립트이므로 우리는 쉽게 소스 코드를 획득하게 되었다.



1.3.3 간단한 분석

  이제 디코딩 부분은 건너왔고 실제 수행하는 행위를 알아보겠다. 이것은 전형적인 Backdoor로서 설치된 이후 특정 URL 및 포트를 가지고 C&C 서버와 통신한다. URL을 검사해보니 약 1년 전에 확인된 것으로 보아 적어도 이 버전(MerciJacquieMichel.vbe)은 그 때 즈음에 전파된 것으로 보인다. ymrimwqtym.vbe의 경우에는 검색해보니 적어도 2014년 11월 경에는 탐지된 것으로 보인다.


  어쨌든 서버에서 보내는 명령들에 따라 수행되는 루틴들을 분석해보면 Uninstall부터 시작해서 생각도 못했던 악성코드의 업데이트 그리고 감염된 컴퓨터에 대한 정보(예를들면 운영체제의 버전, 설치된 백신 프로그램 이름 등)를 보내는 등의 기능이 존재한다. 이 외에도 특정 디렉토리 내에 존재하는 파일들 목록이라던가 실행 중인 프로세스들 목록 등도 있고 아예 명령 프롬프트를 이용한 명령어도 실행시킬 수 있다. 가장 눈에 띄는 것은 특정 파일을 다운로드하고 실행시키는 기능이다.  



1.3.4 자세한 분석

  먼저 변수들을 초기화하고 초기화 함수를 실행한다. 이 함수는 다음 레지스트리에 값을 쓴다. 

HKEY_LOCAL_MACHINE\software\[악성코드 이름]\


  값은 "true - [날짜]" 또는 "false - [날짜]"인데 해당 레지스트리 값이 이미 존재하면 true, 존재하지 않는다면 false이다. 이것을 담당하는 변수 이름이 usbspreading인 것으로 보아 USB를 통해 감염된 초기 컴퓨터의 경우 이 값이 존재하지 않기 때문에 true가 될 것이고 다시 실행되었다면 이 값이 이미 존재하므로 이후부터는 false가 될 것이다.


  이후 오토런 레지스트리들에 해당 스크립트를 등록한다.


HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\[악성코드 이름]

HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\[악성코드 이름]


  값은 다음과 같다.


wscript.exe //B "\[악성코드 이름]"


  그리고 시작 프로그램 폴더와 Temp 폴더에 현재 스크립트를 복사한다. 막 감염된 경우라면 현재 스크립트는 USB에서 실행된 그 스크립트가 될 것이다.


C:\Users\[사용자 이름]\AppData\Local\Temp\[악성코드 이름]

C:\Users\[사용자 이름]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\[악성코드 이름]


  이제 초기화의 마지막 단계로서 현재 Temp 폴더에 존재하는 악성코드가 실행 중인지 판단하여 아니라면 그것을 실행하고 종료한다. 초창기에는 USB에서 실행 중일 것이고 이제 컴퓨터 내의 악성 스크립트를 실행시키는 것이다.


  이후 부터는 루프문이다. 이 루프문에서는 설치 함수가 실행되며 POST로 서버의 URL에 현재 컴퓨터의 여러 정보들을 보내며 동시에 명령을 받는다. 참고로 포트 번호는 3030 - 3040의 값을 갖는다. 먼저 설치 함수부터 살펴보겠다.


  설치 함수에서는 앞의 오토런 레지스트리를 등록하고 Temp 및 시작 프로그램 디렉터리에 스크립트 파일을 복사하는 행위를 수행한다. 이후 우리에게 익숙한 루틴이 등장한다. 이동식 드라이브가 현재 삽입되어 있고 거기에 여분의 공간이 있는지를 확인한 후 현재 스크립트 즉 Temp 폴더에 존재하는 스크립트를 USB에 복사하고 속성을 준다. 이 속성은 앞에서도 설명한 "시스템 파일" 및 "숨김" 속성이다. 이후 원본 파일들도 속성을 추가하며 각각 해당하는 바로가기 파일을 만든다. 이 외에도 각 확장자에 맞는 아이콘도 설정해 준다.


  이제 POST를 통해 서버에서 받은 명령어를 실행할 수 있는데 각각 간단한 설명을 넣겠다. "execute"는 인자로 받은 VBS 명령어를 실행하며 "cmd-shell"은 CMD 명령을 받아 실행한다. 원래 이 루프문은 주기가 디폴트로 5초인데 "sleep" 명령을 통해 이 주기를 변경할 수 있다. 그리고 "enum-driver", "enum-faf"와 "enum-process"로 각각 드라이버 목록, 인자로 받은 폴더의 파일들 또는 실행 중인 프로세스들의 목록을 보여준다. 또는 "delete" 및 "exit-process"로 파일 및 프로세스를 삭제 및 종료시킬 수 있다. 이 외에도 "uninstall"로 악성코드를 삭제할 수도 있으며 "update"로 새로운 악성 스크립트를 다운로드 받아 실행시킬 수도 있다. "recv"는 피해자 컴퓨터의 파일을 서버로 업로드하며 "send", "site-send"는 파일을 다운로드 받아 피해자의 컴퓨터에서 실행시킨다.


  아마도 이 악성 스크립트는 공격자가 원하는 실질적인 내용 보다는 악성코드 전파 및 백도어 그리고 실제 악성코드에 대한 다운로더로서의 기능을 가진 것으로 보인다. 당연하게도 이 스크립트를 보면 키로깅이라던지 랜섬웨어, DDoS 등 일반적인 악성코드가 하는 기능은 포함되지 않기 때문이다. 이 이상은 단지 이 악성 스크립트 파일만을 통해서는 알 수 없다.





2. 치료

2.1 원본 파일 복구

  간단하게 설명하자면 원본 파일들은 "숨김" 및 "시스템 파일" 속성이 추가된다. 그래서 볼 수가 없는데 만약 보고싶다면 윈도우 10 기준으로 "폴더 옵션"에서 "보호된 운영 체제 파일 숨기기(권장)"을 해제하고, "숨길 파일, 폴더 및 드라이브 표시"을 체크하면 볼 수 있다. 하지만 이 파일들은 계속 이 속성을 가지고 있기 때문에 이 속성을 해제할 필요가 있다. 그래야 원래의 원본 파일로 돌아올 것이기 때문이다.


  먼저 명령 프롬프트를 실행한다. 그리고 USB 드라이브로 이동하는데, 드라이브의 이름에 따라서 다음 명령어를 수행한다. 본인의 경우 F 드라이브였기 때문에 다음 명령어를 실행한다. 참고로 >는 명령어가 아니라 프롬프트이므로 > 이후의 명령어를 입력하면 된다.


> F:


  왼쪽 프롬프트를 보면 F 드라이브로 이동된 것을 볼 수 있다. 이제 다음 명령어를 통해 현재 폴더와 모든 하위 폴더에 존재하는 파일 및 폴더의 "읽기 전용 속성", "시스템 파일 속성", "숨김 속성"을 제거한다.


> attrib -r -s -h /d /s


  이로써 우리는 간단하게 USB를 원상복구할 수 있다. 즉 악성코드 "MerciJacquieMichel.vbe"와 여러 바로가기 파일들을 삭제하고, 원본 파일들의 속성을 복구시키면 완전히 원래 상태로 복귀된다.



2.2 악성코드 확인 및 종료

  위의 복구 과정을 매번 하기도 귀찮으므로 현재 악성코드가 실행 중인지 검사하며 실행 중인 경우 종료시키는 방법을 설명하겠다. 간단히 말해서 윈도우의 스크립트 파일들은 wscript.exe라는 프로그램을 통해서 실행되며 이 악성 스크립트도 마찬가지이다. 그래서 우리는 Ctrl + Alt + Del 키의 조합을 통해서 프로세스들을 확인하다가 "wscript.exe"라는 이름을 가진 프로세스가 실행 중이라면 종료시키면 된다.


  물론 컴퓨터 관리자가 vbs 스크립트로 컴퓨터를 관리하는 경우라면 함부로 종료시키면 안되겠지만 본인이 사용하는 공용 컴퓨터에서는 이 악성코드가 감염될 때만 저 프로그램이 사용되는 것으로 봐서 그냥 종료시키면 될 것으로 보인다.



2.3 완전히 삭제

  문제는 이 바이러스는 컴퓨터를 부팅할 때마다 자동으로 실행이되게 되어있다. 하지만 우리는 레지스트리를 건들기 귀찮기 때문에 파일이 존재하는 곳으로 가서 삭제만 해주면 된다. 


  시작 프로그램 디렉터리와 Temp 디렉터리로 이동합니다. 위치는 대략 다음과 같다.


C:\Users\[사용자 이름]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\[악성코드 이름]

C:\Users\[사용자 이름]\AppData\Local\Temp\[악성코드 이름]


  위의 두 경로로 가보면 MerciJacquieMichel.vbe나 ymrimwqtym.vbe라는 이름을 발견할 수 있다. 이렇게 두 경로에 위치한 악성코드를 삭제하면 레지스트리에 오토런으로 등록되어 있다고 하더라도 파일이 존재하지 않으므로 실행되지 않는다.


  물론 레지스트리도 삭제하는 것이 좋기 때문에 아래에 정리하도록 한다. 실행 창 또는 윈도우 10의 경우에는 시작 메뉴를 클릭하고 regedit을 입력하면 해당 프로그램을 볼 수 있다. 이것을 실행하면 이름과 같이 레지스트리(Registry)를 수정(Edit)할 수 있다. 감염된 경우 차례대로 순서를 따라가 보면 다음의 항목들을 찾을 수 있을 것이다.


HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\[악성코드 이름]

HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\[악성코드 이름]

HKEY_LOCAL_MACHINE\software\[악성코드 이름]\





3. 결론

  결론은 항상 안티바이러스 즉 백신 프로그램을 설치하는 것이 중요하다는 것이다. 모든 공격 특히 마음먹고 하는 공격은 쉽게 막기 힘들 수도 있지만 일반적인 그리고 오래된 악성코드는 쉽게 막아준다. 항상 보안에 신경쓰는 마인드와 기본적인 보안 프로그램을 설치하는 것만으로도 사이버 환경에서의 피해를 대부분 막을 수 있다.



Posted by SanseoLab

블로그 이미지
Malware Analyst
SanseoLab

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함