Veebisaidi turvalisuse surmavad patud: mida me Ôppisime aasta jooksul haavatavuste skanneri statistikast

Umbes aasta tagasi alustasime DataLine'is teenus IT-rakenduste haavatavuste otsimiseks ja analĂŒĂŒsimiseks. Teenuse aluseks on Qualyse pilvelahendus, mille töö kohta oleme juba rÀÀkinud. Aasta jooksul lahenduse kasutamisel skaneerisime 291 erinevat saiti ja kogusime statistikat levinud haavatavuste kohta veebirakendustes. 

Allolevas artiklis nÀitan, millised turvavead peidavad end erinevate kriitilisuse tasemete taga. Vaatame, milliseid haavatavusi skanner eriti sageli leidis, miks need vÔivad tekkida ja kuidas end kaitsta. 

Veebisaidi turvalisuse surmavad patud: mida me Ôppisime aasta jooksul haavatavuste skanneri statistikast

Qualys jagab veebirakenduste haavatavused kolmele kriitilisuse tasemele: madal, keskmine ja kĂ”rge. Kui vaadata „raskeuse” jaotust, tundub, et kĂ”ik pole nii hullud. KĂ”rge kriitilisuse taseme haavatavusi on vĂ€he, enamik on mitte-kritilised: 

Veebisaidi turvalisuse surmavad patud: mida me Ôppisime aasta jooksul haavatavuste skanneri statistikast

Kuid mitte-kritilised – ei tĂ€henda ohutud. Need vĂ”ivad samuti tekitada tĂ”sist kahju. 

Tipp „mitte-kritilised” haavatavused

  1. Segatud sisu seotud haavatavused.

    Veebisaitide turæ ‡ć‡† tĂ€histab andmete edastust kliendi ja serveri vahel HTTPS-protokolli kaudu, mis toetab krĂŒpteerimist ja kaitseb teavet pealtkuulamise eest. 

    MĂ”ned veebisaidid kasutavad segatud sisu: edastavad osa andmeid kaitsmata HTTP-protokolli kaudu. Tihti edastatakse nii passiivset sisu – teavet, mis mĂ”jutab ainult saidi kuvamist: pildid, CSS-stiilid. Kuid mĂ”nikord edastatakse nii ka aktiivne sisu: skriptid, mis juhtivad saidi kĂ€itumist. Sellisel juhul on vĂ”imalus spetsiaalse tarkvara abil analĂŒĂŒsida serverist saabuvat teavet aktiivse sisuga, reaalajas oma vastuseid muuta ja sundida masinat toimima viisil, nagu selle loojad ei olnud ette nĂ€inud. 

    Uute versioonide brauserid hoiatavad kasutajaid, et segatud sisu sisaldavad saidid ei ole turvalised ja blokeerivad sisu. Veebiarendajad saavad ka brauseri konsoolilt teateid. NÀiteks, nii see vÀlja nÀeb Firefox: 

    Veebisaidi turvalisuse surmavad patud: mida me Ôppisime aasta jooksul haavatavuste skanneri statistikast

    Miks see on ohtlik: Kurikaalased kasutavad kaitsmata protokolli, et varastada kasutaja teavet, asendada skripte ja saata pĂ€ringuid saidile tema nimel. Isegi kui saidi kĂŒlastaja ei sisestanud andmeid, ei kaitse see teda phisingu – konfidentsiaalse teabe hankimine petuskeemide abil. NĂ€iteks saab skripti abil suunata kasutaja ohtlikule veebisaidile, mis maskeerib end tuttava saidina. Teatud juhtudel nĂ€eb pahatahtlik sait isegi parem vĂ€lja kui originaal, ning kasutaja vĂ”ib ise tĂ€ita vormi ja edastada konfidentsiaalsed andmed. 

    Mida peaks veebiarendaja meeles pidama: Isegi kui saidi administraator on installinud ja seadistanud SSL/TLS-sertifikaadi, vÔib haavatavus tekkida inimfaktori tÔttu. NÀiteks, kui mÔnel lehel on kasutatud mitte suhtelist linki, vaid absoluutset http-ga linki, ja lisaks ei ole seadistatud suunamisi http-lt https-ile. 

    Segatud sisu avastamiseks veebilehelt saab kasutada brauserit: otsida lehe allikakoodist, lugeda arendaja konsooli teateid. Siiski peab arendaja pika ja tĂŒĂŒtava koodiga tegelema. Protsessi saab kiirendada automatiseeritud analĂŒĂŒsivahenditega, nĂ€iteks: SSL Kontroll, avatud lĂ€htekoodiga tarkvara Lighthouse vĂ”i tasuline tarkvara Screaming Frog SEO Spider.

    Samuti vĂ”ib haavatavus tekkida vanade koodide tĂ”ttu – koodist, mis on jÀÀnud pĂ€randiks. NĂ€iteks, kui osa lehtedest genereeritakse vanast mallist, kus ei arvestata veebilehtede ĂŒleminekut HTTPS-ile.    

  2. KĂŒpsised ilma 'HTTPOnly' ja 'secure' lippudeta.

    Atribuut 'HTTPOnly' kaitseb kĂŒpsiseid skriptide eest, mida kurjategijad kasutavad kasutajate andmete varastamiseks. 'Secure' lipp ei luba kĂŒpsiste edastamist avatud kujul. Andmete vahetamine on lubatud ainult siis, kui kĂŒpsiste edastamiseks kasutatakse kaitstud protokolli HTTPS. 

    MĂ”lemad atribuudid mÀÀratakse kĂŒpsiste omadustes:

    Set-Cookie: Secure; HttpOnly

    Miks see on ohtlik: Kui veebiarendaja ei ole neid atribuute mÀÀranud, vĂ”ib kurjategija kasutada kĂŒpsiste kaudu kasutaja teavet ja seda kurjasti kasutada. Kui kĂŒpsiseid kasutatakse autentimiseks ja autoriseerimiseks, suudab ta varastada kasutaja sessiooni ja teha toiminguid saidil tema nimel. 

    Mida peaks veebiarendaja meeles pidama: TĂŒĂŒpiliselt mÀÀratakse need atribuudid automaatselt populaarsetes raamistikes. Kuid kontrollige ikka veebiserveri konfiguratsiooni ja seadistage lipp: Set-Cookie HttpOnly; Secure.

    Selle atribuudiga «HTTPOnly» muutuvad kĂŒpsised nĂ€htamatuks ka teie enda JavaScriptile.  

  3. Path Based Vulnerabilities ("teepÔhised" haavatavused).

    Skanner teatab sellisest haavatavusest, kui leiab avalikult ligipÀÀsetava faili vĂ”i katalooge saidil, kus vĂ”ib olla potentsiaalselt konfidentsiaalset teavet. NĂ€iteks tuvastab see eraldiseisvad failid sĂŒsteemi konfiguratsiooniga vĂ”i pÀÀsu tervikfailisĂŒsteemile. Selline olukord vĂ”ib tekkida, kui saidil on valesti mÀÀratud juurdepÀÀsuĂ”igused.

    Miks see on ohtlik: Kui failisĂŒsteem „ulatuvalt vĂ€lja”, vĂ”ib rĂŒndaja pÀÀseda operatsioonisĂŒsteemi liidesesse ja proovida leida kaustasid, kus paroolid on avatud kujul talletatud (Ă€rge tehke nii!). Samuti saab varastada paroolide rĂ€si ja proovida neile parooli leida, samuti pĂŒĂŒda tĂ”sta oma Ă”iguseid sĂŒsteemis ja liikuda sĂŒgavale infrastruktuuri.  

    Mida peaks veebiarendaja meeles pidama: Ärge unustage juurdepÀÀsuĂ”igusi ja seadistage platvorm, veebiserver ja veebirakendus nii, et ei oleks vĂ”imalik „pĂ”geneda” veebikaustast.

  4. TÀpse andmete sisestamise vormid koos automaatse tÀitmise funktsiooniga.

    Kui kasutaja tÀidab sageli vorme veebisaitidel, salvestab tema brauser selle teabe automaatse tÀitmise funktsiooni abil. 

    Veebisaitide vormid vĂ”ivad sisaldada konfidentsiaalsete andmete vĂ€lju, nĂ€iteks paroole vĂ”i krediitkaardi numbreid. Selliste vĂ€ljade jaoks on soovitatav veebisaidi tasemel automaatse tĂ€itmise funktsioon vĂ€lja lĂŒlitada. 

    Miks see on ohtlik: Kui kasutaja brauser salvestab konfidentsiaalset teavet, vĂ”ib rĂŒndaja selle hiljem haarata, nĂ€iteks phishingu kaudu. Sisuliselt sisestab veebiarendaja, kes unustab selle nĂŒansi, oma kasutajad ohtu. 

    Mida peaks veebiarendaja meeles pidama: Sellisel juhul on meil klassikaline konflikt: mugavus vs turvalisus. Kui veebiarendaja mĂ”tleb kasutaja mugavusele, vĂ”ib ta teadlikult valida automaatse tĂ€itmise. NĂ€iteks, kui on oluline jĂ€rgida Veebisisu ligipÀÀsetavuse suunised – juhised sisu ligipÀÀsetavuse kohta liikikuvaegustega kasutajatele. 

    Enamiku brauserite puhul saab automaatset tÀitmist keelata atribuudiga autocomplete="off", nÀiteks:

     <body>
        <form action="/et/form/submit/" method="get" autocomplete="off" data-trp-original-action="/form/submit">
          <div>
            <input type="text" placeholder="Eesnimi">
          </div>
          <div>
            <input type="text" id="lname" placeholder="Perekonnanimi" autocomplete="on">
          </div>
          <div>
            <input type="number" placeholder="Krediitkaardi number">
          </div>
          <input type="submit">
        <input type="hidden" name="trp-form-language" value="et"/></form>
      </body>

    Kuid Chrome'i puhul ei tööta see. Seda ĂŒletatakse JavaScripti abil, retsepti varianti saab leida siit. 

  5. Veebisaidi koodis ei ole mÀÀratud pealkirja X-Frame-Options. 

    See pealkiri mÔjutab frame, iframe, embed vÔi object silte. Selle abil saab tÀielikult keelata oma saidi integreerimise raami sisse. Selleks tuleb mÀÀrata vÀÀrtus X-Frame-Options: deny. VÔi vÔib mÀÀrata X-Frame-Options: sameorigin, siis on iframe'i integreerimine saadaval ainult teie domeenil.

    Miks see on ohtlik: Selline pealkiri vĂ”ib olla kurjategijate poolt kasutatud kahjulikes veebisaitides, et klikkimise petmiseks. Selle rĂŒnnaku korral loob rĂŒndaja lĂ€bipaistva raami nuppude kohale, pettes kasutajat. NĂ€iteks: petjad paigutavad raami sotsiaalmeedia lehtede kohale. Kasutaja arvab, et klikkib sellel saidil nupule. Sellest hoolimata haaratakse klikk ja saadetakse kasutaja pĂ€ring sotsiaalmeediasse, kus tal on aktiivne sessioon. Nii saadavad kurjategijad rĂ€mpsposti kasutaja nimel vĂ”i saavad jĂ€rgijaid ja meeldimisi. 

    Kui seda vĂ”imalust ei blokeerida, vĂ”ib rĂŒndaja paigutada teie rakenduse nupu kahjulikku veebisaidile. Ta vĂ”ib olla huvitatud teie viidatud programmist vĂ”i teie kasutajatest.  

    Mida peaks veebiarendaja meeles pidama: Turvaprobleem vĂ”ib ilmneda, kui X-Frame-Options on vastuolulise vÀÀrtusega mÀÀratud veebiserveris vĂ”i koormuse tasakaalus. Sellisel juhul kirjutab server ja koormuse tasakaalustaja lihtsalt pealkirja ĂŒle, kuna neil on kĂ”rgem prioriteet vĂ”rreldes tagasiside koodiga.  

    X-Frame-Optionsi deny ja sameorigin vÀÀrtused takistavad Yandexi veebivaatleja tööd. Et lubada iframe'i kasutamine veebivaatlejas, tuleb seadistustes lisada eraldi reegel. NÀiteks nginx'i puhul saab seadistada nii:

    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) haavatavused.  

    See on haavatavus saidi stiilides. See tekib, kui stiilifailide juurde pÀÀsemiseks kasutatakse suhtelisi linke kujul href="/somefolder/styles.css/". Kurjategija saab seda kasutada, kui leiab viisi, kuidas suunata kasutaja pahatahtlikule lehele. Leht asendab suhtelise lingi oma url-iga ja imiteerib stiilidele pöördumist. Tulemuseks on pĂ€ring, nagu badsite.ru/
/somefolder/styles.css/, mis tegevuses vĂ”ib kahjustada toimingut stiilina. 

    Miks see on ohtlik: Kurjategija saab seda haavatavust Ă€ra kasutada, kui leiab veel ĂŒhe turvauuenduse. Sel viisil on vĂ”imalik varastada kasutajaandmeid kĂŒpsistest vĂ”i tokenitest.

    Mida peaks veebiarendaja meeles pidama: MÀÀrake pealkiri X-Content-Type-Options: nosniff. Sellisel juhul kontrollib brauser sisu tĂŒĂŒpi stiilide jaoks. Kui tĂŒĂŒp erineb text/css, blokeerib brauser pĂ€ringu.

Kriitilised haavatavused

  1. ParoolivÀlja sisaldav leht edastatakse serverist kaitsmata kanalil (HTML vorm, mis sisaldab paroolivÀlja, edastatakse HTTP kaudu).

    Serverist tulev vastus mitteĆĄifreeritud kanali kaudu on haavatav keskmise inimese rĂŒnnakute suhtes. RĂŒndaja vĂ”ib peatada liiklust ja sekkuda kliendi ja serveri vahel, kui leht liigub serverist kliendile. 

    Miks see on ohtlik: Pettur saab lehte muuta ja saata kasutajale vormi konfidentsiaalsete andmete jaoks, mis saadetakse rĂŒndaja serverisse. 

    Mida peaks veebiarendaja meeles pidama: MĂ”ned saidid saadavad kasutajatele kahekordsete autentimisĂŒlesannete asemel koodi e-posti vĂ”i telefoni. Sellisel juhul pole haavatavus nii kriitiline, kuid mehhanism muudab kasutajate elu keeruliseks.

  2. Sisselogimisvormi saatmine kaitsmata kanalil (Sisselogimisvorm ei edastata HTTPS-i kaudu).

    Sellisel juhul saadetakse brauserist serverisse mitteĆĄifreeritud kanali kaudu vorm, mis sisaldab sisselogimise ja parooli.

    Miks see on ohtlik: Erinevalt eelnevast juhtumist on see juba kriitiline haavatavus. Salajaste andmete pealtkuulamine on lihtsam, kuna selleks ei ole vaja isegi koodi kirjutada. 

  3. JavaScripti raamatukogude kasutamine, kus on tuntud haavatavused.

    Seni lĂ€bi viidud skaneerimisel on kĂ”ige laialdasemalt kasutatud raamatukogu olnud jQuery koos ulatusliku versioonide kogumiga. Igas versioonis on vĂ€hemalt ĂŒks, sageli rohkem tuntud haavatavust. MĂ”ju vĂ”ib olla vĂ€ga erinev – sĂ”ltub haavatavuse iseloomust.

    Miks see on ohtlik: Tuntud haavatavuste jaoks on olemas eksploidid, nÀiteks sellised:

    Veebisaidi turvalisuse surmavad patud: mida me Ôppisime aasta jooksul haavatavuste skanneri statistikast

    Mida peaks veebiarendaja meeles pidama: Tagasi pöördumine tsĂŒklisse: tuntud haavatavuste otsimine – kĂ”rvaldamine – kontrollimine on soovitatav. Kui kasutate teadlikult aegunud raamatukogasid, nĂ€iteks vanade brauserite toetamiseks vĂ”i eelarve kokkuhoidmiseks, otsige vĂ”imalusi tuntud haavatavuse kĂ”rvaldamiseks. 

  4. Veebirakenduste rĂŒnded (XSS). 
    Cross-Site Scripting (XSS), ehk veebirakenduste rĂŒnded, on rĂŒnnakud, millega veebirakenduse andmebaasi lisatakse pahavara. Kui Qualys tuvastab sellise haavatavuse, tĂ€hendab see, et potentsiaalne rĂŒndaja vĂ”ib olla tutvustanud vĂ”i juba tutvustanud oma js-skripti saidi koodis pahatahtlike toimingute tegemiseks.

    Salvestatud XSS (Stored XSS) on ohtlikum, kuna skript sisestatakse serverisse ja tĂ€idetakse iga kord, kui rĂŒndatud lehte brauseris avatakse.

    Peegeldunud XSS (Reflected XSS) on lihtsam lĂ€bi viia, kuna pahatahtlikku skripti saab sisestada HTTP-pĂ€ringusse. Rakendus saab HTTP-pĂ€ringu, ei kontrolli andmeid, pakib need ja saadab kohe edasi. Kui rĂŒndaja pĂŒĂŒab liiklust ja lisab skripti nagu

    <script>/*+Ń‡Ń‚ĐŸ+Ń‚ĐŸ+ĐżĐ»ĐŸŃ…ĐŸĐ”+*/</script> 

    siis saadetakse pahatahtlik pÀring kliendi nimel.

    Selge nÀide XSS-st: JS-snifferid, mis matkivad lehti CVC, kaardi kehtivuse ja muu sarnase sisu sisestamiseks. 

    Mida peaks veebiarendaja meeles pidama: Content-Security-Policy pÀises kasutage atribuut script-src, et kliendi brauser laadiks ja tÀidaks ainult usaldusvÀÀrsest allikast lÀhtuvat koodi. NÀiteks script-src 'self' lubab kÔik skriptid ainult meie saidilt. 
    Parim praktika on Inline-kood: lubage ainult inline-javascript vÀÀrtusega unsafe-inline. See vÀÀrtus vÔimaldab kasutada inline js/css, kuid ei keela js-failide laadimist. Kombineeritud script-src 'self' vÀÀrtusega keelame vÀliste skriptide tÀitmise.

    Logige kindlasti kÔik report-uri abil ja jÀlgige veebisaidile sisselaskmisproovide tegemisi.

  5. SQL-i sĂŒstekatsed.
    VĂ”rgu haavatavus viitab vĂ”imalusele sisestada veebisaidile SQL-koodi, mis kĂŒsib andmeid otse saidi andmebaasist. SQL-i sĂŒstekatse vĂ”ib toimuda, kui kasutaja sisendid ei ole kontrollitud: neid ei valideerita ja neid kasutatakse otse pĂ€ringus. NĂ€iteks juhtub nii, kui veebisaidi vorm ei kontrolli, kas sisend vastab andmetĂŒĂŒbile. 

    Miks see on ohtlik: Kui rĂŒndaja sisestab sellesse vormi SQL-pĂ€ringu, vĂ”ib ta andmebaasi riket pĂ”hjustada vĂ”i konfidentsiaalset teavet avaldada. 

    Mida peaks veebiarendaja meeles pidama: Ärge usaldage saadud andmeid brauserist. Kaitsta tuleb nii kliendi- kui ka serveripoolset osa. 

    Kliendipoolsel kĂŒljel kirjutage JavaScripti abil vĂ€lja valideerimise kontroll. 

    Populaarsete raamistikute sisseehitatud funktsioonid aitavad samuti serveris kahtlasi mÀrke pÀÀsta. Serveris on soovitatav kasutada ka parameetrilised pÀringud andmebaaside suhtes.

    MÀÀrake, kus veebirakenduses toimub andmebaasiga suhtlemine. 

    Koostoime tekib, kui saame mingit teavet: pĂ€ring ID-ga (ID muutmine), uue kasutaja loomine, uus kommentaar – uued kirjed andmebaasis. Siin vĂ”ivad ilmneda SQL-injektsioonid. Isegi kui kustutame andmebaasist kirje, on SQL-injektsioon vĂ”imalik.

Üldised soovitused

Ärge leiutage ratast – kasutage katsetatud raame. Reeglina on populaarsed raamistikud turvalisemad. .NET-i puhul on see ASP.NET MVC ja ASP.NET Core, Pythoni puhul Django vĂ”i Flask, Ruby puhul Ruby on Rails, PHP puhul Symfony, Laravel, Yii, JavaScripti puhul Node.JS-Express.js, Java puhul Spring MVC.

JÀlgige tarnija uuendusi ja uuendage regulaarselt. Haavatavused avastatakse, seejÀrel kirjutatakse eksploit, jagatakse avalikult ja kÔik kordub uuesti. Tellige uuendused kuni tarkvara tarnija stabiilsete versioonideni.

Kontrollige juurdepÀÀsuÔigusi. Serveri poolt tuleb alati oma koodi suhtuda nagu ka kÔik, alates esimesest ja kuni viimase tÀheni, on kirjutatud teie kÔige vihatumate vaenlaste poolt, kes soovivad teie saiti lÔhkuda ja teie andmete terviklikkust rikkuda. Eriti kuna mÔnikord on see tÔesti nii.

Kasutage kloone, testimisplatvorme ja seejÀrel alles viige tootmisse. See help to avoid pitfalls and mistakes in the production environment: the production environment generates revenue, and downtime is critical. When adding, fixing, or closing any issues, it is essential to work in a testing environment first, check functionality and detected vulnerabilities, and only then plan work for the production environment. 

Kaitsege oma veebirakendust Veebirakenduse tulemĂŒĂŒri ja integreerige selle juurde haavatavuste skanneri aruanded. NĂ€iteks kasutatakse DataLine'i teenuste ĂŒhendamiseks Qualys'i ja FortiWeb'i.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster