
랜덤으로 보안이 취약한 VM을 생성합니다.
SecGen은 취약한 가상 머신, 실습 환경, 해킹 챌린지를 생성하여 학생들이 보안 침투 테스트 기법을 배울 수 있도록 합니다.
Metasploitable2와 같은 박스는 항상 동일하지만, 이 프로젝트는 Vagrant, Puppet, Ruby를 사용하여 학습이나 CTF 이벤트 개최에 사용할 수 있는 무작위로 취약한 가상 머신을 생성합니다.
최신 버전은 http://github.com/cliffe/SecGen/ 에서 확인할 수 있습니다.
SecGen을 어떻게 사용하고 있는지 알려주시기 바랍니다.
호스팅 솔루션은 https://hacktivity.co.uk/ 를 방문하세요.
컴퓨터 보안 학생들은 해킹 챌린지에 참여함으로써 이점을 얻습니다. 실습 실험과 사전 구성된 해킹 챌린지는 보안 교육과 보안에 관심 있는 개인의 취미 활동 모두에서 일반적인 관행입니다. CTF(Capture The Flag) 대회와 같은 경쟁적인 해킹 챌린지는 업계 컨퍼런스의 주요 행사가 되었으며 대규모 온라인 커뮤니티의 초점이 되고 있습니다. 가상 머신(VM)은 해킹 대상 공유를 위한 효과적인 방법을 제공하며, 공격자의 기술을 테스트하기 위해 설계될 수 있습니다. Vulnhub과 같은 웹사이트는 사전 구성된 해킹 챌린지 VM을 호스팅하며 컴퓨터 보안 기술을 배우고 발전시키는 사람들에게 귀중한 자료입니다. 그러나 이러한 해킹 챌린지를 개발하는 것은 시간이 많이 소요되며, 일단 생성되면 본질적으로 정적입니다. 즉, 챌린지가 "해결"되면 학생에게 남은 챌린지가 없으며, 대회나 평가를 위해 챌린지가 생성된 경우 표절과 공모의 위험 없이 재사용할 수 없습니다.
Security Scenario Generator (SecGen)는 무작위로 취약한 시스템을 생성합니다. VM은 생성될 VM의 제약 조건과 속성을 설명하는 시나리오 사양을 기반으로 생성됩니다. 예를 들어, 시나리오는 사용자 수준의 침해를 초래하는 원격 익스플로잇 가능한 취약점과 루트 수준의 침해를 초래하는 로컬 익스플로잇 가능한 결함이 있는 시스템의 생성을 지정할 수 있습니다. 이 경우 공격자는 시스템에 대한 루트 접근 권한을 얻기 위해 무작위로 선택된 두 가지 취약점을 모두 발견하고 익스플로잇해야 합니다. 또는 정의된 시나리오가 더 구체적일 수 있으며, 특정 종류의 서비스(예: FTP 또는 SMB) 또는 심지어 정확한 취약점(CVE 기준)을 지정할 수도 있습니다.
SecGen은 XML 구성 언어를 사용하는 Ruby 애플리케이션입니다. SecGen은 사용 가능한 취약점, 서비스, 네트워크, 사용자 및 콘텐츠를 포함한 구성을 읽고, 요청된 시나리오의 정의를 읽고, 시나리오 무작위화를 위한 로직을 적용하고, Puppet과 Vagrant를 활용하여 필요한 VM을 프로비저닝합니다.
SecGen은 자유 소프트웨어입니다: 자유 소프트웨어 재단이 발행한 GNU 일반 공중 사용 허가서(GNU General Public License)의 조건에 따라, 라이선스 버전 3 또는 (귀하의 선택에 따라) 이후 버전에 따라 재배포 및/또는 수정할 수 있습니다.
SecGen은 다양한 소프트웨어 패키지를 설치하는 모듈을 포함합니다. 각 SecGen 모듈은 소프트웨어를 포함하거나 원격에서 소스를 가져올 수 있으며, 각 모듈은 함께 제공되는 secgen_metadata.xml 파일에 자체 라이선스를 정의합니다.
SecGen은 Ubuntu Linux에서 개발 및 테스트되었습니다. 이론적으로 필요한 모든 소프트웨어가 설치되어 있다면 Mac 또는 Windows에서도 실행되어야 합니다.
SecGen에 필요한 것:
설치 방법은 두 가지가 있습니다. 두 방법 모두 새로운 Ubuntu 설치에서 테스트되었습니다.
호스트에 Docker와 VirtualBox를 설치한 다음, docker/secgen-docker.sh가 나머지 모든 것을 포함하는 컨테이너를 빌드하도록 합니다. 커널 드라이버를 위해 호스트에 VirtualBox가 여전히 필요합니다. docker/README.md를 참조하세요.
git clone https://github.com/cliffe/SecGen.git
cd SecGen
docker/secgen-docker.sh run -s scenarios/default_scenario.xml
Oracle의 저장소에서 VirtualBox를 설치합니다. Ubuntu 24.04의 virtualbox 패키지(7.0.16)는 현재 HWE 커널용 커널 드라이버를 빌드할 수 없으며, Linux 7.0에는 VirtualBox 7.2.8 이상이 필요합니다:
sudo apt-get update
sudo apt-get install -y wget gpg lsb-release
wget -qO- https://www.virtualbox.org/download/oracle_vbox_2016.asc \
| sudo gpg --yes --dearmor -o /usr/share/keyrings/oracle-virtualbox-2016.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" \
| sudo tee /etc/apt/sources.list.d/virtualbox.list
sudo apt-get update
sudo apt-get install -y virtualbox-7.2
KVM이 로드되어 있으면 KVM이 VT-x를 점유하는 동안 VirtualBox는 VM을 시작할 수 없습니다(VERR_VMX_IN_VMX_ROOT_MODE). 커널 6.12 이상에서는 둘이 공존하도록 할 수 있습니다:
echo "options kvm enable_virt_at_load=0" | sudo tee /etc/modprobe.d/kvm-virtualbox.conf
sudo modprobe -r kvm_intel kvm_amd kvm; sudo modprobe kvm_intel || sudo modprobe kvm_amd
SecGen 시나리오는 VirtualBox의 기본 192.168.56.0/21 외부의 호스트 전용 네트워크 범위를 사용하므로, 모든 범위를 허용하십시오:
sudo mkdir -p /etc/vbox
echo '* 0.0.0.0/0 ::/0' | sudo tee /etc/vbox/networks.conf
HashiCorp 저장소에서 Vagrant를 설치합니다(Ubuntu 26.04는 더 이상 Vagrant를 패키징하지 않으며, 이전 Vagrant 릴리스는 더 이상 Vagrant Cloud에서 박스를 다운로드할 수 없습니다):
wget -qO- https://apt.releases.hashicorp.com/gpg | sudo gpg --yes --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update
sudo apt-get install -y vagrant
Ruby와 기타 필요한 패키지를 설치합니다:
sudo apt-get install -y git ruby-full ruby-dev build-essential patch pkg-config zlib1g-dev liblzma-dev \
imagemagick exiftool libpq-dev libcurl4-openssl-dev libxml2-dev libxslt1-dev graphviz libgraphviz-dev \
libpcap-dev libsqlite3-dev libgpgme-dev libyaml-dev libffi-dev libssl-dev
SecGen을 클론하고 gem을 설치합니다. bundle update가 아니라 bundle install을 사용하세요. Gemfile.lock은 지원되는 모든 Ruby에서 작동하는 버전을 고정하고 있으며, bundle update는 이를 최신 릴리스로 교체하는데, 이는 작동하지 않을 수 있습니다.
git clone https://github.com/cliffe/SecGen.git
cd SecGen
sudo gem install bundler -v '~> 2.4'
sudo bundle install
그런 다음 기본 시나리오를 시도하세요(처음 실행 시 hacktivity.co.uk에서 기본 박스를 다운로드합니다):
ruby secgen.rb run
Notes:
.deb로 Vagrant를 설치하세요. ruby-bundler 패키지를 설치하지 마세요. 이 패키지는 Debian에서 패키징한 thor gem을 가져오며, 그러면 bundle install이 "Could not find thor-0.19.4.gem" 오류로 실패합니다. 위와 같이 sudo gem install bundler -v 2.4.22를 사용하세요 (2.4는 Ruby 2.7을 지원하는 마지막 Bundler 릴리스입니다).bundle install이 몇몇 gem(librarian-puppet 및 그 의존성)을 다시 해석하고 Gemfile.lock을 로컬에서 다시 작성합니다. Ruby 2.7용으로 고정된 버전들이 Ruby 4를 허용하지 않기 때문입니다.sudo bundle install을 다시 실행하세요.scenarios/ctf/nosferatu.xml)이 있는 CTF에는 약 6 GB의 여유 RAM이 필요합니다. --memory-per-vm 또는 --total-memory로 재정의하세요.Windows basesboxes를 사용하려면 Packer를 설치해야 합니다. 다음 명령을 사용하세요:
curl -SL https://releases.hashicorp.com/packer/1.3.2/packer_1.3.2_linux_amd64.zip -o packer_1.3.2_linux_amd64.zip
unzip packer_1.3.2_linux_amd64.zip
sudo mv packer /usr/local/
sudo bash -c 'echo "export PATH=\"\$PATH:/usr/local/\"" >> /etc/environment'
sudo vagrant plugin install winrm
sudo vagrant plugin install winrm-fs
기본 사용법:
ruby secgen.rb run


SecGen은 동작 방식을 변경하기 위한 인수를 받으며, 현재 구현된 인수는 다음과 같습니다: