-
악성코드 분석 방법론 (1) - 요약Malware/study 2013. 11. 29. 02:58
※ 주의사항
아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.
악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.
해당 문서의 저작권은 해당 저자에게 모두 있습니다. 다른 용도로 사용할 시 법적 조치가 가해질 수 있습니다.
수집된 악성코드를 분석하는 방법은 크게 3가지로 분류할 수 있습니다.
그 3가지 방법은 일반적으로 초기분석, 동적분석, 정적분석이라고 말합니다.
( 사람에 따라 정적분석, 동적분석, 상세분석이라고 말하기도 합니다. )
하지만, 이것은 분석방법을 절차적인 방법으로 설명하고자 할 때 일반적으로 분류하는 방법입니다.
악성코드 분석의 방법론은 분석하는 사람의 실력, 스타일, 작업환경에 따라 매우 다양한 형태로 바뀔 수 있습니다.
가령, 정적분석에 있어서 실력이 뛰어난 사람은 정적분석을 통해 동적 행위를 하는 함수와 결과들을 찾는 방식으로 악성코드를 분석하기도 합니다.
앞서 언급한 일반적인 악성코드 분석 방법론에서 초기분석, 동적분석, 정적분석에 대한 설명은 다음과 같습니다.
1. 초기분석
초기분석은 이름이 의미하는 것과 같이 수집된 악성코드를 맨 처음으로 분석하는 방법입니다.
수집된 악성코드를 따로 실행하지 않고, 그 외형을 보고 분석을 하는 단계입니다.
가장 먼저, 수집된 악성코드를 virus total에 업로드하여 확인해보는 방법이 있습니다.
위의 그림은 바이러스 토탈 웹 페이지( www.virustotal.com )의 화면입니다.
이곳에 수집된 악성코드나 의심스러운 파일을 업로드하면,
전세계 최대 43개의 안티-바이러스 엔진을 이용하여 진단을 해줍니다.
위의 그림은 바이러스 토탈에 의심스러운 파일을 업로드하여 검사를 해본 결과입니다.
위와 같이 여러 안티-바이러스 엔진을 이용하여 수집된 악성코드 파일을 검사해,
기존에 알려진 악성코드인지, 여러 안티-바이러스에서 어떤 파일로 판단하고 있는지를 알 수 있습니다.
다음으로 파일의 외형 즉, 확장자를 보고 동작을 유추하는 방법이 있습니다.
위와 같이, 악성코드 실행파일이 가진 확장자의 특성을 통해 '이 파일이 어떤식으로 동작할 것이다'라는
정도의 정보를 유추해낼 수 있습니다.
그 다음으로는 Packing(실행파일 압축) 여부를 확인하는 방법이 있습니다.
Packing은 실행파일을 압축하는 기술로 실행파일의 크기를 줄이거나, 디버깅을 방지하는 목적 등
몇가지 목적에 의해 적용을 합니다.
일반적으로 많은 악성코드 파일에 Packing이 적용되어있는데, 그 이유는 악성코드를 담고 있는
파일의 크기를 줄여 좀더 빠르게 유포하고 악성코드 파일을 디버깅하기 어렵게 만들어 빠른 대응을 방해하기 위해서 입니다.
만약 Packing이 되어 있다면, 위와 같이 Packing 정보를 확인하는 툴을 이용하여
어떠한 Packing이 적용되어 있는지를 확인하고 Unpacking 해야 합니다.
( 때로는, 리버싱 기술을 이용하여 직접 패킹을 풀어야 하는 경우도 있습니다. )
Packing이 되어있지 않거나 Unpacking을 통해 Packing을 풀었다면,
악성코드 파일로부터 문자열들을 추출하여 해당 파일에서 드러나는 함수명 등을 수집하고,
그것을 이용해 악성코드에서 호출하는 함수들을 통한 동작을 유추할 수 있습니다.
위 그림에서 보는 것과 같이, 실행압축 상태의 파일과 실행압축이 해제된 상태의 파일에서 얻을 수 있는 문자열 정보는 양적에서나 질적에서나 엄청난 차이가 납니다.
위와 같이 악성코드 파일을 실행하지 않고, 파일의 외형이나 간단히 들여다 볼 수 있는 정보들을
이용하여 악성코드의 동작방식을 유추할 수 있는 단계를 초기 분석이라고 합니다.
2. 동적분석
동적 분석은 악성코드를 분석환경에서 실행시킨 직후부터 순간순간 시스템의 변화를 분석하는 단계입니다.
동적 분석을 하는 방법은 여러가지가 있습니다.
먼저 프로세스의 변화를 실시간으로 확인하는 방법입니다.
악성코드가 동작하려면 프로세스의 형태로 동작될 것이기 때문에 새로운 프로세스가 생길 것입니다.
따라서, 실시간으로 프로세스의 변화를 확인하고 있으면 악성코드가 어떠한 프로세스를 생성했는지 확인할 수 있습니다.
다음으로 파일시스템의 변화를 실시간으로 확인하는 방법입니다.
현재 동작하고 있는 파일들의 상태를 감시하면, 악성코드가 새로운 파일을 생성하거나,
기존의 파일을 수정, 삭제하는 등의 동작을 확인할 수 있습니다.
이이서, 레지스트리의 변화를 실시간으로 확인하는 방법입니다.
특정 악성코드는 시스템의 레지스트리를 조작하여 자신이 원하는 정보를 입력하거나,
중요한 레지스트리를 삭제하여 시스템에 악영향을 미칠 수 있습니다.
따라서, 레지스트리의 변화 또한 실시간으로 감지하여 악성코드가 어떤 동작을 하는지 확인할 수 있습니다.
또 다른 방법으로 네트워크의 변화를 실시간으로 확인하는 방법입니다.
어떤 악성코드는 희생자 PC에 침투하게 되면 공격자에게로 자신이 수집하거나 탈취한 정보를
네트워크를 통해서 보내는 동작을 취하게 됩니다.
또는 외부로부터 네트워크를 통해 명령을 받아 그 명령에 맞게 동작하는 악성코드들도 있습니다.
따라서, 네트워크의 변화 역시 실시간으로 감지하여 악성코드가 어떤 동작을 하는지 확인할 수 있습니다.
이 외에도 많은 방법들이 있지만 현재 제 지식으로는 설명할 길이 없어 차근차근 추가해 나가도록 하겠습니다.
위와 같이 악성코드 실행 시점부터 시스템의 변화를 감지하고 분석하여 악성코드가 어떠한 동작을 하는지를 분석하는 단계를 동적분석이라고 합니다.
3. 정적분석
정적분석은 악성코드 파일을 디스어셈블하여 아주 세부적인 동작을 분석하는 단계입니다.정적분석을 하는 방법은 실행파일 만을 가지고 프로그램의 구조를 역분석하는 리버스 엔지니어링 이라는 기술을 활용할 수 있습니다.만약 내가 만든 프로그램이라면, 그 프로그램의 구조와 동작 원리, 사용된 함수들 혹은 필요로 하는 인자 등프로그램에 대한 모든 것을 알고 있을 것입니다.위와 같이 C가 되었든, JAVA가 되었든 프로그램을 이루고 있는 소스코드 또한 알고 있을 것입니다.
하지만, 분석을 위해 수집된 악성코드는 앞서 본 것과 같이 소스코드가 주어지지도,악성코드에 담겨진 소스코드에 대한 어떠한 정보도 주어지지 않을 것입니다.그렇다면 악성코드를 분석하는 사람은 수집된 실행파일, 혹은 DLL 형태의 파일만을 가지고해당 파일이 가진 동작, 구조, 원리 등 모든 부분을 알아내야만 합니다.이렇게 수집된 악성코드 파일만을 가지고 프로그램을 역분석하는 기술을 리버스 엔지니어링이라고 하고,일반적으로 잘 알려진 OllyDbg, ImmunityDebugger, IDA pro 같은 Tool을 이용하여 역분석을 합니다.위의 그림은 Immunity Debugger를 이용하여 실행파일을 불러온 불러온 화면입니다.역분석을 위해 Tool을 이용하여 파일을 읽어오면 소스코드가 어셈블리화 되어 나타납니다.이렇게 실행파일로부터 읽어온 어셈블리어 명령들을 이용하여 악성코드가 어떤 함수를 이용하지는지,전체적인 동작은 어떤 순서로 이루어지는지, 동작의 결과는 어떻게 되는지 등의 상세한 정보를 알아낼 수 있습니다.위의 그림은 IDA pro를 이용하여 실행파일을 불러온 화면입니다.이처럼 실행파일을 분석하고 프로그램의 분기를 그래프화 해주는 Tool을 이용할 수도 있습니다.위와 같이 악성코드 파일을 역분석하여 그 구조를 알아내고, 핵심이 되는 명령부분, 더 자세한 동작방식 등을 알아내고 분석하는 단계를 정적분석이라고 합니다.( 정적분석 부분은 추후 더 많이 공부하여 내용 보충 하도록 하겠습니다. )다시한번 정리하면, 수집된 악성코드를 분석하려면 여러가지 방법을 이용하여야 합니다.
그 방법들은 크게 초기분석, 동적분석, 정적분석의 순서로 3가지 방법으로 분류할 수 있습니다.이 큰 틀을 따라 여러 세부적인 방법으로 악성코드를 분석한다면,좀 더 넓고 정확하게 내가 분석하고자 하는 악성코드를 분석할 수 있습니다.'Malware > study' 카테고리의 다른 글
악성코드 분석 방법론 (3) - 동적분석 (3) 2013.12.03 악성코드 분석 방법론 (2) - 초기분석 (2) 2013.11.29