다형성 기법의 악성코드 Parite 분석 보고서


▲ 김상훈 (주)잉카인터넷 시큐리티대응센터





■ 폴리모픽 기법 바이러스와 악성코드의 미래

알려진 첫 MS-DOS 용 바이러스인 브레인 바이러스(Brain Virus)가 1986년에 나온지도 올해도 23년이 지났다. 당시에 부트 레코드를 감염시킨 이 바이러스는 파키스탄인인 개발자 2명이 자신들이 만든 프로그램을 불법 복사하는 사람들에 대한 한풀이(?)로 만들어서 퍼트린 것으로 전해지고 있다.

1980년대 전세계적으로 수십종 많아야 수백종으로 알려진 각종 악성코드들은 현재는 하루에만도 수천종이 발견되고 있는 것이 현실이다. 필자가 다니는 회사의 대표이사인 주영흠 사장이 고등학교 다닐 때 만든 타키온이라는 백신은 v37, v64와 같은 버전을 가지고 있었고, v37은 37개의 바이러스를 치료한다는 뜻이고, v64는 64개의 바이러스를 치료한다는 뜻이었다. 인터넷도 안되고 딱히 참고할 만한 문서도 없던 십몇년전 그때에 이런 백신을 만들었던 제1세대 대한민국 보안전문가들에게 찬사를 보내는 한편에는 고작 1년에 수십개의 악성코드가 나오던 그 시절의 바이러스 분석가들이 조금은 부럽다는 생각이 드는 것도 사실이다.

2009년 현재 필자의 회사는 하루에도 수십종, 수백종, 많은 날은 수천 단위의 새로운 악성코드를 발견하고 이를 업데이트함으로써 조금이라도 악성코드에 대한 피해를 예방하고자 하고 있으며, 필자 역시 바이러스 백신인 nProtect Anti-Virus/Spyware, 통합 PC 보안 제품인 nProtect Enterprise, 인터넷 사용자들의 안전을 담보하기 위한 nProtect Netizen 등에서 활용될 수 있도록 오늘도 새로운 악성코드를 분석하고 있다.

서론이 길었지만, 오늘 소개하고자 하는 악성코드는 Parite라는 전형적인 다형성 기법의 악성코드에 대하여 알아보고 이를 바탕으로 현재의 악성코드가 얼마나 발전했으며, 향후에는 어떤 식으로 발전할지 짧은 지면이지만 알아보기로 한다.

필자의 회사에서는 "Virus/W32.Parite.C"라고 진단하는 이 악성코드의 전체적인 특징을 요약하면 다음과 같다.

1. 다형성 바이러스(Polymorphic Virus): 파일이 감염될 때마다 바이러스 코드가 변하는 다형성 기법을 사용하여 백신 업체에서 진단/치료가 어렵도록 하는 기법의 바이러스
2. 후위형 바이러스: 악성 코드가 파일의 후위에 삽입된 바이러스
3. 암호형 바이러스: 백신 프로그램이 진단할 수 없게 하기 위해서 바이러스 프로그램의 일부 또는 대부분을 암호화하는 기법
4. 파일 감염형: 바이러스 코드가 원하는 Windows API 함수를 Load 하여 특정한 행위를 하기 위해 Kernel32.dll의 Import Address Table과 Import Name Table 값을 변경
5. 스파이웨어 기능: UDP 30167 Port를 Open함으로써 특정 웹 서버로 접속을 시도하는 것으로 추정되나 동작은 확인되지 않음
6. USB 전파형: 감염된 PC에 연결되는 각종 외장형 장치를 통하여 감염 확산
7. 네트워크 전파형: 감염된 PC의 네트워크 공유 자원을 활용하여 감염 확산

잘 모르는 사람이 보면, 위와 같은 기능을 가진 아주 대단한 유형의 악성코드로 보이겠지만, 요즘은 위에 있는 수준의 악성코드 기법은 아주 일반적인 수준이라고 생각해도 무방할 정도로 바이러스의 기술 수준이 높아진 것이 현실이다.

악성코드는 정상 파일의 EP 를 변경하고, 파일 후위에 먼저 변화되지 않는 복호화 코드가 삽입되며, 이 코드는 이후에 오는 암호화된 Virus 코드를 풀기 위하여 사용된다. 이후에 오는 실제 바이러스 코드는 아래의 그림처럼 GetTickCount() 함수를 통하여 System Time을 얻어온 후 그 값을 이용하여 랜덤하게 암호화를 진행한다.

이렇게 감염된 악성코드는 아래의 그림과 같이 암호화되게 되며, 그때 그때마다 판타지 소설에 나오는 마법사처럼 스스로를 변화시킴으로써, 통상의 시그니쳐 기반의 바이러스 탐지 기법으로는 탐지할 수 없게 된다.

최근에 유행하고 있는 파일 바이러스는 대부분 이러한 다형성 기법을 이용하고 있다. 아직까지도 그 맹위를 그칠 줄 모르는 Virut 이나 Alman 의 여러 변종들 또한 유사한 기법을 사용하고 있어서 많은 바이러스 분석가들의 야근에 지대한 공헌을 하고 있다.

Parite는 다형성 바이러스이기 때문에 분석하는 데에도 의미 없는 코드가 많아서 그 코드를 이해하고 파악하는 데 많은 어려움과 시간 투자를 하게 만들었으나, 실제 진단과 치료 함수를 제작하는 데에는 상대적으로 그리 많은 시간이 걸리지 않았다. 암호만 풀면 그저 그런 바이러스였던 것이다. 하지만, 악성코드가 발견되고 그 감염이 확산되어 많은 사람들에게 피해를 주기 전에 가능한 빠른 시간 안에 이를 치료해야 하는 백신 업체인 필자 회사로써는 피 말리는 시간과의 싸움을 할 수 밖에 없으며, 이런 악성코드를 만들어서 배포하는 해커는 이러한 상황을 알고 최대한 분석하는데 시간을 끌기 위한 방법으로써 다형성 기법을 이용하고 있는 것이 현실이다.

요즘의 바이러스는 그냥 시스템의 파일을 파괴하는 수준에서 끝나는 경우는 매우 드물다. 사용자가 입력하는 키보드 입력값을 후킹함으로써 각종 계좌 번호, 비밀 번호를 훔쳐간다든지, 광고 프로그램을 자기도 모르게 설치하게 해버린다든지, 또는 하드디스크에 저장된 주요한 파일들을 빼돌림으로써 이를 이용한 2차적인 피해를 야기시키는 목적으로 만들어지는 것이 대부분이며, 따라서 단순한 감염에 의한 시스템 자원의 낭비 정도에 끝나던 예전에 비하여 악성 코드의 피해가 훨씬 더 큰 것이 현실이다.

이러한 악성코드의 피해를 방지하는 방법은 이런 글이 있을 때마다 나오는 것처럼 윈도우의 업데이트와 같은 것을 자주 실행하여 최대한 보안상의 취약점을 줄이고, 가지고 있는 바이러스의 패턴을 최신으로 유지하며, 자주 잊지 말고 자신의 PC를 점검하는 것이 필요하다.

바이러스는 예전에 비하여 매우 다양한 기법을 차용하여 진화해오고 있다. 솔직히 보안 업체의 분석가로 근무하고 있지만, 향후의 바이러스가 어떻게 진화할지 확신하기도 쉽지 않다. 그러나, 최근 신종 플루 바이러스의 변종이 출현했다는 각종 뉴스에 나타나는 것처럼 바이러스를 차단하는 백신에 대항하여 스스로 진화해 진화를 거듭해 갈 것이다. 누가 컴퓨터 악성코드의 이름으로 바이러스라는 이름을 명명했는지는 잘 모르지만, 정말이지 생물학적인 바이러스가 수억년 동안 진화에 진화를 거듭해 오면서 얻은 생존 방법을 지난 수십년동안 빠르게 흡수하며 진화해 오고 있다.

그러나, 적지 않은 사람들이 고통을 받고 심지어는 목숨까지도 앗아가고 있는 신종 플루라 할지라도 이를 예방하고 치료하는 백신을 개발해 내는 것처럼, 또 다른 형태의 컴퓨터 바이러스라 할지라도 보다 많은 끈기와 노력을 가지고 분석하면 어떤 형태의 악성코드도 잡아낼 수 있을 것이라고 믿어 본다. 또한 이러한 노력이 나 하나 뿐이 아니라, 내 옆에서 함께 밤을 지새우는 동료가 있어서 우리의 바이러스와의 전쟁은 결코 쉽게 지지 않을 것이라는 생각을 가져 본다.

저작권자 © 아이티데일리 무단전재 및 재배포 금지