Bosh sahifa Wiki Command Injection

Command Injection

Command Injection — ishonchsiz kiritma operatsion tizim buyruq interpretatoriga kod sifatida yetib borishi natijasida hujumchi dastur mo‘ljallamagan buyruqlarni bajara oladigan zaiflikdir. Muammo foydalanuvchi matnini shell buyrug‘i satriga biriktirishda, shuningdek fayl nomi yoki parametrni buyruq sintaksisi sifatida qayta talqin qilishda yuz beradi. Oqibat xizmat hisobining vakolatlari doirasida ma’lumot o‘qish, o‘zgartirish yoki tizimni buzish bo‘lishi mumkin.

Zaiflikning kelib chiqishi

Shell bo‘shliq, ajratgich, yo‘naltirish va almashtirish belgilariga maxsus ma’no beradi. Dastur tashqi kiritmani matnli buyruqqa qo‘shib, keyin shell orqali bajarsa, ma’lumot bilan sintaksis chegarasi yo‘qoladi. Faqat HTTP parametrlari emas, fayl metama’lumoti, ma’lumotlar bazasidan qaytgan qiymat, muhit o‘zgaruvchisi yoki boshqa xizmat javobi ham ishonchsiz manba bo‘lishi mumkin.

Command Injection shell ishlatilmagan holatda ham buyruq argumentlari noto‘g‘ri tuzilsa namoyon bo‘lishi mumkin. Ayrim dasturlar defis bilan boshlangan fayl nomini parametr sifatida qabul qiladi yoki argument ichidagi o‘z maxsus tilini talqin qiladi. Demak, shell escaping barcha holatni hal qilmaydi; chaqirilayotgan dastur interfeysi ham tahlil qilinadi.

Oldini olish

Eng ishonchli yondashuv shellni umuman chaqirmaslikdir. Jarayon yaratish API’iga bajariladigan fayl va argumentlar alohida ro‘yxat sifatida beriladi. Bu ma’lumotni shell sintaksisi sifatida qayta tahlil qilishni chetlab o‘tadi. Fayl ko‘chirish, arxivlash yoki tarmoq chaqirig‘i uchun tilning ichki kutubxonasi mavjud bo‘lsa, tashqi buyruq o‘rniga shu API ishlatiladi.

Kiritma erkin matn bo‘lishi shart bo‘lmasa, ruxsat etilgan qiymatlar ro‘yxati qo‘llanadi. Masalan, foydalanuvchi to‘liq buyruq emas, oldindan belgilangan amal identifikatorini tanlaydi. Fayl yo‘llari kanoniklashtiriladi, kutilgan ildiz ichida qolishi tekshiriladi va argumentlar soni hamda uzunligi chegaralanadi. Escaping zarur bo‘lgan meros tizimida aynan ishlatilayotgan shell va platformaga mos, sinovdan o‘tgan kutubxona tanlanadi; qo‘lda belgilarni almashtirish yetarli himoya emas.

Ta’sirni cheklash va aniqlash

Jarayon least privilege tamoyili bilan, alohida xizmat hisobi va minimal fayl ruxsatlarida ishlaydi. Konteyner yoki sandbox qo‘shimcha qatlam beradi, lekin kirish zaifligini tuzatish o‘rnini bosmaydi. Keraksiz tarmoq chiqishlari, executable fayllar va maxfiy ma’lumotlarga kirish cheklanadi. Timeout, resurs limiti va qat’iy ish katalogi ham zarar ko‘lamini kamaytiradi.

Kod ko‘rigida shell chaqiruvlari va matn biriktirish nuqtalari alohida tekshiriladi. Statik tahlil kiritma manbasidan xavfli bajarish nuqtasigacha bo‘lgan oqimni topishi mumkin. Xavfsizlik sinovlari ruxsat etilgan chegaradan tashqari kiritmalar buyruqqa aylanmasligini tasdiqlaydi. Jurnalda amal turi va natija qayd etiladi, ammo parol, token va foydalanuvchining to‘liq maxfiy matni saqlanmaydi.

Arxitektura chegarasi

Buyruq bajaruvchi xizmatni umumiy web jarayonidan ajratish xavfni kamaytiradi. API yuqori darajali, qat’iy tiplanadigan operatsiyalarni qabul qiladi va ularni server tomondagi aniq argumentlarga xaritalaydi. Har bir operatsiya uchun ruxsat, ish katalogi, bajariladigan faylning mutlaq yo‘li va maksimal chiqish hajmi oldindan belgilanadi. Standart chiqish ham ishonchsiz ma’lumot sifatida ko‘riladi: uni HTMLga kiritishda kontekstga mos kodlash talab qilinadi. Jarayon meros qilib oladigan muhit o‘zgaruvchilari tozalanadi, chunki PATH yoki kutubxona yuklash sozlamalari kutilmagan executable tanlanishiga ta’sir qilishi mumkin.

Windows va Unix jarayon yaratishida argument quoting qoidalari bir xil emas. Kross-platform kutubxona argv semantikasini to‘g‘ri moslashtirishi kerak; bir platformada xavfsiz ko‘ringan qo‘lda quoting boshqasida argument chegarasini buzishi mumkin.

Bog‘liq tushunchalar

Input validation, Shell, Argument injection, Least privilege, Sandbox, Static analysis, Secure coding