기초 정적 분석
안티 바이러스 프로그램
기초 정적 분석을 시작하면서 가장 좋은 시작 단계는 안티 바이러스 프로그램을 통해 살펴보는 것이다.
이러한 안티 바이러스 프로그램들은 여러 기법들을 사용하는데
파일 시그니처, 행위와 패턴 매칭 분석을 주로 사용하는 시그니처 기법과
경험적 기법이라 불리는 Heuristic 기법이 있다.
시그니처 기법은 악성코드 제작자가 코드를 변조하여 프로그램 시그니처가 바뀌면 바이러스 스캐너를 우회할 수 있다는 단점이 있고
경험적 기법은 알려지지 않은 악성코드를 성공적으로 식별하지만 새롭고 독특한 악성코드는 이 기법을 우회 할 수 있다.
분석을 시작하면 이러한 여러 안티 바이러스 프로그램들에 악성 코드를 실행시켜 결과를 확인하는 것이다.
대표적인 웹 사이트는 바이러스토탈 (http://virustotal.com/) 이다.
파일을 업로드하여 앞서 말한 다양한 기법을 사용하는 안티 바이러스 프로그램에 돌리게 되고 분석한 내용을 확인할 수 있다.
각 엔진에서 악성으로 분류했는지의 여부와 악성코드를 어떤 이름으로 정의하고 있는지, 추가 정보들도 확인할 수 있다.
해시
해시에 대해서는 따로 설명하지 않고 악성코드에서 해시의 활용에 대해서만 말하려고 한다.
악성코드에 대해 해시값을 구하게 되면 이 해시값은 악성코드를 식별하는데 사용된다.
악성코드 분석에서 주로 사용되는 해시 함수는 SHA-1 과 MD5 이다.
이 해시 함수를 이용해 나온 해시 값을 통해 악성코드를 규정하고, 특정할 수 있으며 앞서 말한 바이러스 토탈과 같은 웹 사이트에서 검색도 가능하다.
문자열 검색
하나의 프로그램은 그 문자열이 의미가 있든 없든 많은 수의 문자열을 가지고 있게 된다.
특히 악성코드의 경우에는 URL에 접속하거나 네트워크를 이용하거나 하는 경우가 있기 때문에 문자열 검색이 더욱 중요하다.
일반적으로 문자열은 ASCII나 유니코드 포맷으로 저장되어 있다. 각각이 무엇인지는 따로 찾아보도록 한다.
문자열을 검색하는 프로그램으로는 Strings 프로그램이 있다.
Strings 프로그램을 통해 악성코드를 검색하게 되면 엄청난 수의 문자열을 볼 수 있을 것이다.
그 중에는 의미 있는 문자열이 있고 그냥 넘어가도 괜찮은 문자열들이 섞여 있다.
문자열 중 윈도우 라이브러리에서 사용하는 윈도우 함수들과 동적 링크 라이브러리(DLL) 과 같은 경우는
악성코드의 동작을 추측할 수 있기 때문에 의미 있는 문자열이라 할 수 있다.
123.123.123.123 과 같은 형식의 문자열은 딱 보면 알 수 있듯 IP주소로 특정할 수 있고 이 또한 의미 있다고 할 수 있다.
이 외에도 특정 문자열이 어떤 동작을 하는데 사용되는 문자열 이라는게 판단이 된다면 의미있는 문자열로 판단하고 확인해볼 필요가 있다.
패킹과 난독화
악성코드 제작자는 파일의 탐지와 분석에 어려움을 주고자 패킹과 난독화 기법을 사용한다.
난독화는 제작자가 은폐를 시도하기 위해 사용되고 패킹은 압축을 시켜 분석하기 어렵게 만드는 것이다.
앞서 나온 문자열 검색을 예로 들면 난독화와 패킹이 사용되면 문자열들이 올바르게 검색되지 않고
보기에 의미 없는 문자열들만 검색되게 된다.
패킹과 난독화가 이루어진 악성코드도 추가 함수를 로딩해 접근하기 위해 LoadLibrary와 GetProcAddress 함수는 가지고 있다.
패킹
PE 파일 헤더에서 링크 코드의 존재 여부를 알 수 있는 정보가 없어 정적으로 링크된 코드와 실행 파일의 자체 코드를 분간하기 어렵다.
런타임 링크는 실행 중에 링크하는 것으로 일반적으로는 자주 사용되지 않지만 패킹이나 난독화에 사용된다.
정적 링크와 다르게 프로그램이 시작할 때가 아니라 함수가 필요할 때만 라이브러리에 연결된다.
동적 링크는 악성코드 분석에 가장 흔하고 대중적으로 사용하는 방식이다.
라이브러리를 동적으로 연결하면 호스트 운영체제는 프로그램을 로드할 때 필요한 라이브러리를 검색한다.
프로그램이 링크된 라이브러리 함수를 호출하면 라이브러리 내의 함수를 실행한다.
이렇게 PE 파일 헤더는 로드할 라이브러리와 사용할 함수에 대한 정보가 있기 때문에 어떤 작업을 수행하는지 추측에 도움이 되기에 중요하다.
동적 링크 함수를 탐색하는 프로그램에는 Dependency Walker라는 프로그램이 있다.
Dependency Walker 프로그램은 파일을 올리면 동적으로 링크되는 함수만을 보여준다.
대표적인 DLL은 다음에 살펴보도록 하고 함수들에 대해 살펴본다.
임포트 함수
PE 파일 헤더는 앞서 말한대로 로드할 라이브러리와 함께 사용할 함수에 대한 정보를 가지고 있다.
알려진 윈도우 함수명은 자체로 실행파일이 무슨 행위를 하는지를 알 수 있게 해준다.
이 정보는 마이크로소프트 개발자 네트워크(MSDN, Microsoft Developer Network) 라이브러리를 통해 보다 자세하게 알 수 있다.
익스포트 함수
PE 파일 헤더에는 익스포트 함수의 정보도 담고 있다.
DLL은 하나 이상의 함수를 구현하며 임포트해서 실행파일이 재사용 할 때 사용할 수 있도록 해당 함수를 익스포트 한다.
일반적으로 DLL은 EXE가 사용하는 기능을 제공하기 위해 특별히 구현되었기 때문에 DLL에서 익스포트 함수를 가장 흔히 볼 수 있고
EXE에서는 드물다. 실행 파일 내에서 익스포트를 발견한다면 유용한 정보를 얻을 수 있다.
이렇게 나열한 것들이 기초 정적 분석에서 살펴보아야 할 것들이다.
하지만 맨 처음 나온 바이러스토탈 웹 사이트를 통해 살펴보면 다른 것들을 하나 하나 살펴보지 않아도 웬만한 정보들은 얻을 수 있으므로
가장 먼저 살펴보는 것이 좋다.
참고 <실전 악성코드와 멀웨어 분석, 에이콘>
'Security&Hacking > 악성코드' 카테고리의 다른 글
DDE(Dynamic Data Exchange) 공격 (0) | 2021.08.12 |
---|---|
악성코드 유형 (0) | 2020.04.21 |
악성코드 분석 기법 (0) | 2020.04.21 |
랜섬웨어(Ransomware) (0) | 2020.03.12 |