You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.3 KiB
47 lines
1.3 KiB
#' Validate Technique IDs
|
|
#'
|
|
#' @param technique_ids a character vector of technique ids to validate
|
|
#' @param matrix which matrix to validate against (not all IDs are associated
|
|
#' with techniques in every matrix)
|
|
#' @param na_rm remove NA's before comparing?
|
|
#' @export
|
|
validate_technique_ids <- function(technique_ids,
|
|
matrix = c("enterprise", "mobile", "pre"),
|
|
na_rm = TRUE) {
|
|
|
|
matrix <- match.arg(matrix[1], c("enterprise", "mobile", "pre"))
|
|
|
|
switch(
|
|
matrix,
|
|
enterprise = "mitre-attack",
|
|
mobile = "mitre-mobile-attack",
|
|
pre = "mitre-pre-attack"
|
|
) -> tax
|
|
|
|
if (na_rm) {
|
|
no_na <- na.exclude(technique_ids)
|
|
where_nas <- attr(no_na, "na.action", exact = TRUE)
|
|
if (length(where_nas)) message("Removed ", length(where_nas), " NA values.\n")
|
|
tec <- as.character(no_na)
|
|
}
|
|
|
|
mtec <- unique(tidy_attack[tidy_attack$matrix == tax, "id", drop=TRUE])
|
|
|
|
bad <- unique(tec[which(!(tec %in% mtec))])
|
|
|
|
if (length(bad)) {
|
|
warning(
|
|
"Technique ids not in the ", matrix, " MITRE ATT&CK matrix found\n",
|
|
paste0(sprintf('- "%s"', sort(unique(bad))), collapse = "\n"),
|
|
call. = FALSE
|
|
)
|
|
invisible(sort(unique(bad)))
|
|
} else {
|
|
message(
|
|
"All techniques were found in the ", matrix, " MITRE ATT&CK matrix"
|
|
)
|
|
invisible(TRUE)
|
|
}
|
|
|
|
|
|
}
|