— · —Los — hallazgos de Inspector, según la gravedad que asigna el proveedor del software.
Dónde está concentrado el trabajo de remediación.
Fecha en que Inspector detectó por primera vez el hallazgo más antiguo que sigue abierto.
Actividad de ataque o comportamiento anómalo que ya ocurrió. Inspector reporta lo que podría pasar; GuardDuty, lo que pasó.
| Detección | Veces | Descripción | Amenaza que representa | Instancia o recurso | Región | Sev. | Fecha y estado |
|---|
Debilidades del software y de la configuración de red, agrupadas por componente. Ordenadas por nivel de riesgo: probabilidad de explotación por valor del activo afectado, en la escala del SGR. La severidad de AWS se muestra al lado como dato de origen.
| Hallazgo | Cant. | Nivel de riesgo | Plazo | Descripción | Amenaza que representa | Instancia | Región | Sev. AWS | Detectado desde |
|---|
Una acción por componente, con los servidores donde aplica. Ordenado por nivel de riesgo, y dentro de cada nivel por esfuerzo: primero lo que se resuelve en minutos sin tocar el servicio. El responsable, el estado y la fecha se registran manualmente y se conservan al cargar una extracción nueva.
| Componente | Nivel de riesgo | Sev. AWS | Acción de remediación | Esfuerzo | Seguimiento |
|---|
Cada carga queda registrada. La columna de variación compara con la extracción anterior.
Un aumento de hallazgos no siempre es malo: puede venir de haber incorporado una región o de instalar el agente en una instancia que antes no se escaneaba. Lo que importa es que el cambio tenga explicación.
Se conservan las últimas 36 extracciones.
Los archivos de AWS se cargan aquí y el panel se regenera. El navegador los procesa y envía al servidor solo el resultado agrupado, no los archivos completos.
Se guarda una vez en CloudShell; después basta con ejecutar bash extraer.sh. El script advierte si Inspector o GuardDuty no están habilitados en alguna región, para no confundir «sin datos» con «cero hallazgos».
cat > extraer.sh <<'FIN'
#!/bin/bash
# Recorre todas las regiones de la cuenta. Agregar mas al listado si aparecen.
REGIONES="sa-east-1 us-east-1"
: > inspector.jsonl
: > guardduty.jsonl
for REG in $REGIONES; do
echo "== Region $REG"
# --- Inspector: primero verificar que este escaneando esta region ---
EST=$(aws inspector2 batch-get-account-status --region $REG \
--query 'accounts[0].resourceState.ec2.status' --output text 2>/dev/null)
echo " Inspector EC2: ${EST:-sin respuesta}"
if [ "$EST" = "ENABLED" ]; then
NEXT=""
while :; do
if [ -z "$NEXT" ]; then
OUT=$(aws inspector2 list-findings --region $REG \
--filter-criteria '{"findingStatus":[{"comparison":"EQUALS","value":"ACTIVE"}]}' \
--max-results 100 --output json)
else
OUT=$(aws inspector2 list-findings --region $REG \
--filter-criteria '{"findingStatus":[{"comparison":"EQUALS","value":"ACTIVE"}]}' \
--max-results 100 --next-token "$NEXT" --output json)
fi
echo "$OUT" | jq -c '.findings[]' >> inspector.jsonl
NEXT=$(echo "$OUT" | jq -r '.nextToken // empty')
[ -z "$NEXT" ] && break
done
else
echo " OJO: Inspector no esta escaneando EC2 en $REG."
echo " Vacio aqui significa SIN DATOS, no cero vulnerabilidades."
fi
# --- Cobertura: a que instancias les esta mirando el software ---
# Antes esto se deducia en el panel. Deducir no es saber: una instancia bien
# parchada y una sin agente se ven igual desde afuera. Esto lo pregunta.
COB='[]'
if [ "$EST" = "ENABLED" ]; then
COB=$(aws inspector2 list-coverage --region $REG --max-results 200 --output json 2>/dev/null \
| jq -c '[ .coveredResources[]
| select(.resourceType == "AWS_EC2_INSTANCE")
| { id: .resourceId,
nombre: (.resourceMetadata.ec2.tags.Name // .resourceId),
estado: .scanStatus.statusCode,
motivo: (.scanStatus.reason // "") } ]')
[ -z "$COB" ] && COB='[]'
fi
# --- GuardDuty: detector propio de cada region ---
GDEST="NO_HABILITADO"
DET=$(aws guardduty list-detectors --region $REG --query 'DetectorIds[0]' --output text)
if [ "$DET" != "None" ] && [ -n "$DET" ]; then
GDEST="HABILITADO"
echo " GuardDuty: detector $DET"
aws guardduty list-findings --region $REG --detector-id $DET --output json \
| jq -r '.FindingIds[]?' > gd_ids.txt # el ? evita un error si la region no trae detecciones
if [ -s gd_ids.txt ]; then
split -l 50 gd_ids.txt _gd_
for f in _gd_*; do
aws guardduty get-findings --region $REG --detector-id $DET \
--finding-ids $(tr '\n' ' ' < $f) \
| jq -c --arg r "$REG" '.Findings[] | .Region = $r' >> guardduty.jsonl
done
rm -f _gd_*
fi
rm -f gd_ids.txt
else
echo " OJO: GuardDuty no habilitado en $REG. Sin datos, no cero amenazas."
fi
# --- Estado de la region, para que el panel no tenga que suponer nada ---
jq -nc --arg r "$REG" --arg i "${EST:-SIN_RESPUESTA}" --arg g "$GDEST" --argjson c "$COB" \
'{_farma_estado:true, region:$r, inspector:$i, guardduty:$g, cobertura:$c}' >> inspector.jsonl
done
echo
echo "Inspector: $(wc -l < inspector.jsonl) hallazgos"
echo "GuardDuty: $(wc -l < guardduty.jsonl) detecciones"
echo "Hallazgos por region:"
jq -r '.resources[0].region' inspector.jsonl | sort | uniq -c
FIN
bash extraer.shBájalos con Acciones → Descargar archivo: inspector.jsonl y guardduty.jsonl.
Acepta JSONL, JSON o arreglo. Reconoce automáticamente cuál archivo es cuál.
No tienen regla en el diccionario, por lo que su amenaza queda sin asignar.
Propuestas de la IA. Revísalas antes de guardar: no se guarda nada hasta que lo confirmes.
O pega las reglas a mano y presiona Aplicar:
Las reglas se guardan en el servidor y quedan disponibles para todo el equipo en la próxima extracción.
Valores para el Sistema de Gestión de Riesgos y archivos de respaldo. Se actualizan con cada extracción.
Se recalcula con cada extracción cargada.
CSV con separador punto y coma y UTF-8: Excel lo abre en columnas y con acentos.
Los archivos salen con la fecha de la extracción cargada. Si necesita una foto anterior, ábrala primero en Histórico y vuelva a exportar.
Traduce lo que AWS reporta a la amenaza que representa. Lo que no tenga regla aparece como «sin clasificar».
| Regla | Tipo | Descripción | Amenaza que asigna |
|---|
El SGR no conoce los nombres de las instancias de AWS y el panel no conoce los códigos de activo: esta tabla es la correspondencia entre ambos. La valoración es una copia del inventario del SGR y determina el impacto de los hallazgos de cada servidor.
| Instancia en AWS | Activo | Confidencialidad | Integridad | Disponibilidad | Prior. | Nota |
|---|
Consultas de solo lectura en AWS CloudShell: list-findings, get-findings, get-detector. No se ejecuta ninguna operación de escritura ni código dentro de las instancias, y todo queda registrado en CloudTrail.
Inspector y GuardDuty son regionales: cada región tiene su propio inventario y su propio detector, y se consultan por separado.
Los hallazgos de red indican que la configuración permite el tráfico, no que haya un servicio respondiendo en cada puerto.
Uso interno. Este panel es el inventario de las debilidades de la organización: se accede solo con sesión iniciada y cada entrada queda en la bitácora.
Usuarios del panel y su perfil. El perfil determina las pestañas visibles.
| Correo | Nombre | Perfil | Estado | Acciones |
|---|
La contraseña se define al crear la cuenta y se entrega por un medio distinto a este panel.
Últimos 500 registros: inicios de sesión, cargas, cambios en el diccionario y llamadas a la IA. Es la evidencia de trazabilidad para el SGSI.
| Fecha | Usuario | Acción | Detalle |
|---|