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



악성코드는 일반적으로 악성 행위를 위해 네트워크 기능에 의존하며, 네트워크 통신에 사용하는 수많은 윈도우 API가 있다. 네트워크 시그니처를 생성하는 작업은 꽤나 복잡하다. 네트워크 함수가 사용 됐을 때 악성 프로그램의 행위를 식별할 수 있게 일반적인 네트워크 함수를 인지하고 이해하는 것이 필요하다.



버클리 호환 소켓

윈도우 네트워크 옵션 중 악성코드는 버클리 호환 소켓(Berkley Compatible Sockets)을 가장 자주 사용하는데, 윈도우와 유닉스 시스템에서 거의 동일한 기능을 가진다. 윈도우에서 버클리 호환 소켓의 네트워크 기능은 Winsock 라이브러리 내에서 주로 ws2_32.dll에 수현돼 있다. 이중 소켓에서 가장 자주 사용하는 함수는 socket, connect, bind, listen, accept, send, recv이다.


socket  -  소켓을 생성한다.


bind  -  호출 전에 소켓을 특정 포트로 할당한다.


listen  -  소켓이 인바운드 연결을 위해 리스닝하고 있음을 나타낸다.


accept  -  외부 소켓 연결을 오픈하고 연결을 받아들인다.


connect  -  연결을 외부 소켓으로 오픈하고 외부 소켓은 연결을 기다린다.


recv  -  외부 소켓에서 데이터를 받는다.


send  -  외부 소켓으로 데이터를 보낸다.



***

네트워크 라이브러리에 리소스를 할당하기 위해 다른 네트워크 함수가 수행되기 전에 WSAStratup 함수가 할당돼야 한다. 코드 디버깅을 수행하는 동안 네트워크 연결 시작점을 찾을 때 WSAStartup에 브레이크 포인트를 설정하면 유용한데, 이는 바로 네트워크 기능이 시작되기 때문이다.




네트워크의 서버와 클라이언트 관점

네트워크 프로그램에는 항상 두 가지 관점이 있는데, 하나는 서버로서 인바운드 연결을 기다리는 오픈 소켓을 유지하고 다른 하나는 클라이언트로서 기다리는 소켓에 연결한다. 악성코드는 서버 또는 클라이언트 중 하나가 될 수 있다.

외부 소켓에 연결하는 클라이언트 애플리케이션의 경우 socket을 호출하고 이어서 connect를 호출하며, 필요시 send와 recv를 호출한다. 인바운드 연결을 리스닝하는 애플리케이션의 경우 socket, bind, listen, accept 함수를 순서대로 호출하고, 필요시 send와 recv를 호출한다.



우선 WSAStartup은 Win32 소켓 시스템을 초기화한 후 socket 함수로 소켓을 생성한다. bind함수는 소켓을 포트로 바인드하고, listen함수는 소켓을 리스닝하게 설정하며, accept함수는 외부 연결이 올 때까지 대기한다.




WinINet API

Winsock API 외에 WinINet API 라 부르는 좀 더 상위 수준의 API가 있다. WinINet API 함수는 Wininet.dll에 저장돼 있다. 프로그램이 이 DLL에서 함수를 임포트란다면 상위 수준의 네트워크 API를 사용하는 것이다. WinINet API는 애플리케이션 계층에서 HTTP, FTP 같은 프로토콜을 구현한다. 오픈하는 연결에 기반을 두고 악성코드가 하는 행위를 이해할 수 있다.



InternetOpen은 인터넷 연결을 초기화 할 때 사용한다.


InternetOpenUrl은 URL에 연결할 때 사용한다. (HTTP 페이지나 FTP 리소스에 사용할 수 있음)


InternetReadFile은 ReadFile함수 같이 프로그램이 인터넷에서 다운로드한 파일에서 데이터를 읽을 수 있게 한다.



악성코드는 WinINet API를 이용해 외부 서버에 연결하고 실행에 필요한 추가 명령을 받는다.




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

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