본문 바로가기

웹 취약점 진단 실습을 위한 Beebox(bWAPP) 모의해킹 실습 인프라 설계

728x90

웹 해킹 실습용 Beebox(= bWAPP가 사전 설치된 VM)를 안전하게 구축·운영 및 실습 환경 표준화, 내부망 안전 가드레일, 훈련 커리큘럼, 로그 수집·평가, 장애 대처, 확장 자동화까지 현장에서 바로 쓰는 수준으로 담았습니다.

  • Beebox란? 웹 취약점 학습용 애플리케이션 bWAPP(buggy Web Application) 이 설치된 VM 이미지(일반적으로 VirtualBox/VMware용).
  • 목적
    1. OWASP Top 10 및 고전/현대 웹 취약점 실습
    2. 보안 교육/모의훈련(리허설·CTF)
    3. 스캐너/프록시/크롤러 등 보안 도구 실전 테스트

핵심 원칙: 업무망과 완전 격리된 샌드박스에서 관리·운영합니다.

아키텍처(권장)

  • 호스트(강사 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 또는 Windows hosts 에 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 컨테이너동일 사용자 정의 네트워크 로 구성

안전 가드레일

  1. 격리: Host-Only / Internal Network만 사용(인터넷 라우팅 차단)
  2. 인바운드 차단: 방화벽(호스트·VM 모두)로 외부 접근 봉쇄
  3. 스냅샷: 실습 전/후 스냅샷으로 복구 보장
  4. 자산 라벨링: “교육용/취약 환경” 표기 + 운영망 투입 금지
  5. 로그 민감도: 공격·응답 로그는 사내 SIEM에서만 열람(반출 금지)
  6. 교육 고지: 법·윤리 고지(사내 자산 대상 금지, 외부 목표 금지) 공지 필수
  7. 종료 절차: 실습 종료 즉시 VM 정지/스냅샷 롤백/내부 DNS 삭제

실습 커리큘럼 로드맵

  • 입문: 인증/세션, 입력 검증, 에러 핸들링
  • Top 10 핵심
    1. SQL Injection (Boolean/Time/Union)
    2. XSS (Reflected/Stored/DOM)
    3. CSRF (토큰 부재·검증 우회)
    4. Auth/Session 취약점 (약한 비번, 세션 고정)
    5. Command Injection (OS 레벨)
    6. File Inclusion/Upload (RFI/LFI, MIME 우회)
    7. Access Control (IDOR, 수평/수직 권한)
    8. Deserialization/XXE/SSRF (버전별 옵션)
    9. 보안 Misconfig (디버그, 디렉토리 리스팅)
    10. 취약 컴포넌트 활용 (구버전 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), 재현성

트러블슈팅

  • 웹 접속 불가
    1. VM IP 확인(ip a) → Host-Only 대역인지
    2. Apache/DB 상태: systemctl status apache2 mariadb
    3. 방화벽: ufw status / 외부 NIC 비활성화 확인
  • DB 오류/초기화: /install.php 재실행(필요 시 DB 드랍 후 재생성)
  • 프록시 인증서 문제: Burp CA를 OS/브라우저 신뢰 스토어에 설치
  • 느림/중단: 스냅샷 롤백, VM vCPU/RAM 상향, 불필요 플러그인 비활성화

운영 표준

  1. 정책: “교육용 취약 환경” 운영 SOP/승인 체계
  2. 네트워크: VLAN·NAC·라우팅 ACL로 업무망과 단절
  3. 자격증명: 기본 비번 교체·MFA(접근 포털이 있을 경우)
  4. 패치: 호스트 하이퍼바이저·게스트 OS 정기 업데이트
  5. 감사: 실습 일정·참여자·스냅샷·로그 보관(내부 규정에 맞춰 기간 설정)
  6. 종료: 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 연계: 의심 행위(리버스셸 시도 등) 이벤트만 태깅하여 연구용 탐지 룰 검증

최종 체크리스트

  1. 샌드박스 망 분리(Host-Only/내부전용)
  2. 스냅샷 생성 및 롤백 절차 문서화
  3. 디폴트 계정·DB 초기화 점검(/install.php)
  4. 프록시/인증서/도구 세트 표준화
  5. 로그 수집 경로(웹/OS/도구)와 보관 정책 확정
  6. 법·윤리 고지 및 결과물 반출 금지
  7. 종료 시 정지/롤백/자산 정리

FAQ

  • Q. 인터넷에 잠깐 열면 편한데요?
    A. 금지합니다. 업무망·외부망과 완전 분리가 기본 전제입니다.
  • Q. 데이터 리셋은?
    A. /install.php 으로 재설치하거나 VM 스냅샷 롤백이 가장 안전합니다.
  • Q. 교육생이 실수로 RCE에 성공했어요.
    A. 정상입니다(학습 목적). 내부망 격리스냅샷 롤백으로 통제하세요.
728x90
그리드형(광고전용)

댓글