-
시스템 해킹 기초System Security/dreamhack 2021. 3. 9. 22:38
드림핵 system exploitation fundamental을 공부하고 정리한 내용이다.
1. 취약점의 분류
익스플로잇 : 악용; 취약점을 이용해 공격자가 의도한 동작을 수행하게 하는 코드 혹은 이를 공격한 공격 행위
소프트웨어 버그 분류
취약점의 분류 버그 : 프로그래머가 의도하지 않은 동작을 수행하는 소프트웨어 버그
취약점 : 그러한 버그 중 보안에 영향을 줄 수 있는 버그
익스플로잇 가능한 취약점 : 그러한 취약점 중 이를 이용해 공격자가 의도한 동작을 수행할 수 있는 버그
안정적으로 익스플로잇 가능한 취약점 : 매우 높은 확률로 공격에 성공할 수 있는 버그
모든 sw 취약점은 sw와 공격자가 상호작용하는 곳인 사용자의 입력 에서부터 발생한다.
공격자가 sw와 상호작용할 수 있는 곳을 attack vector(공격벡터)라 하며 attack vector의 집합을 attack surface라 한다.
2. 취약점의 종류
공격 방법에 따라 두가지로 나뉜다.
메모리 커럽션 취약점 / 로지컬 취약점
(1) 메모리 커럽션 취약점 : 메모리를 조작해 공격
- BOF
-out-of-boundary
- off-by-one
- format string bug
- double free / use-after-free
- etc
① BOF
지역변수가 할당되는 스택 메모리에서 발생하는 취약점
데이터를 입력받거나 복사하는 부분에서 길이 검증을 하지 않거나 미흡한 경우(버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장되어 버퍼가 넘치게 됨) 발생
힙 메모리에서도 발생 가능
--> 데이터 입력받거나 복사하는 부분에 대한 길이 검사 필요
② out-of-boundary
버퍼의 길이 범위를 벗어나는 인덱스에 접근할 때 발생하는 취약점
--> 인덱스로 사용할 수 있는 범위의 올바른 값인지 검사 필요
③ off-by-one
경계 검사에서 하나의 오차가 있을 때 발생하는 취약점
버퍼의 경계 계산, 반복문의 횟수 계산 시 인덱스 고려하지 못했을 때 발생
③ format string bug
printf, sprintf와 같은 포맷 스트링을 사용하는 함수에서 발생하는 취약점
사용자의 입력이 포맷 스트링으로 전달될 때 발생하는 취약점
ex ) printf("%s")
ex ) fprintf(fp, buf) : fprintf의 두번째 인자는 포맷 스트링이 와야 하는데 사용자의 버퍼 값이 온 경우
--> 포맷 스트링을 사용하는 함수의 인자 검사
④ Double free & use-after-free
- double free : 이미 해제된 메모리를 다시 한 번 해제하는 취약점
- use-after-free : 해제된 메모리에 접근해서 값을 쓸 수 있는 취약점
⑤ integer issues
c/ c++ 언어를 사용할 때 자주 발생하는 취약점 중 하나로 정수의 형변환을 제대로 고려하지 못하는 경우임
c언어의 정수 자료형이 표현할 수 있는 범위를 정확히 알아야 함
c언어 자료형 범위 integer issues가 발생할 수 있는 사례를 살펴보자.
다음과 같이 unsigned int 형태로 변수를 받아올 때, 가능한 범위보다 큰 데이터를 받게되면 의도하지 않은 값이 들어가게 된다.
unsigned int 자료형 범위 int 자료형 범위 65536 * 65537을 width와 height 으로 입력한다면, 2^32 + 2^16 값을 넣는건데, unsigned int의 범위에 따라 2^32는 표현불가여서 0이 된다. 즉 오버플로우가 발생한다는 것이다. 고로 n은 2^16(65536)이 된다. 그런데 memcpy 함수에서 반복문을 돌며 메모리를 복사하게 되어, 버퍼 오버플로우가 발생하게 된다는 문제가 나타난다. 즉 buf 값은 65536인데 그 보다 더 많은 값이 복사되어 버퍼 오버플로우가 발생한다는 것이다.
(2) 로지컬 취약점
- command injection
- race condition
- path traversal
- etc
'System Security > dreamhack' 카테고리의 다른 글
[Linux Exploitation & Mitigation]-ASLR / PLT,GOT (0) 2021.03.16 [Linux Exploitation & Mitigation] NX bit / RTL (0) 2021.03.15