Topik ini menjelaskan jenis-jenis serangan yang tercakup dalam statistik serangan serta solusi yang sesuai.
Ikhtisar
Tabel berikut mencantumkan semua jenis serangan beserta kategorinya.
| Category | Attack type |
|---|---|
| Injection attacks | JNDI injection, SQL injection, Command injection, XXE, XSS, EL injection, Engine injection, JSTL file inclusion |
| Deserialization and class loading | Deserialization attack, Malicious class loading, Malicious beans binding |
| RASP bypass techniques | JNI injection, Malicious reflection calls, Thread injection, Malicious Attach API |
| File system attacks | Arbitrary file read, Malicious file read and write, Malicious file upload, Arbitrary file deletion, Directory traversal |
| Network-based attacks | SSRF, Malicious DNS query, Usage of insecure protocols |
| Persistence techniques | Memory horse injection |
| Credential attacks | Weak database password |
Injection attacks
JNDI injection
Description
Java Naming and Directory Interface (JNDI) injection terjadi ketika aplikasi melakukan pencarian JNDI menggunakan URL yang dapat dikendalikan penyerang. Penyerang mengarahkan server untuk mengirim kueri ke titik akhir berbahaya, sehingga menyebabkan server memuat kelas berbahaya dan memungkinkan eksekusi kode arbitrer.
Solution
Jika kerentanan berasal dari komponen pihak ketiga, tingkatkan komponen tersebut ke versi terbaru yang telah diperbaiki.
Jika kerentanan berasal dari kode kueri JNDI yang ditulis sendiri, batasi URL kueri dan larang pencarian melalui protokol yang tidak aman.
SQL injection
Description
SQL injection terjadi ketika penyerang menyisipkan pernyataan SQL berbahaya ke dalam string kueri permintaan web atau input formulir. Server mengeksekusi pernyataan SQL yang disuntikkan tersebut, sehingga memungkinkan akses ke data dalam database.
Solution
SQL injection disebabkan oleh penggabungan string dalam pernyataan SQL. Gunakan kueri terparameterisasi (prepared statements) untuk mengompilasi parameter input sebelumnya. Jika penggunaan kueri terparameterisasi tidak memungkinkan, terapkan validasi daftar putih atau blacklist untuk membatasi parameter yang digabungkan.
Command injection
Description
Command injection adalah kerentanan yang memungkinkan penyerang mengeksekusi perintah sistem arbitrer pada server. Dalam kebanyakan kasus, command injection terjadi akibat adanya webshell atau kode sisi server yang tidak aman yang meneruskan input pengguna ke fungsi perintah sistem.
Solution
Identifikasi lokasi eksekusi perintah:
Jika eksekusi perintah disebabkan oleh webshell, segera hapus webshell tersebut.
Jika eksekusi perintah merupakan bagian dari fungsionalitas server yang sah, terapkan pembatasan daftar putih untuk membatasi perintah yang dapat dieksekusi.
XXE
Description
XML External Entity (XXE) injection terjadi ketika parser XML memproses dokumen XML yang mereferensikan entitas eksternal. Penyerang dapat membuat konten XML berbahaya untuk melakukan pembacaan file arbitrer, command injection, atau serangan terhadap jaringan internal.
Solution
Periksa apakah aplikasi Anda perlu menyelesaikan entitas eksternal saat mengurai dokumen XML. Jika entitas eksternal tidak diperlukan, nonaktifkan fitur tersebut dalam konfigurasi parser XML.
XSS
Description
Cross-site scripting (XSS) terjadi ketika penyerang menyuntikkan skrip berbahaya ke dalam situs web. Skrip yang disuntikkan tersebut dieksekusi di browser pengguna yang mengunjungi halaman yang terpengaruh.
Solution
Seperti serangan injeksi HTML, serangan XSS memungkinkan penyerang menyuntikkan kode HTML ke dalam halaman web. Untuk melindungi aplikasi dari serangan XSS, terapkan validasi input yang ketat dan encoding output:
Filter data masukan. Periksa karakter dan pola berikut:
',",<,>,on*,script, daniframe. Validasi semua sumber input pengguna, termasuk bidang formulir, nilai cookie, dan Header permintaan HTTP.Validasi properti data. Periksa tipe, format, panjang, rentang, dan konten semua data masukan.
Terapkan pertahanan berlapis. Lakukan validasi dan penyaringan input baik di sisi klien maupun sisi server.
Encode data keluaran. Ubah data masukan menjadi representasi yang aman seperti entitas HTML atau JavaScript yang di-escape sebelum dirender di halaman web. Nilai dalam database mungkin ditampilkan beberapa kali di situs web. Bahkan jika nilai input telah di-encode saat disimpan, selalu validasi dan encode semua nilai output sebelum ditampilkan.
Expression language (EL) injection
Description
Bahasa ekspresi (expression languages) menyediakan fitur waktu proses seperti kueri data dan pemrosesan dinamis. Banyak bahasa ekspresi juga mendukung operasi lanjutan seperti pemanggilan metode Java. Jika konten ekspresi tidak dibatasi, penyerang dapat memodifikasi ekspresi tersebut untuk mengeksekusi kode arbitrer.
Solution
Batasi secara ketat konten ekspresi dan nonaktifkan pemanggilan fungsi Java.
Jika kerentanan berasal dari komponen pihak ketiga, tingkatkan komponen tersebut ke versi terbaru yang telah diperbaiki.
Engine injection
Description
Java mendukung berbagai mesin JavaScript pihak ketiga (seperti Rhino dan Nashorn) serta mesin templat (seperti Apache Velocity dan FreeMarker). Mesin-mesin ini biasanya menyediakan fitur lanjutan termasuk pemanggilan metode Java. Jika input mesin tidak dibatasi, penyerang dapat menyuntikkan konten berbahaya yang dieksekusi oleh mesin tersebut, sehingga menyebabkan eksekusi kode arbitrer.
Solution
Batasi secara ketat konten yang diteruskan ke mesin skrip dan mesin templat. Nonaktifkan pemanggilan fungsi Java dalam konteks mesin.
Jika kerentanan berasal dari komponen pihak ketiga, tingkatkan komponen tersebut ke versi terbaru yang telah diperbaiki.
JSTL file inclusion
Description
JavaServer Pages Standard Tag Library (JSTL) adalah kumpulan tag JSP yang mengenkapsulasi fitur inti umum aplikasi JSP. Jika parameter yang dapat dikendalikan pengguna langsung digabungkan ke dalam ekspresi JSTL tanpa validasi input, penyerang dapat membuat muatan berbahaya yang menyebabkan pembacaan file arbitrer atau server-side request forgery (SSRF).
Solution
Jangan langsung menggabungkan parameter yang dapat dikendalikan pengguna ke dalam ekspresi JSTL. Jika penggabungan diperlukan, terapkan validasi daftar putih yang ketat terhadap nilai parameter tersebut.
Deserialization and class loading
Deserialization attack
Description
Deserialisasi Java mengembalikan urutan byte menjadi objek Java. Jika objek yang dideserialisasi berisi kode yang dapat dieksploitasi, penyerang dapat memanipulasi variabel anggota objek tersebut untuk mengeksekusi operasi berbahaya selama proses deserialisasi.
Solution
Tingkatkan komponen yang rentan ke versi terbaru yang telah diperbaiki.
Jika tidak tersedia versi yang telah diperbaiki, nonaktifkan sementara fungsionalitas deserialisasi yang terdampak.
Malicious class loading
Description
Eksploitasi zero-day dan webshell bergantung pada pemuatan kelas Java berbahaya. Ketika kelas berbahaya dimuat, penyerang dapat menginisialisasinya untuk mendapatkan izin eksekusi kode dan melakukan operasi berbahaya lebih lanjut.
Solution
Jika kelas berbahaya dimuat melalui webshell, segera hapus webshell tersebut.
Jika kelas berbahaya dimuat akibat kerentanan framework, tingkatkan framework tersebut ke versi terbaru yang telah diperbaiki.
Malicious beans binding
Description
Beberapa framework Java mendukung pengikatan properti bean otomatis pada waktu proses. Jika tipe properti bean yang dapat diikat tidak dibatasi, penyerang dapat memodifikasi nilai properti sensitif untuk mengganggu perilaku aplikasi atau mengeksekusi kode arbitrer.
Solution
Batasi tipe properti bean yang dapat diikat. Cegah modifikasi properti sensitif seperti
classdan properti class loader.Jika kerentanan berasal dari komponen pihak ketiga, tingkatkan komponen tersebut ke versi terbaru yang telah diperbaiki.
RASP bypass techniques
JNI injection
Description
Java Native Interface (JNI) injection adalah teknik umum yang digunakan untuk melewati Runtime Application Self-Protection (RASP). Setelah penyerang mendapatkan izin eksekusi kode, penyerang dapat menggunakan fungsi JNI untuk memanggil library dinamis eksternal yang berbahaya. Hal ini melewati perlindungan keamanan di lapisan Java dan menyembunyikan perilaku berbahaya.
Solution
Server Anda mungkin memiliki kerentanan eksekusi kode. Identifikasi sumber kerentanan tersebut dan batasi izin eksekusi kode.
Malicious reflection calls
Description
Modul perlindungan diri RASP mencegah penyerang menggunakan refleksi Java untuk memodifikasi data internal RASP pada waktu proses.
Solution
Server Anda mungkin memiliki kerentanan eksekusi kode. Identifikasi sumber kerentanan tersebut dan batasi izin eksekusi kode.
Thread injection
Description
Thread injection adalah teknik umum yang digunakan untuk melewati RASP. Setelah penyerang mendapatkan izin eksekusi kode, penyerang dapat membuat thread baru untuk keluar dari konteks eksekusi yang dipantau RASP. Hal ini mengurangi kemampuan pertahanan RASP.
Solution
Server Anda mungkin memiliki kerentanan eksekusi kode. Identifikasi sumber kerentanan tersebut dan batasi izin eksekusi kode.
Malicious Attach API
Description
Attach API adalah teknologi Java yang memungkinkan modifikasi bytecode aplikasi yang sedang berjalan secara dinamis. Penyerang dapat menggunakan teknologi ini untuk menyuntikkan memory horse bertipe agen. Metode serangan ini sangat menipu.
Solution
Server Anda mungkin memiliki kerentanan eksekusi kode. Identifikasi sumber kerentanan tersebut dan batasi izin eksekusi kode.
File system attacks
Arbitrary file read
Description
Jika fitur unduh atau baca file pada situs web memungkinkan akses file melalui jalur mutlak atau penelusuran direktori, penyerang dapat mengeksploitasi kerentanan ini untuk membaca file sensitif dan memperoleh informasi rahasia.
Solution
Verifikasi bahwa operasi baca file berfungsi sesuai harapan. Jika terdeteksi perilaku anomali, tinjau kode terkait dan terapkan pembatasan blacklist untuk memblokir urutan penelusuran jalur seperti ./ dan ../.
Malicious file read and write
Description
Java menyediakan kelas RandomAccessFile untuk operasi baca dan tulis file. Jika jalur file dan konten file tidak divalidasi dengan benar, penyerang dapat membaca file sistem sensitif atau menulis file trojan ke server.
Solution
Verifikasi bahwa operasi baca dan tulis file berfungsi sesuai harapan. Jika terdeteksi perilaku anomali, tinjau kode terkait dan terapkan pembatasan blacklist untuk memblokir akses ke jalur sensitif.
Malicious file upload
Description
Jika fitur unggah file pada situs web tidak membatasi tipe file yang dapat diunggah, penyerang dapat mengunggah file yang dapat dieksekusi seperti webshell JSP untuk mendapatkan hak istimewa tingkat tinggi pada server.
Solution
Batasi tipe file yang dapat diunggah. Larang pengunggahan file dengan izin eksekusi, seperti file JSP.
Arbitrary file deletion
Description
Jika fitur penghapusan file pada situs web memungkinkan penghapusan file melalui jalur mutlak atau penelusuran direktori, dan jalur file tersebut tidak divalidasi dengan benar, penyerang dapat mengeksploitasi kerentanan ini untuk menghapus file penting atau memperoleh informasi sensitif.
Solution
Verifikasi bahwa fungsi penghapusan file berfungsi sesuai harapan. Jika terdeteksi perilaku anomali, tinjau kode terkait dan terapkan pembatasan blacklist untuk memblokir urutan penelusuran jalur seperti ./ dan ../.
Directory traversal
Description
Penelusuran direktori terjadi ketika struktur direktori situs web dapat ditelusuri secara sembarang akibat cacat konfigurasi. Hal ini dapat menyebabkan pengungkapan informasi sensitif yang dapat digunakan penyerang untuk lebih lanjut merusak situs web.
Solution
Verifikasi bahwa akses direktori berfungsi sesuai harapan. Jika terdeteksi perilaku anomali, tinjau kode terkait dan terapkan pembatasan blacklist untuk memblokir urutan penelusuran seperti ./ dan ../.
Network-based attacks
SSRF
Description
Server-side request forgery (SSRF) adalah kerentanan yang memungkinkan penyerang menginduksi aplikasi sisi server untuk mengirim permintaan HTTP ke tujuan arbitrer. Penyerang dapat menggunakan SSRF untuk mengakses sistem internal yang tidak dapat dijangkau langsung dari internet.
Solution
SSRF terjadi ketika server mengirim permintaan berdasarkan parameter input yang diberikan pengguna. Validasi nilai parameter tersebut dan terapkan pembatasan daftar putih untuk tujuan yang diizinkan.
Malicious DNS query
Description
Penyerang dapat mengeksploitasi kueri DNS dengan berbagai cara. Penyerang dapat menggunakan protokol DNS untuk mengekstraksi data sensitif dari jaringan internal (teknik tunneling DNS). Penyerang juga dapat menggunakan kueri DNS untuk memeriksa kerentanan pada sistem internal, seperti SSRF dan JNDI injection.
Solution
Kueri DNS berbahaya terjadi ketika server mengirim permintaan berdasarkan parameter yang dikendalikan pengguna. Validasi nilai parameter tersebut dan terapkan pembatasan daftar putih.
Usage of insecure protocols
Description
Jika URL yang diakses server dapat dikendalikan pengguna dan aplikasi tidak membatasi protokol URL, penyerang dapat menggunakan protokol tidak aman seperti file:// dan netdoc:// untuk membaca file sensitif di server.
Solution
Batasi protokol URL yang boleh digunakan oleh aplikasi. Izinkan hanya protokol tepercaya seperti HTTP dan HTTPS.
Persistence techniques
Memory horse injection
Description
Memory horse adalah teknik trojan tanpa file (fileless) yang sedang berkembang. Penyerang menyuntikkan kode berbahaya langsung ke dalam ruang memori aplikasi, sehingga trojan dapat beroperasi tanpa menulis file ke disk. Teknik ini dapat melewati Web Application Firewall (WAF) dan mekanisme deteksi berbasis host.
Solution
Server Anda mungkin memiliki kerentanan eksekusi kode. Identifikasi sumber kerentanan tersebut dan batasi izin eksekusi kode.
Credential attacks
Weak database password
Description
Jika database menggunakan kata sandi yang lemah, penyerang dapat memperoleh kata sandi tersebut melalui serangan brute-force. Penyerang kemudian dapat mengakses database untuk mencuri data atau meningkatkan hak istimewa guna mendapatkan izin tingkat sistem.
Solution
Gunakan kata sandi yang kuat dan kompleks untuk semua akun database.