Archivo de la categoría: Programacion

25 mujeres tecnólogas / hackers / programadoras que sigo en twitter – Parte 2

Continuo con la segunda parte de mi listas, mujeres en la tecnología que no puedes dejar de seguir en Twitter 🙂

#11 – Jessy Irwin

Tecnologa y entusiasta de la ciberseguridad, Jessy es un miembro muy activo en la comunidad, parte de su tiempo lo dedica a impartir platicas sobre privacidad de datos, consejos básicos sobre seguridad y en general concientizar a la población acerca del buen uso de Internet, en su blog personal tiene bastantes referencias sobre platicas y eventos a las que ha sido invitada

#12 – Julia Evans

Julia es una hacker muy peculiar 🙂 no solo por la manera en la que transmite sus ideas (les recomiendo ver los videos de sus presentaciones en YouTube) si no también por el gran numero de áreas que domina en la informática, parece que no hay algo que esta mujer no sepa y lo mejor de todo es que puede explicar temas muy complejos de una forma simple y fácil de entender para el común de los programadores. Algunas de sus publicaciones mas populares incluyen System design, TCP stack, Kernel hacking, dynamic memory, etc.

Aunque ella se considera a si misma una simple administradora de sistemas, en sus publicaciones Julia demuestra un gran expertis en el área de redes y sistemas operativos en general.

#13 – Katie Moussouris

Fundadora y CEO de LutaSecurity, empresa dedicada en proveer soluciones para el responsable disclosure de vulnerabilidades en las organizaciones, los tweets de Katie incluyen las ultimas noticias sobre el malware que afecta a las organizaciones y APTs (advanced persistent threat) en general.

#14 – Katie Neuman

Katie Neuman es una autoridad en la comunidad de seguridad, junto con un grupo de expertos se encargan de crear las pautas para que los procesos de seguridad a nivel corporativo sigan un mismo estándar, en su cuenta de Twitter publica acerca de las ultimas amenazas en el mundo de la ciberseguridad.

#15 – Lesley Carhart

Lesley Carhart es una veterana de la seguridad, con mas de 15 años de experiencia en la industria, incluyendo 8 como DFIR (Digital Forensics and Incident Response) es una gran inspiración para todas los entusiastas de la informática forense, mediante su blog personal colabora con la comunidad publicando artículos de seguridad dirigidos tanto a audiencia técnica como no técnica, puedes encontrar varios videos de sus charlas en Youtube

#16 – Amanda Rousseau

Amanda Rousseau, mejor conocida como Malware Unicorn, es una analista de Malware e investigadora de seguridad, su experiencia incluye haber trabajado como Malware reverse Engineer en el centro de delitos cibernéticos del Departamento de Defensa de los Estados Unidos, Amanda es especialmente popular en eventos de ciberseguridad como Defcon y Black Hat por sus platicas y talleres sobre ingeniería inversa.

Si estas interesado en el análisis de Malware, en su blog encontraras dos cursos completamente gratuitos que te ayudaran a empezar, Reverse Engineering Malware 101 y Reverse Engineering Malware 102.

#17 – Melissa Archer

Melissa Archer es una entusiasta de la tecnología, actriz y empresaria, mejor conocida por ser cofundadora de Hacker’s brew, Jailbreak developer y Tweak developer.

#18 – Ophelia Pastrana

Ophelia Pastrana es una mujer transgénero, física, economista, emprendedora y agnóstica de la tecnología, es muy activa en redes sociales, especialmente en la comunidad tecnológica y LGBT de Latinoamérica, es creadora de varios podcast/vlogs como nerdcore y canvas y le gusta asistir a multitud de eventos tecnológicos entre ellos Campus Party MX, en el cual he tenido la oportunidad de conocerla y hablar con ella personalmente.

#19 – Parisa Tabriz

Parisa Tabriz aka Security Princess, trabaja en Google liderando uno de los equipo de ciberseguridad encargado de mejorar la seguridad de varios productos, entre ellos como Google Chrome, Parisa es una investigadora de la que todo entusiasta de la seguridad ha oído hablar al menos una vez, una de sus aportaciones mas significativas ha sido su articulo So, you want to work in security? en donde comparte consejos a las personas que se quieren iniciar en seguridad.

#20 – Rosa Guillén

Rosa Guillén, también conocida como Novatillasku es una entusiasta de Linux a la que tengo ya varios años de seguir en Internet, es autodidacta y tiene un blog donde publica noticias y artículos de tecnología, comencé a leer sus tutoriales sobre Ubuntu y Linux en general cuando empezaba la preparatoria, si quieres estar enterado de las ultimas noticias sobre este sistema operativo definitivamente es una excelente fuente de noticias.

#21 – Sailor Mercury (Amy)

Sailor Mercury tiene una historia muy interesante, ella solía ser una desarrolladora web en Airbnb y tenia un pasa tiempo que consistía en crear historietas sobre tecnología y diversos temas de ciencias computacionales como algoritmos, memoria, TCP, protocolos, etc. con la ayuda de Kickstarter consiguio fondos para crear una tienda en linea llamada bubblesort.io, dejo su trabajo en Airbnb y ahora se dedica de tiempo completo a seguir transformando conceptos complejos en pequeñas historietas para que mas gente tenga acceso al conocimiento.

#22 – Samantha Davison

Samantha Davidson es una hacker que ha trabajado en equipos de seguridad de compañías como Uber y actualmente Snapchat, su trabajo consiste en concientizar a las personas acerca de la privacidad de sus datos, sobre todo en ambientes corporativos.

#23 – Sheila A. Berta

Tuve la oportunidad de conocer a Sheila en una de sus platicas durante el DragonJar Security Conference en 2015 en Manizales, Colombia. Ella se dedica a la seguridad informática pero desde un punto de vista mas ofensivo, es una reverse engineer y analista de malware muy hábil, ha contribuido a la comunidad de seguridad creando herramientas como CBM – The Bicho y el framework Crozono

#24 – Yan Zhu

Yan Zhu es otra de las hackers mas populares y respetadas en la comunidad de seguridad, siempre esta presente en eventos como Defcon y Black Hat, entre sus aportaciones a la comunidad se encuentran haber contribuido a proyectos como HTTPS everywhere, Let’s Encrypt, SecureDrop, Privacy Badger y Brave

Puedes encontrar varias de sus charlas en Youtube, la gran mayoría de ellas son acerca de protocolos de seguridad para comunicaciones como TLS.

#25 – Keren Elazari

Investigadora y oradora en temas de ciberseguridad reconocida mundialmente, trabaja directamente con compañías Big 4 y Fortune 500 ayudandolos a crear estrategias para mejorar su seguridad y la de sus productos. Esta mujer ha aportado bastante a la comunidad y ha sido fuente de inspiración de muchísimos entusiastas alrededor del mundo, ha sido mencionada en medios de gran reputación como Forbes, Scientific American, WIRED y TED.

Tienen alguna otra recomendación para seguir en Twitter? de ser así se los agradecería.

Saludos.

25 mujeres tecnólogas / hackers / programadoras que sigo en twitter – Parte 1

Hola, en esta ocasión quiero compartir con ustedes una lista de 25 mujeres que sigo (y admiro) en Twitter y que son referencia en el mundo de la tecnología, ya sea por que son programadoras muy hábiles, investigadoras, periodistas especializadas en tecnología, hackers, ingenierías o simplemente tecnologas en general.

#1 – AJ Bowen

AJ Bowen es una ingeniera especializada en infraestructura tecnológica, trabaja en una compañía llamada Travis CI dedicada a implementar soluciones de continues integration, entre las aportaciones de AJ a la comunidad podemos encontrar herramientas como IDNcheck y Clink, también es programadora de Python, Golang, C, C++ y bash scripting.

Bonus: tiene uno de los curriculums mas ingeniosos que he visto (el proyecto es opensource https://github.com/soulshake/cv.soulshake.net/) ya que para visualizarlo necesitas hacer una petición con curl desde la linea de comandos.

$ curl cv.soulshake.net


            ┌───────────────────────────────────────────────────────────────────────────────────────────┐
            │.                                                                                          │
            │                                   Hi, I'm AJ.                                             │
            │                I'm a Python developer with a strong interest in                           │
            │                 APIs, CLIs and subverting the dominant paradigm.                          │
            │                                This is my resume.                                         │
            │                                                                                           │
            │                                                                                           │
            │           Note: this is primarily intended for command-line addicts.                      │
            │             A more conventional version can be found on LinkedIn.                         │
            │                                                                                           │
            │                                                                                           │
            └───────────────────────────────────────────────────────────────────────────────────────────┘

#2 – Aloria

Jefa de seguridad de datos en Flatiron Health, empresa de software dedicada al desarrollo e investigación de nuevos métodos para combatir el cáncer. Aloria es considerada una de las mujeres mas influyentes a nivel mundial en la comunidad de seguridad, también formó parte del equipo de seguridad de Tumblr en donde dedicó gran parte de su tiempo para concientizar a sus seguidores en temas de seguridad informática.

#3 – Azeria

Azeria es una hacker en toda la extensión de la palabra, entre sus aportaciones mas destacadas se encuentran tutoriales completamente gratuitos y de gran calidad sobre ingeniería inversa, ensamblador para plataformas ARM, seguridad ofensiva y otros temas mas avanzados como escalacion de privilegios, binary exploitation y ARM exploit development. Podemos encontrar su material directamente en Azaria Labs.

#4 – Binni Shah

Evangelista de Linux, investigadora de Malware, kernel developer y hasta filántropa, Binni Shah es una verdadera caja de sorpresas, también mantiene Linux – Technology Tidbits, facebook fanpage desde donde comparte artículos muy interesantes sobre seguridad.

#5 – Charity Majors

Tuve la fortuna de conocer a Charity en persona en una de sus platicas sobre ingenieria de sistemas que dio en las oficinas de Microsoft CA en 2016, Charity Majors es una Reliability Engineer eso significa que se encarga de que los sistemas, y la infraestructura en general, siempre este operando de la mejor manera posible, tiene experiencia manejando infraestructura de grandes compañias como Facebook y ahora ha fundado su propia empresa llamada HoneyComb de la cual es la actual CEO

Tip: si lo tuyo es la administración de sistemas (sysadmin) Charity Majors es alguien ha quien debes de seguir en twitter.

#6 – Erika Vilches

Hace unos 6 años cuando comenzaba la universidad tuve la oportunidad de pertenecer a Microsoft Student Partner, en aquel tiempo Erika era una de las personas encargadas de coordinar el programa y gestionar los eventos que nos permitían acercarnos a las tecnologías de Microsoft, así fue como la conocí :). Hoy en día Erika Vilches es una de las mujeres mas influyentes de Latinoamérica en temas de tecnológicos, recomiendo seguirla en twitter para estar enterado de los últimos avances sobre blockchain, chatbots, speech recognition y ciencia/tecnología en general.

#7 – Eva Galperin

Nada mas y nada menos que la directora de ciberseguridad de la Electronic Frontier Foundation, organización sin fines de lucro encargada de luchar por los derechos de las personas en el mundo digital (Internet, ciberespacio, etc.), Eva se enfoca en el sector mas vulnerable (digital-mente hablando) de la población como los periodistas, los medios de comunicación y los ciberactivistas en general, para lograr eso viaja alrededor del mundo concientizando acerca de la privacidad, la libertad de expresión y los peligros del government surveillance.

#8 – Hasherezade

hasherezade es una programadora y analista de Malware que vive en Polonia, ha trabajado como investigadora cientifica, C / C++ developer, penetration tester y actualmente tiene su propia compañia que ofrece servicios de respuesta a incidentes de seguridad, también colabora escribiendo artículos para MalwareBytes.

En su blog personal encontraras algunos de los mejores tutoriales y artículos sobre análisis de Malware que he leído así como soluciones a retos de seguridad, ingeniería inversa y crackmes.

#9 – J.

Es una entusiasta de la seguridad informática, la inteligencia artificial y la automatización, trabaja como analista en el área de DFIR (Digital Forensics and Incident Response) de la empresa Under Armour, compañia estadounidense de ropa y accesorios deportivos. J. es un miembro muy activo de la comunidad de seguridad y participa dando platicas y compartiendo su conocimiento en eventos de seguridad como Defcon.

#10 – Jennifer Sunshine

Jennifer Sunshine es actualmente la CEO de la compañia de ciberseguridad IOActive, ha sido juez de Duo Women in Security los últimos dos añios y ademas también es un miembro muy activo en organizaciones como OWASP, EWF e ISSA.

Hasta aquí la primera parte del articulo, pondré la segunda parte de la lista en la siguiente publicación :), mientras tanto tienen alguna otra recomendación para agregar a mi lista? mujeres que sean un punto de referencia en cuanto a la seguridad informática o el desarrollo de software :D.

Puedes leer la segunda parte de la lista en la siguiente publicación: 25 mujeres tecnólogas / hackers / programadoras que sigo en twitter – Parte 2

Saludos.

Docker 101 #1: Introducción a docker y los contenedores

docker-image

Hola lectores, en los últimos 6 meses he tenido la oportunidad de estar desarrollando mi carrera en una de las empresas de tecnología más grandes que hay en México, he estado trabajando muy de cerca en temas de Cloud computing, virtualizacion, bare metal e IaaS en general.

Es por eso que he decidido que es una buena idea crear una serie de tutoriales sobre docker, herramienta que considero esencial para los desarrolladores hoy en día, sobre todo si te atrae el mundo del cloud computing :). Si no tienes conocimientos previos de docker no te preocupes, planeo escribir tutoriales desde cero y voy a ir explicando cosas un poco más complejas conforme vayamos avanzando.

Un poco de teoria

Cuando hablamos de docker hablamos de contenedores. Pero ¿Que es un contenedor?, seguramente podrás encontrar una definición más formal de lo que es, pero imagínate que un contenedor es una caja que contiene tu solución de software, y no solo eso, también contiene las dependencias necesarias para ejecutar tu aplicación, las dependencias pueden ser librerías, configuraciones especiales e incluso otras aplicación o servicios que necesites (como un servidor web, nginx, apache, tomcat, etc.), todas las dependencias y aplicaciones dentro de una imagen están organizadas mediante un concepto de layers (capas), de esa manera cuando modificas un contenedor (una imagen) solo actualizas un layer en específico.

La gran ventaja de los contenedores es que, a diferencia de las máquinas virtuales estos no tienen asignadas cuotas específicas de recursos del sistema host (memoria, cpu, storage, etc), cuentan con un sistema de archivos virtual que permite que los contenedores se ejecuten de forma independiente y separada de los procesos del sistema, de esta manera la memoria de un proceso del contenedor no interfiere con un proceso de la maquina donde es ejecutado.

Un contenedor solo incluye consigo la aplicación y sus dependencias lo que hace que las imágenes de docker sean bastante livianas.

Otro de los grandes beneficios que nos aportan los contenedores es la potabilidad, me refiero a que si tienes una aplicación y la quieres migrar a otro sistema (por ejemplo de desarrollo a producción) puedes creas una imagen de docker que incluya tu solución y ejecutarla en cualquier otro sistema teniendo la certeza de que va a “correr” pues la imagen contiene todas las dependencias necesarias. Existen técnicas para “comunicar” nuestra maquina host con los contenedores como el mapeo de puertos y directorios, eso lo veremos en los siguientes tutoriales.

Conceptos básicos

  • Docker: Tecnología de software para creación y administración de contenedores.
  • Docker image: Un sistema de archivos virtual que puede contener aplicaciones y dependencias.
  • Docker container: Una imagen de docker que está siendo ejecutada, una instancia de una imagen.
  • Dockerhub: Un repositorio que contiene muchísimas imágenes de docker listas para ser descargadas.
  • DockerFile: Un script que indica una serie de pasos para construir una imagen de docker.

Bien suficiente teoría, si quieres saber más a fondo sobre docker pueden visitar el sitio web o ir a la documentación oficial

Instalar docker

Lo primero que debemos hacer es instalar docker, dependiendo de tu sistema operativo es el instalador que utilizaras, descarga docker de la página oficial, si estas en Windows descarga el ejecutable y sigue el wizard (siguiente, siguiente, siguiente), en Mac OSX puedes descargar una imagen dmg y hacer lo mismo, en mi caso lo que tengo a la mano es un sistema Linux, Ubuntu para ser específico y para proceder con la instalacion lo hago de la siguiente forma:

$ sudo apt-get install docker.io

Sea cual sea tu sistema operativo, una vez hayas instalado docker para verificar que la herramienta está bien instalada abre una consola y escribe el comando docker

$ docker

docker1

Si el resultado es un output similar al de la imagen significa que instalaste docker correctamente, si por el contrario recibes algún mensaje que dice que el comando docker no existe esto se puede deber a varias razones pero principalmente si estas en Windows verifica que la ruta al binario de docker se encuentre definida en tus variables de entorno.

Docker contiene muchisimos comandos pero los más importantes, o al menos los que utilizaras más son:

  • $ docker run
  • $ docker images
  • $ docker build
  • $ docker pull
  • $ docker ps
  • $ docker start
  • $ docker stop
  • $ docker commit
  • $ docker attach

Conforme vayamos avanzando en los tutoriales iré explicando que hace cada uno de ellos

Nuestro primer contenedor

Estamos listos para crear nuestro primer contenedor, abrimos una consola y escribimos el siguiente comando:

$ sudo docker run hello-world

El comando anterior le dice a docker que ejecute una nueva instancia (un contenedor) de la imagen hello-world, primero busca en el repositorio local y si no la encuentra va al dockerhub y procede a con la descarga.

docker2

¿Observas la parte que dice Pull complete?:

Unable to find image 'hello-world:latest' locally
latest: Pulling from hello-world

264eca88cf85: Pull complete 
f0cb9bdcaa69: Pull complete 
Digest: sha256:548e9719abe62684ac7f01eea38cb5b0cf467cfe67c58b83fe87ba96674a4cdd
Status: Downloaded newer image for hello-world:latest

Ahi es donde docker está mostrando el progreso de la descarga y los layers de la image, el resultado final de ejecutar este contenedor es el mensaje que dice: Hello from Docker!

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

Si ejecutamos el comando docker images, obtendremos una lista de las imágenes que tenemos disponibles localmente, y claro ahí tenemos nuestra imagen hello-world

$ docker images

docker3

Ahora veremos uno de los conceptos importantes de docker, el sistema de archivos virtual, vamos a descargar y ejecutar una imagen docker de ubuntu con el comando:

$ sudo docker run ubuntu

docker4

Corroboramos que tenemos una nueva imagen almacenada localmente:

[email protected]:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              426844ebf7f7        2 weeks ago         127.1 MB
hello-world         latest              f0cb9bdcaa69        3 months ago        1.848 kB

Ya tenemos una imagen docker de ubuntu, ¿Pero cómo accedemos a ella? ¿Cómo la utilizamos?, podemos utilizar el siguiente comando para acceder al contenedor en tiempo de ejecución utilizando una shell interactiva:

$ sudo docker run -t -i ubuntu /bin/bash

Cuando el contenedor este corriendo podrás navegar su sistema de archivos como lo harías normalmente en Linux, incluso si estas corriendo docker desde una maquina con Windows podrás ver que el sistema de archivos es de Linux, aquí es donde puedes empezar a considerar la opción de dejar atrás Cygwin y comenzar a utilizar un contenedor de ubuntu con todas las herramientas que necesites.

docker5

Para salir del contenedor utiliza el comando exit, como si terminaras una sesión remota de ssh.

Un punto importante a recalcar es que los contenedores no son persistentes, si creas un archivo dentro del contenedor la siguiente vez que lo ejecutes no existirá, posteriormente veremos cómo podemos solucionar eso. Por el momento quiero que entiendas los conceptos básicos de los contenedores en docker, como descargar imágenes y lanzarlas, los comandos básicos, etc.

Al inicio mencionaba el dockerhub, el repositorio público de donde puedes descargar miles de imágenes de docker, te invito a explorarlo e instalar las que más te gusten:

docker6

Servidor web nginx utilizando docker

Para terminar el tutorial mostrare rápidamente como podemos ejecutar un servidor web utilizando docker, como mencionaba, el dockerhub tiene miles de imágenes públicas y muchas comunidades de software libre están creando versiones “contenerizadas” de sus soluciones, en este caso el servidor web nginx, lo primero que debemos hacer es descargar la imagen de nginx para docker

$ sudo docker pull nginx

docker7

Ejecutamos docker images para verificar que se descargó correctamente:

[email protected]:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              426844ebf7f7        2 weeks ago         127.1 MB
nginx               latest              4c0e7e3661d2        2 weeks ago         181.4 MB
hello-world         latest              f0cb9bdcaa69        3 months ago        1.848 kB

Ahora para lanzar el contenedor utilizaremos el comando:

$ sudo docker run --name nginx-server1 -p 80:80 nginx

docker8

  • El comando docker run especifica que queremos correr un contenedor
  • El parametro –name nos permite definir un nombre único y amigable para esa instancia
  • El parametro -p nos permite mapear puertos entre el sistema operativo y los servicios que corren dentro del contenedor
  • Al final especificamos el nombre de la imagen de la cual queremos crear el contenedor, nginx en este caso

docker9

Incluso podemos abrir una segunda terminal y ejecutar el siguiente comando para lanzar un segundo servidor web contenerizado pero en un puerto diferente:

$ sudo docker run --name nginx-server2 -p 8080:80 nginx

docker10

Al lanzar cada una de las imágenes de nginx habrás notado que la consola se queda “ocupada” corriendo el contenedor, en el siguiente tutorial mostrare como evitar eso, finalmente para detener la ejecución del contenedor presiona ctrl+c

Si ejecutas el comando docker ps -a podras ver todas los contenedores que hemos creado hasta el momento, la mayoria no estara en ejecucion y puede ser eliminado utilizando docker rm [CONTAINER ID]

docker11

Si haz entendido bien los conceptos básicos ya te imaginaras el potencial de docker y hacia donde iré en los siguientes tutoriales :).

Saludos y happy hacking.

StringTransformer: the transformation tool

st

Hola lectores, en esta ocasión me gustaría compartir con ustedes una herramienta opensource que he publicado en mi repositorio de github, se trata de StringTransformer, un script desarrollado en python cuya finalidad es tomar una cadena de texto y transformarla a distintas representaciones equivalentes de la misma, por ejemplo binario, hexadecimal, octal, md5, sha256, etc. Las funciones de transformación son clases separadas del script principal por lo que la herramienta es modular, esto significa que es bastante fácil para cualquier programador (que sepa python) crear sus propias transformaciones y extender la funcionalidad de la herramienta.

Esta herramienta les puede ser útil cuando están jugando Capture the flags y necesitan una forma rápida de analizar cadenas de texto (o al menos esa es su finalidad), la herramienta sigue en desarrollo, corrigiendo bugs e implementando nuevas funcionalidades.

Instalación

Su instalación es bastante sencilla, primero deben de clonar el repositorio usando git

$ git clone https://github.com/Alevsk/stringTransformer.git

Una vez descargado el repositorio acceden a la carpeta del proyecto, dan los permisos de ejecución necesarios y lanzan el script:

$ cd stringTransformer
$ chmod +x stringTransformer.py
$ ./stringTransformer.py
                  
              _______         
       _____ |   _   |  ____  
      |    |  \  V  /  |    | 
      |   \ \  \_ _/  / /   | 
      \  \ \ \   '   / / /  / 
       \  \   | 'V' |   /  /  
     |\ \_____| \ / |_____/ /|
     | \        | |        / |
     |  |    ,/|| ||\,    |  |
     |   `| '  || ||  ' |`   |
     |    | |  || ||  | |    |
     \    | |  || ||  | |    /
      \.  | |  ||_||  | |  ./ 
       \  | |  |___|  | |  /  
         \' ,  _____  , '/    
             \/ ___ \/        
               /___\          
                           

stringTransformer v0.1 (https://github.com/alevsk/stringTransformer/)

Usage: stringTransformer.py -i INPUT_STRING | --input INPUT_STRING | --load FILE

stringTransformer.py: error: Required argument is missing. Use '-h' for help.

Con el comando -h o –help podran ver el menu de ayuda:

Options:
  -h/--help             show this help message and exit
  -i/--input=INPUT      set the input string to test with
  -l/--load=LOAD_FILE   load list of input strings (one per line)
  -x/--exclude=EXCLUDE  exclude this representations
  -o/--only=ONLY        transform input only to this representations
  -O/--output=OUTPUT    generate an output file
  -p/--params=PARAMS    use custom parameters on transformation functions
  --list                list available input representations
  --update              update from the official git repository

Examples:
./stringTransformer.py -i [STRING]
./stringTransformer.py -i [STRING] --exclude "hexa, octal"
./stringTransformer.py -i [STRING] --only "hexa, octal"
./stringTransformer.py -i [STRING] --params "rot.cipher=13,rot.encoding=utf-8"
./stringTransformer.py --load list.txt
./stringTransformer.py --list

Para ver las funciones de transformación actualmente disponibles pueden utilizar –list:

stringTransformer v0.1 (https://github.com/alevsk/stringTransformer/)

- sha1
- octal
- binary
- sha256
- html_entities_decode
- html_entities_encode
- md5
- base64_encode
- base64_decode
- ascii
- slug
- rot_encode
- hexa
- urlencode

Puedes ayudar a crear más funciones de transformación para la herramienta, para eso sugiero lean la documentación en la página principal del repositorio (o en el archivo README.md) https://github.com/Alevsk/stringTransformer

Ejemplos de uso

Queremos aplicar una transformación hexadecimal, rot 13 encode y ascii a la cadena de texto “The transformation tool”

$ ./stringTransformer.py -i "The transformation tool" -o "hexa,rot_encode,ascii"

Obtenemos como resultado:

stringTransformer v0.1 (https://github.com/alevsk/stringTransformer/)

[i] Loaded 3 representations to apply.
[i] Starting tests at: "23:54:04"

The transformation tool

[i] applying transformation...

ascii:

84 104 101 32 116 114 97 110 115 102 111 114 109 97 116 105 111 110 32 116 111 111 108

rot_encode:

Gur genafsbezngvba gbby

hexa:

54 0x68 0x65 0x20 0x74 0x72 0x61 0x6e 0x73 0x66 0x6f 0x72 0x6d 0x61 0x74 0x69 0x6f 0x6e 0x20 0x74 0x6f 0x6f 0x6c 

==================================

Incluso podemos pasar parámetros a las funciones de transformación que lo soporten, rot_encode por defecto utilizar 13 posiciones de desplazamiento pero aquí indicamos que use 51

$ ./stringTransformer.py -i "The transformation tool" -o "rot_encode" --params="rot_encode.cipher=51"

stringTransformer v0.1 (https://github.com/alevsk/stringTransformer/)

[i] Loaded 1 representations to apply.
[i] Starting tests at: "23:58:11"

The transformation tool

[i] applying transformation...

rot_encode:

Sgd sqzmrenqlzshnm snnk

==================================

La herramienta cuenta con muchísimos otros parámetros que los invito a explorar.
saludos

Análisis interno y de seguridad de la plataforma #CiudApp

26757261694_a0273fdcb6_z

El 30 de mayo de este año (2016) Enrique Alfaro, presidente de Guadalajara, anunció durante la sesión de Campus Night la nueva aplicación de administración y gestión de información relevante para los ciudadanía: CiudApp.

Entre muchas otras cosas, la aplicación permite a los ciudadanos estar informados de las noticias más relevantes de la administración (por eso del trending de los gobiernos abiertos), realizar reportes incluyendo geolocalización y solicitar o proponer servicios al gobierno.

A raíz del lanzamiento de la aplicación ha surgido bastante debate y comentarios en Internet en torno a la misma, incluso leí un artículo muy interesante en donde le hacían un análisis de usabilidad a la aplicación, pienso que está bien ya que en nuestro querido México, en el pasado hemos tenido casos polémicos como el de la app de los 115 millones de pesos y es natural que la gente que sabe del tema (desarrolladores, ux designers, community managers, etc.) emitan su opinión acerca de un producto tecnológico “generado” por el gobierno.

Regresando a lo anterior, después de leer el análisis heurístico de usabilidad de la aplicación me pregunte a mí mismo ¿Quién está detrás del desarrollo de la aplicación?, ¿Y si le hacemos un análisis interno a la app? Podemos hacer algunas pruebas de seguridad también, vamos a “destripar” la aplicación para entender como está construida y ver cómo fue desarrollada, todo esto con la premisa de que no vamos a romper ni a explotar / vulnerar / hackear nada 🙂 y pues manos a la obra.

Instalando la aplicación en genymotion

Lo primero que vamos a hacer es descargar el apk de la aplicación (Si, el análisis lo vamos a hacer sobre un dispositivo con Android), el link de la app CiudApp en la playstore es https://play.google.com/store/apps/details?id=com.radmas.iyc.guadalajara.mex y hay miles de sitios web que te permiten descargar el apk utilizando la url de la tienda, solo busquen algún en google y descarguen el archivo, cuando hayan terminado tendrán un archivo llamado más o menos así Ciudapp_Guadalajara_v3.0.146_apkpure.com.apk.

Después de eso vamos a instalar la aplicación en genymotion, si no saben lo que es pueden investigar y descargarlo de acá https://www.genymotion.com/ y probablemente escriba un tutorial en el futuro acerca de cómo instalarlo y configurarlo.

android

Ejecutamos nuestro dispositivo virtual de con Android y vamos a proceder a instalar el apk de la aplicacion mediante adb con el comando:

adb install Ciudapp_Guadalajara_v3.0.146_apkpure.com.apk

adb

Una vez termine el proceso de instalación tendremos la app en nuestro dispositivo virtual.

installed

Bueno, ya tenemos la aplicación preparada, vamos a dejar esto por un momento y vamos a regresar a la carpeta en donde descargamos nuestra apk, ahora vamos a utilizar 3 herramientas, apktool, dex2jar y Jd (Jar Decompiler) para entender un poco más como está construida la app.

Obteniendo los assets de la aplicación

Vamos a utilizar apktool para de compilar la app y leer así algunos archivos importantes como el AndroidManifest.xml, strings.xml y cualquier otro archivo que nos pueda decir algo acerca de la app o sus desarrolladores.

apktool.bat d "C:\Users\Alevskey\Documents\Pentest\mobile\ciudapp\Ciudapp Guadalajara_v3.0.146_apkpure.com.apk"

d

apktool_d_folder

Entre los permisos que nos solicita la aplicación tenemos cosas típicas como acceso a la cámara, acceso al GPS, escribir y leer en almacenamiento externo, acceso a internet, etc., permisos que uno esperaría de una aplicación como esta.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.radmas.iyc.guadalajara.mex" platformBuildVersionCode="23" platformBuildVersionName="6.0-2166767">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <permission android:name="com.radmas.iyc.guadalajara.mex.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
    <uses-permission android:name="com.radmas.iyc.guadalajara.mex.permission.MAPS_RECEIVE"/>
    <uses-feature android:glEsVersion="0x20000" android:required="true"/>
    <permission android:name="com.radmas.iyc.guadalajara.mex.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
    <uses-permission android:name="com.radmas.iyc.guadalajara.mex.permission.C2D_MESSAGE"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="com.radmas.iyc.guadalajara.mex.permission.GPSTRACKER"/> //Show custom dialgo above Statusbar
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>

Lo que me llamo la atención desde un inicio, y una de las razones por las que quería hacer este ejercicio, fue encontrar que empresa fue la desarrolladora de la app, revisando más a fondo el archivo vemos que muchos de los packages empiezan con com.radmas.iyc.guadalajara.mex, haciendo una búsqueda en google de radmas.com encontramos lo que parece ser una agencia española (pueden revisar su información en who.is) de desarrollo de software especializada en diseño, marketing, creación de aplicaciones móviles y páginas web.

radmas

Si son desarrolladores de Android pueden identificar rápidamente otras cosas interesantes como los activities de la aplicación, uno que otro broadcast receiver, algunos servicios, intents, public api keys, etc.

También me llamo la atención que la aplicación tiene internacionalización, aunque la app parece un poco genérica, está bien hecha en ese aspecto

idiomas

Con la utilidad File Locator Lite también encontramos algunos archivos interesantes como:

app.json

{
	"server_url":"https://api.mejoratuciudad.org",
	"base_uri":"",
	"jurisdiction_id":"mx.guadalajara",
	"api_key":"12",
	"name":"Ciudapp Guadalajara",
	"promo_text": "Echa un vistazo a 'Ciudapp Guadalajara', la mejor aplicación móvil de atención ciudadana https://play.google.com/store/apps/details?id=com.radmas.iyc.guadalajara.mex",
  	"promo_web": "https://play.google.com/store/apps/details?id=com.radmas.iyc.guadalajara.mex",
  	"email": "[email protected]",
  	"languages":    [{"key":"Español","value":"es"},
	{"key":"Inglés","value":"en"}],
  "share_url": "http://intranet.mejoratuciudad.org/mail/request/"
}

arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="enviroments">
        <item>http://api-canary.mejoratuciudad.org</item>
        <item>http://api-developer.mejoratuciudad.org</item>
        <item>http://api.mejoratuciudad.org</item>
        <item>http://open010.valvaro.lan</item>
        <item>http://open010.vivan.lan</item>
        <item>http://open010.vnacho.lan</item>
        <item>http://open010.vfernando.lan</item>
        <item>http://open010.vwalter.lan</item>
        <item>http://open010.vemilio.lan</item>
    </string-array>
</resources>

De acuerdo a lo que vemos la app se comunica con varios servicios web hospedados en mejoratuciudad.org, investigando un poco sabemos que la empresa anterior mencionada (radmas.com) también es dueña de este producto, y según sus propias palabras:

Mejora Tu Ciudad (MTC) es una plataforma de comunicación entre los ciudadanos y el ayuntamiento, que se enmarca dentro de las soluciones Smart City y que se basa en los tres pilares fundamentales de Open Government:

Participación, colaboración y transparencia

Al menos con esto estoy un poco más tranquilo sabiendo que el gobierno de Guadalajara contrato una empresa especializada para el desarrollo de la aplicación y no a un par de becarios para programar la app XD.

mejoratuciudad

Del DEX al JAR y del JAR al código fuente

Antes de avanzar al siguiente paso hay algo más que podemos hacer, es sabido que los archivos apk, son en realidad archivos rar, entnces tomamos nuestro Ciudapp Guadalajara_v3.0.146_apkpure.com.apk lo renombramos a Ciudapp Guadalajara_v3.0.146_apkpure.com.rar y lo descomprimimos obteniendo algo como lo siguiente:

dex2jar

El contenido de la carpeta es muy parecido a lo que generamos cuando utilizamos apktool sin embargo si tratan de abrir algún archivo xml aquí, como por ejemplo el AndroidManifest.xml lo unico que obtendrán serán 0s y 1s, pero tenemos algo interesante, el archivo classes.dex.

Podemos utilizar dex2jar con el siguiente comando para generar un archivo jar (Javar Archive)

dex2jar.bat "C:\Users\Alevskey\Documents\Pentest\mobile\ciudapp\Ciudapp Guadalajara_v3.0.146_apkpure.com\classes.dex"

Obtendremos un archivo classes_dex2jar.jar que podemos abrir en el Java decompiler, tan solo abrimos la aplicación y seleccionamos el archivo jar.

jd

Muchos de los paquetes que vemos ahí son librerías de terceros y conforme indagamos más y más podemos ver que la aplicación utiliza librerías de facebook, google, librerías para animaciones, reyclerviews personalizados, analytics, Bitly, crash analytics, etc.

jd2

Para agilizar la búsqueda podemos seleccionar File > Save All Sources y elegimos una carpeta en donde guardaremos el archivo Zip generado que después descomprimimos y analizamos, nuevamente utilizando File Locator Lite

app_decompiled

Algunas búsquedas nos arrojan cosas interesantes, como por ejemplo credenciales en texto plano XD

password

passwords2

username

Con las credenciales obtenidas fue posible acceder a lo que parece un portal administrativo de estacionamientos de una tercer empresa llamada urbiotica en http://services.urbiotica.net/

urbiotica

Podemos ver, al parecer, en tiempo real el status de los cajones de un estacionamiento en algún lugar de España, la pregunta aquí es: ¿Que hacían esas credenciales hardcodeadas en la app?, navegando la aplicación no veo por ningún lado algo que haga referencia a estacionamientos sin embargo haciendo otra búsqueda con la palabra park obtenemos referencias en muchos otros archivos.

park

Sin embargo no pude lanzar ningún activity o servicio relacionado al Parking desde adb shell ya que no estaban registradas en el AndroidManifest.xml.

Opino que esas credenciales son quizás de algún desarrollo anterior, el código fuente fue re utilizado y las credenciales fueron olvidadas ahí y ahora están siendo distribuidas masivamente XD, en fin la pantalla administrativa del sistema de estacionamientos luce de esta forma, tiene sentido que haya otra empresa más involucrada en este proyecto, sobre todo si es está enfocada en tecnologías para Smart cities.

park2

Revisando los archivos de la aplicación

Regresamos a nuestro emulador y ahora vamos a abrir una shell de windows y ejecutamos el comando:

adb shell

El comando anterior nos entregara una consola para poder navegar el dispositivo donde instalamos la app, conociendo un poco sobre Internals y arquitectura general de Android sabemos que la información de una app se almacena en la ruta /data/data/package.de.la.app, en este caso /data/data/com.radmas.iyc.guadalajara.mex/

shared_pref

Aquí encontramos otros archivos que podrían contener más cosas interesantes y que a su vez nos podrían enseñar un poco más cómo funciona la aplicación, comenzamos por ver que hay dentro de la carpeta shared_prefs, si no saben lo que es pueden investigar más al respecto acá https://developer.android.com/training/basics/data-storage/shared-preferences.html pero en resumen es un método de almacenamiento persistente que nos ofrece el sistema operativo, la información es almacenada en archivos XML y es generalmente utilizado para guardar configuraciones de la aplicación.

shared_prefs2

Quizás el archivo más interesante es JURISDICTION_LOADED.xml que contiene:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="mx.guadalajara">mx.guadalajara</string>
</map>

Y del cual vamos a hablar en la siguiente etapa. Después de que se loguen en la app pueden ver que nuevos archivos de preferencias compartidas son creados, estos contienen información relacionada con su cuenta, facebook, etc, etc.

shared_prefs3

En la carpeta /data/data/com.radmas.iyc.guadalajara.mex/databases/ encontramos dos bases de datos sqlite, procedemos a descargarlas para ver qué es lo que contienen usando los siguientes comandos.

adb pull /data/data/com.radmas.iyc.guadalajara.mex/databases/DBImproveYourCity C:\Users\Alevskey\Documents\Pentest\mobile\ciudapp\databases

adb pull /data/data/com.radmas.iyc.guadalajara.mex/databases/DBImproveYourCity-journal C:\Users\Alevskey\Documents\Pentest\mobile\ciudapp\databases

Y después podemos abrirlas utilizando cualquier visor de sqlite como por ejemplo SQLiteBrowser

db2

En la tabla request es donde podemos ver los reportes “cacheados” por la aplicación en nuestro teléfono, podemos observar el id del reporte (service_request_id), el id de la cuenta de la persona que hizo el reporte (account_id), la calle, coordenadas, url de imagenes, descripcion, status, fecha, etc.

db4

db5

db6

En general cumplen con las buenas prácticas de almacenamiento de información, no almacenan datos sensible en lugares inseguros como la SD externa y en su lugar lo hacen en bases de datos SQLite y shared preferences que es donde solo la aplicación tiene privilegios de lectura y escritura.

Entendiendo las comunicaciones

Ahora viene una de las partes más divertidas de este tipo de ejercicios, saber cómo y con quien se comunica la aplicación, que es lo que envía y que es lo que recibe, etc. Pero antes, si están haciendo este ejercicio mientras leen mi artículo se darán cuenta que la app maneja un concepto muy interesante llamado Jurisdicciones o Jurisdiction, después de analizar el código fuente y visualizar en mi mente el flujo de información, jurisdiction es un identificador que le dice a la app que información cargar de acuerdo a una región especifica, por default la app al iniciar hace un request a https://api.mejoratuciudad.org/applications/12.json y obtiene como resultado

{
  "name": "Guadalajara",
  "active": true,
  "default_jurisdiction_id": "mx.guadalajara"
}

Pueden jugar con el numero al final de la url y de esta manera nos damos cuenta que esta aplicación (o al menos el backend y los servicios web) son escalables y han sido implementados en muchas otras ciudades y países (¿Posiblemente otros clientes de radmas?), por ejemplo https://api.mejoratuciudad.org/applications/5.json nos arroja:

{
  "name": "Cuenta conmigo",
  "active": true,
  "default_jurisdiction_id": "org.sevilla"
}

https://api.mejoratuciudad.org/applications/4.json

{
  "name": "Greencities",
  "active": true,
  "default_jurisdiction_id": "eu.greencities.malaga"
}

Revisando rápidamente con una herramienta para automatizar el proceso podemos ver que actualmente existen 16 jurisdicciones diferentes (al menos en ese servidor), podemos encontrar muchísimas ciudades más del estado de Jalisco así como ciudades de otros países, eso nos dice que la aplicación está siendo implementada en muchos más lugares 🙂

burp

El mismo ID de jurisdicción es utilizado para obtener las noticias, reportes y servicios relacionados de una región en específico.

Continuamos, como sabemos la aplicación se comunica con servicios web hospedados con el proveedor https://api.mejoratuciudad.org/, si vamos a esa URL podremos ver una bonita api REST muy bien documentada 🙂

rest

Esto es muy bueno ya que los desarrolladores ya no estamos limitados a solo utilizar la aplicación, ahora podemos crear nuestras propias aplicaciones utilizando la api ya existente :)! hay otros servicios web muy interesantes como:

Como mencionaba anteriormente, tal solo cambien el valor de la jurisdicción por alguno de los otros y obtendrán la información de las otras plataformas. Para obtener un poco mas de información general de la aplicación, ejecutamos fierce sobre mejoratuciudad.org para tratar de obtener una lista de posibles subdominios

fierce -dns mejoratuciudad.org -wordlist /root/tools/SecLists/Discovery/DNS/subdomains-top1mil-110000.txt -threads 10

fierce

La lista completa:

ftp.mejoratuciudad.org
www.mejoratuciudad.org
intranet.mejoratuciudad.org
api.mejoratuciudad.org
m.mejoratuciudad.org
apps.mejoratuciudad.org
blog.mejoratuciudad.org
demo.mejoratuciudad.org
lab.mejoratuciudad.org
doc.mejoratuciudad.org
developer.mejoratuciudad.org
pandora.mejoratuciudad.org
hera.mejoratuciudad.org
WWW.mejoratuciudad.org
landing.mejoratuciudad.org
privacy.mejoratuciudad.org
electra.mejoratuciudad.org
pi-canary.mejoratuciudad.org
api-developer.mejoratuciudad.org

En este punto el servidor me dio ban (probablemente por mis peticiones automatizadas, pero nada que no se solucione con una VPN), y ya no continué haciendo más pruebas, pero no sin antes darme cuenta de que al parecer su servidor no está hardenizado, cualquier petición a su api devolvía un error 403 revelando la versión del servidor web y su sistema operativo.

<html>
    <head>
        <title>403 Forbidden</title>
    </head>
    <body bgcolor="white">
        <center>
            <h1>403 Forbidden</h1>
        </center>
        <hr>
        <center>nginx/1.4.6 (Ubuntu)</center>
    </body>
</html>

Y si le corremos un scan con nmap a los puertos más conocidos obtenemos.

PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.7 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http       nginx 1.4.6 (Ubuntu)
111/tcp  open  rpcbind    2-4 (RPC #100000)
443/tcp  open  ssl/http   nginx 1.4.6 (Ubuntu)
5666/tcp open  tcpwrapped
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Por buenas prácticas de seguridad esa información no debería ser revelada, y es bastante sencillo corregir eso (literalmente es modificar una línea en el archivo de configuración de nginx).

Con la ayuda de Burp Suite es posible analizar los request y eso nos arroja aún más información de cómo se comunica la app, aunque teniendo la documentación de su api a la mano ya no es tan necesario.

Para terminar, que es lo que aprendimos hoy

  • En el desarrollo de este proyecto estuvieron involucradas al menos 3 partes: El gobierno de Guadalajara, la empresa Radmas y Urbiotica (dejando de lado el posible caso de que en realidad ellos no tienen nada que ver y solo las credenciales de uno de sus clientes fueron leakeadas en la app, eso sería muy mala suerte)
  • Al menos la app de Android (que fue la que analice) fue desarrollada de forma nativa
  • Hacen buen uso de las funcionalidades para almacenar información, guardan la información sensible utilizando shared preference y bases de datos sqlite
  • El almacenamiento de imágenes lo hacen en la nube de aws
  • La app tiene credenciales hardcodeadas (posiblemente de un proyecto anterior del cual re utilizaron el código) y que al día de hoy funcionan
  • La app utiliza el servicio de mejoratuciudad.org que al parecer es un producto de radmas.com y podemos decir que es un software / plataforma / tecnologia especializada para hacer implementaciones en smart cities
  • Los servidores de mejoratuciudad.org no están hardenizados
  • Los servidores de mejoratuciudad.org cuentan con algún tipo de IDS/IPS que bloquea a usuarios después de X número de peticiones automatizadas.
  • La plataforma no implementa esos controles puesto que solo utilice una VPN para cambiar mi IP y ya pude seguir interactuando con la app sin problemas.
  • Debido al concepto de Jurisdicciones sabemos que la app está siendo implementada en muchas otras ciudades de México y el mundo (16 clientes para ser exactos según los servidores de mejoratuciudad.org)
  • Los servicios web no parecen vulnerables a algún tipo de ataque popular como SQL injection, xss, RCE, etc. Muy bien por Radmas 🙂 )
  • El código fuente de la aplicacion no fue ofuscado

Happy hacking … salu2