본문 바로가기
Study/Software Security

[소프트웨어보안] Buffer Overflow Attack

by 8희 2022. 11. 23.

Set-UID Programs

Privileged Programs - 높은 권한 기반 프로그램

1. Set-UID Programs

- euid를 기반으로 접근통제를 진행하도록 만든 프로그램

2. Server Programs

- 낮은 번호의 소켓을 생성

- 24x7 실행되어야 함

3. Device Drivers

- 물리적 장치에 접근하기 위한 소프트웨어

- 장치 접근을 위한 권한 필요

4. System Daemons

- 백그라운드에서 실행되면서 시스템의 운영을 지원

- 부모 프로세스가 없는 프로세스

 

Needs for Privileged Programs - 권한 필요 사례

Password Dilemma

 

사용자가 password를 변경하도록 허용하는 방법

- 높은 권한을 가져야 수정할 수 있는 파일

- 낮은 권한을 갖는 사용자가 실행하는 프로그램

 

Set-UID Programs

passwd program

 

passwd program을 Set-UID root program으로 바꾸는 방법

% sudo chown root myprog
% sudo chmod 4755 myprog

 

Program Memory Layout

 

Function Stack Layout

void f(int a, int b)
{
	int x,y ;
}

 

void f(int a, int b)
{
	int x;
}
void main()
{
	f(1,2);
	printf("hello world");
}

 

Buffer-overflow vulnerability

Vulnerable Program (stack.c)

int main(int argc, char **argv)
{ 
	char str[517];
	FILE *badfile;
    
	// 1. Opens badfile
	badfile = fopen("badfile", "r");
    
	// 2. Reads upto 517 bytes from badfile
	fread(str, sizeof(char), 517, badfile);
    
	// 3. Call the vulnerable function
	bof(str);
    
	printf("Returned Properly\n");
	return 1;
}

 

Buffer overflow Attack on stack.c

int bof(char *str)
{
	char buffer[24];
    
    // 4. Copy argument into buffer
    // (Possible Buffer Overflow)
    strcpy(buffer, str);
    
    return 1;
}

 

Three Challenges

 

Task Breakdown - Prepare "badfile"