취약점의 분류
익스플로잇이란 사전적으로 악용, 취약점을 이용해 공격자가 의도한 동작을 수행하게 하는 코드 혹은 이를 이용한 공격 행위를 의미
소프트웨어 버그(Bug) : 프로그래머가 의도하지 않은 동작을 수행
소프트웨어 취약점(Vulnerablility) : 소프트웨어 버그 중 보안에 영향을 미칠 수 있는 버그
익스플로잇 가능한 취약점(Exploitable) : 소프트웨어 취약점 중 공격자가 의도한 동작을 수행할 수 있는 버그
그러나 익스플로잇이 가능하다고 해서 익스플로잇을 항상 안정적으로 성공할 수 있지는 않음.
보안 취약점에서 익스플로잇 확률은 위험성을 평가하는 중요한 요소 중 하나, 이게 높을수록 무기화 되어 사용하기 유용, 공격 탐지될 확률 줄어듦.
안정적으로 익스플로잇 가능한 취약점(Reliably Exploitable Vulnerability) : 매우 높은 확률로 공격에 성공할 수 있는 버그
Attack Vector : 공격자가 소프트웨어와 상호 작용할 수 있는 곳
Attack Surface : Attack Vector 들의 집합
unreachable code 영역에 심각한 보안 취약점이 있더라도 보안 취약점이라고 할 수 없음
취약점의 종류
메모리 커렵션 취약점
저수준 언어에서 메모리 조작해 공격하는 메모리 커럽션 취약점과 메모리를 조작할 필요 없이 공격할 수 있는 로지컬 취약점
- Buffer Overflow(BOF)
- Out-Of-Boundary(OOB)
- Off-by-one
- Format String Bug(FSB)
- Double Free/Use-After-Free(UAF)
- etc
Buffer Overflow(BOF)
: 메모리 커럽션 취약점 중 가장 대표적인 취약점,
프로그래머가 할당한 크기의 버퍼보다 큰 데이터 입력을 받아 메모리의 다른 영역을 오염시킬 수 있음
Out-Of-Boundary (OOB)
: 버퍼의 길이 범위를 벗어나는 곳의 데이터에 접근할 수 있는 취약점
브라우저와 같은 대규모 최신 소프트웨어에서도 자주 발견되는 취약점
Off-by-one
: 경계검사에서 하나! 더 많은 값을 쓸 수 있을 때 발생하는 취약점
32바이트 크기의 버퍼에 인덱스 32로 접근, 반복문 순회 때 자주 발생
Format String Bug (FSB)
: printf같은 포맷 스트링 문자열을 올바르게 사용하지 못해 발생하는 취약점
최신 컴파일러로 잘 발생하지 않게 됨
Double Free/ Use-After-Free
: 동적 할당된 메모리를 정확히 관리하지 못했을 때 발생하는 취약점
이미 해제된 메모리 다시 해제, 해제된 메모리에 접근해 사용
로지컬 버그 취약점
메모리 커럽션 취약점과 달리 메모리 구조를 이용해 공격할 필요가 없음.
익스플로잇 작성이 상대적으로 간단.
- Command Injection
- Race Condition
- Path Traversal
- etc
Command Injection
: 사용자의 입력을 셸에 전달해 실행할 때 정확한 검사를 실행하지 않아 발생하는 취약점
익스플로잇 안 어려움
Race Condition
: 여러 스레드나 프로세스의 자원 관리를 정확히 수행하지 못해 데이터가 오염
메모리 커럽션 취약점 또는 로지컬 취약점
Path Traversal
: 프로그래머가 가정한 디렉토리를 벗어나 외부에 존재하는 파일에 접근할 수 있는 취약점
"../"와 같은 경로 문자 검사 안해서 발생
보호기법 (Mitigation) 을 통해 이러한 취약점을 방어
'해킹 > 시스템해킹' 카테고리의 다른 글
어셈블리어 문법 간단 정리 (0) | 2020.08.03 |
---|---|
시스템 해킹 echo 구현 (0) | 2020.08.03 |
시스템해킹 메모리 커럽션 (0) | 2020.08.02 |
시스템해킹 레지스터 쓰임새와 시스템콜 (0) | 2020.07.31 |
시스템해킹 nano 통해 어셈블리코드 실행 (0) | 2020.07.31 |