이 글은 SANS ISC의 Malware modularization and AV detection evasion을 번역한 글입니다.

맬웨어의 모듈화는 오래전부터 이미 알려졌던 부분입니다. 맬웨어 제작자들은 다양한 모듈을 만드는법으로 쉽게 맬웨어의 기능을 확장할 수 있으면서도 분석을 어렵게 만들어 왔습니다. 이렇게 하는 이유는 간단합니다. 가령 온라인 뱅킹을 공격하는 악성코드의 경우 특정 은행을 공격하는데 상관없는 모듈은 다운로드 및 설치를 하지 않습니다. 이렇게 되면 안티바이러스 회사에서 공격자가 보유하고 있는 모든 모듈을 수집하는게 더 어려워집니다. 이렇게 높은 수준으로 모듈화된 악성코드로는 Clampi가 있습니다. 시만텍 웹사이트에서 이미 Clampi와 관련된 글을 연재한 적이 있습니다.

공격자는 모듈화를 이용해서 악성코드의 핑거프린트를 급격하게 바꿀 수도 있습니다. 특정 모듈이 안티바이러스에게 탐지되면 해당 모듈만 변경해버리면 됩니다. 계속 변종이 나오는 것 때문에 안티바이러스 회사가 공격자를 따라잡는게 상당히 버겁습니다.

며칠 전 매우 간단한 악성 파일이 보고된 적이 있습니다. 이 파일은 윈도우 7 운영체제의 /Windows/SysWOW64 디렉터리에서 발견되었는데, netset.exe라는 파일 이름을 가지고 있었고 서명되지 않은 파일이기 때문에 금방 눈에 띄었다고 합니다. 문제는 VirusTotal에 올려봤지만 40개나 되는 엔진 중 어떤 엔진도 이 파일을 악성이라고 진단하지 않았다는 점입니다.

심지어 Anubis를 이용해서 악성 코드를 분석해봤는데도 수상한 점을 하나도 발견해내지 못했습니다. 이제는 눈으로 직접 코드를 분석해보는 방법 밖에 없었죠.

딱히 악성이라고 말하기는 어렵지만 맬웨어의 일부분인 것은 확실했습니다. 이 바이너리의 목적은 사용자가 특정 안티바이러스 프로그램을 돌리고 있는지 여부를 알아내는 것이었습니다. 안티바이러스 존재 여부는 exit 코드 값으로 리턴하게 되어있었습니다. 흥미로운 부분은 이 프로그램의 은폐 기능이었습니다.

먼저 이 맬웨어는 명령줄 매개변수와 함께 실행되어야 합니다. 매개변수는 s나 t로 시작되는 어떤 문자열도 가능합니다. 만약 문자가 발견되지 않으면 관련 파일들(dtnet.exe, plang.enu, dsten.log)을 삭제하고 종료해버립니다.

만약 정확한 매개변수가 들어오면, 이 바이너리는 시스템에 설치된 모든 응용 프로그램에 대한 정보를 담고 있는 HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Uninstall 레지스트리 키를 열게 됩니다. 그 다음 하위 키 중에 avast, avg, avira, nod32, kaspersky, norton, mcafee, trend micro, comodo가 존재하는지 확인합니다. 안티바이러스를 발견할 때마다 카운터가 하나씩 증가하고 리턴 코드 값으로 이를 반환하게 됩니다. 다른 맬웨어는 이 바이너리를 이용해서 안티바이러스의 동작 여부를 알아낼 수 있습니다.

이 파일은 굉장히 단순하지만, 단순한만큼 자동화된 분석으로 이런 파일을 잡아내기가 어렵습니다. Anubis 같은 에뮬레이터를 쓰더라도 매개변수가 안 맞으면 정상적인 파일인 줄 알고 넘어가기 쉽죠. VirusTotal 결과에서 봤던 것처럼 시그니처 기반의 스캐닝에서 벗어나기도 쉽습니다.