1.버퍼 오버플로우 공격(Buffer Overflow Attack)
메모리 버퍼에 입력 데이터를 저장할 때 버퍼의 용량을 초과하여 데이터를 입력하면 발생
공격자는 프로그램에 입력할 데이터를 의도적으로 버퍼의 용량을 초과하여 입력하여 악성 코드를 삽입하여 버퍼 오버플로우를 이용해 프로그램의 실행 흐름을 제어하고, 시스템에 악성 코드를 실행하도록 설계한다.
2.예시
프로그램에서 vulnerable_function 함수는 사용자로부터 입력받은 데이터를 buffer 배열에 복사하는데, 만약 사용자 입력 데이터의 길이가 10 바이트를 초과하면 버퍼 오버플로우가 발생시킬수있다.
#include <stdio.h>
#include <string.h>
void vulnerable_function(char *input) {
char buffer[10];
strcpy(buffer, input); // input을 buffer에 복사하는 과정에서 버퍼 오버플로우 발생 가능성
printf("입력된 데이터: %s\n", buffer);
}
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("사용법: %s 입력\n", argv[0]);
return 1;
}
vulnerable_function(argv[1]); // 사용자 입력을 함수에 전달
return 0;
}
3.방어법
- 입력 데이터 검증: 입력된 데이터의 길이를 검사하고, 버퍼의 용량을 초과하는 입력을 거부
- 보안 취약점 수정: 프로그램의 코드를 수정하여 버퍼 오버플로우 취약점을 제거하거나 완화
- 스택 보호기술(STACK CANARY): 스택에 특정 값을 추가하여 버퍼 오버플로우 발생 시 공격자가 이를 감지
- 실행 권한 제한: 최소 권한 원칙에 따라 실행 권한을 제한하여 공격자가 실행할 수 있는 악성 코드를 제한
🎈참고자료
https://sh1r0hacker.tistory.com/140
'Computer Science > Security' 카테고리의 다른 글
[보안] OS Command Injection (0) | 2024.06.29 |
---|---|
[보안] DBD(Drive By Download)공격 (0) | 2024.06.29 |
[보안] DOS, DDOS (0) | 2024.06.29 |