악성코드 분석 방법
악성코드를 분석하는 방법에 대하여 설명드리겠습니다. 일반적으로 언급되는 4가지 방법을 기준으로 정의하여 정리하였습니다.
위의 그림에서 보듯이 자동화 분석, 정적 분석, 동적 분석, 상세 분석과 같이 4가지 항목으로 분류 할 수 있습니다.
화살표가 나타내는 난이도란, 분석가의 입장에서 이러한 방법을 사용할 때 필요한 시간, 지식등을 고려해봤을 때에 난이도를 나타낸 것입니다.
이제 한가지씩 집어 가면서 설명드리겠습니다.
자동화 분석
자동화 분석은 악성코드의 급격한 증가로 인해 점차 이에 대하여 많은 시간과 인력이 필요하게 되었다. 하지만 모든 악성코드를 수동으로 분석하기에는 이러한 요소들이 많이 부족하다. 그렇게에 악성코드를 자동으로 분석해주는 방법이 지속적으로 나오고 있고, 현재 이러한 자동화 분석 도구가 상용이나 무료로 많이 배포되기 때문에 이들을 이용하면 된다.
자동화 분석이 장점만을 갖는 것은 아닙니다. 자동화라는 단어에서와 같이, 해당 도구는 제작된 형태로만 작동한다는 것이다. 많은 오류를 범 할 수 있고. 만약 악성코드가 특정한 명령어 옵션을 필요로 할 때, 자동화 도구들은 이를 명령어 없이 실행하는 경우가 있다. 이 경우 악성코드는 악의적인 행위를 하지 않으므로, 악성코드라 판별되지 않을 수 있다는 단점이 있다
정적 분석
정적 분석이란 악성코드를 실행하지 않고 그 자체가 갖고 있는 내용들을 통해 악의적인 여부를 진단하는 것이다. 그렇기에 비교적으로 쉽고 빠르며, 별도의 지식 없이 이러한 정보들을 수집할 수가 있다. 모든 파일들은 자신만의 해쉬를 갖거나, 사용되는 API, 그리고 문자열 등을 갖는다
이외에도 EXE, DLL, SYS 등의 경우 PE 구조를 가지고 있는데, 이러한 PE 구조에서 악성 행위와 관련된 정보들을 파악할 수가 있다. 사용되는 API와 문자열의 경우 중요한 정보를 갖는다. 사용되는 API의 목록을 가지는 IAT(Import Address Table)의 경우 어떠한 DLL을 필요로 하며, 해당 DLL에서 어떠한 함수를 사용하는지 확인할 수 있다.
정적 분석의 사용할 수 있는 도구
동적 분석
악성코드 파일을 실행하지 않는 정적 분석과는 다르게, 동적 분석은 해당 파일을 실행하므로 나타나는 변화를 모니터링하며 어떠한 기능을 수행하는지를 확인하는 분석 방법입니다. 악성코드 파일이 실제 악성 행위를 할 수 있으므로, 가상 환경에서 동적 분석을 수행해야 합니다. 가상 환경에서 독립된 네트워크와 같이 필요한 설정들을 구축한 뒤 동적 분석 도구들을 통해 어떠한 동작을 하는지 확인해야한다.
먼저, 악성코드 파이를 실행했을 때 생성되는 프로세스를 살펴보아야 하며, 어떠한 이름의 프로세스가 생성되는지 확인해야 한다. 프로세스를 모니터링하는 것이 중요한 이유는, 악성코드를 실행했을 때, 윈도우 기본 프로세서와 같은 이름인 svchost.exe나 explorer.exe처럼 생성되는 경우가 있기 때문이다. 프로세스 모니터링에는 작업 관리자를 통해서 모니터링 할 수 있지만, Process Explorer 툴을 이용한다면 어떠한 DLL을 포함하고 있는지 까지 상세하게 분석 할 수 있다.
악성코드가 프로세스를 진행하며 어떠한 파이에 변화가 생기는지 확인하는 것 또한 중요하다. 파일과 관련된 악의적인 기능으로 랜섬웨어 같이 파일이 암호화되는 경우도 있지만, 그 외에도 특정 파일이 생성되거나 삭제되는 경우도 있다.
레지스트리의 경우 남겨진 파일과 관련하여 윈도 부팅 시 자동으로 실행되게 하거나, 서비스로 등록하여 이후에 확을 더 어렵게 만든다.
HKLM\SOFTWARE\MIcrosoft\Windows\CurrentVersion\Explorer\Run
HKLM\SOFTWARE\MIcrosoft\Windows\CurrentVersion\Run
- Run 키에 등록된 파일은 Windows OS가 시작할 때 자동으로 실행됩니다.
HKLM\SYSTEM\CurrentControlSet\Service\
- Service 키에 등록된 파일은 Windows OS가 시작할 때 자동으로 서비스에 등록됩니다.
네트워크의 경우, 어떠한 곳과 어떠한 네트워킹이 일어나는지 파악하는 것이 중요합니다. 악성코드가 네트워크를 통해 특정한 곳에서 추가적인 파일을 다운로드할 수가 있으며(CnC server를 이용하여), 네트워크 기능이 추가된다면 패킷에 대하여 분석도 필요합니다.
위의 그림은 정적 분석에 사용되는 도구들을 정리한 것인데, 상황에 따라 더 많은 도구가 필요하고, 더 적은 도구가 필요하기도 합니다. 각 도구에 대하여 사용방법을 알고 있어야 합니다.
동적 분석의 가장 큰 단점이란, 해당 파이를 실행해야 한다는 것이며, 실제 환경에서 감염되기 때문에, 이후 이를 치료하거나 다시 실행 환경을 만들기에 큰 위험성이 따른다. 그러므로 대개 가상 환경에서 분석을 진행하며, 가상 환경에서 실행을 진행할 시 악성코드 실행 전에 스냅샷을 찍어놓은 다음 악성코드 실행하는 것을 추천 드립니다.
상세분석
악성코드에 가장 자주 쓰이는 C와 C++등으로 코드를 작성하면 컴파일을 진행하는데, 컴파일은 해당 언어로부터 하드웨어가 읽을 수 있도록 하기 위한 2진수 코드로의 변환작업입니다. 이렇게 2진수로 된 코드는 인간이 읽을 수 없어서 디스어셈블이라는 과정을 필요로 합니다. 디스어셈블을 통해 2진수 코드에서 어셈블리 언어로 변환이 이루어진다. 디스어셈블링된 코드를 통해 상세 분석이 가능해진다.
상세 분석 과정에서 사용되는 도구는 다른 과정보다 적다. 목적에 따라 사용방법이 조금씩 다르지만, 하지나의 도구를 잘 다루는 것이 어중간하게 여러 개 다루는 것보다 좋다.
디스어셈블링을 통한 분석은 많은 정보를 주지만, 그만큼 과정이 어렵고 중요한 정보를 찾는 것이 어렵다 안티디버깅 기법으로 이루어져 있을 경우 두배나 까다롭기 때문이다.
'악성코드 분석' 카테고리의 다른 글
악성코드의 자주 사용되는 DLL 파일 정리 (0) | 2020.01.03 |
---|