> 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-2.md).

# 네트워크 개념

## 네트워크 개념 <a href="#bkmrk-page-title" id="bkmrk-page-title"></a>

호스트 기반의 모의해킹을 배운다고 하더라도 결국 이 호스트들도 네트워크 상에 존재합니다. 어떤 시나리오던간에, 하나의 호스트에서 다른 호스트를 공격하려면 네트워크를 통해 접근을 한 뒤 공격하게 됩니다. 따라서 본격적인 모의해킹에 앞서 네트워크적인 지식에 대해서 알아봅니다.

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/P5AWcTJoroKxrcmi-image-1735727452268.png" alt=""><figcaption></figcaption></figure>

**네트워크 공간을 통한 호스트간 네트워킹**

네트워크(Network)는 여러 호스트들이 데이터를 공유하고 소통할 수 있도록 연결된 상태 및 공간을 뜻합니다.

네트워킹(Networking)은 이러한 네트워크 공간을 구축하고 관리하는 활동을 나타냅니다. 네트워킹은 마치 우리가 언어를 통해 소통하는 것과 비슷하게, 디지털 공간에서 다양한 정보와 데이터를 주고 받는데 사용됩니다.

BHPT에서 배우는 호스트간 모의해킹, 공격 호스트에서 타겟 호스트를 정찰, 공격, 이동, 후속공격을 하기 위해선 네트워킹에 대한 이해는 필수적인 개념 중 하나입니다.

### 네트워킹 필수 용어 <a href="#bkmrk-eb-84-a4-ed-8a-b8-ec-9b-8c-ed-82-b9-ed-95-84-ec-88-98-ec-9a-a9-ec-96-b4" id="bkmrk-eb-84-a4-ed-8a-b8-ec-9b-8c-ed-82-b9-ed-95-84-ec-88-98-ec-9a-a9-ec-96-b4"></a>

* **네트워크(Network):** 여러 컴퓨터 및 기타 장치들이 연결돼 정보를 공유할 수 있는 구조.
* **IP 주소(IP Address):** 인터넷 프로토콜(IP, Internet Protocol)에서 각 호스트가 네트워크 상에서 식별되기 위해 할당된 고유한 주소.
* **서브넷(Subnet):** 큰 네트워크를 더 작은 단위로 분할한 네트워크 영역.
* **게이트웨이(Gateway):** 서로 다른 네트워크/서브넷을 가진 호스트 사이 통신을 가능하게 하는 장치 또는 소프트웨어.
* **서브넷과 게이트웨이의 관계:** 같은 서브넷이 할당된 IP 주소는 서로 동일한 서브넷에 속함. 같은 서브넷에서는 게이트웨이 없이 직접 통신 가능.
* **포트(Port):** 컴퓨터 속 운영체제 상의 프로세스를 네트워크 적으로 접근하기 위해 맵핑되는 번호. 예) 웹 프로세스 apache.exe는 포트 80에 맵핑.
* **로컬 호스트(Localhost):** 자신의 컴퓨터를 나타내는 호스트 이름.
* **DNS(Domain Name System):** 호스트의 IP 주소를 호스트/도메인 이름으로, 혹은 도메인 이름을 IP 주소로 변환하는 프로토콜이자 네트워크 서비스.

### 네트워크와 인터넷 프로토콜(Internet Protocol) <a href="#bkmrk-eb-84-a4-ed-8a-b8-ec-9b-8c-ed-81-ac-ec-99-80-ec-9d-b8-ed-84-b0-eb-84-b7-ed-94-84-eb-a1-9c-ed-8" id="bkmrk-eb-84-a4-ed-8a-b8-ec-9b-8c-ed-81-ac-ec-99-80-ec-9d-b8-ed-84-b0-eb-84-b7-ed-94-84-eb-a1-9c-ed-8"></a>

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/6RFYVhQHYnYFv2rY-image-1735727508088.png" alt=""><figcaption></figcaption></figure>

**네트워크**는 여러대의 컴퓨터나 다른 장치들이 연결되어 서로 정보를 공유할 수 있는 구조를 일컫습니다. 가장 작은 단위의 2대의 호스트를 서로 연결시킨 것부터, 아주 커다란 구조의 인터넷까지, 한 대 이상의 호스트가 서로 연결되어 정보를 주고 받을 수 있다면 이것을 네트워크라고 부릅니다.

**인터넷 프로토콜(Internet Protocol)은** 오늘 날 일반적인 네트워크들에서 가장 많이 사용되는 프로토콜입니다. 이 IP라는 프로토콜은 호스트 간 네트워크적인 통신을 할 때 어떤 종류의 데이터를, 어떤 방식과 규칙으로, 어떻게 만들어진 주소로 보내야 하는지 등을 규정합니다.

이름이 인터넷 프로토콜이라고 해서 IP가 오로지 우리가 아는 인터넷에서만 쓰이는 프로토콜은 아닙니다. 일반적으로 컴퓨터의 형태의 장치들이 사용되는 네트워크에서 널리 사용됩니다.

대한민국이라는 네트워크 안에, 철수와 영희라는 호스트 2대가 있다고 가정해봅니다. 철수와 영희는 사회적인 규범에 따라 대한민국 안에서 한국인으로서 한국어를 하고, 처음 만났을 때는 "잘 지냈니" "밥은 먹었니" 등의 (어느정도의) 정해진 규칙에 따라 서로 상호작용 합니다.

철수가 갑자기 아랍어로 랩을 하며 물구나무 서기를 한다면, 이는 정해놓은 사회적 규범 - 프로토콜 - 을 어긴 채 소통을 시도하는 것입니다. 당연히 프로토콜을 어겼다면, 철수와 영희가 서로 정상적인 대화와 소통을 할 수 없을 것 입니다.

### IP주소 <a href="#bkmrk-ip-ec-a3-bc-ec-86-8c" id="bkmrk-ip-ec-a3-bc-ec-86-8c"></a>

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/oB3a3rZx2LDJhEBZ-image-1735728063582.png" alt=""><figcaption></figcaption></figure>

IP주소는 인터넷 프로토콜 네트워크에서 각각의 호스트 및 장치를 식별하기 위해 사용되는 가상의 주소입니다. 사람을 식별하기 위해 철수와 영희라는 이름을 사용하듯, IP 프로토콜을 사용하며 네트워크에서 각기 다른 호스트를 식별하기 위해서는 IP 주소를 사용합니다. IP 주소는 각 장치들을 식별하고, 찾고, 연결하는데 사용됩니다.

IP주소는 32비트로 구성되며, 4개의 Octet/옥텟(8비트 단위)로 쪼개집니다. 1개의 옥텟은 8비트이기 때문에 2^0 부터 2^8까지, 즉, 0부터 255까지의 값을 가질 수 있습니다. 즉, 아이피주소들은 `0.0.0.0` 부터 `255.255.255.255` 까지 존재할 수 있습니다(특정 아이피주소는 예약(Reserve)되어 있거나, 브로드캐스트 아이피주소등에 사용됩니다).

위의 스크린샷에서도 나타나듯 왼쪽의 호스트는 `1.1.1.1` 이라는 아이피주소를, 오른쪽의 호스트는 `1.1.1.2`의 아이피주소를 가지고 있습니다.

아이피주소는 네트워크 주소(Network Address)와 호스트 주소(Host Address)로 나뉘어질 수 있습니다. 네트워크 주소는 네트워크를 지칭하는 주소이며, 호스트 주소는 호스트/장치를 하나하나 식별하기 위한 주소입니다. 이와 관련된 개념은 아래 `서브넷 마스크` 섹션에서 좀 더 자세히 배웁니다.

### 서브넷(Subnet)과 게이트웨이 <a href="#bkmrk-ec-84-9c-eb-b8-8c-eb-84-b7-28subnet-29-ea-b3-bc-ea-b2-8c-ec-9d-b4-ed-8a-b8-ec-9b-a8-ec-9d-b4" id="bkmrk-ec-84-9c-eb-b8-8c-eb-84-b7-28subnet-29-ea-b3-bc-ea-b2-8c-ec-9d-b4-ed-8a-b8-ec-9b-a8-ec-9d-b4"></a>

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/iYIwSj6vMdIoaFo0-image-1735727575933.png" alt=""><figcaption></figcaption></figure>

네트워크는 더 작은 단위로 쪼개질 수 있습니다. 대한민국이라는 나라에서 서울, 경상도, 전라도와 같은 행정구역을 사용하는 것과도 비슷한 개념입니다. 너무 큰 네트워크가 있다면 이를 작게 나눠 효율적으로 관리하고, 특정 호스트나 네트워크의 연결을 이어주거나 통제함으로서 보안의 효율성을 높일 수도 있습니다.

**서브넷은** 이처럼 커다란 네트워크를 더 작게 나눈 작은 네트워크들을 일컫습니다.

**게이트웨이는** 하나의 서브넷에서 다른 서브넷과 네트워크적인 소통을 하기 위해, 혹은, 하나의 네트워크와 다른 네트워크간의 소통을 하기 위해 사용되는 중계 장치 또는 소프트웨어입니다. 일반적으로 로컬 네트워크(LAN - "내가 속한 네트워크")와 그 밖의 네트워크의 통신을 도와줍니다.

예를 들어 같은 A 아파트 111동에 살고 있는 철수와 영희라면, 굳이 누군가에게 부탁해 소통할 필요가 없습니다. 101호에 살고 있는 철수가 102호에 살고 있는 영희에게 직접적으로 소통하면 그만입니다. 하지만 아파트 102동이나, 옆 건물에 살고 있다거나, 서울이 아닌 제주도라거나, 한국이 아닌 미국에 영희가 살고 있다면 철수는 누군가를 거쳐 영희와 소통해야합니다. 편지를 써 우체국에 가거나, 인스타그램이라는 SNS을 이용하거나 해야합니다.

여기서 중요한 문제가 생깁니다.

* "내가 속한 네트워크" 와 "남이 속한 네트워크"는 어떻게 구분지을까?
* 게이트웨이를 통해 "다른" 네트워크에 트래픽을 보낼 것인지, 아니면 내가 직접적으로 "내 네트워크"에 있는 호스트에 트래픽을 전송할 것인지를 어떻게 알까?

즉, 나의 서브넷과 남의 서브넷을 구분짓고 네트워크가 다를 경우 네트워크적 소통을 직접적으로 할 것인가, 아니면 게이트웨이를 통해 소통할 것인가를 알아야합니다. 이를 구분짓기 위해 사용하는 것이 바로 서브넷 마스크입니다.

### 서브넷 마스크(Subnet Mask) <a href="#bkmrk-ec-84-9c-eb-b8-8c-eb-84-b7-eb-a7-88-ec-8a-a4-ed-81-ac-28subnet-mask-29" id="bkmrk-ec-84-9c-eb-b8-8c-eb-84-b7-eb-a7-88-ec-8a-a4-ed-81-ac-28subnet-mask-29"></a>

> 서브네팅(Subnetting)은 호스트 기반 모의해킹보다는 네트워크 기반의 외부망, 내부망, 공격자 시뮬레이션에서 더 많이 사용되는 개념입니다. 처음부터 다 외우거나 이해를 100% 하려고 하지 않으셔도 됩니다. 심지어 BHPT에서는 스킵하셔도 됩니다!

> 다만 네트워킹에서 워낙 중요한 개념이기 때문에 나중에 시간이 나시면 "서브넷" "서브넷마스크" "네트워크 ID와 호스트 ID" "서브넷 마스크 계산기" 등의 키워드를 검색해 따로 공부하는 것을 추천합니다.

큰 네트워크를 작은 서브넷으로 나누는데에는 서브넷 마스크(Subnet Mask)라는 개념이 사용됩니다. 서브넷 마스크는 32비트 (IP주소 길이의 총 합)로 이뤄진 숫자로서, 연속적인 형태의 1과 0으로 이뤄져있습니다. 이 1과 0은 네트워크의 IP 범위를 나타내기 위해 사용됩니다. 1은 네트워크 비트를, 0은 호스트 비트를 의미합니다.

IP주소에 대해 배울 때 네트워크 주소와 호스트 주소가 있다고 했었습니다. 각각의 호스트가 어느 네트워크 소속인지 알아보기 위해서는 서브넷 마스크를 이용해 네트워크 주소와 호스트 주소를 나눠볼 필요가 있습니다. 마치 서울에 살고 있는 철수(1.1.1.1)와 인천에 살고 있는 철수(1.1.2.2)를 구분짓기 위해서는 어느 철수가 어느 네트워크 소속인지 알아야하는 것과 비슷한 개념입니다.

서브넷 마스크 계산 방식을 알아보기 위해 이번에는 철수의 아이피주소를 좀 더 복잡하게 `192.168.1.1`로 설정해보겠습니다. 그 뒤, 철수의 서브넷 마스크는 `/24`라고 가정합니다. 이렇게 네트워크 비트의 숫자를 `/` 나타내는 표기법을 CIDR(Classless Inter-Domain Routing) 표기법이라고 합니다.

```
192.168.1.1/24 - 철수의 아이피주소 및 CIDR 표기법
192.168.1.1 - 철수의 호스트 아이피 주소
/24 - 서브넷 마스크
```

이때 `/24`는 네트워크 비트의 1이 24개가 있다는 뜻입니다. IP에는 총 32개의 비트가 있었으니, 나머지 8개의 비트(32-24=8)은 호스트 비트가 되고, 호스트 비트들은 다 0이라고 했었습니다. 즉, `/24` 서브넷 마스크는 네트워크 비트 `1` 24개, 호스트 비트 `0` 8개가 되겠습니다.

철수의 네트워크 주소와 호스트 주소를 알아내기 위해서는 호스트 아이피 주소(`192.168.1.1`)와 서브넷 마스크(`/24`)를 풀어서 0과 1의 비트 형식으로 나타내봅니다.

```
철수 호스트IP (비트)     : 11000000 10101000 00000001 00000001 // 192.168.1.1
철수 호스트IP (십진수)   :   192       168       1       1
서브넷 마스크 (비트)     : 11111111 11111111 11111111 00000000 // 255.255.255.0
서브넷 마스크 (십진수)   :   255       255      255      0
```

이제 철수의 호스트IP와 서브넷 마스크 비트들의 `0`과 `1`을 논리적 AND 연산을 하면 철수의 서브넷 네트워크 주소를 알 수 있습니다.

```
11000000 10101000 00000001 00000001  // 192.168.1.1
11111111 11111111 11111111 00000000  // 255.255.255.0
-----------------------------------
11000000 10101000 00000001 00000000
   192      168       1        0 

192.168.1.0 - 철수의 네트워크 주소
192.168.1.1 ~ 255 - 철수 네트워크 안 호스트들이 존재할 수 있는 호스트 주소
```

192.168.0.1/24를 통해 철수의 네트워크 주소인 192.168.1.0 을 알아냈습니다. 네트워크 주소가 아닌 다른 비트는 호스트 비트였으니, 총 8개의 비트, 즉, 255개의 호스트가(실제로는 254지만 일단 스킵) 철수의 네트워크인 `192.168.1.0/24`에 존재할 수 있습니다.

> 비트 연산에, 0과 1에, 너무 복잡합니다! 하지만 큰 걱정을 하실 필요는 없는게, 실무에서는 서브넷 계산기를 사용합니다. 예를 들어 IP주소 계산기(<https://www.calculator.net/ip-subnet-calculator.html)에> 아이피주소와 서브넷만 집어넣으면 됩니다.

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/XmXuTLYkU2kVpNsH-image-1735727868049.png" alt=""><figcaption></figcaption></figure>

그러면 간단하게 네트워크 주소, 호스트 주소 범위, 사용 가능한 호스트 IP 숫자, 등이 나옵니다.

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/de4CXNREH0KvA4IU-image-1735727853072.png" alt=""><figcaption></figcaption></figure>

실무에서는 학교 시험을 보는게 아니기 때문에 빠른 일처리를 위해서 계산기를 자주 사용합니다.

***

#### 서브네팅과 실무 <a href="#bkmrk-ec-84-9c-eb-b8-8c-eb-84-a4-ed-8c-85-ea-b3-bc-ec-8b-a4-eb-ac-b4" id="bkmrk-ec-84-9c-eb-b8-8c-eb-84-a4-ed-8c-85-ea-b3-bc-ec-8b-a4-eb-ac-b4"></a>

꽤나 복잡합니다. 아마 그냥 스킵으로 뛰어넘으신 분들도 있으실 수 있겠습니다. 큰 걱정 하실 필요는 없는게, 실제 회사에서 종이와 펜을 들고 `0`과 `1` 비트연산을 하고 앉아있지는 않습니다. 실무에서는 이렇게 사용됩니다.

예를 들어 고객사에서 다음과 같은 요청이 왔다고 가정합니다.

**이번 내부망 스코프는 다음과 같습니다**

* 전체 스코프: 10.10.0.0/22
* 프로덕션 백업 네트워크(여기는 모의해킹 하지 말아주세요!): 10.10.2.0/24
* 레거시 네트워크 (여기 스캔좀 살살해주세요): 10.10.3.0/24

모의해킹 범위가 주어졌습니다. 서브넷 계산기를 통해 `10.10.0.0/22`, `10.10.2.0/24`, `10.10.3.0/24`에 대해서 알아봅니다.

* 전체 스코프: `10.10.0.0/22`
  * 네트워크 주소: `10.10.0.0`
  * 호스트 주소 범위: `10.10.0.1` \~ `10.10.3.254`
  * 총 IP 숫자: 1022

아하, 전체 스코프는 `10.10.0.1` \~ `10.10.3.254`로, 총 호스트가 존재할 수 있는 IP 숫자는 1022개입니다. 물론 IP범위가 그렇다는 것이지, 실제 호스트는 1000대일수도, 1대 일수도 있습니다.

* 프로덕션 백업: `10.10.2.0/24`
  * 네트워크 주소: `10.10.2.0`
  * 호스트 주소 범위: `10.10.2.1` \~ `10.10.2.254`
  * 총 호스트 IP 숫자: 254

프로덕션 백업 네트워크는 모의해킹을 하지 말아달라고 요청이 들어왔습니다. `10.10.2.1` 에서 `10.10.2.254`까지의 아이피주소들은 제외 한 뒤 모의해킹을 진행해야겠습니다.

* 레거시: `10.10.3.0/24`
  * 네트워크 주소: `10.10.3.0`
  * 호스트 주소 범위: `10.10.3.1` \~ `10.10.3.254`
  * 총 호스트 IP 숫자: 254

레거시 네트워크는 살살 모의해킹을 하라고 합니다.

즉,

* `10.10.0.1` \~ `10.10.0.254` - 정상 모의해킹
* `10.10.1.1` \~ `10.10.1.254` - 정상 모의해킹
* `10.10.2.1` \~ `10.10.2.254` - 백업 네트워크, 모의해킹 제외!
* `10.10.3.1` \~ `10.10.3.254` - 레거시 네트워크, 살살 스캐닝 (`nmap -T2` 사용!)

이런식으로 실무에서 네트워킹 지식들이 사용되게 됩니다.

#### 포트 & DNS <a href="#bkmrk-ed-8f-ac-ed-8a-b8-26-dns" id="bkmrk-ed-8f-ac-ed-8a-b8-26-dns"></a>

위 필수 용어 중에서도 특히 중요한 포트와 DNS의 대해서 더 자세히 다뤄봅니다.

**포트(Port)**

포트는 네트워크에서 프로세스 간 통신을 위한 논리적인 채널을 나타내며, 각 포트는 특정 프로세스에 연결되어 해당 프로세스와 통신합니다. 주로 TCP/IP 프로토콜 스택에서 사용되며, 포트는 0부터 65535까지의 숫자로 표현됩니다.

포트는 열린 포트(Open Port), 닫힌 포트(Closed Port), 필터링 된 포트( Filtered Port)로 구분됩니다.

1. 열린(Open): 포트가 활성화되어 있고, 데이터 트래픽을 수신할 수 있는 상태입니다. 즉, 해당 포트를 통해 서비스나 응용 프로그램이 정상적으로 동작하고 있습니다.
2. 닫힌(Closed): 포트가 비활성화되어 있어서 데이터 트래픽을 수신하지 않는 상태입니다. 이는 해당 포트에 대한 서비스가 비활성화되어 있거나, 방화벽 등의 보안 설정으로 인해 통신이 차단되었을 수 있습니다.
3. 필터링(Filtering 또는 Stealth): 포트는 열린 상태로 보이지 않으며, 방화벽 등의 보안 장치에 의해 트래픽이 차단되어 있어 외부로부터의 접근을 거부하고 있는 상태입니다. 일종의 숨겨진 상태로, 외부에서 해당 포트의 존재를 감지하기 어렵게 만들어 보안을 강화합니다.

아래 다이어그램과 같이 웹 서버 서비스는 열린 포트 80을 통해 동작하고 있으며 SSH 서버는 포트 22은 닫힌 포트로 비활성화 된 서비스라고 할 수 있습니다.

따라서 외부에서 볼때 아래 호스트의 포트 80에서 운영되는 웹 서버 서비스는 연결 가능하지만 포트 22의 SSH 서비스는 연결 불가능한 상태로 나타납니다

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/7dJZ4qU4386AODXH-image-1735727649840.png" alt=""><figcaption></figcaption></figure>

TCP/IP 프로토콜에서는 대표적으로 다음과 같은 세 가지 종류의 포트를 사용합니다:

1. **잘 알려진 포트 (Well-Known Ports) - 0 \~ 1023**
   * 0부터 1023까지의 포트로, 자주 사용되는 네트워크 서비스에 할당된 포트입니다. 예를 들어, SSH는 22, HTTP는 포트 80, HTTPS는 포트 443등을 사용합니다.
2. **등록된 포트 (Registered Ports) - 1024 \~ 49151**
   * 1024부터 49151까지의 포트로, 회사나 개인이 네트워크 서비스나 소프트웨어가 특정 포트를 사용할 것이라고 등록할 수 있습니다.
3. **Dynamic/Ephemeral Ports - 49152 \~ 65535**
   * 사용자 애플리케이션, 특히 클라이언트들에 의해 임시적으로 사용되는 포트입니다. 예를 들어 여러분들의 크롬.exe가 구글 웹서버 포트 443을 방문할때, 여러분들의 크롬.exe는 이런 Ephemeral 포트 (예. 52314)를 사용해 세션을 구축합니다.

**특히 중요한 포트**

> !! 중요 !! - 포트 번호와 해당 포트에서 실행중인 네트워크 서비스와의 관계는 강제성이 없습니다. 즉, HTTP를 포트 9999에서 실행할 수도 있고, DNS를 포트 65221에서 실행할 수 있습니다. 포트 80을 방문했더니 SSH가 실행중일수도 있습니다.

아래는 자주 사용되는 네트워크 서비스와 포트 번호들간의 맵핑입니다.

1. **HTTP (포트 80)**
   * HyperText Transfer Protocol(HTTP)는 웹 브라우징을 위한 기본 프로토콜로, 포트 80을 사용합니다.
2. **HTTPS (포트 443)**
   * HTTP의 보안 버전인 HTTPS는 포트 443을 사용하여 암호화된 통신을 제공합니다.
3. **DNS (포트 53)**
   * 도메인 이름 시스템(DNS)은 호스트 이름을 IP 주소로 변환하거나, IP 주소를 호스트 이름으로 변환하는 데 사용되며, 포트 53을 사용합니다.
4. **FTP (포트 20 및 21)**
   * 파일 전송 프로토콜(FTP)은 파일 전송을 위한 프로토콜로, 포트 20은 데이터 전송을 위한 포트이고, 포트 21은 제어 연결에 사용됩니다.
5. **SSH (포트 22)**

* SSH(Secure Shell)는 안전한 원격 터미널 접속을 제공하는 프로토콜로, 포트 22를 사용합니다. SSH는 암호화된 통신을 통해 원격 시스템에 안전하게 접속하고 명령을 실행할 수 있게 해줍니다.

6. **SMTP (포트 25)**
   * 메일 전송 프로토콜(SMTP)은 이메일을 전송하는 데 사용되며, 포트 25를 통해 통신합니다.

**DNS (Domain Name System)**

DNS는 호스트 이름을 IP 주소로 변환하거나 IP 주소를 호스트 이름으로 변환하는 역할을 하는 시스템입니다.

&#x20;DNS 동작 원리

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/LaALUch0ZO0UafRg-image-1735727610906.png" alt=""><figcaption></figcaption></figure>

위 다이어그램에서 표현하듯 DNS 서버는 사용자가 호스트 이름(예: redraccoon.kr)을 입력할 때 이를 해당 호스트의 IP 주소로 변환하여 통신이 가능하게 합니다.

> DNS는 전체 인터넷의 기능에 필수적이며, 웹 브라우징, 이메일 통신, 서비스 접근 등 다양한 네트워크 활동에 사용됩니다.

### 최종 공격 시나리오 <a href="#bkmrk-ec-b5-9c-ec-a2-85-ea-b3-b5-ea-b2-a9-ec-8b-9c-eb-82-98-eb-a6-ac-ec-98-a4" id="bkmrk-ec-b5-9c-ec-a2-85-ea-b3-b5-ea-b2-a9-ec-8b-9c-eb-82-98-eb-a6-ac-ec-98-a4"></a>

&#x20;최종 호스트간 공격 시나리오

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/scaled-1680-/SJrhA1fzNOX2arsO-image-1735727593932.png" alt=""><figcaption></figcaption></figure>

아래 시나리오는 공격자 호스트 A 1.1.1.1은 타겟 호스트 B 1.1.1.3과 타겟 호스트 C 1.1.2.2를 공격하는 시나리오입니다.

**1. 공격:** 공격자 호스트 A는 DNS를 통해 타겟 호스트 B의 IP를 알아내고 호스트 B에 대한 공격을 시도합니다.

* **방어:** 타겟 호스트 B 1.1.1.3은 방화벽을 통해 공격 호스트 1.1.1.1에서 오는 모든 네트위킹을 차단합니다.

**2. 공격:** 공격자 호스트 A는 DNS를 통해 타겟 호스트 C의 IP를 알아낸 후 정보 수집(모듈 3.1에서 정보 수집에 대해 배웁니다)을 통해 공격 가능한 타겟 호스트 C 1.1.2.2의 오픈 포트 22를 알아냅니다.

* **방어:** 타겟 호스트 C 1.1.2.2는 방화벽을 통해 포트 80에 대한 모든 트래픽을 차단하여 포트 80에 대한 공격 불가능하게 합니다.

**3. 공격:** 공격자 호스트 A는 오픈 포트 22에 대한 공격은 가능합니다.

&#x20;

최종적으로 공격자 호스트 A 1.1.1.1은 타겟 호스트 C 1.1.2.2의 포트 22에서 운영되는 SSH 서비스를 공격하는 시나리오가 완성됩니다.
