Ir al contenido

Threat Index

Autor
Santiago Chavarro

Análisis
#

El reto consiste en analizar una cadena de datos que simula tráfico exfiltrado desde nodos TOR sospechosos asociados con la infraestructura APT del Imperio de Volnaya. El objetivo es detectar y evaluar indicadores de compromiso mediante la búsqueda de palabras clave específicas vinculadas con patrones de ataque de la Operación Blackout.

Cada palabra clave tiene un peso asociado que representa su nivel de amenaza. El cálculo del puntaje de amenaza se realiza multiplicando la cantidad de ocurrencias de cada palabra clave por su peso, y sumando todos esos productos. Así, se identifica la gravedad del riesgo en el flujo de datos. La cadena de datos incluye solo letras minúsculas y dígitos.

El problema requiere optimizar la identificación y el conteo de palabras clave dentro de una cadena potencialmente muy grande (hasta un millón de caracteres), considerando que las palabras pueden solaparse o aparecer múltiples veces.

Código
#

La solución planteada es clara y directa:

  • Leer la cadena de datos de entrada.
  • Mantener una lista con las palabras clave y un diccionario con sus pesos.
  • Iterar sobre cada palabra clave, contar cuántas veces aparece en la cadena de datos y multiplicar ese conteo por su peso.
  • Sumar todos los valores para obtener el puntaje final.
  • Imprimir el puntaje total.

Este enfoque utiliza la función count para contar ocurrencias de cadena, lo que es eficiente para strings de tamaño considerable en Python.

# take in the number
n = input()

# calculate answer
f = ["scan", "response", "control", "callback", "implant", "zombie", "trigger", "infected", "compromise", "inject", "execute", "deploy", "malware", "exploit", "payload", "backdoor", "zeroday", "botnet"]
g = {"scan":1, "response":2, "control":3, "callback":4, "implant":5, "zombie":6, "trigger":7, "infected":8, "compromise":9, "inject":10, "execute":11, "deploy":12, "malware":13, "exploit":14, "payload":15, "backdoor":16, "zeroday":17, "botnet":18}
r = 0

for i in f:
    if n.count(i) > 0:
        r = r + (n.count(i) * (g[i]))

# print answer
print(r)

Referencias
#