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

# 호스트 개념

## 호스트 및 네트워크 개요

1. 호스트 기반 모의 해킹 필수 개념
   * 호스트 개념  : 타겟 호스트와 소통하고, 이를 공격하기 위해
     * 운영 체제 개념 및 명령어
       * 리눅스와 쉘 (Shell), 리눅스 필수 명령어 실습
       * 윈도우와 필수 명령어 실습
2. 네트워킹 개념  : 네트워크를 건너 타겟 호스트를 공격하기 위해
   * 모의 해킹에 필요한 네트워킹 용어
   * OSI Model vs 공격 벡터
   * 시스템 및 네트워킹 명령어

## 호스트 - 리눅스 & 쉘

1. 리눅스(Linux) : 오픈소스 운영 체제 커널. 1991년 리누스 토발즈가 개발
   * 오픈소스 & 무료
   * 전세계 기업에서 많이 사용
   * 서버, 모바일, 워크스테이션, IT, OT, loT, SCADA 시스템들에서 사용
2. 쉘(Shell) : 운영체제와 사용자 간의 인터페이스를 제공하는 소프트웨어
   * CLI (Commandline Interface) : 텍스트 + 명령어 기반의 인터페이스
   * GUI (Graphical User Interface) : 그래픽 위주의 마우스 + 버튼 + (키보드) 기반의 인터페이스

### 리눅스(Linux)란? <a href="#bkmrk-eb-a6-ac-eb-88-85-ec-8a-a4-28linux-29-eb-9e-80-3f" id="bkmrk-eb-a6-ac-eb-88-85-ec-8a-a4-28linux-29-eb-9e-80-3f"></a>

리눅스는 1991년에 리누스 토발즈(Linus Torvalds)에 의해 개발된 오픈소스 커널(Kernel)입니다. 커널은 하드웨어와 소프트웨어 자원을 관리하고, 사용자와 시스템간의 소통을 가능케 해주는 운영체제의 핵심 요소입니다. 이 리눅스라는 커널을 이용해 데비안(Debian), 우분투(Ubuntu), 심지어는 칼리 리눅스(Kali Linux)라는 운영체제들이 만들어질 수 있었습니다.

리눅스는 다양한 용도로 사용됩니다. 주로 서버 운영체제로 널리 알려져 있지만, 모바일 기기, 워크스테이션, IT 시스템, OT(운영 기술), IoT(사물 인터넷), SCADA 시스템 등 다양한 분야에서도 사용되며 이러한 용도의 다양성은 리눅스가 안정적이고 확장성 있는 운영 체제로 평가되는 이유 중 하나입니다.

> 운영 체제는 영어로 Operation System 이며 보통 줄여서 OS라고 부릅니다.

#### 공격자들이 \*Nix 계열(리눅스, 유닉스, (맥)) OS 사용하는 이유는? <a href="#bkmrk-ea-b3-b5-ea-b2-a9-ec-9e-90-eb-93-a4-ec-9d-b4-2anix-ea-b3-84-ec-97-b4-28-eb-a6-ac-eb-88-85-ec-8" id="bkmrk-ea-b3-b5-ea-b2-a9-ec-9e-90-eb-93-a4-ec-9d-b4-2anix-ea-b3-84-ec-97-b4-28-eb-a6-ac-eb-88-85-ec-8"></a>

* **오픈소스 & 무료**: \*Nix 운영체제들은 오픈소스이기 때문에 소스 코드에 대한 접근이 자유롭습니다. 이는 공격자들이 시스템 내부를 더 깊게 이해하고, 보안 취약점을 찾는 데 도움이 됩니다.
* **기업/개발자용 운영체제**: \*Nix 기반 운영체제들은 기업과 개발자들 사이에서 널리 사용됩니다. 이는 공격자들이 실제 환경과 유사한 조건에서 공격을 시도하고자 할 때 유용합니다.
* **타겟 OS에 따라 페이로드 제작이 용이**: \*Nix 운영체제는 다양한 플랫폼과 호환성이 높아, 공격자들이 특정 타겟 시스템에 악성 페이로드를 쉽게 제작하고 전송할 수 있습니다.
* **풍부한 툴과 커뮤니티 존재**: \*Nix 환경에서는 다양한 보안 도구와 프레임워크들이 개발되어 있습니다. 또한, 커뮤니티에서는 다양한 경험과 지식을 공유하며 발전하는 풍부한 생태계를 가지고 있습니다.

#### 그중에서도 칼리 리눅스(Kali Linux) 배포판(Distribution)을 사용하는 이유는? <a href="#bkmrk-ea-b7-b8-ec-a4-91-ec-97-90-ec-84-9c-eb-8f-84-ec-b9-bc-eb-a6-ac-eb-a6-ac-eb-88-85-ec-8a-a4-28ka" id="bkmrk-ea-b7-b8-ec-a4-91-ec-97-90-ec-84-9c-eb-8f-84-ec-b9-bc-eb-a6-ac-eb-a6-ac-eb-88-85-ec-8a-a4-28ka"></a>

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

* **Offsec 사의 공식 서포트 및 꾸준한 업데이트**: 칼리 리눅스는 [Offensive Security(Offsec)](https://www.offsec.com/)사에서 개발한 정보보안용 리눅스 배포판입니다. 따라서 높은 신뢰성을 바탕으로 꾸준한 OS 업데이트를 받을 수 있습니다.
* **필요한 툴이 이미 설치 되어 있음**: 칼리 리눅스는 모의해킹에 필요한 기본 보안 툴들이 이미 기본적으로 포함되어 있습니다. 따라서 보안 테스트나 해킹 시나리오에서 필요한 도구들을 추가로 설치하거나 구성할 필요가 없게 해줍니다.
* **필요한 개발 환경 및 툴이 이미 apt 리포에 기본적으로 존재**: 칼리 리눅스는 데비안(Debian) 운영체제 기반으로 만들어져 있어, 다양한 소프트웨어와 개발 도구들을 apt 패키지 매니저를 통해 쉽게 설치할 수 있습니다. 이는 보안 전문가들이 필요한 환경을 빠르게 설정할 수 있게 해줍니다.

이러한 이유로 칼리 리눅스는 주로 보안 전문가들과 윤리적 해커들이 보안 테스트 및 해킹 시나리오를 시뮬레이션하기 위해 사용하는 **대표 운영 체제**로 평가받습니다.

### 윈도우(Windows)란? <a href="#bkmrk-ec-9c-88-eb-8f-84-ec-9a-b0-28windows-29-eb-9e-80-3f" id="bkmrk-ec-9c-88-eb-8f-84-ec-9a-b0-28windows-29-eb-9e-80-3f"></a>

윈도우(Microsoft Windows)는 1985년에 처음으로 발표된 마이크로소프트의 운영체제로, Windows 시리즈는 엔드 유저 워크스테이션인 Windows, 서버용으로 사용되는 Windows Server, 그리고 Windows IoT, Windows Embedded, Windows Mobile 등 다양한 환경에서 사용되고 있습니다.

#### 중요성 <a href="#bkmrk-ec-a4-91-ec-9a-94-ec-84-b1" id="bkmrk-ec-a4-91-ec-9a-94-ec-84-b1"></a>

* **전세계 기업에서의 보편성**: 마이크로소프트 윈도우는 사실상 전세계 기업들에서 **가장 많이** 사용되는 운영체제 및 환경입니다.
* **인프라 및 AD 관리**: Fortune 1000[1](https://guides.redraccoon.kr/books/bhpt/page/fccb6-2Md#footnote_1) 기업의 90% 이상이 윈도우 기반의 액티브 디렉토리(Active Directory - AD)를 온프레미스(on-premise) 인프라로 사용하고 있습니다. 여러분들이 어떤 회사에 취직하시던간에, 회사 어딘가에는 액티브 디렉토리가 실행중일겁니다.
* **서버 환경**: 기업용 인프라에서는 ADCS, SCCM, WSUS, IIS 등과 같은 윈도우 기업용 서버들이 필수적으로 사용되고 있습니다.
* **EntraID (IAM)**: EntraID는 마이크로소프트사가 제공하는 Azure 클라우드 기반의 ID 및 액세스 관리 서비스입니다. 온프레미스 액티브 디렉토리를 사용하던 기업들은 이제 모두 EntraID를 사용해 유저 인증 및 액세스 관리를 진행하고 있습니다.
* **Azure 클라우드**: 마이크로소프트사의 클라우드 플랫폼인 Azure는 다양한 서비스 및 기능을 제공하며, 그 중에서도 윈도우 기반의 서비스들이 상당히 풍부합니다. 따라서 Azure에서 윈도우를 이해하고 관리하는 것은 클라우드 보안을 유지하고 효과적으로 운영하는 데 매우 중요합니다.

#### 윈도우 보안 교육의 난제 <a href="#bkmrk-ec-9c-88-eb-8f-84-ec-9a-b0-eb-b3-b4-ec-95-88-ea-b5-90-ec-9c-a1-ec-9d-98-eb-82-9c-ec-a0-9c" id="bkmrk-ec-9c-88-eb-8f-84-ec-9a-b0-eb-b3-b4-ec-95-88-ea-b5-90-ec-9c-a1-ec-9d-98-eb-82-9c-ec-a0-9c"></a>

* **윈도우 보안 교육 어려움**: 워게임, 웹 보안, Pwn(Binary Exploitation), 리버싱(Reverse Engineering)과 같은 분야에서 리눅스 환경이 윈도우보다 더 많이 사용되고 있어, 윈도우 중심의 보안 교육 리소스가 부족한 상황에 있습니다.
* **유료 라이센스 및 접근성**: 윈도우는 유료 라이센스 및 Closed Source(오픈 소스의 반댓말)로 인해 대학, 학원, 강의, 해킹 팀 등에서의 윈도우 환경에 대한 접근이 리눅스보다 상대적으로 어렵습니다.

**해결책:**

* **클라우드 및 CTF 플랫폼 활용**: 클라우드(AWS, Azure, GCP, 등)에서는 윈도우 기반의 가상 머신을 라이센스 걱정없이 사용할 수 있습니다. Capture The Flag(CTF) 플랫폼에서는 학생들이 라이센스 걱정 없이 윈도우 환경을 사용할 수 있는 환경을 제공해줍니다.
* **윈도우 기반 랩(Lab)을 지원하는 강의 활용 (BHPT!)**: BHPT와 같은 보안 강의에서 제공하는 윈도우 실습 랩을 통해 윈도우 중심의 모의해킹 시나리오를 배워갈 수 있습니다.
* **홈 랩(Home lab) 구축**: 윈도우 Trial 라이센스를 활용하여 개인이나 학습용으로 홈 랩을 구축하여 윈도우 환경에서의 학습 및 연습이 가능합니다.

### 쉘 (Shell) <a href="#bkmrk-ec-89-98-28shell-29" id="bkmrk-ec-89-98-28shell-29"></a>

쉘은 운영체제와 사용자 간의 상호 작용을 제공하는 소프트웨어입니다. 유저는 쉘을 통해 운영 체제에 명령을 내리거나 프로그램들을 실행할 수 있습니다.

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/Jx6UhEBqgLXdbV7N-image-1735726745055.png" alt="Your Image Alt Text" width="563"><figcaption><p>CMD CLI 쉘</p></figcaption></figure>

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/tTGGcSdk1PR4h3Uk-image-1735726753632.png" alt="Your Image Alt Text" width="563"><figcaption><p>Powershell CLI 쉘</p></figcaption></figure>

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/0NKmCv6N82n4rij6-image-1735726764678.png" alt="Your Image Alt Text" width="500"><figcaption><p>리눅스 BASH CLI 쉘</p></figcaption></figure>

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/EkcZJhRqzbXTOUAD-image-1735726773866.png" alt="Your Image Alt Text" width="563"><figcaption><p>리눅스 GNOME GUI</p></figcaption></figure>

해킹 영화에서 주인공이 후드를 뒤집어쓴 채 터미널 16개를 열어놓고 텍스트가 좌르륵 올라가던 바로 그 쉘이 맞습니다. 호스트 기반 모의해킹을 하게 되면 대부분 쉘을 통해 대상 호스트를 공격하게 됩니다. 물론 웹이나 모바일 해킹 같은 경우 근본적으로 쉘을 사용하지 않고 브라우저나 GUI 기반의 프로그램들을 사용하는 경우도 있습니다. 하지만 호스트 기반, 네트워크 기반(외부망/내부망) 모의해킹을 하다보면 많은 시간을 쉘에서 보내게 됩니다.

왜 굳이 GUI기반의 프로그램들이 아니라 쉘을 사용하는지에 대해서는 `CLI 쉘의 특징` 섹션에서 설명합니다.

### 프로그램 인터페이스 종류 <a href="#bkmrk-ed-94-84-eb-a1-9c-ea-b7-b8-eb-9e-a8-ec-9d-b8-ed-84-b0-ed-8e-98-ec-9d-b4-ec-8a-a4-ec-a2-85-eb-a" id="bkmrk-ed-94-84-eb-a1-9c-ea-b7-b8-eb-9e-a8-ec-9d-b8-ed-84-b0-ed-8e-98-ec-9d-b4-ec-8a-a4-ec-a2-85-eb-a"></a>

사람이 프로그램과 소통할때에는 인터페이스를 사용합니다. 사람이 차를 운전할 때 핸들과 악셀이라는 인터페이스를 사용하듯, 사람이 프로그램과 소통할때에도 다양한 종류의 인터페이스를 이용할 수 있습니다.

#### CLI (Command Line Interface) <a href="#bkmrk-cli-28command-line-in" id="bkmrk-cli-28command-line-in"></a>

CLI(Command Line Interface)는 텍스트 기반의 사용자 인터페이스로, 터미널 또는 명령 프롬프트와 같은 환경에서 명령어를 입력하고 실행하는데 사용됩니다. 리눅스의 터미널은 대표적인 CLI 환경입니다.

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/TAGfi53ksJFM1gAx-image-1735726798710.png" alt="Your Image Alt Text" width="500"><figcaption><p>리눅스 Bash CLI를 통해 libreoffice 실행</p></figcaption></figure>

#### GUI (Graphical User Interface) <a href="#bkmrk-gui-28graphical-user" id="bkmrk-gui-28graphical-user"></a>

GUI는 그래픽 위주의 사용자 인터페이스를 의미합니다. 마우스와 버튼을 사용하여 사용자가 프로그램이나 시스템을 조작할 수 있도록 합니다. GUI는 일반적으로 텍스트 기반의 CLI에 비해 직관적이며 시각적으로 더 풍부한 환경을 제공합니다. 대표적인 예로는 리눅스의 GNOME, KDE 등이 있습니다.

<figure><img src="https://guides.redraccoon.kr/uploads/images/gallery/2025-01/97TI5b2BmSn1BQme-image-1735726823553.png" alt="Your Image Alt Text" width="563"><figcaption><p>리눅스 GNOME을 통해 libreoffice 실행</p></figcaption></figure>

#### CLI 쉘의 특징 <a href="#bkmrk-cli-ec-89-98-ec-9d-98-ed-8a-b9-ec-a7-95" id="bkmrk-cli-ec-89-98-ec-9d-98-ed-8a-b9-ec-a7-95"></a>

우리가 평상시 맥OS나 윈도우를 사용할때는 GUI를 사용합니다. 문서를 작성할때도, 게임을 할때도, 브라우저로 넷플릭스를 볼때에도 GUI를 사용합니다. 2023년 기준으로 왜 굳이 70년대, 80년대나 사용할법한 CLI 쉘을 사용해 모의해킹을 진행하는 것일까요?

아래와 같은 CLI 쉘의 특징들은 보안 및 시스템 관리와 같은 다양한 작업을 수행하는 데 매우 유용합니다.

1. 속도 (Speed): CLI는 텍스트 기반으로 작동하기 때문에 운영 체제와 직접적으로 소통할 수 있습니다. 이는 시스템 호출(syscalls)을 통해 빠르게 명령을 실행하고 응답을 받을 수 있음을 의미합니다.
2. 상호운용성 (Interoperability): CLI를 사용하면 다른 도구들과의 입/출력을 효율적으로 주고 받을 수 있습니다. 이는 데이터와 다양한 도구들을 연결하여 복잡한 작업을 자동화하고 간편하게 수행할 수 있음을 의미합니다.
3. 가벼움 (Lightweight): CLI는 그래픽 또는 운영 체제 입/출력과 같은 많은 종류의 라이브러리가 필요하지 않습니다. 이는 환경을 가볍게 유지하고 더 적은 자원을 사용하도록 도와줍니다.
4. 크로스 플랫폼 (Cross-Platform): CLI는 특정 언어를 사용하는 경우, 다양한 운영 체제에서 실행할 수 있습니다. 이는 동일한 스크립트 또는 도구를 여러 환경에서 사용할 수 있음을 의미합니다.
5. Headless Environment: 기업용 서버나 컨테이너와 같은 headless 환경에서는 GUI가 없습니다. 이러한 환경에서는 CLI가 필수적입니다. CLI를 통해 공격자들은 GUI 없이도 해당 환경에 접근하고 조작할 수 있습니다.

2000대의 호스트를 스캔한 뒤, 포트 80,443,8443이 열린 IP주소만 파싱한 뒤 이를 `gowitness`라는 툴에 집어넣어 스크린샷을 찍어오고, 해당 스크린샷에 들어가 있는 글을 광학 문자 인식(OCR)을 통해 어떤 웹 애플리케이션이 실행중인지 알아보는 작업을 하고 싶다고 가정하겠습니다.

> GUI를 사용한다면,일단 Nmap, Gowitness, OCR 툴 총 3개의 GUI를 먼저 켜야합니다. 그 뒤 Nmap이 끝나면 파싱을 하기 위해 메모장이나 VSCode, Sublime Text 등의 프로그램을 또 켜야합니다. 그 뒤 열린 포트를 손으로 직접 적고, IP주소를 또 일일히 기록해야합니다. 그 뒤, 이 IP주소를 OCR 툴에 집어넣어야합니다. 근데 이런, 이 윈도우에 깔린 OCR 툴은 IP를 인식하지 않고 호스트 이름만 입력값으로 받습니다. 다시 또 다른 프로그램을 켜 IP주소를 호스트 이름으로 변환하고 ....

상상만 해도 머리가 터질 것 같습니다.

> CLI를 사용한다면...

{% code fullWidth="false" %}

```
nmap -iL scope.txt -Pn -n --open -p 80,443,8443 -oA output.gnmap
gowitness nmap -f ./output.xml -P . -t 20 
pyocr -iL ./*.png -o screenshot-ocr-strings.txt ; cat screenshot-ocr-strings | grep -i cisco UCM
```

{% endcode %}

등의 프로그램과 명령어 몇개만 사용하면 바로 원하는 일들 다 끝내놓을 수 있습니다. 심지어 위의 과정들을 간단한 스크립트로 만든 뒤 자동화시켜 모의해킹 플젝에 투입될때마다 사용할수도 있습니다.

이처럼 모의해킹 시 정보 수집 및 공격에 있어 CLI 기반의 쉘을 사용하는 것이 효율성이 너무 좋아 해킹에는 CLI를 많이 사용합니다.

### 윈도우 쉘 <a href="#bkmrk-ec-9c-88-eb-8f-84-ec-9a-b0-ec-89-98" id="bkmrk-ec-9c-88-eb-8f-84-ec-9a-b0-ec-89-98"></a>

리눅스에 sh, bash, zsh등의 다양한 쉘이 있는 것처럼, 윈도우에도 CMD(Command Prompt)와 파워쉘(PowerShell)이라는 두 가지 종류의 쉘 이 있습니다. 오펜시브 시큐리티 및 호스트 기반 모의해킹을 한다면 이 두 종류의 쉘을 모두 사용할 줄 알아야합니다.

#### CMD (Command Prompt) <a href="#bkmrk-cmd-28command-prompt-29" id="bkmrk-cmd-28command-prompt-29"></a>

CMD는 1987년때부터 사용된 윈도우 운영체제의 대표 쉘입니다. 윈도우 NT 커널이전에도 존재했던 쉘이며, 가장 최신의 윈도우 서버 및 엔드포인트 운영체제에도 들어가 있는 쉘입니다. CMD의 경우 마이크로소프트사에서 CLI를 이용한 자동화나 스크립팅의 중요성을 인시갛지 못하고 있었던 시절 만들어진 쉘이기 때문에, 자동화를 하는데 있어 어느정도의 제약이 있습니다.

모의해킹을 기준으로는 파워쉘(PowerShell)이 가지고 있는 기능이 너무 많아 CMD를 잘 사용하지 않지만, 그래도 윈도우의 가장 기본적인 쉘인 만큼 사용법 및 명령어는 필수적으로 알아놔야 합니다. 또한, 오래된 윈도우 운영체제들 - 윈도우XP, 윈도우7, 윈도우 서버 2003 이전 등 - 은 파워쉘이 기본적으로 설치되어 있지 않습니다. 이런 레거시 시스템들은 마주치기 어렵지만, 실무를 하다보면 발견할때도 있습니다. 따라서 이런 시스템들을 대상으로 모의해킹을 진행할때는 CMD 사용법을 알고 있어야 합니다.

**파워쉘(PowerShell)**

파워쉘(PowerShell)은 CMD의 뒤를 이어 2006년도에 출시된 CLI, 스크립팅 언어, 구성 관리 프레임워크, DLL로 구성된 작업 자동화 솔루션입니다. 많은 시스템 관리자와 모의해커들이 파워쉘을 powershell.exe라는 바이너리로 인식하지만, 실제로는 `System.Management.Automation.dll` 라이브러리 파일에 그 핵심 기능이 담겨 있습니다. `powershell.exe` 라는 바이너리는 해당 라이브러리 파일을 감싸고 있는 래퍼(Wrapper) 일 뿐입니다.

파워쉘은 CMD에 비해 훨씬 많은 기능을 제공하는데, 이는 파워쉘이 닷넷 프레임워크(.NET Framework) 기반으로 만들어졌기 때문입니다. 닷넷은 윈도우 개발 플랫폼, 런타임, 프로그래밍 언어, 라이브러리, 개발자 도구 등을 통합한 환경입니다. 간단히 말해, 윈도우에서 프로그래밍적으로 무엇인가를 하고 싶다면 닷넷을 사용합니다. 파워쉘이 닷넷에 접근할 수 있다는 것은 윈도우에서 거의 모든 것에 프로그래밍적으로 접근하고 조작할 수 있다는 의미입니다.

&#x20;

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

닷넷 프레임워크에서 프로그래밍적으로 접근 가능하고 개발 가능한 "것" 들에는 데스크탑, 웹, 클라우드, 모바일, 게임, IoT, AI 등이 있습니다. 예를 들어, 파워쉘에서 닷넷을 이용해 데스크탑 애플리케이션(마이크로소프트 엑셀/워드 등)에서 데이터를 받은 뒤, 웹 API를 통해 API서버로 전송하고, API 응답값을 받아 IoT 기기에 전송을 하거나, AI에 빅데이터로 활용되도록 데이터를 전송하는 것 등이 가능합니다.

이는 곧 공격자가 파워쉘을 이용해 윈도우의 거의 모든 부분과 프로그래밍적으로 소통하고, 데이터를 전송하거나 수집하고, 공격을 수행할 수 있다는 것을 의미합니다. 일반적인 개발자와 시스템 관리자들에게도 강력한 "파워"쉘이지만, 공격자들에게는 특히 더 강력한 "파워"쉘이라고 볼 수 있습니다. 따라서 모의해커 입장에서 파워쉘 사용법을 숙지하는 것은 매우 중요합니다.
