> For the complete documentation index, see [llms.txt](https://redryan.gitbook.io/studyjoon/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://redryan.gitbook.io/studyjoon/hacking/bhpt/undefined-4/undefined.md).

# 취약점이란

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FSQlTmh2Q9lXbZ8neKj1R%2Fimage.png?alt=media&amp;token=fea5bb81-dbba-4fa7-b9d5-c0c53d3d5b10" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FYZJmRszbL9NYakQhSF7O%2Fimage.png?alt=media&amp;token=6c962384-6951-4888-996f-5771ef193580" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FNGXK5ZNjmD411HBNNZJ9%2Fimage.png?alt=media&amp;token=ad7f9b8a-b883-4ee5-ac46-77d15a3e19a2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FcBA1T41IM1ATkh1TgDhE%2Fimage.png?alt=media&amp;token=41189696-0109-4a77-bdea-340e8b3d7dc1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FFeBCjqlYDoIs4jHxwkvl%2Fimage.png?alt=media&amp;token=9ab1ac00-fc5a-4c3d-9d0f-d643613daf8e" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FSzPT8R3UIFGnUjRQ6VzI%2Fimage.png?alt=media&amp;token=460d2d7b-38c9-4fc1-93eb-126d9d57da77" alt=""><figcaption></figcaption></figure>

* DOS 자체가 취약한 시스템인데 DOS 라는 이름이 공격 이름인 경우가 위에 해당한다.
* 콕 집어서 구체적으로 어떤 부분이 취약점이라고 말하기 어려울 때는 버퍼오버플로우 취약점/DOS공격 이런식으로 공격이름이 곧 공격대상이다.

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FaObZs5JsP3jKZi6FhE7O%2Fimage.png?alt=media&amp;token=86935eeb-72f3-4863-8e1f-cc846fd2c0e2" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FpyAnFzb7mlwpDQvvjfKb%2Fimage.png?alt=media&amp;token=3f040d07-43ae-429b-ae16-afd63930cbc0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://287627346-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8ysBTUxkIeOC7SqTEZ2L%2Fuploads%2FAdYtYF4y5nEs0WCxzAeB%2Fimage.png?alt=media&amp;token=ca5c18c9-8b28-4859-a516-b946cdf07723" alt=""><figcaption></figcaption></figure>

* 굉장히 간단한 방법으로 상대방의 시스템에 접근하는 것이 가장 효율적이고 좋다.

## 취약점 진단 개념 <a href="#bkmrk-page-title" id="bkmrk-page-title"></a>

취약점 진단(Vulnerability Assessment)은 정보 수집을 통해 얻은 정보를 기반으로 대상 호스트에서 보안 취약점을 찾아내기 위한 과정입니다. 호스트 기반 모의해킹에서는 대상 호스트가 실행중인 네트워크 서비스들과 관련된 취약점(Vulnerability) 및 잘못된 설정(Misconfiguration)을 개념 증명을 통해 알아봅니다. 취약점 공격 단계에 들어가기 전에 대상 호스트에서 어떤 네트워크 서비스를 어떤 방식으로 공격해야할지 계획을 짜는 단계라고 봐도 무방합니다.

취약점 진단에 대해서 본격적으로 알아보기 전, 취약점, 잘못된 설정, 익스플로잇, 페이로드에 관련된 개념에 대해서 알아봅니다.

### 취약점(Vulnerability) <a href="#bkmrk-ec-b7-a8-ec-95-bd-ec-a0-90-28vulnerability-29" id="bkmrk-ec-b7-a8-ec-95-bd-ec-a0-90-28vulnerability-29"></a>

취약점은 시스템, 네트워크, 소프트웨어등에서 발견되는 보안적인 결함입니다. 공격자들은 취약점을 공격해 무단 접근, 데이터 탈취/변조, 코드 실행, 서비스 거부, 시스템 제어 등의 다양한 공격을 수행할 수 있습니다. 이렇듯 대상 시스템의 보안에 있어서 중요한 3대 요소인 기밀성, 무결성, 가용성에 영향을 미칠 수 있으며, 이러한 영향력을 가질 때 이것을 취약점이라고 정의합니다.

취약점은 대개 소프트웨어적 버그로 인해 발생합니다. 이러한 버그는 단순히 소스 코드 내부의 오류뿐만 아니라, 다양한 시스템 간 상호작용에서 발생하는 입출력 해석의 차이에서도 유래할 수 있습니다. 또한, 유지 보수가 제대로 이루어지지 않은 오래된 코드나, 소스 코드에 사용된 라이브러리 내에 암묵적으로 존재하는 버그들도 취약점의 원인이 될 수 있습니다. 이러한 다양한 유형의 버그는 시스템의 보안에 심각한 위협을 가할 수 있습니다.

예를 들어, "100 골드 포션 몇 개를 사시겠습니까?" 라고 묻고, 사용자의 입력을 바로 데이터베이스 업데이트 쿼리에 사용하는 파이썬 코드가 있다고 가정해봅니다.

```
# 사용자로부터 주문 수량 입력 받기
order = int(input("100 골드 포션 몇 개를 사시겠습니까: "))

# 데이터베이스의 상점 잔액을 업데이트
shop_balance = shop_balance - (100 * order)

# 주문 결과 출력
print(f"알겠습니다. 100 골드 포션 {order} 개의 가격은 {100 * order}입니다")

# < 상점과 유저간의 골드 거래 발생 >
```

이 코드에서 order 변수는 사용자의 입력을 직접 받습니다. 만약 공격자가 음수(예를 들어 -5)를 입력한다면 계산된 가격은 `-500`이 되어 오히려 상점이 고객에게 500 골드를 지불해야 하는 상황이 발생합니다. 이러한 입력 검증 누락과도 같은 소프트웨어 코드내에서 발생하는 버그가 시스템에 비즈니스적, 보안적인 리스크를 발생시킬 때 이를 취약점이라고 정의합니다.

### 취약점 종류 <a href="#bkmrk-ec-b7-a8-ec-95-bd-ec-a0-90-ec-a2-85-eb-a5-98" id="bkmrk-ec-b7-a8-ec-95-bd-ec-a0-90-ec-a2-85-eb-a5-98"></a>

취약점의 종류에는 수십가지가 있지만, BHPT에서는 실무에서 가장 많이 보이는 취약점들에 대해 간단하게 설명합니다.

<mark style="color:red;">**원격 코드 실행(RCE: Remote Code Execution)**</mark>**:** 원격으로 대상 시스템에 코드나 스크립트를 실행 가능하게 만드는 취약점

<mark style="color:red;">**원격 명령 실행(RCE: Remote Command Execution)**</mark>**:** 원격으로 대상 시스템의 쉘이나 인터프리터(Interpreter)에 원하는 시스템 명령어를 실행 가능하게 하는 취약점

<mark style="color:red;">**인증 우회(Authentication Bypass)**</mark>**:** 사용자 인증을우회해 인증 없이 시스템의 기능을 사용할 수 있게 되는 취약점

<mark style="color:red;">**미흡한 접근 통제 (Access Control)**</mark>**:** 유저에게 할당된 권한의 규칙을 무시하고 사용해서는 안되는 기능 및 데이터를 무단으로 접근하게 되는 취약점

<mark style="color:red;">**정보 노출(Data/Information Disclosure)**</mark>**:** 시스템 내/외의 정보(파일, 데이터)가 노출되는 취약점

<mark style="color:red;">**Path Traversal**</mark>**:** 애플리케이션/시스템에 배정된 정해진 디렉토리 및 파일시스템 범위를 벗어나 다른 디렉토리/스코프의 파일 및 데이터를 무단으로 읽어오게 되는 취약점

<mark style="color:red;">**Denial of Service(DOS)**</mark>**:** 시스템 자원을 고갈 시키거나 중단시켜 시스템의 가용성을 방해하는 취약점이자 공격 방식

### 취약점 맥락/상황 <a href="#bkmrk-ec-b7-a8-ec-95-bd-ec-a0-90-eb-a7-a5-eb-9d-bd-2f-ec-83-81-ed-99-a9" id="bkmrk-ec-b7-a8-ec-95-bd-ec-a0-90-eb-a7-a5-eb-9d-bd-2f-ec-83-81-ed-99-a9"></a>

**- 인증/인가된 맥락/상황(Authenticated context):** 취약점 악용에 사용자 인증이 필수적일 때. 유저 이름 및 비밀번호, 유저의 세션, API 키 등의 유저 인증 매커니즘을 통과한 뒤, 해당 유저의 맥락을 가져야만 취약점 공격이 가능할 때.

**- 미인증/미인가 맥락/상황(Unauthenticated context):** 취약점 악용에 사용자 인증이 필요하지 않을 때. 대상 시스템에 포트와 네트워크 서비스가 열려있기만 하면 취약점 악용이 가능할 때. 유저 이름, 비밀번호, API 키, 등의 사용자 인증과 관련된 그 어떠한 정보가 없어도 취약점 공격이 가능할 때.

예를 들어 웹 애플리케이션에 꼭 로그인을 한 다음에 원격 코드 실행이 가능하다면 Authenticated RCE 취약점이라고 일컫습니다.

### 잘못된 설정(Misconfiguration) <a href="#bkmrk-ec-9e-98-eb-aa-bb-eb-90-9c-ec-84-a4-ec-a0-95-28misconfigurat" id="bkmrk-ec-9e-98-eb-aa-bb-eb-90-9c-ec-84-a4-ec-a0-95-28misconfigurat"></a>

잘못된 설정(misconfiguration)은 네트워크 서비스나 애플리케이션의 설정이 해당 환경의 맥락과 부합하지 않을 때, 그리고 이러한 설정이 보안적인 리스크를 초래할 때 지칭하는 용어입니다.

예를 들어, 파일 서버는 유저 이름과 비밀번호가 없어도 누구나 로그인이 가능한 익명 로그인(Anonymous Login) 설정을 할 수 있습니다. 예를 들어 파일 전송 네트워크 서비스인 FTP에서는 다음과 같이 설정 파일을 수정하면 익명 로그인 설정을 활성화 할 수 있습니다.

```
# /etc/vsftpd/vsftpd.conf
# 익명 로그인 설정 활성화 
anonymous_enable=YES
```

이런 설정은 가정용 파일 서버에서 했을 경우 큰 문제가 되지 않을 수 있습니다. 공격자가 집에 침입을 하거나 집 컴퓨터를 물리적으로 장악했다면 문제가 생길 수 있겠지만, 집에 도둑이 들었을 때 `파일 서버 익명 로그인` 설정을 걱정하기 보다는 개인의 물리적 신변에 대해서 걱정하는 게 일반적이기 때문입니다.

하지만 반대로 신용카드 회사가 고객의 개인정보가 들어간 파일 서버를 인터넷에 연결해놓고, 단순히 "귀찮아서" 익명 로그인이 가능하게 해놓은 맥락의 경우 익명 로그인은 잘못된 설정에 속합니다. 이처럼 맥락에 부합하지 않고 보안적인 위험을 초래하는 설정을 잘못된 설정이라고 부릅니다.

### 익스플로잇(Exploit) <a href="#bkmrk-ec-9d-b5-ec-8a-a4-ed-94-8c-eb-a1-9c-ec-9e-87-28exploit-29" id="bkmrk-ec-9d-b5-ec-8a-a4-ed-94-8c-eb-a1-9c-ec-9e-87-28exploit-29"></a>

익스플로잇은 취약점을 악용해 공격자가 원하는 공격을 수행할 수 있도록 만들어진 코드, 데이터, 명령어들의 집합입니다. 취약점이 결함이라면, 익스플로잇은 해당 결함을 공격하는 도구라고 볼 수 있습니다.&#x20;

### 페이로드(Payload) <a href="#bkmrk-ed-8e-98-ec-9d-b4-eb-a1-9c-eb-93-9c-28payload-29" id="bkmrk-ed-8e-98-ec-9d-b4-eb-a1-9c-eb-93-9c-28payload-29"></a>

익스플로잇이 취약점을 공격하는 도구라면, 페이로드는 익스플로잇의 공격 이후 최종적으로 실행되는 공격자의 코드 및 데이터입니다. 대부분 눈에 보이는 결과물(데이터 탈취, (악성)코드 실행, 권한 상승, 바인드/리버스 쉘 실행등)을 실행하는데 사용됩니다. 익스플로잇과 마찬가지로, 페이로드에 대해서도 모듈 3.3 취약점 공격 섹션에서 더 상세하게 다룹니다.

### 수동 진단 <a href="#bkmrk-ec-88-98-eb-8f-99-ec-a7-84-eb-8b-a8" id="bkmrk-ec-88-98-eb-8f-99-ec-a7-84-eb-8b-a8"></a>

수동 진단은 모의해커 및 점검자가 직접 취약점을 진단하는 과정입니다. 수동 진단은 사람의 판단능력을 활용하기 때문에 정확도가 높은 편입니다. 주로 자동화된 도구에서 나타난 거짓 양성 및 거짓 음성 결과를 검증할때도 수동 진단은 활용합니다. 단점으로는 많은 시간 투자가 필요하고, 사람이 하는 일이기 때문에 실수가 발생할 수 있습니다.

### 자동 진단 <a href="#bkmrk-ec-9e-90-eb-8f-99-ec-a7-84-eb-8b-a8" id="bkmrk-ec-9e-90-eb-8f-99-ec-a7-84-eb-8b-a8"></a>

자동 진단은 취약점을 파악하기 위해 자동화된 도구를 사용하는 방법입니다. 이 방법의 장점은 시간 절약과 빠른 진단이 가능하다는 점입니다. 하지만 도구의 설정에 따라 거짓 양성이나 거짓 음성 결과가 발생할 수 있는 한계가 있습니다.

&#x20;

따라서 취약점을 효과적으로 진단하기 위해서는 수동 진단과 자동 진단을 병행하는 것이 중요합니다.&#x20;
