Security comes first! Kita sering mendengar ungkapan tersebut ketika membuat aplikasi apa pun. Dalam artikel Cyber Security: Pengertian, Jenis, dan Ancamannya, kamu sudah mengetahui betapa fatalnya jika kita menyepelekan masalah security atau kemanan, apalagi aplikasi yang kamu buat mengandung data sensitif.
Dalam artikel kali ini, kita akan mengetahui apa saja serangan terhadap security yang dapat terjadi pada aplikasi, khususnya RESTful API. Segera amankan RESTful API buatanmu dari tiga serangan ini, ya!
Serangan SQL Injection
Salah satu serangan keamanan yang rentan terjadi pada aplikasi yang memanfaatkan database adalah SQL injection. Serangan dilakukan dengan memanfaatkan input atau payload yang dimanipulasi untuk menjalankan proses SQL secara ilegal. Melalui SQL injection, penyerang dapat melewati autentikasi, mencuri data, hingga memanipulasi data. Seram sekali, kan?!
💻 Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar SekarangBerikut adalah gambaran dari serangan SQL injection yang dapat melewati proses autentikasi. Misalnya, kamu punya kueri seperti contoh kode di bawah ini.
1 2 3 4 |
const username = 'dicoding'; const password = 'supersecret'; const query = `SELECT * FROM users WHERE username = "${username}" AND password = "${password}" LIMIT 1;` |
Penyerang akan mudah memanipulasi SQL dengan memberikan nilai username dan password yang dapat mengubah sintaks SQL. Misalnya “ OR “” =”.
1 2 3 4 5 6 7 8 9 10 11 |
const username = '" or ""="'; const password = '" or ""="'; const query = `SELECT * FROM users WHERE username = "${username}" AND password = "${password}" LIMIT 1;`; console.log(query); /** * output * SELECT * FROM users WHERE username = "" or ""="" AND password = "" or ""="" LIMIT 1; */ |
SQL tersebut valid. Jika database mengeksekusinya, ia akan mengembalikan data users karena OR “”=”” selalu menghasilkan kondisi TRUE.
Langkah Preventif dari Serangan SQL Injection
Celah ini dapat terjadi karena input atau payload dari user yang dimanipulasi untuk mengubah struktur SQL. Dengan begitu, langkah preventif yang bisa diambil adalah memvalidasi input dari user sebelum diproses ke database.
Validasi input dapat dilakukan secara manual (sanitizing atau escaping input) atau best practice-nya bisa menggunakan fitur Parameterized Query atau Object Relational Mapping (ORM) ketika membangun SQL untuk berinteraksi dengan database.
Serangan Denial-of-Service (DoS) dan Distributed Denial-of-Service (DDoS)
DoS dan DDoS adalah serangan yang dilakukan dengan cara membanjiri trafik melalui muatan yang berat pada aplikasi web hingga ia tidak dapat bekerja optimal dalam melayani pengguna. Ada dua strategi dalam serangan ini, yang pertama dilakukan oleh satu device (DoS) dan yang kedua dilakukan oleh banyak device (DDoS).
DoS dan DDoS adalah serangan yang menargetkan infrastruktur aplikasi dan efek paling berat bisa membuat seluruh aplikasi menjadi benar-benar lumpuh.
Langkah Preventif dari Serangan DoS dan DDoS
Serangan DoS dan DDoS menggunakan teknik membanjiri trafik aplikasi dengan permintaan yang dilakukan secara berulang. Jadi, langkah preventif yang bisa dilakukan adalah melimitasi permintaan yang masuk atau request rate limit. Kondisinya, masing-masing client hanya dapat melakukan sejumlah request saja selama kurun waktu tertentu. Rate limit dapat mudah diterapkan pada level Web Server, contohnya NGINX atau APACHE.
Berikut adalah contoh penerapan rate limit di NGINX.
1 2 3 4 5 6 7 8 9 10 |
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; server { # ... location /authentications { limit_req zone=one; # ... } } |
Cara lain adalah dengan memanfaatkan layanan security yang ditawarkan oleh cloud platform, contohnya AWS Shield. AWS Shield secara otomatis melindungi sumber daya AWS kamu dari jenis serangan DDoS yang paling umum tanpa biaya. Dengan menggunakan berbagai teknik analisis, AWS Shield Standard dapat mendeteksi dan memitigasi trafik berbahaya secara real time saat memasuki aplikasi kamu.
Serangan Man In The Middle
Serangan terakhir adalah Man In The Middle (MITM). Ini adalah jenis serangan yang sangat berbahaya dan bisa terjadi pada bentuk komunikasi apa pun, baik di web, telepon seluler, maupun peralatan komunikasi tradisional seperti surat menyurat.
Mudahnya kita bisa menganggap serangan MITM sama seperti menguping atau menyadap. Serangan ini dilakukan dengan menjadi orang yang berada di tengah komunikasi antara dua pihak. Penyerang bisa mengetahui pesan yang dikirim dan diterima oleh pihak yang menjadi target.
Namun, MITM bisa lebih berbahaya daripada menyadap. Menyadap merupakan bentuk serangan pasif karena penyerang hanya bisa memantau transaksi data yang lewat saja. Namun, MITM tak hanya memantau, serangan ini dapat mencegat dan mengubah pesan yang dikirim atau diterima. Dengan begitu serangan MITM dapat disebut dengan serangan aktif.
Dari gambar tersebut, kamu bisa melihat betapa berbahayanya MITM ini. Budi alias penyerang bisa leluasa memata-matai (spying), mencegat (intercepting), hingga memalsukan (fabricating) dirinya menjadi Alisa dan Bobi. Pertanyaannya, mengapa bisa terjadi MITM? Bagaimana caranya Budi bisa berada di antara Alisa dan Bobi?
MITM paling banyak terjadi karena korban dan penyerang berada dalam jaringan yang sama. Biasanya disebabkan oleh korban yang tidak hati-hati ketika menggunakan WiFi hotspot publik. Ketika sudah berada di jaringan yang sama, penyerang dapat secara mudah untuk menyadap komunikasi korban dengan server melalui teknik IP spoofing atau ARP spoofing.
Setelah korban berhasil tersadap, penyerang dapat membaca seluruh aktivitas transaksi HTTP request dan response. Penyerang bisa mencuri cookie, session, access token, bahkan kredensial yang hendak korban gunakan ketika login. Lebih parahnya bila penyerang sudah melakukan intercepting dan fabricating, walaupun untuk sampai tahap ini perlu implementasi yang rumit.
Langkah Preventif dari Serangan MITM
Dalam serangan MITM, penyerang sangat mengandalkan jaringan yang digunakan korban sehingga langkah preventifnya adalah kita perlu berhati-hati ketika menggunakan jaringan publik.
Langkah preventif terhadap penyerangan ini tak hanya dapat dilakukan oleh kamu sebagai developer aplikasi, tetapi juga berlaku untuk pengguna secara umum. Berikut beberapa hal yang bisa mencegah terjadinya serangan MITM untuk pengguna aplikasi.
- Jangan gunakan WiFi publik yang tidak terproteksi.
- Jangan pernah melakukan transaksi penting menggunakan WiFi publik.
- Mengganti password WiFi secara berkala.
- Mengaktifkan Multi-Factor Authentication.
Langkah preventif terhadap serangan MITM juga dapat diterapkan pada sisi aplikasi, yakni selalu menggunakan protokol yang aman, seperti HTTPS. Protokol HTTPS adalah protokol gabungan antara HTTP dengan TLS atau SSL. Transaksi data menggunakan protokol ini dilakukan secara aman karena terdapat proses enkripsi pada data yang ditransaksikan. Dengan begitu, penyerang tidak akan bisa membaca data pada transaksi HTTPS karena datanya telah terenkripsi.
Kesimpulan
Sejauh ini kamu sudah mengetahui beberapa bentuk serangan yang mungkin terjadi ketika membangun aplikasi, khususnya RESTful API. Hal yang terpenting adalah kamu sudah mengetahui beberapa langkah preventif terhadap berbagai jenis serangan.
Sampai jumpa dalam artikel lainnya!