AppSec: Static Analysis Using Visual Studio 2010 for Hunting C/C++ Bugs

[Español] Para este artículo hablaremos de una magnífica herramienta como es Visual Studio 2010, el entorno de desarrollo de Microsoft, que utilizo a diario para realizar auditorías de código en C/C++ o .NET. Cuando imparto clases sobre SDL es frecuente encontrar programadores que no conocen las herramientas de seguridad que ofrece Visual Studio, incluso me sucede con expertos en seguridad que tampoco las conocen y esto debe cambiar.

[English] For this article we’ll talk about a magnificent tool such as Visual Studio 2010, Microsoft development environment, which I use on a daily basis to conduct code audits of C/C++ or.NET. When I teach the SDL courses it is common to find developers who do not know the security tools offered by Visual Studio, this even happens with security experts who do not know them either, and this must change.

Como ya he mencionado Visual Studio trae interesantes herramientas para escribir código seguro como programador o para buscar vulnerabilidades como auditor. Para ello estudiaremos dos herramientas que son identificación de funciones inseguras y análisis estático de código inseguro.

As I have already mentioned Visual Studio brings interesting tools to write secure code as a programmer or to look for vulnerabilities as auditor. To do this we will look at two tools that are unsafe functions identification and static analysis of insecure code.

Identificación de Funciones Inseguras / Unsafe Functions Identification

A estas alturas debería ser ampliamente conocido que las librerías de C contienen una serie de funciones consideradas inseguras que son la raíz de muchos avisos de seguridad. Microsoft consciente de ello en el 2010 publicó una extensión para Visual Studio para identificar estas funciones inseguras, además de prohibir su uso según el SDL.

At this stage should be widely known that C libraries contain a number of functions that are considered insecure and are the root of many security advisories. Aware of this at 2010 Microsoft released an extension for Visual Studio to identify these unsafe functions, as well as banning its use according to the SDL.

En la Fig. 1 podemos ver un código a modo de ejemplo que contiene dos funciones inseguras como son sprintf y strcpy. Nota: en este ejemplo ambas funciones no pueden ser controladas por un atacante pero lo que nos interesa es identificar estas funciones inseguras.

In Fig. 1 we can see a code example that contains two unsafe functions such as sprintf and strcpy. Note: in this example both functions cannot be controlled by an attacker, but what interests us is to identify these unsafe functions.


Fig. 1 – Ejemplo de funciones inseguras / Insecure function example

En la Fig. 2 Visual Studio, con la extensión de funciones insegura instalada, nos subraya la función sprintf en color violeta indicándonos algún problema. Al poner el cursor encima vemos que nos sale una ventana con el mensaje que esta función es insegura y prohibida según el SDL y nos ofrece alternativas seguras. Igualmente si nos ponemos encima de strcpy nos dará un mensaje parecido.

In Fig. 2 Visual Studio, with the insecure functions extension installed, point us at function sprintf in purple indicating a problem. When putting the cursor above we see that we get a window with the message that this function is unsafe and banned according to the SDL and offers safe alternatives. Also if we are on top of strcpy it will give us a similar message.


Fig. 2 – Función Insegura sprintf / Sprintf insecure function

Digamos que compilamos el código porque no hemos visto las funciones inseguras, entonces Visual Studio nos dará un aviso de error en la compilación de que existen funciones inseguras como se puede apreciar en la Fig. 3.

Let’s say that we compile the code because we have not seen the insecure functions, then Visual Studio will give us a warning notice in the compilation that there are unsafe functions as shown in Fig. 3.


Fig. 3 – Función insegura identificada al compilar el código / Unsafe function identified at compilation time

Sin duda esta extensión es de gran ayuda para identificar rápidamente las funciones inseguras que son más de 100 cuando estamos auditando código.  

No doubt this extension is of great help to quickly identify unsafe functions as there are more than 100 when we are auditing code.

Análisis Estático de Código Inseguro / Static Analysis of Insecure Code

Visual Studio incorpora una potente herramienta de análisis estático para identificar código vulnerable en C/C++ que todo programador debería utilizar para validar su código. Algunas clases de errores que detecta la herramienta son:

  • Desbordamiento de buffer
  • Memoria sin inicializar
  • Referencia a puntero nulo

En la Fig. 4 tenemos un código modificado del ejemplo anterior conteniendo una clásica vulnerabilidad. En este fallo se copia una cadena de carácter A en un buffer, buf, de menor tamaño que provoca un desbordamiento de buffer (buffer overrun).

Visual Studio includes a powerful static analysis tool to identify vulnerabilities in code for C/ C++ that every programmer should use to validate its code. Some bug classes detected by the tool are:

  • Buffer overflow / Buffer overrrun
  • Un-initialized memory
  • Null pointer dereference

In Fig. 4 we have a modified code from previous example containing a classical vulnerability. In this bug a string, A, is being copied to a buffer, buf, of smaller size causing a buffer overflow.


Fig. 4 – Desbordamiento de buffer / Buffer overflow

Utilizamos la potente herramienta de análisis estático para buscar vulnerabilidades que ejecutamos desde la línea de comando con el parámetro /analyze. En la Fig.5 podemos ver cómo se nos informa de dos errores, C6202 y C6386, en referencia al desbordamiento de buffer.

We use the powerful static analysis tool to find vulnerabilities which we run from the command line with the parameter /analyze. In Fig. 5 we can see how it informs us of two warnings, C6202 and C6386, in reference to the buffer overflow.


Fig. 5 – Utilizando VS /analyze para identificar vulnerabilidades / Using VS /analyze to identify vulnerabilities

En la Fig. 6 podemos apreciar otra clase de vulnerabilidades que aparece con frecuencia cuando se libera memoria del mismo puntero en varias ocasiones. En este ejemplo si foo es verdadero se ejecuta un trozo de código y al final se libera el puntero. El problema es que al final de la función también se libera el mismo puntero. Tenemos dos mensajes de aviso C6001 y C6011 en referencia a uso de memoria sin inicializar y referencia a  puntero nulo.

In Fig. 6 we can appreciate another class of vulnerabilities that often appears when memory is being freed on the same pointer on several occasions. In this example if foo is true it runs a piece of code and finally releases, free, the pointer. The problem is that the same pointer is also being released, free, at the end of the function. We have two warnings C6001 and C6011 messages in reference to un-initialized memory and null pointer dereference.


Fig. 6 – Referencia a puntero nulo / Null pointer dereference

El último ejemplo de código vulnerable (Fig. 7) es un fallo donde el programador se ha equivocado en la sentencia For ya que el rango de la variable buff comienza en 0 y termina en 14 y en el For se ha utilizado el mismo índice, 15 en este caso. Por tanto en este ejemplo se produce un desbordamiento de buffer ya que el índice esta fuera de rango.  

The last example of vulnerable code, Fig. 7, is a bug where the programmer has mistaken the For loop as the variable buff range starts at 0 and ends at 14 and the For loop uses the same index declared in buff, 15 in this case. In this example there is a buffer overflow due to the declared index being out of range.


Fig. 7 – Índice fuera de rango / Index out of range

Sin duda Visual Studio es una poderosa herramienta para auditar código que debería formar parte de nuestro arsenal. Los ejemplos presentados no distan demasiado de ejemplos reales que he visto auditando código, por desgracia muchas veces la realidad supera a la ficción.

La herramienta de análisis estático es más efectiva si la combinamos con el Standard Annotation Language (SAL), que nos permite definir los parámetros de las funciones por lo que aportamos conocimiento a la herramienta y puede profundizar en sus análisis para identificar fallos, pero este uso avanzado lo dejaremos para otro artículo 🙂

¿Y tú que herramientas utilizas para análisis estático?

Undoubtedly Visual Studio is a powerful tool to audit code that should be part of our arsenal. The presented examples are not too far from real examples I’ve seen auditing code, unfortunately often fact is stranger than fiction.

The static analysis tool is most effective if we combine it with the Standard Annotation Language (SAL) that allows us to define the functions prototypes for which you provide knowledge to the tool so it can go deeper with the analysis to uncover bugs, but I leave this advanced usage for another article 🙂

What tools do you use for static analysis?

— Simon Roses Femerling

Posted in Microsoft, Pentest, SDL, Security, Threat Modeling | Tagged , , , , , , , , | 1 Comment

Wireless Pentester Guide on Automated Wireless Cracking

Hoy en día existen diversas soluciones para ayudarnos a realizar auditorías wireless,  lejos han quedado los días de utilizar aircrack en la línea de comandos. Ahora contamos con potentes herramientas que automatizan todo el proceso de romper redes wireless de forma sencilla y rápida. Para este artículo sólo estamos interesados en seis herramientas gratis, aunque soluciones comerciales como SILICA o The Portable Penetrator también pueden ser de interés para el lector.

Today there are various solutions to help us carry out wireless assessments, far were the days of using aircrack in the command line. We now have powerful tools that automate the entire process of breaking wireless networks quickly and easily. For this article we are only interested in six free tools but commercial tool such as SILICA or The Portable Penetrator solutions can also be of interest to the reader.

Wepbuster

wepbuster

Wepbuster es una popular herramienta que ha quedado algo obsoleta aunque funciona perfectamente. Wepbuster identificará todos los Access Points (AP) cercanos y comenzará a ejecutar los distintos ataques incluidos en la suite de aircrack.

Es muy fácil de utilizar y no requiere interacción por parte del usuario. Las Fig. 1 y 2 muestran Wepbuster en acción.

Wepbuster is a popular tool which is a bit obsolete although it works perfectly. Wepbuster  will identify every Access Point (AP) nearby and launch all attacks included in the aircrack suite.

It is very easy to use and requires no user interaction. The Fig. 1 and 2 show Wepbuster in action.


Fig. 1 – Wepbuster


Fig. 2 – Wepbuster cracking

Grim Wepa

Grim WEPA

Esta herramienta escrita en java nos permite realizar distintos ataques en redes wireless. El usuario debe seleccionar el AP y el ataque a ejecutar.  En la Fig. 3 vemos el GUI de grim wepa.

This tool written in java allows us to perform various attacks in wireless networks. The user must select the AP and the attack to run. In the Fig. 3 we see the grim wepa GUI.


Fig. 3 – Grim WEPA GUI

Wiffy

wiffy

Wiffy es una sofisticada herramienta automatizada para auditar redes wireless que nos ofrece interesantes opciones como realizar distintos ataques, denegación de servicios (DoS), crear rainbow tables o capturar información de una red mediante karmasploitation (karma + metasploit).

La Fig. 4 es la pantalla de inicio de wiffy y en la Fig. 5 wiffy ha identificado todos los AP cercanos y nos pide cuál atacar. Una vez seleccionado el objetivo AP, wiffy ejecutará todos los ataques de la suite aircrack de forma automática.

Wiffy is a sophisticated automated tool to audit wireless networks that offers interesting features such as performing various attacks, denial of service (DoS), create rainbow tables, or capture information on a network by using karmasploitation (karma + metasploit).

Fig. 4 is wiffy main window and in Fig. 5 wiffy has identified all nearby APs and asks us which attack to execute. After selecting the target AP, wiffy launches all attacks in the aircrack suite automatically.


Fig. 4 – Wiffy menu


Fig. 5 – Wiffy cracking

Wifite

wifite

Wifite es una versátil herramienta que a través de un simple GUI nos permite configurar la sesión de ataque (ver Fig. 6) y una vez configurados los parámetros se abre una ventana en modo texto. Es en esta ventana donde se realizan los ataques a todos los AP identificados (ver Fig. 7)

En cualquier momento podemos interactuar con la sesión pulsando Ctrl+C para cambiar el ataque o pasar a otro objetivo.

Wifite is a versatile tool that through a simple GUI allows us to configure the attack session, see Fig. 6, and once configured the settings a window in text mode is opened. It is in this window where attacks are executed against all identified AP. See Fig. 7.

At any time we can interact with the session by pressing CTRL+C to change the attack or move on to another target.


Fig. 6 – Wifite GUI


Fig. 7 – Wifite cracking

Fern WIFI Cracker

fern

Fern WIFI Cracker es una potente herramienta escrita en python que nos permite realizar distintos ataques mediante un elegante GUI. En la Fig. 8 podemos ver la pantalla de inicio de la herramienta donde se ha realizado un escaneo y se han detectado varios AP.

Ahora ya podemos seleccionar un objetivo y el ataque que nos interese y Fern hará el resto de forma automatizada (ver Fig. 9).

Algunas ventajas de Fern son su extremada sencillez de uso, capacidad de ejecutar distintos ataques y que las contraseñas obtenidas son almacenadas en una base de datos.  Desafortunadamente a veces el programa se cuelga.

Fern WIFI Cracker is a powerful tool written in python which allows you to perform various attacks through a sleek GUI. In Fig. 8 we can see the main window where a scan has been done and has detected several APs.

Now we can select the target AP and the attack that interests us and Fern will do the rest automatically (see Fig. 9).

Some advantages of Fern are its extreme ease of use, capable of executing various attacks and obtained passwords are stored in a database. Unfortunately sometimes the program hangs.


Fig. 8 – Fern GUI


Fig. 9 – Fern cracking

Gerix

gerix

Gerix es la única herramienta de las analizadas incluida por defecto en Backtrack (4 y 5) y es posiblemente la más sofisticada y potente, ya que nos permite realizar distintos ataques o actuar como un AP malicioso de forma sencilla.

En la Fig. 10 vemos el panel de configuración de Gerix, donde podemos seleccionar el objetivo AP. El siguiente paso es ir probando los diferentes ataques, ver Fig. 11.

Gerix is the only tool of the analyzed included by default in Backtrack (4 and 5) and it is possibly the most sophisticated and powerful tool, allowing us to perform various attacks or act as a malicious AP in a simple way.

In the Fig. 10 we see Gerix configuration panel and where we can select the target AP. The next step is to try different attacks, see Fig. 11.


Fig. 10 – Gerix GUI


Fig. 11 – Gerix cracking

Conclusiones

A pesar de que existen más herramientas que nos permiten automatizar ataques wireless las aquí descritas posiblemente sean las mejores y nada tienen que envidiar a las soluciones comerciales. Lógicamente estas herramientas tienen mucho más potencial de lo descrito aquí, por eso recomiendo al lector que juegue con ellas. Además ninguna herramienta es la panacea por lo que el lector debería usar todas o varias por lo menos.

Al ser gratis y de código abierto estas herramientas son una sólida base para poder personalizar a nuestras necesidades y no es demasiado difícil añadirles nuevas funcionalidades, como por ejemplo una vez comprometida un AP realizar ataques a los sistemas utilizando metasploit de forma automatizada. ¿Algún lector quiere esponsorizar este proyecto? 🙂

¿Y tú que herramientas utilizas para auditar wireless?

Despite the fact that there are more tools that allow us to automate wireless attacks the described here may be the best and have nothing to envy to commercial solutions. Of course these tools have much more potential than what was described here, that is why I recommend the reader to play with them. Also no tool is a panacea and therefore the reader should use several or all of them at the very least.

These free and open source tools are a good starting point to customize for our needs and it is not too difficult to add new features like for example once an AP is compromised to execute  attacks on systems using metasploit in an automated manner. Maybe a reader wants to sponsor this project? 🙂

What tools do you use for wireless assessments?

— Simon Roses Femerling

Posted in Hacking, Pentest, Security, Technology, Wireless | Tagged , , , , , , , | Leave a comment

Book Review Week: Practical Lock Picking: A Physical Penetration Tester’s Training Guide

[Español] Nuestras habilidades ofensivas no están completas sin algo de conocimiento sobre seguridad física y este libro rellena ese vacío. Practical Lock Picking: A Physical Penetration Tester’s Training Guide (ISBN-13: 978-1597496117) escrito por Deviant Ollam, todo un maestro en la materia, trata sobre el interesante mundo de las cerraduras y candados y cómo se abren.  

[English] Our offensive skills are not completed without some knowledge about physical security and this book fills that gap. Practical Lock Picking: A Physical Penetration Tester’s Training Guide (ISBN-13: 978-1597496117) written by Deviant Ollam, a master on the field, is about the exciting world of locks and padlocks and how to open them.

La obra se divide en seis capítulos escritos de forma coloquial y está llena de ejemplos prácticos muy bien explicados que hacen la lectura de este libro muy amena y entretenida. El lector pasará de tener cero conocimientos en la materia a tener una buena base teórica, aunque sólo con la práctica se consigue la experiencia.

The work is divided into six chapters written in a colloquial manner and is full of very well explained examples that make the reading of this book very enjoyable and entertaining. The reader will go from having zero knowledge on the subject to have a good theoretical base, although you will get the experience only with practice.

El libro comienza con una introducción a diferentes tipos de cerraduras y sus debilidades para después profundizar en herramientas y técnicas para abrirlas desde nivel principiante hasta nivel avanzado. No os perdáis la sección: The secret weakness in 90% of padlocks 🙂

The book begins with an introduction to different types of locks and their weaknesses for later diving into tools and techniques to open them from a beginner level up to advanced level. Do not miss the section: The secret weakness in 90% of padlocks 🙂

He leído varios libros en la materia pero sin duda éste es el mejor por su sencillez y profundidad. Es de lectura obligatoria para cualquier cerrajero, experto en seguridad, pentester o simplemente como hobby.    

I have read several books on the subject but undoubtedly this one is the best for its simplicity and depth. It is a required reading for any locksmith, security expert, pen tester or simply as a hobby.

Puntación (1 rosa, muy malo / 5 rosas, muy bueno): 5 Rosas (Lectura Obligatoria)

Score (1 rose, very bad / 5 roses, very good): 5 Roses (Mandatory Reading)

— Simon Roses Femerling

Posted in Books, Hacking, Pentest, Security, Technology | Tagged , , , , , | Leave a comment

Book Review Week: Hacking Exposed Malware & Rootkits

[Español] Este libro de la mítica serie Hacking Exposed está orientado al tema del malware y rootkits, en concreto su identificación y eliminación a lo largo de sus tres apartados, que se dividen en once capítulos y un estupendo apéndice. Hacking Exposed: Malware & Rootkits Secrets & Solutions (ISBN-13: 978-0071591188) está escrito por tres profesionales de la industria.

[English] This book of the mythical Hacking Exposed series is focused on the topic of malware and rootkits, in particular its identification and elimination along its three sections divided into eleven chapters and a great appendix. Hacking Exposed: Malware & Rootkits Secrets & Solutions (ISBN-13: 978 – 0071591188) is written by three professionals in the industry.

El primer apartado del libro está enfocado al estudio del Malware, en qué consiste y cómo se propaga. El segundo apartado, el mejor en mi opinión, estudia los rootkits tocando diferentes aspectos como usuario (user land), kernel o incluso rootkits que atacan sistemas virtualizados. La última sección trata sobre tecnologías de seguridad para identificar y prevenir malware y rootkits. Uno de los puntos fuertes del libro es el apéndice, donde se describe cómo crear tu propio sistema de identificación de rootkits apoyado con código fuente.

The first section of the book focuses on the study of Malware, what it is and how it spreads. The second, the best in my opinion, discusses about rootkits in the user space (user land), kernel or even rootkits that attack virtualized systems. The last section deals with security technologies to identify and prevent malware and rootkits. One of the strengths of the book is the Appendix, which describes how to create your own identification system for rootkits supported with source code.

Algunos capítulos son aburridos y nada técnicos (demasiado newbie) lo que resta calidad a la obra, pero como ya mencioné anteriormente el apartado de rootkits y el apéndice hacen que se olviden los puntos flojos y por ello le doy 4 rosas y no 3 en puntuación. Otra crítica negativa es no encontrar todo el código fuente en la web del libro como indican.

Some chapters are boring and not technical (too newbie) and therefore this work loses quality, but as already mentioned above the rootkits section and Appendix make us forget about the weak points and that is why I give 4 roses and no 3 in scoring. Another negative criticism is not to find all the source code on the book website as indicated.

Esta obra es de lectura recomendada para aquellos profesionales en seguridad que quieren conocer más en detalle el tema de malware y rootkits para defenderse. Se recomienda leer esta obra después del otro libro sobre rootkits ya mencionado en el blog.

This work is a recommended reading for security professionals who want to know more about malware and rootkits to defend against it. It is recommended to read this book after the other rootkits book already covered in the blog.

Puntación (1 rosa, muy malo / 5 rosas, muy bueno): 4 Rosas (Lectura Recomendada)

Score (1 rose, very bad / 5 roses, very good): 4 Roses (Recommended Reading)

— Simon Roses Femerling

Posted in Books, Hacking, Pentest, Security, Technology | Tagged , , , , , , , | Leave a comment

Book Review Week: A Guide to Kernel Exploitation: Attacking the Core

[Español] Con cada nueva versión los sistemas operativos incorporan mejores defensas a nivel de usuario dificultando su explotación y por ello los atacantes han enfocado sus esfuerzos al núcleo (kernel), una temática desconocida para muchos pero la llegada de este libro sobre cómo atacar el kernel es todo un despertar.

[English] With each new version operating systems incorporate better defenses at user land to make its exploitation harder and therefore attackers have focused their efforts on the kernel, a subject unknown to many but the arrival of this book on how to attack the kernel is an awakening.

A Guide to Kernel Exploitation: Attacking the Core (ISBN-13: 978-1597494861) escrito por Enrico Perla y Massimiliano Oldani, dos expertos sobre explotación del kernel, trata en sus nueve capítulos como atacar Windows, Linux y Mac OS donde más les duele, el kernel.

A Guide to Kernel Exploitation: Attacking the Core (ISBN-13: 978 – 1597494861) written by Enrico Pearl and Massimiliano Oldani, two experts on kernel exploitation, covers in its nine chapters how to attack Windows, Linux and Mac OS X where it most hurts, the kernel.

El libro comienza con una introducción de por qué atacar al kernel y diferentes tipos de vulnerabilidades para después enfocarse cómo atacar sistemas operativos tan populares como Linux/Solaris/BSD, Mac OS X y Windows (x32 y x64) y acaba explicando las dificultades y cómo superarlas así como  ejemplos reales de cómo crear exploits.

The book begins with an introduction of why attacking the kernel and different types of vulnerabilities to then focus on attacking popular operating systems such as Linux/Solaris/BSD, Mac OS X and Windows (x32 and x64) to end up explaining the difficulties and how to overcome them and real examples of how to create exploits.

Este libro profundamente técnico es de las pocas obras que tratan esta temática con todo lujo de detalles, y donde el lector aprenderá a utilizar debuggers y otras herramientas para escribir exploits y shellcodes desde cero para comprometer la seguridad del kernel de las diferentes plataformas. Como no podía ser de otra manera el libro contiene bastante código fuente escrito en C y ensamblador y todos los ejemplos están disponibles en la web del libro.

This deeply technical book is one of the few works that deal with this subject in great detail where the reader will learn how to use debuggers and other tools to write shellcode and exploits from scratch to compromise kernel security of different platforms. Naturally the book contains a lot of source code written in C and assembler and all examples are available on the book website.

Posiblemente una de las obras más técnicas que he leído en bastante tiempo y que a pesar de sus carencias (algunas erratas y no tocar temas como ataques al Hypervisor) es una estupenda obra de obligada lectura para toda persona dedicada a temas ofensivos.

Possibly one of the more technical works I’ve read in quite some time that in spite of its shortcomings (some typos and not touching topics such as attacks on the Hypervisor) is a great work of required reading for anyone dedicated to offensive subjects.

Puntuación (1 rosa, muy malo / 5 rosas, muy bueno): 5 Rosas (Lectura Obligatoria)

Score (1 rose, very bad / 5 roses, very good): 5 Roses (Mandatory Reading)

— Simon Roses Femerling

Posted in Books, Hacking, Pentest, Security, Technology | Tagged , , , , , | Leave a comment

Book Review Week: Rootkits: Subverting the Windows Kernel

[Español] El arte de los rootkits es fascinante y este libro nos adentra en este arte de forma amena a lo largo de sus diez capítulos con diferentes ejemplos para crear poderosos rootkits en Windows.  Rootkits: Subverting the Windows Kernel (ISBN-13: 978-0321294319) está escrito por dos expertos en la materia, Greg Hoglund y Jamie Butler, autores de varios rootkits públicos.

[English] The art of rootkits is fascinating and this book introduces us to this art throughout its ten chapters with different examples to create powerful rootkits in Windows. Rootkits: Subverting the Windows Kernel (ISBN-13: 978 – 0321294319) is written by two experts in the field such as Greg Hoglund and Jamie Butler, authors of several public rootkits.

El libro contiene una gran cantidad de código fuente que cubre diferentes aspectos para el desarrollo de rootkits como inyección de DLL, creación y manipulación de drivers de sistema,  manipulación de hardware, programación DKOM y uso de canales encubiertos para comunicaciones seguras. El capítulo diez trata sobre tecnologías para detectar rootkits.

The book contains a large amount of source code covering different aspects for the development of rootkits as DLL injection, developing and manipulation of system drivers, hardware manipulation, DKOM programming and use of covert channels for secure communications. Chapter ten deals with technologies to detect rootkits.

Este libro es de lectura obligatoria por ser una de las obras de vanguardia en la materia, incluso otros libros sobre rootkits hacen referencia a este libro. Lo único que echamos de menos es una edición del libro más actualizada ya que algunos apartados se han quedado obsoletos con las nuevas versiones de Windows.

This book is a required reading since it is one of the best works in the field; even other rootkits books make reference to this book. What we miss is an updated edition of the book because some sections have become obsolete with the new versions of Windows.

Por desgracia la web del libro (www.rootkit.com) ya no está disponible por un conocido incidente de seguridad ocurrido este año.

Definitivamente es una magnífica introducción al mundo de los rootkits y sus posibilidades que cualquier experto en seguridad ya sea ofensivo o defensivo debe leer para estar preparado. 

Unfortunately the book website (www.rootkit.com) is no longer available because of a known security incident occurred this year.

Definitely this book is a great introduction to the world of rootkits and their possibilities that any security expert either offensive or defensive must read to be prepared.

Puntación (1 rosa, muy malo / 5 rosas, muy bueno): 5 Rosas (Lectura Obligatoria)

Score (1 rose, very bad / 5 roses, very good): 5 Roses (Mandatory Reading)

— Simon Roses Femerling

Posted in Books, Hacking, Pentest, Security, Technology | Tagged , , , , , , , | Leave a comment

Book Review Week: Fuzzing for Software Security Testing and Quality Assurance

[Español] Fuzzing es posiblemente el método más utilizado hoy en día para buscar vulnerabilidades y este libro nos demuestra cómo hacerlo a lo largo de sus nueve capítulos. Fuzzing for Software Security Testing and Quality Assurance (ISBN-13: 978-1596932142) está escrito por tres reputados expertos en seguridad que han innovado en este área como son Ari Takanen, Jared DeMott y Charlie Miller.

[English] Fuzzing is possibly the most widely used method today to look for vulnerabilities, and this book shows us how to do this through its nine chapters. Fuzzing for Software Security Testing and Quality Assurance (ISBN-13: 978-1596932142) is written by three reputed security experts that have innovated in this area such as Ari Takanen, Jared DeMott and Charlie Miller.

El libro comienza con una introducción a diferentes tipos de vulnerabilidades en aplicaciones para después profundizar en el fuzzing, explicando en qué consiste, uso de métricas, como desarrollar fuzzers efectivos y avanzados, monitorizar y analizar resultados y acaba con el estudio de ejemplos reales. El libro incluso menciona una de mis herramientas, gracias 😉

The book begins with an introduction to different types of vulnerabilities in applications for later dealing with fuzzing in depth, explaining what fuzzing is, use of metrics, how to develop effective and advanced fuzzers, monitor and analyse results and ends with the study of real-life examples. The book even mentions one of my tools, thanks 🙂

La obra está muy bien organizada y trata temas que mucha gente pasa por alto y que son de vital importancia como métricas o cómo se comparan los fuzzers entre sí. El libro también incluye código fuente a modo de ejemplo utilizando conocidos fuzzers. Una crítica negativa al libro son las constantes referencias a un producto comercial por parte de uno de los autores, que es también fundador de la empresa que vende el producto en cuestión.

The work is very well organized and covers aspects that many people ignore that are of vital importance such as metrics or how fuzzers compare between them. The book also includes source code examples using well-known fuzzers. A negative criticism of the book is the constant references to a commercial product by one of the authors, who is also founder of the company that sells the product in question.

Es por todo ello que esta obra es una magnífica referencia para adentrarnos en el apasionante mundo del fuzzing y cómo establecer una infraestructura de fuzzing efectiva que nos permita descubrir el próximo Oday que nos hará ricos y/o famosos.

It is because all these aspects the work is a wonderful reference to delve into the exciting world of fuzzing and how to set up an effective fuzzing infrastructure that will allow us to discover the next Oday that will make us rich and/or famous.

Puntuación (1 rosa, muy malo / 5 rosas, muy bueno): 5 Rosas (Lectura Obligatoria)

Score (1 rose, very bad / 5 roses, very good): 5 Roses (Mandatory Reading)

— Simon Roses Femerling

Posted in Books, Hacking, Pentest, SDL, Security, Technology | Tagged , , , , , , | Leave a comment

Reconstructing JavaScript Exploit

[Español] Recientemente cayó en mis manos un PDF malicioso y como no podía ser de otra manera decidí analizarlo.  Se sabe que en los últimos años los atacantes han estado usando ficheros PDF y SWF para explotar vulnerabilidades e infectar a sus víctimas. Este vector de ataque es uno de los preferidos de las Amenazas Persistentes Avanzadas (APT).

[English] Recently a malicious PDF fell into my hands and naturally I decided to analyze it. It is known that in recent years attackers have been using PDF and SWF files to exploit vulnerabilities and infect their victims. This attack vector is one of the preferred methods of the Advanced Persistent Threats (APT).

Lo primero que nos interesa es determinar el contenido del PDF y para ello utilizamos las PDFtools que nos permiten analizar PDF. Ejecutamos la herramienta pdfid para ver el contenido del fichero y vemos que contiene código JavaScript (ver Fig. 1), que generalmente es utilizado para explotar vulnerabilidades. Si encontramos JavaScript y OpenAction en el mismo  PDF nos interesa analizarlo 🙂

First thing of interest to us is to determine the content of the PDF and for this we use the PDFtools that allow us to analyze PDFs. We run the pdfid tool to view the content of the file and we see that it contains JavaScript (see Fig. 1), which is generally used to exploit vulnerabilities. If we find JavaScript and OpenAction in the same PDF we must analyze it 🙂

Nota PDFtools: para utilizar estas herramientas con Python 2.7 o superior debemos editar los ficheros Python y actualizar la versión!

PDFtools Note: to use these tools with Python 2.7 or higher we must edit the Python files and update the version!


Fig. 1 – PDFtools en acción / PDFtools in action

Ahora que ya sabemos que el PDF contiene código JavaScript podemos usar la herramienta PDFStreamDumper. Esta herramienta es magnífica para realizar análisis de malware.

Now that we know that the PDF contains JavaScript code we can use the PDFStreamDumper tool. This tool is great for malware analysis.

Abrimos el PDF con PDFStreamDumper y en el objeto 0x74FB-0x7B48 encontramos código JavaScript sospechoso (Fig. 2).  Ahora debemos copiar este código desde la propia ventana de texto o pinchando encima del objeto y con botón derecho seleccionar guardar.

Open the PDF with PDFStreamDumper and at object 0x74FB-0x7B48 we find suspicious JavaScript code (Fig. 2). Now we copy this code from text window or by clicking on the object and right mouse button, select save.


Fig. 2 – PDF malicioso en PDFStreamDumper / Malicious PDF under PDFStreamDumper

El código que obtenemos se puede apreciar en la Fig. 3.

The code we get can be seen in Fig. 3.


Fig. 3 – Javascript Exploit / JavaScript Exploit

Observando el código podemos determinar que es un exploit JavaScript muy enrevesado para evitar ser detectado.  Ahora lo que nos interesa es determinar qué hace este exploit por lo debemos hacer ingeniería inversa.

Utilizando la herramienta Malzilla, otra sofisticada herramienta de análisis, insertamos el código JavaScript con algunos pequeños cambios para poder ser analizado en el intérprete JavaScript que la herramienta incorpora.

Observing the code we can determine that it is a JavaScript exploit which is heavily obfuscated to avoid being detected. What we want to do now is to determine what the exploit does by reverse it.

Using Malzilla, another sophisticated analysis tool, we insert the JavaScript code with some minor changes so it can be analyzed in the JavaScript interpreter the tool incorporates.


Fig. 4 – Ejecutando el exploit en Malzilla / Executing the exploit in Malzilla

En la Fig. 4 podemos ver el resultado de ejecutar el código JavaScript malicioso modificado. Una de las técnicas que el exploit utiliza para no ser detectado es el uso de la función Eval() para concatenar dos cadenas de texto que se convierten en código y que se ejecutan mediante el intérprete JavaScript. El resultado son tres sentencias JavaScript.

Nuestro siguiente paso es analizar el código para intentar reconstruir el exploit malicioso. En la Fig. 5 podemos ver las distintas técnicas que el exploit utiliza con el fin de evitar que los anti-virus le detecten.

In Fig. 4 we can see the result of running the modified malicious JavaScript code. One of the techniques of obfuscation is the use of the Eval() function to concatenate two strings that are converted into code that is executed by the JavaScript interpreter. The result is three JavaScript sentences.

Our next step is to analyze the code to try to rebuild the malicious exploit. In Fig. 5 we can see the different obfuscate techniques that the exploit uses to avoid being detected by the anti-virus.


Fig. 5 – Exploit ofuscado / Obfuscated exploit

Los métodos que el exploit utiliza para ocultarse son:

  1. La función adobeexp recibe 2 parámetros: unescape y “%”.
  2. Las variables ddd y VZxgbuj apuntan a unescape.
  3. En la siguiente línea encontramos una shellcode oculta. El exploit llama a la función urpl, que tiene 2 parámetros: “%” y la shellcode. Esta función sustituye la etiqueta NAXX por “%u” y devuelve la shellcode en formato Unicode.
  4. En esta línea se ejecuta un unescape, VZxgbuj, pero antes se concatenan varias cadenas de texto formado: %u0c0c%0c0c. La variable Zod almacena lo que se conoce como el NOP slide.
  5. Utilizando la técnica de Eval() se concatenan dos cadenas de texto para formar una sentencia ejecutable, preparando la dirección de retorno para que al explotar la vulnerabilidad se ejecute el código malicioso, NOP slide + shellcode.
  6. y 7. El exploit utiliza los demás Eval() para preparar el buffer malicioso que llenará el heap, lo que se conoce como Heap Spraying, que consiste en llenar todo el espacio posible en el heap del proceso con código malicioso y al explotar la vulnerabilidad se  redirigirá la ejecución del proceso a una dirección del heap donde reside el código malicioso.

Hemos destripado el exploit y tenemos una clara idea de su funcionamiento. En la Fig. 6 podemos leer el verdadero código del exploit.

The methods that the exploit uses for obfuscation are:

  1. The adobeexp function takes 2 parameters: unescape and “%”.
  2. The variables ddd and VZxgbuj point to unescape.
  3. On the next line we find an obfuscated shellcode. The exploit calls the function urpl, which has 2 parameters: “%” and the shellcode. This function replaces the NAXX tag by “%u” and returns the shellcode in Unicode format.
  4. In this line the code runs an unescape, VZxgbuj, but before it concatenates several strings to form: %u0c0c%0c0c. Now Zod variable stores what is known as the NOP slide.
  5. Using the Eval() technique it concatenates two text strings to form a executable sentence, which prepares the return address containing the malicious code when exploiting the vulnerability, NOP slide + shellcode.
  6. And 7. The exploit uses Eval() again to prepare the malicious buffer that will fill the heap, what is known as Heap Spraying, which consists in filling all possible heap space in the process with malicious code and when exploiting the vulnerability it changes the execution flow of the process to call an address on the heap where resides the malicious code.

We have reversed the exploit and have a clear idea of its operation. In Fig. 6 we can read the exploit code without obfuscation.


Fig. 6 – Exploit / Exploit

El objetivo de este post era analizar y destripar este exploit. Nuestro siguiente paso sería analizar la shellcode. En la Fig. 7 se puede ver cómo he vuelto a modificar el exploit para obtener una shellcode en formato Unicode que sea fácil de analizar. El procedimiento que he seguido para ello es convertir la shellcode en ejecutable y analizarlo con IDA Pro pero eso es otra historia 🙂

The objective of this post was to analyze and reverse this obfuscated exploit. Our next step would be to analyze the shellcode. In Fig. 7 you can see how I modified again the exploit code to get a shellcode in Unicode format which is easy to analyze. The procedure I followed was to convert the shellcode to executable code and analyze it with IDA Pro but that’s another story 🙂


Fig. 7 – Extrayendo la shellcode / Extracting the shellcode

A lo largo de este post hemos utilizado potentes herramientas de análisis y estudiado el procedimiento para analizar código malicioso, una habilidad necesaria hoy en día con tanto PDF y  SWF malicioso que circulan por Internet.

Si el lector tiene algún código malicioso que quiera analizar para el blog que me lo envíe por favor 🙂

¿Que exploits maliciosos te has encontrado?

In this post we have used powerful analysis tools and studied the procedure to analyze malicious code, a necessary skill today with so many malicious PDF and SWFs that circulate on Internet.

If the reader has some malicious code you want us to analyze for this blog sent it our way please 🙂

Have you found any malicious exploits?

— Simon Roses Femerling

Posted in Hacking, Pentest, Security | Tagged , , , | Leave a comment

Exploring Android Malware

[Español] Sin duda el carácter open source de Android lo ha convertido en el terreno favorito de los atacantes entre todas las plataformas móviles. Hoy en día existe una buena cantidad de exploits y troyanos los cuales estudiaremos en este artículo.

[English] No doubt the open source character of Android has become the favorite target of attackers across all mobile platforms. Nowadays there are plenty of exploits and trojans which we will learn in this article.

Hemos analizado nueve conocidos troyanos para Android, que son:

  1. ADRD
  2. Basebridge
  3. DroidDream
  4. DroidKungFu
  5. Geinimi
  6.  jSMSHider
  7. Plankton
  8. TrojanSMS
  9.  Crusewind

We have analyzed nine trojans known to Android, which are:

  1. ADRD
  2. Basebridge
  3. DroidDream
  4. DroidKungFu
  5. Geinimi
  6.  jSMSHider
  7. Plankton
  8. TrojanSMS
  9. Crusewind

Para este ejercicio de análisis simplemente hemos estudiado los permisos que la aplicación solicita y hemos visualizado su código con el fin de entender la complejidad del troyano.
Nota: algunos troyanos contienen código real de una aplicación, por eso la visualización puede parecer más compleja de lo que realmente es.

For this analysis we have only studied the permissions that the application requests and we have visualized its code in order to understand the complexity of the trojan.
Note: some trojans contain real application code so the display may seem more complex than it really is.

ADRD

El ADRD es un troyano de complejidad media descubierto en febrero de 2011 que roba información del teléfono (IMEI, wifi, hardware, etc.). Esta información es cifrada mediante DES y enviada a una serie de páginas web.

The ADRD is a trojan with a moderate complexity uncovered in February 2011 that steals information from the phone (IMEI, Wi-Fi, hardware, etc.). This information is encrypted using DES and sent to a series of web pages.

Otras características de este troyano son que puede recibir parámetros de búsqueda que luego utiliza en Baidu.com, el conocido buscador chino, para aumentar las visitas (ranking) a una determinada página web. También puede recibir actualizaciones del propio troyano que instala silenciosamente en el teléfono. 

Other characteristics of this Trojan are that it can receive search parameters to use in a well-known Chinese search engine, Baidu.com, to increase the (ranking) visits of a particular web page. It can also receive updates of the Trojan to install silently on the phone.

En la Fig. 1 podremos encontrar los permisos que este troyano requiere para su funcionamiento. Algunos de estos permisos son un poco sospechosos, como la necesidad de  leer contactos (READ_CONTACTS), recibir mensajes del sistema (RECEIVE_BOOT_COMPLETED) o modificar parámetros del teléfono (MODIFY_PHONE_STATE) aunque ninguno de estos permisos tiene un riesgo elevado por lo que lo hace más efectivo para pasar desapercibido.

In figure 1 we can see the permissions this trojan requires for its operations. Some of these permissions are somewhat suspicious as the need to read contacts (READ_CONTACTS), receive messages from the system (RECEIVE_BOOT_COMPLETED), or modify parameters of the phone (MODIFY_PHONE_STATE) but none of these permissions have a high risk for which makes it more effective to go unnoticed.

 
Fig. 1 – ADRD permisos / ADRD permissions

También hemos analizado la complejidad del código (app real + troyano) y como se puede apreciar en la Fig. 2 es un troyano bastante simple de analizar. El apk contiene  dos paquetes principales (tat y xx.yyy). Tat se divide en dos paquetes más (cascadeswallpaper.android y livewallpaper.dandelion) y contiene la aplicación real, mientras que xx.yyy contiene el código del troyano. 

We have also looked into code complexity (real app + trojan) and as shown in Fig. 2 is a Trojan rather simple to analyze. The apk contains two main packages (tat and xx.yyy). Tat is divided into two packages more (cascadeswallpaper.android and livewallpaper.dandelion) and contains the actual app code, while xx.yyy contains the trojan code.

 
Fig. 2 – ADRD visualización de código / ADRD code visualization

BaseBridge

Troyano descubierto en junio de 2011 con una sofisticación elevada  y que actúa en dos fases. En la primera fase el troyano utiliza un exploit conocido (CVE-2009-1185) para elevar sus privilegios a root.

Trojan discovered in June 2011 with a high sophistication which operates in two phases. In the first phase the trojan uses a well-known exploit (CVE-2009-1185) to elevate its privileges to root.

Una vez conseguido el objetivo de ser root comienza la segunda fase con la instalación de una aplicación maliciosa, SMSapp.apk, en el teléfono. Esta aplicación permite al troyano comunicarse con los servidores de centro de mando (C&C) utilizando http,  y al igual que otros troyanos roba información del teléfono (IMSI, hardware, versión SO, etc.) que es enviada a páginas web maliciosas.

Once achieved the goal of being root begins the second phase with the installation of a malicious application, SMSapp.apk, on the phone. This application enables the trojan to communicate with the command and control servers (C&C) using HTTP, and like other trojans steals phone information (IMSI, hardware, OS, etc.) that is sent to malicious web pages.

Además el troyano envía y elimina SMS y también realiza llamadas telefónicas a números de pago (Premium).

Moreover the trojan sends and removes SMS and also makes telephone calls to payment numbers (Premium).

Al analizar los permisos (ver Fig. 3) podemos apreciar que algunos son peligrosos como enviar SMS (SEND_SMS) y escribir SMS (WRITE_SMS). Otros permisos menos sospechosos pero interesantes que la aplicación requiere son grabar audio (RECORD_AUDIO), escribir contactos (WRITE_CONTACTS) o leer SMS (READ_SMS).

Analyzing the permissions (see Fig. 3) we can appreciate that some of them are dangerous as send SMS (SEND_SMS) and write SMS (WRITE_SMS). Other permissions are less suspicious but interesting nevertheless as record audio (RECORD_AUDIO), write contacts (WRITE_CONTACTS) or read SMS (READ_SMS).
 

Fig. 3 – Basebridge permisos / Basebridge permissions

Al visualizar la aplicación infectada con el troyano en la Fig. 4 podemos ver una complejidad elevada. Una serie de paquetes (com, jackpal.androidterm, javax, myjava.awt.datatransfer y org.apache.harmony) así como una cantidad de ficheros sueltos (clases sueltas) forman el código del troyano.

When we visualize the application infected with the Trojan in Fig. 4 we can see a high complexity. A number of packages (com, jackpal.androidterm, javax, myjava.awt.datatransfer and org.apache.harmony) as well as a number of loose files (standalone classes) form the trojan code.
 

Fig. 4 – Basebridge visualización de código / Basebridge code visualization

DroidDream

Troyano descubierto en marzo de 2011 con diferentes variantes. Este troyano también utiliza diferentes fases siendo la primera la ejecución de exploits para obtener root. La versión analizada no contiene estos exploits.

Trojan discovered in March 2011 with different variants. This Trojan also uses different phases be the first phase the execution of exploits to gain root. The analyzed version does not contain these exploits.

La segunda fase de este troyano consiste en instalar otra aplicación, a.apk, que sirve para robar información del teléfono (IMEI e ISMI) que es enviada a páginas web que actúan como centros de mando (C&C). Otras características del troyano son el envío y lectura de SMS y la capacidad de recibir actualizaciones de sí mismo.

The second phase of this Trojan consists on installing another application, a.apk, which is used to steal information from the phone (IMEI and ISMI) that is sent to web pages that act as command centers (C&C). Other features of the Trojan are sending and reading SMS and the ability to receive updates of itself.

En el análisis de permisos (Fig. 5) vemos algunos permisos peligrosos como el envío de SMS (SEND_SMS) y la instalación de paquetes (INSTALL_PACKAGES). Otros permisos de interés para el troyano son grabación de audio (RECORD_AUDIO), lectura y escritura del historial del navegador (READ_HISTORY_BOOKMARKS / WRITE_HISTORY_BOOKMARKS) y recibir eventos del sistema (RECEIVE_BOOT_COMPLETED).

In the permissions analysis (Fig. 5) we see some hazardous permissions as sending SMS (SEND_SMS) and installation of packages (INSTALL_PACKAGES). Other permissions of interest for the Trojan are recording audio (RECORD_AUDIO), reading and writing browser history (READ_HISTORY_BOOKMARKS / WRITE_HISTORY_BOOKMARKS) and receive events from the system (RECEIVE_BOOT_COMPLETED).

 
Fig. 5 – DroidDream permisos / DroidDream permissions

Analizando el código vemos una complejidad moderada (ver Fig. 6). El código del troyano está dividido en 5 paquetes (admob, cmn, com, steam y vw).

Analyzing the code we can see a moderate complexity (see Fig. 6). The code of the Trojan is divided into 5 packages (admob, cmn, com, steam and vw).


Fig. 6 – DroidDream visualización de código / DroidDream code visualization

DroidKungFu

Troyano descubierto entre mayo y junio de 2011, similar a otros troyanos estudiados anteriormente ya que divide su funcionamiento en fases. En primer lugar el troyano utiliza dos exploits (CVE-2009-1185 y CVE-2010-EASY), encriptados mediante AES, para obtener privilegios root en el teléfono, aunque a diferencia de los otros troyanos utiliza hasta tres métodos diferentes para obtener root.

Trojan discovered between May and June 2011, similar to other trojans formerly studied dividing its operation into phases. At first the Trojan uses two exploits (CVE-2009-1185 and CVE-2010-EASY), encrypted with AES, to obtain root privileges on the phone, but unlike other trojans uses up to three different methods to get root.

Una vez obtenido root el teléfono, el troyano roba información sobre IMEI, hardware, SO y Wifi que se envía a una página web.  Con los permisos de root el troyano puede instalar paquetes y en este caso instala otro troyano llamado “legacy” que convierte al teléfono en parte de una botnet.

Once obtained root on the phone, the trojan steals information such as IMEI, hardware, OS, and Wi-Fi which is sent to a web page. With root permissions the trojan can install packages and in this case it also installs another trojan called “legacy” which makes the phone part of a botnet.

Analizando los permisos requeridos por DroidKungFu (ver Fig. 7) algunos deberían hacer saltar las alarmas como instalar paquetes (INSTALL_PACKAGES) y resetear paquetes (RESTART_PACKAGES). Otros permisos de interés son el leer el estado del teléfono (READ_PHONE_STATE) o cambiar el estado de la wifi (CHANGE_WIFI_STATE).

Looking at the permissions required by DroidKungFu (see Fig. 7) some should sound the alarm such as installing packages (INSTALL_PACKAGES), and resetting packages (RESTART_PACKAGES). Other interesting permissions are reading phone status (READ_PHONE_STATE) or changing the state of the Wi-Fi (CHANGE_WIFI_STATE).
 

Fig. 7 – DroidKungFu permisos / DroidKungFu permissions

Al analizar el código de este complejo troyano (Fig. 8 ) podemos identificar tres paquetes principales (com, org y uk.co.lilhermit.android.core). El paquete com contiene el código del troyano que se divide en otros dos paquetes, google.ssearch y sansec.

Analyzing the code complexity of this Trojan (Fig. 8 ) we can identify three main packages (com, org, and uk.co.lilhermit.android.core). The com package contains the code for the trojan that is divided into two packages, google.ssearch and sansec.
 

Fig. 8 – DroidKungFu visualización de código / DroidKungFu code visualization

Geinimi

El Geinimi es un sofisticado troyano descubierto en diciembre de 2010 que aunque no utiliza exploits como otros troyanos es peligroso ya que roba información del teléfono como el IMEI y el IMSI. Otras características son el envío de información de posicionamiento (geo-localización), recibir actualizaciones de sí mismo y el envío de SMS.

The Geinimi is a sophisticated trojan uncovered in December 2010 that although it does not use exploits like other trojans is dangerous because it steals phone IMSI and IMEI information. Other features are sending localization information (geo-location), receive updates for itself and sending SMS.

Los teléfonos infectados con Geinimi forman parte de una botnet y el troyano ofusca las direcciones web de los centros de control para dificultar su análisis.

Phones infected with Geinimi are part of a botnet and the trojan obfuscates the web addresses of its control centers (C&C) to make the analysis harder.

Al analizar los permisos requeridos por Geinimi (ver Fig. 9) podemos observar una extensiva lista de permisos necesarios para su funcionamiento. Los permisos que nos tienen que llamar la atención son el envío de SMS (SEND_SMS), resetear paquetes (RESTART_PACKAGES) y escribir SMS (WRITE_SMS). Otros permisos de interés para nuestro análisis son acceso al posicionamiento del teléfono (ACCESS_COARSE_LOCATION), leer contactos (READ_CONTACTS), leer SMS (READ_SMS), escribir contactos (WRITE_CONTACTS) y recibir SMS (RECEIVE_SMS).

Analyzing the permissions required by Geinimi (see Fig. 9) we can see an extensive list of necessary permissions for its operation. The permissions we have to draw attention to are sending SMS (SEND_SMS), resetting packages (RESTART_PACKAGES) and writing SMS (WRITE_SMS). Other permissions of interest to our analysis are access to the location of the phone (ACCESS_COARSE_LOCATION), read contacts (READ_CONTACTS), read SMS (READ_SMS), write contacts (WRITE_CONTACTS) and receive SMS (RECEIVE_SMS).
 

Fig. 9 – Geinimi permisos / Geinimi permissions

A pesar de la sofisticación de Geinimi lo cierto es que es un código bastante simple de analizar (ver Fig. 10) repartido en dos paquetes: admob.android.ads y dseffects.MonkeyJump2. El paquete dseffects.MonkeyJump2 contiene otro paquete, jump2, y ficheros sueltos. Es aquí donde encontramos el código del troyano.

Despite the sophistication of Geinimi the truth is that is a fairly simple code analysis (see Fig. 10) distributed in two packages: admob.android.ads and dseffects.MonkeyJump2. Package dseffects.MonkeyJump2 contains another package, jump2, and loose files (standalone classes). Here is where you find the trojan code.

 
Fig. 10 – Geinimi visualización de código / Geinimi code visualization

jSMSHider

Troyano descubierto en junio de 2011, y a diferencia de otros troyanos su infección se enfoca a usuarios chinos que hayan instalado una ROM personalizada, limitando su peligrosidad. jSMSHider utiliza un exploit para obtener root pero este exploit no ataca al sistema Android  como otros troyanos, sino que explota una vulnerabilidad en la firma digital de las ROMs. Podemos decir que jSMSHider es un troyano diferente a todo lo visto hasta ahora.

Trojan discovered in June 2011 and unlike other Trojans its infection focuses on Chinese users who have installed a custom ROM, limiting his dangerousness. jSMSHider uses an exploit to gain root but unlike other trojans this exploit does not attack the Android system but exploit a vulnerability in the digital signature of the ROMs. We can say that jSMSHider is a trojan different to that we have seen so far.

Una vez obtenido root en el teléfono, el troyano instala otro paquete, testnew.apk, convirtiendo al teléfono en parte de una botnet. Ahora el troyano puede instalar nuevos paquetes, comunicarse con varias páginas web que funcionan como el centro de mando (C&C) utilizando DES para encriptar las comunicaciones y abrir páginas web de forma silenciosa sin que el usuario lo sepa.

Once obtained root on the phone, the trojan installs another package, testnew.apk, making the phone part of a botnet. Now the Trojan can install new packages, communicate with several websites that act as the command centers (C&C) using DES to encrypt communications and open web pages silently without the user knowing.

Imaginamos que esta ROM personalizada debe ser popular en el mercado chino por el grado de sofisticación y el tiempo de desarrollo empleado para este troyano.

We imagine this custom ROM must be popular in the Chinese market by the degree of sophistication and time spent developing this trojan.

En el análisis de permisos de jSMSHider (ver Fig.  11) dos permisos llaman nuestra atención, que son la instalación de paquetes (INSTALL_PACKAGES) y borrar paquetes (DELETE_PACKAGES). Otros permisos de interés son localización (ACCESS_COARSE_LOCATION), leer SMS (READ_SMS) y leer contactos (READ_CONTACTS).

In the analysis of jSMSHider permissions (see Fig. 11) two permissions call our attention, the installation of packages (INSTALL_PACKAGES) and delete packages (DELETE_PACKAGES). Other interesting permissions are phone location (ACCESS_COARSE_LOCATION), read SMS (READ_SMS) and read contacts (READ_CONTACTS).
 

Fig. 11 – jSMSHider permisos / jSMSHider permissions

En el análisis de código (Fig. 12) encontramos un paquete principal, org.expressme.love, que en su interior contiene otros tres paquetes: contentwrapper, logic y ui. En ui es donde podemos encontrar el código del troyano.

In the code analysis (Fig. 12) we see a main package, org.expressme.love, containing inside other three packages: contentwrapper, logic and ui. Ui is where you can find the trojan code.

 
Fig. 12 – jSMSHider visualización de código / jSMSHider code visualization

Plankton

Plankton es un troyano descubierto en junio de 2011 con una sofisticación moderada. Este troyano no utiliza exploits pero el teléfono infectado forma parte de una botnet.

Plankton is a trojan discovered in June 2011 with a moderate sophistication. This Trojan doesn’t use exploits but the infected phone is part of a botnet.

Como otros troyanos Plankton roba información del teléfono como los contactos, el historial y logs del sistema. Otras características son ejecutar comandos y manipular los iconos de acceso (shorcuts) además de la capacidad de encriptar mensajes.

Like other trojans Plankton steals phone information such as contacts, history, and system logs. Other features are running commands and manipulate shortcuts and also the ability to encrypt messages.

Al analizar los permisos de Plankton (Fig. 13) destaca la lectura de logs del sistema (READ_LOGS). Otros permisos interesantes son la lectura del historial (READ_HISTORY_BOOKMARKS), escritura del historial (WRITE_HISTORY_BOOKMARKS) leer contactos (READ_CONTACTS) y leer el estado del teléfono (READ_PHONE_STATE).

Analyzing the permissions of Plankton, Fig. 13, stresses the reading of logs from the system (READ_LOGS). Other interesting permissions are the reading browser history (READ_HISTORY_BOOKMARKS), writing browser history (WRITE_HISTORY_BOOKMARKS), reading contacts (READ_CONTACTS) and reading phone status (READ_PHONE_STATE).
 

Fig. 13 – Plankton permisos / Plankton permissions

En el análisis de código del troyano (Fig. 14) encontramos dos paquetes principales: com y org. Com, a su vez está formando por crazypps.angry.birds.rio.unlocker y plankton. Es en este último paquete donde encontramos el código del troyano.

In the code analysis of the Trojan (Fig. 14) there are two main packages: com and org. Com is formed by crazypps.angry.birds.rio.unlocker and plankton packages. It is the former package where we find the trojan code.

 
Fig. 14 – Plankton visualización de código / Plankton code visualization

TrojanSMS

El TrojanSMS fue descubierto en agosto de 2010 y tiene el honor de ser el primer troyano para Android. Es un troyano muy simple y su infección consiste en enviar SMS a números de pago (Premium) rusos por lo que solo afecta a usuarios en Rusia.

The TrojanSMS was discovered in August 2010 and has the honor of being the first trojan for Android. It is a very simple trojan and his infection consists in sending SMS to Russians payment numbers (Premium) so it only affects users in Russia.

En el análisis de permisos (Fig. 15) podemos ver que sólo requiere un permiso: el de envío de SMS (SEND_SMS).

In the permissions analysis (Fig. 15) we can see that it only requires one permission: sending SMS (SEND_SMS).

 
Fig. 15 – TrojanSMS permisos / TrojanSMS permissions

Igualmente en el análisis de código (Fig. 16) podemos observar la simpleza de este troyano. El código está formado por un solo paquete, org.me.androidapplicacion1, que contiene el troyano.  

In the code analysis (Fig. 16) we can see the simplicity of this trojan. The code is composed of just one package, org.me.androidapplicacion1, which contains the trojan code.

 
Fig. 16 – TrojanSMS visualización de código / TrojanSMS code visualization

Crusewind

Troyano descubierto en junio de 2011 de sofisticación moderada. Este troyano convierte al teléfono en una pasarela SMS (relay) para el envío de SMS de forma silenciosa. Otras características del troyano son el robo de información que se envía a centros de mando (C&C), listar las aplicaciones instaladas y la capacidad de actualizarse a sí mismo.

Trojan discovered in June 2011 with a moderate sophistication. This trojan turns the phone into a SMS relay for sending SMS silently. Other trojan features are the steal of information that is sent to command centers (C&C), listing installed applications and the ability to update itself.

En el análisis de permisos (Fig. 17) dos son los permisos que llaman nuestra atención: leer SMS (READ_SMS) y escribir SMS (WRITE_SMS). Otros permisos interesantes son recibir y leer SMS (RECEIVE_SMS y READ_SMS) y leer el estado del teléfono (READ_PHONE_STATE).

In the permissions analysis (Fig. 17) two permissions catch our attention: read SMS (READ_SMS) and write SMS (WRITE_SMS). Other interesting permissions are to receive and read SMS (RECEIVE_SMS and READ_SMS) and read phone status (READ_PHONE_STATE).
 

Fig. 17 – Crusewind permisos / Crusewind permissions

En el análisis de código de Crusewind (Fig. 18) podemos observar un paquete principal, com.flashp, que se divide en una serie de paquetes (bo, data, http, task, utils y xml) y ficheros. Todos estos paquetes forman parte del código del troyano.

In the code analysis of Crusewind, Fig. 18, we can see a main package, com.flashp, which is divided into a number of files and packages (bo, data, utils, task, http and xml). All these packages form part of the trojan code.

 
Fig. 18 – Crusewind visualización de código / Crusewind code visualization

Conclusión / Conclusion

A lo largo de este artículo hemos analizado diversos troyanos para Android que se encuentran entre las infecciones más comunes y que en varias ocasiones Google ha tenido que eliminarlos del Android Market, pero si un teléfono está infectado es responsabilidad del usuario limpiarlo.

In this article we have analyzed different Android trojans that are amongst the most common infections and several times it Google had to delete them from the Android Market, but if a phone is infected it is the responsibility of the user to clean it.

Entre los troyanos analizados hemos podido observar cómo roban información del teléfono, utilizan exploits para obtener root, instalan troyanos para formar parte de botnets, envían SMS o realizan llamadas y protegen sus comunicaciones mediante canales seguros. Desde luego emplean una buena variedad de técnicas ofensivas.

Among the analyzed trojans we have seen how they steal phone information, use exploits to gain root, install more trojans to form part of botnets, send SMS or make calls and protect communications through secure channels. I would say a high variety of offensive techniques.

Llama la atención la cantidad de troyanos que son de origen chino y en especial el jSMSHider ,que está totalmente focalizado a una serie de usuarios en concreto. ¿Puede ser que todo este desarrollo de tecnologías ofensivas sea parte del programa de ciberguerra del gobierno? Lo que está claro es que los atacantes chinos están muy activos.

It is striking the number of trojans that are Chinese in origin, and especially the jSMSHider that is targeted on a number of particular users. Could it be that all these developments of offensive technologies are part of the Chinese Government cyber warfare program?  What is clear is that Chinese attackers are very active.

Es de esperar que el número de troyanos aumente en las plataformas móviles, si no ¿por qué tanto antivirus disponible para teléfonos?

It is expected that the number of trojans will increase in the mobile platforms, if not why so many antivirus available for phones?

Si alguna persona está interesada en un análisis técnico con más detalle de los troyanos del artículo, estaré encantado de proporcionarlo por un precio 😉

If anyone is interested in a technical analysis with more details of any trojans in the article, I’ll be happy to provide it for a price 😉

Por ultimo dar las gracias a Mila y la lista Mobile Malware por proporcionar copias de los troyanos.

Finally thanks to Mila and Mobile Malware list by providing copies of the trojans.

¿Qué troyano te ha gustado más?

What trojan did you like most?

— Simon Roses Femerling

Enlaces / Links

Posted in Hacking, Security, Technology | Tagged , , , , | 10 Comments

Source & ToorCon Seattle blast

[Español] Coincidiendo con mi visita a Seattle / Redmond por trabajo la semana pasada se celebraban dos importantes congresos de seguridad, Source y ToorCon Seattle, que han sido todo un éxito.

[English] Coinciding with my visit to Seattle / Redmond for work last week two important conferences  took place, Source & ToorCon Seattle, that have been a success.

Por desgracia no pude asistir a ninguna charla de Source, celebrado en el museo marítimo, pero el feedback de los asistentes es que las charlas fueron de mucho nivel y gustaron mucho. Pero sí pude asistir a las fiestas que se celebraron cada noche por el centro de la cuidad donde se reunían ponentes, asistentes y muchas personas de la escena hacker de Seattle, mucho más potente de lo que me imaginaba 🙂

Unfortunately I could not attend any talk at Source, held at the Maritime Museum, but the feedback from attendees was that talks were high quality and really liked them. But I was able to attend the parties held every night around downtown where meet speakers, attendees and many people of the Seattle hacker’s scene, much more powerful than I imagined 🙂

En breve en la web de Source están disponibles las presentaciones así como los videos de las diferentes charlas que no podéis perder!

Shortly on the Source website the presentations should be available as well as videos of the different talks that you cannot miss!

El fin de semana se celebró ToorCon en un bar con más de 30 charlas en un mismo día, ya que cada presentación duraba 15 minutos. Lo cierto es que esta agilidad me gustó mucho y los temas fueron muy diversos. Gracias a todos los sponsors por las bebidas gratis 😉

On the weekend was held ToorCon in a club with over 30 talks on the same day as each talk lasted 15 minutes. The truth is I liked a lot this dynamism and the talk topics were very broad making them very good. Thanks to all sponsors for the free drinks 😉

Desde luego dos excelentes congresos con muy buen rollo y si consiguieran establecer una alianza y celebrarlo en conjunto de forma anual sería una cita obligada para los profesionales del sector.

Without doubt two excellent conferences with a good vibe and if they managed to establish a partnership and celebrate it together on a yearly basis it would be a must for any security professional.

Lo genial de estos dos congresos fue su localización, no el típico hotel, y que son pequeños y se puede hablar con todo el mundo por el buen ambiente que existe entre todos los asistentes.

Mis felicitaciones a la organización de ambos congresos por un magnifico evento 🙂

The greatness of these two conferences was their location, not being held at the typical hotel, and that were quite small and you can talk to everyone because of the good atmosphere among all attendees.

My kudos to the organization of both conferences for the wonderful events 🙂

 — Simon Roses Femerling

Posted in Conference, Security, Technology | Tagged , | Leave a comment