Thursday, January 24, 2019

윈도우 DLL의 이해_2. Remote Thread

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에 따라 들어가게 된다.


 agent.dll에 확인을 위하여 메세지박스를 설정함



Processlist.exe에 agent.dll이 확인됨

No comments:

Post a Comment

List

MobSF

MobSF는 오픈소스 모바일 앱 자동 보안 진단 프레임워크로 자동 분석 시스템 구축할 때 사용한다. 정정 및 동적 분석이 가능하며, Android, iOS, Windows에 대해 침투 테스트, 멀웨어 분석 및 보안 평가를 할 수 있다. 참고자료 필...