본문 바로가기
조치 가이드

패치드(Patched) 형태의 악성코드 변천사

by 알 수 없는 사용자 2012. 10. 18.

ASEC에서는 그 동안 악성코드에 의해 정상 윈도우(Windows) 시스템 파일을 변조시켜 악의적인 기능을 수행하는 패치드(Patched) 형태의 악성코드에 대한 정보들을 공개하였다.


특히 다양한 온라인 게임의 사용자 정보들을 탈취하는 온라인 게임 관련 트로이목마(OnlineGameHack)에 의해 온라인 게임의 메인 실행 프로세스의 주소 공간에 악성코드인  DLL 파일을 안정적으로 실행시키기 위해 윈도우 시스템의 정상 DLL 파일들을 감염 시키는 형태가 자주 발견되고 있다.


이러한 형태의 악성코드들을 일반적으로 패치드(Patched) 형태의 악성코드라고 불리고 있으며, 현재까지 발견된 악성코드에 의해 사용되는 패치드 기법들을 다음과 같이 정리 할 수 있다.


1. DLL 파일에 악의적인 DLL 파일을 로드하는 코드 삽입 후 이 코드로 분기하도록 패치하는 형태


일반적으로 많이 알려진 패치드 형태로서, 과거 3년 전부터 발견되기 시작하였으며, 주로 패치의 대상이 되었던 윈도우 정상 DLL 파일들은 imm32.dll, olepro32.dll, dsound.dll과 같다. 


패치가 된 DLL 파일은 위 이미지와 같이 파일의 섹션 끝 부분에 쉘코드(Shellcode)가 삽입 되어 있다



엔트리포인트(EntryPoint) 변경 후에는 콜 패치(Call Patch) 등의 방법으로 삽입된 코드가 실행이 되면 아래 이미지와 같이 LoadLibraryA가 호출이 되어 악의적인 DLL 파일이 로드 된다.



2. 윈도우 정상 DLL 파일을 악의적인 DLL 파일로 교체 한 뒤, 정상의 Export 함수들을 리다이렉트(Redirect) 시키는 형태

직접적으로 윈도우 정상 DLL 파일을 악의적인 DLL 파일로 교체하는 형태를 이야기 한다. 

이렇게 윈도우 정상 DLL 파일을 감염 시켰을 경우 원래 정상 DLL 파일의 익스포트(Export) 함수들이 정상적으로 호출이 되어야 함으로 익스포트 네임 테이블(Export Name Table)에서 이 함수들로 리다이렉트(Redirect) 시켜 주게 된다.

일반적으로 대상이 되었던 윈도우 정상 DLL 파일들은 ws2help.dll이나 wshtcpip.dll 들이다.


3. AppInit_DLL 레지스트리를 이용한 악의적인 DLL 파일 로드


윈도우 정상 DLL 파일들을 직접적으로 감염 시키는 형태는 아니지만, 온라인 게임 프로세스에 악의적인 DLL을 로드하기 위해 AppInit_DLL 레지스트리를 이용하는 형태이다.


해당 레지스트리에 악의적인 DLL 파일의 파일명을 삽입하게 되면 프로세스가 생성이 될 때, 레지스트리에 있는 존재하는 악의적인 DLL 파일이 로드되는 형태 이다.


4. 온라인 게임 프로세스와 동일 경로에 윈도우 정상 DLL 파일들과 동일한 파일명의 악의적인 DLL 파일 생성


전통적인 DLL 인젝션(Injection) 기법 중 하나로 많이 알려진 형태이며, 2012년 상반기에 발견되기 시작하여 최근 자주 발견되고 있는 온라인 게임 관련 악성코드에서 사용하는 기법이다. 주 대상이 되고 있는 윈동 정상 DLL 파일은  Usp10.dll 을 들 수 있다.

 

온라인 게임 관련 트로이목마 드로퍼(Dropper)가 온라인 게임 프로세스와 같은 경로에 악의적인 usp10.dll 파일을 생성한다. 그 이후 온라인 게임 프로세스가 생성이 될 때 윈도우 시스템 폴더(system32)에 존재하는 정상 usp10.dll 파일 보다 우선 순위가 높은 CurrentPath에 존재하는 악의적인 usp10.dll을 먼저 로드 하게 된다. 그 후 악의적인 usp10.dll 파일이 악의적인 행위를 수행한 뒤에  정상 usp10.dll로 로드하여 정상적인 기능도 제공을 해주는 형태로 동작한다.


5. 리다이렉트(Redirect) 대신 LoadLibrary로 직접 정상 DLL 파일을 로드한 뒤, 해당 익스포트(Export) 함수를 호출하는 형태


각 익스포트(Export) 함수에서 직접 정상 DLL 파일을 로드한 후, GetProcAddress 함수를 이용해 정상 DLL 파일의 익스포트(Export) 함수 주소를 얻은 후 호출하여 정상적인 기능을 제공한다.

이러한 형태로 각각의 익스포트(Expor)t 함수들을 분석을 해보면 아래 이미지와 같이 쉽게 백업된 정상 DLL 파일의 파일명인 ws2helpxp.dll을 확인 할 수 있다.




6. 각각의 익스포트(Export) 함수가 널(Null)로 채워져 있거나, 인코딩(Encoding) 되어 있는 형태

 

정상 DLL 파일명을 확인하기 어려도록 하기 위한 목적으로 각 익스포트(Export) 함수가 아래 이미지와 같이 널(Null)로 채워져 있거나 인코딩(Encoding) 되어 있는 형태들이다.



최근에는 아래 이미지와 같이 문자열을 바로 보여지지 않으려는 시도까지 하고 있다.



앞서 우리는 윈도우 시스템 정상 DLL 파일들을 변조하는 패치드 형태의 악성코드들의 다양한 기법들을 살펴 보았다.


이러한 패치드 형태의 악성코드들이 자주 발견되고 있는 배경으로는 온라인 게임의 사용자 개인 정보를 탈취 하려는 목적과 연관이 되어 있으며, 최근에는 보안 소프트웨어를 무력화하기 위한 목적까지 포함되기 시작하였다.


특히 몇 년전부터 온라인 게임 관련 악성코드들은 유저모드(User Mode)와 커널 모드(Kernel Mode)에 걸쳐 다양한 기법들을 이용해 보안 소프트웨어를 무력화하고자 시도하고 있다. 최근에는 직접적으로 보안 소프트웨어를 공격하기 보다는 좀더 취약하고 방어하기 어려운 윈도우 정상 DLL 파일을 감염시켜 보안 소프트웨어를 무력화 시키고자 시도하고 있다.


이렇게 보안 소프트웨어의 발전과 함께 악성코드 역시 다양한 기법들을 동원하여 진단 및 치료를 어렵게 함과 동시에 직접적으로 보안 소프트웨어를 무력화하기 위한 다양한 기법들을 사용하고 있다. 그러므로 컴퓨터 시스템을 사용하는 개별 사용자가 시스템 관리와 보안에 대한 각별한 관심이 필요하다.

댓글