Tuesday, January 22, 2019

Buffer Over Flow RTL / ROP

2019-01-21

DEP Policy

  • DEP 정책은 Data, Heap, Stack Section에서 코드의 실행을 방지
  • 앞에서 수행했던 RET 기반의 공격과 SEH 기반 공격에서 쉘코드가 Stack에 존재하므로 DEP에 의해 쉘코드의 실행이 방지됨



RTL

Return To Library

bufferoverflow에 취약한 소스코드

  • Stack에 존재하는 RET 명령에 의해 수행되는 Return Addr.주소에 Library 함수 주소를 입력하고 Library 함수가 참조하는 인자영역에 알맞은 인자를 구성함으로써 실행 가능한 영역에서만 실행하여 원하는 PAYLOAD를 실행시킬수 있다
  • SEH기반인 경우 ADD ESP, xx-RET 명령을 통해 원하는 구성된 RTL 영역을 실행시키게 할수 있다



Direct-RET (Return to Shell code)
Trampoline (Return to JMP ESP)
NOP Slide
DEP: Trampolin 과 NOP Slide 를 막을 수 있음
RTL을 이용하여 다시 뚫음 - Windows에서는 사용이 어려움
ROP : RTL 대신 사용하는 ROP
ASLR
ROP : Static DLL에 대하여 사용(ASLR의 부족한 부분에 대해)



ROP
Return Oriented Programming


  • ByPass DEP

    • RTL 구성
    • ShellCode를 실행 가능한 영역으로 복사 후 실행
    • ShellCode를 실행 가능한 영역으로 설정 후 실행
    • ShellCode를 실행하기 전에 DEP 설정 변경 후 실행 (단, Permanent Flag에 영향을 받음)

  • ROP
    • 기본 개념은 RTL과 동일
    • 프로그램 내부에 있는 Module의 실행가능한 영역에 있는 가젯을 이용하여 공격코드 생성
    • ROP를 이용하여 RTL을 구성할 수 있으며, 보통 RTL의 구성 목적은 ShellCode가 있는 영역을 실행가능하게 하거나, 실행가능한 영역으로 복사하거나, DEP정책을 수정하게 끔 구성
  • Gadjet
    • 기계어코드의 끝에 ret명령을 포함하는 명령의 집합
    • ret명령으로 Gadjet이 실행된 후 Gadjet의 ret명령에 의해 다음 Gadjet을 실행
    • Gadjet을 연속으로 호출하여 원하는 명령을 수행
    • Gadjet 사용 조건
      • NULL이 입력되지 않아야 하는 경우 주소에 NULL이 포함되지 않게 함
      • 가젯이 존재하는 모듈은 주소가 변경(ASLR)되지 않아야 함
  • Weapon
    • DEP를 우회하기 위해 사용되는 Windows API
    • DEP를 우회하기 위한 접근방식
      • RTL(Return To Library) 방식을 이용
      • 대상 프로세스의 DEP 정책을 변경 후 ShellCode 실행
      • ShellCode가 존재하는 메모리 영역을 실행가능한 영역으로 변경 후 실행
      • 새로운 실행가능한 영역을 할당 후 ShellCode를 복사한 후 실행
    • 환경에 따라 구성이 가능하거나 용이한 API를 선정하여 ROP Chain 구성
    • https://msdn.microsoft.com/en-us/library/windows/desktop/aa366898(v=vs.85).aspx




No comments:

Post a Comment

List

MobSF

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