1. 취약점이란?
: 사용자에게 허용된 권한 이상의 동작이나 정보 열람을 가능하게 하는 소프트웨어 설계상의 허점이나 결함
* Exploit : 취약점을 공격하여 원하는 코드를 실행하거나 특정 목적을 달성하는 공격코드
- 공격코드를 이용한 공격행위 일체를 포함하기도 함.
* 제로데이 공격 : 취약점이 발견되고 패치가 개발되기 전까지의 기간에 이루어지는 공격
* Bug Bounty Program
- 국내 : 인터네침해대응센터(http://www.krcert.or.kr)
- 해외 : Bugcrowd (https://bugcrowd.com/programs)
Hackerone (https://hackerone.com/programs)
2. 취약점 분류
[1] Memory Corruption 취약점
: 버그로 인한 메모리 오염, 즉 예상되지 않은 메모리 값 변경, 참조 등에 의해 발생
: 주로 프로그래밍 실수로 인해 발생
: 가장 잘 알려진 BufferOverflow 취약점이 해당 취약점에 속함.
1) Stack Buffer Overflow
: 주로 메모리 경계를 검사하지 않는 함수 사용으로 인해 스택을 덮어쓰게 되어 발생
: 대표적인 취약함수로 strcpy, gets, scanf, strcat, getwd, sprintf 등이 있다.
2) Heap Buffer Overflow
: 스택 오버플로우와 비슷하나, 그 대상이 힙 메모리라는 점이 다르다.
3) Integer Overflow
: 정해진 자료형보다 큰 수를 저장할 때 발생하는 오버플로우 문제
: 조건문 등에서 정해진 분기문이 아닌 다른 분기문을 실행하도록 하여 취약점을 발생시킴.
4) Format String Bug
: 포맷스트링을 지정해 주지 않고 사용할 때 발생하는 취약점
: %n, %hn 등의 일부 포맷스트링을 이용하여 메모리 값을 변조
5) Use-After-Free
: 최근 브라우저에서 많이 발견되는 취약점
: Free된 포인터를 사용할 때 발생
6) Double Free
: Free된 메모리를 다시 Free할 때 발생
: 대부분 프로그래밍 실수로 발생, Integer Overflow 등의 취약점으로 인해 발생하기도 함
7) Null Pointer Dereperence
: 메모리 값이 지정되지 않은 초기화되지 않은 포인터(Null Pointer)에 값을 넣으려할 때 발생
3. Exploit 분류
[1] Local Exploit
: PC 혹은 서버 내부에서 실행하는 Exploit
: 일반적으로 권한상승 혹은 코드 실행을 위해서 사용
: 인자값을 직접 입력해주거나 특정 파일을 통해 입력값을 전달해야하므로 로컬상의 권한을 이미 가지고 있거나, 파일 싱행 등의 조건이 필요하다.
: 윈도우의 경우 주로 직접 인자값에 입력하는 방식의 공격보다는 악성파일을 이용한 공격이 주를 이룬다.
: 사용자에게 입력값을 받는 모든 프로그램은 취약점이 존재할 수 있다는 것을 명심
* 쉘 코드 : 공격자가 실행하길 원하는 코드
[2] Remote Exploit
: Local Exploit과 반대로 원격에서 이루어지는 공격
: 원격에서 패킷을 보내 공격하므로 특정 포트를 열고 서비스를 제공하는 서버 프로그램이 타겟
[3] 침투 절차
- Remote Exploit은 원격에서 직접 공격이 가능하므로 주로 서버에 접근 권한을 얻기 위한 1차 공격으로 많이 사용
- Remote Exploit을 통해 서버의 일반 사용자 권한을 획득한 뒤, Local Exploit을 통해 추가 권한 상승을 시도하는 것이 일반적인 침투 절차
* Exploit 검색 사이트
'Hacking > System' 카테고리의 다른 글
PART3 쉘코드 원리와 작성(2) (1) | 2016.12.27 |
---|---|
PART3 쉘코드 원리와 작성 (0) | 2016.12.21 |
16.12.17 공부 (0) | 2016.12.18 |