viernes, 8 de julio de 2016

Conocimientos para detectar si un PDF es malicioso - Parte 2 y última

Estructura  lógica de un archivo PDF

Ya se ha visto la estructura física, veamos ahora la estructura lógica de un archivo PDF.

Tal y como se ha perfilado, los archivos PDF funcionan a través de objetos. Estos objetos se reúnen en lo que se denomina: objetos indirectos, es decir, los objetos indirectos son objetos con nombre que contienen objetos u otros objetos indirectos.

Estos objetos indirectos vienen representado por las palabras claves: obj y endobj. Más concretamente, un objeto indirecto viene representado de la siguiente manera:

<ID> <Versión del objeto> obj
...
endobj

Leyenda:

ID           Identificador del objeto indirecto.
                Los identificadores pueden NO ser secuenciales en el archivo PDF

Versión del objeto  Cuando se crea un objeto indirecto este valor es de 0, si por cualquier 
                                circunstancia el objeto indirecto se actualiza el nuevo objeto indirecto 
                                podrá el valor 1, es decir, este valor indica la cantidad de veces que el  
                                objeto indirecto ha sido actualizado

La estructura lógica de un archivo PDF tiene forma de árbol.

La estructura parte de un objeto indirecto raíz, denominado: Document catalog, que se ramifica en las siguientes áreas o ramas:

1.- Page Tree
2.- Outline hierarchy
3.- Article Theards
4.- Named destinations
5.- Interactive form

NOTA: El Document Catalog, es el elemento /Root de la sección Trailer.

El objeto indirecto 1470 0 es el Document Catalog del documento PDF

El objeto Document Catalog tiene entre las entradas más interesantes, las siguientes:

1.- /Type
2.- /Version
3.- /Extensions
4.- /Pages  --> referencia al objeto indirecto referenciado como: Page Tree
5.- /Dests
6.- /Outlines
7.- /Threads
8.- /Metadata

Contenido del objeto: Document Catalog

En la sección o rama, Page Tree, es donde encontraremos los objetos indirectos de tipo: page., que podemos decir que son las páginas de nuestro documento PDF que veremos al abrir el documento.

Estos objetos: Page Tree, tienen las siguientes entradas:

1.- /Type
2.- /Parent
3.- /Kids --> Array que contiene los objetos indirectos de tipo: Page, que caen directamente del objeto: Page Tree.
4.- /Count --> específica el número de nodos hojas que posee esta rama o sección

El objeto indirecto 1457 0 es el Page Tree del documento PDF


Contenido de uno de los objetos: Page, más concretamente del objeto indirecto: 1458 0

Es decir, si seguimos la secuencia, el árbol iría quedando:

Objeto 1470 (Document Catalog)
                Objeto 1457 (Page Tree)
                               Objeto 1458 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1459 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1460 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1461 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1462 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1463 (Pages)
                                               <Objetos contenidos en el objeto: page>
                               Objeto 1464 (Pages)
                                               <Objetos contenidos en el objeto: page>


Ahora que sabemos cómo se encuentra estructurado un archivo PDF, ¿qué debemos buscar para determinar si un archivo PDF puede ser malicioso?

A la hora de analizar un archivo PDF deberemos de fijarnos en los objetos indirectos, más concretamente en:

1.- /Page
2.- /JS
3.- /JavaScript
4.- /AA
5.- /OpenAction
6.- /AcroForm
7.- /JBIG2Decode
8.- /RichMedia
9.- /Color with a value larger than 2^24

Vamos a ver más en profundidad la información que nos puede aportar cada tipo de objeto.

1.- /Page: Nos indica el número de páginas que posee el documento, en el caso de tener un archivo malicioso con total seguridad sólo tendrá 1 página.

2.- /JS, /JavaScript y /RichMedia: Indican que el archivo PDF contiene código Javascript (los dos primeros tipos) o código flash. ¡¡Os imagináis las posibilidades!!

3.- /AA, /OpenAction y /AcroForm: Indican la existencia de una acción automática que se realiza cuando el documento o página es visualizado. En documento maliciosos, pueden ser utilizados para ejecutar código JavaScript u otro sin interacción del usuario.

4.- /JBIG2Decode y /Color with a value larger than 2^24: Indican la presencia de filtros vulnerables.

Con un conocimiento pormenorizado de la estructura interna de un archivo PDF, se puede hacer lo siguiente:

https://blog.didierstevens.com/2016/06/07/recovering-a-ransomed-pdf/

Bibliografía

resources.infosecinstitute.com/pdf-file-format-basic-structure/
Documento: Analyzing Malicious PDF Fiels by Didier Stevens


No hay comentarios:

Publicar un comentario