CTF-сорев­нования проч­но зак­репились в око­лоай­тиш­ных кру­гах. Най­ти челове­ка, который не слы­шал о сорев­новани­ях для хакеров, слож­но, и всё чаще появ­ляют­ся мыс­ли о сво­ем собс­твен­ном сорев­новании. И если для сорев­нований в жан­ре Task-based уже сущес­тву­ют хорошие плат­формы, то для Attack/Defense при­дет­ся при­думы­вать что‑то более слож­ное. Уса­живай­ся поудоб­нее — сей­час я рас­ска­жу про опыт орга­низа­ции таких мероп­риятий.

Краткая справка

CTF (Capture The Flag — зах­ват фла­га) быва­ет раз­ный. Есть два жан­ра: Task-based и Attack/Defense. В пер­вом слу­чае мож­но играть чуть ли не «на бумаж­ке» — это обык­новен­ные задачи, которые мож­но решить или не решить, при этом твой прог­ресс никак не зависит от дей­ствий дру­гих учас­тни­ков. Во вто­ром же жан­ре име­ется игро­вая сеть, где раз­ные коман­ды ата­куют и отра­жают ата­ки друг дру­га. Само собой, Attack/Defense куда динамич­нее и инте­рес­нее, но и орга­низа­ция таких сорев­нований куда слож­нее.

Чи­тай так­же: Capture the Flag. Как взлом стал спор­тивным сос­тязани­ем

Для тре­ниро­вок внут­ри нашей коман­ды мне пот­ребова­лось раз­вернуть свой домаш­ний Attack/Defense (уже на готовых чужих сер­висах).

www

Для Task-based-сорев­нований уже сущес­тву­ет плат­форма CTFd.

 

Создание сети

Обыч­но все сорев­нования Attack/Defense про­ходят внут­ри спе­циаль­но выделен­ной сети. Бла­года­ря это­му обес­печить работу всей инфраструк­туры ста­новит­ся лег­че в нес­коль­ко раз. В соз­дании сетевой инфраструк­туры нам помогут вир­туаль­ные час­тные сети (VPN). Лидера­ми готовых решений, которые поз­воля­ют сде­лать собс­твен­ную при­ват­ную сеть, явля­ются OpenVPN и Wireguard.

 

Основные элементы сети

Сна­чала нам нуж­но опре­делить­ся с эле­мен­тами, которые будут находить­ся в нашей сети.

  • Глав­ный узел — сер­вер, к которо­му будут под­клю­чать­ся все устрой­ства для обра­зова­ния нашей сети. Важ­ным пун­ктом будет то, что у это­го сер­вера дол­жен быть «белый» IP-адрес.
  • Узел для под­клю­чения игро­ков — к нему будут под­клю­чать­ся игро­ки для даль­нейшей игры. Для каж­дой коман­ды будет свой кон­фиг, с помощью которо­го игро­ки смо­гут вой­ти в свою сеть.
  • Узел для сер­вера с сер­висами (вул­нбокс). К это­му узлу будет под­клю­чать­ся вул­нбокс с сер­висами. Из при­меча­тель­ного то, что такое пос­тро­ение сети поз­волит под­клю­чить вул­нбокс со сво­его сер­вера, а не сер­вера орга­низа­торов — при усло­вии, что есть нуж­ный кон­фиг.

По ито­гу мы получим отдель­ные узлы для каж­дой из команд, отдель­ные узлы для вул­нбок­сов команд (при таком рас­кла­де мы поз­волим под­клю­чать в нашу сеть сто­рон­ние сер­вера для самос­тоятель­ного хос­тинга) и узел для жюри.

info

Вул­нбокс (vulnbox) — машина с некото­рым набором заведо­мо уяз­вимых сер­висов. В CTF каж­дая коман­да получа­ет иден­тичную копию такой машины.

 

OpenVPN

Нач­нем наше пос­тро­ение сети с OpenVPN.

info

На мой взгляд, эта статья на Хаб­ре очень хороша для понима­ния, что и как нуж­но сде­лать для соз­дания собс­твен­ных сетей. Но ниже мы раз­берем, какие кон­фигура­цион­ные фай­лы мы дол­жны соз­дать.

Мы уже решили, какие узлы у нас будут. Тог­да можем перей­ти к соз­данию кон­фигов для нашей сети. Что­бы избе­жать рутин­ной работы, вос­поль­зуем­ся уже сущес­тву­ющим ре­пози­тори­ем OVPNGen с откры­тым исходным кодом. Нам так­же пот­ребу­ется уста­новить необ­ходимые зависи­мос­ти для кор­рек­тной работы.

$ git clone https://github.com/pomo-mondreganto/OVPNGen
$ pip3 install -r requirements.txt

Пос­мотрим на дос­тупные фун­кции это­го генера­тора.

$ ./gen.py --help

usage: gen.py [-h] --server SERVER [--per-team N] [--team] [--jury] [--vuln] [--teams N | --range N-N | --list N,N,...]

Generate openvpn configuration for AD CTFs

optional arguments:
-h, --help show this help message and exit
--server SERVER, -s SERVER
Openvpn server host
--per-team N Number of configs per team
--team Generate config for teams
--jury Generate config for jury
--vuln Generate config for vulnboxes
--teams N, -t N Team count
--range N-N Range of teams (inclusive)
--list N,N,... List of teams

Раз­берем по полоч­кам, что у нас есть.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии