버퍼 오버플로우
개념부터 알아보자.
버퍼 오버플로우는 스택(Stack)이랑 힙(Heap) 버퍼 오버플로우로 나뉜다.

메모리 구조는 기본적으로 다음과 같다. 여기에 있는 Kernel, Data, Text 영역은 알 필요는 없다.
Stack 영역에서의 역할 중 하나는 Return Address 다룬다. 간단히 말하면 이는 다음에 실행할 명령어 주소이다.
"명령어"가 아니라 "명령어 주소"이다. 즉 명령어 주소만 바꾸면 내가 원하는 코드를 실행시킬 수 있다.
그래서 이거를 왜 쓰는데?
그 프로그램을 가지고 있는 소유자 권한(Owner Permission)을 이용해 내가 원하는 코드를 실행시키기 위해서다.
잘 이해가 안 될 수 있다. 예시를 보자.
1. A 프로그램은 BOP(Buffer Overflow) 취약점이 있고, 해당 프로그램 소유자는 root(관리자) 이다.
2. 공격자는 프로그램을 실행할 권한은 있지만, 수정할 권한은 없다.
3. 공격자는 root 권한으로 악성코드를 실행해서 root로 권한 상승(Privilege Escalation)을 하여야 한다.
위 조건일 시 BOP를 활용할 수 있다. 이것만 있는 건 아니다, Web Application 중 BOP에 취약한 게 있으면, 이를 이용해서 Reverse Shell 획득을 할 수도 있고, 여러 방법이 있다.
점검방법
BOP S/W 에서 발생할 수도 있고, 사용자가 직접 만든 코드에서도 발생할 수 있다. 따라서 공개된 취약점(Published Vulnerability) 가 존재할 수 있다.
1. Published Vulnerability 체크

위에 있는 사진은 아무 BOP Vulnerability에 대한 CVE이다. 자세히 살펴보자.
Tenda AX1803 v.1.0.0.1 에서는 BOP가 존재하는데, 이는 SetwirelessRepeat 함수에 있는 wpapsk_crypto 파라미터로 발생한다. 그리고 이를 이용해 공격자가 원하는 코드 실행이 가능하다. 라고 되어 있다.
이를 검색할 때는 해당 S/W 버전과 CVE 또는 Vulnerability 라는 키워드로 검색한다.

이런 식으로 검색하여서, Published Vulnerability 가 어떤 것이 있는지 확인할 수 있다.
2. Web Page에서 사용자가 입력할 수 있는 폼이 있을 시, 긴 값을 입력해(예: A*80) 어떤 에러 페이지나 오류가 발생하는지 점검.
SBOP는 Stack 영역에 있는 Return Address를 공격자가 원하는 Address로 바꾸는 공격이라고 했다.
이를 어떻게 바꾸느냐 하면 난수를 입력해 해당 Return Address까지 도달하는 것이다.

위 그림을 보면 A라는 문자열이 Return Address 앞까지 와있다.
마지막 A 문자열 다음에 "0x00401014" 이라는 Return Address를 넣으면 공격자가 원하는 코드가 있는 Address로 이동하여 실행하게 된다.
3. BOP 관련 툴
보통 BOP는 발견을 하기 위한 Reverse Engineering 툴들은 많다. 그러나, 이를 자동화해서 점검하는 툴은 본적이 없지만.. 아마 어딘가 있을 것이다.
이런 걸 쓸 수도 있다. Fuzzing 이라고 해서, 이런 저런 값들을 다 넣어보는 것이다. 어떤 값들을 넣냐? 진짜 아무 거다 다 넣어본다. jtsohjtwojoih2328t093#!#90 이런 것들도 있고, 書道獄吏李斯 이런 값도 넣어본다.
이를 왜 넣냐면, 해당 프로그램을 개발한 사람들과 프로그래밍 언어를 개발한 사람들도 이런 저런 값들을 넣었을 때 어떠한 일이 발생하는지 모른다.
즉 어떤 오류가 발생할지에 대해서 모르기 때문이다. 따라서 Fuzzing 을 통해 어떤 오류가 발생할 수 있는지 알아보는 점검 기법이 있다.
'주요통신기반시설 취약점 가이드 > 주통기 웹' 카테고리의 다른 글
| 경로 추적(Path Traversal) (0) | 2025.03.18 |
|---|---|
| 관리자 페이지 노출 (0) | 2025.02.20 |
| LDAP Injection (0) | 2025.02.19 |
| Command Injection (0) | 2025.02.19 |
| SQL Injection (0) | 2025.02.11 |