View
183
Download
1
Category
Preview:
Citation preview
El poder de los reptilesHacer herramientas de hacking es fácil
>>> print(Me) https://twitter.com/ggdaniel http://cr0hn.com/me/
https://github.com/cr0hn/navajanegra
Aviso…
• Las ideas aquí presentadas son fruto de la experiencia e investigación propia.
• Las soluciones presentadas pueden no ser las mejores. Éstas son son solo mis propuestas
¿Por qué?
¿Por qué?
Hackers != desarrolladores
¿Por qué?
Hackers != desarrolladores
¿Por qué?
Hackers != desarrolladores
¿Por qué?
Las herramientas de hacking muy mal diseñadas (en general)
Aplicaciones no re-usables. Buenas prácticas… ¿qué es eso?
Tolerancia a fallos pésima
Obsesión por reinventar la rueda…
Hackers != desarrolladores
¿Por qué?
Las herramientas de hacking muy mal diseñadas (en general)
Aplicaciones no re-usables. Buenas prácticas… ¿qué es eso?
Tolerancia a fallos pésima
Obsesión por reinventar la rueda… why?! :)
Hackers != desarrolladores
¿De qué va esta charla?
Hacer movidas tope chungas con Python
Nociones de esenciales de desarrollo
Buenas prácticas
Como hacer puzzles de frameworks y cómo unirlos
¿De qué va esta charla?
Hacer movidas tope chungas con Python
Nociones de esenciales de desarrollo
Buenas prácticas
Como hacer puzzles de frameworks y cómo unirlos
Cómo hacer caca en Python
¿Qué vas a aprender?
Nociones de buenas prácticas
Organizar y crear tu herramienta de hacking
Casos concretos de uso
Ejemplos prácticos de cada uso
¿Porqué Python?
Fácil
Desarrollo muy rápido
Infinidad de librerías
Código limpio
Buena relación: tiempo desarrollo / rendimiento
¿Porqué Python 3.x?Python 2.7.x
No será evolucionado
Muchos problemas de unicode, textos, core…
Python 3
Es el futuro de Python
Incluye infinidad de nuevas características muy interesantes
¡Manos a la obra!
Muchas herramientas no pueden ser usadas con un “import”
Usarlas en nuestro código puede ser muy complicado
Solo pueden ser usadas en linea de comandos
Problema 1
Solución 1
Una correcta estructuración del proyecto
Diseñar nuestra aplicación pensando en la potabilidad
Cómo 1Wfuzz
theHardvester
Cómo 1Wfuzz
theHardvester
Cómo 1
Cómo 1
lib
Cómo 1
lib
Cómo 1
lib
doc
Cómo 1
lib doc
Cómo 1
lib doc
bin
Cómo 1
lib doc bin
Cómo 1
Cómo 1
Cómo 1
Cómo 1
setup.py
Cómo 1
setup.py
Cómo 1
setup.py
LICENSE
Cómo 1
setup.pyLICENSE
Cómo 1
setup.pyLICENSE
README.rst
Cómo 1
setup.pyLICENSE
README.rst
Cómo 1
setup.pyLICENSE
README.rst
__init__.py
Cómo 1
setup.pyLICENSE
README.rst__init__.py
Problema 2
Añadir nuevos parámetros de entrada
Cada cambio implica modificar mucho del código
Problema 2
Problema 2
Problema 2
Verbosity
Problema 2
Verbosity
Problema 2
Verbosity
1
Problema 2
Verbosity
1
2
Solución 2
Objeto contenedor de parámetros de aplicación
Posibilidad de comprobación exhaustiva de los parámetros
Cómo 2
Cómo 2
Cómo 2
Cómo 2
1
Problema 3
Obtención de resultados de ejecución no es sencilla
El mejor de los casos: parsear XML/JSON/YAML…
Problema 3
Problema 3
Problema 3
is_2_multiple
Problema 3
is_2_multiple
Problema 3
is_2_multiple12
3
Solución 3
Objeto contenedor de resultados.
Abstracción de resultado del formato de salida: XML/JSON…
Cómo 3
Cómo 3
Cómo 3
Cómo 3
1
Problema 4
Cada nueva UI implica cambiar mucho código.
Inclusión de nueva funcionalidad no es sencilla.
La aplicación no puede ser usada como librería.
Problema 4
Problema 4
Problema 4
Solución 4
Solución 4
Solución 4
API
Solución 4
API
Cómo 4
setup.pyLICENSE
README.rst__init__.py
Cómo 4
setup.pyLICENSE
README.rst__init__.py
api.py
Cómo 4
setup.pyLICENSE
README.rst__init__.pyapi.py
Cómo 4
Cómo 4
Cómo 4
Cómo 4
Cómo 4
Cómo 4
Cómo 4
12
Problema 5
Mostrar información por pantalla con un print(…)
Añadir nuevas localizaciones, además del print(…)
Enviar información a 2 localizaciones concurrentemente
Problema 5
Problema 5
Problema 5
Problema 5
Problema 5
1
Problema 5
12
Problema 5
Problema 5
Problema 5
Problema 5
Problema 5
12
Problema 5
Problema 5
Problema 5
1
32
4
Solución 5
Punto de entrada unificado a los medios de salida
Solución 5
Solución 5
Hello world
Solución 5
Hello world
Cómo 5
Cómo 5
12
3
Cómo 5
Cómo 5
Cómo 5
Cómo 5
Problema 6
Instalar dependencias es muy tedioso
Cada dependencias tiene su web oficial y su forma de instalarse
Solución 6
Usar pip para instalar dependencias
Usar un fichero de dependencias: requirements.txt
Cómo 6
setup.pyLICENSE
README.rst__init__.pyapi.py
Cómo 6
setup.pyLICENSE
README.rst__init__.py
requirements.txt
api.py
Cómo 6
setup.pyLICENSE
README.rst__init__.pyapi.py
requirements.txt
Cómo 6
Cómo 6
Problema 7
Las dependencias cruzadas entre proyectos.
Varias versiones de una misma libraría en el sistema.
Acceso como administrador.
Solución 7
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Un espacio virtual…?
Solución 7¿Y en Python?
Cómo 7
Cómo 7
Problema 8
Python es mucho más lento que otros lenguajes
No no tiene coroutines integradas en el framework
Problema 8
Python es mucho más lento que otros lenguajes
No no tiene coroutines integradas en el framework
¡¡¡¿¿Co..rru..ti….. queeee??!!!
Problema 8
Python es mucho más lento que otros lenguajes
No no tiene coroutines integradas en el framework
¡¡¡¿¿Co..rru..ti….. queeee??!!!
Problema 8
Problema 8def hello_coroutine(…):
return get_web_page(…)
Problema 8def hello_coroutine(…):
return get_web_page(…)
… hello_coroutine() …
Run!
Problema 8def hello_coroutine(…):
return get_web_page(…)
… hello_coroutine() …
Run! get_web_page()1
Problema 8def hello_coroutine(…):
return get_web_page(…)
… hello_coroutine() …
Run! get_web_page()1
<—Respuesta
Problema 8def hello_coroutine(…):
return get_web_page(…)
… hello_coroutine() …
Run! get_web_page()1
return get_web_page()
<—Respuesta
2
Solución 8
Usar la librería asyncio (a.k.a. Tulip), incluida en Python 3.4
Instalarla en versiones anteriores de Python 3.4
Cómo 8
Cómo 8
Cómo 8
Bloqueo
Cómo 8
Bloqueo
Cómo 8
Bloqueo
NO bloqueante
Problema 9
Python NO tiene multithreading real.
Los hilos no son realmente hilos, sino una simulación.
GIL (Global Interpreter Lock)
CTRL+C
Problema 9
GIL
thread 1
T0
thread 2
Problema 9
GIL
thread 1
T1
thread 2
Problema 9
GIL
thread 1
T2
thread 2
Problema 9
GIL
thread 1
thread 2
T3
Problema 9
GIL
thread 1
thread 2
T4
Solución 9
Usar multiprocessing
Cómo 9Multithreading
Cómo 9Multithreading
Cómo 9Multithreading
Cómo 9Multiprocessing
Cómo 9Multiprocessing
Cómo 9Multiprocessing
Problema 10
Ejecución de tareas en backgound
Ejecución de procesos muy costosos computacionalmente
Creación un flujo de información entre tareas
Solución 10
Usar Celery
Solución 10Pero… ¿Qué es eso de Celery? ¿Se come?
Solución 10Pero… ¿Qué es eso de Celery? ¿Se come?
Solución 10
Gestor de tareas distribuido
Consumidor3
Solución 10
Tarea Generadora
Consumidor1
Consumidor2Gestor de colas
Conceptualmente
Consumidor3
Solución 10
Tarea Generadora
Consumidor1
Consumidor2Gestor de colas
Conceptualmente
Consumidor3
Solución 10
Tarea Generadora
Consumidor1
Consumidor2Gestor de colas
Conceptualmente
Consumidor3
Solución 10
Tarea Generadora
Consumidor1
Consumidor2Gestor de colas
Conceptualmente
Registrar visita
Solución 10
Enviar email
Enviar email
Caso concreto
Registrar visita
Solución 10
Enviar email
Enviar email
Caso concreto
send_mail(“text”)
Registrar visita
Solución 10
Enviar email
Enviar email
Caso concreto
send_mail(“text”)
Registrar visita
Solución 10
Enviar email
Enviar email
Caso concreto
send_mail(“text”)
Registrar visita
Solución 10
Enviar email
Enviar email
Caso concreto
send_mail(“text”)
Cómo 10
Tasks Servidor broker
Cómo 10
Cómo 10
Cómo 10
Cómo 10
Cómo 10
celery.py
Cómo 10
celery.py
Cómo 10
Cómo 10
main_task.py
Cómo 10
main_task.py
Cómo 10
main_task.py
__init__.py
Cómo 10
main_task.py
__init__.py
Cómo 10
celery.py
Cómo 10
celery.py
__init__.py
Cómo 10
celery.py
__init__.py
Cómo 10
celery.py
__init__.py
celeryconfig.py.py
Cómo 10
celery.py
__init__.py
celeryconfig.py
Cómo 10celeryconfig.py
Cómo 10celeryconfig.py
Cómo 10celeryconfig.py
Cómo 10celery.py
Cómo 10celery.py
Cómo 10celery.py
Cómo 10main_task.py
Cómo 10main_task.py
Cómo 10main_task.py
Cómo 10“pseudo-demo”
Cómo 10“pseudo-demo”
Cómo 10“pseudo-demo”
Cómo 10“pseudo-demo”
Cómo 10“pseudo-demo”
Problema 11
Quiero que se ejecuten tareas cada X tiempo
Solución 11
Usar Celery beat
Cómo 11celeryconfig.py
Cómo 11celeryconfig.py
Cómo 11celeryconfig.py
Cómo 11celeryconfig.py
Cómo 11celeryconfig.py
Cómo 11celeryconfig.py
Cómo 11celeryconfig.py
Mini ejemplo: Análisis de Malware “cutre”
Mini ejemploCelery + Yara
Mini ejemplomain_task.py
Mini ejemplomain_task.py
Mini ejemplomain_task.py
Mini ejemplomain_task.py
export.py
Mini ejemplomain_task.py
export.py
Mini ejemplo
start.py
Mini ejemplo
start.py
Recommended