En este informe realizamos un análisis de los ataques DoS. El objetivo inicial es identificar a quién van dirigidos mayoritariamente dichos ataques (p.e. a estamentos gubernamentales, universidades, etc)
Para ello, necesitaremos un dataset con conexiones identificadas como DoS, y otro dataset con los registros de DNS, para poder identificar los dominios de las IPs de destino (.gov, .edu, etc)
Nos encontramos con dos problemas:
Falta de datasets específicos de DoS. Encontramos uno de un centro de Ciberseguridad de Australia, pero cuyas IPs de origen son siempre de la misma red (es una IP de Corea del Norte), y las IPs de destino son también de la misma red (Canberra - Australia).
No somos capaces de encontrar un dataset de tipo DNS, con un volumen 'manejable'. Los volumenes de los datasets que encontramos no hacen viable su procesamiento (hablamos de Gigas y Gigas...)
Decidimos reenfocar el estudio, buscando algún otro dataset de DoS (que tenga más variedad de IPs), y nos marcamos otros objetivos (p.e. identificar cuál es el puerto que más se utiliza para un ataque de este tipo).
Encontramos un dataset correspondiente a un ataque de octubre de 2016, que incluye las peticiones recibidas durante una hora. Tomamos una muestra de algo más de 1000 observaciones.
Para esta práctica los objetivos que nos marcamos son:
Distribución geográfica de atacantes y objetivos.
¿Cuál es el puerto más utilizado para este ataque DoS?
¿Cuál es la IP más activa?
Respecto a los ficheros que necesitaremos:
El fichero de datos (conexiones de tipo DoS) se llama 'mendeley.csv' y se encuentra en el directorio "Data". Habrá que descargarlo de nuestro github ya que el fichero de la web de Mendeley tiene un volumen inmanejable para nosotros.
El fichero para hacer la geolocalización de las IPs (MaxMind) se descargará automáticamente ejecutando el main().
En la presentación que hemos compartido en el portal del 'talent', de detallan los trabajos realizados.
Las funciones están documentadas, así como la utilización de la función main().
# Definimos el directorio de trabajo # Paquetes necesarios pkg <- c("ggplot2", "scales", "maptools", "sp", "maps", "grid", "car" ) # Instalar paquetes que no esten instalados new.pkg <- pkg[!(pkg %in% installed.packages())] if (length(new.pkg)) { install.packages(new.pkg) } library(ggplot2)
Mostramos los datos obtenidos, una vez procesados:
dos <- readRDS(file.path(getwd(),"..", "data", "results.rds")) wct <- data.frame(table(dos$dsport)) colnames(wct) <- c("dsport", "count") merged <- merge(dos, wct) dosmap <- merged[!merged$count<2, ] str(dosmap)
Respecto al primer objetivo del análisis, mostramos la información sobre un mapa del mundo para localizar desde dónde se ha lanzado este ataque (puntos en color rojo), y dónde se encuentra el objetivo (en azul).
world <- map_data("world") world <- subset(world, world$region!="Antarctica") gg <- ggplot(data=world, aes(x=long, y=lat)) gg <- gg + geom_path(aes(group=group), colour="gray70") # # La definici?n de la proyeccion representa la "curvatura" del mapa gg <- gg + coord_map("mercator", xlim=c(-200, 200)) # definimos la grafica por puntos con transparencia gg <- gg + geom_point(data=dosmap, aes(x=dosmap$src_longitude, y=dosmap$src_latitude), size=1, color="#FF0000", alpha=1/5) gg <- gg + geom_point(data=dosmap, aes(x=dosmap$dst_longitude, y=dosmap$dst_latitude), size=1, color="#0000FF", alpha=1/5) # # Eliminamos texto y le damos un poco de color gg <- gg + theme(text=element_blank(), axis.ticks=element_blank(), panel.grid=element_blank(), panel.background=element_rect(color="gray40", fill="white")) print(gg)
En la siguiente gráfica vemos la distribución de IPs origen utilizadas para este ataque:
wct2 <- data.frame(table(dos$srcip)) colnames(wct2) <- c("srcip", "count") merged2 <- merge(dos, wct2) merged2 <- merged2[merged2$count>5, ] dosmap2 <- merged2[merged2$count>5, ] #gg <- barplot(table(dosmap2$srcip), xlab="Source IP", ylab="Number of requests", main="Peticiones enviadas por IP origen", col=rainbow(10), cex.names = 0.5) gg <- pie(table(dosmap2$srcip), main="Peticiones enviadas por cada IP origen", col=rainbow(10))
Posicionamos en el mapa la localización de la IP más activa
world <- map_data("world") world <- subset(world, world$region!="Antarctica") gg <- ggplot(data=world, aes(x=long, y=lat)) gg <- gg + geom_path(aes(group=group), colour="gray70") # # La definici?n de la proyeccion representa la "curvatura" del mapa gg <- gg + coord_map("mercator", xlim=c(-200, 200)) dosmap3 <- dosmap2[dosmap2$count==max(dosmap2$count), ] # definimos la grafica por puntos con transparencia gg <- gg + geom_point(data=dosmap3, aes(x=dosmap3$src_longitude, y=dosmap3$src_latitude), size=1, color="#FF0000", alpha=1/5) # # Eliminamos texto y le damos un poco de color gg <- gg + theme(text=element_blank(), axis.ticks=element_blank(), panel.grid=element_blank(), panel.background=element_rect(color="gray40", fill="white")) print(gg)
En la siguiente gráfica vemos la distribución de puertos utilizados para este ataque:
gg <- barplot(table(dosmap$dsport), xlab="Destination Ports", ylab="Number of requests", main="Peticiones recibidas por puerto", col=rainbow(10), cex.names=0.7) #gg <- pie(table(dosmap$dsport), xlab="Destination Ports", ylab="Number of requests", main="Peticiones recibidas por puerto", col=rainbow(10))
Como vemos, el puerto 123 ha sido el más utilizado en este ataque, contrariamente a lo que esperábamos nosotros inicialmente (esperábamos que el puerto más atacado fuese otro, quizás más conocido, como el 80, 8080 o 443). Aunque éste hecho (que el puerto más atacado sea el 123) también podría ser debido a la selección de los datos, que aun siendo aleatoria, nos esté dando una visión sesgada de la realidad.
A partir de este resultado, analizamos qué información puede obtenerse de ese puerto, o para qué se utiliza. Por lo que vemos, el puerto 123 ofrece el servicio NTP (Network Time Protocol) que se utiliza para sincronizar la fecha/hora de las máquinas de una red.
También ofrece otro tipo de información, como el tiempo que hace que esa máquina está encendida, y estadísticas de utilización de la memoria y I/O.
Dicha información interna del sistema podría ser utilizada para usos ilícitos (alteración de logs y auditorías, modificación de tareas programadas/cron, etc), aunque no hemos encontrado documentación indicando que pueda provocar una caída del sistema.
.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.