Serangan injeksi adalah salah satu cara paling umum yang digunakan peretas untuk menyerang sistem karena memungkinkan mereka menjalankan banyak perintah dan kode dengan mudah. Injeksi perintah OS adalah salah satu serangan injeksi yang perlu Anda waspadai. Ini mengeksploitasi kerentanan yang harus ditanggapi dengan sangat serius oleh administrator sistem, database, dan aplikasi web.
Jadi apa itu serangan injeksi perintah OS?
Definisi Injeksi Perintah OS
Injeksi perintah OS memungkinkan penyerang jahat menjalankan perintah apa pun yang mereka inginkan dengan mengeksploitasi sistem operasi, program, aplikasi, database, atau plug-in yang rentan. Itu terjadi ketika aplikasi gagal memvalidasi dan membersihkan parameter yang mereka gunakan dengan benar saat memanggil fungsi shell seperti sistem() atau eksekusi() untuk menjalankan perintah sistem.
Untuk lebih memahami pendeteksian dan eksploitasi injeksi perintah OS, penting untuk memeriksa masalah ini dalam tiga kategori utama.
1. Injeksi Perintah Langsung
Pertimbangkan ini dari sudut pandang penyerang. Penyerang dunia maya menemukan bahwa aplikasi menjalankan perintah sistem tertentu; mereka memasukkan perintah jahat sebagai bagian dari argumen yang diharapkan. Aplikasi kemudian mengeksekusi perintah asli diikuti oleh yang berbahaya.
Penyerang menggunakan berbagai pendekatan untuk menemukan kerentanan tersebut. Metode termudah untuk mengatasi hal ini adalah dengan selalu memperbarui sistem operasi; Anda dapat melakukan ini bekerja sama dengan tim TI yang kompeten. Anda harus menghindari semua aplikasi dan program yang dapat menyebabkan kerentanan sistem karena penyerang dapat memasukkan kode secara langsung, dan kerusakannya tidak dapat diprediksi.
2. Injeksi Perintah Tidak Langsung
Dalam kasus injeksi perintah tidak langsung, penyerang tidak langsung memasukkan kode atau perintah ke dalam sistem. Untuk ini, mereka menggunakan aplikasi atau program yang rentan dalam sistem. Kerentanan menciptakan jembatan antara penyerang dan sistem operasi. Memanfaatkan komunikasi ini, penyerang bertujuan untuk menjalankan kode dan perintah berbahaya pada target.
Penyerang menjalankan serangkaian tes untuk mengidentifikasi kerentanan ini dan menemukan perangkat lunak tersebut menggunakan data dari sumber eksternal, seperti file atau variabel lingkungan, untuk memanggil perintah sistem. Penyerang kemudian memodifikasi konten dari sumber eksternal, sehingga sekarang berisi perintah berbahaya. Ini kemudian dijalankan bersamaan dengan instruksi aplikasi asli.
Perbedaan utama antara injeksi perintah langsung dan tidak langsung adalah penyerang menggunakan aplikasi untuk berkomunikasi dengan sistem operasi. Tapi tidak ada perbedaan nyata antara kerusakan yang dapat dilakukan oleh kedua bentuk injeksi, jadi keduanya perlu ditangani. Itu sebabnya Anda harus memastikan bahwa program di jaringan Anda dapat diandalkan dan diperlukan. Jangan simpan aplikasi yang tidak Anda percayai di perangkat Anda.
3. Injeksi Perintah Buta
Jenis lain dari injeksi perintah OS adalah injeksi perintah buta. Ini berarti aplikasi tidak mengembalikan output apa pun dari perintah dalam respons HTTP. Penyerang menggunakan teknik yang berbeda seperti penundaan waktu dan perutean keluaran untuk mengeksploitasi kerentanan ini.
Bayangkan Anda sedang menelusuri situs web, dan nilai "/?search=id" di URL berubah pada setiap penelusuran. Nilai id di sini bisa berupa halaman pengguna, alamat foto produk, atau halaman apa pun di situs. Penyerang bisa mendapatkan hasil yang berbeda dengan mengubah nilai id. Sulit melakukannya secara manual, tetapi ada alat seperti Burp Suite untuk ini. Kemudian, penyerang menemukan keanehan pada halaman: nilai id mungkin dikembalikan, meskipun tidak menunjukkan hasil apa pun, tanggapan situs web adalah 200, yang menunjukkan bahwa semuanya baik-baik saja. Dalam kasus seperti itu, penyerang dapat menggunakan injeksi perintah buta.
Teknik seperti penundaan waktu sangat berguna. Karena halaman yang dibuka akan kosong, Anda tidak akan menerima tanggapan apa pun, tetapi Anda mungkin masih dapat berkumpul informasi tentang apa yang disimpan dalam database berdasarkan penundaan waktu yang hanya memuat halaman jika ada karakter tertentu hadiah. Ini terlalu memakan waktu untuk menjadi proses manual, tetapi banyak alat yang dapat mengotomatiskan serangan tersebut.
Contoh Skenario Serangan
Mari kita tinjau semua hal di atas melalui sebuah contoh. Bayangkan Anda memiliki aplikasi belanja yang memungkinkan pengguna melihat apakah produk tersedia. Mari gunakan URL seperti di bawah ini untuk mengakses semua informasi ini:
example_unsafe_store.com/stockStatus? productID=245&storeID=
Bayangkan meneruskan ID produk dan toko sebagai argumen ke perintah shell, seperti "stockstat.pl 245 38", karena aplikasi harus meminta catatan lama. Jika pengembang tidak mengambil tindakan apa pun terhadap injeksi perintah, penyerang dapat mengirimkan masukan untuk menjalankan perintah yang diinginkan:
& gema this_a_harmful_command &
Jika entri ini masuk dalam parameter productID, perintah yang dieksekusi oleh aplikasi adalah:
stockstat.pl & gema this_a_harmful_command & 38
Perintah gema adalah metode yang berguna untuk mendeteksi injeksi perintah serta memastikan bahwa string yang diberikan muncul di keluaran. Karakter "&" adalah a pemisah perintah shell, jadi yang dijalankan adalah tiga perintah terpisah, satu demi satu. Akibatnya, output yang dikembalikan ke pengguna adalah:
Kesalahan -productID tidak ditemukan
this_a_harmful_command
38: memerintah tidak ditemukan
Di sini, file "stockstat.pl" menjalankan perintah tanpa argumen yang diharapkan dan karenanya mengembalikan pesan kesalahan. Kemudian, perintah gema yang disuntikkan oleh penyerang dijalankan dan penyerang melihat ekspresi yang dia masukkan di layar. Argumen asli, "38", dijalankan sebagai perintah penyebab kesalahan.
Cara Melindungi Terhadap Suntikan Perintah OS
Meskipun injeksi perintah adalah vektor serangan yang kuat dan berbahaya, ada beberapa trik untuk menghindarinya. Alasan di balik serangan injeksi perintah OS adalah untuk menjalankan perintah sistem operasi tertentu menggunakan aplikasi. Anda harus menghentikan hal ini terjadi. Ada beberapa masalah yang perlu dipertimbangkan:
- Anda harus mencegah siapa pun yang memiliki akses ke aplikasi agar tidak dapat menjalankan kode.
- Anda harus mencegah siapa pun yang memiliki akses ke aplikasi membuat permintaan ke server dengan ekspresi sintaksis.
- Anda harus mengenkripsi frasa yang diminta oleh siapa pun yang memiliki akses.
Mari kita telusuri setiap item satu per satu. Solusi yang baik untuk masalah pertama adalah menggunakan metode daftar putih untuk mencegah siapa pun yang mencapai lapisan aplikasi menjalankan kode atau permintaan tertentu. Siapa pun yang tidak Anda identifikasi tidak akan dapat menjalankan kode.
Solusi untuk yang kedua adalah tidak menerima beberapa ekspresi teks yang digunakan dalam perintah. Pengguna hanya dapat memasukkan nilai numerik. Terapkan ini bersama dengan metode daftar putih, dan Anda akan memiliki sistem yang jauh lebih aman.
Item ketiga adalah tentang enkripsi parameter sintaksis seperti karakter yang dimasukkan, dan spasi. Akibatnya, metode daftar putih, pemeriksaan input sintaksis, dan enkripsi input akan melindungi Anda dari injeksi perintah OS.
Serangan Injeksi Berevolusi Setiap Hari
Ada banyak metode injeksi dengan teknik serangan yang berbeda, seperti perintah OS, SQL, SSI, dan XPath. Tidak mudah mencoba mencegah masing-masing dari mereka. Perlu diingat bahwa semua serangan ini berkembang setiap hari dan memanfaatkan kerentanan kecil yang diabaikan pengembang. Itulah mengapa penting bagi Anda untuk selalu mengikuti perkembangan terkini dan mengikuti perkembangan dunia keamanan siber saat ini.