RootKit
Root 권한을 쉽게 얻게 해주는 Kit
- Application Level RootKit
- User Level에서 비주얼스튜디오로 만들수 있을 정도의 단계
- Linux/Unix 계열에서 주로 사용
- Windows의 경우 task.mgr을 지우고 내가 지정한 걸로 바꿔치기] GUI 로 하기 어려움
- WFP(Windows File Protection) ;윈도우의 중요시스템파일을 보호하는 기능
- 모니터링하여 삭제, 수정(Hooking등의 경우)되면 복구
- cf) DEP: 코드가 아닌 영역을 보호
- User Level Rootkit
- 작업관리자, Process Explorer, ls 등의 프로세스 공간에 침투하여 기계어 코드나 IAT, EAT 등을 수정하여 지정한 프로세스를 출력
실습
공격대상에게 악성코드 exe파일을 실행시키면 프로세스를 출력했을 때 안나도록 만들기
- '프로세스 목록을 출력' 소스코드
CreateToolhelp32Snapshot
현재 사용중인 프로세스목록을 사진을 찍어서 보여주는 함수
실행
목록이 있는 창이 뜨는데
이 창을 안보이도록 만들어보기
↓
IAT Hooking
: DLL 바인딩 후 IAT 를 변경해 다른 값 창출
이때, C코드로만 보면 문법안에 갇혀있기 때문에 디버깅하여 보면 더 잘 보임
방법
프로세스목록을 사진으로 찍고 목록을 가져오는 과정을 반복하는데
이때 스냅샷을 가지고 왔을 때 지워버리기
BOOL ret=Process32First( hProcSnap, &pe32 );
printf("%s:%d\n",pe32.szExeFile,pe32.cntThreads);
while(Process32Next( hProcSnap, &pe32 )) {
printf("%s:%d\n",pe32.szExeFile,pe32.cntThreads);
}
이 부분을 중점으로 해서 디버깅
다음으로 이어지는 함수라서
- Process32Next
00401080 ---3F만큼이동---> 004010c4
Process32Next 함수가 진행되는 주소 : 00402008
map으로 위치를 가늠
00402000 : Imports Addr. Table(IAT)
Process의 입장에서 IAT임
IAT
- 외부모듈에서 Export한 함수(;DLL의 함수) 중에서 현재 모듈에서 사용하는 함수의 시작주소를 적어놓은 표
7C864F68 : kernel32의 dll 함수의 시작주소
IAT부분
이부분을 바꿔서 창이 안뜨도록
=IAT Hooking
- 수동으로 수정하기
[ Dependency Walker ]
1CAFA - ExitProcess
7C800000 - Image base
=7C81CAFA - ExitProcess 주소
함수가 시작하는 부분을
Exit Process 로 바꿔서 진행
결과값이 바뀜
DLL Injection
DLL을 만들어 수정되도록 하기
- Remote Thread 생성
PE파일 프로세스가 진행될때 DLL를 삽입하여 진행하도록
- DLL소스파일
- OpenProcess : 프로세스 핸들을 얻을때 사용하는 함수
- VirtualAllocEx : VAS에 새로운 공간할당요청하는 함수
- hProcess1 : 할당받은 남의 프로세스 핸들
- 4096 :클러스터 단위(0x1000)
- Reserve & COMMIT : 예약과 수요
- MEM_COMMIT: 4096모두필요
- WriteProcessMemory: 다른 프로세스의 VAS에 데이터를 기록하는 함수
- strAddr1: 할당된 시작주소
- lstrlen:문자열을 입력
openprocess함수
commit 값이 1000으로
Processlist.exe를 보면 1000이 들어오는게 보임
할당받은 주소인 3F0000 을 dump 떠보면 agent.dll이 들어온게 보임
위의 함수부분의 디버깅부분
함수 시작주소에서의 주소
↓
주소-이미지베이스=함수값 확인이 됨
[7C8104BC]-[7C800000]=[104BC]
- 진행
Processlist.exe를 animate over 걸어놓고 Injector.exe를 실행하면 agent.dll이 LoadLibrary.dll에 따라 들어가게 된다.
Processlist.exe에 agent.dll이 확인됨
No comments:
Post a Comment