Security Considerations

Apa implikasi keamanan dari berbagai opsi integrasi? Dan apa batasan inheren saat melisensikan software?

Seberapa aman sebenarnya melisensikan software dengan NxGate? Dalam batasannya, NxGate sangat aman. Artinya, semua yang dalam kontrol NxGate dirancang seaman mungkin. Tapi ada juga batasan inheren dalam melisensikan software yang harus Anda ketahui. Mari kita bahas detailnya.

License Checks di Backend

Paling Aman

Apakah Anda melakukan pengecekan lisensi di backend aplikasi? Ini adalah cara paling aman untuk melisensikan software. Keamanan sekarang hanya dibatasi oleh keamanan backend dan business logic Anda.

License Checks di Client (Plugin)

Di sinilah hal menjadi lebih rumit. Jika Anda melakukan pengecekan lisensi di client (misalnya plugin Minecraft yang berjalan di server client), ada dua concern keamanan utama:

  1. Manipulasi traffic antara aplikasi dan NxGate
  2. Manipulasi kode client-side untuk bypass pengecekan lisensi

Alur Request Tipikal

Aplikasi Anda berjalan di device client. Dalam kode Anda, ada logic yang melakukan pengecekan lisensi. Untuk memverifikasi lisensi, logic ini mengirim request dari device client ke server NxGate. Server NxGate kemudian merespons dengan hasil verifikasi. Aplikasi Anda menerima response ini dan bertindak sesuai.

Manipulasi Kode Client-Side

Dari perspektif keamanan, client memiliki kontrol penuh atas kode client-side. Ini berarti client dapat memanipulasi kode untuk bypass pengecekan lisensi. Ini adalah batasan fundamental dari licensing software di client.

Mitigasi

  • • Aplikasi lebih kompleks umumnya lebih sulit dimanipulasi
  • • Bahasa compiled umumnya lebih sulit dimanipulasi dari interpreted
  • • Obfuscation dapat membuat kode lebih sulit dipahami dan dimanipulasi
pom.xml - Obfuscation
1<!-- pom.xml - Menggunakan Proguard untuk obfuscation -->
2<plugin>
3 <groupId>com.github.wvengen</groupId>
4 <artifactId>proguard-maven-plugin</artifactId>
5 <version>2.6.0</version>
6 <executions>
7 <execution>
8 <phase>package</phase>
9 <goals>
10 <goal>proguard</goal>
11 </goals>
12 </execution>
13 </executions>
14 <configuration>
15 <options>
16 <option>-keep class your.plugin.Main { *; }</option>
17 <option>-keep class xyz.noxlydev.nxgate.** { *; }</option>
18 </options>
19 </configuration>
20</plugin>

Manipulasi Traffic

Ketika manipulasi kode client-side tidak feasible, vektor serangan berikutnya adalah traffic antara aplikasi dan NxGate. Client dapat memanipulasi traffic untuk membuatnya terlihat seperti pengecekan lisensi berhasil.

Bagaimana dengan HTTPS?

Anda mungkin berpikir: "Tapi saya menggunakan HTTPS, jadi traffic sudah terenkripsi dan tidak bisa dimanipulasi". Ini benar, jika attacker berada di antara client dan NxGate (man-in-the-middle). Tapi karena attacker adalah client sendiri, mereka dapat bebas memanipulasi traffic terlepas dari SSL certificates.

Solusi: RSA Challenge-Response

Serangan ini dapat dicegah menggunakan RSA challenge-response mechanism NxGate. Untuk setiap pengecekan lisensi, aplikasi Anda juga mengirim challenge (kami rekomendasikan timestamp saat ini dalam milliseconds) ke server NxGate. Hanya server NxGate yang dapat menandatangani challenge ini dengan benar, dan dengan memvalidasi signature di aplikasi Anda, Anda dapat memastikan response authentic dan belum dimanipulasi.

RSA Challenge Example
1import xyz.noxlydev.nxgate.NxGateClient;
2import xyz.noxlydev.nxgate.VerificationResult;
3
4// Verifikasi dengan RSA challenge-response
5NxGateClient client = new NxGateClient("YOUR_USER_ID", licenseKey);
6
7// Challenge = timestamp untuk memastikan response fresh
8long challenge = System.currentTimeMillis();
9
10// Server menandatangani challenge dengan private key
11VerificationResult result = client.verifyWithChallenge(challenge);
12
13if (result.isValid() && result.isSignatureValid()) {
14 // Response authentic dan belum dimanipulasi
15 getLogger().info("License verified with RSA signature!");
16} else {
17 getLogger().severe("Verification failed or signature invalid!");
18}

Faktor Risiko Umum

Risiko sebenarnya dari serangan pada logic licensing Anda juga tergantung pada beberapa faktor:

Nilai Software

Software seharga $100 lebih mungkin dicrack dari pada software $10

Kompleksitas Aplikasi

Aplikasi lebih kompleks = lebih sulit untuk di-reverse engineer

Platform

Server-side plugins umumnya lebih sulit dicrack dari web apps

Technical Knowledge Users

User awam vs developer berpengalaman memiliki kemampuan berbeda

Kesimpulan

Jadi misalnya ketika mengembangkan plugin Minecraft yang dijual seharga $15 di SpigotMC, risiko serangan pada logic licensing Anda umumnya moderat. Anda harus mengevaluasi cost-benefit-time ratio dari advanced security measures seperti RSA challenge dan obfuscation berdasarkan nilai dan target audience plugin Anda.