28 julio 2011

Modelo de madurez de seguridad de software - OpenSAMM en español

Finalmente se ha publicado la guía OpenSAMM traducida en su totalidad al castellano. Según anunciaba el coordinador de esta traducción, Juan Carlos Calderón, en las listas de correo de OWASP, de habla hispana (owasp-spanish, owasp-argentina, owasp-chile, entre otras) esta guía llevaba casi dos años traducida sin ser publicada, pero por fin ha llegado el día.

Para quienes no conozcan este proyecto, está liderado por Pravir Chandra de Fortify Software, compañía especialista en software de seguridad y comprada por HP hace ya casi un año. Sobre su definición, cito textualmente (traduciendo al castellano) su definición directamente sacada de la página web oficial de OpenSAMM:

"El modelo de madurez de seguridad de software (en inglés Software Assurance Maturity Model - SAMM) es un marco abierto para ayudar a las organizaciones a formular e implementar una estrategia a seguir para la seguridad en el software, encajando en los diferentes riesgos a los que se enfrenta una organización. Los recursos proporcionados por el SAMM ayudarán en lo siguiente:
  • Evaluación de las prácticas de seguridad en software de la organización.
  • Construcción de un programa de seguridad en software balanceado en iteraciones bien definidas.
  • Demostración de mejoras concretas en un programa de garantía de la seguridad.
  • Definición y medida de actividades relacionadas con la seguridad dentro de una organización.
SAMM fue definido con la flexibilidad en mente y así poder ser utilizada en pequeñas, medianas y grandes empresas, independientemente del estilo de desarrollo. Además, este modelo puede ser aplicado en toda la organización, para una única línea de negocio, o incluso para un proyecto en concreto.

Como proyecto libre, el contenido de SAMM siempre permanecerá neutral a fabricante y queda disponible libremente para que todo el mundo pueda utilizarlo."


Desde su primera versión publicada, este proyecto formó parte de la comunidad OWASP, con lo que ello conlleva: que toda la comunidad pueda contribuir y en esta ocasión, traducir el documento a otros idiomas. Además de la propia guía, en la sección de descargas (parte de Tools) de la página de OpenSAMM, se dispone de una serie de herramientas para apoyar las fases propuestas, como por ejemplo plantillas de entrevistas, hojas de ruta, planes de trabajo, planes de proyecto, gestor de vulnerabilidades...


¿Tienes en cuenta la seguridad en tu proceso de desarrollo? Si tienes dudas o directamente es una respuesta negativa, ya tienes por dónde empezar, además de forma totalmente gratuita y en tu idioma.

La versión original en inglés puede descargarse desde este enlace PDF [inglés], y su versión recién traducida al castellano, puede descargarse aquí.
Leer más...

27 julio 2011

Androide 007 – Licencia para ejecutar



El objetivo de esta entrada es dar un pequeño repaso al funcionamiento de las medidas de seguridad propuestas por Google a la hora de establecer una capa anti copia (válida) en las aplicaciones de pago del Market y saltárnosla de forma manual y automatizada.




Cómo funciona la licencia

Abstrayéndonos un poco del funcionamiento interno, podemos distinguir tres componentes fundamentales:
  • La aplicación, que contiene el nombre del paquete y una llave firmadaque es utilizada para validar las peticiones por parte del servidor.
  • El cliente de Android Market, al tener más permisos que la aplicación
    se encarga de recoger la información necesaria acerca del usuario y el
    dispositivo (nombre de usuario en Google, IMSI, IMEI, etc...). Posteriormente envía la petición de verificación de la licencia al servidor en lugar de la aplicación.

  • El servidor evalúa toda la información recibida, comprobando la identidad del usuario con las solicitudes registradas de compra, devolviendo como respuesta la validez de la licencia que posteriormente es manejada por la aplicación del market.
Es decir, la idea básica reside en que el usuario como desarrollador puede querer establecer una serie de políticas de permisos que permitan comprobar en tiempo de ejecución si tenemos luz verde para poder ejecutar una aplicación o no en nuestro terminal.

Hay casos donde las funcionalidades se ven restringidas, quedando su uso limitado a un
número determinado de intentos, o durante un periodo de tiempo. Y otros sin embargo nos impiden realizar un uso funcional.

Resumiendo el proceso a nivel de código; se crea una instancia de:

com.android.vending.licensing.LicenseChecker

y esta es encargada de llamar al método:

checkAccess(com.android.vending.licensing.LicenseCheckerCallback)

que realiza la consulta y devuelve la respuesta llamando al método encargado de ejecutarla.

¿Hasta qué punto es segura?

El servidor firma las validaciones con un par de claves RSA que son compartidas exclusivamente entre el servidor y el desarrollador de la aplicación.

Posteriormente el servicio de licencias genera un par de claves para cada cuenta de editor y publica la parte pública en el perfil de la cuenta de usuario. Este copia la llave pública y la incrusta en el código fuente de la aplicación, la compila y publica el APK.

Mientras tanto el servidor que almacena la parte privada la utiliza para firmar las respuestas a las validaciones de licencia para cada aplicación publicada por el usuario.

Una vez se ha recibido una respuesta satisfactoria por parte del servidor, se procede a utilizar la llave pública para validar la integridad de los datos. De esta forma se evita cualquier tipo de manipulación en la respuesta. O eso es lo que espera Google.

Vamos a jugar un poco

Hoy en día existen diversas herramientas que realizan esta labor de forma totalmente automatizada librándonos de todo el proceso. En esta entrada nosotros vamos a realizarlo de las dos formas, manual y usando la aplicación (antilvl) desarrollada por Lohan Plus. Siempre viene bien conocer cómo funciona todo el proceso interno.

La aplicación que vamos a desproveer de su protección es "They need to be fed" un juego desarrollado por YoyoGames.

-- Proceso manual

Lo primero que debemos hacer es desempacar el fichero APK para obtener el classes.dex. Recordemos que ahí es donde está contenido todo el código de nuestra aplicación. Aquí podemos tomar varios caminos y transformar el fichero contenedor de las clases a código Java, instrucciones Dalvik o realizar una interpretación del mismo usando baksmali, entre otras.

Nosotros haremos esto último, así que nos apoyaremos en la herramienta baksmali (v1.2.6):

sebas@Helios:~/Android/research/protection/com.yoyogames/bcode/com$ java -jar baksmali-1.2.6.jar -x -o baksmali_code ../../Android/research/protection/com.yoyogames/classes.dex

Una vez tenemos a nuestra disposición el código, el siguiente paso es buscar el fichero donde está contenida la comprobación de la licencia:

sebas@Helios:~/Android/research/protection/com.yoyogames$ find ./baksmali_code/ -name "LicenseChecker.smali"


./baksmali_code/com/android/vending/licensing/LicenseChecker.smali


Ese fichero contiene dos métodos cuyo código es necesario modificar para cumplir nuestro objetivo, el primero es el "checkAccess" (código aquí) que básicamente se encarga de comprobar si tenemos suficiente acceso como para usar la aplicación.

sebas@Helios:~/Android/research/protection/com.yoyogames.droidtntbf-1.apk_FILES$ grep -Hnr "checkAccess" .

Coincidencia en el archivo binario ./classes.dex
./baksmali_code/com/yoyogames/droidtntbf/RunnerActivity.smali:335: invoke-virtual {v1, v2}, Lcom/android/vending/licensing/LicenseChecker;->checkAccess(Lcom/android/vending/licensing/LicenseCheckerCallback;)V
./baksmali_code/com/android/vending/licensing/LicenseChecker.smali:627:.method public declared-synchronized checkAccess(Lcom/android/vending/licensing/LicenseCheckerCallback;)V


Y el segundo el "handleServiceConnectionError" (código aquí), que se encarga de generar las respuestas ante incidentes de errores de conexión con el servicio, véase timeouts, por ejemplo.

sebas@Helios:~/Android/research/protection/com.yoyogames$ grep -Hnr "handleServiceConnectionError" .


Coincidencia en el archivo binario ./classes.dex
./baksmali_code/com/android/vending/licensing/LicenseChecker.smali:168: invoke-direct {p0, p1}, Lcom/android/vending/licensing/LicenseChecker;->handleServiceConnectionError(Lcom/android/vending/licensing/LicenseValidator;)V
./baksmali_code/com/android/vending/licensing/LicenseChecker.smali:464:.method private declared-synchronized handleServiceConnectionError(Lcom/android/vending/licensing/LicenseValidator;)V
./baksmali_code/com/android/vending/licensing/LicenseChecker.smali:615: invoke-direct {p0, v1}, Lcom/android/vending/licensing/LicenseChecker;->handleServiceConnectionError(Lcom/android/vending/licensing/LicenseValidator;)V
./baksmali_code/com/android/vending/licensing/LicenseChecker.smali:774: invoke-direct {p0, v0}, Lcom/android/vending/licensing/LicenseChecker;->handleServiceConnectionError(Lcom/android/vending/licensing/LicenseValidator;)V


Una vez identificados sustituimos el código del método "checkAccess" por este, y el de "handleServiceConnectionError" por este otro.

Básicamente lo que hacemos es meter un par de mensajes en el log para facilitarnos un poco la tarea con logcat a la hora de hacer la traza a la ejecución de la aplicación, y por otro lado nos aseguramos de que se esté llamando al método allow().

El siguiente paso es firmar la aplicación para poder instalarla en nuestro dispositivo, esto se hace en unos sencillos pasos:
  • Generamos nuestra clave privada:

    sebas@Helios:~/Android/research/protection$ keytool -genkey -v -keystore llave-poc.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
  • Empacamos el APK, puedes usar apktool para esta tarea.
  • Firmamos con jarsigner:

    sebas@Helios:~/Android/sdk/tools$ jarsigner -verify -verbose -certs ~/Android/research/protection/com.yoyogames/prueba.apk

  • Utilizamos zipalign:

    sebas@Helios:~/Android/sdk/tools$ ./zipalign -v 4 ~/Android/research/protection/com.yoyogames/prueba.apk ~/Android/research/protection/com.yoyogames/prueba-final.apk
Y listo, si la instalamos veremos que hemos conseguido saltarnos la verificación de pago.


-- Proceso automatizado


Si queremos evitarnos el engorro de todo el proceso podemos usar anti-lvl, una herramienta desarrollada por Lohan Plus cuyo principal propósito es revertir el "License Verification Library" (LVL) y cualquiera de sus implementaciones. Además en cada versión se añaden nuevas huellas de las distintas variaciones existentes, con lo que al estar en constante actualización proporciona la seguridad de alcanzar el objetivo que perseguimos.

El uso más sencillo no puede ser, y con una simple línea consigue hacer todo el proceso por nosotros, basando su proceso en sencillos pasos: desensamblado, detección de los mecanismos de protección, eludir los mecanismos, ensamblar, firmar, y hacer el align a los primeros bytes:

sebas@Helios:~/Android/sdk/tools$ sudo java -jar antilvl.jar -f ~/Android/research/protection/com.yoyogames.droidtntbf-1.apk pruebafinal.apk




Si ahora pasamos esa aplicación a nuestra SDCARD y la instalamos, obtendremos el mismo resultado que comentábamos con anterioridad.

Conclusión

Una vez más queda demostrada la facilidad con la que es posible ownear a Google. En este caso la seguridad que proporcionan a sus aplicaciones. Supongamos la situación de que una empresa decide desarrollar uno de sus productos para plataformas Android, esta aplicación debe de pasar previamente por el market, así que deciden aprovechar la funcionalidad que Google ofrece de aplicar el LVL y así asegurarse de que nadie pueda utilizarla sin antes pagar el precio que tiene.

Supongamos que estamos hablando de una conocida empresa que fabrica aplicaciones con finalidad de Navegador/GPS, y que tienen un precio de 70€. Ahora vamos y nos burlamos de ese sistema de seguridad y la tenemos gratis en nuestro dispositivo.

¿A quién se le echa la culpa, al desarrollador por no haber tomado las suficientes precauciones y haber confiado en Google, o a Google por tener un sistema tan infalible?

--------------------------------------

Contribución por Sebastián Guerrero
Leer más...

26 julio 2011

¡Nominaciones Pwnie Awards 2011!


Vuelven los premios más divertidos del mundo del hacking y la seguridad. ¿Que qué se premia? Se premia el FAIL, la pericia o el ridículo dentro de la comunidad de la seguridad.

Además de ser unos premios bastante peculiares, son un pequeño resumen de lo mejor de todo el año, especialmente en la comunidad del exploiting.

Este año hay de todo y para todos, y es que la tarta está muy repartida.

Mención especial para Sony, que no ha dejado hueco para más participantes en la categoría "Pwnie for Most Epic FAIL", y es que ocupa ella sola todo el espacio disponible.

El 3 de Agosto en Las Vegas, en BlackHat USA, se celebrará la ceremonia que determinará los vencedores de cada categoría.

Este año las categorías son las siguientes:

- Pwnie for Best Server-Side Bug
- Pwnie for Best Client-Side Bug
- Pwnie for Best Privilege Escalation Bug
- Pwnie for Most Innovative Research
- Pwnie for Lamest Vendor Response
- Pwnie for Best Song
- Pwnie for Most Epic FAIL
- Pwnie for Lifetime Achievement
- Pwnie for Epic Ownage

Y las nominaciones para cada categoría:

Pwnie for Best Server-Side Bug

Premio para la persona que haya descubierto el fallo más sofisticado e interesante tecnicamente en el lado del servidor.

- ASP.NET Framework Padding Oracle
- Microsoft FTP server heap overflow
- ISC dhclient metacharacter injection
- BSD-derived IPComp encapsulation stack overflow
- Exim remote code execution flaw

Pwnie for Best Client-Side Bug

Igual que la categoría anterior, pero en el lado del cliente.

- FreeType vulnerability in iOS
- Google Chrome sandbox bypass
- Java mismatched codebase arbitrary code execution
- Blackberry Pwn2Own exploit
- Android web market XSS

Pwnie for Best Privilege Escalation Bug

Seguimos con el mejor fallo que permita escalada de privilegios.

- Privilege escalation in CSRSS
- Linux kernel set_fs kernel memory overwrite
- Linux $ORIGIN privilege escalation

Pwnie for Most Innovative Research

Persona que haya publicado la investigación, paper, presentación, hilo en lista de correo o herramienta más innovadora e interesante.

- Stackjacking
- Understanding and Exploiting Flash ActionScript Vulnerabilities
- Black Box Auditing Adobe Shockwave
- Securing the Kernel via Static Binary Rewriting and Program Shepherding
- Understanding the LFH heap

Lamest Vendor Response

La peor respuesta por parte del vendedor.

- Remotely exploitable stack overflow in OpenSSH on Novell NetWare
- Magix Music Maker 16 stack overflow
- RSA SecurID token compromise

Pwnie for Best Song

¿Qué ceremonia de entrega de premios no tiene premio para la mejor canción?

- Eatin' Cookies
- Hacker Hacker
- 0-day
- The Light It Up Contest
- Mastering Success And Failure
- Help Yourself To My Flaws
- LIGATT Rap
- gli anni
- #antisec
- My Digital Self

Pwnie for Most Epic FAIL

Parece que aquí hay premio seguro.

- Sony (Fail0verflow y GeoHot)
- Sony (Sony Online Entertainment (SOE) fail)
- Sony (LulzSec)
- Sony (PSN)
- Sony (Despedido su equipo de seguridad de redes)

Pwnie for Epic 0wnage

- Anonymous for hacking HBGary Federal
- LulzSec for hacking everyone
- Bradley Manning and Wikileaks
- Stuxnet

Podéis consultar toda la información y los divertidos comentarios de cada una de las vulnerabilidades en la web del concurso.

Referencias
Leer más...

25 julio 2011

Paneles de control de acuarios con SHODAN

Se ha hablado mucho de buscar paneles de control de sistemas que pueden afectar a la integridad física de las personas, como son por ejemplo los paneles de control de potabilizadoras de agua, partiendo de esa idea se me ocurrió que probablemente se haya desarrollado una gran cantidad de software para construir sistemas que automaticen los procesos necesarios que se realizan cuando se tiene a cargo animales y que garantizan la integridad de éstos, como es el control de la alimentación. Resumiendo, se me ocurrió buscar software de gestión de establos, de acuarios, de granjas... que pudiesen ser controlados de forma remota y estuviesen conectados a Internet.

Lo más relevante que encontré, a falta de indagar más a fondo, es un sistema modular llamado Aquacontroller Apex de gestión de acuarios por control remoto del acuario a través de un servidor web, de la empresa Neptune Systems (http://www.neptunesys.com).

Una búsqueda por "AquaController" en el buscador de banners SHODAN arroja unos seiscientos resultados, la mayoría servidores en el pais del tío Sam, que devuelven el nombre del programa en la cabecera Server de la respuesta HTTP.


Estos servidores web contienen un panel de control que permiten programar entre otras cosas rutinas de alimentación, controlar el PH del agua inyectando CO2 cuando alcance valores críticos, la temperatura programando cuando debe saltar el sistema de refrigeración, o se pueden programar alarmas cuando ciertas variables alcancen unos determinados valores. Para una lista más completa de funcionalidades podemos ver el manual, aquí el PDF para la versión 4.

Como podemos ver en el propio manual haciando una pequeña búsqueda, vemos que el el usuario y password por defecto que deja la instalación son admin/1234.


Resta ir abriendo pestañas en el navegador con los resultados devueltos por SHODAN y vemos que muchos no han cambiado el usuario y contraseña por defecto. Desde el panel de control que ofrece el servidor web del programa se pueden controlar todos los parámetros del acuario, las luces, el sistema de refrigeración, el PH, la alimentación...




Algunos paneles de control permiten ajustar un montón de módulos y contienen un montón de instrumentos, lo que hace suponer que ahí hay un acuario bastante grande con posibilidad de albergar multitud de animales, cuyo control es accesible para cualquiera con conexión a Internet ya que a pesar de que montaron un acuario y conectaron todo tipo de módulos y cosas se olvidaron de cambiar el usuario y la contraseña por defecto.



----------------------------------------------------------

Contribución por Miguel Ángel Bernabé Cruz
Leer más...

24 julio 2011

Enlaces de la SECmana - 81

Leer más...

23 julio 2011

Informe Fortinet European Security Strategy Census

Leo en el suplemento de seguridad de la revista TCN, que como resultado de un estudio encargado por Fortinet, fabricante de dispositivos de seguridad, se desprende que la importancia que los directivos TI dan al cumplimiento de las normativas es de un 27%. Después siguen la lucha contra las amenazas (menos mal!) con un 22%, y la virtualización en un 18%. En últimos lugares, están la movilidad y el cloud computing con un 12%.

El estudio, Fortinet European Security Strategy Census, tuvo en cuenta la opinión de 300 responsables de TI de países como España, Francia, Alemania, Italia, Países Bajos y Reino Unido.

Hace ya unos cuantos posts escribimos una reflexión relacionada con la importancia dada a la normativa únicamente, que  desgraciadamente, se ha demostrado ser  tendencia. Queda demostrado que, efectivamente, la prioridad está donde aprieta el zapato y donde "no cumplir" nos puede llevar a una sanción. La búsqueda de hacer las cosas bien, por el mero hecho de preocuparnos por la seguridad de los datos y los procesos, así como de las amenazas existentes queda en segundo plano (y en este caso, prioridad).

Por otra parte, mejorar la seguridad en dispositivos móviles se encuentra en la estrategia del 88% de los encuestados. En las empresas españolas cabe destacar que el 49% de las consultadas opina que la responsabilidad de la protección de los dispositivos móviles es del usuario/propietario. Mi duda es: ¿se referirán a los terminales personales de los usuarios o a los corporativos? Si el dispositivo es corporativo, la responsabilidad de que el mismo esté bien protegido ante amenazas externas, debería recaer en el departamento de TI, y su saber hacer en materia de configuración, bastionado y utilización de herramientas de seguridad corporativas específicas para dispositivos móviles.    

Además, entre las "preocupaciones laborales" de los encuestados destaca la seguridad de redes inalámbricas (un 57% en Europa y 53% en España). Según el informe, el sobreabultado márketing realizado por alguno de los denominados Firewalls de nueva generación han llevado a plantearse a las empresas, la necesidad de control de las aplicaciones. Mi reflexión ante esto es: Dada la política de cambios (generalmente sin avisar con tiempo suficiente) que experimentan las aplicaciones web utilizadas por los usuarios a diario, como Facebook o Twitter, ¿están los cortafuegos de nueva generación a la altura de poder adaptarse y funcionar como corresponde ante los cambios de las aplicaciones?
El colofón del informe era aún más esperable. La frase que está en las pizarras del 69% de los despachos de los directivos TI de Europa (un 77% en el caso europeo) es común: "Reducción de costes". De hecho, en la misma revista TCN, me llamó la atención un artículo de opinión escrito por la country manager en España de un fabricante de soluciones de Disaster Recovery, potenciar la importancia de este tipo de procedimientos incluso como alternativa a la alta disponibilidad. Es decir, en esencia, el artículo "vende su producto" (como es normal), indicando que es más barato asumir el riesgo de tener un servicio sin alta disponibilidad, pero a cambio disponer de una solución de disaster recovery que deje todo como estaba en minutos, planteándose como una posibilidad para la reducción de costes.  
Leer más...

22 julio 2011

Ayer os contábamos el caso del malware incrustado en el instalador de CamStudio, probablemente debido a una intrusión en el servidor de descargas y modificación del fichero de instalación.

Éste no es un caso aislado, y es que a proyectos tan importantes como irssi, Wordpress, UnrealIRCd, ProFTPd o recientemente vsftpd también les ha pasado algo parecido.

Si bien no se puede decir que sea inevitable, se pueden tomar algunas medidas de seguridad para que las posibilidades de que ésto suceda se reduzcan al mínimo, o ayudar a detectar el problema lo antes posible para aplicar una solución.

1.- Publicar hashes de los ficheros
Ya sea mediante MD5, SHA1, SHA512, WHIRLPOOL u otro que nos guste más, es básico publicar junto con el paquete la huella del mismo para que los usuarios que lo descarguen puedan comprobar que es el mismo fichero que el autor subió. La elección del algoritmo debería depender del tamaño de los ficheros y la popularidad del mismo, por ejemplo, MD5 sería una buena opción para ficheros grandes por ser rápido y SHA1 para los pequeños.

Por supuesto, las huellas y los ficheros de descarga deben estar en diferentes sitios independientes.

2.- Publicar firmas GPG de los ficheros
La idea es la misma que la anterior, pero utilizando GPG en vez de hashes.

3.- Separar sitio web y sitio de descargas
Por una razón lógica, y es que si consiguen hacer una intrusión en uno habrá discordancias que permitirán detectar el problema rápidamente. Por ejemplo, si tenemos los hashes en el sitio web y vulneran el sitio de descargas para reemplazar un paquete, no podrán cambiar también el hash de dicho paquete, y tanto los usuarios como el administrador podrán ver rápidamente que algo no funciona como debería.

4.- Evitar alojamientos o servicios compartidos
Para que no nos pase lo mismo que a Ettercap deberíamos evitar servicios compartidos de alojamiento como SourceForge o Google Code. Un fallo de seguridad en su sistema puede afectarnos directamente.

Por el mismo motivo también deberíamos evitar alojamientos compartidos, donde se comparte un único espacio con múltiples clientes.

5.- Comprobar la integridad de los ficheros en algún proceso
Si el proyecto consta de instalación no está de más que se compruebe la integridad del paquete durante el proceso teniendo como referencia los hashes almacenados en nuestro servidor. Si el proyecto no consta de instalación, se podría programar un pequeño script que realizara el proceso.

Con estas medidas podemos reducir significativamente el riesgo de que nuestro proyecto sufra alguna modificación malintencionada externa. ¿Se os ocurre alguna medida más? ¿Creéis que son medidas excesivas? ¿Las cumplen los proyectos, especialmente los de productos relacionados con la seguridad?
Leer más...