Malware Analysis
악성 코드 분석
- 악성 코드 분석이란?
먼저 악성 코드에 대해서 알아보자. 악성 코드란, 컴퓨터 사용자의 승인 없이 컴퓨터에 침투하거나 설치되어 악의적인 행동을 하는 프로그램이다. 이는 악성 프로그램이 갖고 있는 그 자체의 특징보다는 만들어낸 사람의 의도에 기초하여 악성 코드 여부가 결정된다. 컴퓨터 바이러스(Virus)와 웜(Warm), 트로이 목마(Trojan horse), 스파이웨어(Spyware)가 대표적이며, 해롭고 불필요한 소프트웨어들은 모두 악성코드에 범주에 속한다. 과거에는 바이러스가 유일한 악성 프로그램이었지만 최근에는 네트워크를 이용하여 전파되는 웜, 트로이목마, 분산 서비스 거부 공격(DDOS), IRC를 이용한 IRC Bot, 스파이웨어 등 다양해졌으며 감염전파 방법과 속도의 향상으로 우리에게 많은 위협이 되고 있다.
악성 코드를 분석하는 방법은 크게 정적분석(Static Analysis)과 동적분석(Dynamic Analysis) 두 가지로 나눌 수 있다. 정적 분석은 디버거와 디스어셈블러를 이용하여 실제 악성코드를 직접 실행하지 않고 디버깅하거나 코드를 분석하는 방법이며 동적 분석은 제한된 실행 환경 내에서 직접 실행해봄으로써 동작 과정 및 시스템 내에서의 행위를 모니터링 하는 방법이다. 정적 분석의 한 방법인 소스 분석은 프로그램의 동작을 가장 정확하게 이해할 수 있는 방법이며, 특정지식과 많은 연구가 필요하여 사용의 어려움이 따른다. 동적 분석의 경우에는 악성소프트웨어가 파일시스템이나 레지스트리, 네트워크를 변화시키는 과정과 다른 장치나 네트워크와 통신하는 과정 등을 자세히 관찰하여 분석하는 방법 등을 이용한다.
※ 이미지 출처 http://www.nextline.net/?inc=support&html=pds_view&no=149&name=%C0%A9%B5%B5%BF%EC%C1%EE&home=
※ 본문 내용 참고 : 리버스 엔지니어링 - 역분석 구조와 원리, 관리자를 위한 악성프로그램(Malware) 분석방법 - KISA
- 악성 코드 분석의 예
악성 코드 분석에 사용할 샘플을 구하기란 쉽지 않다. 악성 코드의 특성상 변종이 많고, 문제를 발생시킬 수 있기 때문에 공개하지 않기 때문이다. 우리는 몇 가지 툴을 이용하여 기초적인 단계에서 악성 코드를 분석하려 한다. 정적 분석과 동적 분석 두 가지 방법을 모두 사용하여 악성 코드를 분석하려고 한다. 우리가 하고자 하는 일은 다음과 같다.
‣ shadowbot 이라는 악성코드를 정적, 동적방법을 사용하여 분석.
이를 위해선 악성 코드 분석에 활용하기 위한 몇 가지 툴이 필요하다. 이는 다음과 같다.
‣ VMware ‣ BinTex ‣ Wireshark ‣ PEiD ‣ UPX
BinText는 http://www.mcafee.com/kr/downloads/free-tools/bintext.aspx 에서 다운로드 받을 수 있으며, Wireshark는 http://www.wireshark.org/, PEiD http://www.peid.info/에서 UPX는 http://upx.sourceforge.net/에서 다운로드 받을 수 있다.
※ 튜트리얼은 BinText 3.03, md5sums 1.2, Wireshark 1.6.0, PEID 0.95, UPX 3.07을 사용하여 제작되었다.
1. 악성 코드 분석을 위해 통제된 환경을 구성해야 한다. 악성코드가 실행될 머신은 외부와 연결이 되지 않아야 한다. (네트워크 연결을 Host-only로 설정한다.) 그리고 게스트 운영체제에서 네트워크 설정을 다음과 같이 설정한다.
2. 악성 코드는 패킹되어 있다. 이를 언패킹을 해야 한다. 물론 동적 분석시에는 언패킹을 하지 않아도 상관없지만 정적 분석시에는 언패킹을 한 후에 디버거를 통해서 분석을 해야 한다. 패킹 여부는 PEiD를 통해 shadowbo.exe를 로드한 후 확인할 수 있다. 로드하면 다음과 같은 메시지가 출력될 것이다.
upx로 패킹되었다는 뜻이다. 이를 upx를 이용하여 언패킹 해야 한다.
언패킹한 후, 다시 PEiD를 통해 shadowbo.exe를 로드해보자. 언패킹 된 것을 확인할 수 있다.
3. 정적 분석이 기초인 스트링 추출을 해보겠다. BinText를 이용하여 shadowbo.exe를 로드해보자. GO 버튼을 누르면 다음과 같은 스트링들이 추출될 것이다.
스트링을 보면 다음 같은 함수들과 특이한 문자열들을 확인할 수 있다. 이것을 통해 이 악성코드가 무슨 일을 할 지 추측해 볼 수 있다.
WriteProcessMemory Load 할 dll 이름이다. CreateToolhelp32Snapshot snapshot을 찍는다. RegSetValueExA 레지스트리에 등록한다. CoInitialize com 오브젝트와 관련된 함수이다. 초기화. CloseClipboard 클립보드를 닫는 함수이다. OpenClipboard 클립보드를 닫는 함수이다. InternetReadFile 인터넷에서 파일 다운 후 실행한다. InternetOpenUrlA 해당 URL을 통해 접속한다. Explorer.exe 인젝션할 파일일 것이다. PING, PING, JOIN, PRIVMSG IRCBot 일 가능성이 높다. lol lol lol :shadowbot 이름의 유래가 된 스트링이다.
4. 이제 Wireshark를 이용하여 동적 분석을 해보자. darkjester.xplosionirc.net 도메인에 대한 질의를 하고 있는 것을 알 수 있다. DNS 쿼리를 보낸다는 것은 해당 서버에 접속하기 위해 IP를 받아 오기 위함이다.
5. 우리는 이런 분석을 통해 해당 악성코드가 미리 정의된 IRC 서버와 채널에 연결을 시도하며, 해당 URL로 접속을 하게 되면 좀 더 구체적인 행동들을 할 수 있을 것이라는 추측을 할 수 있다. 사실, 해당 악성코드를 Filemon과 Regmon 툴을 이용하면 레지스트리에 파일을 생성하는 것도 확인할 수 있지만, 다루지 않겠다.
※ 본문 내용 참고 :
블로그 (http://datax.co.kr/board/board.php?id=security&articleNo=12&good=1)
블로그 (http://02ab.tistory.com/entry/Shadowbot-악성코드-동적분석)