1. Përshëndetje dhe mirësevini në forumin e Itshqip.com
    Nëse akoma nuk jeni pjesë e IT komunitetit më të madhë Shqiptarë nga fusha e Teknologjisë Informative, ju ftojmë që të bëheni pjesë e këtij komuniteti që tani duke u regjistruar këtu - procedura është shumë e thjeshtë dhe e lehtë. Gjithashtu ju mund të regjistroheni edhe përmes rrjetit social Facebook, Twitter, Google+.

[Mësim] SQL injection!

Tema tek 'Mësime' e hapur nga dr_iton, 3 Janar 2019.

  1. dr_iton

    dr_iton MSc. Inxhinier i Softuerit Staff Member IT Staff

    Postimet:
    1,287
    Pëlqimet:
    306
    Pikë nga trofetë:
    203
    Këtu po shtjelloj një temë të cilën e kam punuar në Dhjetor 2013.

    Shumë nga ne kemi njohuri me termin se çka është injektimi SQL (ang. Structured Query Language injection – shq. injektimi i gjuhës së strukturuar të pyetësorëve), por krejt çka dimë është nga fakti i dëgjimit apo përvojës së këtij termi nga shembuj të parëndësishëm. Injektimi SQL është njëra nga dobësitë shkatërruese për ta sulmuar një kompani apo biznes, e cila mund të na dërgoj tek ekspozimi i të dhënave të ndjeshme të cilat janë të ruajtura në një bazë të të dhënave të një aplikacioni, përfshirë këtu informatat e dobishme si emrat e përdoruesve, fjalëkalimet, emrat, adresat, numrat e telefonit dhe të dhënat e kartelave kreditore.

    Injektim SQL është një teknikë sulmuese duke shfrytëzuar kodin për të ndryshuar SQL deklarimet e fundme nëpërmjet manipulimit të hyrjeve.

    Injektimi SQL nuk është një dobësi që kryesisht i afekton ueb aplikacionet, çdo kod i cili pranon të dhëna hyrëse nga burime jo të besueshme dhe pastaj i shfrytëzon ato të dhëna për të krijuar SQL formulime dinamike do të mund të ishte dobësi.

    Me fjalë të tjera mund të themi se injektimi SQL është i njohur si një vektor sulmues (malware) për ueb sajtet por mund të shfrytëzohet për të sulmuar çdo lloj të SQL bazave të të dhënave.



    Edhe pse disa prej deklarimeve SQL janë më të mbrojtura ndaj sulmeve SQL, asnjëherë nuk mund të themi se jemi të siguruar 100% kundrejt injektimit SQL, mirëpo mund të themi se çdo i treti ueb sajt që është e lidhur me një bazë të të dhënave ka pika të dobëta (ang. Vulnerable).

    HYRJE

    Po shtjellojmë një temë duke u nisur nga thënia: çka kanë të përbashkët Microsoft, Yahoo, LinkedIn, CIA etj.?

    Të gjitha nga këto organizata të lartpërmendura, ueb faqet e tyre kanë qenë të shkelura me sukses me thyerjen e tyre përmes armës së fortë të hakerëve të quajtur teknika SQL injection.

    Në zhvillimin modern të internetit, këto baza të dhënash shpesh përdoren në back-endin e aplikacioneve dhe në sistemet për menaxhimin e përmbajtjes që do të thotë se përmbajtja dhe sjellja e shumë ueb sajteve është ndërtuar nga të dhënat dhe serveri i bazës së të dhënave. Sulmi i suksesshëm i cili një hakeri i jep mundësin e ndryshimit të përmbajtjes së ueb sajtit që quhet shtrembërim (ang. defacing) me qëllim të marrjes së informacioneve të ndjeshme.


    RREZIKU NGA TË DHËNAT HYRËSE TË PA PASTRUARA

    E thënë gjerësisht, injektimi SQL dërgon komanda keqdashëse (ang. malicious commands) në bazën e të dhënave me qëllim të “nuhatjes” së të dhënave nëpër kanale të paautorizuara.

    Si funksionon kjo?

    Marrim në shqyrtim një ueb formë e cila posedon panelin për kyçje në sistem. Dobësia e ueb formës fillon pasi që nuk janë pastruar të dhënat, hakeri në panelin për kyçje vendosë të dhënat e përdoruesit ‘maketi’ (ang. dummy) (brenda thonjëzave njëshe). Nëse ueb sajti kthen ndonjë gabim SQL, me vetëm vendosjen e emrit të përdoruesit, atëherë hakeri ka gjetur një dobësi, krejt kjo për shkak të kodimit të dobët të sajtit. Ai pasi të ketë qasje në këto të dhëna do të mund edhe të ndryshonte përmbajtjen e tyre.

    Një metodë tjetër shumë e shpeshtë e sulmit është edhe plotësimi i fushës tek kërkohet emri i përdoruesit me urdhrin vijues:

    Code:
    user’ or ‘1’=’1
    kjo verifikon përdoruesit të cilëve iu është ndarë roli, dhe kërkohen përdoruesit të cilin e kanë rolin 1, nëse nuk gjendet asnjë përdorues, atëherë numri 1 pas shenjës së barazimit rritet (ang. increment) për 1 deri sa të arrihet qëllimi.

    ose

    [​IMG]

    Pra, kjo ‘OR 1=1;-- shenjat minus tregojnë se nuk përfillet se çka ka në string pas numrit 1.

    Një ueb sajt i koduar mirë do t’i largonte këto thonjëza njëshe dhe nuk do të pranonte shenja të panevojshme në fushat për futje të të dhënave, p.sh. ndonjë fushë numerike nuk do të dërgonte asnjë simbol tjetër përpos numrave para se të fillonte SQL deklarimi.

    SQL është një gjuhë komplekse dhe nuk është detyrë e lehtë që të krijohen kode dhe të injektohen në query me qëllim të komprometimit të suksesshëm të një baze të dhënash, prandaj edhe përdoren vegla të ndryshme për qëllime sulmimi siç mund të jetë Havij.

    Hajvij gjithashtu skanon për të gjetur ueb sajtin se me cilin lloj të SQL-së është e krijuar baza e të dhënave. Duke përdorur këtë karakteristikë pastaj krijon query të ndryshëm që do të mund të krijoheshin vetëm nga ekspertët, të cilat tani do të parashtroheshin nga çdo haker fillestar të ashtuquajtur “n00b” i cili është i motivuar për të provuar sulmin me qëllim përpjekjeje të karakteristikave të bazës. Duhet cekur se Havij, nuk është i suksesshëm tek faqet të cilat janë siguruar mirë kundrejt injektimit SQL.

    MBROJTJA KUNDREJT SULMEVE ME INJEKTIM SQL

    Lajmi i mirë është se shumica e poseduesve të ueb sajteve kanë njohuri se si të mbrohen kundrejt sulmeve me injektim SQL. Mirëpo, në sigurinë e rrjetave, asnjëherë nuk ekziston termi i mbrojtjes 100% kundrejt këtyre sulmeve.

    Ekzistojnë disa mjeshtri mbrojtëse, mirëpo ne po përmendim katër nga më të rëndësishmet:

    · Pastrimi i përgjithshëm i të dhënave,

    · Përdorimi i firewall-it të ueb aplikacionit,

    · Limitimi i privilegjeve të bazës së të dhënave për nga konteksti

    · Shmangia e krijimit të SQL query-ve nga ana e shfrytëzuesit.

    - Pastrimi i përgjithshëm i të dhënaveueb sajtet duhet që të filtrojnë të gjitha të dhënat hyrëse që vendosë shfrytëzuesi për nga konteksti. P.sh. të dhënat hyrëse për numra nuk duhet të pranojnë edhe karaktere tjera përpos numrave, e-mail nuk duhet të pranoj karaktere tjera përpos ato që parashihen t’i ketë një e-mail duke përdorur edhe regular expression për t’u plotësuar në formatin e duhur e pse jo edhe limitimi i numrit të karaktereve brenda një fushe të caktuar.

    - Përdorimi i firewall-it të ueb aplikacionit – shembulli më i popullarizuar është moduli pa pagesë i ModSecurity , tani gjendet versioni ModSecurity 2.7.7 dhe mund të shkarkohet nga lidhja vijuese: http://www.modsecurity.org/download/ dhe pasi që këtu mësohet kryesisht për SQL Server, në lidhjen vijuese gjendet edhe dokumentimi se si instalohet firewall në një Microsoft IIS Server https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#wiki-Installation_for_Microsoft_IIS .

    Firewall do të duhej deklaruar si në vijim:
    Code:
    <modules>
        <remove name="ModSecurityIIS" />
    </modules>
    
    Gjithashtu edhe fajllit web.config do të duhej t’i shtohet edhe pjesa vijuese e kodit:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <ModSecurity enabled="true" configFile="c:\inetpub\wwwroot\xss.conf" />
        </system.webserver>
    </configuration>
    
    - Limitimi i privilegjeve të bazës së të dhënave për nga konteksti – krijimi i shumëllojshmërisë së përdoruesve të bazës së të dhënave me privilegje minimale të përdorimit të hapësirës, p.sh. kodi pas panelit për kyçje do të duhej ta dërgonte përdoruesin vetëm tek faqet ku ai ka të drejta për lexim/shkrim të të dhënave kështu që ai nuk do të kishte mundësi që të komprometonte bazën e të dhënave, ose thënë thjesht çdo përdorues duhet validuar me drejta të caktuara.

    - Shmangia e krijimit të SQL query-ve nga ana e shfrytëzuesit – edhe nëse pastrimi i të dhënave do të mund të ishte me të meta, përgatitja e SQL lidhjeve përmes deklarimeve variabile Stored Procedures dhe Transactions është shumë më e sigurtë sesa deklarimi i query-ve të plotë.


    Aplikimi i secilës nga këto katër teknikave mbrojtëse të sipërpërmendura do të ishte një reduktim i konsiderueshëm i mundësisë së të qenit të injektuar me SQL. Aplikimi i të gjitha këtyre teknikave së bashku do të ofronte një shkallë shumë të lartë sigurie. Prandaj, përdorimi i gjerë i ueb sajtit tuaj, nuk do të duhej të ishte viktima e ardhme e një injektimi SQL.

    Njëra prej skripteve që mund të përdoret për t’u mbrojtur nga injektimi SQL në C#.NET përmes deklarimeve të parapërgatitura është edhe kjo në vijim:

    Code:
    String query =
          "SELECT bilanci_llogaria FROM perdoruesi WHERE emri_perdoruesit = ?";
    try {
         OleDbCommand cmd = new OleDbCommand(query, conn);
         cmd.Parameters.Add(new OleDbParameter("emriKonsumatorit", EmriKonsumatorit Emri.Text));
         OleDbDataReader reader = cmd.ExecuteReader();
         // …
    } catch (OleDbException se) {
         // Trajtimi i gabimit
    }
    
    PËRFUNDIM

    Pas një hulumtimi në internet dhe literaturës që kam shkarkuar nga interneti, duke hapur edhe tema të ndryshme me qëllim të informimit sa më të mir.
    Krejt këto për qëllime edukimi, mendoj se njerëzit hezitojnë të flasin për tema të tilla, sepse një teknikë siç është SQL injection është teknikë keqdashëse dhe njerëzit paragjykojnë se hulumtime të tilla bëhen për qëllime keqdashëse dhe jo edukuese.

    Autor: MSc Driton Gashi

    Përshëndetje.
     
    ﴾.﴿, Pleurat, bi0 dhe 8 anëtarë tjerë pëlqejnë postimin.
  2. DardanDaci

    DardanDaci Anëtar i Njohur

    Postimet:
    544
    Pëlqimet:
    296
    Pikë nga trofetë:
    93
    SQL Injection eshte pjese e Hacking , dhe nuk lejohet ne kete forum te pakten kshtu i keni vu rregullat ju vet.
     
  3. dr_iton

    dr_iton MSc. Inxhinier i Softuerit Staff Member IT Staff

    Postimet:
    1,287
    Pëlqimet:
    306
    Pikë nga trofetë:
    203
    Komenti i juqj më bënë përshtypjen se nuk e keni lexuar fare përmbajtjen e postimit por vetëm titullin.
    Lexoje një here nga fillimi deri në fund pastaj jep mendimin.
    Përshëndetje.
     
  4. DardanDaci

    DardanDaci Anëtar i Njohur

    Postimet:
    544
    Pëlqimet:
    296
    Pikë nga trofetë:
    93
    Jo un e lexova ne tersi po ne kete forum po u qujke ilegale gjithqka qe i permendet emri rreth Hacking prandaj ta thash edhe ty ne kete menyre , SQL Injection dihet qka osht dhe pse perdoret prandaj.
     
  5. dr_iton

    dr_iton MSc. Inxhinier i Softuerit Staff Member IT Staff

    Postimet:
    1,287
    Pëlqimet:
    306
    Pikë nga trofetë:
    203
    Nëse përmendet termi Injektimi SQL nuk do të thotë se po mësojmi se si të bëhet ajo, por si të mbrohemi nga injektimi SQL.
    Gjithashtu është dhënë një sqarim në përfundim të temës.
    Përshëndetje.
     
  6. beharluu

    beharluu Anëtar i Njohur

    Postimet:
    581
    Pëlqimet:
    153
    Pikë nga trofetë:
    88
    Per krejt ata qe ende se kan kuptu mir sulmet sql injection . Po jua them shkurt
    Sql injection behet duke nderhy ne api nga jasht .
     
  7. Taboo

    Taboo Anëtar Aktiv

    Postimet:
    362
    Pëlqimet:
    90
    Pikë nga trofetë:
    28
    Pershendetje,

    Masi e hape temen si te mbrohemi nga SQL Injection, desha me te bo ni pytje:
    Qfar hapa duhet te ndermarrim ne nje aplikacion te krijuar me Entity Framework (Core)? Apo ndoshta eshte shume e veshtire pasi qe ajo vet din te mbrohet nga to?

    Faleminderit.
     
  8. bi0

    bi0 Anëtar Aktiv

    Postimet:
    413
    Pëlqimet:
    291
    Pikë nga trofetë:
    73
    Une ta sqarova po prap spo kupton , ti armatosesh massen me nje tutorial apo tool DALLON shum nga ajo qe te shkruash nje paper edukative qe sqaron dhe ndihmon ta kuptosh .
     

Shpërndaje faqen

Loading...