F-Secure - Spletna strežnika Združenih narodov in britanske vlade sta zgolj kapljica v morju strežnikov, ki so podlegli SQL pomanjkljivosti. F-Secure trdi, da napaka (SQL injection) preusmeri uporabnike k zlonamernemu javascriptu na naslovih nmidahena.com, aspder.com or nihaorr1.com, ti pa potem uporabijo nov nabor lukenj (exploits), da namestijo Trojanski virus na njihove računalnike.
Brian Kerbs je napako podrobno opisal na svojem Washington Post Security Blogu, pojavil pa se je tudi seznam pomembnih spletnih strani, ki so bile pohekane. Verjetno boste opazili, da je med njimi celo www.safecanada.com - stran Kanadske državne varnosti. Na IIS forumih so nekateri administratorji strežnikov, ki uporabljalo Microsoftov SQL, zmedeno ugotavljali, kaj se pravzaprav dogaja. Slovenski Google razkrije, da je bilo pohekanih tudi nekaj slovenskih strežnikov:
Zavod za zdravstveno varstvo Celje Blog časnika Večer Mariborska knjižnica Tehnološki center za električne stroje Organizacija ITF Slovenija
Ker bodo najbrž napako odpravili, smo naredili nekaj zaslonskih posnetkov:
Ni ms kriv. Krive so trapasto spisane aplikacije, ki ne spucajo inputa. Ne gre za luknjo v IIS ali SQL pač pa v asp(and other stuff) aplikacijah, ki ne preverjajo dobro kaj bašejo v bazo.
Never attribute to malice that which can be adequately explained by stupidity.
A ne obstaja ekvivalent printf("%s %s...",s1,s2) za SQL. ki pravilno escapa znake že 10 let ? Seveda predpostavljam, da ima vsak vebmojster ustrezno izobrazbo...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Ni MS napaka? Zakaj pa so potem v screenshotih samo asp in asp.net strani? Torej asp/asp.net programerji niso dovolj pametni, kakor so php in ostali?
MrStein: sprintf obstaja (php), samo nevem, če deluje za sql escapanje. V phpju so druge metode. V asp.net je tudi kar nekaj metod, ki zaščitijo pred sql injection, in vsekakor vsi programerji ne pozabijo tega uporabiti. Tako, da je potem MS kriv.
Sam se zavedam, da je problem kopica nadobudnih ampak na žalost totalno nesposobnih programerjev. Danes je to tako ali tako lahko vsak, ki ima 5min preveč časa.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Zakaj bi tako nesposobni programerji programirali tako pomembne spletne strani? Poleg tega imaš v vsakem asp.net članku napisano kodo, ki varuje pred sql injection. Iz katerekoli spletne strani se učiš programirati asp.net je koda zaščitena pred sql injection. Butast moraš biti, da tega potem ne bi upošteval, ko delaš spletno stran.
Za ASP še verjamem, ker poznam nekaj asp programerjev in vsi ponavadi pozabijo na sql oz. se sploh ne spomnijo.
Ampak na screenshotih so vse spletne strani v asp/asp.net kar pomeni, da ima MS neko vezo vmes in verjetno je on kriv.
Edit: pozabil sem omeniti, da mi ena stran, ki jo imam napisano v asp.net deluje.
Joj človek tebi res ni jasno kaj je SQL inject? Programski jezik kot sam po sebi ima zelo težko varnostno ranljivost (mogoče če bi bil problem v interpreterju samo ne ni). Gre samo in le za slabo/površno spisano aplikacijo v asp/asp.net. Si se vsaj potrudil prebrat linkano novico?
Never attribute to malice that which can be adequately explained by stupidity.
DejanL15> PHP programerji spišejo vse aplikacije brez napak, vsi ASP/ASP.net programerji pa naredijo veliko napak.
A ni nenavadno, da je SQL injection v PHP aplikacijah tako pogost (PHPNuke, Mambo, phpBB, Wordpress, tutos)? Je kriv PHP? Hja, je in ni, tako kot ASP(.net). Lahko bi lepše zavil SQL in s tem preprečil vrivanje nepripravljenih nizov v poizvedbo. Žal to počne zelo malo okolij za spletno ustvarjanje.
Tule NE GRE za nikakršno MS napako, ne v IIS, ne v ASP (.NET). Zakaj potem napadajo samo .asp in .aspx strani? Iz dveh razlogov verjetno: - MS SQL ima par featurjev, ki ga delajo primernega za tak napad - podpira dinamični sql, API (ADO(.NET)) podpira več sql stavkov znotraj enega ukaza (SELECT 1 AS ENA; SELECT 2 AS DVA; DROP TABLE Users :). Oba ta featurje izkorišča tale exploit. - Verjetno nesorazmerno visok delež nesposobnih web programerjev. Ciljam predvsem na ex-VB6 programerje, ki so iz VB6 presedlali na vbscript/VB.NET, pri tem pa jim nihče ni razložil razlike med windows in web aplikacijami.
Tole zadnje se kaže tudi v tem, da tale exploit dejansko rabi vsaj dve hudi varnostni luknji v aplikaciji - ranljivost za SQL injection napade in uporabo SQL userja s previsokimi privilegiji (SQL user, pod katerim teče spletna aplikacija, ne bi smel imeti pravic za SELECT na sistemskih tabelah)
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
Ja ja. MS ni nikoli kriv. Če po defaultu ne bi dovolil nevem česa vse, potem se take stvari ne bi dogajale. Čeprav je ta asp/asp.net tako super, da omogoča nevem kaj vse, ga kakšen preprost jezik kot je recimo C++ premaga. V hitrosti izvajanja ter tudi v delovanju. Tudi php je dovolj sposoben, da z njim naredimo vse, kar lahko z ASP.net, ampak php pač nima lukenj.
Večino so krivi programerji, se strinjam, vendar je čudno, da se sql injection pojavlja večinoma pri asp/asp.net programerjih pri php/perl/c++/python/.. pa ne.
@DejanL15: Pa si prepričan, da PHP nima lukenj? Ah, saj res, that's old.
Microsoft dejansko nima nič s to SQLi self-propagating kodo. Krivda je izključno na strani razvijalcev spletne aplikacije. Če že hočeš primerjavo poglej celo poplavo SQLi vrzeli v Joomla/Mambo/WP/PHP-Nuke/XOOPS... vtičnikih. Poskusi uganiti čigava je krivda.
Pri nas je bil krvi strašen webmojster ali oni pred njim, ki so pisali to s****e kaj imamo in ne MS. Ta traparija, pa mi je vzela cel dan da sem nazaj postavil bazo :(
DejanL15: ASP/ASP.net ni programski jezik. In C++ ni preprost - zaradi templatov in podobnih zadev ima tako zakomplicirano sintakso, da se ne da uporabiti navadnega LALR parserja. Nekaj je stvar jezika, ampak se vedno imas problem ce programer konkatenira nepreverjen vhod od uporabnika za nek SQL query in to lahko pocne kjerkoli.
iveco18: Z "SQL injection"-om, bi lahko v principu z enakimi privilgiji kot jih ima spletna stran izvajal poizvedbe na bazi. Odvisno od pravic, ampak teoreticno bi lahko zbrisal vse tabele ali pa dostopal do vseh (morebiti tajnih) podatkov. Ce so uporabniska imena in gesla shranjena v bazi, bi se lahko celo prijavil kot administrator v spletno aplikacijo.
Tukaj specificno so izrabljali nek feature od MS SQL-a in s tem nadomestili vse vrednosti tekstnih atributov, tako da so vsebovala referenco na neko JavaScript kodo. Najbrz so bile ravno zato tarca samo strani na IIS spletnih streznikih.
Ta JavaScript je potem pristal na vseh spletnih straneh, ki so uporabile podatek iz baze. Kar je povzrocilo, da se je pri ogledu strani ta koda z veliko verjetnostjo izvedla pri obiskovalcih. Stranski ucinek je pa seveda tudi to, da je mozno z googlom hitro najti problematicne strani.
Na prvi pogled je cudno zakaj so to sploh delali. Po drugi strani pa: SQL injection ti da sicer dostop do baze, ampak se vedno nimas popolne kontrole nad sistemom - slejkoprej se bo luknja zakrpala in takrat bo napadalec brez vsega. Ce podtaknes neko zlobno kodo, pa lahko najbrz na neki zelo obiskani strani (recimo UNICEF) hitro dobis veliko ranljivih obiskovalcev Se huje pa je, ce uporabniki strani bolj zaupajo ("Trusted sites"). Ce je pol miljona pohekanih spletnih streznikov, koliko mora biti potem sele shekanih obiskovalcev...
Pri nas je bil krvi strašen webmojster ali oni pred njim, ki so pisali to s****e kaj imamo in ne MS. Ta traparija, pa mi je vzela cel dan da sem nazaj postavil bazo :(
A si DB admin, da si moral obnavljati bazo? Če ja, potem si boš sedaj zapomnil: - da moraš vedno imeti pripravljen backup in ustrezne skripte za njegovo obnovitev (drop baze, restore, obnovitev pravic...) - da imaš ustrezno nastavljena dovoljenja za uporabnike na bazi. Če ti programerji težijo, da spletna aplikacija rabi kaj več, kot execute pravice na procedurah/funkcijah in select na viewih, jih pošlji v kurac
Ja ja. MS ni nikoli kriv.
MS je kriv za marsikaj, ampak v tem primeru pač ne. Očitno se ti sploh ne sanja, za kakšen exploit gre, tako da se vsaj malo informiraj, preden trolaš naprej. In nadaljuj s pisanjem spletnih aplikacij v 'preprostem' C++, če hočeš
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
Ja MS je dejansko kriv, ker je napisal windowse, kriva sta tudi INTEL in AMD ker sta naredila CPU. Krivi so tudi takšni kot ti, ki računalnike uporabljate , ...
Strinjam se, da so krivi programerji. Ampak dovoljenja po defaultu morajo biti taka, da kaj takšnega ne bi moralo biti možno.
frudi: Ne pišem v 'preprostem' C++. Pišem v php in asp.net.
Dovoljenja novega uporabnika so ponavadi po defaultu nikakrsna. Morda Read. Ce pa developer za aplikacijo ustvari uporabnika in mu pdeli vse pravice ...
Nov SQL user nima nikakršnih pravic (je samo v public vlogi). Kvečjemu sta potem kriva lahko: - programer, ker njegova aplikacija bere/piše direktno po tabelah. Tak programer nato teži DBA-ju, da mora SQL user za aplikacijo biti v db_datareader ali še kakšni bolj priviligirani vlogi, ker 'njemu se pa že ne da pisati grant select/execute skripte za vsak objekt posebej' - DBA, ker programerja ne pošlje v 3PM, ko mu pride težit s takšnimi zahtevami. Ali pa kar sam brez pomislekov novim SQL userjem dodeljuje previsoke pravice ('ja, komot je lahko na produkciji aplikacijski user v db_owner vlogi, zakaj pa ne?!')
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
Komot povem. Gre za to, da kar naprej od raznih Wintendo navdušencev poslušamo kako so Windowsi boljši, enostavnejši za uporabo in sploh in oh.
Problem je v tem, da je posledica takega pristopa da če dovolj časa klikaš - pa ne veš točno kaj delaš - na koncu ven pade neka na videz OK rešitev.
Posledično je večina Windows "administratorjev" precej neizobraženih in ker ne poznajo nekaterih osnov, ki se skrivajo pod klikanjem, ne znajo narediti varnih aplikacij.
Tisto prej sem rekel bolj v šali, resno pa mislim, da je kljub poplavi MSCE in ostalih MS-vseznalcev kvalitetne in strokovne Windows administratorje in programerje kar težko najti.
Saj ne rečem - tudi Linux sistemci so lahko precej nesposobni. Dejstvo pa je, da če nekdo na neko povprečno mašino uspe postaviti Debian Woody server gotovo veliko bolj razume delovanje računalnika, kot nekdo, ki gor naklika Wintendo GUI server... ali pa Ubuntu 2009 EasyClick. :-)
Mah, kljukci so lih vsepovsod. Ne tak dolgo nazaj sem se ubadal z enimi "znalci," ki so delali Joomla based stran za eno društvo, v katerem občasno kaj delam. In meli so precej simpl nalogo - narejeno grafično podobo spravit v css, zrihtat slikce in vse skup uploadat na naš hosting in inštalirat. Kljub popolnim navodilom, se je ustavilo že pri loginu na ftp, ker je pač njihov "strokovnjak" sam debelo gledal, kaj to ftp teži s tls-jem za gesla. Ajd, po dodatnem pojasnilu se mu je ratalo zlogirat in pol nekaj dni nič. Pa me kliče, da "nekaj ne dela" in grem sam pogledat. Sicer mu je ratalo uploadat stvari, sam pravice na datotekah niso štimale - in inštalacija Joomle je veselo krepala. Pa sem jih lepo odpustil. In takih "znalcev" je pri nas dovolj, tako da se sploh ne čudim, da prihaja do raznih incidentov. Če prodajalci spletnih rešitev ne razumejo osnov, pol kaj boljše ne more bit.
Aja, uradni razlog naveden z njihove strani je, da je kriv naš hosting. Na katerem se je bp do zdaj inštaliral wordpress, galerija za slike in php BB forum. Ponujena rešitev? Naj zamenjamo hosting za njihov
Man is condemned to be free; because once thrown into the world,
he is responsible for everything he does.
[J.P.Sartre]
Matthai: S tem kar si napisal implicitno zagovarjas security-through-obscurity: ker je OS A bolj obskuren (tezji za instalirati), se bo "administrator", ki mu ne bo takoj uspelo, raje odlocil za OS B in tako ne bo povzrocal "nevarnosti". Za home userje je to mogoce res, problem je samo, ce takemu cloveku v sluzbi recejo to pa to rabimo. Potem bo s "trial and error" prej ali slej namestil katerokoli zadevo ter jo potem katastrofalno administriral. Dokler ne bo kaj narobe pa tega po vecini itak ne bo nihce opazil. Enako velja za programerje.
Sicer pa ne vem kaj bi bilo pri Debianu toliko tezje v primerjavi z Ubuntu-jem - nekega globokega znanja racunalnistva, ce namestis katerikoli OS ne pokazes IMHO. Strinjam se, da so neizkuseni ljudje problem, ampak teh je dovolj v obeh taborih. Dober GUI je kul dokler ves kaj se v ozadju dogaja.