2015. 1. 17. 03:03
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

악성코드는 새로운 프로세스를 생성하거나 기존 프로세스를 변형해 현재 프로그램 외부에서 코드를 실행할 수도 있다. 프로세스는 윈도우가 실행하는 프로그램이다. 각 프로세스는 오픈된 핸들이나 메모리 같은 고유의 자원을 관리한다. 프로세스는 CPU가 실행하는 하나 이상의 스레드가 있다. 예전 악성코드는 독립적인 프로세스로 구성됐지만, 최근 악성코드는 다른 프로세스의 일부로 코드를 실행하는 경우가 더 많다.


윈도우는 리소스를 관리할 목적으로 컨테이너로 프로세스를 사용하고, 프로그램이 상호 간섭하지 않게 분리한다. 윈도우 시스템은 특정 시점에 적어도 20~30개의 프로세스가 CPU, 파일 시스템, 메모리, 하드웨어를 포함한 동일한 자원을 공유 하면서 동작한다. 개별 프로그램이 다른 프로그램과 자원 공유를 관리해야 한다면 프로그램을 작성하기 매우 어려울 것이다. 운영체제는 모든 프로세스가 서로 간의 간섭 없이 공유 자원에 접근 할 수 있게 한다. 프로세스는 에러를 방지하거나 다른 프로그램에 영향을 주는 프로그램은 다운시켜 안정적인 동작에 기여한다.


프로세스 간에 운영체제가 특히 중요하게 여기는 리소스는 시스템 메모리다. 이를 위해 다른 모든 프로세스와 분리 시키고 프로세스가 사용할 수 있는 메모리 주소의 합한 메모리 공간을 개별 프로세스에 할당한다.


프로세스가 메모리를 요청하면 운영체제는 메모리와 메모리에 접근해 사용할 수 있는 주소를 프로세스에 할당한다. 프로세스는 메모리 주소를 공유할 수 있고 빈번히 공유한다. 예를 들어 특정 프로세스가 메모리 주소 0x00400000에 데이터를 저장하면 다른 프로세스도 해당 주소에 저장 할 수 있으며, 프로세스는 충돌하지 않는다. 주소는 동일하지만 데이터를 저장하는 물리적인 주소는 동일하지 않다. 우편 주소와 같이 메모리 주소는 컨텍스트 내에서만 의미를 가진다. 메인 주소의 ZIP코드가 없으면 주소 202번지의 위치를 알 수 없듯이 프로세스를 모르면 주소 0x0040A010 자체로 데이터 저장 위치를 알 수 없다. 메모리 주소 0x0040A010에 접근하는 악의적인 프로그램은 악의적인 코드를 담고 있는 프로세스가 해당 주소에 저장할 때만 영향을 미치며, 해당 주소를 사용하는 시스템 내의 다른 프로그램은 영향을 받지 않는다.



신규 프로세스 생성

악성코드가 신규 프로세스를 생성할 때 가장 흔히 사용하는 함수는 CreateProcess 다. 이 함수의 많은 파라미터를 통해 호출자(caller)는 프로세스 생성에 관한 세부적인 제어가 가능하다. 예를 들어 악성코드는 호스트 기반의 방화벽과 다른 보안 메커니즘을 우회하기 위해 악성코드를 실행하는 프로세스 생성 함수를 호출 할 수 있다. 또는 인터넷 익스플로러 인스턴스를 생성한 후 악의적인 내용에 접근하는 프로그램을 사용할 수 있다.


악성코드는 보통 CreateProcess를 이용해 함수 하나만을 호출하는 간단한 원격 셀을 생성한다. CreateProcess 함수의 파라미터 중 하나는 STARTUPINFO 구조체인데, 이는 프로세스의 표준 입출력과 표준 에러 스트림 핸들을 포함한다. 악성코드는 프로그램이 표준 출력으로 쓸 때 실제 소켓을 써서 공격자가 원격에서 CreateProcess 호출을 제외한 모든 실행이 가능하게 이 값을 소켓으로 설정한다.


코드는 원격 위치에 소켓을 열어 뒀을 것이다. 소켓 핸들은 스택에 저장돼 STARTUPINFO 구조체로 입력된다. 그 후 CreateProcess를 호출하면 프로세스의 모든 입출력은 소켓으로 라우팅된다.



CreateProcess를 호출하면 모든 입출력을 소켓으로 리다이렉트하기 위해 새로운 프로세스를 생성한다. 외부 호스트를 알아내려면 소켓이 초기화 되는 위치를 알아야 한다. 어떤 프로그램이 동작하는지 알기 위해 IDA Pro에서 해당 주소를 탐색해 저장된 문자열을 알아야 한다.


악성코드는 종종 리소스 섹션(resource section) 내부에 프로그램을 저장해 신규 프로세스를 생성하기도 한다.

악성코드는 때로 리소스 섹션에 또 다른 실행 파일을 저장한다. 프로그램이 실행 될 때 PE 헤더에서 추가 실행 파일을 추출해 디스크에 쓴 후 프로그램 실행을 위한 CreateProcess를 호출한다. 이는 DLL과 다른 실행 코드에서도 가능하다. 이런 경우 리소스  해커 (resource hacker) 라는 유틸리티를 이용해 열고, 분석을 위해 디스크에 임베디드 실행파일로 저장한다.








'Reversing > PMA' 카테고리의 다른 글

Window Functions used in many malwares  (0) 2015.01.24
finding Network codes  (0) 2015.01.24
Networking API  (0) 2015.01.17
DLL  (0) 2015.01.15
Window Registry  (0) 2015.01.15
Posted by af334