Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ideas clave
A fondo
Test
Esquema
seguridad en todas las etapas del ciclo de vida de desarrollo del software que incluya
del mismo.
organizaciones suele ser una combinación de dos o más modelos de los ciclos de
vida (cascada, espiral, etc.). Sin embargo, hay que tener en cuenta que lo importante
en las diferentes fases de este y unos hitos o puntos de control donde se verifiquen
los entregables de cada fase. Entre las razones principales para añadir prácticas de
codificación.
del software, pues el resultante de un ciclo de vida S-SDLC será más robusto
código.
▸ Estudiar las prácticas de seguridad aplicables en estas fases del SDLC, como
Hasta hace unos pocos años, las pruebas de software se desarrollaban en base a la
de vulnerabilidades.
Identificando los riesgos del sistema y diseñando las pruebas en base a ellos
aproximaciones:
siguientes:
de estado confiables.
integración del sistema. Se deben de utilizar los modelos de ataque, casos de abuso
y análisis de riesgos desarrollados al comienzo del ciclo de vida, para mejorar el plan
de pruebas con casos diseñados desde el punto de vista de los atacantes basados
en los escenarios de abuso. Esto implica tanto pruebas de caja negra como de caja
blanca.
Técnicas de pruebas que son particularmente útiles para las pruebas basadas en
donde en realidad existe un falso positivo. Hay que revisar el resultado de las
Figura 4. Puntos fuertes y débiles pruebas caja blanca. Fuente: adaptado de López, S. (2012).
defectos más difícil de manejar, además son tanto frecuentes como críticos.
Lamentablemente, averiguar si un programa tiene vulnerabilidades de nivel de
ser limitada al código que requiere garantía muy alta de seguridad. Para la
Figura 5. Puntos fuertes y débiles pruebas caja negra. Fuente: adaptado de López, S. (2012).
▸ Metasploit Frameword
▸ Core Impact
• Licencia: comercial
▸ Canvas
• Licencia: comercial
Herramientas DAST:
▸ Acunetix WVS
• S.O.: Windows
▸ AppScan
• Licencia: comercial
• S.O.: Windows
▸ Burp Suite
• S.O.: Windows/Iun
▸ GamaScan
• Licencia: comercial
• S.O.: Windows
▸ Grabber
• S.O.: Python
▸ Grendel-Scan
▸ N-Stealth
• Licencia: comercial
• S.O.: Windows
▸ Inviciti
• Licencia: comercial
• S.O.: Windows
▸ Nikto
• S.O.: Unix/Linux
▸ NTOSpider
• Licencia: comercial
• S.O.: Windows
▸ ParosPro
• Licencia: comercial
• S.O.: Windows
▸ QualysGuard
• Licencia: comercial
• S.O.: N/A
▸ Retina
• Licencia: comercial
• S.O.: Windows
▸ SecPoint Penetrator
• Licencia: comercial
▸ Trustkeeper Scanner
• Licencia: comercial
• S.O.: SaaS
▸ Vega
▸ Wapiti
▸ WebApp360
• Licencia: comercial
• S.O.: Windows
▸ WebInspect
• Licencia: comercial
• S.O.: Windows
▸ WebKing
• Licencia: comercial
▸ Websecurify
▸ Wikto
• S.O.: Windows
▸ Zap
inyectados no deben limitarse solo a aquellos que simulan ataques. Para obtener
una comprensión más completa de todos los posibles comportamientos del software
y sus estados, el probador también debe inyectar fallos que simulan condiciones muy
poco probables, incluso los «imposibles».
de este. Las pruebas se llevan a cabo mediante un fuzzer, programa o script que
realiza, modifica o combina entradas del software, para revelar cómo se comporta.
Suelen ser específicos de un tipo particular de entrada, como HTTP, y se escriben
para ser utilizados para probar un programa específico, por lo que no son fácilmente
reutilizables. Sin embargo, su valor radica en su especificidad, ya que a menudo
puede revelar vulnerabilidades de seguridad que las herramientas genéricas de
evaluación no detectan. Para que sean eficaces se requiere que el probador tenga
una comprensión completa del software que está probando y la forma en que
interactúa con entidades externas, cuyos datos simulará el fuzzer. En la siguiente
tabla se presenta herramientas de este tipo.
▸ Wfuzz:fuzzer para web que aplica fuerza bruta sobre el protocolo HTTP. Realiza
▸ Netcat: Utilidad Unix que lee y escribe datos a través de conexiones de red usando
los protocolos TCP o UDP. Está diseñada para ser una utilidad de tipo back-end que
pueda ser usada directa o fácilmente manejada por otros programas y scripts.
▸ Sulley: extras para gestionar fuzzing, como parte de las pruebas de penetración.
▸ Firewalk: emplea técnicas del estilo traceroute para determinar las reglas de filtrado
Nmap y Retina.
▸ Nessus
• Licencia: libre
▸ Nexpose
• Licencia: comercial
▸ AppDetective
• Licencia: comercial
• S.O.: Windows
▸ Open Vas
• Licencia: Libre
• S.O.: linux
▸ GFI LANguard
• Licencia: comercial
• S.O.: Windows
▸ MBSA
• Licencia: freeware
• S.O.: Windows
▸ Nmap
• Licencia: GPL
• S.O.: Windows
▸ SATAN
• Licencia: comercial
• S.O.: Linux/Unix
• Licencia: comercial
• S.O.: Windows
• Licencia: comercial
• S.O.: Windows
• Licencia: comercial
• S.O.: Windows
tipo de análisis de seguridad, que combina pruebas de caja blanca y negra, que tiene
otra de las pruebas enfocadas al análisis de aplicaciones, tanto web como de otro
tipo, que implica el uso del código fuente y del binario ejecutable, compilado a partir
externas de la muestra. El revisor sigue y analiza los datos que el programa produce
como resultado de su ejecución, de forma que cualquier vulnerabilidad o anomalía
que surja en dicha interfaz se traza simultáneamente con el código fuente que la
genera con mayor eficacia. En realidad, en este tipo de revisión se realizan tres
tipos de análisis:
permite al motor IAST producir resultados más precisos y verificar una gama más
▸ SEEKER.
Figura 7. Distribución pruebas de seguridad a lo largo de las fases del S-SDLC. Fuente: elaboración propia.
seguridad que se han de realizar en el curso del desarrollo de una aplicación. En los
disponibles, tanto comerciales como de open source, para qué lenguajes están
disponibles, cómo y cuándo se tienen que utilizar y cómo se enmarca el uso de estas
Los problemas de seguridad de una aplicación pueden ser resultado de dos tipos de
errores principales:
etc.
de código.
Los falsos positivos son, seguramente, indeseables, pero desde una perspectiva de
seguridad, los falsos negativos son mucho peores. Con un falso negativo, un
penitencia por un falso negativo es mucho mayor, pues no solo se paga el precio
asociado por tener una vulnerabilidad en el código, se vive con un sentido falso de
seguridad que se deriva del hecho de que la herramienta hizo parecer que todo era
correcto.
herramienta de esta.
seguridad pasados por alto es elevada, por lo que este tipo de herramientas, en
general, producen más falsos positivos para reducir al mínimo falsos negativos.
diferente.
asignada».
en: https://www.microfocus.com/es-es/products/static-code-analysis-
sast/overview
escalabilidad.
(abstracción del código, modelo de autómata de estado finito, etc.) que representa el
Figura 11. Diagrama de bloques para una herramienta genérica de análisis de código. Fuente: elaboración propia.
compiladores y las herramientas de análisis estático, como son los componentes que
anterior en una estructura del árbol, más útil para el posterior análisis. Capturan la
sintaxis del texto de programa creando una estructura de datos denominada árbol
de sintaxis abstracto (AST). Con la tabla de símbolos realiza la comprobación de
tipos typechecking.
▸ Pointer Aliasing. Los alias de los punteros son otra clase de problema del flujo de
ejecución, lo que elimina los caminos falsos, que son caminos por los cuales el
código nunca puede ejecutarse porque son lógicamente incoherentes.
aspectos del programa que no son relevantes. Modela el programa como una
solo debería ser liberada una vez» y «solo los punteros no nulos deberían ser
referenciados» es fácil representarlas como pequeños autómatas de estado finito.
averiguar si, dada una expresión, hay alguna combinación en los valores de las
como libres (open source), para lenguajes como C/C++ y Java, aunque las
• Licencia: comercial.
▸ AppScam de IBM.
• Licencia: comercial
▸ Prevent de Coverity
• Licencia: comercial
▸ K8 Inshight de Klocwork,
• Licencia: comercial
▸ VERACODE
• Licencia: SaaS
▸ CXSUITE (CHECKMARX)
• Licencia: comercial
▸ CodeSonar de Grammatech,
• Licencia: comercial
• Lenguaje: C, C++
• Licencia: libre
• Lenguaje: C
• Licencia: libre
• Lenguaje: C
• Licencia: libre
• Lenguaje: C
▸ Jtest de Parasoft
• Licencia: comercial
• Lenguaje: Java
▸ FindBugs de Maryland k,
• Licencia: libre
• Lenguaje: Java
▸ Java PathFinder
• Lenguaje: Java
▸ Cppcheck
• Licencia: libre
• Lenguaje: C,C++
▸ Polyspace de Mathworks.
• Licencia: comercial
• Lenguaje: C, ada
• Licencia: comercial
• Lenguaje: C, C++
por parte de los usuarios. Las actividades de seguridad a realizar en esta fase
tanto del tipo de software (por ejemplo, autenticación) como de los dispositivos
ataque.
mediante otras pruebas realizadas fuera del entorno de producción. Deben tratar de
ya que este tipo de problema tiende a ser pasado por alto por otras técnicas de
prueba.
El plan de pruebas de penetración debe incluir los «peores» escenarios en los que
capturar:
▸ La política de seguridad del sistema se supone que debe respetar o hacer respetar.
▸ Amenazas previstas.
modelos de ataque).
una aplicación.
Accede al vídeo:https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?
id=c42d5ade-161a-4fa2-b7a9-adf700cff2b6
Una buena parte de los defectos y vulnerabilidades del software no está relacionada
con la seguridad implican un mal uso de una aplicación, inesperado y descubierto por
Las pruebas de penetración son, de forma general, las más aplicadas de todas las
mejores prácticas de seguridad del software, y suelen ser parte del proceso de
Una limitación principal de este acercamiento es que casi siempre representa una
penetración. Esto es así, sobre todo, porque estos problemas pueden ser
rápidamente.
pruebas de penetración a menudo son usadas como una excusa para declarar la
tipos de pruebas:
▸ Escaneo de vulnerabilidades.
▸ Explotación de vulnerabilidades.
▸ Fuzz testing.
fuzzing pueden observar cómo se ejecuta un sistema, pueden someter los datos
mal formados, malévolos y arbitrarios en los puntos de entrada del sistema en una
análisis. Cuando es posible, el empleo de estas herramientas se debe dirigir por los
▸ Distribución.
▸ Despliegue.
▸ Operaciones.
Distribución
agentes maliciosos.
de propiedad intelectual.
▸ Distribuir el software con una configuración por defecto segura y lo más restrictiva
posible.
instalación y configuración.
▸ Revisión y limpieza de todo el código fuente por el visible usuario (por ejemplo,
Despliegue
proceso:
▸ Continúa por el sistema operativo y otro software de base como puede ser un
Operaciones
y las operaciones no son parte del proceso de desarrollo de software. Hay que
ajustar los controles de acceso a la red y niveles del sistema operativo, así como
externo habrá que revisar el análisis de riesgos y, si hay nuevas amenazas y riesgos,
lo tanto, repetir la revisión de este, los tests de seguridad basados en el riesgo que
penetración.
el que es posible que se tengan que realizar varias veces el mismo tipo de
Accede al vídeo:https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?
id=7e666bb0-4150-4be9-8932-adf700cff21e
Professional.
Dorofee, A., Woody, C., Alberts, C., Creel, R. y Ellison, R. J. (2013). A systemic
systemic-approach-assessing-software-supply-chain-risk
aseguramiento del software durante todo el proceso de adquisición, durante las fases
seguimiento.
Correa, R., Bermejo Higuera, J. R., Higuera, J. B., Sicilia Montalvo, J. A., Rubio, M.
https://www.ingentaconnect.com/content/tsp/cmes/2021/00000126/00000001/art0000
seguridad de caja blanca y caja negra, para llevar a cabo la validación de seguridad
generados en una fase se utilizan como alimentación de las siguientes para obtener
SDLC).
Bessey, A. et al. (2010). A Few Billion Lines of Code Later: Using Static Analysis to
Find Bugs in the Real World. Communications of the ACM, Vol. 53 No. 2, 66-75.
http://cacm.acm.org/magazines/2010/2/69354-a-few-billion-lines-of-code-later/fulltext
A. Perspectiva gerencia.
B. Perspectiva atacante.
C. Perspectiva usuario.
C. Reglas de la herramienta.
A. Taint Propagation.
B. Análisis puntual.
C. Model checking.
B. Revisan el código.
de los probadores.
prácticas:
restrictiva posible.
desarrollo.
ataques.
según su criterio podrían tener sobre algunas partes del código que pudieran
código que pudieran ser más fáciles para realizar las pruebas dinámicas
nuevo una gran cantidad de código para ver dónde el nuevo ataque podría
tener éxito.
D. El análisis estático puede encontrar errores tempranamente en el
desarrollo, aún antes de que el programa sea ejecutado por primera vez.
ataque.
escalabilidad.
analiza.
ha expuesto?
A. Un falso positivo.
B. Un falso negativo.