23-09-2021, 15:03
SQL Injection nədir?
Bloq
SQL Injection nədir?
SQL Enjeksiyonu, 1998 -ci ildə kəşf edilməsinə baxmayaraq, hələ də təsirli olan və fərdlərin, təşkilatların və hətta ölkələrin kritik məlumatlarını oğurlamaq, dəyişdirmək və girov götürmək üçün istifadə edilməsinə baxmayaraq hələ də təsirli olan bir növ kiber təhlükədir.
SQL enjeksiyonunu anlamaq üçün SQL -in nə olduğunu xatırlamaq faydalı ola bilər.
SQL nədir?
SQL (Strukturlaşdırılmış Sorgu Dili) Strukturlaşdırılmış Sorgu Dili deməkdir. Bu dil əsasən əlaqəli verilənlər bazası ilə qarşılıqlı əlaqə üçün hazırlanmışdır. Daxil olmaq, məlumat əlavə etmək, verilənlər bazasını dəyişdirmək və ya tələb olunan məlumatları sorğu etmək üçün istifadə olunan SQL; Microsoft SQL Server, Oracle, IBM DB2 və MySQL kimi əlaqəli verilənlər bazası üçün əmr və nəzarət dilidir. Müasir veb inkişafında, əlaqəli verilənlər bazası, PHP, .NET, Java EE, Hibernate, SQLite kimi skript dillərində yazılmış veb tətbiqləri və məzmun idarəetmə sistemlərinin arxa tərəfində vacib bir qaynaqdır.
İstəyirsinizsə, SQL -in üstünlüklərindən, necə işlədiyindən və istifadə sahələrindən danışdıq . Bu nə edir? Məqaləmizə baxın.
SQL nədir?
SQL Injection və ya SQLi adlanan bir növ kiber hücum, veb səhifəni və veb tətbiq təhlükəsizlik tədbirlərini atlamağı mümkün edən bir hack üsuludur. Təcavüzkarı SQL enjeksiyonundan istifadə etməyə cəlb edir; kritik məlumat xəzinələrinin cazibəsidir. Bu hücum texnikasından istifadə edərək hakerlər SQL verilənlər bazasının məzmununu qaçıra, dəyişdirə və silə bilərlər.
OWASP TOP 10 -da uzun müddətdir mövcud olan ən köhnə zəifliklərdən biri olan SQL injection, müştəridən tətbiqə giriş məlumatları vasitəsilə bir SQL sorğusu daxil etməklə həyata keçirilir. SQL əmrləri, əvvəlcədən təyin edilmiş SQL əmrlərinin icrasına təsir edən məlumat təyyarəsi girişinə yeridilir.
Bir veb tətbiqetməsi və ya veb saytı Oracle, SQL Server və ya MySQL kimi SQL verilənlər bazasından istifadə edirsə, SQL injection hücumuna qarşı həssas ola bilər. SQL Enjeksiyonu, şirkətlər; Bütün verilənlər bazasından istifadə etmək üçün ən həssas təhdidlərdən biri olması ilə məşhurdur.
Hacker verilənlər bazasından məlumatları və ya cədvəlləri silməyə çalışdıqda, ehtiyat nüsxələri olsa belə, məlumatların silinməsi verilənlər bazası bərpa olunana qədər tətbiqin istifadəsinə təsir göstərəcək. Ayrıca, ehtiyat nüsxələrdə son daxil edilmiş məlumatlar ola bilməz.
Təcavüzkarlar, verilənlər bazasındakı məlumatları dəyişdirməklə, məsələn, maliyyə tətbiqindəki hesab qalıqlarını dəyişdirərək ciddi təhdidlər yaratmaq üçün SQL enjeksiyonundan istifadə edə bilərlər. Ən pisi, təcavüzkarlar bir tətbiqin verilənlər bazasına inzibati hüquqlar qazana bilər.
SQL injection hücumlarında ən çox görülən risk e -poçt ünvanlarının və girişlərin qaranlıq internetdə oğurlanması və satılmasıdır. Bu səbəbdən uğurlu SQL enjeksiyonu təkcə qurumlar üçün deyil, istifadəçilər və müştərilər üçün də böyük təhlükə yaradır.
SQL enjeksiyon hücumlarını necə həyata keçirmək olar?
Silmək, dəyişdirmək, yedekləmək, sistemə virus əlavə etmək, əməliyyatlara zərər vermək kimi məqsədlər üçün istifadə olunan SQL Enjeksiyonu, tətbiqin müştəri ucundan SQL sorğu girişi əlavə etmək və ya enjekte etməklə həyata keçirilir.
SQL enjeksiyonu üçün təcavüzkar bir veb tətbiqində və ya veb səhifəsində həssas bir giriş tapmalıdır.
SQL inyeksiyası, məlumatların etibarsız bir mənbədən proqrama daxil olması və bu məlumatların dinamik olaraq SQL sorğusu yaratmaq üçün istifadə edildiyi zaman baş verir. Cavab, təcavüzkarın verilənlər bazası arxitekturasını başa düşməsi və tətbiqin təhlükəsiz məlumatlarına daxil olması üçün lazımdır. Xüsusi hazırlanmış bir SQL əmri ilə hacker, verilənlər bazası quruluşu haqqında dəqiq bir fikir verən bir cavab əldə edərək verilənlər bazasındakı bütün məlumatlara giriş əldə edə bilər.
SQL nəzarət təyyarəsi ilə məlumat müstəvisini fərqləndirmədiyindən, təcavüzkar bir metakarakter (alt xətt _ kimi məlumat kimi şərh edilməyən bir xarakter) daxil edə bilər.
Hətta uşaqların da edə biləcəyi qədər sadə bir hücum növü olan SQL injection ilə, təcavüzkar, şifrə məlumatı tələb etmədən, əlavə etdikləri bir kodla identifikasiyanı aşa bilər.
SQL Enjeksiyon hücumlarının fərqli yollarını aşağıdakı kimi sıralaya bilərik:
İstifadəçi girişinə əsaslanan SQL enjeksiyonu : Veb tətbiqləri, istifadəçi girişi; emal üçün məlumat bazasına ötürən formalar vasitəsilə qəbul edir. Tətbiqlər bu girişləri dezinfeksiya etmədən qəbul edərsə, təcavüzkar forma sahələri vasitəsilə SQL ifadələrini yeriyə bilər və verilənlər bazasının məzmununu silə, kopyalaya və ya dəyişdirə bilər.
Çerezlərə əsaslanan SQL enjeksiyonu : Veb tətbiqləri tez-tez çerezləri quraşdırır və məlumatlarını verilənlər bazası əməliyyatlarının bir hissəsi olaraq istifadə edir. Bu cür SQL enjeksiyonu, çərəzləri verilənlər bazası sorğularını "zəhərləyəcək" şəkildə dəyişdirir. İstifadəçinin cihazına yerləşdirilən zərərli istifadəçi və ya zərərli proqram, gözlənilmədən SQL -i arxa verilənlər bazasına daxil etmək üçün çerezləri idarə edə bilər.
HTTP başlıqlarına əsaslanan SQL enjeksiyonu : HTTP başlıqları kimi server dəyişənləri SQL enjeksiyonu üçün də istifadə edilə bilər. Bir veb tətbiqi HTTP başlıqlarından girişi qəbul edərsə, təsadüfi SQL ilə saxta başlıqlar kodu verilənlər bazasına daxil edə bilər.
Kvadrat SQL enjeksiyonu : Ən mürəkkəb SQL enjeksiyon hücumlarıdır, çünki uzun müddət yuxuda qala bilərlər. Şərti olaraq SQL enjeksiyon hücumu, bir kontekstdə zərərsiz, digərində zərərli hesab edilə bilən zəhərli məlumatlar təqdim edir. Tərtibatçılar bütün tətbiq girişlərini təmizləsələr də, yenə də bu cür hücumlara qarşı həssas ola bilərlər.
SQL enjeksiyon növləri
Ən populyar hücum növü olan qrup içi SQL enjeksiyonları eyni ünsiyyət kanalını istifadə edir və iki şəkildə meydana gəlir:
•Səhv əsaslı: Səhv əsaslı SQL enjeksiyon texnikası tətbiq verilənlər bazası serverləri tərəfindən atılan səhv mesajlarına əsaslanır. Hansı sorğuların səhv mesajları aldığını sınayaraq, təcavüzkarlar verilənlər bazası quruluşuna əsaslanaraq hədəfli SQL enjeksiyonları yarada bilərlər.
•Birliyə əsaslanan: Bir tətbiq SQL enjeksiyonuna həssas olduqda və tətbiqin cavabları bir sorğu üçün nəticələr verdikdə, təcavüzkarlar proqram verilənlər bazası cədvəllərindən məlumat almaq üçün UNION açar sözündən istifadə edirlər.
Nəticəsiz (nəticəsiz) SQL injection, Blind SQL injection hücumları kimi tanınır. Bu hücumda, bir yük göndərdikdən sonra, təcavüzkar verilənlər bazasının məlumat quruluşunu təyin etmək üçün davranışları və cavabları müşahidə edir. İki növdə baş verir:
•Mantıksal əsaslı : Təcavüzkarlar, tətbiqin TRUE və ya FALSE-in fərqli nəticələrini qaytarmağa məcbur edən SQL sorğuları göndərərək müəyyən yüklərin qanuni nəticələr verdiyini deyə bilərlər.
•Zamana əsaslanan : Zaman əsaslı adlandıra biləcəyimiz bu üsul, verilənlər bazasından cavab verməzdən əvvəl müəyyən bir müddət gözləməsini xahiş edən SQL sorğuları göndərir. Tətbiq ümumi səhv mesajları qaytardıqda, vaxta əsaslanan SQL injection hücumu tez-tez istifadə olunur. Bu texnika verilənlər bazasını müəyyən bir müddət gözləməyə məcbur edir. Cavab müddəti, təcavüzkarın sorğunu DOĞRU və ya YANLIŞ olaraq təyin etməsinə kömək edir.
Hər iki halda, nəticəsiz SQL enjeksiyon hücum üsulları, təcavüzkarların məlumat xarakterini xarakterə görə saymalı olduqlarını nəzərə alaraq olduqca qorxuncdur.
Qrupdan kənar SQL enjeksiyon hücumları ən az istifadə olunan SQL enjeksiyon texnikasıdır. Qrupdan kənar SQL enjeksiyon hücumu tətbiqdən hər hansı bir protokol (HTTP, DNS və ya SMB) vasitəsilə məlumat ötürməsini xahiş edir.
SQL enjeksiyon zəifliklərini necə aşkar etmək olar?
SQLi zəifliklərini aşkar etmək üçün tətbiqinizə və ya veb saytınıza hücumlar etməyiniz məsləhətdir. Bu boşluqları tapmaq üçün iki üsul, əl testi və avtomatlaşdırılmış test istifadə olunur. Manual test, tətbiqin hazırlanması zamanı SQL injection zəifliyini aşkar etməyə kömək edən testlər toplusudur.
SQLMap kimi avtomatlaşdırılmış testlər üçün müxtəlif vasitələr mövcuddur. Tipik olaraq, bu vasitələr saytınızı araşdırır və istifadə olunan verilənlər bazasının növünü təyin etmək üçün sorğular yaradır. Bəzi aşkar edilmiş zəiflikləri aradan qaldırmağa kömək edə biləcək bir səhv düzəltmə xüsusiyyəti də var.
SQL enjeksiyonundan necə qorunmaq olar?
Bildiyiniz kimi, versiyalar və uzantılar müntəzəm olaraq təkmilləşdirilməlidir. Köhnə versiyalar və ya kod çox həssasdır və tətbiqinizin bütövlüyünü qorumaya bilər. Köhnə kodu nəzərdən keçirmək və zəifliklərdən qaçmaq üçün kodun yamaqlı və təkmilləşdirilmiş versiyalarını işlətmək xoşagəlməz sürprizlərin qarşısını almaq üçün çox vacibdir.
SQL enjeksiyon hücumunun qarşısının alınmasında ilk addım hansı tətbiqlərin həssas olduğunu müəyyən etməkdir. Həqiqət budur ki, SQL verilənlər bazası ilə qarşılıqlı əlaqədə olan hər hansı bir veb sayt risk altındadır.
SQL enjeksiyonunun qarşısını almaq üçün ya dinamik sorğulara icazə verməməli, ya da zərərli SQL ehtiva edən istifadəçi tərəfindən verilən girişlərin sorğunun məntiqinə təsir etməsinə mane olmalısınız.
Texniki olaraq, SQL enjeksiyon hücumunun qarşısını almağın yeganə yolu, potensial zərərli kodu süzmək üçün istifadəçinin daxil etdiyi girişi izləmək və təmizləməkdir. Veb tətbiqetməsinin təhlükəsizlik duvarı (WAF) tam olaraq bunu edir. İstifadəçilərin veb tətbiqinə daxil etdikləri bütün məlumatları təhlil edir və şübhəli kodlarla uyğunluqlar tapır. Proqram və ya cihaz əsaslı WAF, potensial təhlükəli veb sorğularını süzgəcdən keçirərkən faydalıdır. WAF -ın SQL enjeksiyonundan müdafiə etməsi, verilənlər bazasına sızmaq cəhdlərinin çoxunu alt -üst edə bilər.
Əlavə olaraq, SQL enjeksiyon hücumlarının qarşısını almaq üçün ən məşhur tövsiyələri aşağıdakı kimi sıralaya bilərik:
•Parametrli sorğular: Parametrləşdirilmiş sorğu, parametrləri yer tutucu kimi istifadə edən və icra zamanı təmin edilən bir sorğudur. Bu sorğu növündə parametrlərin məlumat növləri əvvəlcədən təyin olunur və bəzi hallarda standart dəyərlər də təyin edilir. Bunu etmək SQL enjeksiyon sorğularının uğursuz olmasına səbəb olacaq.
•Saxlanılan Prosedurlar : Saxlanan prosedurlar, tətbiqdən çağırılan verilənlər bazasında təyin olunan və saxlanılan SQL ifadələridir. Saxlanılan prosedurlar, heç bir dinamik SQL istehsalını ehtiva etməyən parametrləri olan əvvəlcədən qurulmuş SQL ifadələridir. Saxlanılan prosedurlar olaraq da adlandırılan bu prosedurları qurmaq üçün, inkişaf etdiricilər tələb olunan girişlər üçün parametrləri olan SQL ifadələrini yaratmalıdırlar. Saxlanılan prosedurlar və parametrləşdirilmiş sorğular arasındakı fərq, saxlanılan prosedurların verilənlər bazasında müəyyən edilməsi və saxlanılması, lakin tətbiqdən çağırılmasıdır. Həmçinin, saxlanılan prosedurlar bəzi DBMS -lərdə icra hüquqlarını tələb etdiyindən (standart olaraq mövcud deyil) istifadəçi girişi verməkdənsə, minimum imtiyazlara malik ayrı bir hesab yaratmaq vacibdir.
•İzin Verilən Siyahı Giriş Doğrulaması (AllowList Giriş Giriş Doğrulaması): İcazə verilən siyahı girişinin yoxlanılması, xarici girişlər məlumdur, bir sıra girişləri yoxlayır və girişə uyğun gəlmir. Bu yalnız bağlayıcı dəyişənlərə icazə verilməyən hallarda istifadə edilməlidir. Siyahı girişinin təsdiqlənməsinə icazə vermək, sorğuya keçməzdən əvvəl girişi aşkar etmək üçün bir yedek seçim ola bilər.
•İstifadəçi tərəfindən təmin edilən bütün girişlərdən çəkinmək: Bütün SQL enjeksiyonlarının qarşısını ala bilmədiyi üçün bu metodu yalnız əvvəlki variantlar mümkün olmadıqda istifadə etməlisiniz. Bu çox verilənlər bazası üçün xüsusi bir tətbiqdir. Hər bir DBMS, xarakterdən qaçma sxemini dəstəkləyir. Düzgün sxemdən istifadə etməklə bütün istifadəçi girişlərinin qarşısı alınarsa, DBMS, inkişaf etdiricilər tərəfindən yazılan giriş və SQL kodunu ayırd edə biləcək.
•Ən az imtiyazlar:Ən az imtiyaz SQL enjeksiyonundan müdafiə deyil, hər hansı bir hücumun edə biləcəyi ziyanı məhdudlaşdırmağın bir yoludur. Ən az imtiyaz, tətbiqinizin verilənlər bazasında məhdudiyyətsiz gücə malik olmaması deməkdir. Bir təcavüzkar giriş əldə edərsə, edə biləcəkləri zərər məhdud olacaq. Tətbiqlərin kök girişi və ya idarəçi imtiyazı olan bir hesabdan istifadə edərək verilənlər bazasına qoşulmasının qarşısını almaq təsirli bir qorumadır. Tətbiq hesablarının yalnız ehtiyac duyduqları qədər icazə almasını təmin etmək lazımdır. Yalnız lazım olan giriş üçün hesablara icazə verməyiniz tövsiyə olunur. Məsələn, bir hesabın yalnız oxumaq üçün girişə ehtiyacı varsa, onun yalnız ehtiyac duyduğu cədvəllərə (və ya hətta cədvəlin müəyyən hissələrinə) yalnız oxumaq üçün daxil olmasını təmin etməlisiniz. bacarsan, verilənlər bazası hesablarına giriş yaratmaq və ya silməkdən çəkinin. Hər bir istifadəçinin/tətbiqin ayrı bir hesabı olmalıdır. Verilənlər bazası idarəetmə sisteminin (DBMS) işlədiyi əməliyyat sistemi hesabının imtiyazlarını nəzərdən keçirməyiniz də tövsiyə olunur.
SQL enjeksiyon pozuntuları 1998 -ci ildə SQL enjeksiyonlarının tətbiqindən bəri kibertəhlükəsizlik sahəsində ciddi irəliləyişlərə baxmayaraq, hələ də böyük bir narahatlıq kimi görünür. Əslində, məlumdur ki, son iki ildə SQLi hücumları proqram təminatına edilən bütün hücumların təxminən üçdə ikisini təşkil edir - tətbiq təhlükəsizliyi. Bilinən əsas SQL injection pozuntularını aşağıdakı kimi sıralaya bilərik:
•GhostShell: 2012 -ci ilin oktyabr ayında, hackerlər SQL injection istifadə edərək 53 universiteti hədəf aldılar, nəticədə tələbələrin, müəllimlərin və işçilərin 36.000 şəxsi qeydləri oğurlandı və sərbəst buraxıldı.
•7-Eleven: 2009-cu ilin Avqust ayında, bir çox şirkətdə, xüsusən də 7-Eleven pərakəndə satış şəbəkəsində SQL enjeksiyonundan istifadə edən bir hücumda 130 milyon kredit kartı nömrəsi oğurlandı.
•HBGary: 2011 -ci ilin fevral ayında HBGary CEO -nun Anonim üzvlərinin adlarına sahib olduğunu bildirməsinə cavab olaraq, Anonymous ilə əlaqəli hakerlər şirkətin veb saytını çökdürmək üçün SQL Enjeksiyonundan istifadə etdilər.
•WordPress Eklentileri: İspan təhlükəsizlik tədqiqatçıları Jacinto Sergio Castillo Solana və Manuel Garcia Cardenas, 4.500 -ü SQLi olan 84.000 -dən çox plagində 5.000 -dən çox zəiflik aşkar etdilər.
•Səs Komandası SQL Enjeksiyonu : 2019 -cu ildə ortaya çıxan bu yeni SQLi hücumu həyata keçirmək üçün səsli əmrlərə əsaslanır. Bu, Alexa -nın qorunmayan bir tətbiqdə sözləri və rəqəmləri tərcümə edərək istismar edilə biləcəyinin göstəricisidir.
•Tesla zəifliyi : 2014 -cü ildə təhlükəsizlik tədqiqatçıları Tesla'nın veb saytını poza bildiklərini, inzibati imtiyazlar əldə etdiklərini və SQL injection istifadə edərək istifadəçi məlumatlarını oğurladıqlarını açıqladılar.
•Cisco zəifliyi : 2018 -ci ildə Cisco Prime -da bir SQLi zəifliyi aşkar edildi və Cisco bu zəifliyi aradan qaldırdı.
•Fortnite zəifliyi: 350 milyondan çox istifadəçisi olan onlayn oyun Fortnite -də, 2019 -cu ildə təcavüzkarların istifadəçi hesablarına daxil olmasına imkan verə biləcək bir SQLi zəifliyi aşkar edildi və düzəldildi.
Xülasə
SQL enjeksiyonu, veb tətbiqlərinə ən çox yayılmış hücumlardan biridir. Uğurlu bir SQL injection hücumu, e -poçt, istifadəçi adı, parol və kredit kartı məlumatları kimi həssas məlumatları oxuya, dəyişdirə və ya silə bilər. SQLi, təcavüzkarın məlumat bazanızı korlamasına və ya məhv etməsinə səbəb olaraq icazəsiz giriş əldə etməsinə icazə verə bilər.
SQL Enjeksiyon açığını aşkar etmək və sistemlərinizin təhlükəsizliyini təmin etmək üçün dərhal tədbir görmək vacibdir. SQL Injection nədir, bir çox təcavüzkar verilənlər bazasına sızmaq üçün zəif kod səhvlərindən istifadə etməyi gözləyir. Kodlarınızı nəzərdən keçirməyiniz və güclü tətbiq təhlükəsizlik həllərinə müraciət etməyiniz tövsiyə olunur.