İçeriğe geç

CTF Hazırlıyoruz #1 – CTFd kurulumu

Özet: CTF (Capture the flag) yarışmalarının temel mantığını, organizasyonlarda kullanılan CTFd framework kurulumu ve ilk yapılandırma ayarlarını anlattım.


CTF Nedir?

Capture The Flag, yani bayrak kapma yarışmaları güvenlik sektöründe hem eğitim amaçlı hem ısınma amaçlı yarışmalardır. Güvenlikle ilgili çeşitli zorluklarda soruların sorulduğu, öğrencilerden profesyonel hackerlara kadar herkese hitap eden bir çok CTF organizasyonları her geçen gün popüler hale geliyor. Günümüzde online ortamda veya belli yer ve zamanda düzenlenen CTF yarışmaları mevcut. İki tip CTF’den bahsedebiliriz, bunlar farklı zorlukta birden çok sorunun tek tek sorulduğu Jeopardy türü ve iki tarafın birbirine saldırdığı ve kendisini savunduğu Attack-Defence türü yarışmalardır.

Bu yazı dizisinde Jeopardy türündeki CTF’lerden bahsedeceğim ve en basit düzeyde bir CTF yarışmasının nasıl hazırlandığını adım adım anlatmaya çalışacağım. (Ben de yazarken öğrenenlerdenim)

Nasıl tanıştım?

İlk deneyimim Crypttech‘te yapmak staj yapmak için başvuranlar arasında düzenlenen ve 16 sorudan oluşan CTF yarışmasıydı. (Çözümleri burada) Stajımı orada yaparken soruların nasıl hazırlandığını ve inceliklerini bana öğreten Yunus Yıldırım’a buradan selam ederim 🙂 Bu güne kadar katıldığım en büyük CTF organizasyonu STM CTF ’17 bu yarışmalar konusunda ufkumu katladı diyebilirim. Online ortamda ve sertifikasyon sınavları için bir kaç CTF daha deneyimleme şansım oldu. Bir CTF düzenleme fikri, yarı zamanlı çalıştığım ve staj yaptığım BÜSİBER‘de 2018 Ocak ayında düzenlediğimiz siber güvenlik kampı adaylarını seçmek için ekipte gündeme gelince kolları sıvadık.

CTF hazırlayacak birine nasıl adım adım CTF hazırlanacağını anlatmak kulağa saçma gelebilir, konunun acemisi olarak sadece kendime ve bu konuda yardıma ihtiyacı olan arkadaşlara yardımcı olacak notlar hazırladım, yanlış ve eksiklerimi düzeltirseniz sevinirim.

CTFd Framework nedir?

CTFd, dünyada en büyük CTF organizasyonları tarafından da kullanılan CTF framework’ü, yani soruların, puanların, ipuçlarını belirlendiği; yarışmacıların da soruları görüntülediği, en nihayetinde cevaplarını girdikleri sistem, web uygulaması. Aynı zamanda bir açık kaynak projesi ve kodlarına GitHub’daki bu repodan erişmek mümkün. Aynı zamanda kaliteli bir topluluğu var; slack kullanıyoruz: CTFd Slack

CTFd frameworkünü kuracağımız bilgisayar (kısaca sunucu diyeceğim) elimin altında veya uzakta (bulutta) bulunabilir. Eğer yerel ağda bir yarışma düzenliyorsanız yerel ağ ayarları ile kurulum yapacağız, dışarıya açık yani dünyanın farklı yerlerindeki kullanıcıların katılabileceği bir yarışma düzenliyorsanız public internet protokol ayarları ile kurulum yapacağız. Bunun dışında her iki kurulum da birbirine oldukça benziyor.
Sunucuda Python yüklü olmalıdır. Dosyaları çekmek için git kullanabilirsiniz.

Kurulum

Yerelde bu işlemler için terminal kullanabilirsiniz, uzak sunucu için bir ssh bağlantısı kullanmanızı öneririm.
Github reposundan dosyaları sunucuya indirerek veya git ile çekerek dosyaları çekiyoruz.

git clone https://github.com/CTFd/CTFd.git

Öncelikle uygulamanın bağımlı olduğu paketleri sunucuya yüklemeniz gerekiyor. Bunun için hazırlanmış bir listeden otomatik kurulum yapmak için aşağıdaki komutu root izinleri ile çalıştırın.

./prepare.sh

Bunun yerine pip yükleyici de kullanabilirsiniz.

pip install requirements.txt

Basit bir kurulum için CTFd dizini içerisindeki config.py dosyasını düzenlemeliyiz. Bu dosyada basit konfigürasyon ayarları bulunuyor, bunlar mail, güvenli ip adresleri, isim gibi ayarlar. nano ile dosyayı açıp bazı satırları kendinize göre değiştirmeniz gerekebilir;

nano CTFd/config.py

Burada değiştirmeniz gereken “HOST”, “MAILFROM_ADDR” gibi sunucu bazlı ayarların yanı sıra veritabanı ve güvenlikle ilgili ayarlar bulunuyor. Bu adım hakkında daha fazla ayrıntıya geliştiricinin şu yazısından ulaşabilirsiniz.

Sırada uygulamayı yayına almak var. Yazılımın çalışacağı adres ve port ayarları serve.py dosyasında bulunuyor. Yazılım default ayarlarda 127.0.0.1 adresinde 4000. portta çalışıyor. Yerel makinede işlem yapmıyorsanız önce hangi adresten ve porttan yayın yapacağınızı ayarlamanız gerekiyor, bunun için;

nano serve.py

Uzak sunucuda çalışıyorsanız insanların bağlanacakları adresi ve portu yazmanız gereken yer burası. Aynı zamanda yerel ağda düzenliyorsanız private IP adresini yine bu dosyaya yazmanız gerekiyor. Port numarasını 80 olarak ayarlarsanız tarayıcıya yalnızca host adresi yazılarak CTFd’e ulaşabilirsiniz. 165.227.159.15 IP adresine sahip uzak sunucu için ben şu şekilde ayarladım ve kaydettim:

Şimdi yayına hazırız! İlk çalıştırma ve konfigürasyon için hazırladığımız sunucu dosyasını çağırıyoruz;

python serve.py

Burada da görebileceğimiz gibi çağırdığımız dosya ayarları, veritabanını, güvenlik anahtarlarını yükleyerek verdiğimiz IP adresi ve portta çalışmaya başlıyor, tarayıcıdan adrese girelim;

Setup ekranına geldik, her şey yolunda görünüyor. Bu arada sunucu tarafında gelen istekleri ve oluşturulan sayfalar loglara düşmeye başladı.

Ayar formunu CTF adını, admin kullanıcı adı ve mail parola ayarları ile doldurarak gönderin, framework kurulumu tamamlanmış bir şekilde anasayfaya yönlendirileceksiniz. Bu formdaki verileri daha sonra değiştirebilirsiniz ve birden fazla yönetici ekleyebileceksiniz.

Sonraki yazıda oluşturduğumuz CTF’de kullanıcı, zaman ve skor görüntüleme ayarlarını yapacağız.

Tarih:Güvenlik