
docker-compose를 사용한 로컬 침투 테스트 랩.
이 프로젝트는 더 이상 적극적으로 개발하지 않지만, 버그 수정 및 이슈와 풀 리퀘스트는 검토할 것입니다. 도움은 언제나 환영합니다 :)
이 로컬 펜테스트 랩은 docker compose를 사용하여 여러 피해자 서비스와 Kali Linux를 실행하는 공격자 서비스를 구동합니다. 처음으로 이 랩을 실행하면 다양한 도커 이미지를 다운로드하는 데 시간이 걸릴 수 있습니다.
실행된 명령어:
./lab.sh --help./lab.sh --check-dependencies./lab.sh --up --all-services./lab.sh --info./lab.sh --overview allssh root@kali -o "UserKnownHostsFile /dev/null"./lab.sh --down모든 필요한 의존성이 설치되어 있다면 랩은 기본적으로 작동해야 합니다. 시작 시 랩은 의존성 확인을 실행합니다.
git clone https://github.com/oliverwiegers/pentest_lab
cd pentest_lab
./lab.sh -u
기본적으로 랩은 모든 피해자 서비스와 하나의 레드팀 서비스를 시작합니다. 다른 서비스를 시작하거나 추가할 수 있습니다. 자세한 내용은 아래에서 확인할 수 있습니다.
더 자세한 사용 정보는 ./lab.sh -h | --help로 표시되는 도움말 메시지를 읽어보세요.
랩에는 시작 시 실행되는 내장 의존성 확인 기능이 있습니다. 수동으로도 실행할 수 있습니다: ./lab.sh -C.
편의를 위해 Heimdall 인터페이스가 추가되었으며 localhost:7000에 노출됩니다. 로컬 머신에 노출되어 브라우저를 통해 접근할 수 있는 모든 서비스가 여기에 나열됩니다. 인터페이스에 적용된 변경 사항은 자동으로 ./etc/heimheimdall에 저장됩니다. 이 디렉터리는 랩을 중지할 때 ./etc/heimdall.tar로 변환됩니다. 이 tar 아카이브는 시작 시 추출됩니다. ./etc/heimdall.tar와 ./etc/heimdall 모두 기본적으로 git에서 무시됩니다.
사용된 배경화면은 여기에서 찾을 수 있습니다.
이 랩은 다음 네 가지 유형의 서비스를 지원합니다.
기본 레드팀 서비스인 Kali 서비스는 아주 기본적인 Kali 인스턴스입니다. 그럼에도 kali-tools-web 메타패키지가 설치되어 있습니다. 웹 애플리케이션 테스트 랩에서는 기본 웹 테스트 도구가 유용할 것으로 보입니다. 이는 이미지를 빌드하는 Dockerfile을 편집하여 변경할 수 있습니다. Dockerfile은 ./dockerfiles/kali에 있습니다. Kali 서비스는 기본적으로 이러한 dotfiles를 설치합니다. 이 또한 Dockerfile을 수정하여 변경할 수 있습니다.
모니터링 서비스는 블루팀 서비스이기도 하지만 별도의 카테고리로 분리되어 있습니다.
이 스택은 로그 및 성능 관찰 기능을 제공합니다.
개별 인스턴스에 대한 자세한 내용은 아래를 참조하세요.
현재 모니터링 설정은 다음 서비스로 구성되어 있습니다:
Grafana 인스턴스는 로그용과 메트릭용 두 개의 대시보드를 제공합니다.
이들은 매우 기본적입니다. Grafana 인터페이스를 통해 대시보드를 추가하여 더 많은 것을 추가할 수 있습니다. grafana 볼륨이 삭제되면 이러한 대시보드는 사라집니다. 영구적으로 대시보드를 추가하려면 Grafana의 프로비저닝 문서를 참조하세요. 프로비저닝에 사용되는 디렉터리는 ./etc/grafana/에 있습니다.
Grafana 인터페이스를 통해 설정을 변경하려면 admin으로 로그인해야 합니다. 자격 증명은 기본값인 admin:admin입니다. #hacktheplanet
Loki가 도커 로그를 수집할 수 있도록 이 랩은 Loki Docker Driver를 Docker 플러그인으로 설치합니다.
프로메테우스가 클러스터에서 실행 중인 컨테이너의 성능 메트릭에 접근할 수 있도록 cAdvisor가 사용됩니다.
추가 서비스를 추가하려면 docker-compose.yml 파일에 대한 약간의 지식이 필요합니다. 이 저장소 루트의 docker-compose.yml은 랩이 시작될 때 자동 생성됩니다. 이 과정은 ./etc/services 아래에 있는 yaml 파일을 사용합니다.
➜ pentest_lab tree ./etc/services
./etc/services
├── blue_team
│ └── endlessh.yml
├── default.yml
├── monitoring
│ ├── cadvisor.yml
│ ├── grafana.yml
│ ├── loki.yml
│ └── prometheus.yml
├── red_team
└── victim
├── beginner
│ ├── bwapp.yml
│ ├── dvwa.yml
│ ├── hackazon.yml
│ ├── tiredful.yml
│ ├── webgoat.yml
│ └── xvwa.yml
├── expert
│ └── juice-shop.yml
└── intermediate
└── ninjas.yml
어떤 서비스를 시작할지는 ./lab.sh를 해당 옵션과 함께 호출하여 제어합니다. 서비스를 영구적으로 비활성화하려면 .yml 파일 확장자를 제거하세요.
피해자 서비스의 예는 다음과 같습니다:
bwapp:
labels:
class: 'victim'
cluster: 'pentest_lab'
level: 'beginner'
image: raesene/bwapp
ports:
- '8080:80'
networks:
pentest_lab:
ipv4_address: 10.5.0.100
hostname: bwapp
volumes:
- bwapp-data:/var/lib/mysql
참고: 서비스가 첫 사용 시 일종의 설치가 필요한 경우 docker inspect <image_name>을 사용하여 도커 이미지가 데이터를 저장하는 위치를 확인하고 이 디렉터리를 가리키는 볼륨을 추가하세요. 위 예에서는 다음과 같습니다:
volumes:
- bwapp-data:/var/lib/mysql
이렇게 하면 랩을 다시 시작할 때마다 서비스를 다시 설정할 필요가 없습니다. 하지만 랩을 초기화하고 완전히 처음부터 다시 시작하려면 ./lab.sh -p | --prune을 사용할 수 있습니다. 이 명령은 랩이 소유한 모든 리소스를 삭제합니다.
고정 IP 주소를 사용한 이유는 Kali 박스가 SSH 로그인을 단순화하기 위해 변경되지 않는 IP 주소를 가져야 하기 때문입니다. 자세한 내용은 아래의 팁/트릭 섹션에서 확인하세요.
서비스를 추가하고 이 랩을 실행하는 사람에게 유용한 추가 정보가 있다면 ./etc/services_info에 추가할 수 있습니다. 이 파일의 내용은 ./lab.sh -i를 실행하면 있는 그대로 줄 단위로 출력됩니다.
Kali 서비스에 쉽게 연결하려면 $HOME/.ssh/config에 다음을 추가할 수 있습니다:
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
따라서 ssh [email protected] -o "UserKnownHostsFile /dev/null" 대신 ssh kali를 실행할 수 있습니다.
tmux 사용자의 경우 다음은 자동으로 tmux 세션에 연결합니다:
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
RequestTTY yes
RemoteCommand tmux -L tmux new-session -As hacktheplanet