[정보 보안 개론] 코드 보안(프로그램 실행 구조-2, 셸-1)

Jin_Hahha·2024년 11월 13일
0

정보 보안 개론

목록 보기
16/17



  1. movl %esp, %ebp
    • ESP(extended stack pointer) 레지스터는 항상 현재 스택 영역에서 가장 하위 주소를 저장
    • 스택은 높은 주소에서 낮은 주소로 이동 및 데이터 저장
    • 스택 확장 시 스택 포인터도 높은 주소에서 낮은 주소로 값이 변경됨
    • 위의 명령은 현재의 SP 값을 EBP 레지스터에 저장하라는 의미
  • pushl %ebpmovl %esp, %ebp는 새로운 함수 시작 시 항상 똑같이 수행하는 명령
    • 프롤로그(prologue)라고도 함

  • 위의 이미지는 movl %esp, %ebp 실행 시 스택의 구조를 나타냄
  1. subl $4, %esp
    • ESP 값(int c 할당 값)에서 4바이트만큼 뺀다는 의미
    • 스택에 4바이트의 용량 할당
  2. pushl $2
    • 스택에 정수 2 저장
  3. pushl $1
    • 스택에 정수 1 저장
  4. call function
    • function 함수 호출
    • 4~6 단계는 function(1, 2)에 대한 코드

  • pushl $2, pushl $1, call function 실행 시 스택의 구조

  1. pushl %ebp
  • function 함수의 기준 값으로, 현재 EBP 값을 스택에 저장

  • pushl %ebp 실행 시 스택의 구조

  1. 모든 프롤로그 실행

  1. subl $12, %esp
    • ESP 값(char buffer(10)의 할당 값)에서 12바이트 뺌(스택에 12바이트의 용량 할당)
    • 소스 코드에서 'char buffer(10)'과 같이 10바이트만큼 할당되도록 했으나 스택에서는 4바이트 단위로 할당되므로 12바이트 할당

  • 9번 과정을 마친 후 스택 구조

  1. movl 12(%ebp), %eax
    • EBP에 12바이트를 더한 주소 값의 내용(정수 2)을 EAX 값에 복사
    • 누산기인 EAX(extended accumulator) 레지스터는 입출력과 대부분의 산술 연산에 사용
    • 예를 들면 곱셈, 나눗셈, 변환 명령은 EAX 사용

  • 10번 과정을 마친 후 스택 구조

  1. addl %eax, 8(%ebp)
  • EBP에 8바이트를 더한 주소 값의 내용(정수 1)에 EAX(10 단계에서 2로 저장) 값을 더함
    • 8(%ebp) 값은 3이 됨


  1. movl 8(%ebp), %edx
  • EDX(extended data) 레지스터는 입출력 연산에 사용
  • 근 수의 곱셈과 나눗셈 연산 시 EAX와 함께 사용
  • 12번 명령은 EBP에 8바이트를 더한 주소 값의 내용(정수 3)을 EDX에 저장
  • a = a + b의 결과를 저장하는 과정


  • 이후의 과정 설명

  • shell
    • 운영체제를 둘러싸고 있으면서, 입력받는 명령어를 실행하는 명령어 해석기

  • 윈도우에서 볼 수 있는 명령 창도 셸이라고 할 수 있음
  • 셸의 종류는 매우 다양
    • 본 셸(bourne shell),C 셸(C shell), 콘 셸(korn shell)로 나뉨

본 셸(bourne shell)

  • 유닉스 시스템에서 사용하는 기본 셸
  • 셸의 역할
    • 자체 내장 명령어 제공
    • 입출력, 오류에 대한 리다이렉션(redirection) 기능 제공
    • 와일드카드(wildcard) 기능 제공
    • 파이프라인 기능 제공
    • 조건부, 무조건부 명령열(sequence) 작성 기능 제공
    • 서브셸(subshell) 생성 기능 제공
    • 후면 처리(background processing) 가능
    • 셸 스크립트(shell script, 프로그램) 작성 가능

셸을 공부하는 이유

  • 버퍼 오버플로우나 포맷 스트링 공격을 통해 얻고자 하는 것이 관리자 권한의 셸이기 때문
  • 관리자 권한을 얻더라도 시스템에 어떤 명령을 입력할 인터페이스가 없으면 무용지물
    • 결론적으로 획득한 관리자 권한을 이용한 셸이 필요

      /bin/sh

    • 위의 명령으로 셸을 실행하고 exit 명령으로 셸을 빠져나올 수 있음

0개의 댓글