Transcript of Taint Mode en Python
- 1. TaintMode en Python
-
- Cmo encontrar vulnerabilidades mediante el uso de variables
manchadas
Juan Jos Conti [email_address] http://www.juanjoconti.com.ar
- 2. Presentacin
- No soy un experto en seguridad
- Inquietud (codificacin segura)
- 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
- 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
- 10. dyntaint.py
- untrusted / untrusted_args
- 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
- 20. Invitacin
- Intentar aplicarlo a distintos frameworks
- Participar de la lista de correos
-
- http://groups.google.com/group/ python-taint
- 21. Preguntas?
- 22. Muchas gracias!
-
- http://www.juanjoconti.com.ar/taint