
Docker를 사용한 자동화된 Red Team 인프라 배포
초기 릴리스. Redcloud의 개발 업데이트를 받으려면 Twitter에서 저를 팔로우하세요.
💁☁️🐚🌱
Redcloud는 Docker를 사용하여 완전한 기능을 갖춘 Red Team Infrastructure를 배포하기 위한 강력하고 사용자 친화적인 도구 상자입니다. 클라우드의 속도를 도구에 활용하세요. 몇 분 안에 배포됩니다. 세련된 웹 인터페이스로 사용하고 관리하세요.
침투 테스트, 사격장, 레드팀 및 버그 바운티에 이상적입니다!
공격 인프라를 고통 없이 자체 호스팅하고, 몇 분 안에 자신만의 실시간 확장 가능하고 탄력적인 공격 인프라를 배포하세요.
다음 데모는 SSH를 통한 Redcloud 배포와 이어지는 Metasploit을 보여줍니다. 그런 다음 Traefik과 Metasploit에 연결된 라이브 볼륨을 살펴봅니다. 마지막으로 웹 터미널을 통해 Metasploit의 DB가 작동하는지 확인하고, 컨테이너를 삭제한 후 Redcloud를 종료합니다.
설정:```bash
cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys'
eval (docker-machine env default)
python --version
배포:```bash
> git clone https://github.com/khast3x/redcloud.git
> cd redcloud
> python redcloud.py
Redcloud는 사용 가능한 템플릿 목록을 출력하기 위해 PyYAML을 사용합니다. 대부분의 시스템에 기본적으로 설치되어 있습니다.
그렇지 않은 경우, 다음을 실행하세요:```bash
pip install -r requirements.txt
Redcloud에는 3가지 배포 방법이 있습니다:
1. **로컬**
2. **SSH를 통한 원격**. 대상 머신의 `authorized_keys` 파일에 공개 키가 있어야 합니다.
3. **docker-machine을 통한 원격**. `eval (docker-machine env deploy_target)` 명령어를 실행하여 docker-machine 환경을 미리 로드한 후 `redcloud.py`를 실행하세요. Redcloud가 docker-machine을 자동으로 감지하고, docker-machine 배포와 관련된 메뉴 항목을 강조 표시합니다.
___
<h4 align="center">
<b>템플릿</b>
<br>
<br>
</h4>
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/e38f19fa9cc10216030f7856b99170a4ac7c35399c2dd9daf19156a6e9b75e46.png" width="540" title="Redcloud 템플릿">
</p>
___
**간략히,**
`redcloud.py`는 Docker 기반으로 **공격 작업을 위한 많은 도구 템플릿이 미리 로드된** [Portainer](https://www.portainer.io/) 스택을 배포합니다. 배포 후에는 [웹 인터페이스](#screenshots)로 Redcloud를 제어할 수 있습니다. 리버스 프록시로 [Traefik](https://traefik.io/)을 사용합니다. `ssh` 또는 `docker-machine` 시스템을 사용하여 대상 서버에 쉽게 원격 배포할 수 있습니다.
* :rocket: 클라우드에서 Kali를 몇 번의 클릭만으로 실행해보고 싶었던 적이 있나요?
* :package: 도구, 기술, 단계 간에 깔끔한 격리를 원하나요?
* :ambulance: 스캔 및 C2의 상태를 모니터링하고 싶나요?
* :fire: 피싱 캠페인 설정을 위한 시스템 관리 작업을 건너뛰고 더 빨리 해킹하고 싶나요?
* :smiling_imp: 이상적인 공격 인프라를 어떻게 구축할지 궁금하신가요?
웹 UI를 사용하여 각 컨테이너를 모니터링, 관리 및 **상호 작용**하세요. 빠른 웹 터미널을 마치 자신의 것처럼 사용하세요. Portainer의 간단한 UI를 사용하여 볼륨, 네트워크 및 포트 전달을 생성하세요.
데이터센터급 인터넷의 힘으로 즐겨 사용하는 모든 도구와 기술을 배포하고 처리하세요 :rocket:
___
*다음 섹션에서는 Redcloud의 설계 개념에 대해 더 자세히 살펴보겠습니다. 하지만 자세히 알지 않아도 시작할 수 있습니다.*
___
* :book: **목차**
- [소개](#introduction)
- [기능](#features)
- [빠른 시작](#quick-start)
- [세부 사항](#details)
- [Redcloud 아키텍처](#redcloud-architecture)
- [배포 워크플로우](#deployment-workflow)
- [네트워크](#networks)
- [볼륨](#volumes)
- [터미널에서 컨테이너 접근](#accessing-containers-from-the-terminal)
- [파일 접근](#accessing-files)
- [SSL 인증서](#ssl-certificates)
- [Redcloud 중지](#stopping-redcloud)
- [Portainer 앱 템플릿](#portainer-app-templates)
- [Traefik 리버스 프록시](#traefik-reverse-proxy)
- [Redcloud 보안 고려 사항](#redcloud-security-considerations)
- [테스트된 배포 후보](#tested-deployment-candidates)
- [문제 해결](#troubleshooting)
- [사용 사례](#use-cases)
- [스크린샷](#screenshots)
- [기여 지침](#contribution-guideline)
- [Redcloud 호스팅](#hosting-redcloud)
- [영감 및 감사의 말](#inspirations--shout-outs)
___
## 세부 사항
### Redcloud 아키텍처
* `redcloud.py`: Docker 및 Portainer를 사용하여 웹 인터페이스와 앱 템플릿을 시작/중지합니다.
* `portainer`: Portainer 웹 인터페이스.
* `traefik`: 웹 인터페이스, API 및 파일 컨테이너로 가는 Traefik 리버스 프록시 컨테이너. 일부 템플릿에는 편의를 위해 미리 구성된 경로가 있습니다. `templates.yml`을 참조하세요.
* `templates`: 앱 템플릿을 제공하는 python3 `http.server` 컨테이너. "내부" 네트워크에 있습니다.
* `cert_gen`: 일반적인 모범 사례를 사용하여 SSL 인증서를 생성하는 [omgwtfssl](https://github.com/paulczar/omgwtfssl) 컨테이너.
* https://your-server-ip/portainer: 배포 후 Redcloud 웹 인터페이스.
* https://your-server-ip/files: Redcloud `redcloud_files` 볼륨. Traefik과 동일한 `.htpasswd`로 보호되는 `redcloud_log` 컨테이너 콘텐츠에도 접근할 수 있습니다. 기본 자격 증명: `admin:Redcloud`
* https://your-server-ip/api: Traefik 리버스 프록시 상태 모니터링 페이지. 경로, 백엔드, 반환 코드에 대한 실시간 통계를 보여줍니다. Traefik을 통해 구성된 경우 리버스 콜백 임플란트 데이터도 표시됩니다.
### 배포 워크플로우
**Redcloud 배포 워크플로우는 다음과 같습니다:**
1. Redcloud 저장소를 클론/다운로드합니다.
2. `redcloud.py`를 실행합니다.
3. 메뉴에서 배포 후보를 선택합니다 (로컬, ssh, docker-machine).
4. `redcloud.py`는 자동으로:
* 대상 머신에서 `docker` 및 `docker-compose`를 확인합니다.
* 없으면 `docker` 및 `docker-compose`를 설치합니다.
* `docker-compose`를 사용하여 대상에 웹 스택을 배포합니다.
5. 배포가 완료되면 `redcloud.py`가 URL을 출력합니다. https://your-deploy-machine-ip/portainer로 이동하세요.
6. 웹 인터페이스에서 사용자 이름/비밀번호를 설정합니다.
7. 엔드포인트(목록 중 유일한 항목)를 선택합니다.
8. 왼쪽의 "앱 템플릿" 메뉴 항목을 사용하여 템플릿에 액세스하세요 :rocket:
**앱 템플릿 배포는 다음과 같습니다:**
1. 템플릿을 선택합니다.
2. 추가 옵션을 추가하려면 "+ 고급 옵션 표시"를 선택합니다.
3. 원하는 대로 포트 매핑, 네트워킹 옵션, 볼륨 매핑을 추가합니다.
4. "컨테이너 배포"를 선택합니다.
5. Portainer가 컨테이너를 실행합니다. 이미지를 가져와야 하는 경우 몇 분이 걸릴 수 있습니다. 서버가 데이터 센터에 있으면 이 단계가 매우 빠릅니다.
6. 컨테이너가 실행 중이어야 합니다 :rocket:
7. Portainer가 "컨테이너" 페이지로 리디렉션합니다. 거기서 다음을 수행할 수 있습니다:
a. 라이브 컨테이너 로그 보기.
b. 컨테이너 세부 정보 검사 (`docker inspect`).
c. 라이브 컨테이너 통계 보기 (메모리/CPU/네트워크/프로세스).
d. 웹 셸을 사용하여 컨테이너와 상호 작용.
e. 앱 템플릿에 따라 `bash` 또는 `sh`를 사용합니다. 드롭다운 메뉴에서 적절히 선택하세요.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/cf013b73e9bb7dc6f94dafbd31d9d158f7736fc676f94995c64de133ad9bebbe.png" width="540" title="Redcloud 메뉴">
</p>
### 네트워크
Redcloud를 사용하면 네트워크와 컨테이너를 쉽게 가지고 놀 수 있습니다.
다른 드라이버로 추가 네트워크를 생성하고 원하는 대로 컨테이너를 연결할 수 있습니다. Redcloud는 `redcloud_default`와 `redcloud_inside`의 2개 네트워크와 함께 제공됩니다.
### 볼륨
볼륨을 공유하여 컨테이너 간에 데이터를 공유할 수 있습니다. Redcloud는 3개의 볼륨과 함께 제공됩니다:
* `certs`: [omgwtfssl](https://github.com/paulczar/omgwtfssl)이 생성한 인증서가 있는 컨테이너.
* `files`: 표준 파일 공유 볼륨. 현재로서는 https://your-server-ip/files를 탐색할 때 파일을 사용할 수 있으며, Traefik 리버스 프록시 컨테이너가 `files` 볼륨에서 직접 제공합니다. 일반적인 사용 사례는 Metasploit 컨테이너에 볼륨을 연결하고 페이로드를 `files` 볼륨에 직접 생성하는 것입니다. 이제 Traefik을 통해 파일 서버 경로로 바로 신선한 페이로드를 제공할 수 있습니다.
* `logs`: 로그에 사용 가능하며, 파일 서버에서도 제공됩니다. 액세스하려면 기본 인증이 필요합니다. 기본값은 `admin:Redcloud`입니다.
### 터미널에서 컨테이너 접근
터미널에 머물면서 배포된 컨테이너로 작업하고 싶다면 Docker를 사용하면 매우 쉽습니다. 다음 사항을 명심하세요:
* 대부분의 컨테이너에는 `bash`가 있지만 일부는 대신 `sh`를 사용합니다.
* 모든 Redcloud 앱 템플릿 컨테이너 이름은 `red_`로 시작합니다 (예: `red_msf-postgresql`).
* Docker를 사용하면 `docker exec` 또는 `attach`를 사용하여 컨테이너와 상호 작용할 수 있습니다.
* `exec`는 새 프로세스를 생성하므로 선호됩니다.
* `attach`는 실행 중인 프로세스에 직접 연결되어 컨테이너를 종료시킬 수 있습니다.
* Redcloud를 실행하는 경우:
* 로컬 또는 `docker-machine`을 사용하는 경우, 로컬 셸에 다음 명령을 입력하면 됩니다.
* `ssh`를 사용하는 경우, 먼저 배포 대상에 ssh로 접속한 후 다음 명령을 실행하세요.
원하는 배포된 컨테이너와 상호 작용을 시작하려면:```bash
> docker exec -it red_container-name /bin/bash
root@70a819ef0e87:/#
다음 메시지가 표시되면, bash가 설치되지 않은 것입니다. 이 경우 /bin/bash를 /bin/sh로 바꾸십시오:```bash
docker exec -it red_container-name /bin/bash OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: "/bin/bash": stat /bin/bash: no such file or directory": unknown
docker exec -it red_container-name /bin/sh
`docker attach`를 사용하려면, 다음을 실행하십시오:```bash
> docker attach red_container-name
attach를 사용하는 경우, 컨테이너는 interactive mode로 시작되어야 인터랙티브 셸에 진입할 수 있습니다.
브라우저에서 https://your-redcloud-ip/files로 접속하세요.
자세한 내용은 files 볼륨을 참조하세요.
Redcloud는 배포 시 새로운 서명되지 않은 SSL 인증서를 생성합니다.
인증서는 omgwtfssl에 의해 생성되며, 대부분의 모범 사례를 구현합니다.
생성 후:
기본적으로 생성된 인증서를 /certs에 덤프하며, 표준 YAML 형식으로 stdout에도 출력하여 Ansible 또는 YAML을 사용하는 다른 도구에서 쉽게 사용할 수 있습니다.
인증서는 certs라는 공유 Docker 볼륨에 저장됩니다. 컨테이너를 배포할 때 "+ 고급 설정"에서 이 볼륨을 지정하면 컨테이너가 이 볼륨에 접근할 수 있습니다. Traefik 리버스 프록시 컨테이너는 설정 파일에서 직접 인증서를 가져옵니다. 이 인증서를 자신의 것으로 교체하려면 이 볼륨에서 간단히 교체하면 됩니다.
또한 생성된 인증서를 Empire나 Metasploit과 같은 다른 컨테이너(리버스 콜백 또는 피싱 캠페인용)와 공유할 수 있습니다.
SSL 관련 구성의 대부분은 traefik/traefik.toml 또는 docker-compose.yml 파일에서 찾을 수 있습니다.
메뉴에서 직접 Redcloud를 중지할 수 있습니다.
배포된 앱 템플릿은 Redcloud를 중지하기 전에 수동으로 중지해야 합니다. Portainer 웹 인터페이스 또는 docker rm -f container-name 명령을 사용하여 중지할 수 있습니다.
Redcloud를 실행하는 Portainer 컨테이너를 강제로 중지하려면 redcloud/ 폴더에서 docker-compose kill을 실행하면 됩니다.
로컬 및 docker-machine 중지 옵션은 동일하므로 하나의 옵션으로 결합됩니다.
Redcloud는 Portainer를 사용하여 Docker 엔진을 오케스트레이션하고 인터페이스로 연결합니다. Portainer 자체는 Docker 배포를 원격으로 관리하는 훌륭한 프로젝트입니다. Portainer에는 또한 매우 편리한 템플릿 시스템이 포함되어 있으며, 이는 Redcloud 배포의 주요 구성 요소입니다.
템플릿은 ./templates/templates.yml에서 찾을 수 있습니다. Portainer는 전용 컨테이너(templates)에서 템플릿 파일을 가져옵니다.
Traefik은 훌륭한 "클라우드 네이티브 에지 라우터"입니다. 이전 NGINX 리버스 프록시 설정을 대체했습니다.
배포 중에 traefik/Dockerfile에 있는 Dockerfile을 사용하여 Traefik 이미지가 빌드됩니다. 여기에는 admin:Redcloud 자격 증명이 포함된 .htpasswd가 추가됩니다.
기본적으로 배포 시 다음과 같은 경로가 생성됩니다:
https://your-server-ip/portainerhttps://your-server-ip/fileshttps://your-server-ip/api인증은 .htaccess 데이터를 기반으로 합니다.
Traefik API 웹 인터페이스에서 배포된 경로를 보고, 상태를 모니터링하며, 실시간 메트릭을 확인할 수 있습니다. 매우 편리합니다.
Traefik에 트래픽을 라우팅할 위치를 알려주는 추가 레이블을 추가할 수 있습니다. 다음 중 하나를 사용하세요:
traefik/traefik.toml 파일docker-compose.yml 파일templates.yml 파일자세한 내용은 공식 문서를 참조하세요.

Redcloud는 자체 서명된 HTTPS 인증서와 함께 배포되며, 모든 웹 콘솔과의 상호 작용을 이를 통해 프록시합니다.
그러나 기본 네트워크는 컨테이너의 포트를 외부에 노출시킵니다.
다음을 수행할 수 있습니다:
labels를 추가하여 Traefik으로 경로 생성. docker-compose.yml 파일에서 영감을 얻으세요.추가로:
docker 및 docker-machine 설치에는 루트 권한이 필요합니다. 공식 문서에 따라 권한을 낮출 수 있습니다.redcloud.py는 icanhazip.com을 사용하여 Redcloud의 공인 IP 주소를 가져옵니다.| 배포 대상 | 상태 |
|---|---|
| Ubuntu Bionic | ✔️ |
| Ubuntu Xenial | ✔️ |
| Debian Stretch | ✔️ |
python --version으로 기본 Python 버전을 확인하세요. Redcloud는 Python 3+가 필요합니다.python 대신 python3를 사용하세요.redcloud.py는 배포 대상이 .ssh/authorized_keys에 공개 키를 가지고 있어야 하며, 사용자의 공개 키를 사용하여 비밀번호 없는 인증을 처리합니다. 이는 대부분의 VPS 워크플로우의 기본 구성입니다.eval 명령을 실행하면 됩니다.docker 및 docker-machine 설치에는 루트 권한이 필요합니다. 공식 문서에 따라 권한을 낮출 수 있습니다.rm -rf /opt/portainer/dataapt-get install python3-distutils를 사용하여 python3-distutils 패키지를 설치해야 할 수 있습니다./files/ URI를 통해 즉시 제공하세요./files/ URI를 사용하여 로그를 가져오세요.
msfconsole 사용
모든 도움을 환영합니다. 이는 사이드 프로젝트이므로 약간의 나사와 볼트가 빠져 있을 수 있습니다. 무엇보다도:
Docker를 실행하는 모든 Unix 서버에서 Redcloud를 호스팅할 수 있습니다.
Redcloud는 간단한 SSH가 가능한 VPS 또는 AWS EC2, GCP 등과 같은 클라우드 환경에서 사용하도록 설계되었습니다.
많은 클라우드 제공업체가 서비스에 익숙해지도록 무료 크레딧을 제공합니다. 주요 업체로부터 무료 호스팅 크레딧을 받는 방법을 다루는 많은 목록과 튜토리얼이 있습니다. 이 목록이 시작하기 좋은 곳입니다.
배포 방법에 관해서는, 저는 개인적으로 docker-machine을 선호합니다. 클라우드 제공업체의 드라이버 설정을 완료하면 새 머신을 생성하고 관리하는 것이 매우 쉬워집니다. ssh를 선호한다면 evilsocket의 shellz 프로젝트를 살펴보세요. 키와 프로필을 관리하는 데 도움이 됩니다.
Red Team Infrastructure Wiki - bluscreenofjeff
Automated Red Team Infrastructure Guide - rastamouse
Safe Red Team Infrastructure - Tim MalcomVetter
Red Baron - Coalfire Research
Rapid Attack Infrastructure - Obscurity Labs
Decker - Steven Aldinger
hideNsneak - Mike Hodges
마지막으로, 여러분의 도구를 통합하고 싶다면 Twitter로 연락 주세요. 이 프로젝트는 제 자유 시간에 유지 관리됩니다. dev 브랜치에서 향후 기능을 확인하세요.
Redcloud는 정보 보안 학생들을 위한 교육 환경 배포를 더 쉽게 만들기 위해 처음 개발되었습니다.
이 프로젝트의 업데이트를 받고 싶다면:
portainer가 기본 볼륨 위치 /opt/를 사용할 수 없습니다. 이 문제를 해결하려면 docker-compose.yml 파일을 열고 /opt/portainer/data:/data를 쓰기 가능한 폴더(예: /tmp/portainer/:/data)로 바꾸고, Redcloud를 실행하기 전에 /tmp/portainer 디렉토리를 생성하세요.