Veb-sayt xavfsizligining halokatli gunohlari: yil davomida skanerning zaiflik statistikasidan nimani o'rgandik

Taxminan bir yil oldin biz DataLine-da ishga tushdik xizmat ko'rsatish IT ilovalaridagi zaifliklarni qidirish va tahlil qilish. Xizmat Qualys bulutli yechimiga asoslangan bo'lib, uning ishlashi haqida allaqachon aytdik. Yechim bilan ishlagan bir yil davomida biz turli saytlarni 291 ta skanerdan o‘tkazdik va veb-ilovalardagi umumiy zaifliklar bo‘yicha statistik ma’lumotlarni to‘pladik. 

Quyidagi maqolada men sizga veb-sayt xavfsizligidagi qanday teshiklar turli darajadagi tanqidiylik ortida yashiringanligini aniq ko'rsataman. Keling, skaner qanday zaifliklarni tez-tez topayotganini, nima uchun ular paydo bo'lishi mumkinligini va o'zingizni qanday himoya qilishni ko'rib chiqaylik. 

Veb-sayt xavfsizligining halokatli gunohlari: yil davomida skanerning zaiflik statistikasidan nimani o'rgandik

Qualys veb-ilovaning barcha zaifliklarini uchta muhim darajaga ajratadi: past, o'rta va yuqori. Agar siz "jiddiylik" bo'yicha taqsimotga qarasangiz, hamma narsa unchalik yomon emasga o'xshaydi. Kritiklik darajasi yuqori bo'lgan kam sonli zaifliklar mavjud, asosan ularning barchasi tanqidiy emas: 

Veb-sayt xavfsizligining halokatli gunohlari: yil davomida skanerning zaiflik statistikasidan nimani o'rgandik

Ammo tanqidiy emas degani zararsiz degani emas. Bundan tashqari, ular jiddiy zarar etkazishi mumkin. 

Eng muhim "tanqidiy" zaifliklar

  1. Aralash kontent zaifliklari.

    Veb-sayt xavfsizligi uchun standart HTTPS protokoli orqali mijoz va server o'rtasida ma'lumotlarni uzatish bo'lib, u shifrlashni qo'llab-quvvatlaydi va ma'lumotni ushlab qolishdan himoya qiladi. 

    Ba'zi saytlar foydalanadi aralash tarkib: Ba'zi ma'lumotlar xavfsiz HTTP protokoli orqali uzatiladi. Bu ko'pincha shunday etkaziladi passiv tarkib - faqat saytning ko'rinishiga ta'sir qiladigan ma'lumotlar: rasmlar, CSS uslublari. Ammo ba'zida u shunday uzatiladi faol tarkib: sayt xatti-harakatlarini boshqaradigan skriptlar. Bunday holda, maxsus dasturiy ta'minotdan foydalanib, siz serverdan kelayotgan faol tarkibli ma'lumotlarni tahlil qilishingiz, javoblaringizni tezda o'zgartirishingiz va mashinani yaratuvchilar tomonidan mo'ljallanmagan tarzda ishlashiga imkon berishingiz mumkin. 

    Brauzerlarning yangi versiyalari foydalanuvchilarni aralash tarkibli saytlar xavfli ekanligi haqida ogohlantiradi va kontentni bloklaydi. Veb-sayt ishlab chiquvchilari konsolda brauzer ogohlantirishlarini ham oladi. Masalan, u shunday ko'rinadi Firefox

    Veb-sayt xavfsizligining halokatli gunohlari: yil davomida skanerning zaiflik statistikasidan nimani o'rgandik

    Nima uchun xavfli?: Buzg'unchilar foydalanuvchi ma'lumotlarini ushlab qolish, skriptlarni almashtirish va uning nomidan saytga so'rovlar yuborish uchun xavfsiz protokoldan foydalanadilar. Saytga tashrif buyuruvchi ma'lumotlarni kiritmagan bo'lsa ham, bu uni himoya qilmaydi fishing - firibgarlik usullaridan foydalangan holda maxfiy ma'lumotlarni olish. Misol uchun, skriptdan foydalanib, foydalanuvchini foydalanuvchiga tanish bo'lgan xavfli saytga yo'naltirishingiz mumkin. Ba'zi hollarda, zararli sayt asl nusxadan ham yaxshiroq ko'rinadi va foydalanuvchi shaklni o'zi to'ldirishi va maxfiy ma'lumotlarni taqdim etishi mumkin. 

    Veb-ishlab chiquvchi nimani eslashi kerak: Sayt ma'muri SSL/TLS sertifikatini o'rnatgan va sozlagan bo'lsa ham, inson xatosi tufayli zaiflik paydo bo'lishi mumkin. Misol uchun, agar sahifalardan birida siz nisbiy havolani emas, balki http-dan mutlaq havolani qo'ygan bo'lsangiz va qo'shimcha ravishda siz http-dan https-ga yo'naltirishni o'rnatmagan bo'lsangiz. 

    Brauzer yordamida saytdagi aralash tarkibni aniqlashingiz mumkin: sahifaning manba kodini qidiring, ishlab chiquvchi konsolida bildirishnomalarni o'qing. Biroq, ishlab chiquvchi kod bilan uzoq vaqt va zerikarli ishlashga majbur bo'ladi. Avtomatlashtirilgan tahlil vositalari yordamida jarayonni tezlashtirishingiz mumkin, masalan: SSL tekshiring, bepul Lighthouse dasturi yoki pullik dasturiy ta'minot Screaming Frog SEO Spider.

    Shuningdek, zaiflik meros bo'lib qolgan eski kod - kod bilan bog'liq muammolar tufayli paydo bo'lishi mumkin. Misol uchun, agar ba'zi sahifalar eski shablon yordamida yaratilgan bo'lsa, bu saytlarning https-ga o'tishini hisobga olmaydi.    

  2. "Faqat HTTP" va "xavfsiz" bayroqlarisiz cookie fayllari.

    "Faqat HTTP" atributi cookie-fayllarni tajovuzkorlar foydalanuvchi ma'lumotlarini o'g'irlash uchun foydalanadigan skriptlar tomonidan qayta ishlashdan himoya qiladi. "Xavfsiz" bayroq cookie fayllarini aniq matnda yuborishga ruxsat bermaydi. Cookie fayllarini yuborish uchun xavfsiz HTTPS protokoli ishlatilsagina muloqotga ruxsat beriladi. 

    Ikkala atribut ham cookie xususiyatlarida ko'rsatilgan:

    Set-Cookie: Secure; HttpOnly

    Nima uchun xavfli?: Agar sayt ishlab chiquvchisi ushbu atributlarni ko'rsatmagan bo'lsa, tajovuzkor cookie faylidan foydalanuvchi ma'lumotlarini tutib olishi va undan foydalanishi mumkin. Agar autentifikatsiya va avtorizatsiya uchun cookie-fayllardan foydalanilsa, u foydalanuvchi sessiyasini o‘g‘irlashi va uning nomidan saytda amallarni bajarishi mumkin bo‘ladi. 

    Veb-ishlab chiquvchi nimani eslashi kerak: Qoida tariqasida, mashhur ramkalarda bu atributlar avtomatik ravishda o'rnatiladi. Lekin baribir veb-server konfiguratsiyasini tekshiring va bayroqni o'rnating: Set-Cookie HttpOnly; Xavfsiz.

    Bunday holda, "Faqat HTTP" atributi cookie-fayllarni o'zingizning JavaScript-ga ko'rinmas qiladi.  

  3. Yo'lga asoslangan zaifliklar.

    Skaner, agar u potentsial maxfiy ma'lumotlarga ega bo'lgan ochiq fayl yoki veb-sayt katalogini topsa, bunday zaiflik haqida xabar beradi. Masalan, u alohida tizim konfiguratsiya fayllarini yoki butun fayl tizimiga kirishni aniqlaydi. Agar saytda kirish huquqlari noto'g'ri o'rnatilgan bo'lsa, bu holat mumkin.

    Nima uchun xavfli?: Agar fayl tizimi "chiqib ketsa", tajovuzkor operatsion tizim interfeysiga tushib qolishi va agar ular aniq matnda saqlangan bo'lsa, parollar bilan papkalarni topishga harakat qilishi mumkin (bunday qilmang!). Yoki siz parol xeshlarini o'g'irlashingiz va parolni qo'pol kuch ishlatishingiz mumkin, shuningdek tizimdagi imtiyozlarni oshirishga va infratuzilmaga chuqurroq kirishga harakat qilishingiz mumkin.  

    Veb-ishlab chiquvchi nimani eslashi kerak: Kirish huquqlari haqida unutmang va platformani, veb-serverni, veb-ilovani veb-katalogdan "qochib ketish" mumkin bo'lmasligi uchun sozlang.

  4. Avtomatik to'ldirish yoqilgan holda maxfiy ma'lumotlarni kiritish uchun shakllar.

    Agar foydalanuvchi veb-saytlarda tez-tez shakllarni to'ldirsa, uning brauzeri bu ma'lumotlarni avtomatik to'ldirish xususiyatidan foydalanib saqlaydi. 

    Veb-saytlardagi shakllar parollar yoki kredit karta raqamlari kabi nozik ma'lumotlarga ega maydonlarni o'z ichiga olishi mumkin. Bunday maydonlar uchun saytning o'zida shaklni avtomatik to'ldirish funksiyasini o'chirib qo'yish kerak. 

    Nima uchun xavfli?: Agar foydalanuvchining brauzeri maxfiy maʼlumotlarni saqlasa, tajovuzkor uni keyinchalik, masalan, fishing orqali tutib olishi mumkin. Aslini olganda, ushbu nuanceni unutgan veb-dasturchi o'z foydalanuvchilarini o'rnatmoqda. 

    Veb-ishlab chiquvchi nimani eslashi kerak: Bu holatda bizda klassik ziddiyat bor: qulaylik va xavfsizlik. Agar veb-ishlab chiquvchi foydalanuvchi tajribasi haqida o'ylayotgan bo'lsa, u ongli ravishda avtomatik to'ldirishni tanlashi mumkin. Misol uchun, agar rioya qilish muhim bo'lsa Veb-tarkibga kirish uchun ko'rsatmalar - nogiron foydalanuvchilar uchun kontentdan foydalanish bo'yicha tavsiyalar. 

    Ko'pgina brauzerlar uchun autocompete="off" atributi bilan avtomatik to'ldirishni o'chirib qo'yishingiz mumkin, masalan:

     <body>
        <form action="/uz/form/submit" method="get" autocomplete="off">
          <div>
            <input type="text" placeholder="First Name">
          </div>
          <div>
            <input type="text" id="lname" placeholder="Last Name" autocomplete="on">
          </div>
          <div>
            <input type="number" placeholder="Credit card number">
          </div>
          <input type="submit">
        </form>
      </body>

    Lekin u Chrome uchun ishlamaydi. Buni JavaScript yordamida chetlab o'tish mumkin, retseptning variantini topish mumkin shu yerda

  5. X-Frame-Options sarlavhasi sayt kodida o'rnatilmagan. 

    Ushbu sarlavha ramka, iframe, o'rnatish yoki ob'ekt teglariga ta'sir qiladi. Uning yordami bilan siz o'z saytingizni ramka ichiga joylashtirishni butunlay taqiqlashingiz mumkin. Buning uchun X-Frame-Options: rad etish qiymatini belgilashingiz kerak. Yoki X-Frame-Options-ni belgilashingiz mumkin: sameorigin, keyin iframe-ga joylashtirish faqat sizning domeningizda mavjud bo'ladi.

    Nima uchun xavfli?: Bunday sarlavhaning yo'qligi zararli saytlarda ishlatilishi mumkin klik qilish. Ushbu hujum uchun tajovuzkor tugmalar ustida shaffof ramka yaratadi va foydalanuvchini aldaydi. Misol uchun: firibgarlar veb-saytdagi ijtimoiy tarmoq sahifalarini ramkaga soladi. Foydalanuvchi ushbu saytdagi tugmani bosgan deb o'ylaydi. Buning o'rniga, bosish to'xtatiladi va foydalanuvchi so'rovi faol seans mavjud bo'lgan ijtimoiy tarmoqqa yuboriladi. Bu tajovuzkorlar foydalanuvchi nomidan spam yuborishadi yoki obunachilar va yoqtirishlarni orttirishadi. 

    Agar siz ushbu xususiyatni o'chirmasangiz, tajovuzkor dastur tugmachangizni zararli saytga joylashtirishi mumkin. U sizning yo'naltiruvchi dasturingiz yoki foydalanuvchilaringiz bilan qiziqishi mumkin.  

    Veb-ishlab chiquvchi nimani eslashi kerak: Agar veb-server yoki yuk balansida ziddiyatli qiymatga ega X-Frame-Options o'rnatilgan bo'lsa, zaiflik paydo bo'lishi mumkin. Bunday holda, server va balanschi shunchaki sarlavhani qayta yozadilar, chunki ular backend kodiga nisbatan yuqoriroq ustuvorlikka ega.  

    X-Frame-Options sarlavhasining rad etish va bir xil kelib chiqish qiymatlari Yandex veb-ko'rish dasturining ishlashiga xalaqit beradi. Veb-ko'ruvchi uchun iframes-dan foydalanishga ruxsat berish uchun sozlamalarda alohida qoida yozishingiz kerak. Masalan, nginx uchun uni quyidagicha sozlashingiz mumkin:

    http{
    ...
     map $http_referer $frame_options {
     "~webvisor.com" "ALLOW-FROM http://webvisor.com";
     default "SAMEORIGIN";
     }
     add_header X-Frame-Options $frame_options;
    ...
    }
    
    

  6. PRSSI (Path-relative stylesheet import) zaifliklari.  

    Bu sayt uslubidagi zaiflik. Bu uslub fayllariga kirish uchun href="/uz/somefolder/styles.css/" kabi nisbiy havolalar ishlatilsa paydo bo'ladi. Buzg'unchi foydalanuvchini zararli sahifaga yo'naltirish yo'lini topsa, bundan foydalanadi. Sahifa url-ga nisbiy havola kiritadi va uslublar chaqiruvini simulyatsiya qiladi. Siz badsite.ru/…/somefolder/styles.css/ kabi so'rov olasiz, bu uslub niqobi ostida zararli harakatlarni amalga oshirishi mumkin. 

    Nima uchun xavfli?: Agar firibgar boshqa xavfsizlik teshigi topsa, bu zaiflikdan foydalanishi mumkin. Natijada, cookie yoki tokenlardan foydalanuvchi ma'lumotlarini o'g'irlash mumkin.

    Veb-ishlab chiquvchi nimani eslashi kerak: X-Content-Type-Options sarlavhasini quyidagicha o'rnating: nosniff. Bunday holda, brauzer uslublar uchun kontent turini tekshiradi. Agar tur matn/cssdan boshqacha bo'lsa, brauzer so'rovni bloklaydi.

Kritik zaifliklar

  1. Parol maydoni bo'lgan sahifa xavfsiz bo'lmagan kanal orqali serverdan uzatiladi (Parol maydoni(lar)ini o'z ichiga olgan HTML formasi HTTP orqali taqdim etiladi).

    Shifrlanmagan kanal orqali serverning javobi "O'rtadagi odam" hujumlariga qarshi himoyasiz. Sahifa serverdan mijozga o'tayotganda tajovuzkor trafikni to'xtatib qo'yishi va mijoz va server o'rtasida o'rnatilishi mumkin. 

    Nima uchun xavfli?: Firibgar sahifani almashtirishi va foydalanuvchiga tajovuzkorning serveriga o'tadigan maxfiy ma'lumotlar shaklini yuborishi mumkin. 

    Veb-ishlab chiquvchi nimani eslashi kerak: Ba'zi saytlar foydalanuvchilarga parol o'rniga elektron pochta/telefon orqali bir martalik kod yuboradi. Bunday holda, zaiflik unchalik muhim emas, lekin mexanizm foydalanuvchilarning hayotini murakkablashtiradi.

  2. Xavfli kanal orqali login va parol bilan ariza yuborish (Kirish formasi HTTPS orqali yuborilmaydi).

    Bunda foydalanuvchidan serverga shifrlanmagan kanal orqali login va parolga ega forma yuboriladi.

    Nima uchun xavfli?: Oldingi holatdan farqli o'laroq, bu allaqachon muhim zaiflik. Nozik ma'lumotlarni ushlab qolish osonroq, chunki buni amalga oshirish uchun kod yozish ham shart emas. 

  3. Ma'lum zaifliklarga ega JavaScript kutubxonalaridan foydalanish.

    Skanerlash paytida eng ko'p foydalanilgan kutubxona ko'p sonli versiyalarga ega jQuery edi. Har bir versiyada kamida bitta yoki undan ko'p ma'lum zaifliklar mavjud. Zaiflikning tabiatiga qarab, ta'sir juda boshqacha bo'lishi mumkin.

    Nima uchun xavfli?: Ma'lum zaifliklar uchun ekspluatatsiyalar mavjud, masalan:

    Veb-sayt xavfsizligining halokatli gunohlari: yil davomida skanerning zaiflik statistikasidan nimani o'rgandik

    Veb-ishlab chiquvchi nimani eslashi kerak: Muntazam ravishda tsiklga qaytish: ma'lum zaifliklarni qidirish - tuzatish - tekshirish. Agar siz eskirgan kutubxonalardan ataylab foydalansangiz, masalan, eski brauzerlarni qo'llab-quvvatlash yoki pulni tejash uchun, ma'lum bo'lgan zaiflikni tuzatish imkoniyatini izlang. 

  4. Saytlararo skript (XSS). 
    Cross-Site Scripting (XSS) yoki saytlararo skript - bu ma'lumotlar bazasiga zararli dasturlarning kiritilishiga olib keladigan veb-ilovaga hujumdir. Agar Qualys bunday zaiflikni topsa, demak, potentsial tajovuzkor zararli harakatlarni amalga oshirish uchun o'zining JS skriptini sayt kodiga kirita oladi yoki allaqachon kiritgan.

    XSS saqlangan xavfliroq, chunki skript serverga o'rnatilgan va har safar hujum qilingan sahifa brauzerda ochilganda bajariladi.

    XSS aks ettirilgan amalga oshirish osonroq, chunki zararli skript HTTP so'roviga kiritilishi mumkin. Ilova HTTP so'rovini oladi, ma'lumotlarni tasdiqlamaydi, uni paketlaydi va darhol yuboradi. Agar tajovuzkor trafikni to'xtatsa va shunga o'xshash skriptni kiritsa

    <script>/*+что+то+плохое+*/</script> 

    keyin mijoz nomidan zararli so'rov yuboriladi.

    XSS ning yorqin misoli: js sniffers CVC, kartaning amal qilish muddati va hokazolarni kiritish uchun sahifalarni taqlid qiladi. 

    Veb-ishlab chiquvchi nimani eslashi kerak: Content-Security-Policy sarlavhasida mijoz brauzerini faqat ishonchli manbadan kodni yuklab olish va bajarishga majburlash uchun script-src atributidan foydalaning. Masalan, script-src "self" faqat bizning saytimizdagi barcha skriptlarni oq ro'yxatga oladi. 
    Eng yaxshi amaliyot Inline koddir: faqat xavfli inline qiymatidan foydalangan holda inline JavaScript-ga ruxsat bering. Bu qiymat inline js/css dan foydalanishga imkon beradi, lekin JS fayllarini kiritishni taqiqlamaydi. script-src 'self' bilan birgalikda biz tashqi skriptlarning bajarilishini o'chirib qo'yamiz.

    Hisobot-uri yordamida hamma narsani jurnalga kiritganingizga ishonch hosil qiling va uni saytga kiritishga urinishlarni ko'rib chiqing.

  5. SQL in'ektsiyalari.
    Zaiflik veb-sayt ma'lumotlar bazasiga to'g'ridan-to'g'ri kiradigan veb-saytga SQL kodini kiritish imkoniyatini ko'rsatadi. Agar foydalanuvchi ma'lumotlari tekshirilmasa, SQL in'ektsiyasi mumkin: u to'g'riligi tekshirilmaydi va so'rovda darhol foydalaniladi. Masalan, veb-saytdagi forma kiritilgan ma'lumotlar turiga mos kelishini tekshirmasa, bu sodir bo'ladi. 

    Nima uchun xavfli?: Agar tajovuzkor ushbu shaklga SQL so'rovini kiritsa, u ma'lumotlar bazasini buzishi yoki maxfiy ma'lumotlarni ochishi mumkin. 

    Veb-ishlab chiquvchi nimani eslashi kerak: Brauzerdan kelgan narsaga ishonmang. Siz o'zingizni mijoz tomondan ham, server tomondan ham himoya qilishingiz kerak. 

    Mijoz tomonida JavaScript yordamida maydonni tekshirishni yozing. 

    Ommabop ramkalardagi o'rnatilgan funksiyalar ham serverdagi shubhali belgilardan qochishga yordam beradi. Shuningdek, serverda parametrlangan ma'lumotlar bazasi so'rovlaridan foydalanish tavsiya etiladi.

    Veb-ilovada ma'lumotlar bazasi bilan o'zaro aloqa aynan qayerda sodir bo'lishini aniqlang. 

    O'zaro aloqa har qanday ma'lumotni olganimizda sodir bo'ladi: identifikatorli so'rov (idni o'zgartirish), yangi foydalanuvchi yaratish, yangi sharh yoki ma'lumotlar bazasiga yangi yozuvlar. Bu erda SQL in'ektsiyalari sodir bo'lishi mumkin. Agar biz ma'lumotlar bazasidan yozuvni o'chirsak ham, SQL in'ektsiyasi mumkin.

Umumiy tavsiyalar

G'ildirakni qayta ixtiro qilmang - tasdiqlangan ramkalardan foydalaning. Qoida tariqasida, mashhur ramkalar xavfsizroq. .NET uchun - ASP.NET MVC va ASP.NET Core, Python uchun - Django yoki Flask, Ruby uchun - Ruby on Rails, PHP uchun - Symfony, Laravel, Yii, JavaScript uchun - Node.JS-Express.js, Java uchun - Bahor MVC.

Sotuvchi yangilanishlarini kuzatib boring va muntazam ravishda yangilab turing. Ular zaiflikni topadilar, keyin ekspluatatsiya yozadilar, ommaga ochiq qiladilar va hamma narsa yana sodir bo'ladi. Dasturiy ta'minot sotuvchisidan barqaror versiyalar uchun yangilanishlarga obuna bo'ling.

Kirish huquqlarini tekshiring. Server tomonida har doim kodingizni birinchi harfdan oxirgi harfgacha sizning saytingizni buzmoqchi bo'lgan, ma'lumotlaringizning yaxlitligini buzmoqchi bo'lgan eng nafratlangan dushmaningiz yozgandek ko'ring. Bundan tashqari, ba'zida bu haqiqatdir.

Klonlardan, sinov maydonchalaridan foydalaning va keyin ularni ishlab chiqarish uchun foydalaning. Bu, birinchi navbatda, samarali muhitda xato va xatolardan qochishga yordam beradi: samarali muhit pul keltiradi, oddiy ishlab chiqarish muhiti juda muhimdir. Har qanday muammoni qo'shish, tuzatish yoki yopishda sinov muhitida ishlash, keyin topilgan funksionallik va zaifliklarni tekshirish va keyin ishlab chiqarish muhiti bilan ishlashni rejalashtirish kerak. 

bilan veb-ilovangizni himoya qiling Veb-dasturlar devori va zaiflik skaneridan olingan hisobotlarni u bilan birlashtiring. Masalan, DataLine xizmatlar to'plami sifatida Qualys va FortiWeb-dan foydalanadi.

Manba: www.habr.com

a Izoh qo'shish