Taint Mode en Python

334
-1

Published on

Taint Mode en Python o cómo encontrar vulnerabilidades mediante el uso de variables manchadas. Presentado en PyCon Argentina 2009.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
334
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Taint Mode en Python

  1. 1. Taint Mode en Python <ul><ul><li>Cómo encontrar vulnerabilidades mediante el uso de variables manchadas </li></ul></ul>Juan José Conti [email_address] http://www.juanjoconti.com.ar
  2. 2. Presentación <ul><li>No soy un experto en seguridad </li></ul><ul><li>Desarrollador </li></ul><ul><li>Inquietud (codificación segura) </li></ul><ul><li>Kozlov D. y Petukhov A. </li></ul><ul><li>Módulo Python </li></ul>
  3. 3. “ El objetivo de Taint Mode es alertar a los desarrolladores de potenciales problemas de seguridad en su software.”
  4. 4. El modelo de las manchas <ul><li>Fuentes no confiables / variables manchadas </li></ul><ul><li>Funciones limpiadoras </li></ul><ul><li>Sumideros sensibles </li></ul>
  5. 5. “ Si un valor manchado alcanza un sumidero sensible, entonces existe una vulnerabilidad en el programa.”
  6. 6. “ 42 or 1=1”
  7. 7. “ <script> alert('hola') </script>”
  8. 8. “ Si un valor con una mancha X alcanza un sumidero sensible a X, entonces existe una vulnerabilidad en el programa.”
  9. 9. Implementación <ul><li>Dinámico </li></ul><ul><li>from dyntaint import * </li></ul><ul><li>Decoradores </li></ul>
  10. 10. dyntaint.py <ul><li>TAINTED </li></ul><ul><li>STR class </li></ul><ul><li>untrusted / untrusted_args </li></ul><ul><li>cleaner </li></ul><ul><li>ssink </li></ul>
  11. 11. dyntaint.py KEYS = [XSS, SQLI, OSI, II] = range (4) TAINTED = dict ([(x, set ()) for x in KEYS]) class STR( str ): ... <ul><li>Extiende str para agregar las funcionalidades necesarias para seguir las manchas a través de las operaciones </li></ul><ul><li>Sobreescribe ~30 métodos de str </li></ul>
  12. 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. 13. Valores no confiables untrusted @untrusted def desde_el_exterior(): ... import web web.input = untrusted( web.input )
  14. 14. Valores no confiables untrusted_args class MyProtocol(LineOnlyReceiver): @untrusted_args([1]) def lineReceived(self, line): self.doSomething(line)
  15. 15. cleaner >>> texto_plano(&quot;Usar <b> negrita </b> &quot;) 'Usar negrita' >>> texto_plano(&quot;Sin manchas&quot;) 'Sin manchas' @cleaner(XSS) def texto_plano(input): ... texto_plano = cleaner(XSS) (texto_plano)
  16. 16. ssink eval = ssink(II)( eval ) @ssink(II) def suma(a,b) return eval('%s + %s' % (a,b))
  17. 17. import web db = web.database(dbn=&quot;sqlite&quot;, db=DBNAME) db.delete = ssink(SQLI)( db.delete ) db.select = ssink(SQLI)( db.select ) db.insert = ssink(SQLI)( db.insert ) ssink
  18. 18. Salida ============================================ Advertencia en la linea N del archivo X Valor manchado: M -------------------------------------------- if os.path.exists (f): wiki = open (f).read() doc = self.form(name, wiki) ==> return skeleton (M) ============================================
  19. 19. Algunas cosas más <ul><li>Batería de tests </li></ul><ul><li>reached </li></ul><ul><li>Abort? </li></ul><ul><li>@validator </li></ul><ul><li>tainted/taint </li></ul>
  20. 20. Invitación <ul><li>Problemas? </li></ul><ul><li>Pensar cómo seguimos </li></ul><ul><li>Intentar aplicarlo a distintos frameworks </li></ul><ul><li>Participar de la lista de correos </li></ul><ul><ul><li>http://groups.google.com/group/ python-taint </li></ul></ul>
  21. 21. ¿Preguntas?
  22. 22. ¡Muchas gracias! <ul><ul><li>Contacto: </li></ul></ul><ul><ul><li><jjconti@gmail.com> </li></ul></ul><ul><ul><li>Más información: </li></ul></ul><ul><ul><li>http://www.juanjoconti.com.ar/taint </li></ul></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×