HTTP Server Remote Code Execution (RCE)

Uzaqdan kod icrası (RCE) zərərli hakerə tərtibatçının həmin tətbiqi yazdığı proqramlaşdırma dilində ixtiyari kodu icra etməyə imkan verən zəiflikdir. Uzaqdan idarəetmə termini o deməkdir ki, təcavüzkar bunu tətbiqi işlədən sistemdən fərqli bir yerdən edə bilər. Uzaqdan kodun icrası həmçinin kodun yeridilməsiuzaqdan kodun qiymətləndirilməsi kimi tanınır .

Kodun yeridilməsi/uzaqdan kodun icrası necə işləyir?

RCE zəiflikləri istənilən növ kompüter proqram təminatında, demək olar ki, bütün proqramlaşdırma dillərində və istənilən platformada görünə bilər. RCE boşluqları var, məsələn, C#-da yazılmış müstəqil Windows proqramlarında, PHP-də yazılmış veb proqramlar və API-lərdə, Java-da yazılmış mobil proqramlarda və hətta əməliyyat sistemlərinin özlərində.

Digər zəifliklər uzaqdan ixtiyari kodun icrasına səbəb ola bilər. Məsələn, C/C++ kimi dillərdə bufer daşması zəiflikləri təcavüzkara tətbiq daxilində ixtiyari kodu icra etməyə imkan verə bilər. Silsiləsizləşdirmə zəiflikləri həmçinin təcavüzkarlara sıradan çıxarıldıqda proqramın icra etdiyi kodu ehtiva edən faydalı yük təmin etməyə imkan verə bilər. Həssas proqramda kodun uzaqdan icrasına gətirib çıxaran SQL inyeksiyası və saytlararası skript (XSS) zəifliklərinin belə məlum halları var .

Bəzi RCE hücumları gecikmədən sonra baş verə bilər. Məsələn, proqram əvvəlcə RCE faydalı yükünü konfiqurasiya faylında saxlaya bilər və onu daha sonra, bəlkə də bir neçə dəfə yerinə yetirə bilər. Bu tip RCE zəifliyi saxlanılan RCE adlanır .

Qeyd edək ki, RCE/kod inyeksiyası çox vaxt OS əmr inyeksiyası ilə qarışdırılır . RCE vəziyyətində icra edilən kod proqramın dilindədir və proqram kontekstində işləyir. ƏS əmrinin inyeksiyası üçün təcavüzkar əməliyyat sistemi əmrini yerinə yetirir. Həmçinin, qeyd edin ki, kod yeridilməsi termini OWASP tərəfindən seçilsə və CWE-94 -də müəyyən edilsə də, uzaqdan kod icrası termini daha geniş yayılmışdır.

Veb tətbiqlərində RCE zəiflikləri

Veb tərtibatında istifadə olunan hər bir ümumi proqramlaşdırma dili, işləmə zamanı həmin dildə kodu qiymətləndirmək (icra etmək) funksiyalarına malikdir. Tərtibatçılar veb proqramlarında bu cür funksiyalardan istifadə etdikdə, veb server tərəfində uzaqdan kod icrası imkanını təqdim edirlər. PHP və JavaScript-də belə bir funksiyaya misal evaldır .

Tərtibatçı eval kimi funksiyaya təmizlənməmiş istifadəçi daxiletməsini emal etməyə icazə verərsə, zərərli təcavüzkar onu istifadəçi girişinə daxil etməklə kodu yeridə bilər. İstifadəçi tərəfindən idarə olunan daxiletmələrə nümunələrə veb formalardakı mətn, HTTP başlıqlarının məzmunu, istifadəçi tərəfindən yüklənmiş fayllar və ya hətta dəyişdirilmiş kukilər daxildir.

Veb uzaqdan kod icra hücumunun nümunəsi

Aşağıda kod inyeksiya zəiflikləri (RCE) və bu kodu daxil edən tətbiqlərə kod inyeksiya hücumu vektoru ilə PHP mənbə kodunun sadə nümunəsi verilmişdir.

Zəif kod

<?php eval("echo ".$_GET["user"].";"); ?>

kopyalayın

Tərtibatçı güman edir ki, istifadəçi yalnız URL-nin parametri kimi etibarlı istifadəçi adı təqdim edəcək:

http://www.example.com/index.php?user=admin

Nəticədə, proqram parametr dəyərini kod kimi qiymətləndirir:

echo admin;

kopyalayın

və istifadəçinin adını çap edir.

Hücum vektoru

Təcavüzkar nöqtəli vergüldən sonra faydalı yükü daxil edərək zərərli kodu yeridə bilər. Nöqtəli vergül qiymətləndirmə funksiyası prosesini PHP-də yeni təlimat kimi faydalı yükün qalan hissəsinə çevirir:

http://www.example.com/index.php?user=admin;phpinfo();

Nəticədə, qiymətləndirmə funksiyası kodu yerinə yetirir:

echo admin;
phpinfo();

kopyalayın

Veb RCE hücumunun potensial nəticələri

Uzaqdan kodun icrası ən ciddi zəifliklərdən biridir, çünki RCE kiberhücumunun nəticələri, xüsusən də veb tətbiqləri vəziyyətində praktiki olaraq qeyri-məhduddur.

Təcavüzkarların veb RCE zəifliklərindən istifadə edərək izləmələrinin ən ümumi yolu veb qabıqları quraşdırmaqdır . Belə bir RCE istismar yükü, sistem əmrlərini yerinə yetirmək üçün təcavüzkarın hədəf maşında qabıq əldə etməsinə imkan verən kodu ehtiva edir. Qabıq tərs qabıq ola bilər ki , bu da təcavüzkarın əksər firewalllardan qaçmasına imkan verir.

Veb qabığı, adətən məhdud olan veb server ilə eyni imtiyazlara malikdir. Bununla belə, təcavüzkar uzaq maşındakı qabığa daxil olduqdan sonra onlar digər zəiflikləri tapmağa cəhd edə və kök girişi əldə etmək üçün imtiyazların yüksəldilməsindən (imtiyazların yüksəldilməsi) istifadə edə bilərlər.

Müvəffəqiyyətli olarsa, təcavüzkar hədəf maşına məhdudiyyətsiz giriş əldə edəcək və aşağıdakı ümumi hücum növlərindən hər hansı birini izləyə bilər:

  • Ransomware və ya digər zərərli proqram: Təcavüzkar maşında ransomware agenti quraşdıra bilər, o, daha sonra qurbana məxsus digər aktivlərə yayılmaq üçün başqa üsullardan istifadə edəcək.
  • Kriptovalyuta mədənləri: Təcavüzkarlar tez-tez kriptovalyuta madencilerini təhlükə altında olan maşınlara quraşdırırlar. Mining kibercinayətkarları daha zərərli fəaliyyətlər üçün maliyyə təmin etmək üçün hesablama resurslarınızı sərf edir.
  • Həssas məlumat oğurluğu: Təcavüzkar kredit kartı nömrələri kimi həssas məlumatları ehtiva edən SQL verilənlər bazası serverlərinə daxil olmaq üçün imtiyazların artırılmasından istifadə edə bilər.

Məlum RCE zəifliklərinin nümunələri

  • Apache Log4j 2.x-də CVE-2021–44228 (Log4Shell) (ardından CVE-2021–45046 və CVE-2021–45105 xidmət zəifliyi ilə) qeyri-veb tətbiqində RCE nümunəsidir. Təcavüzkardan hər hansı autentifikasiya tələb etməyən bu Log4j zəifliyi bir çox Log4j versiyasına təsir edir və xüsusi olaraq bu məşhur açıq mənbəli giriş kitabxanasının JndiLookup sinfində yerləşir. Steam, Apple iCloud, Minecraft və s. daxil olmaqla bir çox məşhur proqram və xidmətlərin əvvəlcə buna həssas olduğu aşkar edildi.
  • Apple iOS, macOS, watchOS və Safari-də CVE-2021–1844 əməliyyat sistemi modulunda RCE-nin başqa bir nümunəsidir. Əgər qurban təcavüzkar tərəfindən idarə olunan URL-i ziyarət etmək üçün həssas cihazdan istifadə edərsə, əməliyyat sistemi həmin cihazda zərərli yükü yerinə yetirəcək.
  • Microsoft Windows NFSv3-də CVE-2020–17051 əməliyyat sistemi modulunda RCE nümunəsidir. Təcavüzkar həssas NFS serverinə qoşula və hədəf son nöqtənin yerinə yetirəcəyi faydalı yük göndərə bilər.
  • WordPress 5.0.0-da CVE-2019–8942 populyar veb proqramında RCE nümunəsidir. Təcavüzkar öz Exif metadatasında PHP kodu olan xüsusi hazırlanmış şəkil faylını yükləyərək WordPress daxilində ixtiyari kodu icra edə bilər.

RCE zəifliklərini necə aşkar etmək olar?

RCE zəifliklərini aşkar etməyin ən yaxşı yolu onların artıq məlum olub-olmamasından asılıdır.

  • Yalnız kommersiya və ya açıq mənbəli proqram təminatından istifadə edirsinizsə və öz proqram təminatınızı inkişaf etdirmirsinizsə, istifadə etdiyiniz sistemin və ya proqramın dəqiq versiyasını müəyyən etmək kifayət ola bilər. Müəyyən edilmiş versiya RCE-yə həssasdırsa, proqram təminatınızın həssas olduğunu güman edə bilərsiniz. Siz versiyanı əl ilə müəyyən edə və ya veb proqramlar üçün proqram tərkibinin təhlili (SCA) həlli və ya şəbəkə sistemləri və tətbiqləri üçün şəbəkə skaneri kimi uyğun təhlükəsizlik alətindən istifadə edə bilərsiniz.
  • Əgər siz öz proqram təminatınızı inkişaf etdirirsinizsə və ya məlum tətbiqlərdə əvvəllər məlum olmayan RCE zəifliklərini (sıfır günlər) tapmaq imkanı istəyirsinizsə, onun mövcudluğuna əmin olmaq üçün RCE zəifliyindən uğurla istifadə etməyi bacarmalısınız. Bunun üçün ya təhlükəsizlik tədqiqatçılarının köməyi ilə əllə nüfuzetmə testinin aparılması, ya da veb zəifliklərindən avtomatik istifadə edə bilən zəiflik skaneri alətindən istifadə edilməsi tələb olunur. Bu cür alətlərə misal olaraq Invicti və Acunetix by Invicti ola bilər . Bu üsuldan hətta məlum zəifliklər üçün də istifadə etməyi tövsiyə edirik.

Veb tətbiqlərində RCE boşluqlarının qarşısını necə almaq olar?

Veb tətbiqlərində RCE zəifliklərinin qarşısını almağın yeganə tam effektiv yolu etibarsız məlumatlarla RCE-yə həssas olan dil funksiyalarından və konstruksiyalardan istifadə etməməkdir. Məsələn, PHP/JavaScript-də qiymətləndirmə funksiyası.

Əgər siz qiymətləndirmə funksiyasından etibarsız məlumatlarla (birbaşa və ya dolayı istifadəçi daxiletməsi) istifadə etməlisinizsə və istifadəçi daxiletməsini qiymətləndirmədən tətbiq məqsədinizə nail olmaq üçün heç bir yol yoxdursa, kodunuzun uzaqdan kod icrası hücumlarına məruz qalması riskini qəbul etməlisiniz. Ən yaxşı giriş sanitarizasiyası ilə belə, təcavüzkarlar həmişə keçmək üçün bir yol tapa bilərlər.

Bu cür hallarda RCE zəifliklərindən tam qaça bilməsəniz də, ağ siyahılar (qara siyahılar deyil) əsasında düzgün giriş/çıxış məlumatlarının yoxlanılması və sanitarizasiyadan istifadə etməklə hücum riskini minimuma endirə və onların nəticələrini azalda bilərsiniz.

RCE hücumlarını necə azaltmaq olar?

RCE hücumlarını azaltmaq üçün mümkün üsullar həssas proqram təminatının növündən asılı olaraq dəyişəcək:

  • Veb proqramları kimi fərdi proqram təminatı vəziyyətində, RCE-ni daimi olaraq azaltmağın yeganə yolu, tətbiq kodunuzdan istifadəçi tərəfindən idarə olunan girişi emal edən qiymətləndirmə funksiyalarını aradan qaldırmaqdır.
  • Üçüncü tərəf proqram təminatında məlum RCE-lər halında, siz düzəliş üçün ən son təhlükəsizlik məsləhətlərini yoxlamalı və həssas olmayan versiyaya (adətən ən son versiya) yeniləməlisiniz.
  • Üçüncü tərəf proqram təminatında sıfır günlük RCE-lər vəziyyətində, yumşaltmaq üçün yalnız müvəqqəti WAF (veb tətbiqi təhlükəsizlik duvarı) qaydalarına etibar edə bilərsiniz. Bununla belə, bu, yalnız RCE-nin istismarını çətinləşdirir və problemin əsas səbəbini aradan qaldırmır.

Məqalə xoşunuza gəldi? Gələcək yazı üçün hər hansı bir sualınız və ya təklifiniz varsa, mehran@hematyar.net ünvanında və ya whatsapp da sizdən eşitmək istərdim .bu yazıdan yararlandığınız halda mənbəni qeyd etməyiniz xahiş olunur.
Author: Ph.D.c Mehran Hematyar(Hemmatyar -مهران همت یار )

--

--

Mehran Hematyar (Hemmatyar-Ahandoost)

Senior lecturer in UNEC, BEU, BANM, AZTU. Ph.D.c Mehran Hematyar Cybernetics Co-Founder-Mikrotik Official Trainer