Detección de malware basado en anomalías en aplicaciones web

7

En parte soy responsable de la seguridad y la detección de malware (en general) de una gran cantidad de cuentas de hosting. Nuestros métodos se basan en gran medida en la detección basada en firmas proporcionada por ClamAV para la cual también hemos creado una base de datos de firmas bastante decente (más de 500 muestras).

Recibimos hasta 30-40 notificaciones diariamente por el código malicioso que se detecta en la cuenta de un usuario. A medida que pasa el tiempo, los piratas informáticos se vuelven más intuitivos y siempre logran mantenerse al día con nuestro progreso (la comunidad de Whitehat en su conjunto) cuando intentamos detener sus intentos de explotar vulnerabilidades. Sin embargo, parece que la detección de códigos maliciosos basada en firmas se está volviendo cada vez más insuficiente: seguimos encontrando nuevas muestras de malware que nuestro análisis no pudo detectar inicialmente. Por lo tanto, me tomé la libertad de intentar y diseñar un sistema para la detección de anomalías estrictas.

Estoy pidiendo consejo sobre si mis planes actuales pueden considerarse razonables, ya que es la primera vez que me ocupo de esa tarea.

Creo que mientras más condiciones verifique el archivo, mejores resultados puedo obtener (eliminando los falsos positivos tanto como sea posible). Hasta ahora he creado la siguiente lista de condiciones:

  • ubicación del archivo (5%)
  • nombre de archivo (10%)
  • código ordenado / alineación (5%)
  • patrones de repetición (5%)
  • nombres extraños / no lógicos de estructuras de datos (10%)
  • apilamiento de funciones múltiples (3%)
  • informe de errores inhabilitado (5%)
  • supresión de errores utilizada (2%)
  • contiene hex (es decir, \ x73) (3%)

Donde cada una de las condiciones le da al archivo un cierto porcentaje de lo que es potencialmente malicioso o tiene contenido malicioso dentro. Mis preguntas son: :

  1. ¿Es este un enfoque correcto / correcto para desarrollar un sistema de detección basado en anomalías estricto? Si no, ¿por qué?
  2. ¿Puede darme ejemplos de qué más puedo revisar un archivo? ¿Algún consejo o información útil?

Considera que:

  1. Está dirigido a aplicaciones web y en su mayoría a archivos PHP;
  2. Muchos de nuestros clientes utilizan CMS. Tal vez es mejor basar el sistema en un determinado CMS?

Gracias.

    
pregunta McJohnson 02.03.2017 - 23:25
fuente

2 respuestas

1

Actualmente estoy investigando en el área de seguridad de la red, donde mi tema es la detección de anomalías para los mensajes de registro. Sin embargo, espero poder proporcionar algunas ideas para su problema.

(1) Las firmas son feas, pero funcionan. Aunque todos hablan sobre la detección de anomalías y temas similares, en la actualidad las firmas siguen siendo la forma más confiable de detectar código / actividad maliciosa, etc. Por lo tanto, debe continuar usándolos y no espere, que alguna detección de anomalías podrá reemplazar completamente

(2) Las firmas son, por supuesto, muy limitadas y no pueden identificar un nuevo tipo de código malicioso / ataques / etc. Luego hay intentos de resolver este problema con la detección de anomalías. La principal desventaja de la detección de anomalías es que siempre produce alertas falsas positivas que debe procesar y filtrar. La tendencia actual es construir sistemas híbridos: primero aplique firmas y quizás algunas consultas, y luego realice la detección de anomalías además de esto.

(3) Definitivamente debería ser posible crear un enfoque de detección de anomalías para su problema basado en algunas técnicas de aprendizaje automático (según su lista de condiciones; en teoría, también puede ser posible analizar el código PHP, es decir, realizar una anomalía de código estático detección, pero esto podría ser bastante complicado / gran proyecto). Sin embargo, no espero que atrape todo el código malicioso. El número realista podría ser algo así como una tasa de detección del 70-80% con una tasa de falsos positivos del 10-20%. Entonces, si verifica 1000 archivos y 10 de ellos son maliciosos, probablemente en el mejor de los casos podrá desarrollar un sistema que le devolverá 100 alertas, donde se detectarán 8 de 10 archivos maliciosos, pero el resto (digamos 92 otras alertas) serán falsos positivos. Además, probablemente 6-7 de estos 8 ya se hayan detectado con firmas y consultas.

Espero no ser demasiado pesimista aquí. A veces, para casos de uso específicos, es posible lograr una tasa de verdaderos positivos del 98-99% con una tasa de falsos positivos del 1-2%, pero no estoy seguro si tendrá tanta suerte en su caso. Además, no conozco suficientes detalles sobre su caso de uso para hacer predicciones.

(4) Sin embargo, si podrá clasificar sus resultados, entonces la parte superior de la salida de detección de anomalías contendrá más alertas verdaderas positivas y menos falsas positivas. Por ejemplo, si su sistema devolverá 100 alertas clasificadas, solo puede mirar en el top 30 de ellas. Y estos 30 contendrán 6 resultados verdaderos positivos y solo 24 falsos positivos (que en cierta medida es mejor que 8 verdaderos positivos y 92 falsos positivos). A continuación, si observa las 5 alertas mejor calificadas, es probable que contengan 1-2 positivos verdaderos y 3-4 positivos falsos. Y esto es lo que puede verificar diariamente además de sus resultados de detección basados en firmas.

Puede contratar a un experto en minería de datos / aprendizaje automático para que cree un sistema de este tipo, o intente hacerlo usted mismo, si posee suficientes habilidades.

No he encontrado demasiados artículos de investigación relevantes (lo que no es una buena señal), pero espero que lo siguiente pueda ser relativamente útil para usted:

Finalmente, debería haber algunas soluciones alternativas a este problema. Lo he buscado en Google y esto es lo que he encontrado hasta ahora:

También no es demasiado (solo un enlace), pero espero que puedas intentar buscar más, debería haber algunas técnicas como el sandboxing. Tal vez puede consultar este pdf para obtener información relevante.

    
respondido por el Andrey Sapegin 03.03.2017 - 11:36
fuente
0

Esto no pretende ser una respuesta completa a tu pregunta, pero es más largo de lo que cabe en un comentario, así que aquí va:

Creo que es un enfoque interesante, siempre y cuando sepas que, obviamente, nunca será capaz de detectar todo el malware, ya que no importa qué criterios configures, se pueden solucionar.

Por ejemplo, el último, "contiene hexadecimal", puede solucionarse fácilmente especificando los valores hexadecimales como una matriz de números decimales, o como una cadena codificada en base64, y se puede lograr automáticamente "código ordenado" ejecutando un archivo a través de xxxtidy, donde xxx representa la versión de código de orden de su lenguaje de programación favorito.

Tampoco estoy seguro de cómo planea detectar "nombres extraños, no lógicos de estructuras de datos". Eso me parece un problema imposible. Y no estoy seguro de lo que significa "apilar múltiples funciones"; si lo comprendo correctamente, eso es algo que generará una gran cantidad de falsos positivos.

Aún así, la razón por la que encuentro este enfoque interesante es porque aunque nunca será perfecto, probablemente ayudará a detectar programas sospechosos, al igual que jslint, pylint, etc., ayudan a detectar problemas en el código regular.

Si conoce el lenguaje de programación con el que está tratando, también puede verificar si hay llamadas sospechosas como llamadas que intentan iniciar un shell del sistema, llamadas que intentan abrir sockets de red, redirigir entradas o salidas, llamadas a eval, llamadas que intentan abrir archivos externos para leer o escribir, etc.

Implementación

Aquí es donde creo que te encontrarás con dificultades, al menos si estás basando tu idea en escanear archivos PHP individuales. No quisiera escribir analizadores que puedan detectar de manera confiable todos los criterios mencionados. Eso suena como una gran cantidad de trabajo.

Alternativa

Una alternativa a la búsqueda de patrones de código específicos en archivos php podría ser buscar consecuencias específicas de la ejecución de dichos patrones de código. Por ejemplo, si está buscando un código que intente abrir un socket de red, es probable que sea bastante difícil de detectar, pero es muy fácil ejecutar periódicamente nmap o netstat y verificar los puertos que no deberían estar abiertos. Es difícil verificar el código que se escribe en archivos externos, pero crear una lista de, por ejemplo, todos los archivos ejecutables bajo / tmp, o archivos con fecha y hora reciente bajo / usr / local / bin, es fácil. También puede buscar procesos de shell raíz activos, etc.

Técnica anterior

Hay varios programas que ya hacen parte de eso. Por ejemplo, rkhunter under linux busca cambios sospechosos en su sistema de archivos, tripwire y snort serían otras dos soluciones para revisar.

Una sesión rápida de Google también muestra enlace y enlace , que ambos parecen hacer exactamente lo que estás proponiendo.

    
respondido por el Pascal 03.03.2017 - 01:24
fuente

Lea otras preguntas en las etiquetas