diff --git a/ISO27001effectiveness/R/ReportGraphs.R b/ISO27001effectiveness/R/ReportGraphs.R index b0e2e4d..785c12e 100644 --- a/ISO27001effectiveness/R/ReportGraphs.R +++ b/ISO27001effectiveness/R/ReportGraphs.R @@ -3,81 +3,170 @@ #-------------------------General evolution---------------------- #---------------------------------------------------------------- -GetAttacksEvolution <- function(Attacks){ - attacks.evol <- mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Year) +#' Return graph representing the general attacks evolution by year +#' +#' @param Attacks data.frame with procesed source data +#' @param point.vjust Vector of vertical just to each point label +#' @param point.hjust Vector of Horizontal just to each point label +#' @param iso2013.y Vertical position to ISO27001:2013 label +#' @param iso2013.label.hjust Horizontal just to ISO27001:2013 label +#' @param smooth.x Horizontal position to smooth slope label +#' @param smooth.y Vertical position to smooth slope label +#' @param smooth.label.hjust Horizontal just to smooth slope label +#' +#' @return list(graph, slope) +#' @export +GetAttacksEvolution <- function(Attacks, + point.vjust = 0, + point.hjust = 0, + iso2013.y = 0, + iso2013.label.hjust = 0, + smooth.x = 0, + smooth.y = 0, + smooth.label.hjust = 0){ + + #Extracting year from date + attacks.evol <- dplyr::mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% + dplyr::group_by(Year)#Grouping by year + #Counting attacks each year attacks.evol <- as.data.frame(table(attacks.evol$Year)) colnames(attacks.evol) <- c("Year","Attacks") - graph1 <- ggplot2::qplot(main = "Cyberattacks evolution", - x = attacks.evol$Year, - y = attacks.evol$Attacks, - group = 1, - xlab = "Years", - ylab = "Attacks", - data = attacks.evol, - geom = "line") + - geom_point() + - geom_label(aes(label=attacks.evol$Attacks), - vjust=c(1.5, 0, 0, -0.5, -0.5), - hjust=c(0.5, -0.5, 1.5, 0, 0))+ - theme(plot.title = element_text(hjust = 0.5)) - - graph1 + #Slope of smooth + attacks.evol.slope <- lm(formula = Attacks ~ as.numeric(Year), + data = attacks.evol)$coef[[2]] + #Graph + attacks.evol.graph <- ggplot2::qplot(main = "Cyberattacks evolution", + x = attacks.evol$Year, + y = attacks.evol$Attacks, + group = 1, + xlab = "Years", + ylab = "Attacks", + data = attacks.evol, + geom = "line") + + ggplot2::geom_point() + + ggplot2::geom_label(aes(label=attacks.evol$Attacks), + vjust = point.vjust, + hjust = point.hjust)+ + ggplot2::theme(plot.title = element_text(hjust = 0.5)) + + ggplot2::geom_smooth(method = "lm", se = FALSE) + + ggplot2::geom_label(aes(x = smooth.x, y = smooth.y, + label = paste("Slope =", + signif(attacks.evol.slope))), + color = "blue", + hjust = smooth.label.hjust) + + ggplot2::geom_vline(xintercept = 3, + color = "Red", + linetype = "longdash") + + ggplot2::geom_label(aes(x = "2014", y = iso2013.y, + label = "ISO27001:2013 effects"), + color = "Red", + hjust = iso2013.label.hjust) + + list(attacks.evol.graph, attacks.evol.slope) } -GetCertsEvolution <- function(Certs){ - - Certs.evol <- data.frame(Year = c(2011, 2012, 2013, 2014, 2015), - Certs = c(sum(Certs$X2011), - sum(Certs$X2012), - sum(Certs$X2013), - sum(Certs$X2014), - sum(Certs$X2015))) - - graph1 <- ggplot2::qplot(main = "ISO 27001 evolution", +#' Return graph representing the general ISO27001 evolution +#' +#' @param Cert_PerCountry data.frame with procesed source data +#' @param point.vjust Vector of vertical just to each point label +#' @param point.hjust Vector of Horizontal just to each point label +#' @param iso2013.y Vertical position to ISO27001:2013 label +#' @param iso2013.label.hjust Horizontal just to ISO27001:2013 label +#' @param smooth.x Horizontal position to smooth slope label +#' @param smooth.y Vertical position to smooth slope label +#' @param smooth.label.hjust Horizontal just to smooth slope label +#' +#' @return list(graph, slope) +#' @export +GetCertsEvolution <- function(Cert_PerCountry, + point.vjust = 0, + point.hjust = 0, + iso2013.y = 0, + iso2013.label.hjust = 0, + smooth.x = 0, + smooth.y = 0, + smooth.label.hjust = 0){ + + #Years from columns to rows in 1 column + Certs.evol <- tidyr::gather(Cert_PerCountry, "Year", "Count", 2:6) + #Group by year + Certs.evol <- dplyr::group_by(Certs.evol, Year) + #Sum counts to 1 row for each year + Certs.evol <- dplyr::summarise(Certs.evol, Count = sum(Count)) + #Removing X from years + Certs.evol$Year <- substr(Certs.evol$Year, 2, 5) + + #Slope of smooth + Certs.evol.slope <- lm(formula = Count ~ as.numeric(Year), + data = Certs.evol)$coef[[2]] + #Graph + Certs.evol.graph <- ggplot2::qplot(main = "ISO 27001 evolution", x = Certs.evol$Year, - y = Certs.evol$Certs, + y = Certs.evol$Count, group = 1, xlab = "Years", ylab = "Certifications", data = Certs.evol, geom = "line") + geom_point() + - geom_label(aes(label=Certs.evol$Certs), - vjust=c(0.2, -0.7, 0, 0, 0.5), - hjust=c(-0.6, 1, 1.2, 1.2, 1.2))+ - theme(plot.title = element_text(hjust = 0.5)) - - graph1 + geom_label(aes(label=Certs.evol$Count), + vjust = point.vjust, + hjust = point.hjust)+ + theme(plot.title = element_text(hjust = 0.5)) + + ggplot2::geom_smooth(method = "lm", se = FALSE) + + ggplot2::geom_label(aes(x = smooth.x, y = smooth.y, + label = paste("Slope =", + signif(Certs.evol.slope))), + color = "blue", + hjust = smooth.label.hjust)+ + ggplot2::geom_vline(xintercept = 3, + color = "Red", + linetype = "longdash") + + ggplot2::geom_label(aes(x = "2014", y = iso2013.y, + label = "ISO27001:2013 changes"), + color = "Red", + hjust = iso2013.label.hjust) + + list(Certs.evol.graph, Certs.evol.slope) } +#' Return graph representing the general attacks evolution by month +#' +#' @param Attacks data.frame with procesed source data +#' +#' @return graph +#' @export GetAttacksMonthEvolution <- function(Attacks){ - attacks.evol <- mutate(Attacks, Year = format(Attacks$Date, "%Y-%m")) %>% group_by(Year) + #Extract Year - Month from date + attacks.evol <- mutate(Attacks, Year = format(Attacks$Date, "%Y-%m")) %>% + group_by(Year) + #Group by Year - Month attacks.evol <- as.data.frame(table(attacks.evol$Year)) colnames(attacks.evol) <- c("Year","Attacks") - graph1 <- ggplot2::qplot(main = "Cyberattacks evolution", - x = attacks.evol$Year, - y = attacks.evol$Attacks, - group = 1, - xlab = "Months", - ylab = "Attacks", - data = attacks.evol, - geom = "line") + + #Graph + ggplot2::qplot(main = "Cyberattacks evolution", + x = attacks.evol$Year, + y = attacks.evol$Attacks, + group = 1, + xlab = "Months", + ylab = "Attacks", + data = attacks.evol, + geom = "line") + geom_point() + theme(plot.title = element_text(hjust = 0.5)) + geom_smooth(method = 'loess') + - scale_x_discrete(labels = c("2012", "", "", "", "", "", "", "", "", "", "", "", - "2013", "", "", "", "", "", "", "", "", "", "", "", - "2014", "", "", "", "", "", "", "", "", "", "", "", - "2015", "", "", "", "", "", "", "", "", "", "", "", - "2016", "", "", "", "", "", "", "", "", "", "", "")) + scale_x_discrete(labels = c("2012/01", "", "", "", "", "", "2012/07", "", "", "", "", "", + "2013/01", "", "", "", "", "", "2013/07", "", "", "", "", "", + "2014/01", "", "", "", "", "", "2014/07", "", "", "", "", "", + "2015/01", "", "", "", "", "", "2015/07", "", "", "", "", "", + "2016/01", "", "", "", "", "", "2016/07", "", "", "", "", "")) - graph1 } @@ -85,175 +174,126 @@ GetAttacksMonthEvolution <- function(Attacks){ #-------------------------Attack type evolution------------------ #---------------------------------------------------------------- -GetAttackTypePie <- function (Attacks){ +#' Return pie graph to show % of each attack type +#' +#' @param Attacks data.frame with procesed source data +#' @param label.vjust Vector of vertical just to each portion label +#' @param label.hjust Vector of horizontal just to each portion label +#' +#' @return list(graph, AttackTypeShowedList) +#' @export +GetAttackTypePie <- function (Attacks, + label.vjust = 0, + label.hjust = 0){ + + #Group by attack type attack.pie <- group_by(Attacks, Attack.standar) + #Counting rows for each attack type attack.pie <- as.data.frame(table(attack.pie$Attack.standar)) attack.pie <- setNames(attack.pie, c("Attack", "Count")) + #Removing rows without attack type defined attack.pie <- attack.pie[attack.pie$Attack != "",] + #Removing attacks with less than 1% of representation from total attack.pie <- attack.pie[attack.pie$Count > (sum(attack.pie$Count) * 0.01),] + #Calc % of each attack type + attack.pie <- mutate(attack.pie, Perc=paste(round(100 * attack.pie$Count / sum(attack.pie$Count), 2), "%")) - graph1 <- ggplot(data=attack.pie, - aes(x=factor(1), - y=Count, - fill=Attack)) + - geom_col(width = 1, color='black') + -# geom_label(aes(label=paste( round(x = 100 - (sum(attack.pie$Count) / attack.pie$Count), digits = 2), "%")), -# vjust=c(0), -# hjust=c(0)) + - coord_polar(theta="y") + - scale_x_discrete(labels = c("")) + - scale_y_discrete(labels = c("")) + - theme(plot.title = element_text(hjust = 0.5), - axis.title.x=element_blank(), - axis.title.y=element_blank()) + - ggtitle("Attacks pie") - graph1 + #Graph + graph1 <- ggplot(data=attack.pie, + aes(x=factor(1), + y=Count, + fill=Attack)) + + geom_col(width = 1, color='black') + + geom_label(aes(label = attack.pie$Perc), + vjust = label.vjust, + hjust = label.hjust) + + coord_polar(theta="y") + + scale_x_discrete(labels = c("")) + + scale_y_discrete(labels = c("")) + + theme(plot.title = element_text(hjust = 0.5), + axis.title.x=element_blank(), + axis.title.y=element_blank()) + + ggtitle("Attack types") + + #Returning graph and attack list + list(graph1, unique(attack.pie$Attack)) } -GetAttackTypeEvolution <- function(Attacks){ - Attacks.pre <- mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Year, Attack.standar) - Attacks.pre <- as.data.frame(table(Attacks.pre$Year, Attacks.pre$Attack.standar)) - Attacks.pre <- setNames(Attacks.pre, c("Year", "Attack", "Count")) - Attacks.pre <- Attacks.pre[Attacks.pre$Attack != "",] - Attacks.pre <- plyr::arrange(Attacks.pre, Year, Attack) - - - b <- as.character(sort(unique(Attacks.pre$Attack))) - - Attacks.desg <- data.frame(Year = sort(unique(Attacks.pre$Year))) - - for (i in 1:length(b)) { - Attacks.desg <- cbind(Attacks.desg, Attacks.pre[Attacks.pre$Attack == b[i],3]) - } - - Attacks.desg <- setNames(Attacks.desg, c("Year", gsub(" ", ".", b))) - - Attacks.desg <- select(Attacks.desg, Year, `Account.Hijacking`, `DDoS`, `Defacement`, `DNS`, `Injection`, `Malware`) - - graph1 <- ggplot(data = Attacks.desg, - aes_string(x = colnames(Attacks.desg)[1])) - - graph1 <- graph1 + - - #geom_line(aes(y = Zero.day, group = 1, colour = "Zero.day")) + - #geom_point(aes(y = Zero.day, group = 1, colour = "Zero.day")) + - - geom_line(aes(y = `Account.Hijacking`, group = 1, colour = "Account.Hijacking")) + - geom_point(aes(y = `Account.Hijacking`, group = 1, colour = "Account.Hijacking")) + - - geom_line(aes(y = `DDoS`, group = 1, colour = "DDoS")) + - geom_point(aes(y = `DDoS`, group = 1, colour = "DDoS")) + - - geom_line(aes(y = `Defacement`, group = 1, colour = "Defacement")) + - geom_point(aes(y = `Defacement`, group = 1, colour = "Defacement")) + - - geom_line(aes(y = `DNS`, group = 1, colour = "DNS")) + - geom_point(aes(y = `DNS`, group = 1, colour = "DNS")) + - - geom_line(aes(y = `Injection`, group = 1, colour = "Injection")) + - geom_point(aes(y = `Injection`, group = 1, colour = "Injection")) + - - geom_line(aes(y = `Malware`, group = 1, colour = "Malware")) + - geom_point(aes(y = `Malware`, group = 1, colour = "Malware")) + - - theme(plot.title = element_text(hjust = 0.5)) + - ggtitle("Attack type evolution") + - labs(colour = "Attack type") + xlab("Years") + ylab("Attacks") - - graph1 - } - -GetAttackTypeTopEvolution <- function(Attacks){ - Attacks.pre <- mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% group_by(Year, Attack.standar) +#' Return graph to show the evolution of a attack types list +#' +#' @param Attacks data.frame with procesed source data +#' @param TypeList List with attack types to show +#' +#' @return list(graph, data.frame with TypeList attacks data by year) +#' @export +GetAttackTypeEvolution <- function(Attacks, TypeList){ + #Obtaining year from date + Attacks.pre <- dplyr::mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% + group_by(Year, Attack.standar) #group by attack type + #Count rows for each attack type and each year Attacks.pre <- as.data.frame(table(Attacks.pre$Year, Attacks.pre$Attack.standar)) Attacks.pre <- setNames(Attacks.pre, c("Year", "Attack", "Count")) - Attacks.pre <- Attacks.pre[Attacks.pre$Attack != "",] - Attacks.pre <- plyr::arrange(Attacks.pre, Year, Attack) - - b <- as.character(sort(unique(Attacks.pre$Attack))) - - Attacks.desg <- data.frame(Year = sort(unique(Attacks.pre$Year))) + #Removing rows without an attack type specified + Attacks.pre <- Attacks.pre[Attacks.pre$Attack %in% TypeList,] + + #Graph + graph1 <- ggplot(data = Attacks.pre, + aes(x = Year, + y = Count, + color = Attack, + group = Attack)) + + geom_point() + + geom_line() + + theme(plot.title = element_text(hjust = 0.5)) + + ggtitle("Attack type evolution") + + labs(colour = "Attack type") + xlab("Years") + ylab("Attacks") + #Return graph and used data to separate representation + list(graph1, Attacks.pre) - for (i in 1:length(b)) { - Attacks.desg <- cbind(Attacks.desg, Attacks.pre[Attacks.pre$Attack == b[i],3]) } - Attacks.desg <- setNames(Attacks.desg, c("Year", b)) - - Attacks.desg <- select(Attacks.desg, Year, `Account Hijacking`, `DDoS`, `Defacement`, `DNS`, `Injection`, `Malware`) - - graph1 <- ggplot(data = Attacks.desg, - aes(x = Year, y = `DDoS`, group = 1)) + - - geom_line() + - geom_point() + - - theme(plot.title = element_text(hjust = 0.5)) + - ggtitle("DDoS") + - xlab("Years") + ylab("Attacks")+ - stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) - - graph2 <- ggplot(data = Attacks.desg, - aes(x = Year, y = `Defacement`, group = 1)) + - - geom_line() + - geom_point() + - - theme(plot.title = element_text(hjust = 0.5)) + - ggtitle("Defacement") + - xlab("Years") + ylab("Attacks")+ - stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) - - graph3 <- ggplot(data = Attacks.desg, - aes(x = Year, y = `Injection`, group = 1)) + - - geom_line() + - geom_point() + - - theme(plot.title = element_text(hjust = 0.5)) + - ggtitle("Injection") + - xlab("Years") + ylab("Attacks")+ - stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) - - graph4 <- ggplot(data = Attacks.desg, - aes(x = Year, y = `Account Hijacking`, group = 1)) + - - geom_line() + - geom_point() + - - theme(plot.title = element_text(hjust = 0.5)) + - ggtitle("Account Hijacking") + - xlab("Years") + ylab("Attacks")+ - stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) - - graph5 <- ggplot(data = Attacks.desg, - aes(x = Year, y = `Malware`, group = 1)) + - - geom_line() + - geom_point() + - theme(plot.title = element_text(hjust = 0.5)) + - ggtitle("Malware") + - xlab("Years") + ylab("Attacks")+ - stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) - - graph6 <- ggplot(data = Attacks.desg, - aes(x = Year, y = `DNS`, group = 1)) + - - geom_line() + - geom_point() + - - theme(plot.title = element_text(hjust = 0.5)) + - ggtitle("DNS") + - xlab("Years") + ylab("Attacks")+ - stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) - - - list(graph1, graph2, graph3, graph4, graph5, graph6) +#' Return graph to show the evolution of a single attack type and his smooth +#' +#' @param Attacks data.frame with procesed source data +#' @param AttackType Attack type to represent +#' @param smooth.x Horizontal position to smooth slope label +#' @param smooth.y Vertical position to smooth slope label +#' @param smooth.label.hjust Horizontal just to smooth slope label +#' +#' @return list(graph, slope) +#' @export +GetAttackTypeSigleEvolution <- function(Attacks, + AttackType, + smooth.x = 0, + smooth.y = 0, + smooth.label.hjust = 0){ + #Filtering for the AttackType specified + attacks.evol <- Attacks[Attacks$Attack == AttackType,] + + #Cal slope + slope1 <- lm(formula = Count ~ as.numeric(Year), data = attacks.evol)$coef[[2]] + #Graph + graph1 <- ggplot(data = attacks.evol, + aes(x = Year, y = Count, group = 1)) + + geom_line() + + geom_point() + + theme(plot.title = element_text(hjust = 0.5)) + + ggtitle(AttackType) + + xlab("Years") + ylab("Attacks")+ + geom_smooth(method = "lm", + se = FALSE) + + geom_label(aes(x = smooth.x, y = smooth.y, + label = paste("Slope =", signif(slope1, 5))), + color = "blue", + hjust = smooth.label.hjust) + + #Returning list(graph, slope) + list(graph1, slope1) } @@ -261,56 +301,69 @@ GetAttackTypeTopEvolution <- function(Attacks){ #-------------------------Geolocal evolution--------- #---------------------------------------------------------------- -GetContinentPie <- function (Attacks, Cert_PerCountry){ +GetContinentPie <- function (Attacks, + Attacks.label.vjust = 0, + Attacks.label.hjust = 0, + Cert_PerCountry, + Certs.label.vjust = 0, + Certs.label.hjust = 0){ + #Group attacks by continent attack.pie <- group_by(Attacks, Continent) + #Count attacks for each continent attack.pie <- as.data.frame(table(attack.pie$Continent)) attack.pie <- setNames(attack.pie, c("Continent", "Count")) - + #Remove rows without Continent specified attack.pie <- attack.pie[attack.pie$Continent != "",] - #attack.pie <- attack.pie[attack.pie$Count > (sum(attack.pie$Count) * 0.01),] + #Calc % of each continent + attack.pie <- mutate(attack.pie, perc = round(100 * attack.pie$Count / sum(attack.pie$Count), 2)) + #Attacks graph graph1 <- ggplot(data=attack.pie, aes(x=factor(1), y=Count, fill=Continent)) + - geom_col(width = 1, color='black') + - geom_label(aes(label=paste(round(100 * attack.pie$Count / sum(attack.pie$Count), 2), "%")), - vjust=c(-2.5, 0, 2, 0, -2.5), - hjust=c(1.4, 1, 0.5, 0.5, 0)) + - coord_polar(theta="y") + - scale_x_discrete(labels = c("")) + - scale_y_discrete(labels = c("")) + - theme(plot.title = element_text(hjust = 0.5), - axis.title.x=element_blank(), - axis.title.y=element_blank()) + - ggtitle("Attacks") - - cert.pie <- mutate(Cert_PerCountry, Total = X2011 + X2012 + X2013 + X2014 + X2015) %>% - group_by(Continent) - cert.pie <- data.frame(Continent = c("Asia", "Europe", "Africa", "Americas", "Oceania"), - Count = c(sum((cert.pie[cert.pie$Continent == "Asia",])$Total), - sum((cert.pie[cert.pie$Continent == "Europe",])$Total), - sum((cert.pie[cert.pie$Continent == "Africa",])$Total), - sum((cert.pie[cert.pie$Continent == "Americas",])$Total), - sum((cert.pie[cert.pie$Continent == "Oceania",])$Total))) + geom_col(width = 1, color='black') + + geom_label(aes(label=paste(attack.pie$perc, "%")), + vjust = Attacks.label.vjust, + hjust = Attacks.label.hjust) + + coord_polar(theta="y") + + scale_x_discrete(labels = c("")) + + scale_y_discrete(labels = c("")) + + theme(plot.title = element_text(hjust = 0.5), + axis.title.x=element_blank(), + axis.title.y=element_blank()) + + ggtitle("Attacks") + + + #Grouping certifications by continent + cert.pie <- group_by(Cert_PerCountry, Continent) + #Counting certificates for each continent + cert.pie <- dplyr::summarise(cert.pie, Count = sum(X2011 + X2012 + X2013 + X2014 + X2015)) + #Remove rows without Continent specified + cert.pie <- cert.pie[cert.pie$Continent != "",] + #Calc % of each continent + cert.pie <- mutate(cert.pie, perc = round(100 * cert.pie$Count / sum(cert.pie$Count), 2)) + + #Certifications graph graph2 <- ggplot(data=cert.pie, aes(x=factor(1), y=Count, fill=Continent)) + - geom_col(width = 1, color='black') + - geom_label(aes(label=paste(round(100 * cert.pie$Count / sum(cert.pie$Count), 2), "%")), - vjust=c(0, -1.5, -2.5, -2.5, -2.5), - hjust=c(0.5, 0.2, 0.5, 1.8, -0.5)) + - coord_polar(theta="y") + - scale_x_discrete(labels = c("")) + - scale_y_discrete(labels = c("")) + - theme(plot.title = element_text(hjust = 0.5), - axis.title.x=element_blank(), - axis.title.y=element_blank()) + - ggtitle("ISO 27001") - - list(graph1, graph2) + geom_col(width = 1, color='black') + + geom_label(aes(label=paste(cert.pie$perc, "%")), + vjust = Certs.label.vjust, + hjust = Certs.label.hjust) + + coord_polar(theta="y") + + scale_x_discrete(labels = c("")) + + scale_y_discrete(labels = c("")) + + theme(plot.title = element_text(hjust = 0.5), + axis.title.x=element_blank(), + axis.title.y=element_blank()) + + ggtitle("ISO 27001") + + list(graph1, unique(attack.pie[attack.pie$perc > 5,]$Continent), + graph2, unique(cert.pie[cert.pie$perc > 5,]$Continent)) } GetContinentAttacksEvolution <- function(Attacks){ @@ -509,6 +562,7 @@ GetCountriesAttacksTopEvolution <- function(Attacks){ attacks.evol <- spread(attacks.evol, "Country", "Count") + slope1 <- lm(formula = US ~ as.numeric(Year), data = attacks.evol) graph1 <- ggplot(data = attacks.evol, aes(x = Year, y = US, group = 1)) + @@ -518,7 +572,8 @@ GetCountriesAttacksTopEvolution <- function(Attacks){ theme(plot.title = element_text(hjust = 0.5)) + ggtitle("US") + xlab("Years") + ylab("Attacks")+ - stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) + stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) + + geom_label(aes(x = "2014", y = 700, label = signif(slope1$coef[[2]])), color = "blue") graph2 <- ggplot(data = attacks.evol, aes(x = Year, y = GB, group = 1)) + @@ -685,6 +740,84 @@ GetContinentAttackPie <- function (Attacks){ list(graph1, graph2) } +GetContinentAttackEvolution <- function(Attacks){ + + attack.evol <-mutate(Attacks, Year = format(Attacks$Date, "%Y")) %>% + group_by(Attack.standar, Country, Year) + attack.evol <- as.data.frame(table(attack.evol$Country, attack.evol$Attack.standar, attack.evol$Year)) + attack.evol <- setNames(attack.evol, c("Country", "Attack", "Year", "Count")) + + attack.evol <- attack.evol[attack.evol$Country != "",] + attack.evol <- attack.evol[attack.evol$Attack != "",] + + attack.evol$Attack <- as.character(attack.evol$Attack) + attack.evol[attack.evol$Attack != "DDoS" & + attack.evol$Attack != "Defacement" & + attack.evol$Attack != "Injection",]$Attack <- "Otros" + attack.evol$Attack <- as.factor(attack.evol$Attack) + + attack.evol <- group_by(attack.evol, Attack, Country, Year) + attack.evol <- summarise(attack.evol, Count = sum(Count)) + + attack.evol.US <- attack.evol[attack.evol$Country == "US",] + attack.evol.JP <- attack.evol[attack.evol$Country == "JP",] + + attack.evol.US.Otros <- attack.evol.US[attack.evol.US$Attack == "Otros",] + attack.evol.JP.Otros <- attack.evol.JP[attack.evol.JP$Attack == "Otros",] + + + graph1 <- ggplot2::qplot(main = "US", + x = attack.evol.US$Year, + y = attack.evol.US$Count, + group = Attack, + xlab = "Years", + ylab = "Certifications", + data = attack.evol.US, + geom = "point", + color = Attack) + + geom_line() + + theme(plot.title = element_text(hjust = 0.5)) + + graph2 <- ggplot2::qplot(main = "JP", + x = attack.evol.JP$Year, + y = attack.evol.JP$Count, + group = Attack, + xlab = "Years", + ylab = "Certifications", + data = attack.evol.JP, + geom = "point", + color = Attack) + + geom_line() + + theme(plot.title = element_text(hjust = 0.5)) + + graph3 <- ggplot2::qplot(main = "US", + x = attack.evol.US.Otros$Year, + y = attack.evol.US.Otros$Count, + group = 1, + xlab = "Years", + ylab = "Certifications", + data = attack.evol.US.Otros, + geom = "point") + + geom_line() + + stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) + + theme(plot.title = element_text(hjust = 0.5)) + + graph4 <- ggplot2::qplot(main = "JP", + x = attack.evol.JP.Otros$Year, + y = attack.evol.JP.Otros$Count, + group = 1, + xlab = "Years", + ylab = "Certifications", + data = attack.evol.JP.Otros, + geom = "point") + + geom_line() + + stat_smooth(method = "lm", se = FALSE, aes(outfit=fit<<-..y..)) + + theme(plot.title = element_text(hjust = 0.5)) + + list(graph1, graph2, graph3, graph4) + +} + #---------------------------------------------------------------- #---------------------------------------------------------------- #---------------------------------------------------------------- diff --git a/ISO27001effectiveness/Report.Rmd b/ISO27001effectiveness/Report.Rmd index 2c1852e..115a6db 100644 --- a/ISO27001effectiveness/Report.Rmd +++ b/ISO27001effectiveness/Report.Rmd @@ -81,97 +81,138 @@ Para llegar hasta el fueron necesarios procesos algo más complejos, pero se res ### Evolución general -En primer lugar, para saber si este estudio tiene sentido, se observará la evolución temporal tanto de los ciberataques reportados como de las certificaciones realizadas en busca de patrones que puedan indicar una relación entre ambas evoluciones. +En primer lugar, para poder intuir si este estudio tiene sentido, se observará la evolución temporal en general tanto de los ciberataques reportados como de las certificaciones realizadas en busca de patrones que puedan indicar una relación entre ambas evoluciones. ```{r fig.width=4.5, fig.height=4,out.extra='style="float:left"'} -ISO27001effectiveness::GetCertsEvolution(Cert_PerCountry) +General.Certs.Evol <- ISO27001effectiveness::GetCertsEvolution(Cert_PerCountry, + c(0.2, -0.7, 0, 0, 0.5), + c(-0.6, 1, 1.2, -0.5, 1.2), + 25500, 1.45, + "2013", 20000, 0) +General.Certs.Evol[[1]] ``` ```{r fig.width=4.5, fig.height=4} -ISO27001effectiveness::GetAttacksEvolution(Attacks) +General.Attacks.Evol <- ISO27001effectiveness::GetAttacksEvolution(Attacks, + c(0.5, 0, 0, -0.5, -0.5), + c(-0.5, -0.5, 1.5, 0, 0), + 2000, -0.1, + "2014", 1700, -0.5) +General.Attacks.Evol[[1]] ``` -Como se puede observar en las gráficas, el número de empresas que obtienen la certificación crece anualmente, mientras que el numero de ataques es un poco más inestable. Del año 2013 al 2014 el número de ataques se reduce drásticamente, esto puede deberse a un problema en la fuente de datos, ya que al depender directamente de un ser humano pueden existir intervalos en los que se hayan registrado menos datos (por problemas del administrador, como falta de tiempo o interes). Otra explicación plausible es que justo en el año 2013 se produjo una revisión de la certificación, produciendose la ISO 27001:2013 que sustituyó a su predecesora 27001:2005, los cambios realizados pueden consultarse en la [web oficial](http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=54534). Para indagar un poco sobre este tema a continuación se representa la evolución de los ataques mes a mes, al aumentar la precisión en el eje X se puede observar mejor la tendencia y abstraernos un poco de esos errores humanos. +Como se puede observar en las gráficas, el número de empresas que obtienen la certificación crece anualmente, mientras que el numero de ataques tiende a descender, aunque es un poco más inestable. Del año 2013 al 2014 el número de ataques se reduce drásticamente, esto puede deberse a un problema en la fuente de datos, ya que al depender directamente de un ser humano pueden existir intervalos en los que se hayan registrado menos datos (por problemas del administrador, como falta de tiempo o interes). Otra explicación plausible, si tenemos en cuenta que las certificaciones de un año afectan a los ataques del año siguiente, es que justo en el año 2013 se produjo una revisión de la certificación, produciendose la ISO 27001:2013 que sustituyó a su predecesora 27001:2005, los cambios realizados pueden consultarse en la [web oficial](http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=54534). Por último, también podría influir la diferencia en numero de certificados expedidos, teniendo en cuenta el mismo desplazamiento que en el caso anterior, ya que los años en que mayor es la diferencia en certificaciones obtenidas (2013 y 2015) causan una bajada en el número de ataques al año siguiente, y viceversa. + +No obstante, para simplificar este estudio, se tratará de analizar más las estimaciones de las gráficas y no tanto las irregularidades de las mismas. Para observar que dichas irregularidades no son tan importantes en realidad, a continuación se representa la evolución de los ataques mes a mes, aunque en el resto del análisis se empleará el año como unidad de tiempo ya que no disponemos de datos más precisos para las certificaciones. ```{r fig.width=9, fig.height=4} ISO27001effectiveness::GetAttacksMonthEvolution(Attacks) ``` -Podemos observar que la tendencia de los ataques tiene una pendiente negativa, mas pronunciada en el momento en que se realiza una actualización de las normas (27001:2013) y que presenta algo parecido, aunque muy moderada, a una recuperación, pasado un periodo de tiempo. -También se podría relacionar la evolución de los ataques con la evolución de los certificados, si tenemos en cuenta el desplazamiento de un año para establecer la relación de causalidad. Por ejemplo podemos observar como los años en que menos crece el número de certificaciones (2012 y 2014), los ataques aumentan ligeramente en los años siguientes (2013 y 2015), mientras que en los años que mayor es el aumento de las mismas (2013 y 2015) la cantidad de ataques producidos disminuye para los años consecutivos (2014 y 2016). +Podemos observar al aumentar la precisión en el eje X que los picos no eran en realidad tan graves en la fuente de datos como parecian. + +También podemos observar que la tendencia de los ataques realmente tiene una pendiente más o menos negativa, aunque parece que asciende un poco en los ultimos meses. + +Por último, aunque se puede observar que existen aproximaciones (como la del último gráfico) que se acercan mucho más a la función real que la lineal, para este estudio se utilizará por simplicidad. ### Evolución por tipo de ataque -Podría darse el caso de que la certificación tenga uan efectividad mayor contra ciertas técnicas de ataque y que dicha efectividad se camufle entre el resto de técnicas, por ello contemplamos el estudio individual de los diferentes tipos de ataques definidos en nuestra fuente de datos. Existen multitud de ellos por lo que el estudio se tendrá que centrar en una pequeña parte de ellos, los más empleados. Para llevar a cabo esta elección se representan a continuación aquellos que representan al menos un 1% del total de ataques producidos. +Podría darse el caso de que la certificación tenga una efectividad mayor contra ciertas técnicas de ataque, y que dicha efectividad se camufle entre el resto de técnicas, por ello se contemplará el estudio individual de los diferentes tipos de ataques definidos en la fuente de datos. Existen multitud de ellos, por lo que el estudio se tendrá que centrar en una pequeña parte, los más frecuentes. Para llevar a cabo esta elección se representan a continuación aquellos que representan al menos un 1% del total de ataques producidos. ```{r fig.width=9, fig.height=5} -ISO27001effectiveness::GetAttackTypePie(Attacks) +AttackTypePie <- ISO27001effectiveness::GetAttackTypePie(Attacks, + c(-2, 0, 3, 7, -3, -4, -4), + c(2, 3, 2.5, 0, -0.5, -0.3, 0.5)) + +AttackTypePie[[1]] ``` -Como se puede observar en el gráfico anterior, la mayor parte de los ataques registrados en nuestra fuente de datos emplean las siguientes técnicas, que serán las estudiadas a continuación: +Como se puede observar en el gráfico anterior, la mayor parte de los ataques registrados en la fuente de datos emplean las siguientes técnicas, que serán las estudiadas a continuación: -* Injection: Cualquier tipo de inyeccion ya sea de código, SQL, etc +* _Injection_: Cualquier tipo de inyección ya sea de código, SQL, etc. -* Defacement: Consiste básicamente en modificar la apariencia de una página web. +* _Defacement_: Consiste en modificar la apariencia visual de una página web. -* DDoS: Trata de saturar un servicio mediante miles de conexiones para evitar que los usuarios legítimos puedan acceder con normalidad. +* _DDoS_: Trata de saturar un servicio mediante miles de conexiones para evitar que los usuarios legítimos puedan acceder con normalidad. -* Account Hijacking: Con lo que obtienen datos o credenciales de cuentas ajenas. +* _Account Hijacking_: Cuyo objetivo es obtener datos o credenciales de cuentas ajenas. -* Malware: Programas que se ejecutan en el sistema victima para llevar a cabo actividades maliciosas. +* _Malware_: Programas que se ejecutan en el sistema de la víctima para llevar a cabo actividades maliciosas. -* DNS: Ataques basados en los servidores DNS de la victima, como el poisoning, que consigue retornar las IPs que no debería a cada petición. +* _DNS_: Ataques basados en los servidores DNS de la víctima, como el poisoning, que consigue retornar las IPs que no debería a ciertas peticiones. + +* _Zero Day_: Son vulnerabilidades recien descubiertas para un servicio o protocolo. Pasa un tiempo hasta que se desarrollan parches o versiones que las corrijan. ```{r fig.width=9, fig.height=4} -ISO27001effectiveness::GetAttackTypeEvolution(Attacks) +AttackTypeEvolution <- ISO27001effectiveness::GetAttackTypeEvolution(Attacks, AttackTypePie[[2]]) + +AttackTypeEvolution[[1]] ``` -Como podemos observar en la evolución temporal reflejada en el gráfico, existen ciertas técnicas que mas o menos son constantes en el tiempo, y existen otras que tienen o podrian tener una pendiente negativa clara. Nos centraremos en aquellos tipos de ataques que muestran dicha tendencia al descenso y que podremos observar a continuación. +Como se puede observar en la evolución temporal reflejada en el gráfico, existen ciertas técnicas que más o menos son constantes en el tiempo, y existen otras que tienen o podrían tener una tendencia con pendiente negativa clara. A continuación se representarán los ataques por separado junto con sus estimaciones lineales para observar qué tendencias tienen una pendiente negativa más clara. ```{r fig.width=3, fig.height=3,out.extra='style="float:left"'} -top <- ISO27001effectiveness::GetAttackTypeTopEvolution(Attacks) -top[[3]] -slope3 <- (fit[5] - fit[1]) / 4 +Injection <- GetAttackTypeSigleEvolution(AttackTypeEvolution[[2]], "Injection", "2014", 500, 0) + +Injection[[1]] +slope_inj <- Injection[[2]] + ``` ```{r fig.width=3, fig.height=3,out.extra='style="float:left"'} -top[[1]] -slope1 <- (fit[5] - fit[1]) / 4 +DDoS <- GetAttackTypeSigleEvolution(AttackTypeEvolution[[2]], "DDoS", "2014", 200, 0) + +DDoS[[1]] +slope_dos <- DDoS[[2]] ``` ```{r fig.width=3, fig.height=3} -top[[2]] -slope2 <- (fit[5] - fit[1]) / 4 +Defacement <- GetAttackTypeSigleEvolution(AttackTypeEvolution[[2]], "Defacement", "2014", 150, 0.5) + +Defacement[[1]] +slope_def <- Defacement[[2]] ``` ```{r fig.width=3, fig.height=3,out.extra='style="float:left"'} -top[[6]] -slope6 <- (fit[5] - fit[1]) / 4 +DNS <- GetAttackTypeSigleEvolution(AttackTypeEvolution[[2]], "DNS", "2014", 15, 0) + +DNS[[1]] +slope_dns <- DNS[[2]] ``` ```{r fig.width=3, fig.height=3,out.extra='style="float:left"'} -top[[4]] -slope4 <- (fit[5] - fit[1]) / 4 +AH <- GetAttackTypeSigleEvolution(AttackTypeEvolution[[2]], "Account Hijacking", "2014", 110, 0.3) + +AH[[1]] +slope_AH <- AH[[2]] ``` ```{r fig.width=3, fig.height=3} -top[[5]] -slope5 <- (fit[5] - fit[1]) / 4 +Malware <- GetAttackTypeSigleEvolution(AttackTypeEvolution[[2]], "Malware", "2014", 40, 0) + +Malware[[1]] +slope_mal <- Malware[[2]] ``` Los tipos de ataque están ordenados por la pendiente de su tendencia, de menor a mayor, para reflejar cuáles están descendiendo más rápido y por lo tanto cuáles podrían reflejar mejor el aumento de certificaciones ISO27001 expedidas. -Tanto _Malware_ como _Account Hijacking_ tienen una tendencia con pendiente positiva, `r slope4` y `r slope5` respectivamente, por lo que quedan descartadas para este estudio. +Tanto _Malware_ como _Account Hijacking_ tienen una tendencia con pendiente positiva, `r slope_mal` y `r slope_AH` respectivamente. -La tendencia con una mayor pendiente negativa es _Injection_ (`r slope3`) y junto con _DDoS_ (`r slope1`), que también tiene una tendencia llamativa, pueden ser los que estén mas relacionados con la efectividad de la certificación ISO 27001. +La tendencia con una mayor pendiente negativa es _Injection_ (`r slope_inj`), aunque también _DDoS_ (`r slope_dos`) y _Defacement_ (`r slope_def`), presentan unas tendencias con pendientes negativas. -Por otro lado tenemos _DNS_ cuya tendencia también tiene una pendiente negativa (`r slope6`), pero es muy moderada y además podemos observar que los casos reportados en nuestra fuente de datos son mas bien escasos. +Por otro lado tenemos _DNS_, cuya tendencia también tiene una pendiente negativa (`r slope_dns`), pero es muy moderada asi que podría considerarse estable y por lo tanto no conluyente para este estudio. ### Evolución geográfica -Este apartado estudiará la relación entre la certificación ISO 27001 y los ataques producidos, pero teniendo en cuenta la variable geográfica, ya que es posible que la certificación, aunque sea internacional, se implemente de una mejor o peor forma según la región geográfica. En primer lugar observaremos la comparación por continente. +Este apartado estudiará la relación entre la certificación ISO 27001 y los ataques producidos, pero teniendo en cuenta la variable geográfica, ya que es posible que la certificación, aunque sea internacional, se implemente de una mejor o peor forma según la región. En primer lugar se generalizará por continente. ```{r fig.width=4.5, fig.height=3,out.extra='style="float:left"'} -graphs <- ISO27001effectiveness::GetContinentPie(Attacks, Cert_PerCountry) -graphs[[1]] +ContinentPies <- ISO27001effectiveness::GetContinentPie(Attacks, +c(-2.5, 0, 2, 0, -2.5), +c(1.4, 1, 0.5, 0.5, 0), +Cert_PerCountry, +c(0, -1.5, -2.5, -2.5, -2.5), +c(0.5, 0.2, 0.5, 1.8, -0.5)) + +ContinentPies[[1]] ``` ```{r fig.width=4.5, fig.height=3} -graphs[[2]] +ContinentPies[[3]] ``` Se puede observar a simple vista que los continentes que reciben más ataques, por una cuestión lógica de superficie e intereses, son por orden América, Asia y Europa. En cambio los continentes que mas certificaciones ISO 27001 obtienen son por orden Asia, Europa y América. Tanto África como Oceania podemos descartarlos en este estudio ya que sus porcentajes no son relevantes. Observemos ahora cómo influye esto en el tiempo. @@ -292,6 +333,28 @@ graphs[[1]] graphs[[2]] ``` +Como vimos en el apartado previo, la ISO 27001 parece especialmente efectiva contra las técnicas de _Defacement_, _DDoS_ e _Injection_, en los gráficos previos podemos observar como para _Estados Unidos_ tiene un menor porcentaje de este tipo de ataques con respecto a _Japón_. Para valorarlo mejor se representará a continuación cómo evolucionan con el tiempo. + +```{r fig.width=4.5, fig.height=3,out.extra='style="float:left"'} +graphs <- ISO27001effectiveness::GetContinentAttackEvolution(Attacks) +graphs[[1]] +``` +```{r fig.width=4.5, fig.height=3} +graphs[[2]] +``` + +Como se puede observar, en _Estados Unidos_ se presenta una tendencia mayor a recibir los tipos de ataques que parecen menos afectados por la ISO 27001, mientras que en _Japón_ parecen matenerse. Se representarán las tendecias en ambos paises. + +```{r fig.width=4.5, fig.height=3,out.extra='style="float:left"'} +graphs[[3]] +slope_US_Oth <- (fit[5] - fit[1]) / 4 +``` +```{r fig.width=4.5, fig.height=3} +graphs[[4]] +slope_JP_Oth <- (fit[5] - fit[1]) / 4 +``` + +Efectivamente, la tendencia en _Estados Unidos_ tiene una pendiente mayor (`r slope_US_Oth`) que en Japón que es cercana al 0 (`r slope_JP_Oth`) lo que, aunque la gráfica sea irregular debido a la baja cantidad de casos, implica una constancia. # Viejo diff --git a/ISO27001effectiveness/Report.html b/ISO27001effectiveness/Report.html index 259af46..cdd7f20 100644 --- a/ISO27001effectiveness/Report.html +++ b/ISO27001effectiveness/Report.html @@ -339,37 +339,41 @@ $(document).ready(function () {
En primer lugar, para saber si este estudio tiene sentido, se observará la evolución temporal tanto de los ciberataques reportados como de las certificaciones realizadas en busca de patrones que puedan indicar una relación entre ambas evoluciones.
--
Como se puede observar en las gráficas, el número de empresas que obtienen la certificación crece anualmente, mientras que el numero de ataques es un poco más inestable. Del año 2013 al 2014 el número de ataques se reduce drásticamente, esto puede deberse a un problema en la fuente de datos, ya que al depender directamente de un ser humano pueden existir intervalos en los que se hayan registrado menos datos (por problemas del administrador, como falta de tiempo o interes). Otra explicación plausible es que justo en el año 2013 se produjo una revisión de la certificación, produciendose la ISO 27001:2013 que sustituyó a su predecesora 27001:2005, los cambios realizados pueden consultarse en la web oficial. Para indagar un poco sobre este tema a continuación se representa la evolución de los ataques mes a mes, al aumentar la precisión en el eje X se puede observar mejor la tendencia y abstraernos un poco de esos errores humanos.
- -Podemos observar que la tendencia de los ataques tiene una pendiente negativa, mas pronunciada en el momento en que se realiza una actualización de las normas (27001:2013) y que presenta algo parecido, aunque muy moderada, a una recuperación, pasado un periodo de tiempo. También se podría relacionar la evolución de los ataques con la evolución de los certificados, si tenemos en cuenta el desplazamiento de un año para establecer la relación de causalidad. Por ejemplo podemos observar como los años en que menos crece el número de certificaciones (2012 y 2014), los ataques aumentan ligeramente en los años siguientes (2013 y 2015), mientras que en los años que mayor es el aumento de las mismas (2013 y 2015) la cantidad de ataques producidos disminuye para los años consecutivos (2014 y 2016).
+En primer lugar, para poder intuir si este estudio tiene sentido, se observará la evolución temporal en general tanto de los ciberataques reportados como de las certificaciones realizadas en busca de patrones que puedan indicar una relación entre ambas evoluciones.
++
Como se puede observar en las gráficas, el número de empresas que obtienen la certificación crece anualmente, mientras que el numero de ataques tiende a descender, aunque es un poco más inestable. Del año 2013 al 2014 el número de ataques se reduce drásticamente, esto puede deberse a un problema en la fuente de datos, ya que al depender directamente de un ser humano pueden existir intervalos en los que se hayan registrado menos datos (por problemas del administrador, como falta de tiempo o interes). Otra explicación plausible, si tenemos en cuenta que las certificaciones de un año afectan a los ataques del año siguiente, es que justo en el año 2013 se produjo una revisión de la certificación, produciendose la ISO 27001:2013 que sustituyó a su predecesora 27001:2005, los cambios realizados pueden consultarse en la web oficial. Por último, también podría influir la diferencia en numero de certificados expedidos, teniendo en cuenta el mismo desplazamiento que en el caso anterior, ya que los años en que mayor es la diferencia en certificaciones obtenidas (2013 y 2015) causan una bajada en el número de ataques al año siguiente, y viceversa.
+No obstante, para simplificar este estudio, se tratará de analizar más las estimaciones de las gráficas y no tanto las irregularidades de las mismas. Para observar que dichas irregularidades no son tan importantes en realidad, a continuación se representa la evolución de los ataques mes a mes, aunque en el resto del análisis se empleará el año como unidad de tiempo ya que no disponemos de datos más precisos para las certificaciones.
+ +Podemos observar al aumentar la precisión en el eje X que los picos no eran en realidad tan graves en la fuente de datos como parecian.
+También podemos observar que la tendencia de los ataques realmente tiene una pendiente más o menos negativa, aunque parece que asciende un poco en los ultimos meses.
+Por último, aunque se puede observar que existen aproximaciones (como la del último gráfico) que se acercan mucho más a la función real que la lineal, para este estudio se utilizará por simplicidad.
Podría darse el caso de que la certificación tenga uan efectividad mayor contra ciertas técnicas de ataque y que dicha efectividad se camufle entre el resto de técnicas, por ello contemplamos el estudio individual de los diferentes tipos de ataques definidos en nuestra fuente de datos. Existen multitud de ellos por lo que el estudio se tendrá que centrar en una pequeña parte de ellos, los más empleados. Para llevar a cabo esta elección se representan a continuación aquellos que representan al menos un 1% del total de ataques producidos.
- -Como se puede observar en el gráfico anterior, la mayor parte de los ataques registrados en nuestra fuente de datos emplean las siguientes técnicas, que serán las estudiadas a continuación:
+Podría darse el caso de que la certificación tenga una efectividad mayor contra ciertas técnicas de ataque, y que dicha efectividad se camufle entre el resto de técnicas, por ello se contemplará el estudio individual de los diferentes tipos de ataques definidos en la fuente de datos. Existen multitud de ellos, por lo que el estudio se tendrá que centrar en una pequeña parte, los más frecuentes. Para llevar a cabo esta elección se representan a continuación aquellos que representan al menos un 1% del total de ataques producidos.
+ +Como se puede observar en el gráfico anterior, la mayor parte de los ataques registrados en la fuente de datos emplean las siguientes técnicas, que serán las estudiadas a continuación:
Injection: Cualquier tipo de inyeccion ya sea de código, SQL, etc
Defacement: Consiste básicamente en modificar la apariencia de una página web.
DDoS: Trata de saturar un servicio mediante miles de conexiones para evitar que los usuarios legítimos puedan acceder con normalidad.
Account Hijacking: Con lo que obtienen datos o credenciales de cuentas ajenas.
Malware: Programas que se ejecutan en el sistema victima para llevar a cabo actividades maliciosas.
DNS: Ataques basados en los servidores DNS de la victima, como el poisoning, que consigue retornar las IPs que no debería a cada petición.
Injection: Cualquier tipo de inyección ya sea de código, SQL, etc.
Defacement: Consiste en modificar la apariencia visual de una página web.
DDoS: Trata de saturar un servicio mediante miles de conexiones para evitar que los usuarios legítimos puedan acceder con normalidad.
Account Hijacking: Cuyo objetivo es obtener datos o credenciales de cuentas ajenas.
Malware: Programas que se ejecutan en el sistema de la víctima para llevar a cabo actividades maliciosas.
DNS: Ataques basados en los servidores DNS de la víctima, como el poisoning, que consigue retornar las IPs que no debería a ciertas peticiones.
Zero Day: Son vulnerabilidades recien descubiertas para un servicio o protocolo. Pasa un tiempo hasta que se desarrollan parches o versiones que las corrijan.
Como podemos observar en la evolución temporal reflejada en el gráfico, existen ciertas técnicas que mas o menos son constantes en el tiempo, y existen otras que tienen o podrian tener una pendiente negativa clara. Nos centraremos en aquellos tipos de ataques que muestran dicha tendencia al descenso y que podremos observar a continuación.
-+ +
Como se puede observar en la evolución temporal reflejada en el gráfico, existen ciertas técnicas que más o menos son constantes en el tiempo, y existen otras que tienen o podrían tener una tendencia con pendiente negativa clara. A continuación se representarán los ataques por separado junto con sus estimaciones lineales para observar qué tendencias tienen una pendiente negativa más clara.
+
Los tipos de ataque están ordenados por la pendiente de su tendencia, de menor a mayor, para reflejar cuáles están descendiendo más rápido y por lo tanto cuáles podrían reflejar mejor el aumento de certificaciones ISO27001 expedidas.
-Tanto Malware como Account Hijacking tienen una tendencia con pendiente positiva, 10.1 y 20.2 respectivamente, por lo que quedan descartadas para este estudio.
-La tendencia con una mayor pendiente negativa es Injection (-173.5) y junto con DDoS (-49.2), que también tiene una tendencia llamativa, pueden ser los que estén mas relacionados con la efectividad de la certificación ISO 27001.
-Por otro lado tenemos DNS cuya tendencia también tiene una pendiente negativa (-3.8), pero es muy moderada y además podemos observar que los casos reportados en nuestra fuente de datos son mas bien escasos.
+Tanto Malware como Account Hijacking tienen una tendencia con pendiente positiva, 20.2 y 10.1 respectivamente.
+La tendencia con una mayor pendiente negativa es Injection (-173.5), aunque también DDoS (-49.2) y Defacement (-28.5), presentan unas tendencias con pendientes negativas.
+Por otro lado tenemos DNS, cuya tendencia también tiene una pendiente negativa (-3.8), pero es muy moderada asi que podría considerarse estable y por lo tanto no conluyente para este estudio.
Este apartado estudiará la relación entre la certificación ISO 27001 y los ataques producidos, pero teniendo en cuenta la variable geográfica, ya que es posible que la certificación, aunque sea internacional, se implemente de una mejor o peor forma según la región geográfica. En primer lugar observaremos la comparación por continente.
-+
Este apartado estudiará la relación entre la certificación ISO 27001 y los ataques producidos, pero teniendo en cuenta la variable geográfica, ya que es posible que la certificación, aunque sea internacional, se implemente de una mejor o peor forma según la región. En primer lugar se generalizará por continente.
+
Se puede observar a simple vista que los continentes que reciben más ataques, por una cuestión lógica de superficie e intereses, son por orden América, Asia y Europa. En cambio los continentes que mas certificaciones ISO 27001 obtienen son por orden Asia, Europa y América. Tanto África como Oceania podemos descartarlos en este estudio ya que sus porcentajes no son relevantes. Observemos ahora cómo influye esto en el tiempo.
Se puede observar que la tendencia de las certificaciones es creciente mientras que la de los ataques es decreciente, pero procederemos a comparar cada una individualmente para poder demostrarlo numéricamente y no solo aparentemente.
@@ -383,7 +387,7 @@ $(document).ready(function () {El análisis puede aumentar en profundidad estableciendo superficies geográficas más pequeñas y asi obtener más precisión, observemos lo que ocurre a nivel de paises. Se mostrarán a continuación los paises que superan aproximadamente un 2% de los ataques/certificaciones totales ya que la lista total de paises es demasiado extensa.
Como se puede observar en la parte de certificaciones destaca de largo Japón sobre los demás, que se encuentra bastante bajo en la lista de ataques. Y al reves pasa algo parecido, en los ataques destaca Estados Unidos por mucho mientras que ese mismo pais está muy bajo en certificaciones. A continuación observaremos la evolución temporal del top 3 paises en ataques recibidos y en certificaciones obtenidas, varios de ellos coinciden, tenemos por la parte de las certificaciones a Japón, por la parte de los ataques a Estados Unidos, y común a ambas Reino Unido e India.
-+
La pendiente de los ataques para Estados Unidos es -59.8 mientras que la pendiente de las certificaciones es 210.3.
La pendiente de los ataques para Reino Unido es -11.8 mientras que la pendiente de las certificaciones es 320.4.
@@ -395,7 +399,12 @@ $(document).ready(function () {Hasta ahora se han analizado por separado estas dos variables, pero la respuesta podria encontrarse en una combinacion de las mismas. Para ello se analizarán los tipos de ataque reportados en el pais en el que parece que la certificación es más efectiva, Japón, y en el que menos, Estados Unidos.
-+
+
Como vimos en el apartado previo, la ISO 27001 parece especialmente efectiva contra las técnicas de Defacement, DDoS e Injection, en los gráficos previos podemos observar como para Estados Unidos tiene un menor porcentaje de este tipo de ataques con respecto a Japón. Para valorarlo mejor se representará a continuación cómo evolucionan con el tiempo.
++
Como se puede observar, en Estados Unidos se presenta una tendencia mayor a recibir los tipos de ataques que parecen menos afectados por la ISO 27001, mientras que en Japón parecen matenerse. Se representarán las tendecias en ambos paises.
++
Efectivamente, la tendencia en Estados Unidos tiene una pendiente mayor (21.2) que en Japón que es cercana al 0 (-1.11022310^{-16}) lo que, aunque la gráfica sea irregular debido a la baja cantidad de casos, implica una constancia.