LDAP (Light Directory Access Portocol) ialah protokol akses direktori ringan berdasarkan standard X.500, menyediakan perkhidmatan dan protokol untuk mengakses kaedah pangkalan data direktori. Biasa digunakan untuk membentuk perkhidmatan direktori dengan pangkalan data direktori. Direktori ialah pangkalan data teragih profesional yang dioptimumkan untuk pertanyaan, menyemak imbas dan carian Ia mengatur data dalam struktur pokok, serupa dengan direktori fail dalam sistem Linux/Unix. Ia sesuai untuk menyimpan data yang tidak kerap berubah, seperti sijil awam, kunci keselamatan dan maklumat peranti fizikal syarikat, dalam direktori. Sama seperti SQL, LDAP ialah protokol carian dengan sintaks pertanyaan dan risiko kemungkinan serangan suntikan. Suntikan LDAP merujuk kepada kaedah serangan di mana rentetan input apabila klien menghantar permintaan pertanyaan mengandungi beberapa aksara khas, menyebabkan struktur pertanyaan asal LDAP diubah suai, dengan itu membenarkan akses kepada lebih banyak data yang tidak dibenarkan.
Artikel ini mengambil kod sumber bahasa JAVA sebagai contoh untuk menganalisis punca dan kaedah pembaikan kerentanan suntikan LDAP dalam CWE ID 90: Peneutralan Tidak Betul Elemen Khas yang digunakan dalam Pertanyaan LDAP ('Suntikan LDAP') sampel. Untuk butiran, sila lihat:
CWE ID 90: Peneutralan Tidak Betul Elemen Khas yang digunakan dalam Pertanyaan LDAP ('Suntikan LDAP')
http:/ /cwe .mitre.org/data/definitions/90.html
ID CWE 639: Pintasan Kebenaran Melalui Kunci Kawalan Pengguna
http://cwe.mitre. org/ data/definitions/639.html
2 Bahaya suntikan LDAP
Suntikan LDAP diperkenalkan. oleh pengguna Parameter menjana pertanyaan LDAP berniat jahat untuk memintas kawalan akses dan peningkatan keistimewaan pengguna dengan membina penapis LDAP. Melalui pembinaan penapis biasa, suntikan operasi DAN dan ATAU dilaksanakan untuk mendapatkan maklumat sensitif.
Dari Januari 2018 hingga Januari 2019, terdapat sejumlah 4 maklumat kerentanan yang berkaitan dengannya dalam CVE. Beberapa kelemahan adalah seperti berikut:
CVE 编号 | 概述 |
---|---|
CVE-2018-12689 | phpLDAPadmin 1.2.2 允许通过 cmd.php?cmd = loginform 请求中精心设计的 serverid 参数或登录面板中精心设计的用户名和密码进行 LDAP 注入。 |
CVE-2018-5730 | MIT krb5 1.6 或更高版本允许经过身份验证的 kadmin 将主体添加到 LDAP Kerberos 数据库,以通过提供 “linkdn” 和 “containerdn” 数据库参数来绕过DN容器检查,或者通过提供作为扩展的DN字符串来绕过 DN 容器检查。 |
CVE-2016-8750 | 4.0.8 之前的 Apache Karaf 使用 LDAPLoginModule 通过 LDAP 对用户进行身份验证。但是没有正确编码用户名,因此容易受到 LDAP 注入攻击,导致拒绝服务。 |
CVE-2011-4069 | PacketFence 3.0.2 之前的 html / admin / login.php 允许远程攻击者进行 LDAP 注入攻击,从而通过精心设计的用户名绕过身份验证。 |
Sampel datang daripada Samate Juliet Test Suite untuk Java v1.3 (https://samate.nist.gov/SARD/testsuite.php), sumber Nama fail: CWE90_LDAP_Injection__connect_tcp_01.java.
Dalam baris 39-61 kod contoh di atas, atur cara membuat sambungan TCP dan membaca Soket Data diberikan kepada pembolehubah data
, pernyataan pertanyaan LDAP dibina secara dinamik pada baris 118 dan dilaksanakan pada baris 119. LDAP merangkum kelas objek biasa untuk organisasi kakitangan Sebagai contoh, seseorang mengandungi atribut seperti nama akhir (sn), nama pertama (cn), nombor telefon (Nombor telefon) dan kata laluan (userPassword). Pertanyaan ini adalah untuk mengesahkan sama ada terdapat pekerja bernama pembolehubah data
, tetapi ia tidak melakukan sebarang penapisan pada kandungan pembolehubah data
. Menggunakan kaedah suntikan yang paling mudah, jika nilai parameter masuk ialah "*", maka keadaan pertanyaan dinamik yang dibina ialah "(cn=*)", yang boleh menanyakan maklumat semua pekerja, yang membawa kepada kebocoran maklumat.
Selepas menguji kod sampel di atas dengan 360 Code Guard, didapati terdapat kelemahan "suntikan LDAP" dan tahap keselamatan dinilai sebagai tinggi. Sumber pencemaran data dan arah aliran data boleh diperolehi melalui analisis laluan surih dan kecacatan dilaporkan pada baris 120 kod, seperti ditunjukkan dalam Rajah 1. Contoh pengesanan
3.2 Kod pembaikan
menerima parameter yang perlu diproses pada baris 120 , objek
memanggil kaedah untuk mengekod parameter yang diterima
nilai pengekodan yang sepadan dengan aksara. Tatasusunan bait yang dikodkan tidak mengandungi aksara khas yang terlibat dalam penghuraian arahan, dan pernyataan pertanyaan LDAP dengan struktur dan kandungan biasa boleh dibina, dengan itu mengelakkan berlakunya suntikan LDAP. javax.naming.ldap
BaseControl
Gunakan 360 Code Guard untuk mengesan kod yang telah dibaiki dan anda dapat melihat bahawa kecacatan "suntikan LDAP" tidak lagi wujud. Seperti yang ditunjukkan dalam Rajah 2: control
getEncodedValue()
data
ASN.1BER
Rajah 2: Hasil pengesanan selepas pembaikan
4. Cara mengelakkan suntikan LDAP
Punca suntikan LDAP ialah penyerang menggunakan aksara meta LDAP untuk mengubah suai maksud pertanyaan LDAP. Apabila membina penapis LDAP, pengaturcara perlu menjelaskan aksara yang harus dianggap sebagai penghuraian arahan dan aksara yang harus dianggap sebagai penghuraian data. Untuk mengelakkan penyerang daripada melanggar pelbagai situasi pratetap pengaturcara, kaedah senarai putih harus digunakan untuk memastikan nilai yang dikawal pengguna dalam pertanyaan LDAP datang sepenuhnya daripada set aksara yang telah ditetapkan dan tidak boleh mengandungi sebarang aksara meta LDAP. Jika keperluan julat berangka yang dikawal pengguna mesti mengandungi aksara meta LDAP, mekanisme pengekodan yang sepadan harus digunakan untuk mengelakkan maksud aksara meta ini dalam pertanyaan LDAP.
Terdapat juga aksara seperti (,),,*,/,NUL yang bukan sahaja perlu dirawat dengan garis miring ke belakang, tetapi juga perlu ditukar kepada nilai kod ASCII yang sepadan
- .
Atas ialah kandungan terperinci Bagaimana untuk memahami suntikan LDAP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!