CTF as a Service: A reproducible and scalable infrastructure for cybersecurity training
이 논문은 Terraform, Ansible, Docker Swarm 및 HAProxy 를 활용한 인프라스트럭처 코드 (IaC) 기반의 재현 가능하고 확장 가능한 CTF 서비스 (CaaS) 플랫폼의 설계, 개발 및 평가를 통해 사이버 보안 교육의 접근성을 높이는 방안을 제시합니다.
지금까지 대학이나 기관에서 해킹 대회 (Capture The Flag, CTF) 를 열려면, 매번 새로운 서버를 직접 세우고, 방화벽을 짜고, 참가자들이 접속할 수 있게 설정하는 등 엄청난 수고와 기술이 필요했습니다. 마치 매번 대회를 열 때마다 새로운 식당을 직접 지어서 주방을 꾸미고, 식재료를 준비해야 하는 것과 비슷합니다.
이 논문은 **"CTF as a Service (CaaS)"**라는 시스템을 만들어, 이 과정을 자동화하고 대중화했습니다.
🏗️ 시스템의 구성 요소 (비유로 설명)
이 시스템은 마치 거대한 자동화 공장처럼 작동합니다. 각 부품의 역할은 다음과 같습니다.
1. Proxmox (토대이자 공장 부지)
비유: 이 모든 것이 돌아가는 거대한 토지이자 건물입니다.
역할: 실제 하드웨어 (컴퓨터) 위에서 가상 컴퓨터 (LXC) 들을 켜고 끄는 기초 플랫폼입니다.
2. Terraform & Ansible (설계도와 자동화 로봇)
Terraform (설계도): "이 공장에는 A 동, B 동을 짓고, C 동에는 창고를 만들어라"라고 자동으로 건물을 짓는 설계도입니다. 사람이 일일이 벽돌을 쌓지 않아도 코드로만 건물을 지을 수 있게 해줍니다.
Ansible (자동화 로봇): 건물이 지어지면, 내부 인테리어와 설비를 자동으로 설치하는 로봇입니다. "주방에 가스레인지 설치, 냉장고 연결" 같은 작업을 자동으로 해줍니다.
효과: 대회를 열 때마다 일일이 서버를 설정할 필요 없이, 설계도 (코드) 하나만 실행하면 완벽한 환경이 1 분 만에 완성됩니다.
3. Docker Swarm (모듈식 주방)
비유: 각 해킹 문제 (Challenge) 는 독립된 주방입니다.
역할: 하나의 해킹 문제가 고장 나더라도 다른 주방에는 영향을 주지 않습니다. 그리고 필요하면 같은 주방을 여러 개 복사해서 (Replica) 동시에 많은 사람이 요리할 수 있게 합니다.
4. HAProxy (유능한 안내원)
비유: 식당에 들어온 손님을 가장 빈약한 주방으로 안내하는 안내원입니다.
핵심 기능 (세션 유지): 해킹 대회에서는 한 번 문제를 풀기 시작하면 그 상태가 유지되어야 합니다. (예: 해킹한 서버에 접속해 파일을 수정한 상태).
만약 안내원이 손님을 다른 주방으로 보낸다면? 수정했던 파일이 사라져 버립니다.
이 시스템의 안내원 (HAProxy) 은 **"이 손님은 A 주방에 계속 붙어있으세요"**라고 기억해 두어, 같은 사람이 다시 접속해도 **항상 같은 주방 (서버)**으로 연결해 줍니다. 이를 '세션 지속성'이라고 합니다.
5. CI/CD 파이프라인 (자동 배달 시스템)
비유: 요리사 (문제 제작자) 가 새로운 메뉴 (문제) 를 개발하면, 자동으로 식당으로 배달되어 즉시 메뉴판에 올라가는 시스템입니다.
역할: 개발자가 코드를 저장소 (Git) 에 올리면, 자동으로 서버가 이를 받아서 업데이트합니다. 관리자가 직접 서버에 접속해서 파일을 복사할 필요가 없습니다.
🚀 이 시스템이 해결한 3 가지 큰 문제
복잡한 설치 문제 해결:
과거: 대회 준비에 며칠 걸리고, 전문가가 필요함.
현재: 코드를 실행하면 자동으로 모든 서버와 네트워크가 준비됨. (Reproducible)
많은 사람이 동시에 접속해도 튕기지 않음:
과거: 참가자가 몰리면 서버가 과부하로 멈춤.
현재: 한 문제가 고장 나거나 사람이 몰리면, 자동으로 같은 문제를 가진 다른 서버 (주방) 로 연결해 줌. (Scalable)
안전한 격리:
과거: 한 참가자가 문제를 뚫고 다른 참가자의 서버로 침입할 수 있음.
현재: 각 문제는 완벽하게 격리된 방에 있어서, 한 방이 털려도 다른 방이나 전체 시스템은 안전함.
🎯 결론 및 미래
이 논문은 **나바르 공과대학교 (UPNA)**에서 개발한 것으로, 이제부터는 해킹 대회를 열 때 기술적인 스트레스 없이 대회 자체 (교육과 재미) 에 집중할 수 있게 되었습니다.
미래 계획:
자동 확장: 사람이 몰리면 자동으로 더 많은 주방 (서버) 을 지어주는 기능 추가.
모니터링: 식당의 상태를 실시간으로 체크하는 대시보드完善.
상용화: 이 시스템을 이용해 대학 밖의 기업이나 다른 학교에게도 해킹 대회 운영 서비스를 판매하는 것을 목표로 하고 있습니다.
💡 한 줄 요약
**"이 시스템은 해킹 대회를 운영할 때 필요한 '서버 세팅'과 '문제 배포'를 모두 자동화하여, 마치 배달 앱처럼 언제 어디서나 쉽고 안전하게 대회를 열 수 있게 해주는 **'해킹 대회 운영 자동화 공장'입니다."
논문 요약: CTF as a Service (CaaS) 플랫폼 설계 및 구현
1. 문제 정의 (Problem)
사이버보안 교육에서 'Capture The Flag (CTF)' 대회는 이론적 지식을 실전 기술로 연결하는 효과적인 도구이나, 학술 환경에서 이를 정기적으로 개최하는 데는 다음과 같은 심각한 운영적 장벽이 존재합니다.
인프라 관리의 복잡성: 각 챌린지를 위한 격리된 환경 구성, 참가자 간의 공정한 접근 보장, 동시 접속 부하 처리 (Scaling) 등이 수동으로 이루어져야 하므로 운영 부담이 큽니다.
기존 솔루션의 한계:
CTFd, FBCTF 등: 점수판 관리 및 팀 로지스틱스에는 탁월하지만, 챌린지 인프라의 동적 프로비저닝 (Provisioning) 및 수명 주기 관리 기능은 부족합니다.
Cyber Range (예: KYPO): 가상화된 환경을 제공하지만, 하드웨어 요구 사항이 높고 운영이 복잡하여 학술적 CTF 의 빈번하고 경량화된 필요에 부합하지 않습니다.
결과: 제한된 기술 인력과 하드웨어 자원을 가진 대학 환경에서는 CTF 개최 빈도와 질이 저하되는 문제가 발생합니다.
2. 방법론 및 아키텍처 (Methodology & Architecture)
나바라 공과대학교 (UPNA) 는 Proxmox 가상화 인프라를 기반으로 CTF as a Service (CaaS) 플랫폼을 설계 및 개발했습니다. 핵심은 **Infrastructure as Code (IaC)**와 컨테이너 오케스트레이션을 결합하여 자동화되고 재현 가능한 환경을 구축하는 것입니다.
주요 기술 스택 및 설계 결정:
기반 가상화 (Proxmox VE): 전체 인프라는 Proxmox VE 에 구축되며, 완전한 VM 대신 **LXC (Linux Containers)**를 호스트 격리 단위로 사용하여 빠른 시작 시간과 낮은 리소스 소모를 달성했습니다.
선언적 프로비저닝 (Terraform): Telmate 제공자를 통해 Proxmox 의 LXC 컨테이너를 선언적으로 생성합니다. 백엔드 노드, 프론트엔드 NAT 노드, 리소스 풀 관리 등을 모듈화하여 재현 가능한 인프라를 보장합니다.
노드 구성 (Ansible): Terraform 으로 생성된 컨테이너 내부의 소프트웨어 (Docker 설치, 오버레이 네트워크 설정, 라우팅 규칙 등) 를 Ansible Playbook 으로 구성합니다.
외부 라우팅 및 NAT (iptables): 프론트엔드 NAT 노드에서 DNAT 규칙을 적용하여 외부 트래픽을 내부 프라이빗 네트워크의 챌린지 컨테이너로 전달합니다. 챌린지 컨테이너는 직접 인터넷에 노출되지 않습니다.
컨테이너 오케스트레이션 (Docker Swarm): 각 챌린지는 Docker Swarm 서비스로 배포됩니다.
고가용성: 챌린지 당 여러 개의 복제본 (Replica) 을 실행하여 단일 컨테이너 장애 시 서비스 중단이 없도록 합니다.
네트워크 격리: 각 챌린지는 별도의 Swarm 오버레이 네트워크에 격리되어 다른 챌린지나 관리 인프라로의 횡적 이동 (Lateral Movement) 을 방지합니다.
로드 밸런싱 및 세션 지속성 (HAProxy):
문제: 챌린지 복제 시, 로드 밸런서가 동일한 사용자의 요청을 다른 복제본으로 라우팅하면 서버 측 상태 (State) 가 손실될 수 있습니다.
해결: HAProxy 의 Stick-tables를 사용하여 소스 IP 를 첫 연결 시 할당된 복제본에 고정 (Session Affinity) 합니다. 이는 챌린지 코드 수정 없이도 서버 측 상태 유지 (예: 바이너리 익스플로잇, 시스템 침투 등) 를 가능하게 합니다.
CI/CD 파이프라인:
Git 저장소에 챌린지 소스 코드를 푸시하면, 후크 (Hook) 가 아티팩트를 빌드하고 배포합니다.
백엔드 노드의 pipeline.sh 스크립트가 주기적으로 아티팩트를 확인하여 Swarm 서비스를 자동으로 업데이트합니다.
두 가지 모드 지원: 개발자 중심의 롤링 업데이트 모드와 관리자가 특정 카탈로그를 선택하여 인프라를 즉시 배포하는 배포 중심 모드를 지원합니다.
3. 주요 기여 (Key Contributions)
재현 가능하고 확장 가능한 CaaS 플랫폼: IaC(Terraform, Ansible) 와 컨테이너 오케스트레이션을 결합하여 학술 환경에서도 소규모 인력으로 고품질 CTF 를 운영할 수 있는 체계를 제시했습니다.
코드 수정 없는 세션 지속성 해결: HAProxy 의 스틱 테이블을 활용하여 챌린지 애플리케이션 코드를 변경하지 않고도 상태 유지가 필요한 CTF 챌린지의 세션 지속성 문제를 해결했습니다.
완전한 자동화 워크플로우: 챌린지 개발부터 배포, 업데이트까지 Git 기반 CI/CD 파이프라인을 구축하여 수동 개입을 최소화했습니다.
보안 격리 설계: 외부 트래픽은 프론트엔드 NAT 를 통해 진입하며, 각 챌린지는 독립적인 내부 네트워크에 격리되어 상호 간섭을 방지합니다.
4. 결과 (Results)
개발된 플랫폼은 다음과 같은 기능적 목표를 달성했습니다.
재현 가능한 인프라 프로비저닝: Terraform 과 Ansible 스크립트 실행만으로 프론트엔드, 백엔드, Docker Swarm, HAProxy 가 포함된 전체 환경을 즉시 구축할 수 있습니다.
자동화된 챌린지 배포: 개발자가 Git 에 푸시하는 것만으로 챌린지가 실시간으로 배포 및 업데이트됩니다.
사용자 세션 지속성: HAProxy 를 통해 참가자가 챌린지 세션 동안 동일한 컨테이너 복제본에 연결되도록 보장하여 상태 기반 챌린지 실행을 가능하게 했습니다.
기본 고가용성 및 확장성: Docker Swarm 을 통해 챌린지 복제본을 늘려 부하를 분산하고, 개별 컨테이너 장애에 대한 내성을 확보했습니다.
명확한 챌린지 포맷: Docker 이미지, docker-compose.yml, 그리고 Swarm 배포용 스크립트로 구성된 경량 계약 (Contract) 을 정의하여 기존 챌린지의 재구성을 최소화했습니다.
5. 의의 및 향후 과제 (Significance & Future Work)
의의: 이 연구는 오픈소스 도구들을 원칙적으로 결합하여 전문급 CTF 호스팅의 운영 부담을 획기적으로 줄일 수 있음을 입증했습니다. UPNA 는 이를 기반으로 향후 상업적 CTF 서비스 (CTF as a Service) 로 발전시킬 계획입니다.
향후 과제:
모니터링 및 가시성: Prometheus 를 통한 컨테이너 가용성, 연결 수, 리소스 사용량 모니터링 및 챌린지 정상 작동 검증 (Probe) 도입.
자동 확장 (Auto-scaling): HAProxy 또는 Prometheus 메트릭에 기반한 수요 주도 자동 확장 및 Proxmox API 를 통한 백엔드 노드 동적 추가.
관리 인터페이스: 기술적 배경이 없는 강사를 위한 웹 기반 관리 대시보드 및 CTFd 와의 통합.
HAProxy 고가용성: 단일 장애점 (SPOF) 을 제거하기 위한 다중 인스턴스 HAProxy 및 부동 가상 IP (Floating VIP) 도입.
챌린지 워크플로우 표준화: 배포 스크립트 및 템플릿을 포함한 표준화된 챌린지 포맷 정립.
이 논문은 제한된 자원을 가진 학술 기관이 현대적인 사이버 보안 훈련을 위해 자동화되고 확장 가능한 인프라를 구축할 수 있는 구체적인 청사진을 제시한다는 점에서 중요한 의의를 가집니다.