개요
사용자에게 허용된 권한 이상의 동작이나 정보 열람을 가능하게 하는 소프트웨어의 설계상의 허점이나 결점을 말한다.
웹 시스템 등 다양한 환경에서 발생하며 개발자의 실수로 인해 발생하는 경우가 많다.
분류
System Hacking
OverFlow
인가된 메모리 장소보다 더욱 큰 값을 주입하여 개발자의 의도와 다른 방향으로 프로그램이 돌아가게 만드는 취약점이다.
Stack Buffer Overflow
주로 입력값의 크기를 검증하지 않는 함수 사용으로 인해 스택의 다른 영역을 침범하게 되어 발생한다. 매우 고전적인 취약점이나 아직도 많이 발생하고 있으다. ex) strcpy, scanf, gets, strcat, sprintf 등
Heap Overflow
스택 오버플로우와 비슷하나, 그 대상이 힙 메모리라는 점이 다르다. 메모리 영역이 다르므로 취약점 공격방법도 다르다.
Integer Overflow
정해진 자료형보다 큰 수를 저장할때 발생하는 오버플로우 문제로, 조건문 등에서의 분기를 우회 할수 있다. 자료형보다 큰 수를 입력할 경우 값이 양수에서 음수로 바뀌는 것을 이용한 취약점이다.
Format String Bug
포맷스트링을 지정해주지 않고 사용할 때 발생하는 취약점으로 %n, %hn 등의 포맷스트링을 이용하여 메모리값을 변조 할수 있다. ex)printf, sprintf
Use-After-Free
최근 특히 브라우저에서 많이 발견되는 취약점이다. Free된 포인터를 재사용 할 때 발생하는 취약점이다.
free(ptr); ptr->func();
Double Free
Free된 메모리를 다시 Free할 때 발생한다.
Null Pointer Dereference
메모리 값이 지정되지 않은 초기화되지 않은 포인터에 값을 넣으려 할때 발생한다.
Web Hacking
입력값 검증
사용자에게서 입력값을 받을 때 발생하는 취약점이다. 일반적으로 필터링을 통해 회피할 수 있다.
PHP의 경우 mysqli_real_string_escape()와 같은 함수를 사용하면 이 종류의 공격을 회피할 수 있다.
SQL Injection
SQL Query를 DB에 주입하여 해커가 원하는 행동을 하게 만드는 것이다.
Cross Side Script (XSS)
JavaScript를 입력값에 사용하여 DB에 주입하거나 사용한 주소를 다른 사용자에게 유포해 쿠키 정보를 빼가는 등의 행위를 할 수 있다.
File
File Download
허가되지 않은 파일을 다운로드 받을 수 있을 때 발생하는 취약점이다.
리눅스 서버 기준 ../을 여러번 사용해 서버 내부에 있는 파일까지 접근이 가능한 경우도 있다.
File Upload
웹 서버에서 쓰이는 스크립트 파일을 업로드 가능할 경우 발생하는 취약점이다.
웹 쉘을 얻어낼 수 있는 스크립트 파일을 업로드하여 해커 마음대로 웹 서버를 다룰 수 있게 되지만, 현재 이 취약점이 적용되는 서버는 거의 없다.
File Browsing
웹 서버에서 특정 폴더에 접근할 때 그 폴더의 내용을 전부 공개해주는 취약점을 위미한다.
아파치 서버의 경우 파일 브라우징 관련 설정을 끄지 않는다면 이 취약점이 발생할 수 있다.