2018. 5. 15. 18:03ㆍ악성코드 분석
DeviceDriver는 로드되면서 여러 형태의 IRP ( I/O Request Packet ) 를 처리하기위한 함수리스트를 초기화한다
MajorFunctionTable을 이용해서 여러 MajorFunction들의 주소를 관리한다 ( -> 변조할 함수의 해당 주소를 찾아내어 변조한다 )
드라이버는 시스템의 매우 낮은 레벨에서 동작하기 때문에 후킹하기 적절한 장소이다
* DeviceObject 검색 -> DriverObject 검색 -> MajorFunctionTable - MajorFunction 변조 의 순으로 후킹이 진행된다
* DeviceObject내에 DriverObject주소가 존재
* DriverObject에는 MajorFunctionTable이 존재하고 Table에는 해당장치에 관련된 MajorFunction들이 존재한다
실습에서는 netstat 명령어에 대한 후킹을 진행한다
[ netstat 작동 원리 ]
cmd창에서 netstat 명령어 작동
=> TCP/IP.sys에 포트에 대한 정보를 요청
=> Kernel을 거쳐 결과물 출력
* TCP/IP.sys에 정보 요청이 들어왔을 때, 함수의 주소가 변조되어 있으므로 악성코드가 실행되고 변조된 정보를 돌려준다
[ Hooking 순서 ]
1. DeviceObject(TCP/IP) 획득
2. DriverObject 획득
3. MajorFunctionTable - MJ_DEVICE_CONTROL 주소 획득
4. 해당 주소를 악성함수로 변조
[1] DeviceObject - "\\Device\\Tcp" 검색
DeviceObject를 검색한 후 DriverObject를 검색하였다
다음으로, MajorFunction[IRP_MJ_DEVICE_CONTROL] 함수를 실행된다
MJ_DEVICE_CONTROL을 HookedDeviceControl로 변조한다
* HookedDeviceControl 코드
* HookedDeviceControl의 IoCompletionRoutine에는 netstat명령의 결과를 변조하는 코드가 존재한다
- 패킷의 출발지 포트번호가 80인 패킷을 숨기는 코드이다
- 결과물을 통해서 확인해보자
① sys파일을 build할 수 있는 환경을 구성해야한다 " x86 Checked Build Environment "
② Rootkit.c & Rootkit.h 파일을 build해서 sys파일을 생성한다 - DeviceDriver file
③ netstat가 사용하는 함수들을 변조하기 전과 후의 결과이다
출발지 포트가 80번의 네트워크는 보여주지 않아 Driver의 MajorFunction후킹을 통한 루트킷이 성공한 모습이다
'악성코드 분석' 카테고리의 다른 글
Memory Forensic [ OS란 ? ] (0) | 2018.05.23 |
---|---|
하이브리드 후킹 ( Kernel을 이용한 User IAT 후킹 ) (0) | 2018.05.21 |
RootKit [ SSDT Hooking 실습] (0) | 2018.05.13 |
RootKit [ DeviceDriver 개념 및 설치실습] (0) | 2018.05.13 |
Windows Message Hooking ( 키보드입력 후킹 실습 ) (0) | 2018.05.10 |