Security Testing
Security Testing identifica vulnerabilidades y debilidades en el software. Su objetivo es prevenir ataques, proteger datos y garantizar la confidencialidad, integridad y disponibilidad de los sistemas.
En resumen
- Security Testing detecta brechas de seguridad.
- Comprende SAST, DAST, SCA, pentests y revisiones manuales.
- OWASP Top 10 lista las vulnerabilidades más comunes.
- Los tests de seguridad deben integrarse en el pipeline.
Tipos de pruebas de seguridad
SAST (Static Application Security Testing)
SAST analiza el código fuente sin ejecutar la aplicación. Busca patrones conocidos como SQL injection, uso inseguro de criptografía o secretos hardcodeados. La ventaja radica en la detección temprana durante el desarrollo, antes de que el código llegue a producción. Normalmente se ejecuta en el IDE o en cada commit. El inconveniente es que genera falsos positivos y no puede identificar problemas en tiempo de ejecución.
DAST (Dynamic Application Security Testing)
DAST prueba la aplicación en ejecución desde una perspectiva externa. Simula ataques como lo haría un atacante externo e inspecciona peticiones HTTP, sesiones, formularios y APIs. DAST encuentra errores de configuración y problemas en tiempo de ejecución que SAST no puede detectar. Se despliega habitualmente contra entornos de staging o testing. La desventaja es que interviene tarde en el ciclo y no identifica líneas específicas de código.
SCA (Software Composition Analysis)
SCA examina librerías, frameworks e imágenes de contenedores incluidas en busca de vulnerabilidades conocidas. El software moderno se compone en gran medida de código de terceros, por lo que SCA es esencial. Contrasta dependencias con bases de datos como NVD u OSV. Se ejecuta en cada pull request y bloquea cuando hay CVEs críticos. Protege contra ataques en la cadena de suministro y componentes obsoletos.
Pentest (Penetration Testing)
Un pentest es un ataque simulado y dirigido llevado a cabo por expertos en seguridad experimentados. Combina herramientas automatizadas con enfoque manual y pensamiento creativo. Los pentests descubren vulnerabilidades complejas que los escáneres automatizados pasan por alto. Se realizan a menudo antes de lanzamientos importantes o cuando hay requisitos de cumplimiento normativo. Los pentests consumen tiempo y recursos, pero proporcionan resultados realistas.
Fuzzing
Fuzzing alimenta la aplicación con entradas inesperadas, aleatorias o inválidas. El objetivo es encontrar fallos, errores de memoria o comportamientos inesperados. Se utiliza frecuentemente en protocolos de red, parsers de archivos o APIs. Puede descubrir automáticamente vulnerabilidades que de otro modo solo se encontrarían mediante ataques específicos.
Security Review
Una revisión de seguridad es una inspección manual de la arquitectura, código o procesos realizada por desarrolladores experimentados o especialistas en seguridad. Complementa las pruebas automatizadas porque puede identificar errores de diseño, lagunas lógicas y debilidades en procesos empresariales. Las revisiones son especialmente valiosas en áreas críticas como autenticación, autorización o procesamiento de pagos.
OWASP Top 10
1. Injection
Los ataques de injection ocurren cuando datos no confiables se pasan como comandos o consultas a un intérprete. SQL injection es la forma más conocida, pero también existen command injection, LDAP injection o NoSQL injection. La defensa se logra con consultas parametrizadas, validación de entrada y escaping. Injection ha sido durante mucho tiempo la vulnerabilidad más peligrosa en aplicaciones web.
2. Broken Authentication
Broken Authentication abarca fallos en login, gestión de sesiones y recuperación de contraseña. Ejemplos incluyen reglas de contraseña débiles, falta de rate limiting, tokens de sesión inseguros o ausencia de autenticación multifactor. Los atacantes pueden secuestrar cuentas o suplantar usuarios. Las medidas correctivas incluyen políticas de contraseña sólidas, MFA, sesiones seguras y protección contra fuerza bruta.
3. Sensitive Data Exposure
Esta categoría describe la protección insuficiente de datos sensibles como contraseñas, números de tarjeta de crédito o datos de salud. Los datos a menudo se transmiten sin cifrar, se almacenan con hash débil o se dejan sin protección en la caché. La solución la proporcionan TLS, cifrado fuerte, hashing seguro y minimización de datos.
4. XML External Entities (XXE)
Los ataques XXE explotan parsers XML inseguros que cargan entidades externas. Los atacantes pueden leer archivos, ejecutar Server Side Request Forgery o iniciar ataques de denegación de servicio. La mejor defensa es deshabilitar DTDs externos y usar formatos de datos menos complejos como JSON.
5. Broken Access Control
Broken Access Control existe cuando usuarios pueden ver acciones o datos para los cuales no están autorizados. Ejemplos incluyen referencias directas a objetos, falta de verificación de permisos o URLs manipuladas. Una solución es implementar control de acceso centralizado y del lado del servidor que verifique cada petición sin asumir información del cliente.
6. Security Misconfiguration
Security Misconfiguration es la vulnerabilidad más frecuente. Comprende contraseñas por defecto, características innecesarias, puertos abiertos, headers de seguridad faltantes, software obsoleto o configuraciones CORS demasiado permisivas. El hardening regular, la automatización y las listas de verificación ayudan a evitar estos errores.
7. Cross-Site Scripting (XSS)
XSS permite la inyección de código script del lado del cliente en páginas web. Reflected XSS, Stored XSS y DOM-Based XSS son las tres formas principales. Los atacantes pueden robar cookies, secuestrar sesiones o ejecutar ataques de phishing. El output encoding, Content Security Policy, cookies HttpOnly y validación de entrada ofrecen protección.
8. Insecure Deserialization
Insecure Deserialization ocurre cuando se deserializan datos no confiables. Los atacantes pueden manipular objetos para lograr ejecución remota de código, escalada de privilegios o manipulación de datos. Las medidas incluyen usar formatos de datos seguros, firmar datos serializados o evitar la deserialización de entradas inseguras.
9. Using Components with Known Vulnerabilities
Las aplicaciones modernas utilizan docenas de librerías y frameworks. Los componentes obsoletos o vulnerables son un punto de entrada común para ataques. SCA, actualizaciones periódicas, gestión de dependencias y minimización de dependencias reducen el riesgo. Esta categoría está estrechamente relacionada con la seguridad de la cadena de suministro.
10. Insufficient Logging and Monitoring
Sin logging y monitoring adecuados, los ataques permanecen sin detección durante mucho tiempo. Logs faltantes, alerts insuficientes o ausencia de respuesta a incidentes permiten que los atacantes se propaguen. Lo importante es contar con logs centralizados, eventos significativos, alarmas ante anomalías y revisiones periódicas.
Herramientas importantes
OWASP ZAP
OWASP ZAP es un scanner gratuito y de código abierto para seguridad de aplicaciones web. Puede funcionar como proxy entre el navegador y la aplicación, automatizando muchos ataques comunes. ZAP es especialmente adecuado para DAST y se utiliza frecuentemente en entornos de staging o durante el desarrollo. Representa una buena solución inicial para pruebas automatizadas de seguridad web.
SonarQube
SonarQube es una plataforma para análisis estático de código. Además de evaluar la calidad del código, ofrece reglas de seguridad para SAST. Detecta inyecciones SQL, XSS, secretos codificados y muchos otros problemas directamente en el código fuente. SonarQube se integra bien en pipelines de CI/CD y está disponible para numerosos lenguajes de programación.
Snyk
Snyk se especializa en SCA, seguridad de contenedores e Infrastructure-as-Code. Identifica dependencias vulnerables, sugiere actualizaciones y puede crear Pull Requests automáticamente. Snyk es particularmente útil en proyectos modernos nativos de la nube con muchas bibliotecas y contenedores.
Burp Suite
Burp Suite es una plataforma profesional de Pentesting. Ofrece un proxy, scanner, repeater, intruder y muchas otras herramientas para pruebas manuales y semiautomatizadas. Burp Suite es el estándar de facto para pentesteros web y permite análisis profundos que las herramientas automatizadas no pueden realizar.
Nmap
Nmap es un escáner de red para detectar puertos abiertos, servicios y sistemas operativos. Se utiliza frecuentemente en la fase de reconnaissance de pentests. Nmap ayuda a entender la superficie de ataque de un servidor e identificar servicios expuestos innecesariamente.
Herramientas adicionales
- Trivy: Escáner para contenedores y repositorios.
- Bandit: SAST para Python.
- Semgrep: Análisis estático ligera para muchos lenguajes.
- Dependency-Check: Herramienta OWASP para verificar dependencias.
Ejemplo práctico
El siguiente pipeline muestra cómo integrar diferentes tipos de pruebas de seguridad de manera sensata en el ciclo de vida del software. Este ejemplo es ilustrativo porque la seguridad moderna no puede limitarse a una sola prueba: cada tipo de test detecta vulnerabilidades distintas en momentos diferentes. El orden está deliberadamente diseñado para que las pruebas rápidas y tempranas se ejecuten con frecuencia, mientras que las pruebas costosas y manuales se reservan para hitos importantes.
Integración en pipeline:
1. SAST en cada commit
2. SCA en cada pull request
3. DAST contra staging
4. Pentest antes de cada major release
5. Security Monitoring en producción
¿Por qué este orden?
- SAST en cada commit: Retroalimentación temprana, costos bajos, integración directa en el flujo de desarrollo.
- SCA en cada pull request: El código de terceros cambia constantemente, por eso se verifica con cada integración.
- DAST contra staging: La aplicación debe estar en ejecución, así que DAST llega en la fase de staging.
- Pentest antes de major releases: Manual y costoso, pero necesario para vulnerabilidades lógicas complejas.
- Security Monitoring en producción: Incluso después del release, se deben detectar ataques y anomalías.
Esta combinación sigue el principio Shift-Left: los problemas de seguridad se detectan lo más temprano posible y lo más tarde que sea necesario.
Ventajas y desventajas
| Ventajas | Desventajas |
|---|---|
| Detección temprana de vulnerabilidades | Falsos positivos en herramientas automáticas |
| Reducción de riesgos de seguridad | Los pentests son caros y consumen tiempo |
| Cumplimiento de requisitos de compliance | Las pruebas de seguridad no reemplazan un diseño seguro |
| Protección de datos y usuarios | Mantenimiento continuo de reglas necesario |
| Mejor reputación y confianza | Los entornos de prueba deben ser similares a producción |
| Ahorro de costos mediante detección temprana de errores | Se requiere conocimiento especializado |
Puntos clave para exámenes
- Security Testing: Término general para todas las pruebas que encuentran vulnerabilidades y debilidades.
- SAST: Análisis estático del código fuente, temprano en el ciclo, encuentra patrones de código, sin verificación en tiempo de ejecución.
- DAST: Análisis dinámico de aplicaciones en ejecución desde una perspectiva externa, encuentra errores de configuración.
- SCA: Análisis de dependencias para detectar vulnerabilidades conocidas y riesgos de licencia.
- Pentest: Ataque simulado por expertos, encuentra vulnerabilidades lógicas complejas.
- Fuzzing: Pruebas con entradas inesperadas para detectar fallos y vulnerabilidades.
- Security Review: Revisión manual de arquitectura, código y procesos.
- OWASP Top 10: Los diez riesgos de seguridad web más críticos, frecuentemente consultados en exámenes.
- Herramientas importantes: OWASP ZAP, SonarQube, Snyk, Burp Suite, Nmap.
- Shift Left Security: Integrar pruebas de seguridad lo más temprano posible en el pipeline.
- Defense in Depth: Múltiples capas de seguridad en lugar de una única medida.
- Compliance: Las pruebas de seguridad son a menudo un requisito para normas y regulaciones.
- False Positives: Las herramientas automatizadas pueden generar alarmas falsas que requieren verificación manual.
- Supply-Chain Security: Protección contra dependencias vulnerables o maliciosas.
Fuentes principales
- https://owasp.org/www-project-top-ten/
- https://owasp.org/www-project-zap/
- https://en.wikipedia.org/wiki/Security_testing
Preguntas frecuentes
¿Qué es Security Testing y por qué es importante?
Security Testing es el proceso dirigido a encontrar vulnerabilidades y debilidades en software. Es importante porque previene ataques, protege datos, cumple requisitos de compliance y refuerza la confianza de los usuarios.
¿Qué es SAST y cuándo se utiliza?
SAST significa Static Application Security Testing. Analiza el código fuente sin ejecutar la aplicación y se utiliza generalmente en cada commit o en el IDE para encontrar vulnerabilidades temprano.
¿Cuál es la diferencia entre SAST y DAST?
SAST analiza el código fuente de manera estática y se utiliza temprano en el ciclo. DAST prueba la aplicación en ejecución desde una perspectiva externa y encuentra problemas de configuración y tiempo de ejecución.
¿Qué es SCA y qué verifica?
SCA significa Software Composition Analysis. Verifica bibliotecas, frameworks y contenedores incluidos para detectar vulnerabilidades conocidas y ayuda a reducir riesgos de supply chain.
¿Qué es un Pentest y qué lo hace especial?
Un Pentest es un ataque simulado realizado por expertos en seguridad. Es especial porque encuentra vulnerabilidades lógicas complejas que las herramientas automatizadas no detectan.
¿Qué es Fuzzing y dónde se utiliza?
Fuzzing prueba aplicaciones con entradas inesperadas, aleatorias o inválidas. Se utiliza frecuentemente en APIs, parsers de archivos, protocolos de red y componentes del sistema para encontrar fallos y vulnerabilidades.
¿Qué es el OWASP Top 10?
El OWASP Top 10 es una lista de los diez riesgos de seguridad más críticos para aplicaciones web. Sirve como orientación para desarrolladores, testers y responsables de seguridad.
¿Qué herramientas se utilizan para Security Testing?
Las herramientas más utilizadas son OWASP ZAP para DAST, SonarQube para SAST, Snyk para SCA, Burp Suite para pentests y Nmap para escaneo de redes.
¿Qué es SQL Injection y cómo se previene?
SQL Injection es la inyección de código SQL a través de entradas para manipular bases de datos. Se previene mediante consultas parametrizadas, ORMs y validación estricta de entrada.
¿Qué es Cross-Site Scripting y qué tipos existen?
Cross-Site Scripting permite inyectar código de cliente en páginas web. Los tipos principales son Reflected XSS, Stored XSS y DOM-Based XSS.
¿Qué es un falso positivo?
Una vulnerabilidad reportada que en realidad no lo es. Requiere verificación manual.
¿Qué es Broken Authentication?
Vulnerabilidad en el proceso de autenticación, gestión de sesiones o recuperación de contraseña.
¿Qué es Broken Access Control?
Error que permite a usuarios no autorizados ver datos o realizar acciones.
¿Por qué Security Testing no es suficiente por sí solo?
Porque también se necesitan prácticas de diseño seguro y desarrollo seguro.
¿Qué es Shift Left Security?
Integrar pruebas de seguridad lo más temprano posible en el proceso.
¿Qué es un Security Review?
Revisión manual de arquitectura, código o procesos realizada por expertos.
¿Qué es Sensitive Data Exposure?
Protección insuficiente de datos sensibles como contraseñas o datos de tarjetas de crédito.
¿Qué es Security Misconfiguration?
Contraseñas predeterminadas, puertos abiertos, headers faltantes o software desactualizado.
¿Qué es un ataque XXE?
Ataque XML External Entity que explota parsers XML inseguros para leer archivos o realizar SSRF.
¿Qué es Insecure Deserialization?
Deserialización de datos no confiables que puede llevar a ejecución de código o escalada de privilegios.
Continúa en la ruta de aprendizaje de Software Testing
Todos los artículos de Software Testing están completos. Vuelve al primer artículo: Software Testing Grundlagen: Unit, Integration, E2E Tests, TDD, BDD.



