목차

0. 개론

1. 경로

2. 실행

.... 2.1 취약점

........ 2.1.1 파일 포맷 취약점

........ 2.1.2 웹 브라우저 관련 취약점

........ 2.1.3 DLL Hijack

........ 2.1.4 운영체제 취약점

.... 2.2 매크로

.... 2.3 스크립트 파일

.... 2.4 Autorun.inf

.... 2.5 확장자 위장

3. 문서 쪽 정리





0. 개론

  개인적으로 악성코드 분석 중에서도 리버스 엔지니어링을 통한 바이너리 분석에만 집중하여 공부해 왔다. 원래 웹 쪽에는 관심이 없었을 뿐더러 취약점과 관련해서도 관련 지식이 많이 부족했기 때문이다. 하지만 악성코드 분석이라는게 순수하게 바이너리를 분석하기만 하는 것이 아니라 어떤 방식으로 유포되어 사용자 컴퓨터를 감염시키는지도 포함된다고 생각한다. 악성코드가 실행되는 그 순간 이후부터는 항상 해오던 것이기 때문에 여기에는 포함시키지 않기로 한다. 여기서는 그 직전까지의 상황을 위주로 설명한다. 웹도 그렇고 취약점도 그렇고 그다지 많이 알지 못하는 분야이기 때문에 많이 부족하며 많은 바이러스 분석 리포트를 읽어보고 추가할 내용이 생기면 반영하기로 하겠다.


  악성코드가 공격 대상의 컴퓨터에서 실행되기 위해서는 먼저 악성코드 바이너리가 공격 대상의 컴퓨터에 존재해야 하며 또한 이것을 실행시킬 메커니즘이 필요하다. 바이너리는 순수하게 그대로 존재할 수도 있고 실행 파일이지만 사용자에게 혼란을 줄 목적으로 다른 형태의 확장자를 가질 수도 있다. 이외에도 다른 파일에 암호화되어 삽입된 형태로 존재하여 드로퍼 형태로 이것을 추출한 후에 실행하는 메커니즘일 수도 있다. 마지막으로 다운로더 형태로 존재하여 실제 악성코드를 다운로드 받은 후에 실행시키는 메커니즘도 존재한다. 사실 가장 많은 방식은 웹 브라우저나 애플리케이션의 취약점을 이용한 방식이다. 임의 코드 실행 취약점은 뒤에서 살펴보겠지만 취약한 입력 등을 이용하여 공격자가 설정한 임의적인 쉘코드를 실행하는 방식이다. 그렇기 때문에 이 쉘코드 내부에 모든 기능을 넣기 힘드므로 드로퍼 방식을 사용해 다른 파일에서 바이너리를 추출하고 실행하던지 아니면 다운로더 방식으로서 악성코드를 다운로드 받고 실행하는 내용의 쉘코드가 사용된다.





1. 경로

  여기서는 악성코드에 감염되는 최초의 경로를 말하고자 한다. 가장 많이 이용되는 경로 중 하나는 스팸 메일일 것이다. 이것은 사회공학적인 방법을 이용해 링크를 클릭하게 할 수도 있고 위장 문서 파일을 다운로드하고 열어보게 만들 수도 있다. 감염된 사이트의 url을 클릭하게 만들어서 취약점을 이용한 공격이 가능하게 하거나 직접 악성코드를 다운로드받게 하는 것이다. 다운로드 받는 경우는 대부분 문서 파일 형태로서 매크로를 이용한 방식일 것이지만 확장자의 특징을 이용해 사용자가 이것이 실행 파일이 아닌 것처럼 생각하게 해 실행하게 만들 수도 있다.


  스팸 메일 외에도 피싱 방식도 감염된 사이트의 url을 클릭하게 만들 수 있다. 물론 많은 사람들이 이용하는 사이트가 취약해 감염된 경우에는 이런 방식 없이도 이 사이트에 접속한 많은 사람들이 직접 감염될 것이다. Drive-By-Download가 이런 방식으로서 특별히 실행 파일을 다운로드한다거나 실행하는 것 없이 이렇게 웹 서핑만 했는데도 악성코드에 감염될 수 있다. 참고로 워터링 홀 공격은 이 DBD 공격과 같은데 차이점이 있다면 불특정 다수가 아닌 특정한 집단을 목표로 한다는 점이다. 즉 APT 공격 중 하나이다. Malvertising 방식은 온라인 광고를 통해 악성코드를 유포시킨다. 사람들은 안전한 사이트에서는 광고도 안전하다고 여기는 경향이 있지만 사실 수 많은 광고를 모두 검증하기 어렵다. 광고 클릭 시 악성코드 다운로드를 유도하거나 취약점을 이용하는 감염된 사이트로 redirect 시킬 수 있다.


  앞의 스팸메일의 경우처럼 꼭 문서 파일이 아니더라도 웹하드나 p2p를 통해 주로 다운로드 받는 mp3나 동영상 같은 미디어 파일도 감염되어 있을 수 있다. 이것은 애플리케이션이 읽는 미디어 파일 포맷에 관한 취약점을 이용한다. 또 다른 방식으로 게임 핵이라는 이름으로 제공되지만 실제로는 악성코드에 감염시키는 내용이 들어있는 실행 파일일 수도 있다.


  최근에는 운영체제 자체의 취약점을 통해 같은 네트워크에 존재하기만 해도 즉 인터넷에 연결만되어 있어도 악성코드에 감염되는 경우가 발생하기도 했다.





2. 실행

2.1 취약점

2.1.1 파일 포맷 취약점

  동영상 또는 음악 파일을 재생하고 자막 파일을 읽어서 보여주는 미디어 플레이어나 문서를 처리하는 워드 프로그램 또는 파일을 압축 및 압축 해제하는 종류의 프로그램들은 공통적으로 파일을 읽어들인 후 특정 행위를 수행한다. 만약 이러한 애플리케이션에서 특정 영역을 읽어들일 때 오버플로가 발생하는 취약점이 존재한다면 파일의 이 취약점을 이용하는 쉘코드를 작성해 임의적인 코드를 실행시킬 수 있다. 이러한 형태의 취약점을 임의 코드 실행 취약점이라고 한다. 이 쉘코드는 악성코드를 다운로드하고 실행시키는 다운로더의 역할을 할 수도 있으며, 파일에 악성코드를 암호화하여 삽입한 경우 다운로드 대신 해당 바이너리를 디코딩하여 추출한 후에 실행시키는 드로퍼의 역할을 할 수도 있다.


   웹 브라우저 취약점 항목에서 설명하겠지만 어도비 플래시 플레이어의 경우 .swf 파일을 읽고 실행하는데 이 때 파싱하는 과정에서 파일 포맷 취약점이 존재할 수 있다. 또한 플레이어가 직접 읽어들이는 .swf 파일 외에도 ActionScript를 통해 읽어들이는 mp4 같은 미디어 파일도 마찬가지이다.


  그러므로 미디어 플레이어 같은 자주 사용되는 애플리케이션을 항상 최신 버전으로 업데이트할 필요가 있으며 출처가 확실치 않은 미디어 파일을 다운로드하지 않는 것도 방법이다. 이것은 웹 브라우저에서 실행되는 애플리케이션인 어도비 플래시 플레이어 같은 프로그램도 마찬가지이다.


2.1.2 웹 브라우저 관련 취약점

  앞에서는 간단하게 감염된 사이트에 접속하여 악성코드에 감염된다고만 설명하였다. 여기서는 조금 더 깊게 들어가서 어떤 방식을 통해 악성코드가 공격 대상의 컴퓨터에 주입되고 이후에 실행되는지에 대한 메커니즘을 다루고자 한다. 사실 요즘은 대부분의 악성코드가 여기서 설명할 Drive-By-Download 방식으로 웹 브라우저를 이용하여 감염시키는 경향이 있다. 


  일반적으로 Drive-By-Download 공격 방식에는 악성코드 경유지와 유포지 등의 단어가 등장한다. 여기서는 경유지란 최초로 방문하게 되는 감염된 페이지를 뜻할 것이고 중계지는 추적을 어렵게 만들기 위하여 유포지로 도착하기 전에 방문하게 되는 페이지들을 뜻할 것이다. 그리고 유포지는 실질적으로 취약점을 이용해 공격을 수행하는 내용이 들어있는 페이지를 뜻하며 마지막으로 악성코드가 실제로 저장된 저장소가 있다.


  공격자는 특정한 웹 사이트의 취약점을 이용하여 웹 서버에 악성 스크립트를 삽입하거나 직접 사이트를 변조할 수 있다. 일반적으로 iframe 태그를 통해 여러 중계지를 거쳐 유포지로 redirect 시키는 형태이다. 즉 공격자는 취약한 웹 페이지를 변조시켜 iframe 태그를 삽입하거나 이러한 역할을 하는 악성 스크립트를 삽입함으로써 경유지를 만든다.


  이제 사용자는 방문하고자 했던 사이트에서 여러 중계지를 거쳐 유포지로 redirect되었다고 가정하겠다. 유포지에서는 사용자의 브라우저와 운영체제 등을 검사하여 취약점을 찾고 실제로 취약점을 이용해 공격하는 역할을 수행한다. 취약점의 경우 조건이 맞아야 그 역할을 할 수 있는데 애초에 관련 프로그램이 설치되어 있지도 않다면 통할리가 만무하기 때문이다. 또한 설치되어 있다고 해도 해당하는 버전에 따라 취약점의 성공 여부도 다르므로 공격자의 입장에서는 사용자의 정확한 환경을 파악하고 이후 이것에 맞는 취약점을 사용할 것이다.


  이제 해당하는 취약점 예를들면 어도비 플래시 플레이어 취약점이 공격 가능하다고 하자. 유포지에서는 해당하는 취약점에 상응하는 악성 파일(이 경우에는 .swf)을 사용자로 유입시킨다. 취약점이 존재하는 사용자의 어도비 플래시 플레이어는 이 악성 파일을 읽어들일 것이고 이 과정에서 파일 내부의 쉘코드가 실행되어 실제 악성코드를 다운로드하고 실행시킨다. 물론 쉘코드는 swf 파일 내부에 인코딩되어 있는 악성코드를 추출하고 실행시키는 내용일 수도 있다. 어도비 플래시 플레이어와 관련된 취약점은 뒷 부분에서 다루도록 하겠다.


  정리해보자면 공격자는 악성코드 유포지로 사용자를 유도하기 위해 취약한 웹 사이트를 감염시켜 경유지로 만든다. 유포 페이지는 사용자가 어떤 취약한 애플리케이션을 사용하는지 검사하고 해당 취약점을 이용하는 곳이다. 만약 사용자가 어도비 플래시 플레이어의 취약한 버전을 사용한다고 판단될 경우 .swf 파일을 사용자의 웹 브라우저로 다운로드시킨다. 이 파일은 ActionScript 언어를 이용해 취약점을 이용하는 루틴으로 개발되었을 것이다. 어쨌든 플레이어는 이 파일을 읽음으로써 공격자가 원하는 임의적인 코드를 실행하게 된다. 이 코드의 내용은 궁극적으로 악성코드를 다운로드 받고 실행시킬 것이다. 이 악성코드는 악성코드 저장소에 존재한다.


  가장 유명한 어도비 플래시 플레이어에 관해서 더 알아보겠다. 이것은 .swf 파일을 실행한다. 이 파일은 플래시 파일로서 ActionScript라는 언어를 이용해서 개발한다. 파일 포맷 취약점 형태를 보면 어도비 플래시 플레이어에서 .swf 파일을 파싱하는 부분에서 발생할 수도 있고 ActionScript를 통해 .mp4 파일을 읽고 파싱하는 부분에서 발생할 수도 있다. 즉 이런 방식들은 파일 포맷 취약점을 이용하는 방식이다. 물론 애플리케이션 자체적인 취약점이 더 많을 것이다. 예를들면 Use-After-Free나 사용하는 라이브러리에서 제공되는 함수가 받은 인자를 제대로 처리하지 못할 때 즉 취약한 함수를 이용할 때에도 발생할 수 있다. 결론적으로 어도비 플래시 플레이어의 취약점을 이용하기 위해서는 악성 swf 파일이 필요한데 이 파일의 내용은 즉 ActionScript의 내용은 mp4 같은 미디어 파일의 파싱 취약점을 실행하는 간단한 내용일 수도 있고 자체적으로 취약점을 공격하는 내용이 들어있을 수도 있다.


  어도비 플래시 플레이어 외에도 이와 비슷한 Java Applet, MS Silverlight가 있다. 자바의 경우 취약한 .jar 파일이 사용되는데 JVM이 포함되어 있는 웹 브라우저가 자바 애플릿이 포함된 웹 사이트 접속 시에 JVM으로 애플릿을 다운로드하여 로컬에서 실행하는데 이 때 보안 관리자를 우회하여 악성코드에 감염시키는 것이다. 또한 이러한 애플리케이션 말고도 브라우저의 취약점 즉 MS IE 취약점을 사용할 수도 있을 것이다. 참고로 자바 취약점을 이용한 방식은 JVM에서 실행되기 때문에 브라우저가 강제로 종료되지 않으며 플래시 플레이어나 브라우저 자체 취약점의 경우에는 대부분 브라우저가 강제로 종료된다고 한다.


  마지막으로 대부분의 악의적인 행위를 수행하는 스크립트는 난독화되어 있다. 즉 경유지부터 중계지들 그리고 유포지까지 관련된 대부분의 사이트들의 악의적인 부분이 대부분 난독화되어 있다고 보면 된다. 스크립트 언어의 특성상 컴파일되지 않아 사람도 쉽게 읽을 수 있기 때문이다. 특히 자바스크립트의 경우에는 난독화 툴(대부분 Exploit Kit에서 제공된다)부터 이것을 해제하는 툴들이 많이 존재하는데 이쪽만 해도 공부할 내용이 많다.


2.1.3 DLL Hijack

  특정 DLL을 로드하는 애플리케이션이 DLL에 대한 검사 없이 로드한다고 하자. 이러한 경우 악의적인 사용자가 이름이 같은 악성 DLL을 만들고 함수 이름도 같게 만들어서 export시키고 실제 DLL 대신 이 DLL을 포함시켜 배포할 수 있다. 아니면 인라인 패치로 정상 DLL 파일에 악의적인 부분을 써 넣을 수도 있다. 물론 함수는 실제적인 기능이 아닌 악의적인 행위를 수행할 것이다. 사용자는 실행 파일이 안전하므로 거리낌없이 사용할 것이고 해당 실행 파일은 실행될 경우 악성 DLL을 로드하고 그 함수를 호출할 것이다. 


2.1.4 운영체제 취약점

  최근에는 윈도우의 SMBv2 원격코드 실행 취약점을 이용해 랜섬웨어가 전파되었다. 이 방식은 자신의 네트워크 대역 IP 및 랜덤으로 생성된 IP 대역을 스캔하여 SMB 취약점이 발견될 경우 랜섬웨어에 감염시키는 방식으로 전파된다.



2.2 매크로

  앞에서 문서 파일을 언급하였다. 이러한 형태의 취약점은 문서 파일 내의 매크로(MS 오피스 프로그램의 경우 VBA) 기능을 이용한 기법으로서 주로 다운로더나 드로퍼 기능을 가지며 이후 다운로드 또는 추출한 악성 바이너리를 실행시킨다. 일반적으로 메일 등의 첨부파일로 전파되는데 사용자가 해당 문서 파일을 열 경우 악의적인 매크로가 실행된다. 최신 오피스 프로그램은 디폴트로 매크로 기능이 꺼져 있지만 궁금증을 유발시켜 매크로 기능을 켜게 유인시키기도 한다. 



2.3 스크립트 파일

  다음 문서에 정리한다. [ http://sanseolab.tistory.com/41 ]




2.4 Autorun.inf

  USB나 외장 하드를 연결한 경우 최상위 디렉토리에 Autorun.inf라는 파일이 있다면 운영 체제는 이 파일을 실행하고 이후 디스크를 열게 된다. 내부적으로 만약 Autorun.inf 파일 내부에 open= 구문으로 지정된 파일이 실행된다.



2.5 확장자 위장

  사용자에게 악성 실행 파일의 확장자를 실행 파일이 아닌 것처럼 인식시키는 방식은 여러가지가 있다. 가장 간단한 방법은 사용자가 확장자 자동 숨김 기능을 사용한다는 가정 하에 " aaa.jpg.exe " 파일을 만들고 아이콘을 사진 처럼 변경하여 사용자 눈에 aaa.jpg로 인식시키는 방식이 있다. 이외에도 디렉토리 이미지도 자주 사용된다. exe 파일의 경우 확장자 자동 숨김을 통해 확장자는 가려져 있는데 아이콘이 디렉터리라면 당연히 디렉터리인줄 알고 더블클릭하여 실행시키는 방식이다. exe 파일은 아니지만 실행 가능한 파일로서 사용자에게 실행 파일이 아니라 데이터 파일로 인식시켜 의심을 사지 않게 하는 방법도 있다. 결론적으로 실행 파일의 이미지를 특정 파일 포맷 예를들면 사진이나 동영상 같은 이미지로 교체하고 확장자도 혼란스럽게 하여 사용자의 부주의를 통해 실행시키는 방식이다. 이러한 방식들은 아래에 설명하기로 한다. 


- 앞에서 언급한 스크립트 파일들. [ .js  .vbs  .hta  .wsf  .chm  .bat  .ps1 ]


- RLO

  먼저 charmap.exe를 실행하면 문자표라는 애플리케이션이 뜬다. 아랫 부분에 "유니코드로 이동"이라는 부분과 오른쪽에 빈 칸이 있다. 이 빈 칸에 202E 입력한다. 맨 왼쪽 맨 위에 아무것도 보이지 않는 빈 칸이 보인다. 마우스로 대보면 "U+202E: Right-To-Left-Override"라고 나온다. 이것을 클릭하고 아랫 부분에 복사를 누른다. (참고로 복사할 문자 부분에서 눈에는 보이지 않으므로 복사된건지 확인하기 힘들다)

  이후 실행 파일의 이름을 " aaa4pm.exe " 로 바꾼 후 aaa 바로 다음 부분에 커서를 두고 붙여넣기를 해보자. 그렇다면 " aaaexe.mp4 " 처럼 변경되는 것을 볼 수 있다. 이제 애플리케이션의 이미지만 바꾸면 동영상 파일로 착각할 수 있게된다. 이름 부분도 충분히 쓸데없이 길게 영어를 섞어서 해주면 잘 모를 것이다.


- .lnk

  바로가기 파일이다. 사용자로서는 바로가기 파일을 악성코드로 인식하기 어려울 수 있다. 바로가기 파일은 내부적으로는 실행 파일의 경로를 저장하고 있다가 더블클릭되면 해당 실행 파일을 실행시켜주는 파일이다. 속성을 눌러서 대상 부분을 보면 실행할 프로그램의 경로가 나와있다. 이것을 다음처럼 수정할 수 있다.


C:\Windows\System32\cmd.exe /c C:\Users\longa\Desktop\EJDbg\example2.exe


  위의 예는 cmd 명령어를 이용한 방식으로서 한계가 존재할 수 밖에 없다. 현재 주로 사용되는 방식을 알아보겠다. 물론 이것들도 모두 원래 실행할 프로그램의 경로가 존재해야 하는 곳에 특별한 값들을 집어넣는 방식이다.


  첫번째는 파워쉘이 있다. 앞에서도 말했듯 기본적인 cmd 명령어는 수행할 수 있는 능력에 한계가 있다. 하지만 파워쉘은 훨씬 많은 기능이 제공되기 때문에 다운로더로서도 그리고 다운로드 받은 악성코드를 실행하는 기능도 사용 가능하다. 


  두번째는 스크립트 언어이다. 해당 폼에는 명령어나 파워쉘 외에도 JavaScript(.js), VBScript(.vbs), VBScript Encoded Script(.vbe) 등의 스크립트 언어를 사용할 수 있다. 


- .scr

  화면 보호기 파일. 실행 가능하다.


- .pif

  오래된 확장자로서 중요한 부분만 설명해 보자면 윈도우의 로더의 경우 이 확장자를 가진 파일이 실행 가능한 파일이라면 실행시켜 준다. 예를들어서 아무 실행 파일의 확장자를 pif로 바꾸어 보면 exe 형태였을 때와 마찬가지로 실행 파일처럼 실행된다.


- .cpl

  dll과 동일하다고 할 수 있다. 차이점은 exe처럼 직접 실행 가능하다는 점이다. 실제로는 rundll32.exe를 통해 실행된다.





3. 문서 쪽 정리

  먼저 MS Office 쪽부터 설명하겠다. 기본적으로 매크로가 있으며 위에서 설명하였다. 그리고 오피스 애플리케이션들의 파일 포맷 취약점을 이용한 익스플로잇이 있을 것이다. 참고로 Office 관련 파일들 외에도 rtf도 많은 공격에 이용되고 있다. 또한 요즘에는 잘 알려지지 않았던 DDE (Dynamic Data Exchange)를 이용한 공격이 많아지고 있다.


  다음으로는 PDF가 있을 것이다. PDF에서는 JavaScript가 사용될 수 있다. 물론 브라우저처럼 어도비 리더도 샌드박스를 구현하여 방어 메커니즘을 가지고 있다. 많은 취약점은 샌드박스 우회 및 코드 실행을 위해 자바스크립트를 이용하여 취약점 공격을 통해 셸코드를 실행한다.



Posted by SanseoLab

블로그 이미지
Malware Analyst
SanseoLab

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.3
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
31

최근에 올라온 글

최근에 달린 댓글

글 보관함