---
# System prepended metadata

title: COMPFEST Attack & Defense Technical Details

---

# 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