Widget HTML Atas

PT. RONAR INDONESIA

Injeksi LDAP

Artikel ini membahas tentang Definisi Layanan LDAP, bagaimana mereka dieksploitasi, dan lingkungan apa yang paling rentan terhadap serangan Injeksi LDAP, Kemudian membahas injeksi LDAP yang paling umum dan menunjukkan contoh sehingga Anda dapat mempelajari bagaimana peretas menggunakan teknik ini untuk mengeksploitasi lingkungan yang rentan.


Apa itu LDAP?

Teknologi informasi terus berkembang dengan kecepatan luar biasa. Ini memerlukan peningkatan jumlah data sensitif yang disimpan dalam database organisasi. Bagaimana cara melindungi data ini? Dengan firewall internal, mekanisme deteksi intrusi, dan sebagainya. Aplikasi bertindak seperti gerbang yang harus Anda lewati untuk mendapatkan informasi. Anda mengirimkan pertanyaan untuk mendapatkan informasi yang diinginkan. Masalah muncul ketika aplikasi tidak membersihkan input pengguna saat membuat kueri.

Protokol Akses Direktori Ringan (LDAP) adalah protokol yang digunakan untuk meminta dan mengubah layanan direktori yang dijalankan melalui TCP / IP. LDAP memberi Anda repositori yang dapat diakses aplikasi. Repositori ini berisi informasi tentang aplikasi, sistem, kredensial, pengguna, dan sebagainya. Protokol LDAP dilengkapi dengan perintah dan sintaksis. Mereka memungkinkan pengguna untuk mencari, memodifikasi, menambah dan menghapus entri direktori. Apakah Anda ingin menemukan baju baru dari toko pakaian favorit Anda di situs web mereka? Protokol LDAP memungkinkan Anda mencari informasi itu.

Sebagian besar aplikasi web memiliki kerentanan terkait validasi input. Aktor ancaman menggunakan teknik injeksi untuk mengeksploitasi kerentanan ini dan mendapatkan informasi. injeksi SQL adalah jenis injeksi yang paling umum, tetapi peretas juga menggunakan injeksi LDAP jika perlu. Peretas menyalahgunakan dan memanipulasi filter untuk menemukan informasi sensitif yang penting. Keamanan aplikasi dan fungsi layanan dalam lingkungan masuk tunggal. Lingkungan ini didasarkan pada direktori LDAP. Setiap pelanggaran keamanan akan sangat merusak pengguna atau bisnis.

Layanan direktori digunakan untuk mencari informasi. Bagaimana layanan direktori LDAP menyimpan dan mengatur informasi? Struktur informasi terlihat seperti pohon entri direktori. Karena ini pengguna dapat mencari informasi yang berbagi atribut umum. Semua entri dalam layanan direktori LDAP adalah instance dari objek. Aturan menentukan bagaimana suatu objek perlu merespons atribut yang diperbaiki untuk objek itu.

Layanan direktori LDAP bersifat hirarkis. Mereka juga beroperasi berdasarkan model klien / server. Dengan menggunakan filter, pengguna dapat mencari entri direktori yang menarik bagi mereka. Seorang klien akan mengirim permintaan ke server. Kemudian server merespons dengan entri direktori yang cocok dengan filter yang digunakan pengguna.

Filter harus dalam kurung. Satu set operator logis (DAN, ATAU, dan TIDAK) dan relasional (=,> =, <=, ~ =) digunakan untuk konstruksi mereka. Namun, pengguna dapat mengganti karakter yang digunakan dalam pembuatan filter dengan karakter khusus "*". Ada juga dua simbol mandiri yang dapat Anda gunakan sebagai konstanta khusus. Ini adalah:

    (&) -> BENAR Mutlak
    (|) -> Absolute FALSE

Lingkungan LDAP yang rentan


Banyak perusahaan menggunakan layanan LDAP. Di masa lalu, aplikasi membutuhkan direktori berbeda dengan otentikasi mandiri berfungsi. Domain, daftar distribusi, database. Semua diperlukan direktori terpisah. Namun, hari ini, direktori baru berdasarkan layanan LDAP memiliki banyak tujuan. Mereka berfungsi sebagai repositori informasi terkonsolidasi untuk otentikasi pengguna. Mereka juga memungkinkan lingkungan masuk tunggal. Ini hadir dengan produktivitas yang lebih baik untuk bisnis. Mengapa? Karena pengurangan kompleksitas administrasi. Keamanan dan toleransi kesalahan juga ditingkatkan. Aplikasi yang bergantung pada layanan LDAP menggunakan direktori untuk banyak tujuan. Tujuan paling umum termasuk:
  •     Manajemen hak istimewa
  •     Pengelolaan sumber daya
  •     Kontrol akses (manajemen sertifikat pengguna, verifikasi pasangan pengguna / kata sandi)
Layanan LDAP sangat berguna untuk jaringan perusahaan. Itulah alasan mengapa server LDAP berada di backend bersama dengan server database lain.

Sekarang kita memiliki pemahaman yang sama, mari kita bahas injeksi LDAP. Jenis-jenis teknik ini mirip dengan serangan SQL Injection. Apa tujuan dari Injeksi LDAP? Untuk menyalahgunakan parameter yang diperkenalkan pengguna untuk menghasilkan kueri LDAP. Masalah-masalah ini bisa dihindari. Bagaimana? Dengan aplikasi itu sendiri. Perlu membersihkan parameter yang diperkenalkan oleh pengguna sebelum permintaan dikirim ke server. Dalam kebanyakan kasus, parameter tidak difilter dengan benar. Ini mengarah ke lingkungan yang rentan di mana peretas dapat menyuntikkan kode berbahaya.

Bagaimana kita mengklasifikasikan injeksi LDAP? Sebagai kueri yang dibuat pengguna dengan niat jahat. Kueri normal yang dikirim ke server LDAP menghasilkan output normal. Namun, pernyataan LDAP yang dikirim bersama dengan injeksi kode menyebabkan masalah. Informasi sensitif dan pribadi adalah target yang diperoleh peretas dari server LDAP dengan teknik ini. Beberapa injeksi LDAP bahkan melangkah lebih jauh. Peretas menggunakan teknik Injeksi LDAP yang lebih canggih dapat menjalankan perintah sewenang-wenang. Ini memungkinkan mereka memperoleh izin tanpa izin dan juga mengubah informasi pohon LDAP.

Lingkungan yang paling rentan terhadap serangan Injeksi LDAP termasuk ADAM dan OpenLDAP. Jenis serangan Injeksi LDAP yang paling luas adalah injeksi AND LDAP, injeksi LDAP, dan injeksi LDAP Buta (memiliki tipe ATAU dan DAN sendiri).


Injeksi LDAP yang paling umum dan cara kerjanya

Layanan LDAP apa yang paling banyak digunakan? ADAM dan OpenLDAP. Keduanya rentan terhadap serangan injeksi. Mari kita tunjukkan beberapa contoh Injeksi LDAP yang dapat terjadi di beberapa lingkungan yang rentan ini:

- (atribut = nilai)

Filter IA dapat digunakan untuk membuat kueri yang tidak memiliki operator logika (OR dan AND). injeksi seperti:

“Value) (injected_filter”

Hasil dalam dua filter (yang kedua diabaikan sementara yang pertama dieksekusi dalam implementasi OpenLDAP):

(atribut = nilai) (injected_filter)

ADAM LDAP tidak mengizinkan kueri dengan dua filter. Ini membuat injeksi ini tidak berguna. Maka kita memiliki & dan | simbol mandiri. Membuat pertanyaan dengan mereka terlihat seperti ini:

(& (atribut = nilai) (second_filter))

(| (atribut = nilai) (second_filter))

Filter yang memiliki operator logika OR atau AND dapat membuat kueri di mana injeksi ini:

“Value) (injected_filter”

Hasil dalam filter ini:

(& (atribut = nilai) (injected_filter)) (second_filter)).

Seperti yang Anda lihat, filter ini tidak benar secara sintaksis. Namun, OpenLDAP akan memprosesnya terlepas. Itu akan pergi dari kiri ke kanan dan mengabaikan semua karakter setelah filter pertama ditutup. Apa artinya itu? Komponen Klien LDAP tertentu mengabaikan filter kedua. Yang lengkap pertama dikirim ke ADAM dan OpenLDAP. Begitulah injeksi melewati keamanan.

Dalam kasus di mana aplikasi memiliki kerangka kerja yang memeriksa filter, itu harus benar. Contoh injeksi yang benar secara sintetis terlihat seperti:

“Value) (injected_filter)) (& (1 = 0”

Ini menunjukkan dua filter berbeda di mana yang kedua diabaikan:

(& (atribut = nilai) (injected_filter)) (& 1 = 0) (second_filter)).

Karena Server LDAP tertentu mengabaikan filter kedua, beberapa komponen tidak mengizinkan kueri LDAP dengan dua filter. Penyerang kemudian membuat injeksi khusus untuk mendapatkan kueri LDAP dengan filter tunggal. Sekarang injeksi seperti:

“Value) (injected_filter”

Hasil dalam filter ini:

(& (atribut = nilai) (injected_filter)) (second_filter)).

Bagaimana penyerang menguji suatu aplikasi untuk melihat apakah itu rentan terhadap injeksi kode? Mereka mengirim kueri ke server yang menghasilkan input yang tidak valid. Jika server mengembalikan pesan kesalahan, itu berarti server mengeksekusi kueri nya. Teknik injeksi kode yang berarti adalah mungkin. Baca lebih lanjut untuk mengetahui tentang DAN dan ATAU lingkungan injeksi.

Injeksi AND LDAP

Dalam hal ini, aplikasi membuat kueri dengan operator "&". Ini bersama-sama dengan satu atau lebih parameter yang diperkenalkan oleh pengguna digunakan untuk mencari di direktori LDAP.

(& (parameter1 = value1) (parameter2 = value2))

Pencarian menggunakan value1 dan value2 sebagai nilai yang membiarkan pencarian di direktori LDAP terjadi. Peretas dapat mempertahankan konstruksi filter yang benar sambil juga menyuntikkan kode berbahaya mereka. Inilah cara mereka menyalahgunakan permintaan untuk mengejar tujuan mereka sendiri.

Akses Kontrol Bypass

Semua halaman login memiliki dua bidang kotak teks. Satu untuk nama pengguna satu untuk kata sandi. Input pengguna adalah USER (Uname) dan PASSWORD (Pwd). Klien memasok pasangan pengguna / kata sandi. Untuk mengonfirmasi keberadaan pasangan ini, LDAP membuat filter pencarian dan mengirimkannya ke server LDAP.

(& (USER = Tidak Sama) (PASSWORD = Pwd))

Seorang penyerang dapat memasukkan nama pengguna yang valid (john90 misalnya) sambil juga menyuntikkan urutan yang benar setelah nama. Dengan cara ini mereka berhasil melewati pemeriksaan kata sandi. Dengan mengetahui nama pengguna, string apa pun dapat diperkenalkan sebagai nilai Pwd. Kemudian permintaan berikut dikirim ke server:

(& (USER = john90) (&)) (PASSWORD = Pwd))

Server LDAP hanya memproses filter pertama. Kueri hanya memproses kueri (& (USER = john90) (&). Karena kueri ini selalu benar, penyerang memasuki sistem tanpa kata sandi yang tepat.

Ketinggian Hak Istimewa

Beberapa permintaan mencantumkan semua dokumen dan dokumen tersebut dapat dilihat oleh pengguna yang memiliki tingkat keamanan rendah. Sebagai contoh / informasi / laporan, / informasi / proyek mendatang, dll file dalam direktori. Bagian "Informasi" adalah entri pengguna untuk parameter pertama. Semua dokumen ini memiliki tingkat keamanan "Rendah". Bagian "Rendah" adalah nilai untuk parameter kedua. Ini juga memungkinkan peretas untuk mengakses tingkat keamanan tinggi. Untuk melakukan itu, peretas harus menggunakan injeksi yang terlihat seperti ini:

“Informasi) (security_level = *)) (& (direktori = dokumen”

injeksi ini menghasilkan filter ini:

(& (direktori = Informasi) (security_level = *)) (& (direktori = Informasi) (security_level = rendah))

Jika Anda memperhatikan, Anda tahu LDAP memproses filter pertama. Filter kedua diabaikan. Permintaan yang diproses adalah (& (direktori = Informasi) tingkat keamanan = *)). (& (Direktori = Informasi) (tingkat keamanan = rendah)) diabaikan sepenuhnya. Begitulah cara peretas melihat daftar dokumen yang biasanya hanya dapat diakses oleh pengguna dengan semua tingkat keamanan. Meskipun peretas sebenarnya tidak memiliki hak istimewa untuk melihat informasi ini

Injeksi OR LDAP

Ada kasus di mana aplikasi membuat kueri normal dengan operator (|). Bersama dengan satu atau lebih parameter yang diperkenalkan pengguna. Contohnya terlihat seperti ini:

(| (parameter = value1) (parameter2 = value2))

Seperti sebelumnya, value1 dan value2 digunakan untuk pencarian.

Keterbukaan Informasi

Beberapa penjelajah sumber daya membiarkan pengguna tahu persis sumber daya apa yang tersedia dalam sistem. Misalnya, situs web yang didedikasikan untuk menjual pakaian. Pengguna dapat mencari kemeja atau celana tertentu dan melihat apakah mereka tersedia untuk dijual. Dalam situasi ini ATAU injeksi LDAP digunakan:

(| (type = Resource1) (type = Resource2))

Resource1 dan Resource2 menunjukkan jenis sumber daya dalam sistem. Resource1 = Jeans dan Resource2 = T-Shirt menunjukkan semua jeans dan T-Shirt yang tersedia untuk pembelian dalam sistem. Bagaimana peretas mengeksploitasi ini? Dengan menyuntikkan (uid = *) ke Resource1 = Jeans. Kueri ini kemudian dikirim ke server:

(| (type = Jeans) (uid = *)) (type = T-Shirts))

Server LDAP kemudian menampilkan semua objek jins dan pengguna.

Injeksi BLIND LDAP


Peretas dapat menyimpulkan banyak hal hanya dari respons server. Aplikasi itu sendiri tidak menampilkan pesan kesalahan. Namun, kode yang disuntikkan ke filter LDAP akan menghasilkan respons yang valid atau kesalahan. Hasil yang benar atau hasil yang salah. Penyerang mengeksploitasi perilaku ini untuk mendapatkan jawaban atas pertanyaan benar atau salah dari server. Kami menyebutnya teknik Blind Attacks. Meskipun serangan Injeksi LDAP buta tidak secepat serangan klasik, mereka mudah diimplementasikan. Mengapa? Karena mereka bekerja pada logika biner. Peretas menggunakan injeksi LDAP buta untuk mendapatkan informasi sensitif dari Direktori LDAP.

Injeksi AND BLIND LDAP

Bayangkan sebuah toko online yang dapat mencantumkan semua kemeja Puma dari direktori LDAP. Tetapi pesan kesalahan tidak dikembalikan. Filter pencarian LDAP ini dikirim:

(& (objectClass = Kemeja) (tipe = Puma *))

Setiap kaos Puma yang tersedia ditampilkan kepada pengguna sebagai ikon. Jika tidak ada kemeja Puma yang tersedia, pengguna tidak akan melihat ikon apa pun. Di sinilah Blind LDAP Injection berperan. “*) ObjectClass = *)) (& (objectClass = void” disuntikkan dan sekarang aplikasi membuat kueri LDAP yang terlihat seperti:

(& (objectClass = *) (objectClass = *)) (& (objectClass = void) (type = Puma *))

Server memproses hanya bagian (& (objectClass = *) (objectClass = *)) dari filter LDAP. Sekarang ikon baju menunjukkan ke klien. Bagaimana? ObjectClass = * filter selalu mengembalikan objek. Ikon yang ditampilkan berarti responsnya benar. Kalau tidak, responsnya salah. Para peretas sekarang memiliki opsi untuk menggunakan teknik injeksi buta dalam banyak hal. Contoh injeksi:

(& (objectClass = *) (objectClass = pengguna)) (& (objectClass = foo) (type = Puma *))

(& (objectClass = *) (objectClass = Sumber)) (& (objectClass = foo) (type = Puma *))

Nilai objectClass yang berbeda dapat disimpulkan dengan bantuan injeksi ini. Jika bahkan satu ikon baju ditampilkan, nilai objectClass ada. Kalau tidak, objectClass tidak ada. Seorang hacker dapat memperoleh segala macam informasi dengan menggunakan pertanyaan BENAR / SALAH melalui injeksi Blap LDAP.

Injeksi OR BLIND LDAP

Injeksi dalam lingkungan ATAU terlihat seperti ini:

(| (objectClass = void) (objectClass = void)) (& (objectClass = void) (type = Puma *))

Kueri LDAP ini tidak memperoleh objek apa pun dari layanan direktori LDAP. Ikon kemeja tidak diperlihatkan kepada klien, menjadikannya respons yang SALAH. Jika sebuah ikon ditampilkan, itu adalah respons yang BENAR. Untuk mengumpulkan informasi, peretas akan menyuntikkan filter LDAP seperti ini:

(| (objectClass = void) (objectClass = pengguna)) (& (objectClass = void) (type = Puma *))

(| (objectClass = void) (objectClass = Resources)) (& (objectClass = void) (type = Puma *))

Sama halnya dengan AND Blind Injection. Terus membaca untuk melihat bagaimana Anda dapat melindungi diri terhadap kerentanan LDAP!

Bagaimana mencegah kerentanan LDAP

Kami memberi tahu Anda cara melindungi diri dari injeksi LDAP. Sayangnya, firewall dan mekanisme deteksi intrusi tidak akan membantu di sini karena semua serangan ini terjadi di lapisan aplikasi. Pilihan terbaik Anda adalah menggunakan titik paparan minimum dan prinsip-prinsip hak istimewa minimum. Itulah beberapa cara untuk meminimalkan bahaya ancaman ini.
Ada opsi lain juga. Untuk lebih mengurangi bahaya teknik injeksi kode, gunakan mekanisme ini:
  •     Analisis kode sumber statis
  •     Pemrograman defensif
  •     Validasi input lanjutan
  •     Pemeriksaan dinamis
Cara paling efektif untuk mencegah serangan Injeksi LDAP adalah membersihkan dan memeriksa variabel. Karena variabel adalah blok penyusun filter LDAP, peretas menggunakan karakter khusus dalam parameter untuk membuat injeksi berbahaya. DAN "&", ATAU "|", BUKAN "!", =,> =, <=, ~ = Adalah semua operator yang perlu difilter pada lapisan aplikasi untuk memastikan mereka tidak digunakan dalam serangan injeksi.

Semua nilai yang membuat filter LDAP harus diperiksa terhadap daftar nilai yang valid di Lapisan Aplikasi sebelum LDAP menerima kueri.

https://www.neuralegion .com/introduction-to-ldap-injection/
https://www.neuralegion .com/the-most-common-ldap-injections-and-how-they-work/
PT. RONAR INDONESIA