capítulo 2 estado del arte
TRANSCRIPT
14
Capítulo 2 – Estado del arte
En este capítulo se mencionan las tecnologías que fueron necesarias para llevar a
cabo la resolución del problema planteado, además de otras posibles soluciones para
el mismo propósito
2.1 Optimización de código
La optimización de código es muy importante ya que hace que el código sea más
eficiente ahorrando desde el tiempo en el que se ejecuta hasta la cantidad de
memoria que puede llegar a utilizar. La importancia de la optimización de código
radica principalmente en la manera en la que el programa funciona y en la que se
utilizan los recursos.
Hay dos condiciones que se deben tomar en cuenta principalmente al momento de
optimizar código:
- El código optimizado se ha de comportar igual que el código de partida excepto
por ser más rápido u ocupar menos espacio.
- Hay que buscar transformaciones que no modifiquen el comportamiento del
código según el comportamiento definido para el lenguaje de programación.
Las ventajas de optimizar código son las siguientes:
- Permite generar un código fuente estructurado y ordenado.
- Permite lograr una mayor legibilidad de tu código fuente.
- Permite crear sitios web y/o aplicaciones más rápidas.
- Facilita el proceso de identificación y depuración de errores.
- Simplifica el trabajo en equipo.
- Facilita las tareas de revisión y mantenimiento.
- Agiliza el proceso de desarrollo o extensión de la plataforma.
El proceso de optimización puede llegar a ser muy tardado, dependiendo del número
de líneas de código que se tengan. A continuación se hablara de la forma en que
empresas de gran dimensión llevan a cabo sus optimizaciones, e incluso automatizan
el proceso de optimización.
15
Tipos de optimización de código
Existen diversas formas de optimización de código puede llevarse a cabo. En este
apartado se hablaran de dos tipos: locales y globales.
Locales
La optimización local se realiza sobre módulos del programa. En la mayoría de las
ocasiones a través de funciones, métodos, procedimientos, clases, etc. Las
características de las optimizaciones locales es que solo se ven reflejados en dichas
secciones. La optimización local sirve cuando un bloque de programa o sección es
crítico (la entrada y salida, la concurrencia, la rapidez y confiabilidad de un conjunto
de instrucciones).
Existen técnicas para poder llevar a cabo la optimización de código local. Las
mencionadas a continuación son algunas de ellas:
- Folding
- Propagación de constantes
- Reducción de potencia
- Reducción de sub expresiones comunes
Folding (Ensambla miento)
El ensambla miento es remplazar las expresiones por su resultado cuando se pueden
evaluar en tiempo de compilación (resultado constante). Ejemplo:
A=2+3+A+C -> A=5+A+C
Estas optimizaciones permiten que el programador utilice cálculos entre constantes
representados explícitamente sin introducir ineficiencias.
Propagación de Constantes
Desde que se asigna a una variable un valor constante hasta la siguiente asignación,
se considera a la variable equivalente a la constante. PI y G2R se consideran
constantes hasta la próxima asignación.
Estas optimizaciones permiten que el programador utilice variables como constantes
16
sin introducir ineficiencias.
Reducción de Potencia
Se busca sustituir operaciones costosas por otras más simples.
Ejemplo:
– Sustituir productos por sumas.
a=2*a
a=a+a
2.2.1.2 Globales
El tipo de Optimización Global consiste en las mejoras pero refiriéndose al código del
programa en general.
Grafo del flujo de ejecución
– Antes de realizar una optimización global es necesario crear el grafo de flujo de
ejecución.
– El grafo de flujo de ejecución representa todos los caminos posibles de ejecución
del programa.
– La información contenida en el grafo es útil para el programador y el optimizador.
2.2 Lenguaje Bash
El lenguaje usado por Bash está definido por su propio intérprete y combina la sintaxis
de otros Shells, como el Korn Shell (ksh) o el C Shell (csh). Muchos de los comandos
que usualmente se usan en la consola también pueden usarse en los scripts, salvo
aquellos que pertenecen estrictamente a una distribución en particular.
Como se mencionó anteriormente, un script es un archivo que contiene código escrito
en determinado lenguaje de programación que el sistema usa para determinada
tarea. No es necesario que tenga una entrada externa ni interfaz gráfica, pero sí que
provoque una salida de datos procesados (por más de que el usuario no los vea).
Estructura de un Script
Para empezar debemos contar con un editor de texto y ganas de programar. Los
archivos que guardamos con extensión .sh podrán ser ejecutados (o interpretados)
17
por la consola, siempre y cuando la primera línea sea la siguiente:
#!/bin/bash
Esto le dice al sistema que deberá usar la consola para ejecutar el archivo. Además,
el carácter # permite escribir comentarios.
Características únicas de Bash
La mayoría de los Shell scripts Bourne pueden ejecutarse por Bash sin ningún
cambio.
La sintaxis de órdenes de Bash incluye ideas tomadas desde el Korn Shell (ksh) y el
C Shell (csh), como la edición de la línea de órdenes, el historial de órdenes, la pila
de directorios, las variables $RANDOM y $PPID, y la sintaxis de substitución de
órdenes POSIX: $(...).
Otra de las características que Bash proporciona es el hecho de ser un intérprete de
órdenes interactivo, ya que proporciona autocompletado de nombres de programas,
nombres de archivos, nombres de variables, etc, cuando el usuario pulsa la
tecla TAB.
Los scripts de bash reciben los parámetros que le pasa la Shell como $1, $2,..., $n.
Podemos saber cuántos hemos recibido con el símbolo $#.
Ejemplo de uso
Por ejemplo, si nuestro script necesita dos parámetros pondremos:
if [ $# -lt 2 ]; then
echo "Necesitas pasar dos parámetros"
fi
18
Los comandos más usuales
Tabla 2.1
2.3 Build
En el contexto de programación, un build es una versión de un programa. Como una
regla, un build es una versión de pre-lanzamiento y como tal, es identificada por un
número de lanzamiento. Builds repetitivos son una parte importante del proceso de
desarrollo. A través del desarrollo, los componentes de la aplicación son conectados
y repetidamente compilados para propósitos de pruebas, para asegurar la
confiabilidad del producto final. Las herramientas de buildeo así como make o ant, le
permiten a los desarrolladores automatizar algunas tareas de programación.
Como un verbo, buildear puede interpretarse como escribir código o poner
19
componentes de código individual de un programa.
Hay muchas cosas que un “build” puede contener:
Compilación de archivos de código (para lenguajes/entornos que soporten un paso
de compilación separado/explicito)
Enlazando un código de objeto (para lenguajes/entornos que soporten pasos de
enlace separados/explícitos)
Paquetes de distribución de producción, también llamados “instaladores”.
Generación de documentación que esta incrustada sin importar los archivos de
código fuente (Doxygen, Javadoc)
Ejecución de pruebas automatizadas como unit tests, pruebas de análisis estático,
prueba de rendimiento
Generación de reportes que le indican al equipo de desarrollo como ocurren muchas
advertencias y errores durante un build
Despliegue de paquetes de distribución. Por ejemplo, el build puede
automáticamente desplegar/publicar una nueva versión de una aplicación web
(asumiendo que el build se ejecutó correctamente)
El “build” puede llevarse a cabo “a mano” o puede ser automatizado, o alguna forma
hibrida entre ambas formas. Un build manual que requiere comandos de buildeo
como compiladores para ser ejecutados uno por uno. Un build automatizado
empaqueta todas las herramientas de buildeo en un solo build de mayor magnitud.
Este programa puede (idealmente) ejecutado en un solo paso.
2.4 Herramientas para llevar a cabo un build
2.4.1 GNU build system
El GNU build system conocido también como Autotools es un conjunto de herramientas
producido por el proyecto GNU. Estas herramientas están diseñadas para ayudar a
crear paquetes de fuente portable a varios sistemas Unix. El GNU build system forma
parte de GNU toolchain y se usa mucho para desarrollar software libre. Aunque las
herramientas que contiene el GNU build system son GPL no existe ninguna restricción
para crear software portable no libre con él.
20
Herramientas incluidas con GNU build system
El GNU build system comprende los programas de
utilidad GNU Autoconf, Automake y Libtool. Otras herramientas usadas frecuentemente
son el programa GNU make, GNU gettext, pkg-config y la GNU Compiler
Collection (GCC).
GNU Autoconf
Autoconf procesa los archivos configure.in o configure.ac (aunque se recomienda
usar configure.ac1 ). Cuando ejecuta el script de configuración también puede procesar
otros archivos como Makefile.in para producir como salida un archivo Makefile.
Autoconf se usa para intentar salvar las diferencias que existen entre distintos tipos
de Unix. Por ejemplo, algunos sistemas Unix pueden tener funcionalidades que no
existen o no funcionan en otros sistemas. Autoconf puede detectar ese problema y busca
la forma de solucionarlo. La salida de Autoconf es un script denominado configure.
Autoconf incluye la herramienta Autoheader que se usa para manejar los archivos de
cabecera de C.
GNU Automake
Automake ayuda a crear archivos Makefile portables. Estos son procesados después por
la herramienta make . Toma como entrada un archivo Makefile.am y lo transforma en
un Makefile.in . Este, a su vez, es utilizado por Autoconf para generar el
archivo Makefile final.
GNU Libtool
21
Libtool ayuda a crear bibliotecas estáticas y dinámicas para varios sistemas
operativos Unix. Libtool abstrae el proceso de creación de las bibliotecas ocultando las
diferencias entre los distintos sistemas (entre GNU/Linux y Solaris por ejemplo).
Ventajas de GNU build system
El GNU build system provee de un entorno de programación que permite escribir código
portable. Al menos entre distintos tipos de Unix. También logra que el proceso de
construcción sea más fácil para el usuario. Logrando que el usuario tan solo necesite un
pequeño número de comandos para construir e instalar el programa.
Las utilidades usadas por el GNU build system son necesarias exclusivamente en la
máquina de desarrollo. Los usuarios no necesitan Autoconf , Automake o Libtool para
construir o instalar el software. Esto hace que el GNU build system sea auto contenido.
Tan solo hacen falta herramientas estándares de Unix para construirlo. Esto se consigue
usando scripts que ayudan a configurar el software para el sistema operativo de un
determinado usuario.
Las utilidades disponibles en el GNU build system pueden ser usadas juntas o separadas.
Un proyecto puede usar una de ellas sin necesidad de utilizar el resto.
Desventajas de GNU build system
El GNU build system usa scripts compatibles con la shell Bourne para ayudar al usuario
en la configuración y en el proceso de construcción. Sin embargo hay algunos sistemas
operativos (como la familia de Microsoft Windows) que no pueden ejecutar los scripts de
la shell Bourne por sí mismos. Esto hace más difícil construir software en los Sistemas
Operativos Windows que en un sistema Unix. De todas formas se puede instalar el
sistema MinGW en Windows para proveer de una capa de compatibilidad (y
opcionalmente Cygwin para añadir compatibilidad con POSIX). De esta forma se
dispondría de un entorno con todas las herramientas propias de Unix.
22
Los proyectos que usan el GNU build system pueden disponer, o no, de un
archivo configure. Si no dispone de él se puede generar siguiendo estos pasos:
$aclocal
$autoheader
$automake
$ autoconf
No todos los comandos son necesarios. Dependiendo del uso que haga el proyecto del
GNU build system puede que tengamos que utilizar uno o más de estos pasos.
2.4.2 ANT
Apache Ant es una herramienta usada en programación para la realización de tareas
mecánicas y repetitivas, normalmente durante la fase de compilación y construcción
(build). Es similar a Make pero desarrollado en lenguaje Java y requiere la plataforma
Java.
Esta herramienta, hecha en el lenguaje de programación Java, tiene la ventaja de no
depender de las órdenes del shell de cada sistema operativo, sino que se basa en
archivos de configuración XML y clases Java para la realización de las distintas tareas,
siendo idónea como solución multi-plataforma.
Algunas consideraciones a tener en cuenta
Al ser una herramienta basada en XML, los archivos Ant deben ser escritos en XML.
La mayoría de las antiguas herramientas — las que se usan todos los días, como <javac>,
<exec> y <java> — tienen malas configuraciones por defecto, valores para opciones que
no son coherentes con las tareas más recientes.
Cuando se expanden las propiedades en una cadena o un elemento de texto, las
propiedades no definidas no son planteadas como error, sino que se dejan como una
referencia sin expandir (ej.: ${unassigned.property}).
23
No es un lenguaje para un flujo de trabajo general, y no debería ser usado como tal.
Ejecución de ANT
Para ejecutar ANT basta con escribir ant en la línea de comandos. Si se ha especificado
la ejecución de un objetivo por defecto en la cabecera del proyecto del fichero build.xml
no es necesario el uso de ningún parámetro ya que, como se acaba de ver en el ejemplo
anterior, se ejecutara este por defecto. Para utilizar un buildfile diferente de build.xml hay
que añadir el parámetro -buildfile nombre_fichero, donde nombre_fichero es el buildfile
que se quiere utilizar:
ant -buildfile buildfile_alt.xml
Si se desea ejecutar uno o varios objetivos concretos, se debe añadir el nombre de este
o estos objetivos en la línea de comandos vv:
ant clean
En este caso se ignorará el objetivo indicado en la cabecera del proyecto.
Configuración
Una vez obtenida la anterior distribución de ANT, se deben seguir los siguientes pasos:
- Añadir el directorio "bin" al path. - Asignar a la variable de entorno "ANT_HOME" la ruta
donde se ha instalado ANT. - Opcionalmente, asignar a la variable de entorno
"JAVA_HOME" la ruta donde se ha instalado el JDK.
Dependiendo del sistema operativo en el que se encuentre se tiene configuración distinta.
A continuación se muestran unos ejemplos:
24
Windows y OS/2
(Suponiendo que se ha instalado ANT en c:\ant\)
set ANT_HOME=c:\ant
set JAVA_HOME=c:\jdk1.2.2
set PATH=%PATH%;%ANT_HOME%\bin
Unix (bash)
(Suponiendo que se ha instalado ANT en /usr/local/ant)
export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/local/jdk-1.2.2
export PATH=${PATH}:${ANT_HOME}/bin
Unix (csh)
setenv ANT_HOME /usr/local/ant
setenv JAVA_HOME /usr/local/jdk-1.2.2
set path=( $path $ANT_HOME/bin )
2.5 Herramientas de análisis de código
Son herramientas diseñadas para analizar código fuente y/ o compilar la versión de un
código para encontrar errores en la seguridad idealmente, estas herramientas
encontraran automáticamente los errores en la seguridad de alto grado.
Algunas herramientas están comenzando a migrar al IDE. Por los tipos de problemas
que pueden ser detectados durante el desarrollo de software en su misma fase, esta es
una fase con mucho remarque en el ciclo de desarrollo puesto que es el momento
25
perfecto para emplear dichas herramientas, al mismo tiempo que nos proveen de
retroalimentación (al desarrollador) acerca de incidencias que pueden estar presentes
en el código fuente por sí mismo. Esta retroalimentación inmediata es muy útil,
especialmente cuando es comparada a encontrar vulnerabilidades mucho tiempo
después del ciclo de desarrollo.
Fortalezas
- Escalabilidad: puede ser ejecutada en muchos software repetitivamente.
- Útil para las cosas que tales herramientas pueden encontrar de forma automática
con alta confianza, tales como desbordamientos de búfer, fallas de inyección SQL,
etc.
- El output es bueno para los desarrolladores: realza la localización precisa de los
archivos de código, líneas de código e incluso las subsecciones de líneas que están
siendo afectadas.
Debilidades
- Muchos tipos de seguridad son muy difíciles de encontrar automáticamente así
como problemas de autentificación, defectos en el control de acceso, uso inseguro
de criptografía, etc. Aunque este tipo de herramientas están mejorando.
- Números grandes de falsos positivos.
- Frecuentemente no se pueden encontrar problemas en la configuración, ya que
estos no están presentes en el código.
- Difícil de “probar” que un problema en la seguridad de identidad es una verdadera
vulnerabilidad.
- Muchas de estas herramientas tienen dificultad al analizar código que no puede ser
compilado. Los analistas frecuentemente no pueden compilar código porque no
tienen las librerías correctas, todas las instrucciones de compilación, todo el código,
etc.
26
Criterios de selección importantes
- Requerimientos: deben tener soporte para tu idioma, aunque no siempre suele ser
un factor clave.
- Tipos de vulnerabilidades que puede detectar.
- ¿Requiere un ambiente de construcción de código completo?
- ¿Puede ejecutar binarios en vez de código?
- ¿Puede integrarse al IDE del usuario?
- El costo de licencia de la herramienta.
2.5 Error de software
Un error de software, comúnmente conocido como bug es un error o fallo en un programa
de computador o sistema de software que desencadena un resultado indeseado. Los
programas que ayudan a la detección y eliminación de errores de programación de
software son denominados depuradores (debuggers).
Defectos de diseño de programa
Diseños con colores inapropiados para las personas que padecen daltonismo
Diseños que usan textos con tipografías de difícil lectura por su tamaño o diseño
Diseños que fuerzan el uso del ratón o mouse sin dejar alternativas de teclado para
personas con disfunciones motrices
Diseños con implicaciones culturales, por ejemplo usando partes del cuerpo que en una
determinada cultura sean objeto de vergüenza o burla o símbolos con características de
identidad cultural o religiosa
Estimar que el equipo donde se instalará tiene determinadas características (como la
resolución de la pantalla, la velocidad del procesador, la cantidad de memoria o
conectividad a internet) propias de un equipo de gama alta, en vez de diseñar el software
para su ejecución en equipos normales.
Errores de programación comunes
27
División por cero
Ciclo infinito
Problemas aritméticos como desbordamientos (overflow) o subdesbordamientos
(underflow).
Exceder el tamaño del array
Utilizar una variable no inicializada
Acceder a memoria no permitida (Violación de acceso)
Pérdida de memoria (memory leak)
Desbordamiento o subdesbordamiento de la pila (estructura de datos)
Desbordamiento de búfer (buffer overflow)
Bloqueo mutuo (deadlock)
Indizado inadecuado de tablas en bases de datos.
Desbordamiento de la pila de recursión, cuando se dejan demasiadas llamadas en
espera.
Defectos de instalación o programación
Eliminación o sustitución de bibliotecas comunes a más de un programa o del sistema
(DLC Hell).
Reiniciar arbitrariamente la sesión de un usuario para que la instalación tenga efecto.
Suponer que el usuario tiene una conexión permanente a internet.
Utilizar como fuente enlaces simbólicos a ficheros que pueden cambiar de ubicación.
Códigos de errores de lenguajes de programación
La mayor parte de los lenguajes de programación presentan al menos dos tipos de errores
que permiten a los programadores manejar las fallas de los programas de una manera
eficiente y que no resulte agresiva con el usuario final. Dichos errores son
de compilación y errores en tiempo de ejecución.
Los errores de compilación normalmente inhiben que el código fuente derive en un
programa ejecutable, mientras que los errores en tiempo de ejecución son situaciones
28
específicas en las que un evento externo al programa impide su ejecución. Regularmente
un programador eficiente debe intentar imaginar cómo debe responder ante esos eventos
de manera que sea el programa y no el usuario o el sistema operativo los que resuelvan
el problema. Así por ejemplo un bloque de error no manejado podría hacer lo siguiente:
Abre el archivo "miarchivo" para escritura
Comienza a escribir datos en mi archivo
Cierra el archivo
Si "miarchivo" no existe (el programa o el usuario no tienen privilegios suficientes para
abrirlo), el sistema operativo regresará un error que el programa no atrapará y tendremos
un mensaje como "El archivo "miarchivo" no puede ser abierto para escritura" y botones
para reintentar, cancelar y abortar (en el sistema operativo Windows), que no tendrán otra
acción que repetirse indefinidamente sin posibilidad de salir de ese ciclo como no sea
dando por terminado violentamente el programa. Un código que permitiese atrapar el
error en tiempo de ejecución sería:
Abre el archivo "miarchivo" para escritura
Si el sistema operativo lo permite
Comienza a escribir datos en "miarchivo"
Si no lo permitió
Informa al usuario de lo que sucede
Regresa al usuario a un punto donde no haya conflicto (el menú
principal, por ejemplo)
Continúa operando normalmente
Los diferentes lenguajes de programación permiten diferentes construcciones lógicas a
los programadores para atrapar y resolver errores en tiempo de ejecución, como pueden
ser las sentencias assert, try y on error en diferentes lenguajes de programación.
2.6 Ejemplos de algunas herramientas de análisis estático de código
2.6.1 Pitbull SCC
29
Es una aplicación de software innovadora diseñada para resolver eficientemente la
aplicación del control de código con una compilación aplicada usando la integridad para
asegurarse que la producción no se vea afectada. Provee un valor agregado, ya que
permite que el análisis del código identifique si hay algún malware que afecte el
funcionamiento normal de la aplicación. Controla la importación de código y los archivos
compilados juntos con la exportación de archivos binarios. Tiene un rastreo riguroso
permitiéndole al auditor identificar que los archivos compilados sean colocados en la
producción y analizados correctamente.
Además de su funcionalidad, promueve la conformidad con las leyes y estándares de
regulación a cambio de procedimientos de control.
Beneficios
- Optimización de procesos: Automatiza el proceso de verificación de consistencia del
código fuente de la aplicación con archivos compilados para .NET, Java, php y cobol
usando la base de datos Microsoft SQL Server. Lineamientos con las mejores prácticas
para cambiar los procesos de control.
- Flexibilidad: habilidad para identificar datos sensibles, tablas clave, funciones críticas y
comandos sensibles entre otros para evaluar su uso en cada aplicación y para identificar
posibles códigos maliciosos. Importación, análisis y exportación de archivos que van
directo al entorno de producción. El almacenamiento de código fuente y los archivos
compilados para permitir un análisis y exportación en cualquier momento.
- Seguridad mejorada: reduce el riesgo descontrolado de cambios en la producción. La
autentificación de usuarios con Active Directory, DUO u OVD. La segregación de
funciones y permisos dentro de la aplicación para garantizar una gestión adecuada. Los
diferentes roles para usuarios responsables de aplicaciones, administradores, auditores,
configuradores, control de cambios, etc.
2.6.2 Source Patrol
Source Patrol es una herramienta estática para aplicaciones Java, es una herramienta
llamada Análisis de Pruebas de Seguridad (SAST), diseñadas por Pentest limitado a
30
proporcionar a los desarrolladores un medio intuitivo y sencillo para evaluar la seguridad
de las aplicaciones web. Se diferencia de la mayoría de las herramientas SAST porque
reside en el equipo de desarrollo, por lo que se integra en la fase más temprana del ciclo
de vida de desarrollo de sistemas (SDLC). Source Patrol pone el equipo de desarrollo de
vuelta en el asiento del conductor, proporcionando codificadores con retroalimentación
inmediata, sin necesidad de auditoría interna o especialistas en seguridad. La intención
es que los desarrolladores aprendan rápidamente a evitar los errores comunes de
seguridad que nosotros vemos como una empresa con demasiada frecuencia, educar y
capacitar al equipo lo que reduce tanto el número de vulnerabilidades de seguridad y los
costos de desarrollo.
Según la experiencia de Pentest como especialista en seguridad de aplicaciones es una
práctica común para participar en una evaluación de seguridad al final del proceso de
desarrollo. Esta evaluación es comúnmente el primer contacto con las pruebas de
seguridad de cualquier tipo y con frecuencia tiene como resultado vulnerabilidades de
seguridad significativos.
Cuando los desarrolladores comienzan a producir su código se enfrentan a un dilema
con respecto a las vulnerabilidades: dejar las vulnerabilidades sin atenderse con el riesgo
de que alguna persona pueda explotarlas y por lo tanto causar una perdida tanto en la
información que se maneja tanto como en su reputación como desarrollador o lidiar con
estas vulnerabilidades aunque esto afecte el tiempo de entrega de la aplicación.
Source Patrol se ha desarrollado en respuesta a la experiencia de Pentest con las
herramientas tradicionales de análisis de código estático. Estas herramientas han sido a
menudo soluciones complejas y costosas que han sido difíciles de instalar e
implementar, de acuerdo con las necesidades específicas de una compañía y, a menudo
producen despachos difíciles de manejar. En muchos casos, estas herramientas no se
despliegan regularmente como parte del ciclo de vida del desarrollo de sistemas, ya que
no están diseñados para su uso únicamente por el equipo de desarrollo.
31
Desarrollado específicamente para las aplicaciones Java y destinado a ser utilizado por
el equipo de desarrollo de aplicaciones. Source Patrol es como una solución fácil de
instalar, la entrega de informes se centraron con el fin de proporcionar información que
el equipo de desarrollo puede entender y actuar en consecuencia.
Source Patrol ha sido diseñado para ser utilizado como una parte integral del ciclo de
vida de desarrollo de sistemas para identificar las vulnerabilidades de seguridad y
dirección a través de las aplicaciones que entregan ciclo de vida de desarrollo de
sistemas que son los costos de desarrollo más seguros y reductores.
Ventajas de la Source Patrol:
- Identifica los riesgos de seguridad más temprano en el ciclo de desarrollo
- Diseñado para ser utilizado como puerta de entrada a la calidad en todo el
SDL
- Diseñado para su uso por y para los desarrolladores
- Produce informes inmediatos para la presentación de la información que un
desarrollador puede entender
- Identifica las acciones de remediación
2.6.3 Rogue Wave Software
Es una aplicación que ofrece rapidez en la solución de incidencias y técnicas de
código abierto para dar soporte, consultar y educar al equipo de desarrollo a lo largo
del ciclo de vida
Rogue Ware Software incluye:
- Acuerdos de servicio de nivel garantizados (SLAs) con todos los contactos de
soporte
- Soporte con cobertura de 24 horas.
- Acceso a técnicos de código abierto dedicados a CentOS.
- La confianza necesaria para solucionar los problemas de producción, optimizar el
rendimiento, y las actualizaciones de sistema completas.
- La experiencia para evaluar proyectos en cuanto a arquitectura y seguridad.
32
Soporte disponible para CentOS Linux con un equipo de desarrollo dedicado a
proveer parches y revisiones alojado en nuestro propio repositorio de CentOS.
Un arquitecto de código abierto es más que un simple desarrollador ellos tienen un
pensamiento influyente de líder capaz de diagnosticar, resolver y explicar incidencias
de dificultad técnica mientras proveen un cambio positivo a la organización. Ellos
logran esto entendiendo que muchas incidencias no son simplemente técnicas, estas
pueden estar envueltas en procesos y retos de política lo que significa que los
ambientes deben ser entendidos, las conversaciones deben ser guiadas y los
esfuerzos dirigidos hacia un área de progreso para evitar una parálisis en el desarrollo
del software.
2.6.4 Coverity Code Advisor
Coverity es una marca de productos de desarrollo de software de Synopsys que
consiste principalmente en el análisis de código estático o análisis de código
dinámico. Las herramientas le permiten a los ingenieros encontrar defectos de
seguridad y vulnerabilidades en el código escrito en C, C++, Java, C# y JavaScript.
La solución Coverity Code Advisor incluye un asesor de calidad y un asesor de
seguridad. Esta solución muestra los defectos en la calidad y en la seguridad en el
flujo de trabajo del desarrollador con una guía de como remediarlos basada en
técnicas patentadas de desarrollo.
Le da a los desarrolladores la información que necesitan para arreglar defectos
críticos de manera rápida y eficiente. Construye calidad y seguridad en desarrollo
para reducir el costo de rehacer y retrasar el lanzamiento del software al mercado.
Reduce el riesgo de fallos de software costoso y perjudicial para la marca y brechas
de seguridad en el campo o en la producción.
Esta solución utiliza un análisis sofisticado de código fuente para encontrar los
33
defectos más críticos.
2.6.5 Parasoft
Parasoft simplifica la complejidad del proceso de prueba de software que es vital para
una API.
- Esta diseñado desde cero para simplificar la prueba de APIs que no contengan
GUI.
- Generan pruebas extensivas, reusables, y fáciles de mantener con una cobertura
de 100%
- Diseñan pruebas sofisticadas sin necesidad de scripts o codificación
- Automatiza la regresión continua con sofisticadas validaciones
Parasoft también crea un ambiente de prueba simulado que provee acceso donde
sea a la hora que sea al comportamiento de recursos dependientes que no están
disponibles, que tienen un difícil acceso o que son difíciles de configurar para las
pruebas de desarrollo.
2.6.6 Klocwork
Klocwork es una herramienta que permite la entrega de código seguro y confiable.
Klocwork está pensado en resolver la problemática en la que se encuentran los
desarrolladores en la actualidad. Los estándares de desarrollo son más estrictos de
lo que eran antes y cada vez se vuelve más difícil encontrar bugs y arreglar defectos
de seguridad. Esta herramienta es la respuesta a las preguntas:
¿Cómo evitar que las ramas de datos y aplicaciones fallen antes de que sean llevadas
al cliente?
¿Cómo encontrar todos estos desperfectos de forma más temprana en el proceso de
manera que el desarrollador invierta más su tiempo en crear contenido de real valor
para el cliente en vez de perderlo buscando bugs y arreglándolos?
Comienza en el escritorio del desarrollador. Ahí es donde el código es escrito, creado
revisado y escrito de nuevo. Encontrar problemas aquí lo más rápido posible antes
de la construcción del proyecto se traduce a menos pruebas posteriores, lo que
impacta en un menor costo y tiempo invertido.
34
Klocwork Static Code Analysis es una interfaz web para la gestión del proyecto,
reportes, gestión de incidentes y gestión de usuarios.
Reportes y métricas
Klocwork Static Code Analysis permite a los gerentes acceder a reportes y métricas
que representan la productividad de su equipo y ayudar a las zonas con problemas
potenciales. Muchos reportes son generados automáticamente y se pueden crear
reportes personalizados para enfocarse en las cosas en las que se tiene mayor
interés.
Investigación y citar incidentes
Esta herramienta permite revisar la lista de incidentes, investigar la causa y
arreglarlos o citar las incidencias como mejor le parezca.
Revisión de código
La revisión de código se puede utilizar para:
- Crear revisiones de código desde su IDE (Visual Studio, Netbeans, Eclipse) o
desde la línea de comandos.
- Actualizar revisiones de código existentes con nuevas revisiones.
- Crear un feed personalizado por los usuarios, términos o componentes.
2.7 Sumario
La optimización de código permite mejorar el funcionamiento del software realizado.
Utilizarla en proyectos con miles líneas de código es muy importante, ya que permite
que el código que se desarrolla sea más claro, limpio y fácil de mantener.
Hay dos tipos de optimización de código: local y global. La optimización local se da
a solo un bloque de código o una función. Por otro lado, la optimización global afecta
a todo el programa en general.
La seguridad en el software desde siempre ha sido uno de los factores más
importantes al momento de desarrollar.