codecamp 2010 | diez formas de escribir código (in)seguro

40
1

Upload: microsoft-argentina-y-uruguay-official-space

Post on 16-Apr-2017

982 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: CodeCamp 2010 | Diez formas de escribir código (in)seguro

1

Page 2: CodeCamp 2010 | Diez formas de escribir código (in)seguro

3

b1010 formas de escribir código (in)seguro

Lic. Cristian Borghello, CISSP - [email protected]

Page 3: CodeCamp 2010 | Diez formas de escribir código (in)seguro

4

Ud. puede: Copiar, distribuir, exhibir, y ejecutar la obra

Hacer obras derivadas

Bajo las siguientes condiciones:Atribución. Debe atribuir la obra en la forma especificada por el autor

No Comercial. No puede usar esta obra con fines comerciales.

Compartir Obras Derivadas Igual. Si altera, transforma, o crea sobre esta obra, sólo podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta.

http://creativecommons.org/licenses/by-nc-sa/2.5/ar/

Licencia de uso:Creative Commons 2.5

Page 4: CodeCamp 2010 | Diez formas de escribir código (in)seguro

5

TemarioRiesgoRedes externas vs internasBugs “simples”Validación de archivosXSS y SQL InjectionCookiesControl en producciónConclusiones

Page 5: CodeCamp 2010 | Diez formas de escribir código (in)seguro

7

Cuando hablamos de Seguridad, en realidad

¿de qué hablamos?

R I E S G O

Page 6: CodeCamp 2010 | Diez formas de escribir código (in)seguro

9

Superficie de ataque

Administradores UsuariosAutenticados

Anónimos

Remoto

Restringido

Local

Page 7: CodeCamp 2010 | Diez formas de escribir código (in)seguro

11

Redes Internas vs Externas

Se ingresa a Intranet, sitios de backend o de administración a través de URL públicasProblemas asociados:

El enemigo interno y el abuso de conocimientoEl descubrimiento “fortuito” de personal externo

Si sólo personal interno conoce el acceso, entonces nadie podrá acceder desde el exterior

Page 8: CodeCamp 2010 | Diez formas de escribir código (in)seguro

12

Redes Internas vs Externas

Page 9: CodeCamp 2010 | Diez formas de escribir código (in)seguro

13

Bugs ”simples”Encontramos un pequeño bug que podríamos resolver en un momento pero nos llevaría más tiempo implementarlo en producción que arreglarlo,así que…

lo dejamos así, total funciona

Page 10: CodeCamp 2010 | Diez formas de escribir código (in)seguro

14

Bugs ”simples”Resolvemos el bug y realizamos una vaga descripción de la resolución porque resulta demasiado complicado explicarlo

No detallamos los pasos para reproducir el error porque son triviales o muy complicados

Page 11: CodeCamp 2010 | Diez formas de escribir código (in)seguro

15

Bugs “solucionado”

Page 12: CodeCamp 2010 | Diez formas de escribir código (in)seguro

16

Validación de archivos

Falta de validación de archivos incluidos o subidos permiten la ejecución de los mismos en el servidor local o remotoSe debe validar y rechazar cualquier tipo de archivo MIME no permitido

Cargo los archivos en forma dinámica en tiempo de ejecución. ¡Qué buena idea!

Page 13: CodeCamp 2010 | Diez formas de escribir código (in)seguro

17

RFI y LFI

Page 14: CodeCamp 2010 | Diez formas de escribir código (in)seguro

18

Inyección de archivos

Page 15: CodeCamp 2010 | Diez formas de escribir código (in)seguro

19

“Validación” al subir archivos

Page 16: CodeCamp 2010 | Diez formas de escribir código (in)seguro

20

Evitar RFI y LFIUrlScan por defecto bloquea: exe, bat, cmd, com, htw, ida, idq, htr, idc, printer, ini, pol, dat, etc.En PHP se puede utilizar Mod_Security y/o SushosinTodas las validaciones se deben realizar en ambos lados: cliente y servidor

Page 17: CodeCamp 2010 | Diez formas de escribir código (in)seguro

21

XSS – Cross-Site ScriptEjecución de código no validado en el cliente a través de la inyección del mismo por diversos métodos

Page 18: CodeCamp 2010 | Diez formas de escribir código (in)seguro

22

Las galletitas

Page 19: CodeCamp 2010 | Diez formas de escribir código (in)seguro

23

Las galletitas

Las cookies pueden ser obtenidas desde el cliente a través de scripts sencillos y a través de ataques XSSSi el browser soporta HTTP-Only, se puede bloquear la lectura y escritura de las cookies en el cliente

Programar, comer y beber¡That’s life!

Page 20: CodeCamp 2010 | Diez formas de escribir código (in)seguro

24

XSS y Phishing

Page 21: CodeCamp 2010 | Diez formas de escribir código (in)seguro

25

Control de Cookies

Sin HTTP-Only

Con HTTP-Only

Controlar la información en las cookiesImplementar HTTP-Only

Page 22: CodeCamp 2010 | Diez formas de escribir código (in)seguro

26

Navegadores con HTTP-Only

http://www.owasp.org/

Page 23: CodeCamp 2010 | Diez formas de escribir código (in)seguro

27

Cross Domain RequestLos archivos no alcanzaron así que cargamos img, frames, forms, CSS, JS, etc. desde múltiples dominios

Cross-site HTTP requests: solicitudes HTTP que se realizan desde diferentes dominiosLa W3C ha propuesto un nuevo estándar para controlar el Cross Domain Request

Todos los navegadores lo soportan excepto Opera (por ahora)

Page 24: CodeCamp 2010 | Diez formas de escribir código (in)seguro

28

X-Frame Origin

Frame

Page 25: CodeCamp 2010 | Diez formas de escribir código (in)seguro

29

RIA: Rich Internet Applications

Las aplicaciones no se validan porque no tienen vulnerabilidades, o las mismas no pueden explotarse

Page 26: CodeCamp 2010 | Diez formas de escribir código (in)seguro

30

Dos políticas a implementar

Mismo origen: si dos sitios comparten el mismo [protocolo:puerto] entonces tienen el mismo origenPuede ser utilizado para restringir la ejecución sólo desde dominios válidosSandBox: la ejecución se realiza en un entorno controlado y no se accede a recursos que no han sido específicamente autorizadosLos procesos son considerados de “baja integridad” y no pueden acceder a procesos de integridad mayor (MIC y UIPI)

Page 27: CodeCamp 2010 | Diez formas de escribir código (in)seguro

31

URL RedirectPara controlar los “abandonos”de mi sitio, redirecciono a sitios externos mediante un script

Page 28: CodeCamp 2010 | Diez formas de escribir código (in)seguro

32

Bad URL Redirect

Page 29: CodeCamp 2010 | Diez formas de escribir código (in)seguro

33

Control de URLRegistrar y administrar las URL del sitio

¿Ya dije que las validaciones se deben hacer de ambos lados?

Page 30: CodeCamp 2010 | Diez formas de escribir código (in)seguro

34

Control de URL y Salt

Intentar utilizar HMAC para generar datos codificados y checksum en información sensible

Ponele SALT a tu vida

Page 31: CodeCamp 2010 | Diez formas de escribir código (in)seguro

35

SQL Injection

Page 32: CodeCamp 2010 | Diez formas de escribir código (in)seguro

36

SQL Injection

Creo que ya lo dije: las validaciones se deben hacer de ambos lados

Page 33: CodeCamp 2010 | Diez formas de escribir código (in)seguro

37

Testing en producciónEl testing es rápido así que lo realizamos en el servidor productivo

El desarrollo y el testing debenrealizarse en servidores != producción

Page 34: CodeCamp 2010 | Diez formas de escribir código (in)seguro

38

Asumir que cualquier entrada es maliciosa

Validar todas las entradas

Validar todas las salidas

Codificar cada entrada y salida

Utilizar aplicaciones para validación

Validar permisos de la aplicación y sus usuarios

Conclusiones y pasos a aplicar

Page 35: CodeCamp 2010 | Diez formas de escribir código (in)seguro

39

Finalmente: mi preferidaSin palabras…

Page 36: CodeCamp 2010 | Diez formas de escribir código (in)seguro

40

ReferenciasMicrosoft Security Development Lifecycle v5http://bit.ly/9piMph Threat Analysis and Modeling (TAM) v3http://bit.ly/cTP0Uq FoundStone Free Toolshttp://bit.ly/aep4qsWebGoathttp://bit.ly/btPp9n Damn Vulnerable Web App (DVWA) http://bit.ly/9NeO8F Writing Secure Codehttp://amzn.to/aEytaE Sanitize HTMLhttp://bit.ly/b9fn0R URLScanhttp://bit.ly/aX8V4X Practical Windows Sandboxing (3 partes)http://bit.ly/adWAIW - http://bit.ly/cBgWW9 - http://bit.ly/9lSw97

Page 37: CodeCamp 2010 | Diez formas de escribir código (in)seguro

41

Preguntas

Lic. Cristian Borghello, CISSP - [email protected]

Page 38: CodeCamp 2010 | Diez formas de escribir código (in)seguro

42

Los mejores proyectos de las células Microsoft, los grupos de investigación de

estudiantes, son seleccionados para participar en el espacio del DEMOFEST.

¡Conócelos!

Participá del DEMOFEST

Page 39: CodeCamp 2010 | Diez formas de escribir código (in)seguro

43

Necesitamos tu Feedback!

Completá los FORM de avaluación que estarán en nuestra WEB:www.codecamp.com.arNecesitamos de tu feedback para mejorar.

Page 40: CodeCamp 2010 | Diez formas de escribir código (in)seguro

44

© 2008 Microsoft Corporation. Todos los derechos reservados. Microsoft, Windows, Windows Vista y otros nombres de producto son y pueden ser marcas registradas y registros en Estados

Unidos y en otros países.La información contenida en el presente es sólo para fines informativos y representa la visión actual de Microsoft Corporation a la fecha de esta presentación. Debido a que Microsoft debe

responder a las cambiantes condiciones del mercado, no se debe interpretar como un compromiso por parte de Microsoft, y Microsoft no puede garantizar la precisión de ninguna

información provista después de la fecha de esta presentación. MICROSOFT NO OFRECE GARANTÍA ALGUNA, EXPRESA, IMPLÍCITA O DE LEY, RESPECTO A LA INFORMACIÓN EN ESTA

PRESENTACIÓN.