If you can't read please download the document
Taint Mode en Python
Embed Size (px)
344 x 292
429 x 357
514 x 422
599 x 487
Citation preview
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
LOAD MORE