taint mode en python
TRANSCRIPT
- 1. TaintMode en Python
-
- Cmo encontrar vulnerabilidades mediante el uso de variables manchadas
-
- 2. Presentacin
- No soy un experto en seguridad
- Desarrollador
- Inquietud (codificacin segura)
- Kozlov D. y Petukhov A.
- Mdulo Python
- 3. El objetivo de Taint Mode es alertar a los desarrolladores de potenciales problemas de seguridad en su software.
- 4. El modelo de las manchas
- Fuentes no confiables / variables manchadas
- Funciones limpiadoras
- Sumideros sensibles
- 5. Si un valor manchado alcanza un sumidero sensible, entonces existe una vulnerabilidad en el programa.
- 6. 42or 1=1
- 7.
- 8. Si un valor con una mancha X alcanza un sumidero sensible a X, entonces existe una vulnerabilidad en el programa.
- 9. Implementacin
- Dinmico
- from dyntaint import *
- Decoradores
- 10. dyntaint.py
- TAINTED
- STR class
- untrusted / untrusted_args
- cleaner
- ssink
- 11. dyntaint.py KEYS= [XSS, SQLI, OSI, II] =range (4) TAINTED
=dict ([(x,set ())forxinKEYS]) classSTR( str ): ...
- Extiende str para agregar las funcionalidades necesarias paraseguir las manchas a travs de las operaciones
- Sobreescribe ~30 mtodos de str
- 12. Taint Flow a # manchada b # limpia c=a+b# ahora c est manchada a * 8 a[3:10] esta %s limpio? % a a.upper() a.split(',')
- 13. Valores no confiables untrusted @untrusted defdesde_el_exterior(): ... importweb web.input =untrusted( web.input )
- 14. Valores no confiables untrusted_args class MyProtocol(LineOnlyReceiver): @untrusted_args([1]) def lineReceived(self, line): self.doSomething(line)
- 15. cleaner >>> texto_plano("Usar negrita ") 'Usar negrita' >>> texto_plano("Sin manchas") 'Sin manchas' @cleaner(XSS) def texto_plano(input): ... texto_plano =cleaner(XSS) (texto_plano)
- 16. ssink eval =ssink(II)( eval ) @ssink(II) def suma(a,b) return eval('%s + %s' % (a,b))
- 17. import web db = web.database(dbn="sqlite", db=DBNAME) db.delete =ssink(SQLI)( db.delete ) db.select =ssink(SQLI)( db.select ) db.insert =ssink(SQLI)( db.insert ) ssink
- 18. Salida ============================================ Advertencia en la lineaNdel archivoX Valor manchado:M -------------------------------------------- if os.path.exists (f): wiki = open (f).read() doc = self.form(name, wiki) ==> return skeleton (M) ============================================
- 19. Algunas cosas ms
- Batera de tests
- reached
- Abort?
- @validator
- tainted/taint
- 20. Invitacin
- Problemas?
- Pensar cmo seguimos
- Intentar aplicarlo a distintos frameworks
- Participar de la lista de correos
-
- http://groups.google.com/group/ python-taint
- 21. Preguntas?
- 22. Muchas gracias!
-
- Contacto:
-
- Ms informacin:
-
- http://www.juanjoconti.com.ar/taint
-