Arquitectura de aplicaciones open source: 500 líneas o menos
- June 1, 2016
- tuxotron
500 líneas o menos (500 lines or less) es un nuevo volumen de la serie Architecture of Open Source Applications. En esta serie de libros, constituida actualmente por 3 volúmenes, tratan la sobre la arquitectura, infraestructura, escalabilidad, etc, de ciertas aplicaciones de código abierto bien conocidas. En el último volumen, el cuarto de la serie, 500 líneas o menos se enfoca más al diseño desde el punto de vista del desarrollador.
Este último volumen no ha alcanzado aún su fase final, pero su contenido está disponible.
Los volúmenes también están disponibles de forma gratuita, y si lo prefieres siempre puedes comprar una copia en papel, pdf, epub o para Kindle y de camino apoyar el proyecto.
Puedes acceder al contenido de los tres primeros libros:
The architecture of open source applications: Elegance, evolution and, a few fearless hacks
The architecture of open source applications: Structure, scale, and a few more fearless hacks
The performance of open source applications: Speed, precision, and a bit of serendipity.
Material de Hack In The Box Amsterdam 2016
- May 28, 2016
- tuxotron
- CLOSING KEYNOTE - Sophia D Antoine - Hardware Side Channels in Virtualized Environments.pdf
- D1 COMMSEC - Elisabeth de Leeuw - Unformation in the Era of Hyper Connectivity.pdf
- D1 COMMSEC - Marc Newlin - Applying Regulatory Data to IoT RF Reverse Engineering.pdf
- D1 COMMSEC - Martin Knobloch - Don't Feed the Hippos.pdf
- D1 COMMSEC - Nadav Markus and Gal De Leon - Exploiting GLIBC - Hacking Everything.pdf
- D1T1 - Jacob Torrey - Using the Observer Effect and Cyber Fengshui.pdf
- D1T1 - Lin Huang - Forcing a Targeted LTE Cellphone into an Eavesdropping Network.pdf
- D1T1 - Nick Biasini - Exploit Kits - Hunting the Hunters .pdf
- D1T1 - Radu Caragea - Peering into the Depths of TLS Traffic in Real Time.pdf
- D1T1 - Shengping Wang and Xu Liu - Escape From The Docker-KVM-QEMU Machine.pdf
- D1T1 - Tang Qing Hao - Virtualization System Vulnerability Discovery Framework.pdf
- D1T2 - Broderick Aquilino and Wayne Low - Kernel Exploit Hunting and Mitigation.pdf
- D1T2 - Chilik Tamir - Profiting from iOS Malware.pdf
- D1T2 - Michele Spagnuolo and Lukas Weichselbaum - CSP Oddities.pdf
- D1T2 - Seunghun Han - Create Your Own Bad USB Device.pdf
- D1T2 - Tim Xia - Adaptive Android Kernel Live Patching.pdf
- D1T2 - Yann Allain and Julien Moinard - Hardsploit Project.pdf
- D1T3 - Gustavo Grieco - Vulnerability Discovery Using Machine Learning.pdf
- D1T3 LABS - Anto Joseph - Droid-FF.pdf
- D1T3 LABS - Tony Trummer and Tushar Dalvi - Mobile Application Security for iOS and Android.zip
- D2 COMMSEC - Mattijs van Ommeren - A Series Of Unfortunate Events - Where Malware Meets Murphy.pdf
- D2T1 - Anders Fogh - Cache Side Channel Attacks.pdf
- D2T1 - Felix Wilhelm - Attacking Next Generation Firewalls.pdf
- D2T1 - Jun Li - CANSsee - An Automobile Intrusion Detection System.pdf
- D2T1 - Yuwei Zheng and Haoqi Shan - Forging a Wireless Time Signal to Attack NTP Servers.pdf
- D2T1 Itzik Kotler and Amit Klein - The Perfect Exfiltration Technique.pdf
- D2T2 - Mikhail Egorov and Sergey Soldatov - New Methods for Exploiting ORM Injections in Java Applications.pdf
- D2T2 - Peter blasty Geissler - Breaking Naive ESSID WPA2 Key Generation Algorithms.pdf
- D2T2 - Richard Johnson - Go Speed Tracer - Guided Fuzzing.pdf
- D2T2 - Shangcong Luan - Xen Hypervisor VM Escape.pdf
- D2T2 - Wish Wu - Perf - From Profiling to Kernel Exploiting.pdf
- D2T3 LABS - Matteo Beccaro - Electronic Access Control Security.pdf
- KEYNOTE 1 - John Adams - Beyond FBI v Apple.pdf
- KEYNOTE 2 - Adam Laurie - The Future Has Arrived and it's Effin Hilarious.odp
Aquí os dejo para el fin de semana el material publicado de la Hack In The Box 2016 celebrada en Amsterdam:
Proyectos IoT con Raspeberry Pi en contenedores Docker
- May 23, 2016
- tuxotron
Con anterioridad hemos publicado varias entradas dedicadas a proyectos con Raspberry Pi. Dependiendo del proyecto en si y la tecnología que uses, normalmente tienes que instalar ciertas dependencias y/o servicios. Y si por el motivo que sea necesitas tener diferentes versiones de dichas tecnologías, por ejemplo distintas versiones de ruby, python, etc aquello se puede convertir en un pequeño infierno. Para evitar este posible lío y poder fácilmente instalar tus proyectos de forma automática y sencilla, Docker es un perfecto candidato.
También hemos hablado sobre Docker en el pasado y mi afán por familiarizarme con esta tecnología, el uso de contenedores Docker en mi proyectos IoT era algo que tenía pendiente.
En esta entrada voy a describir los pasos que yo personalmente he seguido para hacer uso de contenedores Docker en RPi.
En mi caso he usado un Raspberry Pi 3 y la imagen oficial Raspbian Jessie Lite. Para la instalación de la misma puedes seguir los pasos descritos en la web oficial.
Una vez tienes tu RPi instalado y conectado a internet, ya sea por red inalámbrica o por cable. Lo primero que haremos será actualizar el sistema:
sudo apt-get update
sudo apt-get upgrade
Después de haber hecho esto, lo que haremos será instalar Docker. Recuerda que RPi lleva un procesador ARM y la versión de Docker disponible en los repositorios oficiales de Raspbian es bastante antigua, considerando que Docker, actualmente, saca versiones nuevas con bastante frecuencia.
Los chic@s de hypriot.com (fuente excepcional sobre Docker y RPi) mantienen un repositorio en packagecloud.io con paquetes de Docker engine compilados para ARM, recordemos, que es la arquitectura del procesador que llevan los RPis. Lo primero será instalar una dependencia de Docker, luego añadir el repositorio de hypriot y finalmente la instalación y activación de Docker:
sudo apt-get install -y apt-transport-https
wget -q https://packagecloud.io/gpg.key -O - | sudo apt-key add -
echo ‘deb https://packagecloud.io/Hypriot/Schatzkiste/debian/ jessie main’ | sudo tee /etc/apt/sources.list.d/hypriot.list
sudo apt-get update
sudo apt-get install -y docker-engine
sudo systemctl enable docker
Esta entrada está basada en Raspbian Jessie, pero si usas la distribución basada en wheezy, necesitarás cambiar la tercera línea:
echo ‘deb https://packagecloud.io/Hypriot/Schatzkiste/debian/ wheezy main’ | sudo tee /etc/apt/sources.list.d/hypriot.list
Este proceso te llevará un rato y si todo ha ido bien, puedes comprobar que Docker está corriendo con el comando docker version:
Lo siguiente será crear nuestro contenedor. Para ello existe una imagen basada en Raspbian.
Yo he creado mi propia imagen, la cual puedes descargar desde hub.docker.com (opcional):
sudo docker pull tuxotron/rpi-python-gpio
Ésta, como decía está basada en Raspbian y además lleva Python (2.7), WiringPi2 (librerías para interactuar con la interfaz GPIO) y el módulo para python RPi.GPIO.
El fichero Dockerfile tiene está pinta:
En realidad no necesitas descargarte dicha imagen (docker pull tuxotron/rpi-python-gpio) y puedes ejecutar el contenedor directamente desde Docker hub con el siguiente comando (la primera vez tarda un buen rato):
sudo docker run –rm -ti –cap-add SYS_RAWIO –device /dev/mem tuxotron/rpi-python-gpio
Dicho comando, si has usado Docker anteriormente quizás veas un par de parámetros que no son comunes. De todas formas vayamos por partes y veamos cual es la función de cada uno de los parámetros.
run: crea y lanza un contenedor. –rm: este parámetro es perfecto para hacer pruebas. Le indica a Docker que cuando terminemos con el contenedor, lo borre. Si no hacemos esto, los contenedores se quedarán almacenados en disco y por lo tanto ocupando espacio. Siempre los puedes borrar manualmente.
tuxotron/rpi-python-gpio: nombre de la imagen. Docker busca la imagen localmente primero, si no la tienes descargada, la busca por defecto en hub.docker.com
En condiciones normales, estos son los comandos que necesitarías para correr algún servicio en tu RPi dentro de un contenedor. Probablemente añadirías algún puerto y posiblemente algún volumen.
Pero como puedes observar el comando contiene dos parámetros más:
–device /dev/mem y –cap-add SYS_RAWIO
La razón por la que necesitamos estos dos parámetros es por el acceso al interfaz GPIO (si tu contenedor no hace uso del GPIO, puedes ignorar dichos parámetros). Recuerda que un contenedor Docker corre dentro del host de forma aislada y por defecto no tiene acceso a los recursos del éste. El acceso al interfaz GPIO se hace accediendo directamente a la memoria, de ahí que cuando necesitas acceder a este interfaz necesites privilegios de root. Para permitir que el contenedor tenga acceso a la memoria del host, necesitamos especificarlo de forma explícita con:
–device /dev/mem
Además de esto, Docker provee de granularidad fina de permisos, en la que podemos especificar que tipo de operaciones queremos permitir y/o cuales no. En nuestro caso sólo necesitamos SYS_RAWIO (acceso de entrada/salida a los puertos):
–cap-add SYS_RAWIO
También podemos hacer esto con el parámetro –privileged, pero con éste prácticamente damos carta blanca al contenedor para acceder a los recursos del host, así que por motivos de seguridad es mejor sólo asignar los permisos mínimos.
Si todo fue bien durante la ejecución del contenedor, deberías estar en una sesión de bash dentro del mismo. Para comprobar que el acceso al interfaz GPIO funciona propiamente podemos lanzar el comando: gpio readall y deberías ver algo parecido a esto:
Con esto tienes un contenedor con Raspbian Jessie, Python y acceso al interfaz GPIO.
En futuras entradas publicaré algún ejemplo práctico usando como base la información mostrada en esta entrada.
In the meantime happy hacking!
Buscar
Entradas Recientes
- Posts
- Reemplazando la bateria del AirTag
- OpenExpo Europe décima edición, 18 de mayo: El Epicentro de la Innovación y la Transformación Digital
- Docker Init
- Kubernetes para profesionales
- Agenda: OpenExpo Europe 2022 llega el 30 de junio en formato presencial
- Libro 'Manual de la Resilencia', de Alejandro Corletti, toda una referencia para la gestión de la seguridad en nuestros sistemas
- Mujeres hackers en ElevenPaths Radio
- Creando certificados X.509 caducados
- Generador de imágenes Docker para infosec