Mostrando entradas con la etiqueta Auditoria. Mostrar todas las entradas
Mostrando entradas con la etiqueta Auditoria. Mostrar todas las entradas

miércoles, 30 de marzo de 2011

Cómo buscar vulnerabilidades en software

Hace mucho que no escribo nada, y esta vez será solo para recomendaros un artículo escrito por mi. El artículo describe las formas de búsqueda de vulnerabilidades actuales, aunque con ingenio seguramente se os ocurra alguna que sea eficaz también.

Cómo buscar vulnerabilidades en software
Voy a introducir en mi primer post en este blog, el cual trata sobre la búsqueda de vulnerabilidades enfocadas a binarios y no a aplicaciones web. Normalmente, los software vulnerables a buffer overlow, vulnerabilidades double free, null dereference… están programados en C o C++, lo que aumenta su peligrosidad, ya que otros lenguajes de programación tratan, por ejemplo, los arrays de caracteres de forma segura chequeando el tamaño de los mismos, en cambio en C Y C++, se le da total libertad al programador y es él quien debe encargarse de esos chequeos, esto no pasa en lenguajes como Java, Ruby, Perl, Delphi, etc.
Cuando auditamos una aplicación en busca de vulnerabilidades, podemos hacerlo de dos formas, a partir de su código fuente, lo que se llama análisis de código fuente, también llamada auditoría de Caja Blanca (WhiteBox), o a partir del binario de la aplicación llamada auditoría de Caja Negra (BlackBox). Realmente, en ciertas ocasiones podemos tener sólo disponibles partes del código pero de momento vamos a ir viendo esos dos casos:

Auditoría de código fuente
Para realizar dichos análisis, debemos indispensablemente saber programar muy bien en algún lenguaje como C y alguno orientado a objetos. Cuantos más conocimientos se tenga de programación, varios lenguajes completamente distintos, tecnologías, framework’s, etc. Nos será más efectivo llevar el análisis de código, además de conocer los posibles tipos de vulnerabilidades existentes, y normalmente en qué situaciones son provocadas o qué funciones son muy peligrosas de utilizar, si no se controlan bien. Para ello, nos podemos informar en internet aunque al final dejaré enlaces y libros enfocados a fallos típicos en binarios, los cuales pueden ser de nuestro interés para analizar aplicaciones en busca de vulnerabilidades. En la auditoría de binarios veremos algunas técnicas que perfectamente pueden servir para esto.

Análisis de binarios
En este caso suele estar disponible sólo el ejecutable, ya sea el típico PE de Windows, ELF de Linux, ROM…Veremos ejemplos más delante de binarios sobretodo enfocados a Windows. Veamos varias formas de buscar vulnerabilidades en binarios:

-Fuzzing: Consiste en realizar pruebas automáticas, en base a una investigación previa sobre la estructura de lo que queremos analiza, ya sea mediante el documento de especificación, o reverseando algún programa. Se utiliza para todo tipo de programas, pero es normal verlo para programas que abren “X” tipo de fichero y tienen una estructura interna por dentro. Por ejemplo, los pdf’s que están de moda, tienen una estructura y si se hace un programa que vaya generando numerosos documentos pdf’s malformados, pueden salir que un mismo pdf puede afectar a varios programas que no tienen nada que ver o que van copiando partes unos de otros, incluso varios fallos en un mismo lector de pdf’s.

-Ingeniería inversa: Mediante un depurador o desensamblador, como IDA Pro u OllyDbg, se puede ver el código en ensamblador y depurar el mismo. Tenemos el problema de que puedan ir protegidos, y se necesita un conocimiento en estas áreas, pero son herramientas perfectas si sabemos dónde buscar y nos pueden ayudar bastante a encontrar vulnerabilidades complejas, o incluso backdoors dejadas por programadores, que no se esperan que nadie pueda verlas, por ejemplo un condicional tipo ” if(password == “magicword:P”) “.

-Decompilación de código: A partir de decompiladores específicos de cierto lenguaje como los existentes para Delphi o .NET, tendríamos disponible el código fuente, siempre y cuando no viniera ofuscado ni con otras protecciones que llevaran más tiempo analizar. En este tipo de lenguajes y binarios pueden ser comunes los fallos tipo Command Injection y demás. Si intentamos decompilar un binario con código C/C++ podemos usar el IDA Pro con un plugin llamado Hex-Rays Decompiler que te lo traduce a código C aunque se pierden todos los símbolos y es difícil de seguir, pero mejor C que ensamblador en muchas ocasiones. De este modo, podríamos comenzar una auditoría manual y un análisis automatizados del código fuente como el de Buguroo BugScout.

-Ejecución simbólica: Es una técnica que, a partir de un método que se ejecuta al principio (un mecanismo interesante es el de proporcionar de entrada “X” valores de interés como entradas de usuario, para ello habría que adaptar el programa) es capaz de recorrer dinámicamente, todas las posibles rutas de ejecución de un programa y así encontrar vulnerabilidades difíciles de encontrar mediante otros métodos. El compilador-optimizador se llama LLVM y para esta tarea de búsqueda de vulnerabilidades se suele usar la máquina virtual KLEE. Se necesita compilar el código fuente de C, por ejemplo, con gcc-llvm. Se utiliza para programas que ya han sido testeados muchas veces. Este método puede descubrir alguna vulnerabilidad adicional ya que explora todo en ejecución y algunos compiladores modifican el código cuando compilan, (optimizaciones y demás) y se han dado varios casos en los que los códigos se han vuelto inseguros a través de estas modificaciones.

- Diff de binarios: Actualmente, un modo de hacer exploits es una vez que han parcheado un software, se aplican comparaciones entre la versión parcheada y la antigua, como pasa con los parches de Microsoft del tipo MS11-xxx, y se descubre el trozo de código que ha cambiado y se puede ver el fallo. Aunque propiamente el fallo ya ha sido descubierto antes, a veces se puede usar para encontrar fallos que han parcheado de manera silenciosa. Esta técnica también se puede aplicar a la auditoría manual si es un diff de código disponible.

-Testing manual: Hay varias formas de realizar este testeo para lograr buenos resultados, vamos a repasarlos brevemente:

Dejar la aplicación en manos de compañeros desarrolladores, y que vayan accediendo por todos lados probando inputs aleatorios y en algún caso, si existen zonas restringidas se les pase claves para que vayan probando en todas las zonas.

Una técnica utilizada por muchos productos, es lanzar el producto en versión Beta, y que la gente reporte problemas y errores descubiertos mediante su uso, estas versiones suelen llevar formas de reporte especial, además algo molestas para usuarios que en versiones oficiales no tienen.
Después de repasar cada método podemos inferir que ventajas y limitaciones tiene cada uno. En base a las limitaciones temporales que conlleva en muchas ocasiones la búsqueda de vulnerabilidades, elegiremos uno u otro. Utilizando todos de forma eficaz se puede llegar a un construir un software seguro.

También hay que destacar que hay tipos de análisis que se solapan. Por ejemplo, en este artículo no veo necesario entrar en el caso del threat model. Abajo os muestro algunos enlaces divididos por vulnerabilidades descubiertas con los distintos tipos de búsqueda de vulnerabilidades. Además, os dejo información de algunos de los temas tocados para que investiguéis en profundidad, aunque en posteriores post se irán tocando estos temas y otros de cómo aprovechar dichas vulnerabilidades mediante exploits.

Enlaces sobre distintos tipos de vulnerabilidades descubiertas con los métodos vistos:

Fuzzing:
Ingenieria Inversa:
Decompilación:
Ejecución Simbólica:
Diff de binarios:
Manual testing:
*Decir que hay cientos de ejemplos en Internet, es cuestión de buscarlos. Entre ellos, alguno mio del que estoy seguro del método que se usó para descubrir la vulnerabilidad. En algún enlace se puede ver mezcla de métodos, incluso alguno general que tienen muchas vulnerabilidades pero que considero interesantes.
Otros enlaces de interés:

 Link: http://blog.buguroo.com/?p=344

Saludos!!

viernes, 29 de agosto de 2008

PHP - Auditoría del código fuente

Acostumbrado a entrar en páginas como SecurityFocus o Milw0rm, ya me canso de siempre ver lo mismo, cada segundo sale una vulnerabilidad nueva que tiene que ver con CMS, o demás en lenguaje PHP. Ya sea porque trabajan muchos programadores y aunque intenten programar de forma segura se les escape algo, o porque ni se preocupen de la seguridad, siempre hay vulnerabilidades.

Por lo que, para los vagos, o los pobres que no puedan contratar una empresa especializada, hay bastante buen código que te hace un análisis bastante eficaz.

Os dejo dos herramientas:

Skavenger:
Esta herramienta busca fallos en php, aunque modificándola puede buscar en más tipo de lenguajes mediante el uso de expresiones regulares más que nada.

DAphpscan:
Funciona mediante expresiones regulares y es bastante más completa que la anterior, busca entre otras cosas: RCE, RFI, LFI, XSS, Inyecciones SQL, CSRF, etc...Todo basandose en funciones que suelen conllevar algun peligro y que no sn filtradas adecuadamente, o no están declaradas correctamente.


Yo personalmente no las probe con código, pero con sólo ver como es el código de ambas, sobre todo de la segunda, se ve que puede detectar fácilmente fallos.
Os dejo un sitio donde hablan de la auditoría en PHP

sábado, 3 de noviembre de 2007

P1mp4m T34M

Bueno hace nada nos mudamos del Blog de P1mp4m a la web oficial y foro de momento P1mp4m.es en el cual se va a dar ayuda a todos los usuarios que lo necesiten, además de integrar algunos cambios que principalmente no tienen todas las web de este tipo como son: Un laboratorio (la idea que más me gusta), en el cual al principio se cogerá software que tienen vulnerabilidades para estudiarlo y de ese modo aprender, además de poder encontrar otras posibles vulnerabilidades en el mismo software que no estén publicadas, el tipo de aplicaciones principalmente serán las basadas en Web, y muy probable que PHP las que más, pero a lo largo del tiempo si todo va bien, se podría incluir bajo ASP.Net y aplicaciones software (tema bastante interesante).

También se va a incluir una biblioteca con todo tipo de manuales, y artículos escritos por el team o por gente de la comunidad, abarcando temas actuales sobretodo.

Todo esto se está planeando y está quedando montado de tal forma que cuando empiecen a llegar usuarios ya esté finalizada la web.

Así que espero que os guste y disfruten con el contenido y aprendiendo!! Sobretodo hay que ser autodidacta muchas veces pero con ayuda de alguien que siempre viene bien.

P1mp4m

martes, 16 de octubre de 2007

Auditoria de una pagina a nivel Web

Esta vez voy a hablar de como vulnerar una web de un modo general y sencillo, es decir, los pasos que tenemos que seguir generalmente para encontrar posibles fallos para defacear una web y ya de paso también sirva a los webmasters que quieran comprobar la seguridad de su web y asi estar siempre mas seguros. Asi que os muestro mas o menos mi metodologia que utilizo yo. Para ello haremos un riguroso analisis de la web en cuestion.

Podemos seguir estos 10 sencillos pasos:

1-Mirar con que lenguaje se programo la web: Php, Asp, Html, XML, Flash...
1.1- Html: seguramente haya que buscar otro modo, como por el servidor o mirar a ver si hay alguna parte que no sea html
1.2- Javascript, Flash, Java...paginas que contienen partes importantes en estos lenguajes como autentificacion pueden ser vulnerados facilmente, ya que se puede conseguir el codigo.
1.3- Asp, Php, XML...suelen tener graves problemas ya que se puede hacer muchas cosas con esos lenguajes, en esta nos centraremos a nivel web muchas veces.

2-Buscar si la pagina web es un paquete precompilado tipo CMS, por ejemplo, como Joomla, Php-Nuke, etc. Si lo es suele ser algo a nuestro favor ya que dispondriamos del codigo porque es libre y visible para todos.

3-Ver si existe robots.txt que sirve para ver directorios ocultos que el robot de google por ejemplo mira para que no cachee esos directorios, suele dar info de cosas importantes como directorio del admin.

4-Uso de buscadores para encontrar posibles archivos o directorios importantes: site:www.sitio.com eso encontraria varios enlaces en lo que podria estar alguno importante.

5-Directorios y archivos comunes: admin.***, administracion.***, login.***, etc y entre directorios: /zona admin/;/administracion/...etc. Un programa que da buenos resultados en busqueda de directorios es el acunetix que suele buscar directorios comunes en los que puede a ver logueos y demas.

6-Referenciado al punto 2, se podria buscar posibles fallos de ese paquete en www.milw0rm.com del colega str0ke, pagina que suele albergar todo tipo de exploits.

7-En caso de no encontrar nada ahi o en otras webs, tantear y probar tu mismo en sistemas de logueo de usuarios, de administracion, de busqueda, etc, inyecciones o sino en variables mediante GET O POST inclusiones, XSS, y otros tipos de vulnerabilidades.

8-Si nada de esto funciona la cosa es ponerse a investigar en el codigo tu mismo si lo tienes disponible, para ello deberas saber mas informacion de como y donde se producen las tipicas vulnerabilidades.

9-Un meto alternativo ya fuera de esto seria la Ingenieria Social, pero que no he probado ya que nunca he atacado un servidor especifico por algun motivo pero suele ser muy buena debilidad porque los empleados no estan preparados como deberian estarlo.

10-Otras formas ya que no tienen que ver con este texto, como es entrar por el servidor o ir a la empresa y hacer a lo espia, ahi con tu traje negro como si fueras uno mas, asi seguro te lo pases mejor.

*Un metodo bastante importante que se me olvidaba es buscar si es un servidor compartido para ello tenemos la herramienta Reverse IP de Seologs y a partir de ahi buscar en otras webs para lograr entrar al servidor y al fin llegar a la nuestra.


Este texto principalmente esta hecho rapidamente y para que tengan una idea mas o menos asi que es posible que la cague por las prisas y bueno como me lo pidieron varios usuarios de yashira.org pues me anime a escribirlo aunque es algo que se va aprendiendo con la experiencia, espero que al menos os guie un poco.

Cualquier cosa decirme y lo cambio, aun asi mañana le dare un vistacillo si saco tiempo, ademas me acostumbrare a poner tildes que no las suelo poner para evitar problemas.