<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dilver Huertas Guerrero</title>
    <description>The latest articles on DEV Community by Dilver Huertas Guerrero (@djhuertasg).</description>
    <link>https://dev.to/djhuertasg</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F193771%2F0f7c92f4-e475-4308-9901-549b4069a6d0.png</url>
      <title>DEV Community: Dilver Huertas Guerrero</title>
      <link>https://dev.to/djhuertasg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/djhuertasg"/>
    <language>en</language>
    <item>
      <title>Explorando el paralelismo real: Python 3.14 (No-GIL) y Rust</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Thu, 18 Dec 2025 00:01:18 +0000</pubDate>
      <link>https://dev.to/djhuertasg/explorando-el-paralelismo-real-python-314-no-gil-y-rust-51o0</link>
      <guid>https://dev.to/djhuertasg/explorando-el-paralelismo-real-python-314-no-gil-y-rust-51o0</guid>
      <description>&lt;h2&gt;
  
  
  Contexto
&lt;/h2&gt;

&lt;p&gt;En una &lt;a href="https://dev.to/djhuertasg/integridad-y-confidencialidad-porque-no-entregar-el-hash-de-un-numero-de-tarjeta-5058"&gt;publicación anterior&lt;/a&gt; se desarrollo un código en python para generar hashes de tarjetas de crédito, con el fin de mostrar la diferencia entre integridad y confidencialidad. Igualmente, se menciona que "el código desarrollado es sólo una aproximación, dado que se puede hacer más eficiente aplicando procesamiento en paralelo". El objetivo de esta publicación es explorar el procesamiento en paralelo tanto en Python, con su &lt;a href="https://docs.python.org/3/whatsnew/3.14.html" rel="noopener noreferrer"&gt;última versión 3.14t&lt;/a&gt; que habilita paralelismo real al eliminar &lt;a href="https://realpython.com/python-gil/" rel="noopener noreferrer"&gt;GIL&lt;/a&gt;, el cual en resumen es es un mecanismo de protección que asegura que solo un hilo de ejecución pueda ejecutar código a la vez, permitiendo simplificar la gestión de la memoria y prevenir condiciones de carrera, pero impide el verdadero paralelismo en aplicaciones multihilo, incluso en procesadores multinúcleo.&lt;/p&gt;

&lt;p&gt;Adicionalmente se quiere introducir Rust para comparar su velocidad de procesamiento frente a Python, y más allá de eso resaltar sus capacidades como un lenguaje seguro. Rust implementa un sistema propio llamado Ownership y Borrowing (Propiedad y Préstamo) en el cual el compilador rastrea quién posee un dato en memoria, y cuando esa variable sale de su ámbito la memoria se libera inmediatamente; dando como resultado que es imposible tener errores comunes como buffer overflows, dangling pointers o double frees. También detecta las condiciones de carrera en tiempo de compilación y tiene un sistema de tipos que elimina el error del puntero nulo, al este no existe de forma nativa.&lt;/p&gt;

&lt;p&gt;En otras palabras si el código tiene un riesgo de memoria, simplemente no compila, y teniendo en cuenta que los errores en la gestión de la memoria causan &lt;a href="https://www.kaspersky.es/blog/the-long-road-to-memory-safety/28167/" rel="noopener noreferrer"&gt;el 70 % de las vulnerabilidades&lt;/a&gt;, se actúa de manera preventiva en la mitigación de estas. Rust se convierte así es un lenguaje a tener en cuenta para el desarrollo de soluciones que requieran un rendimiento alto en aplicaciones críticas, como motores de browser, sistemas operativos, criptografía, drivers, entre otros.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparación de desempeño
&lt;/h2&gt;

&lt;p&gt;A continuación se muestra el resultado del procesamiento de cálculo de hashes para python en procesamiento paralelo, rust en un solo hilo, y rust en procesamiento paralelo. El código de cada uno, se encuentra al final de este mismo post en la sección Anexos.&lt;/p&gt;

&lt;p&gt;El siguiente gráfico detalla el rendimiento del procesamiento de los 20 lotes de datos después de implementar las técnicas de paralelismo No-GIL en Python, combinadas con la estrategia de Productor-Consumidor y batching para gestionar la alta carga de E/S. Cada barra representa el tiempo (en segundos) que tardó en procesarse, hashearse y escribirse en disco un lote de 10 millones de hashes. Se observa que la mayoría de los archivos se procesan en un rango muy estrecho de 14.2 a 14.6 segundos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxszyv9v0qmnlrvxo0dl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxszyv9v0qmnlrvxo0dl.png" alt=" " width="600" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El rendimiento observado en rust en procesamiento mono-hilo muestra una diferencia fundamental en la filosofía de ejecución de ambos entornos. Mientras que la versión de Rust en un solo hilo es extremadamente rápida debido a su cercanía al hardware y la ausencia de overhead de interpretación, la versión de Python No-GIL depende totalmente de la paralelización masiva para intentar alcanzar cifras similares (en este caso en particular).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswezpxn3rvfqin9dbndc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswezpxn3rvfqin9dbndc.png" alt=" " width="600" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La implementación multihilo en Rust marca un punto de inflexión en el ejercicio, mientras que las versiones anteriores (Rust mono-hilo y Python No-GIL) están alrededor de los 14 segundos, la arquitectura de Productor-Consumidor optimizada en Rust muestra un rendimiento consistente, lo que indica que el software no está generando cuellos de botella, dónde ya el hardware es el que no puede ir más rápido.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08i98vaz4hooaysu2xd8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08i98vaz4hooaysu2xd8.png" alt=" " width="600" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tiempos promedio por archivo y estimados para procesamiento total&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Python (1-hilo)&lt;/th&gt;
&lt;th&gt;Rust (1-hilo)&lt;/th&gt;
&lt;th&gt;Python (m-hilo)&lt;/th&gt;
&lt;th&gt;Rust (m-hilo)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PROMEDIO (s)&lt;/td&gt;
&lt;td&gt;79,47&lt;/td&gt;
&lt;td&gt;13,81&lt;/td&gt;
&lt;td&gt;14,48&lt;/td&gt;
&lt;td&gt;3,49&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESTIMADO (s)&lt;/td&gt;
&lt;td&gt;7947&lt;/td&gt;
&lt;td&gt;1381,1&lt;/td&gt;
&lt;td&gt;1448&lt;/td&gt;
&lt;td&gt;349&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESTIMADO (h)&lt;/td&gt;
&lt;td&gt;02:12:27&lt;/td&gt;
&lt;td&gt;00:23:01&lt;/td&gt;
&lt;td&gt;00:24:08&lt;/td&gt;
&lt;td&gt;00:05:48&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Matriz de comparación de desempeño&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Python (1-hilo)&lt;/th&gt;
&lt;th&gt;Rust (1-hilo)&lt;/th&gt;
&lt;th&gt;Python (m-hilo)&lt;/th&gt;
&lt;th&gt;Rust (m-hilo)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Python (1-hilo)&lt;/td&gt;
&lt;td&gt;100,0%&lt;/td&gt;
&lt;td&gt;17,4%&lt;/td&gt;
&lt;td&gt;18,2%&lt;/td&gt;
&lt;td&gt;4,4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rust (1-hilo)&lt;/td&gt;
&lt;td&gt;575,4%&lt;/td&gt;
&lt;td&gt;100,0%&lt;/td&gt;
&lt;td&gt;104,9%&lt;/td&gt;
&lt;td&gt;25,2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python (m-hilo)&lt;/td&gt;
&lt;td&gt;548,7%&lt;/td&gt;
&lt;td&gt;95,4%&lt;/td&gt;
&lt;td&gt;100,0%&lt;/td&gt;
&lt;td&gt;24,1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rust (m-hilo)&lt;/td&gt;
&lt;td&gt;2280,3%&lt;/td&gt;
&lt;td&gt;396,3%&lt;/td&gt;
&lt;td&gt;415,6%&lt;/td&gt;
&lt;td&gt;100,0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusiones
&lt;/h2&gt;

&lt;p&gt;El ejercicio de generación masiva de hashes de tarjetas de crédito nos permite extraer algunas conclusiones sobre los lenguajes de programación en cuestión y la gestión de recursos de hardware.&lt;/p&gt;

&lt;p&gt;La superioridad de Rust no reside únicamente en su velocidad, sino en su filosofía de diseño, mientras que en otros lenguajes el rendimiento suele comprometer la seguridad (exponiendo al sistema a buffer overflows o condiciones de carrera), Rust mitiga preventivamente alrededor del 70% de las vulnerabilidades comunes mediante su sistema de Ownership, lo cual lo hace una alternativa a considerar.&lt;/p&gt;

&lt;p&gt;Por otro lado, la eliminación del GIL en Python muestra que logra una mejora del 548% respecto a su versión mono-hilo, sin embargo en este caso, requiere de toda la potencia multihilo del procesador para apenas igualar lo que Rust logra con un solo núcleo. Esto subraya que, aunque Python es ahora capaz de paralelismo real, el overhead de su interpretación sigue siendo un factor importante frente a lenguajes compilados.&lt;/p&gt;

&lt;p&gt;La versión de Rust multihilo es la opción ganadora, procesando cada lote en apenas 3.49 segundos de promedio, este código ha alcanzado el límite físico del hardware, siendo limitante la velocidad de transferencia del disco (E/S).&lt;/p&gt;

&lt;p&gt;Para aplicaciones que requieren alta disponibilidad, seguridad de memoria y procesamiento masivo de datos, Rust es la opción lógica. Python, con su nueva versión No-GIL, reduce la brecha y se vuelve mucho más competitivo para tareas paralelas, pero Rust sigue manteniendo el liderazgo en eficiencia y protección proactiva contra vulnerabilidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anexo: Código para Rust en un único hilo, Python multihilo y Rust multihilo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rust en un único hilo
&lt;/h3&gt;

&lt;p&gt;Se desarrollo el siguiente código en Rust para el cálculo de hashes de las tarjetas de crédito, ejecutando la misma funcionalidad desarrollada en python en el post anterior.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use sha2::{Sha256, Digest};
use std::fs::File;
use std::io::{BufWriter, Write};
use std::time::Instant;

    // 1. Implementación del Algoritmo de Luhn
    // A diferencia de Python, aquí trabajamos con bytes directamente, ahorrando memoria.
    fn calcular_digito_luhn(numero_str: &amp;amp;str) -&amp;gt; u32 {
        let mut suma_total = 0;

        // Iteramos los caracteres en reverso
        // .chars().rev() es un iterador perezoso (lazy), no crea una lista nueva en memoria como Python
        for (i, c) in numero_str.chars().rev().enumerate() {
            let mut digito = c.to_digit(10).unwrap(); // Convertir char a u32

            if i % 2 == 1 {
                digito *= 2;
                if digito &amp;gt; 9 {
                    digito -= 9;
                }
            }
            suma_total += digito;
        }

        (10 - (suma_total % 10)) % 10
    }

    // 2. Función para hashear (aplica SHA256)
    fn aplicar_sha256(numero: &amp;amp;str) -&amp;gt; String {
        let mut hasher = Sha256::new();
        hasher.update(numero.as_bytes());
        hex::encode(hasher.finalize())
    }

    fn main() -&amp;gt; std::io::Result&amp;lt;()&amp;gt; {
        let start_time = Instant::now();

        let numero_fijo = "491511";
        let batch_size = 10_000_000; 
        let total_limit = 1_000_000_000; 

        let mut batch_num = 1;
        let mut count = 0;

        // Bucle principal
        let mut iterador = 0..total_limit;

        loop {
            let filename = format!("hashes_batch_{}.csv", batch_num);

            // Usamos BufWriter para escribir en disco de forma eficiente (bufferizada)
            let file = File::create(&amp;amp;filename)?;
            let mut writer = BufWriter::new(file);

            writeln!(writer, "Número,Hash SHA-256")?; // Escribir cabecera

            for _ in 0..batch_size {
                // Obtenemos el siguiente número del iterador
                let num = match iterador.next() {
                    Some(n) =&amp;gt; n,
                    None =&amp;gt; break,
                };

                // Construcción del número (equivalente a str(num).zfill(9))
                // format! macro es segura y verifica tipos.
                let numero_cliente = format!("{:09}", num);
                let base = format!("{}{}", numero_fijo, numero_cliente);

                let digito_luhn = calcular_digito_luhn(&amp;amp;base);
                let numero_completo = format!("{}{}", base, digito_luhn);

                let hash_result = aplicar_sha256(&amp;amp;numero_completo);

                writeln!(writer, "{},{}", numero_completo, hash_result)?;
                count += 1;
            }

            // Asegurarse de que el buffer se vacíe a disco antes de cerrar el archivo
            writer.flush()?;

            let elapsed = start_time.elapsed();
            println!("Archivo {} completo. Total procesado: {}. Tiempo parcial: {:.2}s", 
                     batch_num, count, elapsed.as_secs_f64());

            batch_num += 1;

            // Si el iterador se agotó o alcanzamos el límite
            if count &amp;gt;= total_limit {
                break;
            }

            // Si el último batch fue parcial, salir para evitar un archivo vacío.
            if total_limit - (count - batch_size) &amp;lt; batch_size {
                 break;
            }
        }

        let duration = start_time.elapsed();
        println!("Proceso completo.");
        println!("Tiempo total de ejecución: {:.2} segundos", duration.as_secs_f64());

        Ok(())
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Python en procesamiento paralelo real
&lt;/h3&gt;

&lt;p&gt;Ahora con la versión 3.14t se cuenta con procesamiento paralelo real, se muestra a continuación el código desarrollado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import hashlib
import time
import os
import queue
import threading
from concurrent.futures import ThreadPoolExecutor, as_completed

# --- Funciones de lógica pura (CPU Bound) ---

def calcular_digito_luhn(numero_str):
    """Calcula el dígito verificador de Luhn."""
    digitos = [int(d) for d in numero_str][::-1]
    suma_total = 0
    for i, digito in enumerate(digitos):
        if i % 2 == 1:
            digito *= 2
            if digito &amp;gt; 9:
                digito -= 9
        suma_total += digito
    return (10 - (suma_total % 10)) % 10

def aplicar_sha256(numero):
    """Aplica el hash SHA-256 al número."""
    hash_obj = hashlib.sha256()
    hash_obj.update(numero.encode())
    return hash_obj.hexdigest()

# --- Función Worker para los hilos (Produce lista de listas) ---
def procesar_sub_lote(rango_numeros, numero_fijo):
    """Procesa un rango de números y devuelve los resultados."""
    resultados = []
    numero_fijo_str = str(numero_fijo)

    for num in rango_numeros:
        # Lógica de generación y hashing (CPU-bound)
        numero_cliente = str(num).zfill(9)
        base = numero_fijo_str + numero_cliente
        digito_luhn = calcular_digito_luhn(base)
        numero_completo = base + str(digito_luhn)
        hash_result = aplicar_sha256(numero_completo)

        # Guardamos en memoria temporal del hilo
        resultados.append([numero_completo, hash_result])

    return resultados

# --- Hilo Consumidor (Escritor en Disco usando F-Strings) ---
def file_writer_worker(write_queue, filename):
    """
    Hilo dedicado a escribir datos del CSV en disco.
    OPTIMIZACIÓN: Usa F-strings y buffering manual para I/O rápida.
    """
    try:
        # Usamos buffering=1024*1024 (1MB) para mejorar el rendimiento de I/O
        with open(filename, 'w', newline='', buffering=1024*1024) as file:

            # Escribir cabecera manualmente
            file.write('Número,Hash SHA-256\n')

            while True:
                # Obtener el chunk (lista de listas) de la cola.
                chunk = write_queue.get() 

                # Usamos None como valor centinela para terminar el hilo
                if chunk is None:
                    break

                # OPTIMIZACIÓN DE FORMATO: Usamos F-strings para la construcción rápida de la cadena.
                csv_lines = [f'{row[0]},{row[1]}' for row in chunk]
                data_string = '\n'.join(csv_lines) + '\n'

                # Escritura en disco del buffer gigante
                file.write(data_string)

                write_queue.task_done()

    except Exception as e:
        print(f"Error fatal en el escritor de archivos {filename}: {e}")

# --- Lógica Principal ---
def main():
    start_time = time.time()

    numero_fijo = 491511
    total_limit = 200_000_000
    batch_size_csv = 10_000_000 # Tamaño del archivo CSV

    # Tamaño del trabajo que le damos a cada hilo (Chunking)
    thread_chunk_size = 100_000 

    # Usamos todos los núcleos disponibles
    max_workers = os.cpu_count() 
    print(f"Ejecutando en Python {os.sys.version.split()[0]} (Verificar que sea 3.14t o similar)")
    print(f"Usando {max_workers} hilos para cálculo (Sin GIL).")
    print("Usando patrón Productor-Consumidor con I/O nativa optimizada.")

    count_global = 0
    batch_num = 1

    # Iteramos para crear los archivos CSV (Lotes grandes)
    for batch_start in range(0, total_limit, batch_size_csv):

        filename = f'hashes_batch_{batch_num}_py.csv'
        batch_end = min(batch_start + batch_size_csv, total_limit)

        print(f"Generando {filename} (Rango {batch_start} - {batch_end})...")
        batch_start_time = time.time()

        # 1. Creamos la cola de comunicación
        write_queue = queue.Queue()

        # 2. Iniciamos el HILO ESCRITOR (Consumidor)
        writer_thread = threading.Thread(
            target=file_writer_worker, 
            args=(write_queue, filename)
        )
        writer_thread.start()

        # --- CÁLCULO PARALELO (Productores) ---
        with ThreadPoolExecutor(max_workers=max_workers) as executor:
            futures = []

            # Dividimos el lote del CSV en tareas más pequeñas
            for chunk_start in range(batch_start, batch_end, thread_chunk_size):
                chunk_end_adjusted = min(chunk_start + thread_chunk_size, batch_end)
                rango = range(chunk_start, chunk_end_adjusted)

                # Enviamos la tarea al pool
                futures.append(executor.submit(procesar_sub_lote, rango, numero_fijo))

            # 3. Recogemos resultados FUERA DE ORDEN y los ENVIAMOS A LA COLA
            for future in as_completed(futures):
                try:
                    # El resultado es ahora una lista de listas
                    resultados_chunk = future.result() 
                    # Envía el chunk a la cola inmediatamente
                    write_queue.put(resultados_chunk)
                    count_global += len(resultados_chunk)
                except Exception as e:
                    print(f"Error en el futuro: {e}")

        # 4. Finalización del Lote: Señalar al escritor que termine
        write_queue.put(None) # Centinela de terminación
        writer_thread.join() # Esperar a que el escritor termine y cierre el archivo

        elapsed = time.time() - batch_start_time
        print(f"Archivo {batch_num} terminado en {elapsed:.2f}s. Velocidad: {batch_size_csv/elapsed:.0f} h/s")
        batch_num += 1

    end_time = time.time()
    print("Proceso completo.")
    print(f"Tiempo total: {end_time - start_time:.2f} segundos")

if __name__ == "__main__":
    main()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rust en procesamiento paralelo
&lt;/h3&gt;

&lt;p&gt;Aquí se detalla el código utilizado para habilitar el procesamiento paralelo en Rust, agregando las dependencias rayon y crossbeam_channel para tal fin.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use sha2::{Sha256, Digest};
use std::fs::File;
use std::io::{BufWriter, Write};
use std::time::Instant;
// Importamos el preludio de Rayon para tener acceso a las funciones paralelas
use rayon::prelude::*; 
// Usamos crossbeam-channel para canales de alto rendimiento
use crossbeam_channel::{unbounded, Receiver, Sender}; 

// --- CONFIGURACIÓN DE OPTIMIZACIÓN ---
// Tamaño de los lotes de datos que se envían por el canal.
// Esto reduce el overhead de la comunicación entre hilos.
const RAYON_CHUNK_SIZE: u64 = 100_000; 

// --- Funciones de lógica pura (CPU Bound) ---

fn calcular_digito_luhn(numero_str: &amp;amp;str) -&amp;gt; u32 {
    let mut suma_total = 0;
    for (i, c) in numero_str.chars().rev().enumerate() {
        let mut digito = c.to_digit(10).unwrap();
        if i % 2 == 1 {
            digito *= 2;
            if digito &amp;gt; 9 { digito -= 9; }
        }
        suma_total += digito;
    }
    (10 - (suma_total % 10)) % 10
}

fn aplicar_sha256(numero: &amp;amp;str) -&amp;gt; String {
    let mut hasher = Sha256::new();
    hasher.update(numero.as_bytes());
    hex::encode(hasher.finalize())
}

// --- Hilo Consumidor (Escritor en Disco) ---
// El canal ahora espera un vector de cadenas (Vec&amp;lt;String&amp;gt;)
fn writer_thread(rx: Receiver&amp;lt;Vec&amp;lt;String&amp;gt;&amp;gt;, filename: String) -&amp;gt; std::io::Result&amp;lt;()&amp;gt; {
    // Usamos un buffer grande (8MB)
    let file = File::create(&amp;amp;filename)?;
    let mut writer = BufWriter::with_capacity(8 * 1024 * 1024, file); 

    writeln!(writer, "Número,Hash SHA-256")?;

    // Consume el lote completo de resultados
    while let Ok(chunk) = rx.recv() {
        // Itera sobre el vector y escribe todas las líneas
        for linea in chunk {
            writeln!(writer, "{}", linea)?;
        }
    }

    // El BufWriter se vacía y cierra al salir del scope
    Ok(())
}


fn main() -&amp;gt; std::io::Result&amp;lt;()&amp;gt; {
    let start_time = Instant::now();

    let numero_fijo = "491511";
    let batch_size = 10_000_000;
    let total_limit: u64 = 200_000_000; 

    let mut batch_num = 1;

    // Iteramos por "chunks" (lotes) del tamaño de batch_size
    for start in (0..total_limit).step_by(batch_size as usize) {
        let end = std::cmp::min(start + batch_size as u64, total_limit);
        let filename = format!("hashes_batch_{}.csv", batch_num);

        println!("Procesando lote {} (Números {} a {})...", batch_num, start, end);
        let batch_start = Instant::now();

        // 1. Crear el canal MPSC (Multi-Productor, Single-Consumer)
        // El canal lleva ahora Vec&amp;lt;String&amp;gt;
        let (tx, rx): (Sender&amp;lt;Vec&amp;lt;String&amp;gt;&amp;gt;, Receiver&amp;lt;Vec&amp;lt;String&amp;gt;&amp;gt;) = unbounded();

        // 2. Iniciar el hilo de escritura (Consumidor I/O)
        let writer_handle = std::thread::spawn({
            let filename_cloned = filename.clone();
            move || writer_thread(rx, filename_cloned)
        });

        // --- INICIO DE LA SECCIÓN PARALELA (Productores CPU con Batching) ---

        // Creamos una lista de índices de inicio para los chunks de Rayon
        let chunk_starts: Vec&amp;lt;u64&amp;gt; = (start..end).step_by(RAYON_CHUNK_SIZE as usize).collect();

        // Clonamos 'tx' para que cada hilo productor pueda enviar el Vec&amp;lt;String&amp;gt;
        let tx_clone_for_rayon = tx.clone(); 

        // 3. Paralelizamos sobre los puntos de inicio de los chunks
        chunk_starts.into_par_iter()
            .for_each_with(tx_clone_for_rayon, |tx_cloned, chunk_start| {
                let chunk_end = std::cmp::min(chunk_start + RAYON_CHUNK_SIZE, end);

                // Creamos un vector para almacenar los resultados de este chunk
                let mut results: Vec&amp;lt;String&amp;gt; = Vec::with_capacity((chunk_end - chunk_start) as usize);

                // Calculamos secuencialmente dentro de este hilo para este chunk
                // Rayon garantiza que esta iteración es ejecutada por un solo hilo
                for num in chunk_start..chunk_end {
                    let numero_cliente = format!("{:09}", num);
                    let base = format!("{}{}", numero_fijo, numero_cliente);
                    let digito_luhn = calcular_digito_luhn(&amp;amp;base);
                    let numero_completo = format!("{}{}", base, digito_luhn);
                    let hash_result = aplicar_sha256(&amp;amp;numero_completo);

                    results.push(format!("{},{}", numero_completo, hash_result));
                }

                // Enviar el lote COMPLETO de resultados por el canal (bajo overhead)
                let _ = tx_cloned.send(results); 
            });

        // 4. Rayon ha terminado. Cerramos el transmisor principal para notificar al receptor.
        drop(tx); 

        // 5. Esperar a que el hilo escritor termine
        writer_handle.join().unwrap()?;

        // --- FIN DE LA SECCIÓN PARALELA Y ESCRITURA CONCURRENTE ---

        let elapsed = batch_start.elapsed();
        println!("Lote {} escrito. Tiempo: {:.2}s. Velocidad: {:.0} hashes/seg", 
                 batch_num, elapsed.as_secs_f64(), (batch_size as f64 / elapsed.as_secs_f64()));

        batch_num += 1;
    }

    let duration = start_time.elapsed();
    println!("Tiempo total de ejecución: {:.2} segundos", duration.as_secs_f64());

    Ok(())
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>rust</category>
      <category>python</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>DevSecOps: Modelo de madurez y alternativas de implementación</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Mon, 27 Oct 2025 01:14:39 +0000</pubDate>
      <link>https://dev.to/djhuertasg/devsecops-modelo-de-madurez-y-alternativas-de-implementacion-168c</link>
      <guid>https://dev.to/djhuertasg/devsecops-modelo-de-madurez-y-alternativas-de-implementacion-168c</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;Ante la necesidad de implementar prácticas seguras dentro de los flujos de desarrollo de software en las organizaciones, pueden surgir múltiples dudas: ¿Qué acciones concretas se deben llevar a cabo?, ¿Cómo se encuentra la organización frente a la adopción de prácticas seguras?, ¿Qué herramientas pueden ayudar a establecer el ecosistema de seguridad requerido? Estas y otras inquietudes pueden surgir, y a pesar de que la respuesta es especifica al contexto de cada organización, es conveniente adoptar las lecciones aprendidas que entrega la industria en la definición del mapa de ruta a seguir.&lt;/p&gt;

&lt;p&gt;A lo largo de este post se busca dar respuesta a algunas inquietudes en el ámbito de DevSecOps, especialmente cuando una organización inicia en el camino de adopción. Se explora un modelo de madurez haciendo énfasis en las acciones iniciales que deberían llevarse a cabo y algunas alternativas de implementación a nivel técnico.&lt;/p&gt;

&lt;p&gt;Si el término "DevSecOps" es desconocido para usted y/o su organización, le recomiendo empezar por consultar "The DevOps Guide", el cual encontrará al final en la sección de referencias.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modelo de madurez
&lt;/h2&gt;

&lt;p&gt;El &lt;em&gt;DevSecOps Maturity Model&lt;/em&gt; (DSOMM) es un marco de referencia que permite evaluar y mejorar el nivel de madurez en la integración de prácticas de seguridad dentro del ciclo de vida DevOps, tiene como propósito ayudar a las organizaciones a incorporar la seguridad desde las etapas iniciales del desarrollo, mediante la automatización de controles, la gestión de vulnerabilidades, la revisión continua de código y la colaboración entre equipos de desarrollo, operaciones y seguridad. Este marco estructura la madurez en distintos niveles y áreas temáticas, facilitando la identificación de brechas y la definición de un plan de mejora progresivo hacia un entorno DevSecOps más seguro, ágil y sostenible.&lt;/p&gt;

&lt;p&gt;DSOMM fue creado por miembros de la comunidad de seguridad y desarrollo de software con el propósito de establecer una guía práctica para integrar la seguridad en entornos DevOps de forma estructurada y medible. Su origen se remonta a iniciativas colaborativas impulsadas por expertos de la Open Web Application Security Project (OWASP) y profesionales independientes del ámbito de la ingeniería de software, quienes buscaban un modelo más claro para evaluar la madurez de las prácticas de seguridad automatizadas dentro de los flujos de entrega continua. Desde su publicación inicial, el DSOMM ha evolucionado gracias al aporte colectivo de la comunidad, consolidándose como una herramienta abierta y adaptable utilizada por organizaciones de distintos sectores.&lt;/p&gt;

&lt;p&gt;Adicionalmente, cuenta con una plataforma interactiva que permite a las organizaciones evaluar de forma estructurada su nivel de madurez en la integración de prácticas de seguridad, mediante un cuestionario que cubre distintas áreas temáticas como: gestión de vulnerabilidades, automatización de pruebas, control de acceso, monitoreo y respuesta; asignando puntuaciones que reflejan el grado de implementación alcanzado. Su uso es sencillo y colaborativo, ya que permite registrar avances, comparar resultados entre equipos y visualizar gráficamente el progreso hacia niveles superiores de madurez. Además, al ser una herramienta abierta y actualizable, facilita adaptar los criterios de evaluación a las necesidades específicas de cada organización (enlace de acceso en la sección de Referencias).&lt;/p&gt;

&lt;h3&gt;
  
  
  Actividades a realizar para alcanzar el nivel 1 de DSOMM
&lt;/h3&gt;

&lt;p&gt;Con el fin de detallar las primeras actividades que se deben validar o planificar en una organización para la adopción de prácticas de DevSecOps, se mencionan aquellas correspondientes al nivel 1 - Entendimiento básico de prácticas de seguridad: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contar con un proceso de compilación definido automatizando pasos&lt;/li&gt;
&lt;li&gt;Definir un proceso de despliegue&lt;/li&gt;
&lt;li&gt;Contar con un inventario de componentes en produccción&lt;/li&gt;
&lt;li&gt;Contar con una politica de parcheo&lt;/li&gt;
&lt;li&gt;Contar con parcheo automatizado&lt;/li&gt;
&lt;li&gt;Llevar a cabo modelamiento de amenazas durante el sprint planning&lt;/li&gt;
&lt;li&gt;Comunicar los objetivos de seguridad de la organización (nivel 2)&lt;/li&gt;
&lt;li&gt;Concientizar en seguridad a todo el personal involucrado en el desarrollo de software&lt;/li&gt;
&lt;li&gt;Proporcionar consultoría interna en seguridad a demanda&lt;/li&gt;
&lt;li&gt;Definir prácticas de continuidad de negocio y recuperación de desastres para componentes críticos&lt;/li&gt;
&lt;li&gt;Implementar el 50% de las recomendaciones de marcos de referencia como OWASP ASVS - Nivel 1 (Aplicaciones web) ó OWASP MASVS (Aplicaciones móviles) &lt;/li&gt;
&lt;li&gt;Sanitizar entradas y codificar salidas de acuerdo con el contexto&lt;/li&gt;
&lt;li&gt;Parametrizar consultas y procedimientos almacenados&lt;/li&gt;
&lt;li&gt;Implementar el versionamiento de artefactos&lt;/li&gt;
&lt;li&gt;Implementar política de gestión de código fuente (nivel 2)&lt;/li&gt;
&lt;li&gt;Implementar MFA para cuentas privilegiadas&lt;/li&gt;
&lt;li&gt;Implementar autenticación en todos los sistemas internos&lt;/li&gt;
&lt;li&gt;Encriptar todo el tráfico en tránsito fuera de la organización&lt;/li&gt;
&lt;li&gt;Contar con un sistema centralizado de logs&lt;/li&gt;
&lt;li&gt;Contar con un sistema de monitoreo y métricas básicas&lt;/li&gt;
&lt;li&gt;Contar con umbrales establecidos de alarma para el presupuesto - nube&lt;/li&gt;
&lt;li&gt;Recopilar métricas del sistema, especialmente de cuellos de botella&lt;/li&gt;
&lt;li&gt;Documentar y clasificar los hallazgos de pruebas de seguridad&lt;/li&gt;
&lt;li&gt;Tratar las vulnerabilidades con severidad alta o superior&lt;/li&gt;
&lt;li&gt;Implementar escaneo de secretos&lt;/li&gt;
&lt;li&gt;Mantener la intensidad por defecto de las herramientas de pruebas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El detalle de las actividades listadas, los riesgos asociados, las métricas para medir su cumplimiento, entre otros datos adicionales, puede consultarlos en el sitio oficial de DSOMM, del cual encontrará el enlace en la sección de referencias. &lt;/p&gt;

&lt;h2&gt;
  
  
  Alternativas de implementación con GitHub Actions
&lt;/h2&gt;

&lt;p&gt;A lo largo de este post se presentan tres alternativas de implementación de prácticas de DevSecOps utilizando GitHub Actions. Esta es una herramienta de automatización integrada en GitHub que permite crear flujos de trabajo personalizados para compilar, probar y desplegar código de forma continua dentro del mismo entorno del repositorio; funciona mediante archivos de configuración en formato YAML que definen eventos, condiciones y acciones a ejecutar, facilitando la implementación de flujos de integración y despliegue continuo (CI/CD) sin necesidad de servidores externos. Su flexibilidad permite integrar fácilmente herramientas de análisis de seguridad, pruebas unitarias, despliegues automatizados y auditorías de cumplimiento, lo que la convierte en una solución completa para equipos que adoptan prácticas DevSecOps. Además, su integración nativa con GitHub y su amplio catálogo de acciones predefinidas en el marketplace la hacen altamente escalable y eficiente para proyectos de cualquier tamaño, la documentación oficial la puede consultar en el enlace al final que encontrará en la sección de referencias.&lt;/p&gt;

&lt;p&gt;Es necesario mencionar que esta no es la única alternativa para la implementación de CI/CD, otra alternativa popular puede ser Jenkins, e incluso los principales proveedores de nube (AWS, GCP, Microsoft) disponen de otras soluciones que podría explorar. Para ello puede consultar la sección de proyectos de "The DevSec Blueprint", el enlace al final en la sección de referencias.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternativa 1: GitHub Actions con GitHub Advanced Security (GHAS)
&lt;/h3&gt;

&lt;p&gt;GHAS es una solución integrada en GitHub que ofrece capacidades como el escaneo de código estático (CodeQL), la detección de secretos expuestos, y el análisis de dependencias para descubrir riesgos en bibliotecas de terceros, todo ello de forma automatizada y continua. Se integra de manera nativa con los flujos de trabajo de GitHub Actions, lo que facilita incorporar controles de seguridad sin interrumpir la productividad del desarrollo, proporcionando reportes centralizados, métricas de riesgo y funciones de gestión de políticas, permitiendo a los equipos de DevSecOps mantener una supervisión proactiva y mejorar su postura de seguridad desde el propio repositorio.&lt;/p&gt;

&lt;p&gt;Debe tener en cuenta que GHAS debe estar acompañado de GitHub Enterprise Cloud (GHEC), y se ofrece en dos productos que pueden ser licenciados por aparte, y cuyo valor depende del número de colaboradores activos al mes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Secret Protection&lt;/li&gt;
&lt;li&gt;GitHub Code Security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Las características clave de GHAS son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secret scanning: Identifica y ayuda a prevenir la exposición accidental de información confidencial a través de la búsqueda de patrones predefinidos y personalizados&lt;/li&gt;
&lt;li&gt;Code scanning: Analiza el código fuente en busca de vulnerabilidades de seguridad y errores de codificación, emplea técnicas de análisis estático&lt;/li&gt;
&lt;li&gt;Dependabot: Herramienta automatizada de gestión de dependencias para actualizarlas a sus últimas versiones seguras&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A partir de GHAS se tiene cubierto el análisis estático de código (SAST), el análisis de componentes de software (SCA) y la gestión de secretos. Una de sus ventajas es que las alertas de seguridad aparecen directamente en el Pull Request, facilitando una adopción rápida por parte de los desarrolladores. Adicionalmente, al ser una solución SaaS nativa de GitHub, la organización que lo adopte no tiene que preocuparse por el mantenimiento, actualización o escalado de las herramientas.&lt;/p&gt;

&lt;p&gt;Sin embargo, entre sus limitaciones se encuentra que carece de capacidades nativas para análisis dinámico de código (DAST) y escaneo de contenedores. Por lo cual, si bien es un buen paso en la adopción de prácticas de DevSecOps, se debe ser consciente que esas carencias deberán cubrirse con herramientas de terceros.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternativa 2: GitHub Actions con herramientas SaaS
&lt;/h3&gt;

&lt;p&gt;La implementación de un enfoque DevSecOps mediante GitHub Actions y herramientas SaaS permite integrar controles de seguridad automatizados en todas las fases del ciclo de desarrollo, ejecutando una supervisión continua sin afectar la agilidad del proceso. En este esquema, el análisis SAST se ejecuta con &lt;a href="//sonarsource.com"&gt;SonarCloud&lt;/a&gt;, evaluando la calidad y seguridad del código fuente; el análisis de componentes y dependencias SCA se gestiona con &lt;a href="//snyk.io"&gt;Snyk&lt;/a&gt;, detectando vulnerabilidades en bibliotecas externas; las pruebas dinámicas DAST se realizan con &lt;a href="//stackhawk.com"&gt;StackHawk&lt;/a&gt;, que simula ataques en entornos de ejecución para identificar fallos explotables; la exposición de secretos se controla mediante &lt;a href="//gitguardian.com"&gt;GitGuardian&lt;/a&gt;, que detecta credenciales y claves filtradas en repositorios; y finalmente, la seguridad de contenedores se refuerza también con Snyk Container, asegurando imágenes y configuraciones. En conjunto, estas herramientas coordinadas desde flujos de trabajo en GitHub Actions consolidan una arquitectura DevSecOps madura, automatizada y orientada a la prevención.&lt;/p&gt;

&lt;p&gt;Para esta alternativa deben considerarse sus costos de licenciamiento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SonarCloud: Desde 32 USD/mes (para 50k a 100k líneas de código)&lt;/li&gt;
&lt;li&gt;Snyk: 25 USD/mes por desarrollador (hasta 10) paquetes más grandes hay que consultar con ventas&lt;/li&gt;
&lt;li&gt;StackHack: 49 USD/mes por desarrollador (mínimo 20)&lt;/li&gt;
&lt;li&gt;GitGuardian: No se entrega información, con costo para organizaciones de más de 25 desarrolladores&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entre sus ventajas destaca una mejor cobertura de seguridad, ya que permite seleccionar las soluciones líderes del mercado para cada tipo de análisis, alcanzando una detección más profunda y precisa de vulnerabilidades en código, dependencias, contenedores y configuraciones. Además, brinda una gestión centralizada y eficiente, dado que cada servicio SaaS cuenta con paneles avanzados para manejar falsos positivos, priorizar riesgos e incluso generar informes de cumplimiento normativo de manera automatizada. Sin embargo, no está libre de limitaciones: alto costo de licenciamiento, contratación simultánea de múltiples proveedores, la soberanía de los datos, pues tanto el código fuente como los resultados de los análisis se procesan y almacenan fuera de la infraestructura de la organización, lo que puede generar preocupaciones en torno a la privacidad y el control de la información.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternativa 3: GitHub Actions con herramientas On-Premise
&lt;/h3&gt;

&lt;p&gt;La implementación de un entorno DevSecOps utilizando GitHub Actions con herramientas On-Premise permite mantener un control total sobre los datos y la infraestructura, integrando la seguridad de manera automatizada en el ciclo de vida del software sin depender de servicios externos. En esta arquitectura, el análisis SAST se realiza con Semgrep CE, una solución ligera y altamente personalizable para identificar vulnerabilidades en el código fuente; el análisis SCA combina Trivy y OWASP Dependency-Track, que detectan y gestionan vulnerabilidades en dependencias de terceros; las pruebas dinámicas DAST se ejecutan con OWASP ZAP, herramienta que simula ataques en entornos de prueba para descubrir fallos explotables; la detección de secretos expuestos se efectúa con TruffleHog, capaz de rastrear credenciales o claves sensibles en el historial del repositorio; y la seguridad de contenedores también se refuerza con Trivy, verificando imágenes y configuraciones antes del despliegue. Esta integración orquestada desde GitHub Actions ofrece una solución de seguridad integral, flexible y orientada al cumplimiento, con la ventaja de preservar la confidencialidad y soberanía de la información.&lt;/p&gt;

&lt;p&gt;Adicionalmente, la eliminación de los costos directos de licenciamiento, ya que se emplean herramientas de código abierto que no requieren suscripciones comerciales, ofrece la soberanía de los datos, puesto que tanto el código fuente como los resultados de los análisis se procesan y almacenan dentro de la propia infraestructura de la organización, mitigando riesgos asociados al acceso por terceros o a la transferencia de información sensible a entornos externos. Finalmente, proporciona una alta capacidad de personalización, especialmente con soluciones como Semgrep CE, que permite desarrollar reglas SAST adaptadas a la lógica de negocio y a los frameworks internos, fortaleciendo la detección de vulnerabilidades específicas del contexto operativo de la organización.&lt;/p&gt;

&lt;p&gt;Entre las limitaciones de esta alternativa deben considerarse los costos de ingeniería, ya que el equipo interno asume la responsabilidad de instalar, alojar, mantener, parchear y escalar todas las herramientas, lo que incrementa la carga técnica y administrativa. Además, la integración eficiente de los distintos sistemas requiere un orquestador de seguridad intermedio, como OWASP DefectDojo, encargado de centralizar los resultados, deduplicar hallazgos y gestionar su ciclo de vida, aunque esto añade otra capa de infraestructura compleja que también debe mantenerse. Por último, en ausencia de dicho orquestador, la gestión de hallazgos se vuelve manual y descentralizada, dificultando la priorización de vulnerabilidades y la reducción de falsos positivos, lo que puede afectar la eficiencia del proceso de aseguramiento continuo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusiones
&lt;/h2&gt;

&lt;p&gt;DSOMM representa una guía práctica y abierta para que cualquier organización, sin importar su tamaño o sector, evalúe y fortalezca la integración de la seguridad dentro de sus procesos de desarrollo y operación. Su enfoque permite avanzar de manera estructurada desde un nivel básico de entendimiento hasta una cultura plenamente madura de DevSecOps, donde la seguridad se incorpora desde la planificación hasta el despliegue y la operación continua. Implementar las primeras acciones del modelo (automatizar compilaciones, definir procesos de despliegue, establecer políticas de parcheo, realizar modelamiento de amenazas y concientizar al personal) constituye un punto de partida sólido para transitar hacia prácticas más seguras, colaborativas y sostenibles. Además, no se limita a ofrecer un marco de evaluación, sino también una hoja de ruta para transformar la seguridad en un valor compartido y medible en el desarrollo de software.&lt;/p&gt;

&lt;p&gt;Por último, las alternativas mencionadas utilizando GitHub Actions, ya sea con herramientas SaaS, On-Premise u opciones nativas de GitHub, no deben entenderse como enfoques excluyentes, sino como componentes complementarios dentro de una estrategia integral de seguridad. Cada organización puede combinar estas soluciones según su contexto, presupuesto, nivel de madurez y requisitos de cumplimiento, logrando así un equilibrio entre automatización, soberanía de datos y profundidad analítica. Integrar servicios propios de GitHub con herramientas abiertas como Semgrep, OWASP ZAP o Trivy, junto con soluciones SaaS especializadas como Snyk, SonarCloud o GitGuardian, permite construir un ecosistema DevSecOps flexible, escalable y alineado con las mejores prácticas del DSOMM, fortaleciendo la detección temprana de vulnerabilidades y promoviendo una cultura de seguridad continua en todo el ciclo de vida del software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://thedevops.guide/" rel="noopener noreferrer"&gt;The DevOps Guide&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dsomm.owasp.org/" rel="noopener noreferrer"&gt;DSOMM&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.github.com/es/actions" rel="noopener noreferrer"&gt;Documentación de GitHub Actions&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.devsecblueprint.com/projects/" rel="noopener noreferrer"&gt;Projects - The DevSec Blueprint&lt;/a&gt; &lt;/p&gt;

</description>
      <category>devsecops</category>
      <category>cybersecurity</category>
      <category>infosec</category>
      <category>security</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Sat, 05 Apr 2025 14:58:27 +0000</pubDate>
      <link>https://dev.to/djhuertasg/-32de</link>
      <guid>https://dev.to/djhuertasg/-32de</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/djhuertasg/degradacion-del-protocolo-de-comunicacion-en-iot-mediante-un-ataque-de-hombre-en-el-medio-mitm-4mf5" class="crayons-story__hidden-navigation-link"&gt;Degradación del protocolo de comunicación en IoT mediante un ataque de hombre en el medio (MitM)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/djhuertasg" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F193771%2F0f7c92f4-e475-4308-9901-549b4069a6d0.png" alt="djhuertasg profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/djhuertasg" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dilver Huertas Guerrero
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dilver Huertas Guerrero
                
              
              &lt;div id="story-author-preview-content-2382802" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/djhuertasg" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F193771%2F0f7c92f4-e475-4308-9901-549b4069a6d0.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dilver Huertas Guerrero&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/djhuertasg/degradacion-del-protocolo-de-comunicacion-en-iot-mediante-un-ataque-de-hombre-en-el-medio-mitm-4mf5" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 5 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/djhuertasg/degradacion-del-protocolo-de-comunicacion-en-iot-mediante-un-ataque-de-hombre-en-el-medio-mitm-4mf5" id="article-link-2382802"&gt;
          Degradación del protocolo de comunicación en IoT mediante un ataque de hombre en el medio (MitM)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/seguridad"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;seguridad&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/iot"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;iot&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mqtt"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mqtt&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cybersecurity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cybersecurity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/djhuertasg/degradacion-del-protocolo-de-comunicacion-en-iot-mediante-un-ataque-de-hombre-en-el-medio-mitm-4mf5#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>seguridad</category>
      <category>iot</category>
      <category>mqtt</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Degradación del protocolo de comunicación en IoT mediante un ataque de hombre en el medio (MitM)</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Sat, 05 Apr 2025 14:54:27 +0000</pubDate>
      <link>https://dev.to/djhuertasg/degradacion-del-protocolo-de-comunicacion-en-iot-mediante-un-ataque-de-hombre-en-el-medio-mitm-4mf5</link>
      <guid>https://dev.to/djhuertasg/degradacion-del-protocolo-de-comunicacion-en-iot-mediante-un-ataque-de-hombre-en-el-medio-mitm-4mf5</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;A lo largo de este post se utiliza Eclipse Mosquitto para simular el broker, cliente y suscriptor MQTT; se establece un entorno controlado para demostrar como realizar un ataque de hombre en el medio (Man-in-the-Middle MitM) utilizando Kali Linux y se muestra como causar una degradación del protocolo de comunicación utilizado por un dispositivo IoT inseguro (simulado).&lt;/p&gt;

&lt;h2&gt;
  
  
  Un poco de teoría
&lt;/h2&gt;

&lt;p&gt;La degradación de protocolo se aprovecha de una mala práctica en ciertos sistemas IoT, en los cuales se permite que el cliente MQTT haga un cambio automático a una conexión insegura (sin TLS), si falla la conexión segura (TLS). El atacante, ubicado entre el cliente y el broker, interrumpe únicamente las conexiones seguras, obligando al cliente a comunicarse sin cifrado.&lt;/p&gt;

&lt;p&gt;Este tipo de ataque se ejecuta de la siguiente manera:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;El cliente MQTT intenta conectarse al broker por el puerto seguro (TLS).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Un atacante lanza un ataque MitM a partir de envenenamiento ARP, reenvío de IP y reglas iptables para bloquear tráfico seguro.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;La conexión segura falla debido al bloqueo silencioso.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;El cliente MQTT activa el cambio automático a una conexión sin cifrado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;El atacante intercepta el mensaje MQTT en texto claro.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En este punto, es conveniente preguntar: ¿Qué impacto tiene en la seguridad?. Respecto a la confidencialidad, el atacante puede ver en texto claro el contenido del mensaje publicado y el nombre del tópico MQTT, en cuanto a integridad el atacante puede inyectar mensajes falsos al broker si logra autenticarse sin TLS, y sobre la disponibilidad el dispositivo IoT, este puede actuar basado en mensajes falsificados, poniendo en riesgo el proceso que este ejecutando.&lt;/p&gt;

&lt;h2&gt;
  
  
  Práctica
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Configuración inicial
&lt;/h3&gt;

&lt;p&gt;Para la práctica se utilizaron 3 máquinas virtualizadas sobre VirtualBox, configuradas en una red interna con el modo promiscuo activado. A estas máquinas se les asigno el direccionamiento de red mostrado en la figura:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ehoclj3shbvge7qli90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ehoclj3shbvge7qli90.png" alt=" " width="655" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se procede a instalar mosquitto y openssl en Alpine, en el cliente solo es necesario instalar mosquitto-clients:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpzphtcwa0j8p0irrxuh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpzphtcwa0j8p0irrxuh.png" alt=" " width="614" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para habilitar la conexión TLS, se requiere un certificado, el cual se genera utilizando openssl y posteriormente se envía utilizando ssh a la máquina cliente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foagp5z902dp4e9kftieg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foagp5z902dp4e9kftieg.png" alt=" " width="800" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para establecer la conexión MQTT, se debe configurar en el archivo mosquitto.conf, en el cual se habilita el puerto 1883 sin TLS y el puerto 8883 con TLS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs536yorzy5r0batxvm5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs536yorzy5r0batxvm5l.png" alt=" " width="352" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Del lado del cliente, se simula un dispositivo IoT que tiene habilitada la conexión insegura en caso de fallar la conexión segura, utilizando un script en bash, estableciendo un tiempo de espera de 3 segundos antes de intentar otra opción:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhq27cmi2wi9sn64wzyie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhq27cmi2wi9sn64wzyie.png" alt=" " width="729" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejecución del escenario
&lt;/h3&gt;

&lt;p&gt;Se inicia la ejecución del broker MQTT, observando que se encuentran habilitados ambos puertos y que está aceptando conexiones:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzbvwx9ojl017gum4nuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzbvwx9ojl017gum4nuz.png" alt=" " width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Del lado del cliente, se observa el envío de mensajes vía TLS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbr1mfbn4t2cjdyj6dyt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbr1mfbn4t2cjdyj6dyt.png" alt=" " width="259" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y el suscriptor (que se encuentra en la misma máquina cliente, en una segunda terminal) recibe el mensaje de la manera esperada:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjinppw8vib7sc4bkmu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjinppw8vib7sc4bkmu5.png" alt=" " width="473" height="44"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En wireshark, se observa que los datos van por el protocolo TLSv1.3:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjv2ursexfr5u1d5qwe8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjv2ursexfr5u1d5qwe8w.png" alt=" " width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Igualmente se puede observar que los datos de la aplicación van encriptados:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3djiz2w19721cp8e4r36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3djiz2w19721cp8e4r36.png" alt=" " width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejecución del ataque MitM
&lt;/h3&gt;

&lt;p&gt;Desde kali linux, se procede a habilitar el reenvío de paquetes y las reglas en iptables:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F817cyypjfhgjk35yrc2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F817cyypjfhgjk35yrc2p.png" alt=" " width="658" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El primer comando permite que Kali actúe como un router, reenviando paquetes entre el cliente MQTT y el broker, el segundo asegura que no haya reglas previas que interfieran con el ataque o con el reenvío de tráfico, el tercero agrega una regla NAT que modifica la dirección IP de origen de los paquetes salientes por la interfaz eth0, permitiendo que las respuestas del broker MQTT regresen a través de Kali, esto se requiere para mantener la ilusión de una conexión directa, ocultando la presencia del atacante. Los últimos 2 comandos permiten que Kali reenvíe paquetes desde el cliente MQTT hacia el broker, y del broker hacia el cliente.&lt;/p&gt;

&lt;p&gt;Finalmente, se debe realizar un envenenamiento de ARP, que consiste en suplantar el dispositivo en cuestión falsificando las respuestas ARP, haciendole creer al objetivo que se está comunicando con el dispositivo suplantado. En 2 terminales, se ejecuta el ataque utilizando la herramienta arpspoof tanto para el broker como para el cliente, habilitando de esa manera un ataque MitM:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0fx26ydxvhwqxl7cjkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0fx26ydxvhwqxl7cjkf.png" alt=" " width="700" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuqbacsu22k9dons05pa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuqbacsu22k9dons05pa.png" alt=" " width="697" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta este punto se ha ejecutado el ataque MitM y todo el tráfico pasa por KaliLinux, al ejecutar el script debe seguir viendo en la consola del cliente: "Mensaje enviado con TLS".&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejecución del ataque de degradación de protocolo
&lt;/h3&gt;

&lt;p&gt;Para ejecutar el ataque se debe incluir una regla que agrega un bloqueo específico a 8883 (TLS) antes de las reglas de ACCEPT (-I FORWARD 1 inserta la regla en la primera posición), obligando de esta manera a que el dispositivo cambie automáticamente hacia la conexión insegura.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvhaqf7ik4hqgp1spkq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvhaqf7ik4hqgp1spkq8.png" alt=" " width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto hace que, al ejecutar el script, y pasados los 3 segundos definidos sin poder realizar la conexión por TLS, se ejecute sin TLS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2eb64zdbwbxcxxvte43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2eb64zdbwbxcxxvte43.png" alt=" " width="369" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En wireshark se puede observar que el protocolo utilizado ahora es MQTT, y en texto claro se observa tanto el tópico como el mensaje:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4a6r8hq4dyv661qjdbr4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4a6r8hq4dyv661qjdbr4.png" alt=" " width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mostrando que se ejecutó un ataque de degradación de protocolo, a través de un ataque MitM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusiones
&lt;/h2&gt;

&lt;p&gt;El ataque de degradación de protocolo de comunicación demuestra que permitir el cambio automático a protocolos IoT sin cifrado debilita toda la arquitectura de seguridad, lo cual es usualmente permitido para facilitar la usabilidad de un producto, sin embargo, se recomienda forzar el uso exclusivo de TLS, validar el certificado del broker correctamente, utilizar autenticación mutua con certificados y monitorizar redes IoT para detectar actividades ARP sospechosas.&lt;/p&gt;

</description>
      <category>seguridad</category>
      <category>iot</category>
      <category>mqtt</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Instalar BeEF en Kali Linux 2024</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Sat, 05 Oct 2024 22:41:53 +0000</pubDate>
      <link>https://dev.to/djhuertasg/instalar-beef-en-kali-linux-2024-42ai</link>
      <guid>https://dev.to/djhuertasg/instalar-beef-en-kali-linux-2024-42ai</guid>
      <description>&lt;p&gt;&lt;a href="https://beefproject.com/" rel="noopener noreferrer"&gt;The Browser Exploitation Framework&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalación de Ruby
&lt;/h2&gt;

&lt;p&gt;Desinstalar la versión de ruby actual&lt;br&gt;
&lt;code&gt;sudo apt remove ruby&lt;/code&gt;&lt;br&gt;
Instalar ruby con rbenv&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt install -y build-essential libssl-dev libreadline-dev zlib1g-dev git
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' &amp;gt;&amp;gt; ~/.zshrc
echo 'eval "$(rbenv init - zsh)"' &amp;gt;&amp;gt; ~/.zshrc
source ~/.zshrc
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install 3.0.3
rbenv global 3.0.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Asegurarse que la versión correcta está en uso&lt;br&gt;
&lt;code&gt;ruby -v&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalación de Browser Exploitation Framework (BeEF)
&lt;/h2&gt;

&lt;p&gt;Clonar el repositorio&lt;br&gt;
&lt;code&gt;git clone https://github.com/beefproject/beef&lt;/code&gt;&lt;br&gt;
Una vez clonado el repositorio, realizar los siguientes cambios en los archivos ubicados en la carpeta principal&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;En el archivo install, modificar la línea 107: Cambiar &lt;code&gt;libncurses5-dev&lt;/code&gt; por &lt;code&gt;libncurses-dev&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En el archivo config.yaml, modificar las líneas 20 y 21 con el usuario y contraseña que quieran.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Desde la consola ejecutar el comando:&lt;br&gt;
&lt;code&gt;./install&lt;/code&gt;&lt;br&gt;
Si todo se ha instalado correctamente, al final se genera el siguiente mensaje:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdqrmco379rir1x36bjl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdqrmco379rir1x36bjl.png" alt=" " width="524" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para iniciar BeEF ejecutar el comando:&lt;br&gt;
&lt;code&gt;./beef&lt;/code&gt;&lt;br&gt;
Pueden acceder a traves de la URL &lt;code&gt;http://127.0.0.1:3000/ui/panel&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6shbujfaeuy6nbpygt8r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6shbujfaeuy6nbpygt8r.png" alt=" " width="344" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kalilinux</category>
    </item>
    <item>
      <title>Detectar, analizar y explotar vulnerabilidades utilizando herramientas de código abierto: Medición de desempeño y resultados</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Fri, 20 Sep 2024 20:37:05 +0000</pubDate>
      <link>https://dev.to/djhuertasg/detectar-analizar-y-explotar-vulnerabilidades-utilizando-herramientas-de-codigo-abierto-medicion-de-desempeno-y-resultados-30dc</link>
      <guid>https://dev.to/djhuertasg/detectar-analizar-y-explotar-vulnerabilidades-utilizando-herramientas-de-codigo-abierto-medicion-de-desempeno-y-resultados-30dc</guid>
      <description>&lt;h1&gt;
  
  
  Introducción
&lt;/h1&gt;

&lt;p&gt;Se dispuso una máquina virtual con Metasploitable (versión 3), la cual está diseñada para pruebas de intrusión y testing (pentest) con varias aplicaciones listas para ser atacadas. Adicionalmente, una máquina virtual con Kali Linux, con la cual se ejecutó la herramienta de escaneo de red y puertos Nmap y las herramientas de escaneo de vulnerabilidades Nessus y Greenbone CE (antes conocido como OpenVAS). A partir de este análisis se identificaron vulnerabilidades que fueron explotadas utilizando Metasploit. Se busca mostrar el proceso de detección, análisis y explotación de vulnerabilidades, así como las herramientas y técnicas de identificación de estas. &lt;/p&gt;

&lt;p&gt;También se monitoreo la carga en la máquina victima (Metasploitable) al lanzar el escaneo de vulnerabilidades con Nessus y con GreenboneCE, y se midió el rendimiento de la red (ancho de banda y la latencia) utilizando IPERF, con el fin de determinar los escenarios de aplicación, dado que se está realizando un escaneo activo, que en entornos reales generaría alertas en los sistemas de protección. &lt;/p&gt;

&lt;h1&gt;
  
  
  Desarrollo
&lt;/h1&gt;

&lt;p&gt;Se dispuso del escenario mostrado en la Figura 1. Ambas máquinas tienen en su configuración de red el modo Host-only adapter habilitado, de esta manera pueden comunicarse entre sí. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tctlny57xdryt1w3zvs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tctlny57xdryt1w3zvs.jpg" alt="Figura 1. Escenario de laboratorio. Fuente: propia​." width="742" height="367"&gt;&lt;/a&gt;&lt;em&gt;Figura 1. Escenario de laboratorio. Fuente: propia​.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se procede a identificar las IPs asignada a cada una de las máquinas, en la figura 2 para Kali Linux, con IP 192.168.56.4 y en la figura 3 para Metasplotable 3, con IP 192.168.56.3. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5fs16to2gx0ts6ubyyn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5fs16to2gx0ts6ubyyn.png" alt=" " width="422" height="409"&gt;&lt;/a&gt;&lt;em&gt;Figura 2. Ejecución de ifconfig. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i355nr04w24s18zioc7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i355nr04w24s18zioc7.png" alt=" " width="422" height="338"&gt;&lt;/a&gt;&lt;em&gt;Figura 3. Ejecución de ipconfig. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Escaneo de red y puertos
&lt;/h2&gt;

&lt;p&gt;Se procede a identificar los servicios disponibles en Metasploitable utilizando Nmap, los cuales se muestran en la figura 4. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ml7e14k5lxp11gxaw37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ml7e14k5lxp11gxaw37.png" alt=" " width="422" height="229"&gt;&lt;/a&gt;&lt;em&gt;Figura 4. Análisis de servicios con nmap. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se identifica que el servicio de ping esta deshabilitado, como se muestra en la figura 5. Por ellos, se procede a generar una consulta más detallada con Nmap. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbegfvpbpi62xhngjc2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbegfvpbpi62xhngjc2l.png" alt=" " width="422" height="77"&gt;&lt;/a&gt;&lt;em&gt;Figura 5. Servicio ping deshabilitado. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;La consulta detallada nmap -Pn -A -sV 192.168.56.3, indica que el sistema operativo es Windows, además de lo mostrado en la figura 6. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74doisrl1jf7ggv6ix6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74doisrl1jf7ggv6ix6i.png" alt=" " width="558" height="601"&gt;&lt;/a&gt;&lt;em&gt;Figura 6. Escaneo detallado con Nmap. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;El escaneo realizado con Nmap muestra los siguientes puertos abiertos y servicios detectados:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Puerto 21/tcp (FTP)

&lt;ul&gt;
&lt;li&gt;Servicio: Microsoft FTPD&lt;/li&gt;
&lt;li&gt;Estado: Abierto&lt;/li&gt;
&lt;li&gt;Detalles adicionales: Windows_NT&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Puerto 22/tcp (SSH)

&lt;ul&gt;
&lt;li&gt;Servicio: OpenSSH 7.1 &lt;/li&gt;
&lt;li&gt;Estado: Abierto &lt;/li&gt;
&lt;li&gt;Detalles adicionales: Muestra la llave pública RSA-2048 y ECDSA-521. OpenSSH utiliza el protocolo 2.0. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Puerto 80/tcp (HTTP) 

&lt;ul&gt;
&lt;li&gt;Servicio: Microsoft IIS httpd 7.5 &lt;/li&gt;
&lt;li&gt;Estado: Abierto &lt;/li&gt;
&lt;li&gt;Detalles adicionales:  Identifica métodos potencialmente peligrosos como TRACE, lo que podría permitir ataques de tipo Cross-Site Tracing (XST). No tiene http-title. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Puerto 4848/tcp (HTTPS - Administración) 

&lt;ul&gt;
&lt;li&gt;Servicio: Oracle GlassFish Application Server (versión 4.0) &lt;/li&gt;
&lt;li&gt;Estado: Abierto &lt;/li&gt;
&lt;li&gt;Detalles adicionales: Certificado SSL no válido desde 2023-05-13. El http-title dice “Login”. Problema reportado con el análisis XML de la ruta ‘/evox/about’. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Puerto 8080/tcp (HTTP) 

&lt;ul&gt;
&lt;li&gt;Servicio: Sun GlassFish Open Source Edition 4.0 &lt;/li&gt;
&lt;li&gt;Estado: Abierto &lt;/li&gt;
&lt;li&gt;Detalles adicionales: El servidor GlassFish está ejecutándose y podría estar exponiendo métodos HTTP peligrosos, como PUT, DELETE y TRACE, lo que podría permitir la modificación de recursos en el servidor.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Puerto 8383/tcp (HTTP - Apache) 

&lt;ul&gt;
&lt;li&gt;Servicio: Apache httpd &lt;/li&gt;
&lt;li&gt;Estado: Abierto &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Puerto 9200/tcp (HTTP) 

&lt;ul&gt;
&lt;li&gt;Servicio: Es muy probable que sea Elasticsearch, ya que este servicio utiliza frecuentemente el puerto 9200 para su API REST. &lt;/li&gt;
&lt;li&gt;Estado: Abierto &lt;/li&gt;
&lt;li&gt;Detalles adicionales: El servidor responde con 400 Bad Request cuando se intenta acceder a rutas como ‘/nice ports, Trinity.txt.bak’. El servidor responde con un JSON que contiene detalles de un servicio con nombre: "Devil Hunter Gabriel".
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Puertos 49153/tcp y 49154/tcp 

&lt;ul&gt;
&lt;li&gt;Servicio: Microsoft Windows RPC &lt;/li&gt;
&lt;li&gt;Estado: abierto &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Puerto 9200/tcp (HTTP) 

&lt;ul&gt;
&lt;li&gt;Servicio: Desconocido &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nmap también tiene la capacidad de generar informes detallados en formato XML, como se muestra en la figura 7. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmc3kejldcfdatcsxwic0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmc3kejldcfdatcsxwic0.png" alt=" " width="601" height="323"&gt;&lt;/a&gt;&lt;em&gt;Figura 7. Reporte generado con Nmap. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Medición de desempeño en el escaneo de vulnerabilidades
&lt;/h2&gt;

&lt;p&gt;Para realizar la medición del desempeño de las herramientas Nessus y GCE, se utiliza Performance Monitor​[1]​ e iperf3​[2]​. Primero, se procede a realizar una prueba del funcionamiento de iperf3, como se muestra en la figura 8. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2w3ofi59fm27jednkht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi2w3ofi59fm27jednkht.png" alt=" " width="601" height="198"&gt;&lt;/a&gt;&lt;em&gt;Figura 8. Prueba del funcionamiento de iperf3. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Adicionalmente, se crea en Metasploitable un recopilador de datos personalizado con nombre UsoRecursosEscaneo, como se observa en la figura 9. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wgr6robbocysd8c2goj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wgr6robbocysd8c2goj.png" alt=" " width="601" height="461"&gt;&lt;/a&gt;&lt;em&gt;Figura 9. Recopilador de datos personalizado utilizando Performance Monitor. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se configura el escaneo avanzado con Nessus, como se observa en la figura 10. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9n8aa4qfvooib5j50rq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9n8aa4qfvooib5j50rq.png" alt=" " width="601" height="356"&gt;&lt;/a&gt;&lt;em&gt;Figura 10. Escaneo avanzado de vulnerabilidades con Nessus. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Posteriormente, se ejecuta el escenario de análisis de vulnerabilidades y medición de desempeño para Nessus, como se muestra a continuación. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq110qemq65byvrlrwogs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq110qemq65byvrlrwogs.png" alt=" " width="800" height="194"&gt;&lt;/a&gt;&lt;em&gt;Figura 11. Escenario de análisis con Nessus. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se muestran los resultados del escaneo en la figura 12. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpfo6zpebrm7bm3swglb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpfo6zpebrm7bm3swglb.png" alt=" " width="800" height="178"&gt;&lt;/a&gt;&lt;em&gt;Figura 12. Resultado del escaneo realizado con Nessus. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se configura el escaneo avanzado (full and fast) con Greenbone CE, como se muestra en la figura 13. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1d207iwpi0olv8zmkf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1d207iwpi0olv8zmkf5.png" alt=" " width="601" height="543"&gt;&lt;/a&gt;&lt;em&gt;Figura 13. Configuración del escaneo avanzado con GCE. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se ejecuta el monitoreo de recursos y el escaneo de vulnerabilidades con GCE, como se muestra en la figura 14. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh49niuarqbcr5yqvuevi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh49niuarqbcr5yqvuevi.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;em&gt;Figura 14. Escaneo avanzado con GCE y monitoreo.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparación de desempeño entre GCE y Nessus
&lt;/h2&gt;

&lt;p&gt;GCE parece tener una mayor utilización de los recursos del sistema (procesador, memoria, y disco), con más fallos de página, lecturas/escrituras de páginas, y transferencias de disco; lo cual sugiere que está manejando una carga de trabajo más intensa o menos eficiente. Por otro lado, Nessus presenta más interrupciones y cambios de contexto, lo que sugiere que está manejando más eventos de hardware o procesos simultáneos, pero con menor uso general de memoria y disco.  &lt;/p&gt;

&lt;p&gt;A continuación, en la tabla 1, se muestra un resumen de las vulnerabilidades encontradas y el tiempo de ejecución, en esta última se observa que GCE toma más del doble de tiempo de ejecución que Nessus. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tabla 1. Resumen de desempeño entre GCE y Nessus.&lt;/em&gt; &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Nessus&lt;/th&gt;
&lt;th&gt;GCE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vulnerabilidades reportadas&lt;/td&gt;
&lt;td&gt;52 (15 críticas, 19 altas, 16 medias, 2 bajas)&lt;/td&gt;
&lt;td&gt;55 (25 altas, 27 medias, 3 bajas)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiempo&lt;/td&gt;
&lt;td&gt;25 minutos 21 segundos&lt;/td&gt;
&lt;td&gt;57 minutos 16 segundos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nota: La clasificación que realiza Nessus y GCE difiere en sus niveles, por lo cual no es comparable directamente. &lt;/p&gt;

&lt;p&gt;En las figuras 15 y 16 se observa el desempeño de ambas herramientas de acuerdo con la información obtenida por medio de Performance Monitor. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lli3i4274emqm8h9r5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lli3i4274emqm8h9r5m.png" alt=" " width="800" height="1204"&gt;&lt;/a&gt;&lt;em&gt;Figura 15. Métricas de desempeño de uso de memoria y procesador. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadivvvojqer5h5n7xf9o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadivvvojqer5h5n7xf9o.png" alt=" " width="800" height="1204"&gt;&lt;/a&gt;&lt;em&gt;Figura 16. Métricas de paginamiento y uso de disco. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A continuación, se presenta un resumen de la comparación en rendimiento: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Memoria Disponible 

&lt;ul&gt;
&lt;li&gt;GCE: Promedio de 196.88 MB &lt;/li&gt;
&lt;li&gt;Nessus: Promedio de 191.94 MB &lt;/li&gt;
&lt;li&gt;Diferencia: GCE tiene una mayor media de memoria disponible, lo que podría indicar una mayor disponibilidad de recursos de memoria. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Utilización del Procesador 

&lt;ul&gt;
&lt;li&gt;GCE: 40.98% &lt;/li&gt;
&lt;li&gt;Nessus: 38.66% &lt;/li&gt;
&lt;li&gt;Diferencia: GCE muestra un uso del procesador más alto en promedio, lo que podría sugerir que está manejando una carga de trabajo más alta. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cambios de Contexto por Segundo 

&lt;ul&gt;
&lt;li&gt;GCE: 2873.92 cambios/seg &lt;/li&gt;
&lt;li&gt;Nessus: 3132.20 cambios/seg &lt;/li&gt;
&lt;li&gt;Diferencia: Nessus tiene una tasa mayor de cambios de contexto, lo que puede indicar una mayor carga de trabajo multitarea en este entorno. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Longitud de la Cola del Procesador 

&lt;ul&gt;
&lt;li&gt;GCE: 0.78 procesos en cola &lt;/li&gt;
&lt;li&gt;Nessus: 0.41 procesos en cola &lt;/li&gt;
&lt;li&gt;Diferencia: GCE tiene una cola de procesos más larga, lo que puede indicar que el procesador estuvo más ocupado o que hubo más procesos esperando para ser ejecutados. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Page Faults/sec 

&lt;ul&gt;
&lt;li&gt;GCE: Relativamente más alto en algunos puntos, lo que puede indicar más intentos de acceder a páginas de memoria que no estaban en la memoria física. &lt;/li&gt;
&lt;li&gt;Nessus: Mostró menos picos de fallos de página, lo que podría indicar una mejor gestión de la memoria. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pages/sec 

&lt;ul&gt;
&lt;li&gt;GCE: Muestra más actividad de lectura/escritura de páginas. &lt;/li&gt;
&lt;li&gt;Nessus: Menor cantidad de actividad en comparación con GCE. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pool Paged Bytes 

&lt;ul&gt;
&lt;li&gt;GCE: Muestra mayor uso de bytes paginados, lo que indica más datos en memoria virtual. &lt;/li&gt;
&lt;li&gt;Nessus: Menor uso de bytes paginados, lo que puede indicar que menos datos se enviaron al archivo de página. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Disk Transfers/sec 

&lt;ul&gt;
&lt;li&gt;GCE: Mayor cantidad de transferencias de disco por segundo, lo que indica más actividad en el subsistema de almacenamiento. &lt;/li&gt;
&lt;li&gt;Nessus: Menos transferencias de disco, lo que podría indicar una menor carga de trabajo en el almacenamiento. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Interrupts/sec: 

&lt;ul&gt;
&lt;li&gt;GCE: Menor cantidad de interrupciones por segundo. &lt;/li&gt;
&lt;li&gt;Nessus: Mayor cantidad de interrupciones por segundo, lo que puede sugerir una mayor interacción con dispositivos de hardware o una mayor carga en la gestión de interrupciones. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;También se analizó el impacto en la red utilizando iperf3, como se muestra en la figura 17. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3z7v4sh4h06hlbcn953.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3z7v4sh4h06hlbcn953.png" alt=" " width="800" height="961"&gt;&lt;/a&gt;&lt;em&gt;Figura 17. Transferencia y tasa de bits utilizando iperf3. Fuente: propia.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;A continuación, se presenta un análisis comparativo de los resultados obtenidos al evaluar el desempeño de GCE y Nessus, utilizando iperf3, dónde se evalúa tanto la transferencia de datos (MBytes) como la tasa de bits (Mbits/seg): &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Transferencia de Datos (MBytes) 

&lt;ul&gt;
&lt;li&gt;GCE: La transferencia de datos en el caso de iperf3GCE oscila entre 10 y 665 MBytes. Se observan fluctuaciones significativas a lo largo del tiempo, con una caída abrupta alrededor de los 10 MBytes en un punto, lo que sugiere posibles interrupciones o inestabilidades en la conexión. &lt;/li&gt;
&lt;li&gt;Nessus: En comparación, la transferencia de datos en iperf3Nessus es más estable, con un rango de 450 a 704 MBytes. Aunque hay variaciones, son más suaves y no se presentan caídas tan dramáticas como en el caso de GCE. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tasa de Bits (Mbits/seg) 

&lt;ul&gt;
&lt;li&gt;GCE: La tasa de bits varía considerablemente, con un máximo de 665 Mbits/seg, pero también con caídas abruptas hasta los 10 Mbits/seg. Estas caídas pueden indicar problemas temporales en la red, como congestión, interferencias o limitaciones del hardware que afectan la estabilidad del enlace. &lt;/li&gt;
&lt;li&gt;Nessus: Por otro lado, la tasa de bits en Nessus es mucho más constante, con valores en su mayoría por encima de los 450 Mbits/seg y un máximo de 742 Mbits/seg. Aunque también muestra algunas variaciones, la estabilidad general es mucho mayor, con una mejor capacidad para mantener tasas de bits más elevadas durante el tiempo de la prueba. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Estabilidad y Rendimiento 

&lt;ul&gt;
&lt;li&gt;GCE muestra una inestabilidad marcada, con varias caídas importantes tanto en la transferencia de datos como en la tasa de bits. Esto podría deberse a condiciones fluctuantes de la red o problemas específicos de la infraestructura que se usó para la prueba. &lt;/li&gt;
&lt;li&gt;Nessus, por el contrario, exhibe un comportamiento mucho más estable. Aunque tiene algunas fluctuaciones, las caídas son mucho menos severas y los valores se mantienen dentro de un rango más consistente, lo que indica un mejor rendimiento general. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nessus presenta una red más confiable y estable con mejor capacidad para mantener altos niveles de transferencia y tasa de bits a lo largo del tiempo; mientras que GCE muestra variaciones más drásticas, lo que puede sugerir problemas de estabilidad o congestión en la red, con importantes caídas que afectaron el rendimiento general.  &lt;/p&gt;

&lt;p&gt;Si bien el desempeño de las herramientas es importante, también se debe tener en cuenta los resultados en cuanto las vulnerabilidades detectadas, dónde se observa que GCE obtiene datos más detallados e incluso encuentra credenciales para servicios abiertos, a diferencia de Nessus.  En la tabla 2 se presenta un resumen. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tabla 2. Cantidad de vulnerabilidades encontradas por tipo de tecnología.&lt;/em&gt; &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tecnología&lt;/th&gt;
&lt;th&gt;Nessus&lt;/th&gt;
&lt;th&gt;GCE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Apache&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apache Axis2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apache Tomcat&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Elasticsearch&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FTP Server&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java JMX&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Windows LAN Manager SNMP&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenSSH&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle Glassfish Server&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SNMP Agent&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH Server&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSL Certificate&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSL Cipher Suite&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSL Service&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP Timestamp&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nota. Esta clasificación fue realizada manualmente a partir de los reportes entregados por cada una de las herramientas. &lt;/p&gt;

&lt;p&gt;De acuerdo con el análisis de las herramientas, el servicio Apache Tomcat es probablemente el que tiene la posibilidad de ser explotado, dado que ambas sugieren vulnerabilidades, revisando los informes se observa que fue detectado en el puerto 8282/tcp, sin embargo, Nmap no detecto nada expuesto en ese puerto, sino en el 8383/tcp HTTP Apache.  &lt;/p&gt;

&lt;p&gt;En la siguiente sección se procede a explotar las vulnerabilidades detectadas para Apache, utilizando Metasploit y los resultados generados por el escaneo de vulnerabilidades. &lt;/p&gt;

&lt;h2&gt;
  
  
  Explotación de vulnerabilidades utilizando Metasploit
&lt;/h2&gt;

&lt;p&gt;En el puerto 8282 está expuesto el servicio Apache Tomcat 8.0.33, como se observa en la figura 18.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlrb50j6jpnt8p4bkphr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlrb50j6jpnt8p4bkphr.png" alt=" " width="601" height="257"&gt;&lt;/a&gt;&lt;em&gt;Figura 18. Servicio apache tomcat. Fuente:propia&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se procede a realizar un escaneo de directorios utilizando metasploit, como se observa en la figura 19, encontrando 4 directorios disponibles. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrqa95mgeo8z0nnntt8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrqa95mgeo8z0nnntt8w.png" alt=" " width="533" height="241"&gt;&lt;/a&gt;&lt;em&gt;Figura 19. Escaneo de directorios con metasploit. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Se procede a explorar el primer directorio Axis2, dado que como se muestra en la figura 20, GCE encontró credenciales para este servicio. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvz76qi29p4a1vg15473p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvz76qi29p4a1vg15473p.png" alt=" " width="581" height="218"&gt;&lt;/a&gt;&lt;em&gt;Figura 20. Credenciales encontradas por GCE para el servicio Axis2.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;En la figura 21, se observa que utilizando las credenciales reportadas (admin/axis2) por GCE es posible acceder al módulo web de administración. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg0z1bh4f2bo3xubplbk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg0z1bh4f2bo3xubplbk.png" alt=" " width="601" height="378"&gt;&lt;/a&gt;&lt;em&gt;Figura 21. Acceso al módulo web de administración de Axis2. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Adicionalmente, GCE reporto encontrar credenciales para los servicios de FTP y SSH como se observa en las figuras 22 y 23, respectivamente. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fej51i3quw7n5pjh0hw40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fej51i3quw7n5pjh0hw40.png" alt=" " width="578" height="209"&gt;&lt;/a&gt;&lt;em&gt;Figura 22. Credenciales para el servicio FTP. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqvuxeio0vx9mxmi08b2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqvuxeio0vx9mxmi08b2.png" alt=" " width="582" height="205"&gt;&lt;/a&gt;&lt;em&gt;Figura 23. Credenciales para el servicio SSH. Fuente: propia.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Se procede a acceder al servidor utilizando el servicio SSH, como se observa en la figura 24, utilizando las credenciales vagrant:vagrant. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Freed965gm3ymrbjfgo00.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Freed965gm3ymrbjfgo00.png" alt=" " width="601" height="159"&gt;&lt;/a&gt;&lt;em&gt;Figura 24. Acceso al servicio SSH. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Otro directorio interesante es Manager, en el cual al intentar acceder se solicita credenciales, sin embargo, al poner credenciales erróneas, se genera un error 401, que entrega información relevante, en el cual se indica que en el archivo conf/tomcat-users.xml se encuentran las credenciales para utilizar la aplicación web, como se observa en la figura 25. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu390xp4bw6mmspcxbcf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu390xp4bw6mmspcxbcf.png" alt=" " width="601" height="289"&gt;&lt;/a&gt;&lt;em&gt;Figura 25. Página de error 401 al intentar acceder al directorio manager. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Utilizando esta información y la consola SSH previamente establecida, se procede a leer el archivo con el comando: &lt;code&gt;findstr "^" "C:\Program Files\Apache Software Foundation\tomcat\apache-tomcat-8.0.33\conf\tomcat-users.xml"&lt;/code&gt;. En este archivo se identifican las credenciales username="sploit" password="sploit" roles="manager-gui", como se observa en la figura 26. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4qcrb3lfwq0w1nqsvuh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4qcrb3lfwq0w1nqsvuh.png" alt=" " width="601" height="486"&gt;&lt;/a&gt;&lt;em&gt;Figura 26. Acceso al archivo tomcat-users.xml. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Adicionalmente, se procede a realizar una enumeración de usuarios en el directorio manager, como se muestra en la figura 27. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffunc444qurc1rjly5qjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffunc444qurc1rjly5qjw.png" alt=" " width="601" height="409"&gt;&lt;/a&gt;&lt;em&gt;Figura 27. Enumeración de usuarios en el servicio apache tomcat. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dado que ya se han realizado varias tareas de explotación, ahora se procede a realizar tareas de post-explotación utilizando Meterpreter​ [3]​. Se procede a establecer una consola utilizando el exploit multi/http/tomcat_mgr_upload, como se muestra en la figura 28, obteniendo una consola con el usuario METASPLOITABLE3. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4cb27nz1t7z4y9uhssf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4cb27nz1t7z4y9uhssf.png" alt=" " width="599" height="601"&gt;&lt;/a&gt;&lt;em&gt;Figura 28. Estableciendo una consola con Meterpreter. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;De manera similar al anterior y utilizando el mismo exploit, se procede a cambiar el payload a Windows/meterpreter/reverse_tcp, lo cual permite establecer una consola, pero con el usuario NT AUTHORITY\SYSTEM, permitiendo así tener permisos más elevados en la máquina. Esto se muestra en la figura 29. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4f0i9dqg7m2w6qz3wf0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4f0i9dqg7m2w6qz3wf0.png" alt=" " width="601" height="245"&gt;&lt;/a&gt;&lt;em&gt;Figura 29. Consola con un usuario de mayor privilegio. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Es posible igualmente utilizar un exploit para Axis2, con el fin de establecer la consola con Meterpreter, como se observa en la figura 30. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw901lqs2qqv5ubu9ixkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw901lqs2qqv5ubu9ixkd.png" alt=" " width="601" height="490"&gt;&lt;/a&gt;&lt;em&gt;Figura 30. Consola utilizando un exploit para Axis2. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ingresando a la pantalla de administración de apache tomcat, se observa que existe un servicio /struts2-rest/showcase, como se muestra en la figura 31. Este también puede aprovecharse para establecer una consola con Meterpreter, como se observa en la figura 32. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkdcbuejri90fm366b51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkdcbuejri90fm366b51.png" alt=" " width="515" height="138"&gt;&lt;/a&gt;&lt;em&gt;Figura 31. Servicio struts2 expuesto por apache tomcat. Fuente: propia.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86gpdfqjv53zbc93ykxh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86gpdfqjv53zbc93ykxh.png" alt=" " width="601" height="224"&gt;&lt;/a&gt;&lt;em&gt;Figura 32. Consola utilizando el servicio struts2. Fuente: propia.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Se registran múltiples maneras de establecer una consola utilizando Meterpreter y diferentes servicios/vulnerabilidades que permitirían continuar con tareas de post-explotación. &lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusiones
&lt;/h1&gt;

&lt;p&gt;La elección entre Nessus y Greenbone CE debe basarse en las necesidades específicas de la organización, el nivel de detalle requerido en los informes, y la capacidad del sistema para soportar el impacto del escaneo de vulnerabilidades. A continuación, se desarrollan estos puntos en detalle: &lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluación de la calidad y la estructura de los informes de vulnerabilidades
&lt;/h2&gt;

&lt;p&gt;Nessus: Los informes generados por Nessus se caracterizan por su claridad y estructura organizada. Incluyen detalles importantes como la clasificación de las vulnerabilidades en críticas, altas, medias y bajas, junto con descripciones, soluciones recomendadas y referencias adicionales. La presentación es intuitiva, facilitando la interpretación de los datos para profesionales de seguridad con diferentes niveles de experiencia. Sin embargo, puede presentar menos detalles técnicos en comparación con GCE. &lt;/p&gt;

&lt;p&gt;Greenbone CE: Los informes de GCE tienden a ser más detallados, proporcionando información técnica profunda, incluyendo credenciales descubiertas y configuraciones específicas de los servicios. Sin embargo, esta riqueza de detalles puede hacer que los informes sean más complejos de interpretar para aquellos que no están familiarizados con el análisis de vulnerabilidades a nivel técnico. &lt;/p&gt;

&lt;h2&gt;
  
  
  Análisis del impacto en el rendimiento del sistema
&lt;/h2&gt;

&lt;p&gt;CPU y Memoria: Durante la ejecución de escaneos, GCE mostró un mayor consumo de CPU y memoria en comparación con Nessus, lo que sugiere que maneja una carga de trabajo más intensa. Nessus, aunque presenta más interrupciones y cambios de contexto, usa menos recursos en general, lo que indica una operación más optimizada en cuanto a la gestión de memoria y procesos. &lt;/p&gt;

&lt;p&gt;Ancho de Banda (IPERF): Las pruebas de IPERF revelaron que Nessus maneja de manera más eficiente la red, mostrando una tasa de bits más estable y una mayor consistencia en la transferencia de datos. Por otro lado, GCE presentó inestabilidades significativas, con caídas abruptas en la tasa de bits, lo que podría reflejar una mayor susceptibilidad a la congestión de la red o limitaciones de hardware. &lt;/p&gt;

&lt;h2&gt;
  
  
  Fortalezas y debilidades
&lt;/h2&gt;

&lt;p&gt;Fortalezas de Nessus: Su capacidad para generar informes claros y organizados, junto con su menor impacto en los recursos del sistema, lo hace ideal para organizaciones que necesitan un análisis de vulnerabilidades eficiente y fácil de interpretar sin sacrificar el rendimiento del sistema. &lt;/p&gt;

&lt;p&gt;Fortalezas de GCE: La riqueza de detalles técnicos en sus informes y su capacidad para detectar un mayor número de vulnerabilidades, incluyendo la identificación de credenciales, lo hacen una herramienta poderosa para un análisis profundo y exhaustivo. &lt;/p&gt;

&lt;p&gt;Debilidades de Nessus: Puede omitir detalles técnicos que GCE captura, lo que podría ser un inconveniente en entornos donde se requiere un análisis profundo. &lt;/p&gt;

&lt;p&gt;Debilidades de GCE: Su mayor consumo de recursos y la complejidad de sus informes pueden representar un desafío en ambientes donde los recursos son limitados o donde se requiere una interpretación rápida de los resultados. &lt;/p&gt;

&lt;h2&gt;
  
  
  Recomendaciones sobre cuándo utilizar cada herramienta
&lt;/h2&gt;

&lt;p&gt;Nessus: Es recomendable en organizaciones que buscan un equilibrio entre un análisis efectivo de vulnerabilidades y la necesidad de minimizar el impacto en el rendimiento del sistema. También es adecuado para equipos con menos experiencia técnica que necesitan interpretar los resultados rápidamente. &lt;/p&gt;

&lt;p&gt;Greenbone CE: Es ideal en situaciones donde se requiere un análisis profundo y detallado, especialmente en entornos técnicos con la capacidad de manejar su mayor demanda de recursos. También es útil cuando se necesita descubrir información crítica como credenciales de servicios o detalles específicos de configuraciones. &lt;/p&gt;

&lt;h1&gt;
  
  
  Referencias
&lt;/h1&gt;

&lt;p&gt;​[1]  C. Marcho, «Windows Performance Monitor Overview - Microsoft Community Hub», &lt;a href="https://techcommunity.microsoft.com/t5/ask-the-performance-team/windows-performance-monitor-overview/ba-p/375481" rel="noopener noreferrer"&gt;https://techcommunity.microsoft.com/t5/ask-the-performance-team/windows-performance-monitor-overview/ba-p/375481&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;​[2]  «iPerf - The ultimate speed test tool for TCP, UDP and SCTP», &lt;a href="https://iperf.fr/" rel="noopener noreferrer"&gt;https://iperf.fr/&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;​[3]  Sentinel One, «Metasploit Meterpreter: The Advanced and Powerful Payload», &lt;a href="https://www.sentinelone.com/blog/meterpreter-advanced-powerful-metasploit-payload/" rel="noopener noreferrer"&gt;https://www.sentinelone.com/blog/meterpreter-advanced-powerful-metasploit-payload/&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;​ ​ &lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>ciberseguridad</category>
      <category>vulnerabilidades</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Integridad y confidencialidad: Porque no entregar el hash de un número de tarjeta</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Thu, 02 May 2024 02:34:26 +0000</pubDate>
      <link>https://dev.to/djhuertasg/integridad-y-confidencialidad-porque-no-entregar-el-hash-de-un-numero-de-tarjeta-5058</link>
      <guid>https://dev.to/djhuertasg/integridad-y-confidencialidad-porque-no-entregar-el-hash-de-un-numero-de-tarjeta-5058</guid>
      <description>&lt;h2&gt;
  
  
  Escenario
&lt;/h2&gt;

&lt;p&gt;Usted es responsable de la ciberseguridad en su organización, y se presenta una situación en la cual proponen como medida de seguridad, entregar el hash de la tarjeta en vez del número de tarjeta en las transacciones que van hacia la aplicación móvil de su empresa. Argumentan que el hash es una operación no reversible, por lo cual, un atacante no podría obtener el dato original. Sin embargo, usted aún tiene la pregunta: ¿Es posible determinar el número de tarjeta a partir del hash?.&lt;/p&gt;

&lt;h2&gt;
  
  
  Algoritmos para la generación de hash
&lt;/h2&gt;

&lt;p&gt;Los algoritmos de generación de hash son funciones criptográficas diseñadas para convertir datos de cualquier tamaño en un valor fijo, estos valores son únicos para cada entrada única (en realidad la cantidad de combinaciones es muy grande, pero finita, ver &lt;a href="https://es.wikipedia.org/wiki/Colisi%C3%B3n_%28hash%29" rel="noopener noreferrer"&gt;colisión de hash&lt;/a&gt;), es decir, pequeñas diferencias en los datos de entrada producirán hashes completamente diferentes. Algunos de los algoritmos más utilizados son:&lt;/p&gt;

&lt;h3&gt;
  
  
  MD5 (Message Digest Algorithm 5)
&lt;/h3&gt;

&lt;p&gt;MD5 divide los datos en bloques de 512 bits y procesa cada bloque en un ciclo de 64 pasos, utiliza cuatro variables de 32 bits, y el resultado es un hash de 128 bits. Aunque se usa ampliamente para verificar la integridad de los datos, no se recomienda su aplicación en seguridad debido a vulnerabilidades conocidas.&lt;/p&gt;

&lt;h3&gt;
  
  
  SHA-1 (Secure Hash Algorithm 1)
&lt;/h3&gt;

&lt;p&gt;SHA-1 procesa bloques de 512 bits y utiliza un ciclo de 80 pasos, resultando en un hash de 160 bits; fue ampliamente utilizado en protocolos de seguridad como TLS y SSL, pero ha sido reemplazado por versiones más seguras de SHA debido a debilidades en su estructura.&lt;/p&gt;

&lt;h3&gt;
  
  
  SHA-3 (parte de la familia SHA-2)
&lt;/h3&gt;

&lt;p&gt;SHA-3 difiere significativamente en su enfoque usando la función de permutación Keccak, procesando los datos en una matriz de estado de 1600 bits y permite salidas de hash de diferentes tamaños (como 224, 256, 384, 512 bits).&lt;/p&gt;

&lt;h3&gt;
  
  
  SHA-256
&lt;/h3&gt;

&lt;p&gt;SHA-256 procesa bloques de datos de 512 bits utilizando un ciclo de 64 pasos y produce un hash de 256 bits, es ampliamente utilizado en aplicaciones de blockchain y criptomonedas. &lt;/p&gt;

&lt;h3&gt;
  
  
  Blake2
&lt;/h3&gt;

&lt;p&gt;Es una versión mejorada del algoritmo Blake, procesa bloques de 512 o 1024 bits y es más rápido que MD5, SHA-1 y SHA-256 en software. Ofrece alta velocidad y seguridad, es utilizado en contextos donde se requieren ambas, como en bases de datos y autenticación de software.&lt;/p&gt;

&lt;h3&gt;
  
  
  Whirlpool
&lt;/h3&gt;

&lt;p&gt;Utiliza una matriz de estado de 512 bits y realiza un total de 10 rondas de transformaciones, el resultado es un hash de 512 bits. Es menos común que SHA o MD5, se aplica en seguridad para garantizar la integridad de los datos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estructura del número de tarjeta de crédito
&lt;/h2&gt;

&lt;p&gt;La estructura de un número de tarjeta de crédito está estandarizada, normalmente, un número de tarjeta de crédito consta de 16 dígitos, aunque algunos sistemas como American Express usan 15 dígitos. Estos dígitos están estructurados de la siguiente manera:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Número de Identificación del Emisor (IIN): Los primeros 6 dígitos del número de la tarjeta identifican a la institución financiera que emitió la tarjeta. Los primeros 2 dígitos indican el tipo de tarjeta, como Visa, MasterCard, American Express, etc. De los dígitos 3 a 6 se cuenta con la identificación específica del banco o institución financiera que emite la tarjeta (BIN).&lt;/li&gt;
&lt;li&gt;Número de cuenta del titular: Los dígitos siguientes hasta el penúltimo son el número de cuenta único del titular de la tarjeta, este número es asignado por la institución financiera.&lt;/li&gt;
&lt;li&gt;Dígito de verificación: El último dígito de la tarjeta es un dígito de verificación o dígito de control, calculado a través del algoritmo de Luhn, y permite validar la autenticidad del número de tarjeta de crédito.  El proceso involucra sumar y manipular los dígitos de ciertas maneras para producir un solo dígito que debe coincidir con este último número en la tarjeta.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bases de datos de números de identificación bancaria
&lt;/h3&gt;

&lt;p&gt;El número de identificación bancaria (BIN), es utilizado en el sistema de tarjetas (crédito/débito) para identificar la institución que emitió la tarjeta al titular y sus características. Existen bases de datos que se utilizan para identificar rápidamente la institución que emitió una tarjeta de crédito o débito a partir de la secuencia de dígitos 3 a 6. En la red podemos encontrar algunos sitios que permiten acceder a una lista de BIN, como se muestra en las siguientes imágenes.&lt;/p&gt;

&lt;p&gt;En bincheck.io se encuentran BIN de 90 bancos en Colombia (según el sitio):&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5iwbcl47eza9pj99htoe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5iwbcl47eza9pj99htoe.png" alt=" " width="800" height="762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En iinbinlist.com se presenta algo similar:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujh0ywb2jlhhs00nrmdl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujh0ywb2jlhhs00nrmdl.png" alt=" " width="800" height="853"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Igualmente en bankbinlist.com:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqtk46mst3peerarj83a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqtk46mst3peerarj83a.png" alt=" " width="800" height="841"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con las consultas de BIN mostradas anteriormente, se quiere evidenciar que estos son datos que pueden ser conocidos fácilmente por un atacante, sin embargo, también es necesario tener en cuenta que son una parte fundamental del ecosistema de pagos electrónicos, facilitando la comunicación y la seguridad entre las instituciones financieras, comerciantes y consumidores.&lt;/p&gt;
&lt;h2&gt;
  
  
  Respondiendo la pregunta
&lt;/h2&gt;

&lt;p&gt;Después de la teoría, vuelve la pregunta: ¿Es posible determinar el número de tarjeta a partir del hash?. Supongamos que un atacante ha obtenido los datos de la transacción y esta contiene el hash sha-256 del número de tarjeta. Sabemos ya, que el IIN (los primeros 6 dígitos) dependen de la franquicia, el banco y segmento de clientes, que pueden ser conocidos, ya sea a través de alguna base de datos o adquiriendo un producto de la entidad a atacar. También, el último digito (de verificación) pueden ser calculado utilizando el algoritmo de Luhn. Es decir que de los 16 dígitos, tiene que averiguar 9 dígitos para obtener el número correspondiente al hash de la tarjeta, el atacante no tiene otra pista, y procede a utilizar fuerza bruta.&lt;/p&gt;

&lt;p&gt;Para los 9 dígitos del número de cuenta (posiciones 7 a 15), hay 10&lt;sup&gt;9&lt;/sup&gt; combinaciones posibles (desde 000000000 hasta 999999999). Se procede a generar el siguiente código en python que generará los hash de los números de tarjeta de manera secuencial, tomando un IIN encontrado en las bases de datos (491511), esto a manera de ejemplo. Para ello se definen tres funciones, una que permite calcular el digito de verificación de acuerdo al algoritmo de luhn, otra que genera las combinaciones posibles a partir de un IIN fijo, y finalmente la que calcula el hash sha-256 de cada potencial número de tarjeta. En la función main se genera un archivo csv por cada 10 millones de hash generados (correspondientes al 1% del procesamiento).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import hashlib
import time
import csv

def calcular_digito_luhn(numero):
    digitos = [int(d) for d in str(numero)][::-1]
    suma_total = 0
    for i, digito in enumerate(digitos):
        if i % 2 == 1:
            digito *= 2
            if digito &amp;gt; 9:
                digito -= 9
        suma_total += digito
    return (10 - (suma_total % 10)) % 10

def generar_combinaciones(numero_fijo):
    numero_fijo = str(numero_fijo)
    # Rango de números para generar desde 0 hasta 999999999
    for num in range(1000000000):
        # Convertir el número a cadena y rellenar con ceros para tener siempre 9 dígitos
        numero_cliente = str(num).zfill(9)
        numero = numero_fijo + numero_cliente
        digito_luhn = calcular_digito_luhn(numero)
        numero_completo = numero + str(digito_luhn)
        yield numero_completo

def aplicar_sha256(numero):
    hash_obj = hashlib.sha256()
    hash_obj.update(numero.encode())
    return hash_obj.hexdigest()

def main():
    start_time = time.time()
    combinaciones = generar_combinaciones(491511)
    count = 0
    batch_num = 1

    # Crear el archivo CSV inicial
    while True:
        with open(f'hashes_batch_{batch_num}.csv', 'w', newline='') as file:
            writer = csv.writer(file)
            writer.writerow(['Número', 'Hash SHA-256'])
            for _ in range(10000000):
                try:
                    numero = next(combinaciones)
                except StopIteration:
                    break
                hash_result = aplicar_sha256(numero)
                writer.writerow([numero, hash_result])
                count += 1

            # Comprobación de finalización
            if count % 10000000 != 0 or count == 0:
                break

        print(f"Archivo {batch_num} completo con 10,000,000 hashes. Tiempo parcial: {time.time() - start_time:.2f} segundos")
        batch_num += 1

    end_time = time.time()
    print("Proceso completo.")
    print("Tiempo total de ejecución: {:.2f} segundos".format(end_time - start_time))

if __name__ == "__main__":
    main()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hay que mencionar que el código desarrollado es sólo una aproximación, dado que se puede hacer más eficiente aplicando procesamiento en paralelo, realizando operaciones de escritura en disco de manera menos frecuente, reduciendo la llamadas a funciones, entre otras estrategias. Adicionalmente, el código será ejecutado en un equipo de computo de uso común.&lt;/p&gt;

&lt;p&gt;A continuación se observa la captura de la ejecución realizada para los primeros 200 millones de combinaciones, suficiente para obtener los datos requeridos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0t31wpo0rcz772vxd0c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0t31wpo0rcz772vxd0c.png" alt=" " width="693" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A modo de ejemplo, se muestra el resultado parcial del último archivo generado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11frjx6tk6f2v75j5jz8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11frjx6tk6f2v75j5jz8.png" alt=" " width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente imagen, se observa el tiempo que toma generar cada archivo de 10 millones de hashes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp60cwmxtaap5nswle6fp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp60cwmxtaap5nswle6fp.png" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;De acuerdo a los datos mostrados, en promedio la generación de un archivo con 10 millones de números y su correspondiente hash toma 79.47 segundos. Tomando como base que cada archivo requiera de 80 segundos de procesamiento, en total se requieren alrededor de 2 horas 15 minutos para completar todo el procesamiento, lo cual desde el punto de vista de un atacante es asumible. Cada banco tiene varios IIN, el esfuerzo que implica calcular los hashes para cada uno de estos tampoco sería un limitante.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusiones
&lt;/h2&gt;

&lt;p&gt;Como se pudo observar, entregar el hash de un número de tarjeta no constituye una medida de seguridad, a pesar que la operación para su cálculo no es reversible, dado que no impide conocer el dato original cuando se tienen pistas sobre este. &lt;br&gt;
Se debe tener en cuenta, que de los pilares de la seguridad de la información, las operaciones hash están diseñadas para evaluar la integridad de los datos, no la confidencialidad. Aplicar los conocimientos y herramientas de manera adecuada, es el primer paso para una operación segura, no sólo en el mundo cibernético. &lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>ciberseguridad</category>
      <category>hash</category>
      <category>it</category>
    </item>
    <item>
      <title>Análisis dinámico de aplicaciones web con OWASP ZAP</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Mon, 25 Sep 2023 00:33:56 +0000</pubDate>
      <link>https://dev.to/djhuertasg/analisis-dinamico-de-aplicaciones-web-con-owasp-zap-2o1o</link>
      <guid>https://dev.to/djhuertasg/analisis-dinamico-de-aplicaciones-web-con-owasp-zap-2o1o</guid>
      <description>&lt;h1&gt;
  
  
  Introducción
&lt;/h1&gt;

&lt;p&gt;La seguridad en aplicaciones web se ha convertido en un aspecto crítico en la actualidad, ya que cada vez más empresas y organizaciones dependen de estas para proporcionar servicios e interactuar con sus usuarios. Sin embargo, la creciente complejidad de estas aplicaciones también ha abierto nuevas puertas a las amenazas cibernéticas. En este contexto, es fundamental llevar a cabo análisis de seguridad exhaustivos para identificar y mitigar posibles riesgos.&lt;/p&gt;

&lt;p&gt;En este post, se explora el análisis dinámico de aplicaciones web utilizando una herramienta de código abierto ampliamente reconocida: OWASP ZAP (Zed Attack Proxy). A modo de ejemplo se llevará a cabo el análisis de dos aplicaciones web intencionalmente vulnerables: Damn Vulnerable Web Application (DVWA) y OWASP Juice Shop.&lt;/p&gt;

&lt;p&gt;El análisis dinámico permitirá identificar posibles vulnerabilidades en estas aplicaciones, evaluar su resistencia a ataques comunes y proporcionar recomendaciones para mejorar su seguridad. Además, se destacan las capacidades de OWASP ZAP como una herramienta esencial para cualquier persona interesada en la seguridad de aplicaciones web.&lt;/p&gt;

&lt;p&gt;Se detallan los pasos clave para llevar a cabo un análisis dinámico de aplicaciones web con OWASP ZAP, desde la configuración inicial hasta la identificación de vulnerabilidades y la generación de informes detallados. También se analizan algunos de los resultados obtenidos en DVWA y OWASP Juice Shop para comprender mejor las amenazas a las que se enfrentan las aplicaciones web en la actualidad.&lt;/p&gt;

&lt;p&gt;El objetivo es promover la conciencia sobre la importancia de la seguridad de las aplicaciones web y proporcionar a los profesionales de la seguridad y desarrolladores de aplicaciones una visión general de cómo utilizar OWASP ZAP para proteger sus aplicaciones contra amenazas cibernéticas. La seguridad es un proceso continuo, y el análisis dinámico de aplicaciones web desempeña un papel crucial en la identificación y mitigación de riesgos.&lt;/p&gt;

&lt;p&gt;Finalmente, se debe recordar que este tipo de análisis solamente se realiza sobre aplicaciones e infraestructura propia o con la debida autorización de aquellos que sean responsables. Un escaneo de vulnerabilidades no autorizado constituye un delito informático, en Colombia particularmente puede acarrear penas de prisión y multas (Ley 1273 de 2009) [1].&lt;/p&gt;

&lt;h1&gt;
  
  
  Desarrollo
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Herramientas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Despliegue de DVWA
&lt;/h3&gt;

&lt;p&gt;Para desplegar DVWA sobre Kali Linux se sigue la guía disponible en GoLinuxCloud [2]. &lt;/p&gt;

&lt;p&gt;Se debe configurar DVWA con el usuario y contraseña que se creará en la base de datos MySQL.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehuwzlie7tj51ee7zc7g.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehuwzlie7tj51ee7zc7g.PNG" alt=" " width="800" height="802"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después de instalar MySQL, se debe crear el usuario en la base de datos con las mismas credenciales del punto anterior.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy0esq85f8nqtfmi23zk.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy0esq85f8nqtfmi23zk.PNG" alt=" " width="640" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se requiere instalar PHP, para este caso ya estaba instalada la versión 8.2, lo cual puede comprobarse con el comando &lt;code&gt;php -version&lt;/code&gt;. Después deben instalarse las librerías.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexqhy6hmynhk2g27ym8f.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexqhy6hmynhk2g27ym8f.PNG" alt=" " width="630" height="38"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, se debe configurar el servidor apache&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulua6z41i159c5umyy5f.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulua6z41i159c5umyy5f.PNG" alt=" " width="677" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se inicia el servicio de apache con el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service apache2 start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para acceder a DVWA debe dirigirse con el navegador web a la dirección &lt;code&gt;http://127.0.0.1/dvwa/&lt;/code&gt;. Una vez allí, debe dar click en    "Create/Reset Database" y utilizar las credencias admin@password para terminar la configuración.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4mahgbnce4f5rdtu3ug.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4mahgbnce4f5rdtu3ug.PNG" alt=" " width="800" height="731"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  OWASP ZAP
&lt;/h3&gt;

&lt;p&gt;OWASP ZAP es una herramienta de código abierto ampliamente reconocida y respaldada por la comunidad de seguridad. Actúa como un proxy entre el navegador web y la aplicación objetivo, lo que permite interceptar y manipular las solicitudes y respuestas HTTP/HTTPS, facilitando la identificación de vulnerabilidades y el análisis de tráfico. Puede realizar un escaneo automático de la aplicación web para descubrir vulnerabilidades comunes, como inyecciones SQL, cross-site scripting (XSS), cross-site request forgery (CSRF) y muchas otras, permitiendo el ahorro de tiempo y esfuerzo en comparación con las pruebas manuales.&lt;/p&gt;

&lt;p&gt;Esta herramienta permite configurar y controlar las exploraciones de manera efectiva, ver resultados y generar informes detallados. Es posible escribir scripts personalizados en varios lenguajes (como JavaScript, Python y Groovy) para automatizar tareas específicas de prueba y personalizar el análisis de seguridad. También permite el manejo de sesiones de usuario, lo que facilita la prueba de vulnerabilidades que pueden depender del estado de la sesión, como el acceso no autorizado. Genera informes detallados que documentan las vulnerabilidades encontradas, su impacto potencial y las recomendaciones para su corrección. Estos informes son valiosos para comunicar los riesgos a los equipos de desarrollo.&lt;/p&gt;

&lt;p&gt;Adicionalmente ZAP es altamente programable y se puede integrar en flujos de trabajo CI/CD (Integración Continua/Entrega Continua) para realizar pruebas de seguridad automáticamente en cada versión de una aplicación web.&lt;/p&gt;

&lt;p&gt;Para realizar su instalación en Kali Linux se sigue la guía disponible en &lt;code&gt;https://www.kali.org/tools/zaproxy/&lt;/code&gt;. Solamente debe ejecutarse el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install zaproxy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez instalado, se observa una interfaz similar a la mostrada en la imagen:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7goq1cf2skbgxijy1hb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7goq1cf2skbgxijy1hb.PNG" alt=" " width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Habilitar HTTPS en Apache
&lt;/h3&gt;

&lt;p&gt;Para generar e instalar el certificado SSL se puede seguir la guía disponible en DigitalOcean [3]. Se configura la información del certificado dependiendo del caso:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bx4yxh0wm7t6hacckel.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bx4yxh0wm7t6hacckel.PNG" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez instalado el certificado, se puede acceder al sitio a través de https. Tenga en cuenta que no se ha configurado para que el sitio web obligue a que el tráfico http vaya a través de https, por lo cual ambos protocolos siguen disponibles.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl361u16ld4p242a6lyvr.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl361u16ld4p242a6lyvr.PNG" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ejecución de los análisis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Análisis sobre DVWA
&lt;/h3&gt;

&lt;p&gt;DVWA permite practicar sobre algunas de las vulnerabilidades web más comunes, y configurar el nivel de seguridad general que presentarán cada uno de los retos. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyua2yn5cqhmk47h8dn3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyua2yn5cqhmk47h8dn3.PNG" alt=" " width="686" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se realizaron varias pruebas, cambiando el modo de ZAP entre estándar y ataque, el nivel se seguridad en DVWA y el protocolo de comunicación (http/https). A continuación se resume la cantidad de vulnerabilidades encontradas para cada caso.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Análisis&lt;/th&gt;
&lt;th&gt;Seguridad&lt;/th&gt;
&lt;th&gt;Protocolo&lt;/th&gt;
&lt;th&gt;Alto&lt;/th&gt;
&lt;th&gt;Medio&lt;/th&gt;
&lt;th&gt;Bajo&lt;/th&gt;
&lt;th&gt;Informacional&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;estándar&lt;/td&gt;
&lt;td&gt;baja&lt;/td&gt;
&lt;td&gt;http&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ataque&lt;/td&gt;
&lt;td&gt;baja&lt;/td&gt;
&lt;td&gt;http&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;estándar&lt;/td&gt;
&lt;td&gt;imposible&lt;/td&gt;
&lt;td&gt;http&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ataque&lt;/td&gt;
&lt;td&gt;imposible&lt;/td&gt;
&lt;td&gt;http&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;estándar&lt;/td&gt;
&lt;td&gt;imposible&lt;/td&gt;
&lt;td&gt;https&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ataque&lt;/td&gt;
&lt;td&gt;imposible&lt;/td&gt;
&lt;td&gt;https&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Se observa que no hay diferencia al realizar el análisis con OWASP ZAP cambiando el nivel de seguridad de DVWA. El modo ataque identifica una vulnerabilidad de nivel medio adicional al modo estándar, la cual es Directory Browsing  &lt;code&gt;https://www.zaproxy.org/docs/alerts/0/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;La otra vulnerabilidad de tipo medio con la confianza más alta (18.8%) fue Content Security Policy (CSP) Header Not Set &lt;code&gt;https://www.zaproxy.org/docs/alerts/10038/&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Utilizando el protocolo https se identifican dos alertas adicionales de tipo bajo: Cookie Without Secure Flag &lt;code&gt;https://www.zaproxy.org/docs/alerts/10011/&lt;/code&gt; y Strict-Transport-Security Header &lt;code&gt;https://www.zaproxy.org/docs/alerts/10035/&lt;/code&gt;. También se identifico una alerta adicional de tipo informacional: Re-examine Cache-control Directives &lt;code&gt;https://www.zaproxy.org/docs/alerts/10015/&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Análisis sobre OWASP Juice Shop
&lt;/h3&gt;

&lt;p&gt;En un servidor en una red local controlada se realizó la instalación de OWASP Juice Shop &lt;code&gt;https://owasp.org/www-project-juice-shop/&lt;/code&gt;. Posteriormente se realizó el análisis con ZAP obteniendo el siguiente resultado: &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Análisis&lt;/th&gt;
&lt;th&gt;Alto&lt;/th&gt;
&lt;th&gt;Medio&lt;/th&gt;
&lt;th&gt;Bajo&lt;/th&gt;
&lt;th&gt;Informacional&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;estándar&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ataque&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Se identifican las vulnerabilidades de nivel alto Cloud Metadata Potentially Exposed &lt;code&gt;https://www.zaproxy.org/docs/alerts/90034/&lt;/code&gt; y SQL Injection &lt;code&gt;https://www.zaproxy.org/docs/alerts/40018/&lt;/code&gt;. La vulnerabilidad media con la confianza más alta fue Session ID in URL Rewrite&lt;br&gt;
&lt;code&gt;https://www.zaproxy.org/docs/alerts/3/&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explicación sobre algunas de las vulnerabilidades encontradas
&lt;/h2&gt;

&lt;p&gt;A continuación se explican algunas de las vulnerabilidades encontradas a partir de los análisis realizados con OWASP ZAP. Igualmente puede consultar el OWASP TOP 10 &lt;code&gt;https://owasp.org/www-project-top-ten/&lt;/code&gt;, dónde se explican las 10 vulnerabilidades más comunes en aplicaciones web.&lt;/p&gt;

&lt;p&gt;Directory Browsing (Exploración de Directorios) ocurre cuando un atacante puede navegar a través de los directorios en un servidor web para acceder a archivos y directorios que no deberían ser públicos. Esto puede exponer datos confidenciales y facilitar ataques adicionales, por ello se debe configurar adecuadamente el servidor web para deshabilitar la exploración de directorios y asegurarse de que los directorios y archivos sensibles no sean accesibles públicamente.&lt;/p&gt;

&lt;p&gt;Content Security Policy Header (Encabezado de Política de Seguridad de Contenido) es un mecanismo de seguridad que ayuda a prevenir ataques de scripts entre sitios (XSS) y otras amenazas relacionadas con la ejecución de código en el navegador. Sin CSP, un atacante podría ejecutar scripts maliciosos en el navegador de un usuario, lo que podría llevar al robo de información confidencial o la toma de control de cuentas.&lt;/p&gt;

&lt;p&gt;La alerta Cookie Without Secure Flag (Cookie sin la Bandera Secure) indica que las cookies son vulnerables cuando no se establece la bandera "Secure". Esto significa que pueden enviarse a través de conexiones no seguras (HTTP) en lugar de conexiones seguras (HTTPS), lo que las hace vulnerables a ataques de interceptación. Un atacante que intercepta una cookie no segura podría robar sesiones de usuario, lo que permitiría la toma de control de cuentas.&lt;/p&gt;

&lt;p&gt;Strict-Transport-Security Header (Encabezado de Seguridad de Transporte Estricto) garantiza que una aplicación web solo se cargue a través de conexiones seguras HTTPS, lo que evita que los usuarios accedan a la aplicación a través de HTTP no seguro. Los atacantes podrían forzar a los usuarios a utilizar conexiones HTTP e interceptar los mensajes.&lt;/p&gt;

&lt;p&gt;Re-examine Cache-control Directives (Reexaminar Directivas Cache-control) es una vulnerabilidad que se refiere a la incorrecta configuración de las directivas de control de caché en las respuestas del servidor. Esto puede permitir a un atacante acceder a información obsoleta o confidencial en el caché del navegador, lo que podría llevar a la exposición de información confidencial.&lt;/p&gt;

&lt;p&gt;Cloud Metadata Potentially Exposed (Posible Exposición de Metadatos en la Nube) es una vulnerabilidad que ocurre cuando una aplicación en la nube expone accidentalmente información de metadatos de la instancia, lo que podría incluir claves de acceso u otra información confidencial, lo que podría llevar a un compromiso de la infraestructura en la nube.&lt;/p&gt;

&lt;p&gt;SQL Injection (Inyección SQL) es una vulnerabilidad en la que los atacantes insertan comandos SQL maliciosos en las entradas de una aplicación para manipular la base de datos subyacente. Esto puede permitir la extracción, modificación o eliminación de datos de la base de datos, lo cual puede llevar a la exposición de datos confidenciales, la corrupción de datos y la toma de control del sistema de base de datos. Para prevenir la inyección SQL, se deben utilizar consultas parametrizadas o funciones de escape de entrada de datos y se debe validar y sanitizar las entradas del usuario.&lt;/p&gt;

&lt;p&gt;La alerta Session ID in URL Rewrite (Reescritura del ID de Sesión en la URL) indica que al colocar identificadores de sesión en la URL, un atacante podría obtener acceso no autorizado si intercepta la URL o si se produce un reenvío, haciendo posible robar sesiones de usuario y tomar el control de cuentas. Por lo cual se debe almacenar los identificadores de sesión de forma segura en cookies en lugar de incluirlos en la URL, lo cual ayuda a prevenir este tipo de ataque.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusiones
&lt;/h1&gt;

&lt;p&gt;En este post se explora el análisis dinámico de aplicaciones web mediante ejemplos prácticos con Damn Vulnerable Web Application (DVWA) y OWASP Juice Shop, se muestra como OWASP ZAP puede identificar vulnerabilidades, evaluar la resistencia a ataques comunes y proporcionar recomendaciones para mejorar la seguridad de las aplicaciones web.&lt;/p&gt;

&lt;p&gt;En los análisis realizados en DVWA, se observó que cambiar el nivel de seguridad de la aplicación no tuvo un impacto significativo en la detección de vulnerabilidades por parte de OWASP ZAP. Sin embargo, el modo de ataque identificó una vulnerabilidad adicional en comparación con el modo estándar.&lt;/p&gt;

&lt;p&gt;En OWASP Juice Shop, se identificaron vulnerabilidades de nivel alto, medio y bajo. Estas vulnerabilidades incluyeron Cloud Metadata Potentially Exposed, SQL Injection y Session ID in URL Rewrite. Estos resultados resaltan la importancia de evaluar y corregir activamente las vulnerabilidades en las aplicaciones web.&lt;/p&gt;

&lt;p&gt;Las vulnerabilidades identificadas, como Directory Browsing, Content Security Policy Header Not Set y Cookie Without Secure Flag, son ejemplos de riesgos comunes en aplicaciones web que pueden poner en peligro la seguridad de los datos y la privacidad de los usuarios.&lt;/p&gt;

&lt;p&gt;La seguridad de las aplicaciones web es un proceso continuo y dinámico. Además de utilizar herramientas como OWASP ZAP, es esencial seguir las mejores prácticas de seguridad, mantenerse actualizado sobre las amenazas cibernéticas y garantizar que las aplicaciones estén protegidas adecuadamente.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referencias
&lt;/h1&gt;

&lt;p&gt;[1] Avance Jurídico Casa Editorial Ltda., “Leyes desde 1992 - Vigencia expresa y control de constitucionalidad [LEY_1273_2009],” Avance Jurídico Casa Editorial Ltda., Senado De La República De Colombia. &lt;a href="http://secretariasenado.gov.co/senado/basedoc/ley_1273_2009.html" rel="noopener noreferrer"&gt;http://secretariasenado.gov.co/senado/basedoc/ley_1273_2009.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] T. Gidraph, “Install DVWA on Kali Linux (Step-by-Step) | GoLinuxCloud,” GoLinuxCloud, Oct. 2021, [En línea]. Disponible: &lt;a href="https://www.golinuxcloud.com/install-dvwa-kali-linux/" rel="noopener noreferrer"&gt;https://www.golinuxcloud.com/install-dvwa-kali-linux/&lt;/a&gt;&lt;br&gt;
‌&lt;br&gt;
[3] A. Wan, “How To Create a SSL Certificate on Apache for Debian 8,” DigitalOcean, Jun. 2015, [En línea]. Disponible: &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-debian-8" rel="noopener noreferrer"&gt;https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-debian-8&lt;/a&gt;&lt;br&gt;
‌&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>vulnerabilities</category>
      <category>spanish</category>
      <category>testing</category>
    </item>
    <item>
      <title>Identificando vulnerabilidades en código fuente a través de análisis estático con SonarQube</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Wed, 13 Sep 2023 21:33:19 +0000</pubDate>
      <link>https://dev.to/djhuertasg/identificando-vulnerabilidades-en-codigo-fuente-a-traves-de-analisis-estatico-con-sonarqube-17mo</link>
      <guid>https://dev.to/djhuertasg/identificando-vulnerabilidades-en-codigo-fuente-a-traves-de-analisis-estatico-con-sonarqube-17mo</guid>
      <description>&lt;h1&gt;
  
  
  Introducción
&lt;/h1&gt;

&lt;p&gt;La seguridad de las aplicaciones es una preocupación creciente en la era digital, ya que el uso de estas tecnologías es cada vez mayor, y por lo tanto también incrementan los riesgos asociados con la presencia de vulnerabilidades en el código fuente. Tales vulnerabilidades pueden convertirse en puertas de entrada para ciberataques y amenazar la integridad, confidencialidad y disponibilidad de datos críticos.&lt;/p&gt;

&lt;p&gt;En este contexto, la identificación temprana de vulnerabilidades en el código fuente se ha convertido en una práctica esencial para garantizar la seguridad de las aplicaciones y sistemas. Una de las herramientas utilizadas para esa tarea es SonarQube, una plataforma de análisis estático de código que permite a los desarrolladores y equipos de seguridad, examinar de manera exhaustiva el código fuente en busca de debilidades.&lt;/p&gt;

&lt;p&gt;Este post tiene como objetivo mostrar la utilidad de SonarQube en la identificación y corrección de vulnerabilidades, se hace un recorrido por su instalación, uso y algunas características clave (métricas).  A modo de ejemplo se realiza el proceso de remediación de vulnerabilidades en dos proyectos desarrollados en distintos lenguajes, haciendo uso de &lt;em&gt;key vault&lt;/em&gt; para introducir la idea de administración segura de claves y secretos.&lt;/p&gt;

&lt;h1&gt;
  
  
  Desarrollo
&lt;/h1&gt;

&lt;p&gt;El laboratorio se desarrolla en tres partes: primero se realiza la revisión de conceptos previos, después se instalan las herramientas requeridas, por último se lleva a cabo la identificación de vulnerabilidades con SonarQube.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conceptos previos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Métricas en SonarQube
&lt;/h3&gt;

&lt;p&gt;SonarQube es una plataforma ampliamente utilizada para evaluar y mejorar la calidad del código fuente en proyectos de desarrollo de software. Proporciona una serie de métricas que ayudan a identificar problemas en el código y tomar medidas para remediarlos, en la guía de usuario se explican en detalle [1]. A continuación se resumen algunas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Detección de errores (Reliability): SonarQube detecta errores potenciales en el código, como el acceso a variables no inicializadas o la división por cero. El objetivo es eliminar defectos antes de que causen problemas en tiempo de ejecución.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reglas de calidad del código (Maintainability): SonarQube incluye una serie de reglas predefinidas que evalúan el cumplimiento de buenas prácticas de codificación, como el uso de nombres descriptivos de variables o la gestión adecuada de excepciones. El objetivo es mejorar la legibilidad y la mantenibilidad del código.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Seguridad (Security): Identifica problemas de seguridad en el código, ya sean vulnerabilidades conocidas o malas prácticas que podrían exponer el sistema a ataques. El objetivo es fortalecer la seguridad del software.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Revisión de seguridad (Security Review): Identifica potenciales problemas de seguridad en el código (hotspots), que podrían facilitar la ejecución de ataques. El objetivo es fortalecer la seguridad del software.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cobertura de código (Coverage): Esta métrica mide la proporción del código fuente que ha sido ejecutada por pruebas automatizadas. El objetivo es garantizar que la mayoría del código esté cubierto por pruebas para reducir la probabilidad de errores no detectados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Duplicación de código (Duplications): Mide la cantidad de código duplicado en el proyecto. El objetivo es reducir la duplicación, ya que aumenta la complejidad y el mantenimiento del código.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Este laboratorio se enfoca en los puntos 3 y 4, relacionados directamente con la seguridad. El punto 5 (Coverage) requiere de configuración adicional dependiendo del lenguaje de desarrollo, lo cual puede ser consultado en la documentación oficial disponible en &lt;code&gt;https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/test-coverage/overview/&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lenguajes disponibles en la versión comunitaria de SonarQube
&lt;/h3&gt;

&lt;p&gt;De acuerdo a la documentación oficial de SonarQube [2], la versión comunitaria permite realizar escaneo en 21 lenguajes distintos, los cuales se listan en la siguiente tabla:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lenguajes&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Azure Resource Manager&lt;/td&gt;
&lt;td&gt;HTML&lt;/td&gt;
&lt;td&gt;Ruby&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CloudFormation&lt;/td&gt;
&lt;td&gt;Java&lt;/td&gt;
&lt;td&gt;Scala&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C#&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;Secrets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSS&lt;/td&gt;
&lt;td&gt;Kotlin&lt;/td&gt;
&lt;td&gt;Terraform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;Kubernetes&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flex&lt;/td&gt;
&lt;td&gt;PHP&lt;/td&gt;
&lt;td&gt;VB.NET&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;XML&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Key vault
&lt;/h3&gt;

&lt;p&gt;Un Key Vault (bóveda de claves) es un servicio de administración de claves y secretos que se utiliza para proteger información confidencial, tales como: contraseñas, certificados, claves de cifrado y otros datos sensibles. De acuerdo a la documentación de Azure Key Vault [3], entre sus características encontramos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Almacenamiento Seguro: Los Key Vaults están diseñados para proporcionar un entorno altamente seguro para almacenar y gestionar secretos y claves criptográficas. Utilizan técnicas de cifrado avanzadas y protocolos de seguridad para proteger los datos almacenados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gestión Centralizada: Un Key Vault permite centralizar la gestión de claves y secretos en un solo lugar. Esto simplifica la administración y reduce los riesgos asociados con la dispersión de información confidencial en múltiples ubicaciones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auditoría y Registro: Proporciona registros de auditoría detallados para rastrear quién accede a los secretos y claves, cuándo lo hacen y qué acciones realizan. Esto es esencial para cumplir con los requisitos de conformidad y detectar actividades sospechosas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integración con Aplicaciones: Los Key Vaults se pueden integrar fácilmente con aplicaciones y servicios en la nube, permitiendo que estos accedan a secretos y claves de manera segura. Esto evita la necesidad de almacenar información sensible en el código fuente de la aplicación.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rotación Automatizada: Un Key Vault facilita la rotación automática de claves y secretos, lo que mejora la seguridad al garantizar que las claves no estén en uso durante períodos prolongados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Control de Acceso Granular: Los administradores pueden definir políticas de control de acceso detalladas para especificar quién tiene permiso para acceder a qué secretos y claves, y bajo qué circunstancias.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integración con Herramientas de DevOps: Los Key Vaults se pueden integrar con herramientas de desarrollo y operaciones (DevOps) para automatizar la gestión de secretos y claves en el ciclo de vida de las aplicaciones.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En términos de seguridad un Key Vault es esencial para mejorar la seguridad en la nube y proteger información confidencial de la siguiente manera:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Protección contra Amenazas Internas y Externas: Al centralizar la gestión de claves y secretos, un Key Vault ayuda a proteger los datos confidenciales contra amenazas tanto internas como externas. Esto incluye el acceso no autorizado y el robo de datos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conformidad Regulatoria: Los Key Vaults permiten cumplir con regulaciones de seguridad y privacidad al proporcionar un control riguroso sobre el acceso y la auditoría de los secretos y claves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reducción de Riesgos: La rotación automática de claves y secretos reduce el riesgo de que las claves sean comprometidas debido a la exposición prolongada.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simplificación de la Gestión de Claves: Facilita la gestión de claves y secretos en entornos complejos de nube y reduce la carga operativa.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integración Segura: Permite a las aplicaciones acceder a secretos y claves de manera segura sin almacenar información sensible en el código fuente.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Instalación de herramientas
&lt;/h2&gt;

&lt;p&gt;Para disponer de SonarQube, se ofrecen dos opciones en la web oficial: descargar un archivo zip ó ejecutarlo utilizando Docker. Para este laboratorio se llevó a cabo la instalación utilizando la segunda opción. En caso de no contar con Docker, puede instalarse siguiendo la guía disponible en &lt;code&gt;https://docs.docker.com/desktop/install/windows-install/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Desde la consola de Powershell puede instalar y ejecutar SonarQube utilizando el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si todo ha funcionado correctamente, desde Docker Desktop podrá observar el contenedor de SonarQube corriendo de manera similar a la mostrada en la siguiente imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9vz8zusjyunldty66r0.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9vz8zusjyunldty66r0.PNG" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Utilizando el navegador web, debe dirigirse a la URL &lt;code&gt;http://localhost:9000&lt;/code&gt;. Si es la primera vez que utiliza SonarQube le aparecerá una pantalla de login, las credenciales son admin/admin, se le solicitará asignar una nueva contraseña. Una vez ingrese verá una pantalla como la que se muestra a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxku2vr9cy0n83pnrefd2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxku2vr9cy0n83pnrefd2.PNG" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Identificando vulnerabilidades con SonarQube
&lt;/h2&gt;

&lt;p&gt;Se realizará el análisis de 2 proyectos con las siguientes características:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Proyecto&lt;/th&gt;
&lt;th&gt;Lenguajes&lt;/th&gt;
&lt;th&gt;Tipo&lt;/th&gt;
&lt;th&gt;Repositorio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Damn Vulnerable Web Application&lt;/td&gt;
&lt;td&gt;PHP/MySQL&lt;/td&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/digininja/DVWA" rel="noopener noreferrer"&gt;https://github.com/digininja/DVWA&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ParticipAR&lt;/td&gt;
&lt;td&gt;Kotlin&lt;/td&gt;
&lt;td&gt;Móvil&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/djhuertasg/ParticipAR" rel="noopener noreferrer"&gt;https://github.com/djhuertasg/ParticipAR&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  DVWA
&lt;/h3&gt;

&lt;p&gt;DVWA es una aplicación web intencionalmente vulnerable. Se realiza la descarga del código en zip, y se procede a crear el proyecto en SonarQube.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtln98jnr4re218saxeo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtln98jnr4re218saxeo.PNG" alt=" " width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como método de análisis se selecciona la opción local, para lo cual se debe generar un token como se muestra a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsroum7c25o46t94knjx.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsroum7c25o46t94knjx.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Posteriormente se selecciona entre las herramientas de construcción automatizada de código u otro y el sistema operativo desde el cual se esta ejecutando el análisis. Adicionalmente, antes de ejecutar el escaneo, se debe descargar el escáner y añadirlo al path, cómo se muestra en las imágenes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4mvinxet63hx2rzcqf0.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4mvinxet63hx2rzcqf0.PNG" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlzrvigppaajp55unkoj.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlzrvigppaajp55unkoj.PNG" alt=" " width="702" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez se tenga todo configurado, se procede a lanzar la ejecución del análisis desde Powershell, ubicado en la carpeta del proyecto a analizar con la siguiente línea de código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sonar-scanner.bat -D"sonar.projectKey=DVWA" -D"sonar.sources=." -D"sonar.host.url=http://localhost:9000" -D"sonar.token=sqp_6479b25b30a19dff8cd009d3d4bcc9f478b799f3"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tenga en cuenta que en una implementación en un ambiente real, el token debe mantenerse secreto, a fin de evitar el uso no autorizado de recursos.&lt;/p&gt;

&lt;p&gt;Una vez ejecutado el análisis se obtiene el resultado mostrado a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcwy6hxasp6ob1ruenm3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcwy6hxasp6ob1ruenm3.PNG" alt=" " width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el detalle de las vulnerabilidades de seguridad, se encuentran las siguientes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvo5cqkcu9k9auhvd73b.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvo5cqkcu9k9auhvd73b.PNG" alt=" " width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ambas vulnerabilidades están asociadas a 'código quemado', es decir, credenciales que se dejaron en el código (en este caso de base de datos), lo cual va en contra de los lineamientos de desarrollo seguro. Para cada una de las vulnerabilidades SonarQube detalla cuál es el problema (indicando el archivo y línea de código correspondiente), por qué es un problema y cómo se puede solucionar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbsqyf10tjq7e3fy38q7.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbsqyf10tjq7e3fy38q7.PNG" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvdtzfj01dmqgtq8hfrq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvdtzfj01dmqgtq8hfrq.PNG" alt=" " width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A continuación se muestra el código vulnerable en el archivo compose.yml&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbi0619x1sjeg1tmpw8jj.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbi0619x1sjeg1tmpw8jj.PNG" alt=" " width="695" height="956"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una opción para resolver esta vulnerabilidad es utilizar un &lt;em&gt;key vault&lt;/em&gt;, suponiendo que contamos con uno, se ajusta el código como se muestra en la imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwtt14ju8wp274yfdbh1.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwtt14ju8wp274yfdbh1.PNG" alt=" " width="608" height="837"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A continuación se muestra el código vulnerable en el archivo test.php&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0erqjdlzuvjgbnztwy9.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0erqjdlzuvjgbnztwy9.PNG" alt=" " width="760" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suponiendo el uso de un &lt;em&gt;key vault&lt;/em&gt;, se ajusta el código como se muestra a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ov8hockj6pyfmrw3xlb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ov8hockj6pyfmrw3xlb.PNG" alt=" " width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Realizados los ajustes, se procede a ejecutar nuevamente el análisis en SonarQube, obteniendo cero vulnerabilidades.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6c4xj30kbvwnj6cf523.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6c4xj30kbvwnj6cf523.PNG" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ParticipAR
&lt;/h3&gt;

&lt;p&gt;ParticipAR es una aplicación móvil desarrollada en Kotlin para la plataforma android.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcmifamfu1259eop5772.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcmifamfu1259eop5772.PNG" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se procede a crear el proyecto en SonarQube.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljjtwyte6ar6ai9te423.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljjtwyte6ar6ai9te423.PNG" alt=" " width="650" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;De manera similar se procede a ejecutar el análisis:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdxmnj8ge55b7l4s96vq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdxmnj8ge55b7l4s96vq.PNG" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se observa que SonarQube no identifica vulnerabilidades, pero si hotspots.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbltqgw6gcf1rpiktpwg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbltqgw6gcf1rpiktpwg.PNG" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se identifica que no se obliga a ejecutar conexiones seguras, lo cual en versiones menores a Android 9 podría llevar el uso de protocolos no cifrados. También se muestran alertas referentes a permisos para realizar backup, utilizar la cámara y acceder a la ubicación del dispositivo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ozknri2sm483z4q0nua.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ozknri2sm483z4q0nua.PNG" alt=" " width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se modifica el archivo AndroidManifest.xml para deshabilitar el uso de protocolos inseguros y backup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvqvfrvuhq52pfzb7mci.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvqvfrvuhq52pfzb7mci.PNG" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dado que la aplicación requiere los permisos de cámara y ubicación, se procede a declararlos seguros, como se observa en la imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhjpdkp1clzd7q70yno7.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhjpdkp1clzd7q70yno7.PNG" alt=" " width="477" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez realizados esos ajustes, se procede a ejecutar el análisis nuevamente, obteniendo cero hotspots.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs3ad14hq8tbyvi442zl.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs3ad14hq8tbyvi442zl.PNG" alt=" " width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusiones
&lt;/h1&gt;

&lt;p&gt;La identificación temprana de vulnerabilidades en el código fuente es esencial para garantizar la seguridad de las aplicaciones y sistemas, SonarQube es una herramienta versátil para automatizar esa tarea, proporcionando métricas, identificando el código a corregir y sugiriendo las remediaciones a realizar.&lt;/p&gt;

&lt;p&gt;El uso de un Key Vault es fundamental para la gestión segura de claves y secretos, lo que contribuye a proteger información confidencial y reducir los riesgos asociados con la exposición de datos sensibles.&lt;/p&gt;

&lt;p&gt;Se debe integrar la seguridad en el ciclo de desarrollo de software, a través de prácticas de operaciones de desarrollo seguras (DevSecOps).&lt;/p&gt;

&lt;h1&gt;
  
  
  Referencias
&lt;/h1&gt;

&lt;p&gt;[1] “An overview of the key concepts used within SonarQube.” SonarQube 10.2. Accedido el 13 de septiembre de 2023. [En línea]. Disponible: &lt;a href="https://docs.sonarsource.com/sonarqube/latest/user-guide/concepts/" rel="noopener noreferrer"&gt;https://docs.sonarsource.com/sonarqube/latest/user-guide/concepts/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] “Languages overview”. SonarQube 10.2. Accedido el 13 de septiembre de 2023. [En línea]. Disponible: &lt;a href="https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/languages/overview/" rel="noopener noreferrer"&gt;https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/languages/overview/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] “Azure Key Vault documentation”. Microsoft Learn: Build skills that open doors in your career. Accedido el 13 de septiembre de 2023. [En línea]. Disponible: &lt;a href="https://docs.microsoft.com/en-us/azure/key-vault/" rel="noopener noreferrer"&gt;https://docs.microsoft.com/en-us/azure/key-vault/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>vulnerabilities</category>
      <category>beginners</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Parte 2 - Descubrimiento de vulnerabilidades en redes IP</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Sat, 09 Sep 2023 04:17:48 +0000</pubDate>
      <link>https://dev.to/djhuertasg/parte-2-descubrimiento-de-vulnerabilidades-en-redes-ip-16mc</link>
      <guid>https://dev.to/djhuertasg/parte-2-descubrimiento-de-vulnerabilidades-en-redes-ip-16mc</guid>
      <description>&lt;h1&gt;
  
  
  Introducción
&lt;/h1&gt;

&lt;p&gt;La seguridad de la información se ha convertido en un aspecto crítico para empresas, organizaciones y particulares. Las redes IP (Protocolo de Internet) habilitan la comunicación entre dispositivos y por ello son un objetivo atractivo para posibles ataques cibernéticos, por lo tanto la identificación y mitigación de vulnerabilidades en estas redes se ha vuelto esencial para proteger la integridad, confidencialidad y disponibilidad de los sistemas y datos.&lt;/p&gt;

&lt;p&gt;En este contexto, herramientas de evaluación de vulnerabilidades como Nessus Essentials y OpenVAS han emergido como aliados poderosos en la identificación de estas, las cuales permiten a los profesionales de seguridad y administradores de sistemas escanear, detectar y analizar posibles debilidades en redes IP, sistemas operativos y aplicaciones. Al identificar estas vulnerabilidades antes de que los atacantes puedan explotarlas, las organizaciones pueden tomar medidas preventivas para fortalecer su postura de seguridad.&lt;/p&gt;

&lt;p&gt;Este post se centra en la utilización de Nessus Essentials y OpenVAS como soluciones de código abierto para el descubrimiento de vulnerabilidades en redes IP. Se exploran sus características, capacidades y metodologías para llevar a cabo análisis de seguridad en redes, y como pueden contribuir a una estrategia efectiva de gestión de vulnerabilidades. Para ello se utilizarán 2 redes: La primera será la red desplegada en la parte 1 (Configurando una red básica para aprender sobre gestión de vulnerabilidades) [1] agregando una máquina adicional con Metasploitable. La segunda es una red con dispositivos reales conectados a un punto de acceso preparado para tal fin. Con ello se busca una comprensión más profunda de la importancia del descubrimiento de vulnerabilidades en redes IP, así como las herramientas y técnicas disponibles para llevar a cabo este proceso.&lt;/p&gt;

&lt;p&gt;Por último, se debe resaltar que el post pretende enseñar sobre estas herramientas para su uso adecuado, se aclara que realizar un escaneo de vulnerabilidades no autorizado en una red constituye un delito informático. En Colombia, de enero a octubre de 2022, se presentaron 54.121 denuncias por delitos informáticos [2]. Esto puede acarrear penas de prisión y multas (Ley 1273 de 2009) [3].&lt;/p&gt;

&lt;h1&gt;
  
  
  Desarrollo
&lt;/h1&gt;

&lt;p&gt;Para este ejercicio se mencionan las direcciones IP utilizadas a modo de contexto, estas pueden cambiar dependiendo de la configuración del escenario de prueba particular, para conocerlas se debe utilizar el comando &lt;code&gt;ipconfig&lt;/code&gt; en Windows ó el comando &lt;code&gt;ifconfig&lt;/code&gt; en Linux.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalación de herramientas
&lt;/h2&gt;

&lt;p&gt;Metasploitable es una máquina virtual configurada para contener múltiples vulnerabilidades de seguridad conocidas, se utiliza en laboratorios de análisis de vulnerabilidades y pruebas de penetración para propósitos educativos y de investigación. Además es útil para aprender como explotar y remediar vulnerabilidades en un entorno controlado y ético, lo que ayuda a mejorar las habilidades en la identificación y mitigación de amenazas de seguridad. Para instalar Metasploitable puede seguir la guía disponible en GeeksforGeeks [4]. &lt;/p&gt;

&lt;p&gt;Nessus Essentials es una herramienta gratuita que se utiliza para identificar y evaluar vulnerabilidades en sistemas informáticos y redes. Aunque es limitada (permite escanear hasta 16 IP) en comparación con las versiones de pago de Nessus, Nessus Essentials ofrece capacidades esenciales para ayudar a las organizaciones a mejorar la seguridad de sus activos digitales al escanear en busca de posibles debilidades y proporcionar informes de vulnerabilidades. Para su instalación, se descarga de la página oficial de Tenable [5]. Una vez instalado se puede acceder desde la misma máquina (en este caso kali linux) utilizando el navegador y dirigiéndose a &lt;code&gt;https://kali:8834/&lt;/code&gt;, o desde otra máquina con la IP y puerto 8834. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe83o60a0yuilq1jjkk0t.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe83o60a0yuilq1jjkk0t.PNG" alt=" " width="654" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OpenVAS (Sistema Abierto de Análisis de Vulnerabilidades) es otra herramienta de escaneo de vulnerabilidades de código abierto que se utiliza para identificar debilidades en sistemas informáticos y redes. Permite a las organizaciones realizar escaneos de seguridad en busca de posibles amenazas y vulnerabilidades, lo que ayuda a mejorar la seguridad de los activos digitales. OpenVAS es altamente configurable y puede adaptarse a las necesidades específicas de seguridad de una organización. Para instalarlo, se descarga la ova de VirtualBox (también esta la opción de VMWare) y se sigue la guía de instalación, ambas están disponibles en la web oficial [6]. Una vez se instala OpenVAS, se puede acceder utilizando el navegador, la dirección web dependerá de la red, en este caso para la red virtual ir a &lt;code&gt;https://10.0.2.5&lt;/code&gt;, y para la red con dispositivos reales ir a &lt;code&gt;https://192.168.40.243&lt;/code&gt;. Como recomendación, solamente se debe habilitar en la configuración de la máquina virtual el adaptador de red que se necesite dependiendo del escenario.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzzc240673y1idmvkzlkw.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzzc240673y1idmvkzlkw.PNG" alt=" " width="800" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28pco0zgh63qane1qme1.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28pco0zgh63qane1qme1.PNG" alt=" " width="800" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Habilitar las máquinas virtuales para acceder a la red del host (para la prueba en la red con dispositivos reales)
&lt;/h2&gt;

&lt;p&gt;En VMWare se debe configurar un segundo adaptador de red (en la parte 1 se configuró un primer adaptador en red NAT) para cada máquina virtual de tipo Bridged Adapter como se observa a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9qqpac7w5hu3ckkxl8gi.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9qqpac7w5hu3ckkxl8gi.PNG" alt=" " width="701" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adicionalmente, se debe habilitar en el firewall de la máquina host la comunicación entre la IP del host y la red configurada para la prueba, de manera similar a como se observa en la imagen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzishj9y2k3rnlmnqk6j2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzishj9y2k3rnlmnqk6j2.PNG" alt=" " width="542" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Identificación de vulnerabilidades en la red de máquinas virtuales con Nessus Essentials y OpenVAS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Descubrimiento de host (Host Discovery)
&lt;/h3&gt;

&lt;p&gt;Se configura el descubrimiento de host en Nessus Essentials con las IP de las máquinas virtuales.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglmekho3sevfwc5j86nd.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fglmekho3sevfwc5j86nd.PNG" alt=" " width="800" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente imagen se observa el resultado obtenido por Nessus.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnz28s7bzjf5p5xibc6rh.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnz28s7bzjf5p5xibc6rh.PNG" alt=" " width="614" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se configura el descubrimiento de host en OpenVAS, en el menú desplegable Scan Config&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu29o2ur6z8ikm0koaoj1.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu29o2ur6z8ikm0koaoj1.PNG" alt=" " width="798" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Las IP de las máquinas virtuales se añaden de forma manual, seleccionando como lista de puertos &lt;code&gt;All TCP and Nmap top 1000 UDP&lt;/code&gt;. En el reporte de OpenVAS se observa que no encontró ningún host.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqyccgux41l4wdwhptih.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqyccgux41l4wdwhptih.PNG" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Escaneo básico de red (Basic Network Scan)
&lt;/h3&gt;

&lt;p&gt;Se configura el escaneo básico de red en Nessus Essentials con las IP de las máquinas virtuales.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcc9s6dhx9h9lfj5pbtp6.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcc9s6dhx9h9lfj5pbtp6.PNG" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente imagen se observa el resumen del número de vulnerabilidades encontradas para cada host de acuerdo a su nivel (crítico, alto, medio, bajo, informativo). Como es de esperarse la mayoría de vulnerabilidades fueron encontradas para la IP 10.0.2.6 (la cual corresponde a Metasploitable). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fniufwzrhhvjj2z17vhm5.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fniufwzrhhvjj2z17vhm5.PNG" alt=" " width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la tabla se resume el número de vulnerabilidades encontradas&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IP&lt;/th&gt;
&lt;th&gt;CRITICAL&lt;/th&gt;
&lt;th&gt;HIGH&lt;/th&gt;
&lt;th&gt;MEDIUM&lt;/th&gt;
&lt;th&gt;LOW&lt;/th&gt;
&lt;th&gt;INFO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10.0.2.4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.0.2.6&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;78&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.0.2.15&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Por otro lado, en el reporte de OpenVAS se observa que no encontró ningún host, y por tanto no identificó ninguna vulnerabilidad.&lt;/p&gt;

&lt;h3&gt;
  
  
  Escaneo avanzado (Advanced Scan)
&lt;/h3&gt;

&lt;p&gt;En la siguiente tabla se resumen los factores de riesgo encontrados con Nessus Essentials, como es de esperarse la máquina con Metasploitable presenta múltiples vulnerabilidades críticas, altas, medias y bajas.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IP&lt;/th&gt;
&lt;th&gt;CRITICAL&lt;/th&gt;
&lt;th&gt;HIGH&lt;/th&gt;
&lt;th&gt;MEDIUM&lt;/th&gt;
&lt;th&gt;LOW&lt;/th&gt;
&lt;th&gt;INFO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10.0.2.6&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.0.2.15&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;En la imagen se muestra el resumen de las vulnerabilidades críticas y altas para la máquina con Metasploitable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95e4h3l7nic4uigwa0qd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95e4h3l7nic4uigwa0qd.png" alt=" " width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente imagen se observa el resultado de los escaneos realizados con OpenVAS, donde solo se detectaron vulnerabilidades utilizando la configuración &lt;code&gt;Full and fast&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiko062mowiayv6hglk5j.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiko062mowiayv6hglk5j.PNG" alt=" " width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente tabla se relaciona el resumen de las vulnerabilidades encontradas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Host&lt;/th&gt;
&lt;th&gt;High&lt;/th&gt;
&lt;th&gt;Medium&lt;/th&gt;
&lt;th&gt;Low&lt;/th&gt;
&lt;th&gt;Log&lt;/th&gt;
&lt;th&gt;False Positive&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10.0.2.6 METASPLOITABLE&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.0.2.15&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.0.2.4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total: 3&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Para metasploitable, las vulnerabilidades fueron encontradas en los siguientes puertos: 514/tcp, 3306/tcp, 5432/tcp, 21/tcp, 8009/tcp, 80/tcp, 22/tcp 3632/tcp, 513/tcp, 6200/tcp, 5900/tcp, 8787/tcp, 8180/tcp, general/tcp, 6667/tcp, 1524/tcp, 512/tcp, 2121/tcp.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identificación de vulnerabilidades en una red real con Nessus Essentials y OpenVAS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Descubrimiento de host (Host Discovery)
&lt;/h3&gt;

&lt;p&gt;Realizando el descubrimiento de host con Nessus Essentials se encontraron los siguientes dispositivos:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.240&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.241&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.242&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.243&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.245&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.246&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.247&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.249&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.250&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.251&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.252&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.254&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mientras con OpenVAS no encontró ningún host para este caso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Escaneo básico de red (Basic Network Scan )
&lt;/h3&gt;

&lt;p&gt;En la siguiente imagen se observa el resultado de realizar un escaneo básico de la red con Nessus Essentials, con un tiempo de procesamiento de 32 minutos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszt4i4e63u2hz5lo2l09.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszt4i4e63u2hz5lo2l09.PNG" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La herramienta encontró las vulnerabilidades mostradas en la siguiente tabla:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IP&lt;/th&gt;
&lt;th&gt;CRITICAL&lt;/th&gt;
&lt;th&gt;HIGH&lt;/th&gt;
&lt;th&gt;MEDIUM&lt;/th&gt;
&lt;th&gt;LOW&lt;/th&gt;
&lt;th&gt;INFO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.240&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.243&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.245&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.246&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.247&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.249&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.251&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.254&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Por su lado, OpenVAS no encontró ningún host para este caso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Escaneo avanzado (Advanced Scan)
&lt;/h3&gt;

&lt;p&gt;En la siguiente imagen se observa el resultado de realizar un escaneo avanzado de la red con Nessus Essentials, en este caso la duración fue de 18 minutos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80thp5uoqir6ult43gsk.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80thp5uoqir6ult43gsk.PNG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente tabla se observa el detalle de todas la vulnerabilidades encontradas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IP&lt;/th&gt;
&lt;th&gt;CRITICAL&lt;/th&gt;
&lt;th&gt;HIGH&lt;/th&gt;
&lt;th&gt;MEDIUM&lt;/th&gt;
&lt;th&gt;LOW&lt;/th&gt;
&lt;th&gt;INFO&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.240&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.241&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.242&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.243&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.245&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.246&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.247&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.249&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.250&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.251&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.252&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.254&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;En el caso de OpenVAS se encontraron 5 vulnerabilidades de clasificación alta, 16 de clasificación media y 16 de clasificación baja, como se muestra a continuación:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Host&lt;/th&gt;
&lt;th&gt;High&lt;/th&gt;
&lt;th&gt;Medium&lt;/th&gt;
&lt;th&gt;Low&lt;/th&gt;
&lt;th&gt;Log&lt;/th&gt;
&lt;th&gt;False Positive&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.247&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.243&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.254 ACDC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.242&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.249&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.251&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.246 LAPTOP-7CDBNT53&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.250&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.245&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.252&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total: 11&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;En la siguiente tabla se presenta el detalle de las vulnerabilidades de clasificación alta:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IP&lt;/th&gt;
&lt;th&gt;PORT&lt;/th&gt;
&lt;th&gt;Vulnerability Detection Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.247&lt;/td&gt;
&lt;td&gt;443/tcp&lt;/td&gt;
&lt;td&gt;It was possible to login using the following credentials (username:password): admin:admin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.243&lt;/td&gt;
&lt;td&gt;443/tcp&lt;/td&gt;
&lt;td&gt;It was possible to login using the following credentials (username:password): admin:admin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.254&lt;/td&gt;
&lt;td&gt;8834/tcp&lt;/td&gt;
&lt;td&gt;VMware Spring Cloud Function is prone to a remote code execution (RCE) vulnerability.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.242&lt;/td&gt;
&lt;td&gt;1043/tcp&lt;/td&gt;
&lt;td&gt;Vulnerable' cipher suites accepted by this service via the TLSv1.2 protocol: TLS_RSA_WITH_3DES_EDE_CBC_SHA (SWEET32)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.40.1&lt;/td&gt;
&lt;td&gt;general/tcp&lt;/td&gt;
&lt;td&gt;MikroTik RouterOS is prone to a denial of service (DoS) vulnerability in the SMB server.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Vulnerabilidades encontradas e identificación de CVE relevantes
&lt;/h2&gt;

&lt;p&gt;CVE (Common Vulnerabilities and Exposures) es un sistema de identificación y estandarización de vulnerabilidades informáticas. Cada CVE es un identificador único que se asigna a una vulnerabilidad específica y se utiliza en todo el mundo para rastrear y comunicar problemas de seguridad de manera consistente. MITRE Corporation es la organización detrás de la creación y gestión de este sistema, así como de otras actividades relacionadas con la seguridad y la tecnología. Los CVE pueden ser consultados en la página oficial de MITRE &lt;code&gt;https://cve.mitre.org/index.html&lt;/code&gt;.    &lt;/p&gt;

&lt;p&gt;Para la máquina con Metasploitable en la red virtual, se identificaron las siguientes vulnerabilidades de clasificación crítica y alta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache Tomcat AJP Connector Request Injection (Ghostcat): Esta vulnerabilidad permite a un atacante inyectar solicitudes maliciosas a través del conector AJP de Apache Tomcat, lo que podría resultar en la exposición de archivos confidenciales o la ejecución de código.&lt;/li&gt;
&lt;li&gt;Bind Shell Backdoor Detection: Se trata de una detección de la presencia de una puerta trasera (backdoor) que permite a un atacante obtener acceso no autorizado al sistema comprometido.&lt;/li&gt;
&lt;li&gt;Debian OpenSSH/OpenSSL Package Random Number Generator Weakness: Esta vulnerabilidad implica una debilidad en el generador de números aleatorios utilizado por los paquetes OpenSSH y OpenSSL en el sistema Debian, lo que podría facilitar ataques criptográficos.&lt;/li&gt;
&lt;li&gt;Multiple Vendor DNS Query ID Field Prediction Cache Poisoning: Está relacionada con la predicción del campo de identificación en las consultas DNS, lo que podría conducir a ataques de envenenamiento de caché DNS en múltiples sistemas.&lt;/li&gt;
&lt;li&gt;NFS Exported Share Information Disclosure: Permite la revelación de información confidencial relacionada con comparticiones de archivos exportadas a través del protocolo NFS (Network File System).&lt;/li&gt;
&lt;li&gt;SSL Version 2 and 3 Protocol Detection: Implica la detección de las versiones obsoletas y potencialmente inseguras de los protocolos SSL (Secure Sockets Layer) en el sistema.&lt;/li&gt;
&lt;li&gt;Unix Operating System Unsupported Version Detection: Se refiere a la detección de versiones no compatibles o desactualizadas del sistema operativo Unix, que podrían ser susceptibles a vulnerabilidades conocidas.&lt;/li&gt;
&lt;li&gt;UnrealIRCd Backdoor Detection: Identifica la presencia de una puerta trasera en UnrealIRCd, un servidor de IRC, que podría permitir el control no autorizado del sistema.&lt;/li&gt;
&lt;li&gt;VNC Server 'password' Password: Esta vulnerabilidad implica el uso de contraseñas débiles en un servidor VNC (Virtual Network Computing), lo que podría facilitar el acceso no autorizado.&lt;/li&gt;
&lt;li&gt;ISC BIND Service Downgrade / Reflected DoS: Relacionada con el servicio ISC BIND DNS, esta vulnerabilidad puede ser explotada para realizar ataques de denegación de servicio (DoS) o downgrade de versiones.&lt;/li&gt;
&lt;li&gt;NFS Shares World Readable: Esta vulnerabilidad se refiere a compartir archivos NFS que tienen permisos de lectura globales, lo que podría exponer datos sensibles.&lt;/li&gt;
&lt;li&gt;SSL Medium Strength Cipher Suites Supported (SWEET32): Identifica la compatibilidad con suites de cifrado de fuerza media en la capa SSL/TLS, que pueden ser susceptibles a ataques de SWEET32.&lt;/li&gt;
&lt;li&gt;Samba Badlock Vulnerability: Hace referencia a una vulnerabilidad conocida como Badlock en el servicio Samba, que podría permitir a un atacante obtener control sobre sistemas afectados.&lt;/li&gt;
&lt;li&gt;rlogin Service Detection: Detecta la presencia del servicio rlogin, que puede tener vulnerabilidades de seguridad si no se configura adecuadamente.&lt;/li&gt;
&lt;li&gt;rsh Service Detection: Similar a la detección del servicio rlogin, esta identificación se refiere al servicio rsh y sus posibles vulnerabilidades si se configura de manera incorrecta.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para la red con dispositivos reales, Nessus Essentials identifico un factor de riesgo alto en el dispositivo con IP 192.168.40.245, tanto en el escaneo básico como en el avanzado. Este riesgo se debe a la versión de OpenJDK (17.0.6) instalada, la cual presenta múltiples vulnerabilidades, como se detalla en &lt;code&gt;https://openjdk.org/groups/vulnerability/advisories/2023-04-18&lt;/code&gt;. En resumen un atacante con acceso a la red a través de http, https o tls podría:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tener acceso no autorizado a datos accesibles&lt;/li&gt;
&lt;li&gt;Modificar datos críticos&lt;/li&gt;
&lt;li&gt;Causar bloqueos definitivos o recurrentes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esta vulnerabilidad tiene varios CVE asociados: CVE-2023-21930, CVE-2023-21937, CVE-2023-21938, CVE-2023-21939, CVE-2023-21954, CVE-2023-21967, CVE-2023-21968.&lt;/p&gt;

&lt;p&gt;Por su lado, OpenVAS en la red con dispositivos reales encontró 5 vulnerabilidades de clasificación alta. 2 de estas son asociadas a la configuración de credenciales por defecto (admin:admin) para máquinas que ejecutan OpenVAS. Las tres vulnerabilidades restantes consisten en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vulnerabilidad de ejecución remota de código (RCE) en VMware Spring Cloud Function: Permite a un atacante ejecutar código de forma remota en el sistema. Esto podría llevar a un acceso no autorizado y control total sobre el servidor afectado, lo que representa un grave riesgo de seguridad. CVE asociado: CVE-2022-22963.&lt;/li&gt;
&lt;li&gt;Aceptación de suites de cifrado vulnerables a través del protocolo TLSv1.2 (SWEET32): Se ha identificado que el servicio en cuestión acepta suites de cifrado débiles a través del protocolo TLSv1.2. Entre estas suites vulnerables se encuentra TLS_RSA_WITH_3DES_EDE_CBC_SHA, que es propensa a ataques como SWEET32. Esto podría exponer la comunicación a riesgos de seguridad y se recomienda deshabilitar estas suites. CVE asociados:  CVE-2016-2183, CVE-2016-6329 y CVE-2020-12872.&lt;/li&gt;
&lt;li&gt;Vulnerabilidad de denegación de servicio (DoS) en el servidor SMB de MikroTik RouterOS: MikroTik RouterOS presenta una vulnerabilidad que permite llevar a cabo ataques de denegación de servicio (DoS) en el servidor SMB. Esto podría resultar en la interrupción del servicio y la inaccesibilidad de recursos compartidos, lo que puede afectar la operatividad de la red o sistema afectado. CVE asociado: CVE-2020-11881.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vulnerabilidades comunes
&lt;/h2&gt;

&lt;p&gt;Algunas vulnerabilidades que pueden encontrarse son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Injection: Es un ataque donde insertan código SQL malicioso en una entrada de usuario, permitiéndole manipular una base de datos y acceder o modificar datos sensibles [7].&lt;/li&gt;
&lt;li&gt;Header Injection: Es un ataque donde insertan datos maliciosos en encabezados HTTP, lo que puede llevar a comportamientos no deseados en una aplicación web [8].&lt;/li&gt;
&lt;li&gt;Directory Listing: Es un ataque donde se exploran directorios de un servidor web para obtener información sobre los archivos y carpetas en el servidor, lo que puede revelar información sensible [9].&lt;/li&gt;
&lt;li&gt;Shell Injection: Es un ataque donde insertan comandos maliciosos en una aplicación web para ejecutar operaciones en el sistema operativo subyacente [10].&lt;/li&gt;
&lt;li&gt;Cross Site Scripting (XSS): Es un ataque donde se inyectan scripts maliciosos en una página web que luego son ejecutados por los navegadores de los usuarios, permitiendo la obtención de información confidencial [11].&lt;/li&gt;
&lt;li&gt;File Inclusion: Es un ataque donde se logra incluir archivos maliciosos en una aplicación web, a menudo aprovechando vulnerabilidades en la inclusión de archivos [12].&lt;/li&gt;
&lt;li&gt;File Disclosure: Es un ataque sonde se accede y revela archivos sensibles o confidenciales en un servidor web, a menudo a través de vulnerabilidades de seguridad [13].&lt;/li&gt;
&lt;li&gt;Command Execution Detection: Se refiere a la detección de intentos de ejecución de comandos maliciosos en una aplicación web para prevenir ataques como la inyección de comandos [14].&lt;/li&gt;
&lt;li&gt;Backup Files Disclosure: Es un ataque donde se obtiene acceso a copias de seguridad de archivos sensibles, lo que puede exponer información confidencial [15].&lt;/li&gt;
&lt;li&gt;CRLF Injection: Es un ataque donde se inserta caracteres de retorno de carro y avance de línea en datos de entrada para manipular la salida HTTP [16].&lt;/li&gt;
&lt;li&gt;SEL Injection (Security-Enhanced Linux Injection): Es un ataque donde se explotan vulnerabilidades en el sistema SELinux para obtener acceso no autorizado a recursos del sistema [17].&lt;/li&gt;
&lt;li&gt;XPath Injection: Es un ataque donde se manipulan consultas XPath en aplicaciones web para obtener acceso no autorizado a datos XML o realizar operaciones maliciosas [18].&lt;/li&gt;
&lt;li&gt;SSL Medium Strength Cipher Suites Supported: Este mensaje indica que un servidor web admite suites de cifrado SSL de fuerza media, lo que podría exponer la comunicación a riesgos de seguridad. Este no es un ataque en sí, pero es un problema de configuración de seguridad [19].&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusiones
&lt;/h1&gt;

&lt;p&gt;La seguridad de la información es esencial debido a la creciente importancia de las redes IP en la comunicación de dispositivos, lo que las convierte en un objetivo atractivo para los ataques cibernéticos.&lt;/p&gt;

&lt;p&gt;Por ello herramientas de evaluación de vulnerabilidades como Nessus Essentials y OpenVAS desempeñan un papel crucial en la identificación y mitigación de vulnerabilidades en redes IP, sistemas operativos y aplicaciones. Estas permiten a los profesionales de seguridad y administradores de sistemas detectar debilidades antes de que los atacantes las exploten.&lt;/p&gt;

&lt;p&gt;En el proceso de identificación de vulnerabilidades, se llevaron a cabo escaneos tanto en un entorno de máquinas virtuales como en una red real. Estos escaneos revelaron una serie de vulnerabilidades críticas, altas, medias y bajas en los dispositivos evaluados.&lt;/p&gt;

&lt;p&gt;Es importante recordar que realizar escaneos de vulnerabilidades en una red sin autorización constituye un delito informático y puede tener graves consecuencias legales. Se enfatiza la importancia de utilizar estas herramientas de manera ética.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referencias
&lt;/h1&gt;

&lt;p&gt;[1] D. H. Guerrero. “Parte 1 - Configurando una red básica para aprender sobre gestión de vulnerabilidades”. DEV Community. Accedido el 2 de septiembre de 2023. [En línea]. Disponible: &lt;a href="https://dev.to/djhuertasg/parte-1-configurando-una-red-basica-para-aprender-sobre-gestion-de-vulnerabilidades-4dn1"&gt;https://dev.to/djhuertasg/parte-1-configurando-una-red-basica-para-aprender-sobre-gestion-de-vulnerabilidades-4dn1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] “Los ciberataques suman 54.121 casos en lo que va del año y han crecido más de 20%”. Diario La República. Accedido el 7 de septiembre de 2023. [En línea]. Disponible: &lt;a href="https://www.larepublica.co/empresas/los-ciberataques-suman-54-121-casos-en-lo-que-va-del-ano-y-han-crecido-mas-de-20-3509163" rel="noopener noreferrer"&gt;https://www.larepublica.co/empresas/los-ciberataques-suman-54-121-casos-en-lo-que-va-del-ano-y-han-crecido-mas-de-20-3509163&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] “Leyes desde 1992 - Vigencia expresa y control de constitucionalidad [LEY_1273_2009]”. SECRETARÍA GENERAL DEL SENADO. Accedido el 7 de septiembre de 2023. [En línea]. Disponible: &lt;a href="http://secretariasenado.gov.co/senado/basedoc/ley_1273_2009.html" rel="noopener noreferrer"&gt;http://secretariasenado.gov.co/senado/basedoc/ley_1273_2009.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] “How to install Metasploitable 2 in VirtualBox - GeeksforGeeks”. GeeksforGeeks. Accedido el 7 de septiembre de 2023. [En línea]. Disponible: &lt;a href="https://www.geeksforgeeks.org/how-to-install-metasploitable-2-in-virtualbox/" rel="noopener noreferrer"&gt;https://www.geeksforgeeks.org/how-to-install-metasploitable-2-in-virtualbox/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] “Tenable Nessus Essentials Vulnerability Scanner”. Tenable®. Accedido el 7 de septiembre de 2023. [En línea]. Disponible: &lt;a href="https://www.tenable.com/products/nessus/nessus-essentials" rel="noopener noreferrer"&gt;https://www.tenable.com/products/nessus/nessus-essentials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] “Greenbone Enterprise TRIAL 14 days for free - Greenbone”. Greenbone. Accedido el 7 de septiembre de 2023. [En línea]. Disponible: &lt;a href="https://www.greenbone.net/en/testnow/" rel="noopener noreferrer"&gt;https://www.greenbone.net/en/testnow/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[7] "SQL Injection," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/7948277" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/7948277&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[8] "Header Injection Attacks," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/5594942" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/5594942&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[9] "Directory Listing Vulnerability in Web Servers," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/7570151" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/7570151&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[10] "Shell Injection Attacks and Mitigation Techniques in Web Applications," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/7962300" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/7962300&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[11] "Cross-Site Scripting (XSS) Attacks and Defenses," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/5574142" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/5574142&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[12] "File Inclusion Vulnerabilities in Web Applications: Detection and Prevention," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/5190739" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/5190739&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[13] "File Disclosure Vulnerabilities in Web Applications," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/7510910" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/7510910&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[14] "Command Execution Detection in Web Applications," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/6567437" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/6567437&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[15] "Security Risks in Web Servers: File Backups Disclosure," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/6307265" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/6307265&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[16] "HTTP Response Splitting Attacks," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/5319394" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/5319394&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[17] "Toward a Safer System With Security Enhanced Linux", Van‘t Oever, D., &amp;amp; de Wit, J. J. (2006).&lt;/p&gt;

&lt;p&gt;[18] "XPath Injection Attacks and Defenses," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/6695912" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/6695912&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[19] "Security Risks in SSL/TLS Implementations," IEEE Xplore, [Online]. Disponible en: &lt;a href="https://ieeexplore.ieee.org/abstract/document/6283483" rel="noopener noreferrer"&gt;https://ieeexplore.ieee.org/abstract/document/6283483&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>cybersecurity</category>
      <category>vulnerabilities</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Parte 1 - Configurando una red básica para aprender sobre gestión de vulnerabilidades</title>
      <dc:creator>Dilver Huertas Guerrero</dc:creator>
      <pubDate>Sun, 27 Aug 2023 04:21:06 +0000</pubDate>
      <link>https://dev.to/djhuertasg/parte-1-configurando-una-red-basica-para-aprender-sobre-gestion-de-vulnerabilidades-4dn1</link>
      <guid>https://dev.to/djhuertasg/parte-1-configurando-una-red-basica-para-aprender-sobre-gestion-de-vulnerabilidades-4dn1</guid>
      <description>&lt;h1&gt;
  
  
  Introducción
&lt;/h1&gt;

&lt;p&gt;En este post se ponen en práctica conceptos técnicos y conocimientos básicos que son necesarios para el alistamiento de una infraestructura para la gestión de vulnerabilidades. Se realiza el despliegue de servicios inseguros (http,ftp) y seguros (https,sftp,vpn), con el objetivo de inspeccionar puertos y analizar tráfico en la red de servidores propuesta. Este laboratorio hace parte de una serie de desafíos que se irán adelantando con el fin de probar diferentes tecnologías y herramientas de hacking ético.&lt;/p&gt;

&lt;h1&gt;
  
  
  Desarrollo
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Paso 1: Configurar la red
&lt;/h2&gt;

&lt;p&gt;Para desarrollar el laboratorio se utiliza la herramienta de virtualización VirtualBox, y se configuran las máquinas en modo adaptador de puente con DHCP habilitado. Con esta configuración, cada máquina virtual se trata como una máquina separada en su red real, lo que significa que las máquinas host, cualquier máquina virtual y cualquier otro dispositivo en la red pueden comunicarse entre sí, además las máquinas virtuales tienen acceso a Internet. Para realizar la configuración requerida puede seguir la guía disponible en [1].&lt;/p&gt;

&lt;p&gt;Se configura una red como la mostrada a continuación:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazx4f9s0bsvmq69gls44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazx4f9s0bsvmq69gls44.png" alt=" " width="251" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Servidor 1:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OS: Kali linux 2023.2&lt;/li&gt;
&lt;li&gt;IP: 10.0.2.4/24&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Servidor 2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CentOS Stream 9&lt;/li&gt;
&lt;li&gt;IP: 10.0.2.15/24&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Las dos máquinas fueron descargadas del sitio &lt;code&gt;https://www.linuxvmimages.com/&lt;/code&gt;, lo cual facilita la configuración de la red ya que vienen listas para ser importadas en VirtualBox. Para facilitar el paso de archivos entre el host y las máquinas virtuales se habilita la funcionalidad de carpeta compartida. En caso de que se no le permita acceder a la carpeta, debe agregar el usuario de cada máquina al grupo vboxsf, lo cual se hace con el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo usermod -aG vboxsf $(whoami)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Paso 2: Verificar conectividad
&lt;/h2&gt;

&lt;p&gt;Se verifica la conectividad entre los dos servidores utilizando el comando ping&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvz07nby2g7wgvuwlq1zc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvz07nby2g7wgvuwlq1zc.png" alt=" " width="513" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcerawc35hmakmf7vy5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcerawc35hmakmf7vy5n.png" alt=" " width="570" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para ambos casos se observa un éxito del 100% en la transmisión de paquetes, el cual comprueba la comunicación entre servidores a través del protocolo IP enviando paquetes ICPM. &lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 3 y Paso 4: Escaneo de puertos con NMAP
&lt;/h2&gt;

&lt;p&gt;Desde el servidor 1 se realiza el escaneo a nivel local y hacia internet utilizando la herramienta NMAP.&lt;/p&gt;

&lt;p&gt;En la ejecución se utiliza la opción &lt;code&gt;-Pn&lt;/code&gt;, esto para indicarle a NMAP que ignore la detección de hosts y realice el escaneo sin realizar ninguna prueba de ping. Cuando se utiliza esta opción, la herramienta no intentará determinar si el host objetivo está en línea, esto significa que asumirá que el host objetivo está en línea y procederá a escanear los puertos especificados sin realizar una comprobación previa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nmap en LAN
&lt;/h3&gt;

&lt;p&gt;En el servidor 1 se observan abiertos los puertos abiertos por XAMPP (21, 80, 443, 3306).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2qmx13ywskkb2i3os38m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2qmx13ywskkb2i3os38m.png" alt=" " width="530" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el servidor 2 se observa abierto el puerto 22, el cual es utilizado por el protocolo SSH. En el puerto 9090 se observa cerrado el puerto 9090, este esta siendo utilizado por zeus, un software de balanceo de carga.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwz87poswjstu69n0y34v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwz87poswjstu69n0y34v.png" alt=" " width="629" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Nmap en sitios de internet
&lt;/h3&gt;

&lt;p&gt;Para el sitio &lt;code&gt;scanme.nmap.org&lt;/code&gt; se observan abiertos los puertos 22 y 25. El puerto 25 fue utilizado para la transferencia de correo, en este momento no se recomienda su uso dado que no tiene un mecanismo de seguridad. Actualmente el puerto 587 es el canal de transmisión por defecto para SMTP, ya que proporciona una transmisión segura del correo electrónico mediante el cifrado STARTTLS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcrmgx1xt5pl4b71c0gk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcrmgx1xt5pl4b71c0gk.png" alt=" " width="629" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para el sitio &lt;code&gt;tryhackme.com&lt;/code&gt; se observan abiertos los puertos 25, 80, 443 y 8080.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ql6iqirwlva4qnpv7fd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ql6iqirwlva4qnpv7fd.png" alt=" " width="632" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 5: Habilitar servicios http y ftp
&lt;/h2&gt;

&lt;p&gt;Se realiza la descarga de XAMPP desde el sitio oficial &lt;code&gt;https://www.apachefriends.org/download.html&lt;/code&gt; y se instala en el servidor 1 utilizando los siguientes comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chmod +x xampp-linux-x64-8.2.4-0-installer.run
./xampp-linux-x64-8.2.4-0-installer.run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para iniciar el servicio se utiliza el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo /opt/lampp/lampp start services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para comprobar que ha sido instalado con éxito utilizar el navegador e ir al localhost (127.0.0.1) como se observa en la imagen:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkwfkbn7mgc1pmmweimf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkwfkbn7mgc1pmmweimf.png" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;br&gt;
Con esto se realizará la interceptación de tráfico http y ftp.&lt;/p&gt;
&lt;h2&gt;
  
  
  Paso 6: Interceptar tráfico http con Wireshark
&lt;/h2&gt;

&lt;p&gt;Para interceptar tráfico con wireshark desde el servidor 1 se utiliza la interface eth0.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6jt97rc07r39mpi8ari.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6jt97rc07r39mpi8ari.png" alt=" " width="326" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se realiza la navegación desde el servidor 2 al servidor 1, a través de la dirección web 10.0.2.4, y se explora manualmente para generar tráfico de red.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc33dl10z0gu02t4xhjad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc33dl10z0gu02t4xhjad.png" alt=" " width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se obtiene la traza de 177 paquetes.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstvddtgr9isi3rsik3ep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstvddtgr9isi3rsik3ep.png" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se identifica en el trafico de red el uso de los siguientes protocolos: HTTP, HTTP/XML, TCP. Como es de esperar, no hay tráfico cifrado. Adicionalmente se identifica la siguiente alerta en el tráfico TCP: "TCP window specified by the receiver is now completely full" (ver la sección de Conclusiones para el análisis).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5it9pkjgp1px5iioxgo0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5it9pkjgp1px5iioxgo0.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Paso 7: Habilitar el servicio ftp
&lt;/h2&gt;

&lt;p&gt;Para habilitar el servicio ftp se siguen los pasos en el manual de instalación de XAMPP disponibles en el mismo sitio web local &lt;code&gt;http://localhost/dashboard/docs/transfer-files-ftp.html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para abrir el panel de configuración de xampp se utiliza el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo /opt/lampp/manager-linux-x64.run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Asegurarse que el servicio ProFTPD esta corriendo como se observa en la imagen:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futmofdxogbfkz753axxj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futmofdxogbfkz753axxj.png" alt=" " width="682" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El usuario y contraseña son los mismos que se utilizan para acceder al servidor 1.&lt;/p&gt;
&lt;h2&gt;
  
  
  Paso 8: Conexión al servidor ftp utilizando lftp
&lt;/h2&gt;

&lt;p&gt;Desde el servidor 2 se realiza la conexión ftp, utilizando la herramienta lftp, la cual es un cliente de línea de comandos que permite la transferencia de archivos a través de múltiples protocolos. &lt;br&gt;
En la imagen se observa el uso de lftp:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem0xeox1vruy2pcrqifn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem0xeox1vruy2pcrqifn.png" alt=" " width="738" height="228"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Paso 9: Interceptar tráfico ftp
&lt;/h2&gt;

&lt;p&gt;Para interceptar el tráfico ftp se utiliza Wireshark. Se crea un directorio test y después se borra para generar tráfico de red como se observa en la imagen:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3lypkm4p4ktq5bf0nh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3lypkm4p4ktq5bf0nh1.png" alt=" " width="653" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se identifica el uso de los protocolos: ARP, DHCP, DNS, FTP, FTP-DATA, TCP y TLSv1.2.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfcndqqnjgi5m4126f3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfcndqqnjgi5m4126f3u.png" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se observa que el usuario y contraseña van en texto plano a través del protocolo FTP:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5n0odgpv6052ktnqhud6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5n0odgpv6052ktnqhud6.png" alt=" " width="800" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Igualmente se conocen los comandos ejecutados por el usuario:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9cvycw73p7d3pmcucsm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9cvycw73p7d3pmcucsm.png" alt=" " width="800" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El protocolo FTP permite conocer todo lo que realice el usuario ya que va en texto plano, por lo cual nunca debe ser utilizado en un servicio real.&lt;/p&gt;
&lt;h2&gt;
  
  
  Paso 10: Interceptar tráfico en una VPN
&lt;/h2&gt;

&lt;p&gt;Para este paso se realiza la configuración de 2 VPN, la primera desde el servidor 1 hacia internet utilizando winscribe &lt;code&gt;https://windscribe.com/&lt;/code&gt; y la segunda entre los servidores de la red local utilizando openvpn &lt;code&gt;https://openvpn.net/&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Interceptar tráfico desde el servidor 1 hacia internet
&lt;/h3&gt;

&lt;p&gt;Con windscribe se establece una conexión vpn, como se observa en la imagen:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xbbxb5vu131c3cj6fyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xbbxb5vu131c3cj6fyi.png" alt=" " width="337" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Windscribe ofrece los protocolos: Wireguard, UDP, TCP, Stealth y WStunnel. Para mayor información sobre el protocolo wireguard consultar la página &lt;code&gt;https://www.wireguard.com/&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbgr9mdgaxywbdqqkirf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbgr9mdgaxywbdqqkirf.png" alt=" " width="330" height="683"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En wireshark se observa el uso de los protocolos: ARP, TCP, TLSv1.2 y Wireguard. Probando la conexión a un sitio internet inseguro (http), vemos que en wireshark que no se ve esa conexión.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwhuut1k9jge1w1n5xmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwhuut1k9jge1w1n5xmz.png" alt=" " width="703" height="806"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todo el tráfico queda encapsulado en el protocolo Wireguard.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsbryb87bvvouf8imop3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsbryb87bvvouf8imop3.png" alt=" " width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Establecer el canal seguro entre servidores locales
&lt;/h3&gt;

&lt;p&gt;Para configurar la vpn se utiliza OpenVPN. El servidor 1 como server y el servidor 2 como cliente siguiendo la guía disponible en [2]. &lt;/p&gt;

&lt;p&gt;Se configura el servidor VPN como se muestra en la imagen.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frskds5wb29hc05tzvlvw.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frskds5wb29hc05tzvlvw.PNG" alt=" " width="711" height="672"&gt;&lt;/a&gt;&lt;br&gt;
Los parámetros de configuración son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dirección IP: 10.0.2.4&lt;/li&gt;
&lt;li&gt;Puerto: 1194&lt;/li&gt;
&lt;li&gt;Protocolo: UDP&lt;/li&gt;
&lt;li&gt;DNS: /etc/resolv.conf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Del lado del cliente se debe instalar EPEL en CentOS, para lo cual se sigue la guía disponible en [3]. EPEL es un repositorio de software con aplicaciones de terceros para sistemas Red Hat y derivados.&lt;/p&gt;

&lt;p&gt;Para instalar el gestor de red se utiliza el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dnf install NetworkManager-openvpn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para ejecutar la conexión vpn se utiliza el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo openvpn /etc/openvpn/client/client.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En la imagen se observa que la conexión vpn se realizo de manera exitosa (Initialization Sequence Completed).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8vg9084fmmyo1gnubni.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8vg9084fmmyo1gnubni.PNG" alt=" " width="760" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Interceptar tráfico http y ftp
&lt;/h3&gt;

&lt;p&gt;En la interceptación de tráfico ftp se observa que se utilizan los protocolos ARP, DNS, OpenVPN, SSL, TCP, TLSv1.2 y TLSv1.3. Por lo cual el tráfico FTP va encapsulado en el protocolo OpenVPN.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fia99r01lo0aec565hquv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fia99r01lo0aec565hquv.PNG" alt=" " width="800" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la interceptación de trafico http se observa que se utilizan los protocolos ARP, DHCP, ICMPv6, OpenVPN y SSL. Por lo cual el tráfico HTTP va encapsulado en el protocolo OpenVPN.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvcydxygv5x27grhbe1y.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvcydxygv5x27grhbe1y.PNG" alt=" " width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 11 y 12: Establecer conexiones seguras HTTPS y SFTP, e interceptar el tráfico
&lt;/h2&gt;

&lt;h3&gt;
  
  
  HTTPS
&lt;/h3&gt;

&lt;p&gt;Para establecer la conexión https se sigue la guía disponible en [4]. Se configura como se muestra en la imagen:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmipygzoe9o1ru4m3v64n.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmipygzoe9o1ru4m3v64n.PNG" alt=" " width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Los parámetros de configuración del certificado son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Country Name: CO&lt;/li&gt;
&lt;li&gt;State or Province Name: Antioquia&lt;/li&gt;
&lt;li&gt;Locality Name: Medellin&lt;/li&gt;
&lt;li&gt;Organization Name: ITM&lt;/li&gt;
&lt;li&gt;Common Name: localhost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Al probar la conexión https desde el servidor 2, se observa que el certificado utiliza el protocolo TLS 1.3 con cifrado AES 128.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5nfdzj4t0c78sehyspte.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5nfdzj4t0c78sehyspte.PNG" alt=" " width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al interceptar el trafico se observa el uso de los protocolos TCP y TLSv1.3. Se observa también la alerta "TCP Window Full".&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8746kx06mq233sdtwe2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8746kx06mq233sdtwe2.PNG" alt=" " width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  SFTP
&lt;/h3&gt;

&lt;p&gt;Para establecer la conexión sftp, se utilizo la guía disponible en [5]. En la imagen se observa la conexión utilizando el comando sftp. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyev7ytpdma9fyf53w58.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyev7ytpdma9fyf53w58.PNG" alt=" " width="635" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con wireshark se observa el uso de los protocolos ARP, DHCP, SSH y TCP.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjx1yrqk7qzvgbrmpt25.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjx1yrqk7qzvgbrmpt25.PNG" alt=" " width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusiones
&lt;/h1&gt;

&lt;p&gt;A lo largo del ejercicio se observa que es posible establecer una red para realizar la prueba de protocolos inseguros y seguros, además de ver el tráfico e identificar vulnerabilidades utilizando software libre. &lt;/p&gt;

&lt;p&gt;Se muestra que el uso de protocolos inseguros como http y ftp debe evitarse, ya que el tráfico puede ser interceptado y leído dado que se encuentra en texto plano. Esto inclusive en servicios que se utilicen solamente dentro de una red local, ya que un atacante que penetre las medidas de seguridad perimetrales podría hacer fácil uso de los datos.&lt;/p&gt;

&lt;p&gt;La alerta "TCP window specified by the receiver is now completely full" se refiere a una condición que ocurre en una conexión TCP cuando el receptor del tráfico informa al emisor que su ventana de recepción está completamente llena. Esto significa que el receptor no puede aceptar más datos en ese momento porque su memoria para almacenar los datos entrantes está llena.&lt;/p&gt;

&lt;p&gt;En términos de ciberseguridad, esta alerta puede ser útil para identificar posibles problemas de congestión en la red o incluso ataques de denegación de servicio (DoS) en los que un atacante podría inundar una conexión TCP. En algunos casos, esta alerta podría indicar una vulnerabilidad en la forma en que un sistema maneja los datos entrantes, lo cual podría ser utilizado para ejecutar código malicioso en el sistema receptor o realizar otras acciones maliciosas. En un ataque avanzado, una ventana de recepción llena podría utilizarse como parte de una cadena de ataques para aprovechar debilidades en la infraestructura de red y sistemas.&lt;/p&gt;

&lt;p&gt;Tanto el uso de una VPN como la implementación de conexiones seguras (HTTPS y SFTP) utilizando certificados tienen sus propias ventajas y desventajas. La elección dependerá de los requisitos específicos de seguridad y el contexto de uso. &lt;/p&gt;

&lt;p&gt;Una VPN cifra todo el tráfico entre el cliente y el servidor, protegiendo múltiples tipos de tráfico, no solo HTTP y FTP, lo que la hace útil para aplicaciones más diversas. Permiten el acceso seguro a redes internas desde ubicaciones remotas y puede ocultar la dirección IP real del usuario, proporcionando cierto grado de anonimato. Sin embargo pueden ser complejas de configurar y mantener, requieren recursos técnicos y suelen implicar costos adicionales en términos de hardware, software y recursos humanos. Además el tráfico puede sufrir cierta degradación del rendimiento debido al cifrado y la encapsulación.&lt;/p&gt;

&lt;p&gt;Las conexiones seguras (https y sftp) están diseñadas específicamente para proteger tipos de tráfico individuales, lo que puede llevar a un rendimiento mejorado en comparación con una VPN. Son ampliamente adoptados y admitidos por la mayoría de los navegadores y aplicaciones de servidor FTP. Por otro lado, deben ser configurados individualmente y no ocultan la dirección IP real del usuario, por lo que no proporcionan anonimato.&lt;/p&gt;

&lt;p&gt;A través del ejercicio se estableció un proceso paso a paso que buscar servir de guía a cualquier entusiasta de la ciberseguridad, y que servirá de base para la ejecución de laboratorios posteriores.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referencias
&lt;/h1&gt;

&lt;p&gt;[1] "Cómo conectar en red dos máquinas virtuales con VirtualBox - Noticias Movil". Noticias Movil. &lt;a href="https://noticiasmoviles.com/como-conectar-en-red-dos-maquinas-virtuales-con-virtualbox/" rel="noopener noreferrer"&gt;https://noticiasmoviles.com/como-conectar-en-red-dos-maquinas-virtuales-con-virtualbox/&lt;/a&gt; (accedido el 27 de agosto de 2023).&lt;/p&gt;

&lt;p&gt;[2] alu. "How to set up a Linux VPN server (Beginner’s Guide)". Average Linux User. &lt;a href="https://averagelinuxuser.com/linux-vpn-server/" rel="noopener noreferrer"&gt;https://averagelinuxuser.com/linux-vpn-server/&lt;/a&gt; (accedido el 27 de agosto de 2023).&lt;/p&gt;

&lt;p&gt;[3] "How to enable the EPEL repository in CentOS 9 Stream". Unix / Linux the admins Tutorials. &lt;a href="https://unixcop.com/enable-epel-repository-centos-9-stream/" rel="noopener noreferrer"&gt;https://unixcop.com/enable-epel-repository-centos-9-stream/&lt;/a&gt; (accedido el 27 de agosto de 2023).&lt;/p&gt;

&lt;p&gt;[4] "XAMPP: uso de certificados SSL en localhost - Syloper". Syloper | Desarrollo de software a medida. &lt;a href="https://www.syloper.com/blog/servidores/xampp-certificados-ssl-localhost/" rel="noopener noreferrer"&gt;https://www.syloper.com/blog/servidores/xampp-certificados-ssl-localhost/&lt;/a&gt; (accedido el 27 de agosto de 2023).&lt;/p&gt;

&lt;p&gt;[5] "Cómo instalar y utilizar SFTP en servidores Linux - HowtoForge". HowtoForge. &lt;a href="https://howtoforge.es/como-instalar-y-utilizar-sftp-en-servidores-linux/" rel="noopener noreferrer"&gt;https://howtoforge.es/como-instalar-y-utilizar-sftp-en-servidores-linux/&lt;/a&gt; (accedido el 27 de agosto de 2023).&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>cybersecurity</category>
      <category>vulnerabilities</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
