DoS attacks analysis

Resumen

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:

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:

Respecto a los ficheros que necesitaremos:

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().

Análisis

# 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.

Conclusiones

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.

.



DDS-MCSM/spring19-group-assignment-g-team documentation built on June 4, 2019, 11:39 p.m.