# COMPFEST Attack & Defense Technical Details ## Struktur ### Terminologi - Service: Aplikasi dari challenge yang berjalan di suatu server. - Tick: Satuan waktu dari permainan. - Patch: Operasi melakukan perubahan dari service untuk meng-update runtime service. - Flag Stolen: Seberapa banyak flag yang sudah diambil oleh tim lain pada sebuah service. - Flag Captured: Seberapa banyak flag yang diambil dari tim lain pada sebuah challenge. - JWT: Token yang digunakan sebagai penanda otorisasi dari tim. - SLA: Reabilitas dari service. ### Aturan - Kompetisi akan dimulai dari pukul 09.00 hingga 15.00 WIB. - Selama kompetisi berlangsung, setiap tim **dilarang**: - Bekerja sama dengan tim lain dalam bentuk apapun. - Menggunakan automated scanner/tools seperti sqlmap, burp scanner, dirb, dan lain-lain. Setiap challenge dapat di-solve tanpa menggunakan automated scanner/tools. - Menyebabkan suatu kerugian atau gangguan dalam bentuk apapun terhadap peserta lain maupun panitia, seperti namun tidak terbatas pada: - Menghapus/mengganti file flag, - Melakukan DDOS pada service atau platform, - Melakukan bruteforce flag pada platform, dan lain-lain. - Tim yang terindikasi melakukan pelanggaran atau kecurangan akan diberikan sanksi (diskualifikasi atau pengurangan poin). - Flag baru akan di-generate pada semua service tiap tick. - Flag yang disubmit hanya valid pada satu tick, yaitu pada tick ketika flag tersebut di-generate. - Durasi dari suatu tick adalah 5 menit, sehingga kompetisi akan berjalan selama 72 tick. - Checker akan melakukan cek ke setiap service setiap menit, dengan waktu timeout 20 detik. ## General Flow Secara umum, berikut adalah flow tiap tim pada sesi kompetisi: - Setiap tim akan diberikan beberapa service beserta IP address, port, dan attachment files-nya masing-masing. - IP dan port yang diberikan adalah milik service tim sendiri dan juga service tim lain. - Untuk melakukan attack, tim harus mendapatkan flag dengan melakukan eksploitasi pada service tim lain. - Flag yang didapat dari service milik tim sendiri tidak akan berpengaruh pada Flag Captured, Flag Stolen, maupun skor. - Defense dapat dilakukan menggunakan fitur `Manage Service`. - Untuk membuka fitur `Manage Service` sebuah service, tim tersebut **harus** melakukan submit flag yang didapat dengan melakukan eksploitasi pada **service-nya sendiri sebanyak satu kali.** ## Scoring Scoring dibagi menjadi tiga, yaitu: - Attack - Defend - SLA ### Attack Scoring dari atribut attack untuk satu flag adalah seperti berikut: $$attackScore = \sum_{i=1}^{nflags} ATK(i)$$ Dimana: - $nflags$ = jumlah flag yang berhasil di-capture oleh tim - $ATK(i)$ = nilai poin untuk flag ke-$i$ berdasarkan urutan submission - $i$ = urutan flag yang di-submit (1, 2, 3, ...) Nilai $ATK(i)$ ditentukan berdasarkan tabel berikut: | Range Submission | Nilai ATK(i) | |------------------|--------------| | 1 ≤ i ≤ 141 | 10.0 | | 142 ≤ i ≤ 223 | 5.0 | | 224 ≤ i ≤ 335 | 3.33 | | 336 ≤ i ≤ 447 | 2.5 | | 448 ≤ i ≤ 559 | 2.0 | | 560 ≤ i ≤ 671 | 1.66 | | 672 ≤ i ≤ 783 | 1.42 | | 784 ≤ i ≤ 895 | 1.25 | | 896 ≤ i ≤ 1008 | 1.11 | | i > 1008 | 1.0 | ### Defense Scoring dari atribut defense menggunakan formula berikut: $$defenseScore = nTeamSolved \times \sum_{i=1}^{nTicks} (DEF \times isNotStolen_i)$$ **Penjelasan Variabel:** - $nTeamSolved$ = jumlah tim yang sudah solve challenge tersebut - $nTicks$ = jumlah tick yang sudah berjalan (current tick) - $DEF$ = konstanta defense point = 10.0 - $isNotStolen_i$ = status flag pada tick ke-$i$ **Nilai $isNotStolen_i$:** - $isNotStolen_i = 1$ jika flag **tidak dicuri** pada tick ke-$i$ - $isNotStolen_i = 0$ jika flag **dicuri** pada tick ke-$i$ ### SLA SLA mengukur reliabilitas service dari suatu tim dengan formula: $$SLA = \frac{passedChecks}{totalChecks}$$ **Penjelasan Variabel:** - $passedChecks$ = jumlah checker result dengan status `VALID` - $totalChecks$ = jumlah total checker result (`VALID` + `FAULTY`) **Status Checker:** - `VALID` = Service berjalan dengan baik dan dapat diakses - `FAULTY` = Service bermasalah atau tidak dapat diakses ### Total Score Total score untuk setiap tim dihitung dengan menggabungkan attack score, defense score, dan SLA menggunakan formula: $$totalScore = \sum_{j=1}^{nChallenges} [(attackScore_j \times SLA_j) + (defenseScore_j \times SLA_j)]$$ ## Platform Manual API specs pada platform dapat dilihat pada link berikut: http://ristek.link/COMPFEST17-AnD-Manual