취약점을 공부하시는 분들 대다수는 Memory Corruption 취약점에대해 잘 알고 계실것입니다.
길이(메모리 경계) 를 검사하지 않는 함수는 buffer overflow에 취약하여 Exploit당하기 쉽죠.
- BOF에 취약한 대표적인 함수 : strcpy , strcmp, gets, scanf, strcat, getwd, sprintf 등등
그래서 보통은 strncpy 같은 길이를 검사하는 함수를 쓰게되는데 .. 이함수도 bof에 안전한건 절대 아니였다. 나도 항상 길이를 검사하면 괜찮겠지 했는데 그게아니였다 ㅇㅅㅇ;;
먼저 strcpy , strncpy 함수부터 알아봅시다.
strcpy : NULL문자를 만나기 전까지의 문자열을 복사합니다.
strncpy : 문자열을 지정된 길이만큼 복사합니다.
strcpy 함수는 길이를 검사하지 않는 함수이기 때문에 BOF 에 취약합니다. 비쥬얼스튜디오에서 컴파일을 시도하면 컴파일오류가 나더군요? 함수딴거쓰라고 ㅋㅋ...
strncpy 함수도 프로그래머의 부주의에 의해서 충분히 BOF가 발생할 수 있었습니다.
간단한 예제소스를 봅시다.
#include<stdio.h> #include<string.h> int main(int argc, char *argv[]){ char buffer[10]; int length; length = strlen(argv[1]); strncpy(buffer,argv[1],length); // 버퍼의 크기보다 큰값이 들어갈 수 있음. }
프로그래머의 부주의로 의해 BOF가 발생하는 경우 입니다. 버퍼의 크기보다 더 큰 문자열이 들어갈 경우 오버플로우가 발생합니다.
정해진 자료형보다 큰 수를 저장할때 음수로 인식해 발생하는 경우도 있습니다. 이것도 역시 프로그래머의 부주의로 발생하는 경우입니다. 글자수를 측정해 조건문으로 실행함에도 취약점이 있네요.
#include<stdio.h> #include<string.h> int main(){ char length = 0; char buffer[20] = {0,}; length = strlen(argv[1]) // 128바이트 이상 입력시 음수로 인식됨 if(length>20){ printf("에러! 20바이트를 넘어섰습니다 !"); }else{ printf("글자수를 만족합니다. 함수를 실행합니다"); // 프로그래머 부주의 strcpy(buf,argv[1]); } }
'Security > System Hacking' 카테고리의 다른 글
APT 공격 실습 (3) - 워터링홀(Watering Hole) (0) | 2018.11.12 |
---|---|
APT 공격 실습 (2) - Metasploit 을 이용한 익스플로잇 (0) | 2018.11.11 |
APT 공격 실습 (1) - 가상 실습환경 구성 (0) | 2018.11.11 |
[PE파일] 특정 PE파일로부터 Export Table 주소를 구해보자. (0) | 2017.06.04 |