Taint Mode en Python

  • Upload
    jjconti

  • View
    334

  • Download
    0

Embed Size (px)

Citation preview

  1. 1. TaintMode en Python
      • Cmo encontrar vulnerabilidades mediante el uso de variables manchadas
    Juan Jos Conti [email_address] http://www.juanjoconti.com.ar
  2. 2. Presentacin
    • No soy un experto en seguridad
    • Desarrollador
    • Inquietud (codificacin segura)
    • Kozlov D. y Petukhov A.
    • Mdulo Python
  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
    • Fuentes no confiables / variables manchadas
    • Funciones limpiadoras
    • Sumideros sensibles
  5. 5. Si un valor manchado alcanza un sumidero sensible, entonces existe una vulnerabilidad en el programa.
  6. 6. 42or 1=1
  7. 7.
  8. 8. Si un valor con una mancha X alcanza un sumidero sensible a X, entonces existe una vulnerabilidad en el programa.
  9. 9. Implementacin
    • Dinmico
    • from dyntaint import *
    • Decoradores
  10. 10. dyntaint.py
    • TAINTED
    • STR class
    • untrusted / untrusted_args
    • cleaner
    • ssink
  11. 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. 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 defdesde_el_exterior(): ... importweb 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("Usar negrita ") 'Usar negrita' >>> texto_plano("Sin manchas") '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="sqlite", 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 lineaNdel archivoX Valor manchado:M -------------------------------------------- if os.path.exists (f): wiki = open (f).read() doc = self.form(name, wiki) ==> return skeleton (M) ============================================
  19. 19. Algunas cosas ms
    • Batera de tests
    • reached
    • Abort?
    • @validator
    • tainted/taint
  20. 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. 21. Preguntas?
  22. 22. Muchas gracias!
      • Contacto:
      • Ms informacin:
      • http://www.juanjoconti.com.ar/taint