728x90

웹 해킹 실습용 Beebox(= bWAPP가 사전 설치된 VM)를 안전하게 구축·운영 및 실습 환경 표준화, 내부망 안전 가드레일, 훈련 커리큘럼, 로그 수집·평가, 장애 대처, 확장 자동화까지 현장에서 바로 쓰는 수준으로 담았습니다.
- Beebox란? 웹 취약점 학습용 애플리케이션 bWAPP(buggy Web Application) 이 설치된 VM 이미지(일반적으로 VirtualBox/VMware용).
- 목적
- OWASP Top 10 및 고전/현대 웹 취약점 실습
- 보안 교육/모의훈련(리허설·CTF)
- 스캐너/프록시/크롤러 등 보안 도구 실전 테스트
핵심 원칙: 업무망과 완전 격리된 샌드박스에서 관리·운영합니다.
아키텍처(권장)
- 호스트(강사 PC) : VirtualBox/VMware 설치
- 게스트(피실습 서버) : Beebox VM (Host-Only/내부전용 네트워크)
- 게스트(공격자 툴) : Kali Linux 또는 일반 Linux + Burp Suite/OWASP ZAP
- 네트워크 :
Host-Only(or 내부전용 스위치) + NAT 분리 없음 - 명명 규칙 :
lab-net(vboxnet0) /beebox-01..n/attacker-01..n
Host (강사) ── vboxnet0(192.168.56.0/24) ── Beebox VM
└─────────── Attacker VM (Kali/Ubuntu)
설치/초기 설정
1. VirtualBox 기준 (헤드리스 권장)
# OVA 가져오기(파일명은 예시)
VBoxManage import beebox.ova
# Host-Only 네트워크 준비
VBoxManage hostonlyif create
VBoxManage dhcpserver add --ifname vboxnet0 --enable \
--ip 192.168.56.1 --lowerip 192.168.56.100 --upperip 192.168.56.200 --netmask 255.255.255.0
# VM NIC을 Host-Only에 연결
VBoxManage modifyvm "beebox" --nic1 hostonly --hostonlyadapter1 vboxnet0
# 헤드리스 기동
VBoxManage startvm "beebox" --type headless
2. 접근 및 기본 계정
- 브라우저:
http://<beebox-ip>(예:http://192.168.56.101) - bWAPP 웹 로그인(예시):
bee / bug - 초기 DB 세팅 페이지:
/install.php(1회 설치·재설치 가능)
3. 네이밍/접속 편의
- 호스트
/etc/hosts또는 Windowshosts에 IP →beebox매핑
192.168.56.101 beebox
직접 LAMP에 bWAPP 올리기(컨테이너/VM 공통)
1. Ubuntu LAMP 예시
sudo apt update
sudo apt install -y apache2 php php-mysqli mariadb-server unzip
sudo systemctl enable --now apache2 mariadb
# bWAPP 소스 배포(압축 해제 후 웹루트)
sudo mkdir -p /var/www/html/bwapp
sudo chown -R www-data:www-data /var/www/html/bwapp
# 브라우저에서 http://<ip>/bwapp/install.php 접속해 DB 초기화
2. Docker식(직접 빌드) 예시 개요
- Apache+PHP 베이스 이미지 →
/var/www/html/bwapp에 소스 복사 → 80 포트 Expose - 내부망만 붙이고, 포트 퍼블리시 금지(bridge만)
- Compose 시 attacker 컨테이너와 bwapp 컨테이너를 동일 사용자 정의 네트워크 로 구성
안전 가드레일
- 격리: Host-Only / Internal Network만 사용(인터넷 라우팅 차단)
- 인바운드 차단: 방화벽(호스트·VM 모두)로 외부 접근 봉쇄
- 스냅샷: 실습 전/후 스냅샷으로 복구 보장
- 자산 라벨링: “교육용/취약 환경” 표기 + 운영망 투입 금지
- 로그 민감도: 공격·응답 로그는 사내 SIEM에서만 열람(반출 금지)
- 교육 고지: 법·윤리 고지(사내 자산 대상 금지, 외부 목표 금지) 공지 필수
- 종료 절차: 실습 종료 즉시 VM 정지/스냅샷 롤백/내부 DNS 삭제
실습 커리큘럼 로드맵
- 입문: 인증/세션, 입력 검증, 에러 핸들링
- Top 10 핵심
- SQL Injection (Boolean/Time/Union)
- XSS (Reflected/Stored/DOM)
- CSRF (토큰 부재·검증 우회)
- Auth/Session 취약점 (약한 비번, 세션 고정)
- Command Injection (OS 레벨)
- File Inclusion/Upload (RFI/LFI, MIME 우회)
- Access Control (IDOR, 수평/수직 권한)
- Deserialization/XXE/SSRF (버전별 옵션)
- 보안 Misconfig (디버그, 디렉토리 리스팅)
- 취약 컴포넌트 활용 (구버전 Lib/플러그인)
bWAPP 메뉴에서 난이도/시나리오를 선택해 단계별 학습이 가능합니다.
툴 체인 표준(교육용)
- 프록시/스캐너: Burp Suite, OWASP ZAP
- 브라우저 설정: 프록시
127.0.0.1:8080→ Burp CA 인증서 설치(HTTPS 디코딩) - 리콘/크롤링:
ffuf,dirsearch,gobuster,katana - SQLi 도구:
sqlmap(인증 세션 쿠키/헤더 전달 연계) - XSS 테스트: 퀵 페이로드 스니펫, DOM 탐색(DevTools)
- 자동화: Postman/Insomnia로 API 시나리오 재현
300x250
실습 예제(핵심 시나리오 스니펫)
1. SQL Injection (Union 기반)
- 대상: 검색 파라미터
title=... - 페이로드 예시
' UNION SELECT 1,@@version,3-- - sqlmap연계sqlmap -u "http://beebox/vulnerabilities/sqli/?title=abc&action=search" \ --cookie="PHPSESSID=<세션값>; security_level=0" \ --dbs --risk=3 --level=5 --batch
2. Reflected XSS
"><svg/onload=alert(document.domain)>
- 실제론 CSP·필터 우회를 위한 다양한 인코딩/이벤트 핸들 탐색을 지도
3. Command Injection
- 파라미터에
;id·&& cat /etc/passwd등 시스템 명령 연쇄 시도 - 방어 포인트: 화이트리스트·subprocess 파라미터화·셸 미사용
4. 파일 업로드 RCE
- 우회: 이중 확장(
.php.jpg), MIME 위조, 이미지 메타 주입 - 대응: 확장/헤더/매직넘버 3중 검사, 업로드 디렉토리 실행권한 제거
로그·관제(Elastic/Wazuh 등 연동)
1. 수집 범위
- 웹: Apache/Nginx access & error
- 애플리케이션: PHP 에러/프레임워크 로그
- 호스트: auth.log, syslog, auditd, Wazuh Agent 이벤트
- 프록시/스캐너: Burp/ZAP 작업 로그(필요 시)
2. Filebeat 예시(간단)
# /etc/filebeat/filebeat.yml (요지)
filebeat.inputs:
- type: log
paths: ["/var/log/apache2/access.log", "/var/log/apache2/error.log"]
- type: log
paths: ["/var/log/auth.log", "/var/log/syslog"]
output.elasticsearch:
hosts: ["http://<elastic>:9200"]
setup.kibana:
host: "<kibana>:5601"
3. SIEM 룰 아이디어
- 단시간 다량 4xx/5xx, 특정 페이로드 키워드(XSS/SQLi 시그니처), 관리자 페이지 브루트포스
- 실습 모드 스위치: 훈련 시간대만 알림 허용(소음 감소)
평가·보고(교육/훈련용)
- 개인/조 단위 체크리스트: 취약점 유형별 성공/미해결
- 증적 캡처 규정: PII/사내식별자 마스킹, 외부 반출 금지
- 리뷰 회의: 공격 기법→방어 원칙→코드 보완(ToDo)로 마무리
- 성과지표: Top 10 대비 커버리지, 평균 해결시간(MTTF-like), 재현성
트러블슈팅
- 웹 접속 불가
- VM IP 확인(
ip a) → Host-Only 대역인지 - Apache/DB 상태:
systemctl status apache2 mariadb - 방화벽:
ufw status/ 외부 NIC 비활성화 확인
- VM IP 확인(
- DB 오류/초기화:
/install.php재실행(필요 시 DB 드랍 후 재생성) - 프록시 인증서 문제: Burp CA를 OS/브라우저 신뢰 스토어에 설치
- 느림/중단: 스냅샷 롤백, VM vCPU/RAM 상향, 불필요 플러그인 비활성화
운영 표준
- 정책: “교육용 취약 환경” 운영 SOP/승인 체계
- 네트워크: VLAN·NAC·라우팅 ACL로 업무망과 단절
- 자격증명: 기본 비번 교체·MFA(접근 포털이 있을 경우)
- 패치: 호스트 하이퍼바이저·게스트 OS 정기 업데이트
- 감사: 실습 일정·참여자·스냅샷·로그 보관(내부 규정에 맞춰 기간 설정)
- 종료: VM 정지/삭제, 호스트 엔트리 정리, 문서화 완료
확장/자동화
- Vagrant: 동일 샌드박스 일괄 생성
Vagrant.configure("2") do |config| config.vm.define "beebox" do |b| b.vm.box = "ubuntu/jammy64" b.vm.network "private_network", ip: "192.168.56.101" b.vm.provision "shell", inline: <<-SHELL apt update && apt install -y apache2 php php-mysqli mariadb-server systemctl enable --now apache2 mariadb # bWAPP 소스 배포 및 /bwapp/install.php 안내 SHELL end end - Ansible: 여러 실습 노드에 bWAPP·에이전트 일괄 배포
- Reverse Proxy: 내부 DNS 전용,
/lab/*경로로 라우팅(외부 노출 금지) - EDR/Defend 연계: 의심 행위(리버스셸 시도 등) 이벤트만 태깅하여 연구용 탐지 룰 검증
최종 체크리스트
- 샌드박스 망 분리(Host-Only/내부전용)
- 스냅샷 생성 및 롤백 절차 문서화
- 디폴트 계정·DB 초기화 점검(
/install.php) - 프록시/인증서/도구 세트 표준화
- 로그 수집 경로(웹/OS/도구)와 보관 정책 확정
- 법·윤리 고지 및 결과물 반출 금지
- 종료 시 정지/롤백/자산 정리
FAQ
- Q. 인터넷에 잠깐 열면 편한데요?
A. 금지합니다. 업무망·외부망과 완전 분리가 기본 전제입니다. - Q. 데이터 리셋은?
A./install.php으로 재설치하거나 VM 스냅샷 롤백이 가장 안전합니다. - Q. 교육생이 실수로 RCE에 성공했어요.
A. 정상입니다(학습 목적). 내부망 격리와 스냅샷 롤백으로 통제하세요.
728x90
그리드형(광고전용)
댓글