소프트웨어 보안 10주차

·2023년 11월 13일

CS

목록 보기
6/11

본 글은 중앙대 소프트웨어 보안 수업의 필기 본입니다. 잘못된 부분은 언제든지 정정해주세요!

Stack Overflow

  • 스택에 저장할 수 있는 데이터의 양을 초과하여 데이터를 삽입하려고 할 때 발생하는 오류
  • 스택은 한정된 크기의 메모리 영역을 사용하므로, 스택에 쌓인 데이터가 일정 크기를 초과하면 발생함.
  • 스택 오버플로우는 일반적으로 프로그래밍 실수로 인해 발생하거나 또는 버퍼 오버런(Buffer overrun)과 같은 보안 취약점으로 인해 스택 오버플로우가 발생할 수도 있습니다.

Stack Overflow로 해킹하는 방법

메모리 취약점 발생

원래 정상 종료 시에는 main함수의 주소를 반환하지만,
해커가 악의적으로 다른 메모리 공간의 주소와 같은 악성코드를 넣어놓으면 스택 오버플로우가 발생한다

스택 오버플로우로 인한 문제점

유저가 잘못된 운영을 하는 경우

  • 엉뚱한 파일에 대해 I/O 요청을 할 수도 있고
  • CPU나 메모리의 리소스보다 더 많은 비용을 요하는 것에 접근할수도 있음

해결방법

  1. 모든 권한을 주는 것 => 실질적인 해결책은 되지 않음...
  2. 유저모드(하드웨어 엑세스 권한을 제외한 모드), 커널모드(모든 엑세스 접근 가능)로 나눠 운영하는 것

무한 호출(반복) => 임의로 다른 프로세스로 교환

반복문에서 종료 조건 설정을 잘못 했다던지, 함수가 무한 호출되며 stack overflow가 발생할 수 있다. 이 때는 반복되는 프로세스가 임의로 다른 프로세스로 교환될 수 있다.

해결방법

  1. 협조적 방법: system calls를 기다림 => 항상 협조할 것이라는 보장이 없어 실질적 해결 X
  2. 비협조적 방법 : 강제로 제어권을 가져옴

협조적 방법의 경우, 프로세스는 yield라는 시스템 콜을 이용하여 주기적으로 CPU 점유를 포기할 수 있다. 즉, 다른 프로세스가 실행될 수 있도록 자발적으로 반납할 수 있다.

비협조적 방법의 경우, timer interrupt를 이용해 프로그램을 강제 종료한다.
timer interrupt는 부팅 때부터 실행된다.
이런 timer interrupt 때문에 프로세스 스케줄링도 가능한 것!

Timer Intterupt

  • 운영체제는 clock이라는 시계가 인터럽트를 걸 수 있도록 해준다.
  • 현재 프로그램이 cpu를 얼마나 사용했는지 기록한다
  • 만약 현재 프로그램이 한계를 넘어 cpu를 사용하게 될 경우, 강제로 종료 후 타 프로그램을 cpu에 넣고 실행한다.
  • 즉, 무한 루프를 빠져나오기 위해 필요함

효율적인 CPU 가상화

여태까지는 시분할을 이용해 CPU를 가상화하는 것을 배워보았다.
여기서 중요한 요소 두가지가 있다.

  • 성능 : 시스템 과부하 없이 어떻게 구현할 수 있을 것인가??
  • 제어 : CPU를 제어를 유지하면서 어떻게 효율적으로 프로세스를 실행 할 것인가??

Trap

불법적인 파일 접근 시도처럼, 현재 수행 중인 프로세스에서 생성되는 오류, 예외 조건 때문에 발생함. 기본적으로 인터럽트의 한 종류이나, 외부가 아닌 내부에서 유발되는 사건에 의해 발생
즉, 소프트웨어로부터 발생하는 인터럽트!

Trap table 구조

트랩 핸드러의 주소들

주소별로 트랩 핸들러를 담고 있다. 유저 모드에서는 실행 불가능

주소 공간 재배치

업로드중..
프로세스 모르게 메모리를 다른 위치에 재배치하느냐의 문제.

동적 재배치

물리적 주소(PA) = 가상 주소(VA) + base (물리적 메모리의 시작 주소)
위 그림에서의 base register는 32KB이다.
바운드 레지스터는 VA의 한계값을 알려준다.
업로드중..
위 그림에서 VA의 bounds는 16KB, base는 32KB이므로, PA의 bounds는 46KB

paging

이건 다음 시간에!

profile
풀스택 호소인

0개의 댓글