Vietņu droŔības nāves grēki: ko mēs uzzinājām no ievainojamÄ«bas skenera statistikas par gadu

Apmēram pirms gada mēs DataLine uzsākām darbu pakalpojumu lai meklētu un analizētu IT lietojumprogrammu ievainojamÄ«bas. Pakalpojuma pamatā ir Qualys mākoņrisinājums, par kura darbÄ«bu mēs jau teicām. Gada laikā, strādājot ar risinājumu, mēs veicām 291 meklÄ“Å”anu dažādām vietnēm un uzkrājām statistiku par izplatÄ«tām tÄ«mekļa lietojumprogrammu ievainojamÄ«bām. 

Tālāk esoÅ”ajā rakstā es jums parādÄ«Å”u, kādi caurumi vietņu droŔībā slēpjas aiz dažādiem kritiskuma lÄ«meņiem. ApskatÄ«sim, kādas ievainojamÄ«bas skeneris atklāja Ä«paÅ”i bieži, kāpēc tās varētu rasties un kā sevi pasargāt. 

Vietņu droŔības nāves grēki: ko mēs uzzinājām no ievainojamÄ«bas skenera statistikas par gadu

Qualys visas tÄ«mekļa lietojumprogrammu ievainojamÄ«bas iedala trÄ«s kritiskuma lÄ«meņos: zemā, vidējā un augstā. Ja paskatās uz sadalÄ«jumu pēc ā€œsmagumaā€, Ŕķiet, ka viss nav tik slikti. Ir dažas ievainojamÄ«bas ar augstu kritiskuma lÄ«meni, pārsvarā visas ir nekritiskas: 

Vietņu droŔības nāves grēki: ko mēs uzzinājām no ievainojamÄ«bas skenera statistikas par gadu

Bet nekritisks nenozÄ«mē nekaitÄ«gu. Tie var arÄ« radÄ«t nopietnus bojājumus. 

Populārākās ā€œnekritiskāsā€ ievainojamÄ«bas

  1. Jaukta satura ievainojamības.

    Vietnes droŔības standarts ir datu pārsÅ«tÄ«Å”ana starp klientu un serveri, izmantojot HTTPS protokolu, kas atbalsta Å”ifrÄ“Å”anu un aizsargā informāciju no pārtverÅ”anas. 

    Dažas vietnes izmanto jaukts saturs: daži dati tiek pārsÅ«tÄ«ti, izmantojot nedroÅ”o HTTP protokolu. Tā tas visbiežāk tiek nodots pasÄ«vais saturs ā€“ informācija, kas ietekmē tikai vietnes attēlojumu: attēli, css stili. Bet dažreiz tas tiek pārraidÄ«ts Ŕādi aktÄ«vs saturs: skripti, kas kontrolē vietnes darbÄ«bu. Å ajā gadÄ«jumā, izmantojot Ä«paÅ”u programmatÅ«ru, jÅ«s varat analizēt informāciju ar aktÄ«vu saturu, kas nāk no servera, modificēt savas atbildes lidojuma laikā un likt iekārtai darboties tā, kā nebija iecerējuÅ”i tās veidotāji. 

    Jaunākās pārlÅ«kprogrammu versijas brÄ«dina lietotājus, ka vietnes ar jauktu saturu ir nedroÅ”as un bloķē saturu. Vietņu izstrādātāji arÄ« saņem pārlÅ«kprogrammas brÄ«dinājumus konsolē. Piemēram, tas izskatās Ŕādi Firefox

    Vietņu droŔības nāves grēki: ko mēs uzzinājām no ievainojamÄ«bas skenera statistikas par gadu

    Kāpēc tas ir bÄ«stami?: uzbrucēji izmanto nedroÅ”u protokolu, lai pārtvertu lietotāja informāciju, aizstātu skriptus un nosÅ«tÄ«tu vietnei pieprasÄ«jumus viņa vārdā. Pat ja vietnes apmeklētājs nav ievadÄ«jis datus, tas viņu nepasargā no pikŔķerÄ“Å”ana ā€“ konfidenciālas informācijas iegÅ«Å”ana, izmantojot krāpnieciskas metodes. Piemēram, izmantojot skriptu, varat novirzÄ«t lietotāju uz nedroÅ”u vietni, kas tiek maskēta kā lietotājam pazÄ«stama vietne. Dažos gadÄ«jumos ļaunprātÄ«gā vietne izskatās pat labāk nekā oriÄ£ināls, un lietotājs var pats aizpildÄ«t veidlapu un iesniegt konfidenciālus datus. 

    Kas jāatceras tÄ«mekļa izstrādātājam: Pat ja vietnes administrators ir instalējis un konfigurējis SSL/TLS sertifikātu, cilvēka kļūdas dēļ var rasties ievainojamÄ«ba. Piemēram, ja vienā no lapām ievietojāt nevis relatÄ«vu saiti, bet gan absolÅ«tu saiti no http, un turklāt neesat iestatÄ«jis novirzÄ«Å”anu no http uz https. 

    Jauktu saturu vietnē varat noteikt, izmantojot pārlÅ«kprogrammu: meklējiet lapas avota kodu, lasiet paziņojumus izstrādātāja konsolē. Tomēr izstrādātājam bÅ«s ilgi un nogurdinoÅ”i jāmācās ar kodu. Varat paātrināt procesu, izmantojot automatizētus analÄ«zes rÄ«kus, piemēram: SSL pārbaude, bezmaksas Lighthouse programmatÅ«ra vai maksas programmatÅ«ra Screaming Frog SEO Spider.

    ArÄ« ievainojamÄ«ba var rasties problēmu dēļ ar mantoto kodu ā€” kodu, kas tika mantots. Piemēram, ja dažas lapas tiek Ä£enerētas, izmantojot vecu veidni, kurā nav ņemta vērā vietņu pāreja uz https.    

  2. Sīkfaili bez karodziņiem "HTTOnly" un "secure".

    AtribÅ«ts "HTTOnly" aizsargā sÄ«kfailus, lai tos neapstrādātu skripti, kurus uzbrucēji izmanto, lai nozagtu lietotāja datus. Karogs "DroÅ”s" neļauj sÄ«kfailus nosÅ«tÄ«t skaidrā tekstā. Saziņa bÅ«s atļauta tikai tad, ja sÄ«kfaila nosÅ«tÄ«Å”anai tiek izmantots droÅ”ais HTTPS protokols. 

    Abi atribūti ir norādīti sīkfailu rekvizītos:

    Set-Cookie: Secure; HttpOnly

    Kāpēc tas ir bÄ«stami?: ja vietnes izstrādātājs nav norādÄ«jis Å”os atribÅ«tus, uzbrucējs var pārtvert lietotāja informāciju no sÄ«kfaila un to izmantot. Ja sÄ«kdatnes tiek izmantotas autentifikācijai un autorizācijai, viņŔ varēs nolaupÄ«t lietotāja sesiju un veikt darbÄ«bas vietnē viņa vārdā. 

    Kas jāatceras tÄ«mekļa izstrādātājam: Parasti populārajos ietvaros Å”ie atribÅ«ti tiek iestatÄ«ti automātiski. Bet tomēr pārbaudiet tÄ«mekļa servera konfigurāciju un iestatiet karogu: Set-Cookie HttpOnly; DroÅ”i.

    Å ajā gadÄ«jumā atribÅ«ts ā€œHTTOnlyā€ padarÄ«s sÄ«kfailus neredzamus jÅ«su JavaScript.  

  3. Uz ceļu balstītas ievainojamības.

    Skeneris ziņo par Ŕādu ievainojamÄ«bu, ja atrod publiski pieejamu failu vai vietnes direktoriju ar potenciāli konfidenciālu informāciju. Piemēram, tas nosaka atseviŔķus sistēmas konfigurācijas failus vai piekļuvi visai failu sistēmai. Šāda situācija ir iespējama, ja vietnē ir nepareizi iestatÄ«tas piekļuves tiesÄ«bas.

    Kāpēc tas ir bÄ«stami?: Ja failu sistēma ā€œizceļasā€, uzbrucējs var iekrist operētājsistēmas saskarnē un mēģināt atrast mapes ar parolēm, ja tās ir saglabātas skaidrā tekstā (nedariet to!). Vai arÄ« varat nozagt paroļu jaucējus un brutāli piespiest paroli, kā arÄ« mēģināt paaugstināt sistēmas privilēģijas un iedziļināties infrastruktÅ«rā.  

    Kas jāatceras tÄ«mekļa izstrādātājam: Neaizmirstiet par piekļuves tiesÄ«bām un konfigurējiet platformu, tÄ«mekļa serveri, tÄ«mekļa lietojumprogrammu tā, lai nebÅ«tu iespējams ā€œaizbēgtā€ no tÄ«mekļa direktorijas.

  4. Veidlapas sensitÄ«vu datu ievadÄ«Å”anai ar iespējotu automātisko aizpildÄ«Å”anu.

    Ja lietotājs vietnēs bieži aizpilda veidlapas, viņa pārlÅ«kprogramma saglabā Å”o informāciju, izmantojot automātiskās aizpildes funkciju. 

    Vietņu veidlapās var bÅ«t ietverti lauki ar sensitÄ«vu informāciju, piemēram, paroles vai kredÄ«tkarÅ”u numuri. Šādiem laukiem ir vērts atspējot veidlapas automātiskās aizpildÄ«Å”anas funkciju paŔā vietnē. 

    Kāpēc tas ir bÄ«stami?: ja lietotāja pārlÅ«kprogramma saglabā sensitÄ«vu informāciju, uzbrucējs to var pārtvert vēlāk, piemēram, pikŔķerējot. BÅ«tÄ«bā tÄ«mekļa izstrādātājs, kurÅ” ir aizmirsis par Å”o niansi, iestata savus lietotājus. 

    Kas jāatceras tÄ«mekļa izstrādātājam: Å ajā gadÄ«jumā mums ir klasisks konflikts: ērtÄ«bas pret droŔību. Ja tÄ«mekļa izstrādātājs domā par lietotāja pieredzi, viņŔ var apzināti izvēlēties automātisko pabeigÅ”anu. Piemēram, ja ir svarÄ«gi ievērot TÄ«mekļa satura pieejamÄ«bas vadlÄ«nijas ā€“ ieteikumi satura pieejamÄ«bai lietotājiem ar invaliditāti. 

    Lielākajai daļai pārlÅ«kprogrammu varat atspējot automātisko pabeigÅ”anu, izmantojot atribÅ«tu autocompete="off", piemēram:

     <body>
        <form action="/lv/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>

    Bet pārlūkā Chrome tas nedarbosies. Tas tiek apiets, izmantojot JavaScript, var atrast receptes variantu Ŕeit

  5. Vietnes kodā nav iestatÄ«ta galvene X-Frame-Options. 

    Å Ä« galvene ietekmē rāmja, iframe, iegulÅ”anas vai objektu tagus. Ar tās palÄ«dzÄ«bu jÅ«s varat pilnÄ«bā aizliegt vietnes iegulÅ”anu rāmÄ«. Lai to izdarÄ«tu, jānorāda vērtÄ«ba X-Frame-Options: deny. Vai arÄ« varat norādÄ«t X-Frame-Options: sameorigin, tad iegulÅ”ana iframe bÅ«s pieejama tikai jÅ«su domēnā.

    Kāpēc tas ir bÄ«stami?: Ja Ŕādas galvenes nav, to var izmantot ļaunprātÄ«gās vietnēs klikŔķu uzlaupÄ«Å”ana. Å im uzbrukumam uzbrucējs izveido caurspÄ«dÄ«gu rāmi pogu augÅ”pusē un apmāna lietotāju. Piemēram: krāpnieki ierāmē sociālā tÄ«kla lapas vietnē. Lietotājs domā, ka viņŔ noklikŔķina uz pogas Å”ajā vietnē. Tā vietā klikŔķis tiek pārtverts un lietotāja pieprasÄ«jums tiek nosÅ«tÄ«ts uz sociālo tÄ«klu, kurā notiek aktÄ«va sesija. Šādi uzbrucēji sÅ«ta surogātpastu lietotāja vārdā vai iegÅ«st abonentus un atzÄ«mes PatÄ«k. 

    Ja neatspējosit Å”o lÄ«dzekli, uzbrucējs var ievietot jÅ«su lietojumprogrammas pogu ļaunprātÄ«gā vietnē. Viņu var interesēt jÅ«su novirzÄ«Å”anas programma vai lietotāji.  

    Kas jāatceras tÄ«mekļa izstrādātājam: ievainojamÄ«ba var rasties, ja tÄ«mekļa serverÄ« vai slodzes lÄ«dzsvarotājā ir iestatÄ«ts X-Frame-Options ar konfliktējoÅ”u vērtÄ«bu. Å ajā gadÄ«jumā serveris un balansētājs vienkārÅ”i pārrakstÄ«s galveni, jo tiem ir augstāka prioritāte salÄ«dzinājumā ar aizmugures kodu.  

    X-Frame-Options galvenes liegÅ”anas un vienādas izcelsmes vērtÄ«bas traucēs Yandex tÄ«mekļa skatÄ«tāja darbÄ«bu. Lai tÄ«mekļa skatÄ«tājam atļautu izmantot iframe, iestatÄ«jumos ir jāieraksta atseviŔķs noteikums. Piemēram, nginx varat to konfigurēt Ŕādi:

    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) ievainojamÄ«bas.  

    Å Ä« ir vietnes stila ievainojamÄ«ba. Tas notiek, ja, lai piekļūtu stila failiem, tiek izmantotas relatÄ«vas saites, piemēram, href="/lv/somefolder/styles.css/". Uzbrucējs izmantos Å”o iespēju, ja atradÄ«s veidu, kā novirzÄ«t lietotāju uz ļaunprātÄ«gu lapu. Lapa savā URL ievietos relatÄ«vu saiti un simulēs stilu izsaukumu. JÅ«s saņemsit pieprasÄ«jumu, piemēram, badsite.ru/ā€¦/somefolder/styles.css/, kas stila aizsegā var veikt ļaunprātÄ«gas darbÄ«bas. 

    Kāpēc tas ir bÄ«stami?: krāpnieks var izmantot Å”o ievainojamÄ«bu, ja atrod citu droŔības robu. Rezultātā ir iespējams nozagt lietotāja datus no sÄ«kdatnēm vai marÄ·ieriem.

    Kas jāatceras tīmekļa izstrādātājam: iestatiet X-Content-Type-Options galveni uz: nosniff. Šādā gadījumā pārlūkprogramma pārbaudīs stilu satura veidu. Ja veids nav teksts/css, pārlūkprogramma bloķēs pieprasījumu.

Kritiskās ievainojamības

  1. Lapa ar paroles lauku tiek pārsūtīta no servera pa nedroŔu kanālu (HTML veidlapa ar paroles lauku(-iem) tiek pasniegta, izmantojot HTTP).

    Atbilde no servera, izmantojot neÅ”ifrētu kanālu, ir neaizsargāta pret uzbrukumiem ā€œcilvēks vidÅ«ā€. Lapai pārejot no servera uz klientu, uzbrucējs var pārtvert trafiku un iestāties starp klientu un serveri. 

    Kāpēc tas ir bÄ«stami?: Krāpnieks varēs nomainÄ«t lapu un nosÅ«tÄ«t lietotājam konfidenciālu datu veidlapu, kas tiks nosÅ«tÄ«ta uz uzbrucēja serveri. 

    Kas jāatceras tīmekļa izstrādātājam: dažas vietnes paroles vietā lietotājiem nosūta vienreizēju kodu pa e-pastu/tālruni. Šajā gadījumā ievainojamība nav tik kritiska, taču mehānisms sarežģīs lietotāju dzīvi.

  2. Veidlapas nosūtīŔana ar pieteikumvārdu un paroli, izmantojot nedroŔu kanālu (PieteikŔanās veidlapa netiek iesniegta, izmantojot HTTPS).

    Å ajā gadÄ«jumā no lietotāja uz serveri pa neÅ”ifrētu kanālu tiek nosÅ«tÄ«ta veidlapa ar pieteikumvārdu un paroli.

    Kāpēc tas ir bÄ«stami?: AtŔķirÄ«bā no iepriekŔējā gadÄ«juma Ŕī jau ir kritiska ievainojamÄ«ba. SensitÄ«vus datus ir vieglāk pārtvert, jo jums pat nav jāraksta kods, lai to izdarÄ«tu. 

  3. JavaScript bibliotēku izmantoÅ”ana ar zināmām ievainojamÄ«bām.

    SkenÄ“Å”anas laikā visvairāk izmantotā bibliotēka bija jQuery ar plaÅ”u versiju skaitu. Katrai versijai ir vismaz viena vai pat vairākas zināmas ievainojamÄ«bas. Ietekme var bÅ«t ļoti atŔķirÄ«ga atkarÄ«bā no ievainojamÄ«bas veida.

    Kāpēc tas ir bÄ«stami?: Ir zināmu ievainojamÄ«bu izmantoÅ”ana, piemēram:

    Vietņu droŔības nāves grēki: ko mēs uzzinājām no ievainojamÄ«bas skenera statistikas par gadu

    Kas jāatceras tÄ«mekļa izstrādātājam: regulāri atgriezieties pie cikla: meklējiet zināmās ievainojamÄ«bas - labojiet - pārbaudiet. Ja apzināti izmantojat mantotās bibliotēkas, piemēram, lai atbalstÄ«tu vecākas pārlÅ«kprogrammas vai ietaupÄ«tu naudu, meklējiet iespēju novērst zināmu ievainojamÄ«bu. 

  4. Starpvietņu skriptÄ“Å”ana (XSS). 
    Cross-Site Scripting (XSS) jeb starpvietņu skriptÄ“Å”ana ir uzbrukums tÄ«mekļa lietojumprogrammai, kā rezultātā datu bāzē tiek ievadÄ«ta ļaunprātÄ«ga programmatÅ«ra. Ja Qualys konstatē Ŕādu ievainojamÄ«bu, tas nozÄ«mē, ka potenciālais uzbrucējs var vai jau ir ievietojis savu js skriptu vietnes kodā, lai veiktu ļaunprātÄ«gas darbÄ«bas.

    Saglabāts XSS bīstamāks, jo skripts tiek iegults serverī un tiek izpildīts katru reizi, kad pārlūkprogrammā tiek atvērta uzbrukuma lapa.

    Atspoguļots XSS vieglāk izpildīt, jo HTTP pieprasījumā var tikt ievadīts ļaunprātīgs skripts. Lietojumprogramma saņems HTTP pieprasījumu, nepārbaudīs datus, iesaiņos tos un nekavējoties nosūtīs. Ja uzbrucējs pārtver satiksmi un ievieto tādu skriptu kā

    <script>/*+чтŠ¾+тŠ¾+ŠæŠ»Š¾Ń…Š¾Šµ+*/</script> 

    tad klienta vārdā tiks nosūtīts ļaunprātīgs pieprasījums.

    Spilgts XSS piemērs: js sniffers, kas simulē lapas, lai ievadÄ«tu CVC, kartes derÄ«guma termiņu un tā tālāk. 

    Kas jāatceras tÄ«mekļa izstrādātājam: galvenē Content-Security-Policy izmantojiet atribÅ«tu script-src, lai piespiestu klienta pārlÅ«kprogrammu lejupielādēt un izpildÄ«t kodu tikai no uzticama avota. Piemēram, script-src 'self' baltajā sarakstā iekļauj visus skriptus tikai no mÅ«su vietnes. 
    Labākā prakse ir iekļautais kods: atļaut tikai iekļauto JavaScript, izmantojot nedroÅ”o iekļauto vērtÄ«bu. Å Ä« vērtÄ«ba ļauj izmantot iekļauto js/css, bet neaizliedz iekļaut js failus. Kombinācijā ar script-src 'self' mēs atspējojam ārējo skriptu izpildi.

    Noteikti reģistrējiet visu, izmantojot report-uri, un apskatiet mēģinājumus to ieviest vietnē.

  5. SQL injekcijas.
    IevainojamÄ«ba norāda uz iespēju ievadÄ«t SQL kodu vietnē, kas tieÅ”i piekļūst vietnes datu bāzei. SQL injekcija ir iespējama, ja lietotāja dati netiek pārbaudÄ«ti: to pareizÄ«ba netiek pārbaudÄ«ta un tiek nekavējoties izmantota vaicājumā. Piemēram, tas notiek, ja veidlapa vietnē nepārbauda, ā€‹ā€‹vai ievade atbilst datu tipam. 

    Kāpēc tas ir bÄ«stami?: ja uzbrucējs Å”ajā veidlapā ievada SQL vaicājumu, viņŔ var avarēt datubāzi vai atklāt konfidenciālu informāciju. 

    Kas jāatceras tÄ«mekļa izstrādātājam: neuzticieties tam, kas nāk no pārlÅ«kprogrammas. Jums ir jāaizsargā sevi gan klienta, gan servera pusē. 

    Klienta pusē ierakstiet lauka validāciju, izmantojot JavaScript. 

    Iebūvētās funkcijas populārajos ietvaros palīdz arī izvairīties no aizdomīgām rakstzīmēm serverī. Ieteicams arī serverī izmantot parametrizētus datu bāzes vaicājumus.

    Nosakiet, kur tieÅ”i tÄ«mekļa lietojumprogrammā notiek mijiedarbÄ«ba ar datu bāzi. 

    MijiedarbÄ«ba notiek, kad mēs saņemam jebkādu informāciju: pieprasÄ«jumu ar id (id maiņa), jauna lietotāja izveidi, jaunu komentāru vai jaunus ierakstus datu bāzē. Å eit var notikt SQL injekcijas. Pat ja mēs izdzÄ“Å”am ierakstu no datu bāzes, ir iespējama SQL injekcija.

Vispārēji ieteikumi

Neizgudrojiet riteni no jauna ā€“ izmantojiet pārbaudÄ«tus ietvarus. Parasti populārie ietvari ir droŔāki. .NET ā€” ASP.NET MVC un ASP.NET Core, Python ā€” Django vai Flask, Ruby ā€” Ruby on Rails, PHP ā€” Symfony, Laravel, Yii, JavaScript ā€” Node.JS-Express.js, Java - Pavasara MVC.

Sekojiet pārdevēja atjauninājumiem un regulāri atjauniniet. Viņi atradīs ievainojamību, pēc tam uzrakstīs ekspluatāciju, padarīs to publiski pieejamu, un viss atkārtosies. Abonējiet programmatūras piegādātāja stabilo versiju atjauninājumus.

Pārbaudiet piekļuves tiesÄ«bas. Servera pusē vienmēr izturieties pret savu kodu tā, it kā to no pirmā lÄ«dz pēdējam burtam bÅ«tu uzrakstÄ«jis jÅ«su nÄ«stākais ienaidnieks, kurÅ” vēlas sabojāt jÅ«su vietni un pārkāpt jÅ«su datu integritāti. Turklāt dažreiz tā ir taisnÄ«ba.

Izmantojiet klonus, testÄ“Å”anas vietas un pēc tam izmantojiet tos ražoÅ”anai. Tas palÄ«dzēs, pirmkārt, izvairÄ«ties no kļūdām un kļūdām produktÄ«vā vidē: produktÄ«va vide nes naudu, vienkārÅ”a produktÄ«va vide ir kritiska. Pievienojot, labojot vai aizverot jebkuru problēmu, ir vērts strādāt testa vidē, pēc tam pārbaudÄ«t funkcionalitāti un atrastās ievainojamÄ«bas un pēc tam plānot darbu ar ražoÅ”anas vidi. 

Aizsargājiet savu tīmekļa lietojumprogrammu ar Tīmekļa lietojumprogrammu ugunsmūris un integrēt tajā ziņojumus no ievainojamības skenera. Piemēram, DataLine kā pakalpojumu komplektu izmanto Qualys un FortiWeb.

Avots: www.habr.com

Pievieno komentāru