MySQL Proxy lukker for SQL-injektioner

Et script skrevet i sproget Lua kan sammen med proxy-programmet MySQL Proxy sætte hul for forsøg på at sprøjte ondsindet kode i databasen.

Et lille script skrevet i sproget Lua kan sætte en stopper for hackeres forsøg på at indsprøjte giftige sager i den populære open source database MySQL.

Scriptet gør programmet MySQL Proxy i stand til at blokere for den ondsindede kode.

MySQL Proxy er et program, som lever mellem klienten og database-serveren. Det kan overvåge, analysere og transformere kommunikationen mellem de to parter. Det benyttes blandt andet til loadbalancing og filtrering.

Scriptet, som er skrevet af programmøren Stefan Esser, der er ekspert i PHP-sikkerhed, tjekker SQL-forespørgsler for mistænkeligt indhold, skriver PHPInfo.

Hvis forespørgslen indeholder slemme ting, udføres kommandoen ikke, men i stedet sendes der en fejlmeddelelse til klienten. Scriptet til MySQL Proxy kan downloades fra Stefan Essers blog via det eksterne link herunder.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (6)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Christian Schmidt

MySQL Proxy lyder meget tillokkende, men programmets hjemmeside gør desværre ikke så meget ud af at fortælle, at det yder dårligt under selv moderat belastning (20 parallelle tråde):

http://pero.blogs.aprilmayjune.org/2008/05/05/benchmark-mysql-proxy-and-...

Det skal siges, at jeg ikke selv har erfaring med MySQL Proxy - jeg skrinlagde projektet efter at have læst ovennævnte undersøgelse.

  • 0
  • 0
Jarnis Bertelsen

Kunne man ikke implementere samme funktionalitet som klasser for Java, .Net etc., der kørte under diverse applikationsservere. Ville det ikke være mere hensigtsmæssigt, hvis webapplikationen kørte under et af disse miljøer, så man slap for at have en seperat service kørende?

  • 0
  • 0
Torben Mogensen Blogger

Hvordan ser man om en SQL-forespørgsel er ondsindet? Legitime programmer kan jo sagtens opdatere en database og ondsindede programmer kan sagtens nøjes med at læse fra den (for at finde kundeoplysninger e.lign.).

Så enhver metode, der udelukkende ser på de SQL-forespørgselstegnfølger, der sendes til databasen, må i sagens natur være upræcis.

Kernen i problemet er, at både SQL nøgleord og parametre til disse sendes som en sammensat tegnfølge til databasen. I stedet burde man bruge enten et delsprog i kildesproget (som f.eks. Linq) eller opbygge en (typesikker) datastruktur, hvor parametre er adskilt fra nøgleord. Denne struktur vil minde om et syntakstræ, og det er også stort set sådan Linq er implementeret.

  • 0
  • 0
Christian Schmidt

Kunne man ikke implementere samme funktionalitet som klasser for Java, .Net etc., der kørte under diverse applikationsservere.

Jo - men det kan være et betydeligt arbejde at implementere det i allerede eksisterende applikationer. Det er man fri for, hvis man bruger MySQL Proxy, hvor man simpelthen kobler sig på forbindelsen mellem applikation og databaseserver.

Så enhver metode, der udelukkende ser på de SQL-forespørgselstegnfølger, der sendes til databasen, må i sagens natur være upræcis.

Enig - det er en uskøn sikkerhedsmekanisme, der kan vise sig at introducere nogle subtile fejl. Men i praksis det kan være et udmærket ekstra bolværk mod hackere, script kiddies m.fl., hvis der skulle være en (uopdaget) sårbarhed i applikationen. Visse udbredte webapplikationer har en lang og sørgelig historie mht. sikkerhedshuller, så her vil ekstra bestræbelser på at gardere sig mod SQL-injection være på sin plads.

Det betyder så også, at man kan risikere at afvise en gyldig forespørgsel i ny og næ, jf. http://xkcd.com/327/, men i praksis vil det nok ske ret sjældent.

  • 0
  • 0
Rasmus Morten Helbig Hansen

Nu kan man jo lige læse det lille lua script. Det benytter proxy.tokenize - og ikke bare noget regexp. Dernæst fjernes forespørgsler med sleep, benchmark, information_schema, comment og union tokens, hvilket alle er almindeligt brugt ifbm angreb. Det burde ikke give problemer under normalt brug.

Ydelse i MySql Proxy er iøvrigt forbedret ifølge samme blog som refereret til. Ellers kan man jo bare bidrage til proxy projektet, eller hvad?

  • 0
  • 0
Henrik Kramshøj Blogger

Ja det er så dejligt lille og overskueligt det script ... på grænsen til at jeg vil kalde det for naivt.

Det ENESTE der virker er inputvalidering og positivlister.

Inputvalidering skal foretages af applikationsudvikleren, som er den eneste der kender data godt nok til at foretage dette.

Positivlister, fordi det simpelthen ikke giver mening at opremse dårlige ting - det giver ikke sikkerhed at opremse dårlige ting som vi kender nu, det vil være et evigt kapløb med de dårlige ting vi ikke kender.

Mht at sikre sig mod SQL injections anbefales det at man ser på prepared statements, som sikrer mod at der tilføjes til SQL, idet kun parametre til eksisterende SQL statements tillades.

Dernæst bør man se på www.OWASP.org og jeg anbefaler papers fra www.ngssoftware.com - eller søg på "litchfield SQL injection" David Litchfield har skrevet en del om dette.

Læs evt. http://www.ranum.com/security/computer_security/editorials/dumb/
The Six Dumbest Ideas in Computer Security af Marcus Ranum
hvor enumerating badness er #2

Hvis man så til allersidst ønsker at filtrere på sit website kan man købe Apache Security af Ivan Ristic, som blandt andet omhandler mod_security der er et generelt modul til apache der kan filtrere requests.

  • 0
  • 0
Log ind eller Opret konto for at kommentere