Está en la página 1de 5

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/370654209

La relación entre compiladores y la seguridad informática: un análisis estático

Preprint · May 2023

CITATIONS READS
0 122

2 authors, including:

Alvaro Norberto García Meza


University of San Carlos of Guatemala
1 PUBLICATION 0 CITATIONS

SEE PROFILE

All content following this page was uploaded by Alvaro Norberto García Meza on 10 May 2023.

The user has requested enhancement of the downloaded file.


Organización de lenguajes y compiladores 1
.

La relación entre compiladores y la seguridad informática: un análisis


estático.
Alvaro Norberto García Meza
e-mail: 3046971840116@ingenieria.usac.edu.gt
researchgate: https://www.researchgate.net/profile/Alvaro-Garcia-Meza

DESARROLLO
RESUMEN: En este artículo se explora la relación
entre los compiladores y la seguridad informática,
enfocándose en el análisis estático y en como esta 1.1 ¿Qué son las vulnerabilidades?
técnica puede ayudar a mejorar la calidad y seguridad de Las vulnerabilidades en el software son
los programas informáticos. Se define las simplemente debilidades en un sistema que los atacantes
vulnerabilidades en el software y cómo pueden ser pueden utilizar como ventaja para realizar actividades
aprovechadas por atacantes. Se detalla la importancia del ilícitas. En el contexto de seguridad informática las
análisis estático en la detección de vulnerabilidades y vulnerabilidades son defectos o descuidos específicos en
errores en el código fuente de los programas. Además, se una parte del software que permite que los atacantes
discute cómo los analizadores léxicos y sintácticos de los hagan cosas maliciosas donde pueden exponer
compiladores son componentes importantes en el información sensible, corromper o destruir un sistema o lo
proceso de análisis estático y cómo se relacionan con las peor de todo, tomar control de un sistema y beneficiarse
vulnerabilidades en el código fuente. También se aborda de él [1].
la importancia de la implementación de segura de las Una palabra muy conocida en el mundo de la
características del lenguaje en los compiladores para informática es “bug”, su traducción literal al español es
prevenir defectos. Por último, se discuten algunas “bicho” pero en el contexto informático su significado
herramientas de análisis estático y su papel en la mejora puede referirse a todos aquellos errores, descuidos o
de la seguridad informática de los programas. defectos en un programa que dan como resultado un
comportamiento inesperado y típicamente indeseable. La
PALABRAS CLAVE: Análisis estático, compiladores, mayoría de las vulnerabilidades en el software son bugs,
código fuente y vulnerabilidades. pero solo algunos bugs resultan ser vulnerabilidades de
seguridad que ponen en riesgo la integridad del sistema
[1].
INTRODUCCIÓN El proceso de atacar vulnerabilidades en un
programa es llamado “exploiting” su traducción al español
Los compiladores son una herramienta esencial en al igual que “bug” no tiene un significado especifico, pero
el proceso de desarrollo de software, ya que se encargan hace referencia a como los atacantes pueden explotar
de traducir el código fuente escrito por los programadores una vulnerabilidad ejecutando el programa de una
a un lenguaje de bajo nivel que puede ser ejecutado por manera inteligente alterando o monitoreando el
la máquina. Sin embargo, los compiladores también comportamiento de un sistema [2].
pueden ser utilizados para mejorar la seguridad de los
programas informáticos mediante el análisis estático del 1.1.1. Vulnerabilidades en el código fuente
código fuente. Las vulnerabilidades en el análisis de código fuente
El análisis estático es una técnica de revisión de pueden estar relacionadas con la forma en que los
código que se realiza sin necesidad de ejecutar el compiladores procesan el código fuente. Los defectos
programa, lo que permite detectar posibles pueden estar en el propio compilador donde, cualquier
vulnerabilidades de seguridad y errores en el código atacante conociendo las herramientas podría ser capaz
antes de que sea utilizado en un entorno de producción. de ejecutar código malicioso en el sistema que utiliza el
Las partes más utilizadas de un compilador en el análisis compilador.
son el analizador léxico ya que este descompone el Los problemas más comunes donde el compilador
código fuente en tokens y símbolos, por otro lado, el se relaciona y existen vulnerabilidades son en el análisis
analizador sintáctico verifica que estos tokens formen estático del código, a pesar de que este análisis utiliza
estructuras sintácticamente correctas. componentes de un compilador para su funcionamiento,
En este artículo, se explorará la relación entre los existen posibilidades donde esta técnica no esté
compiladores y la seguridad informática, enfocándose en preparada para ciertos tipos vulnerabilidades ya que el
el análisis estático y en cómo esta técnica puede ayudar código no es ejecutado, estas pueden filtrarse de manera
a mejorar la calidad y seguridad de los programas impredecible. Esto está estrechamente relacionado al
informáticos. otro problema que es la inyección de código malicioso
donde si el compilador no está preparado el atacante
puede insertar código en el momento de la ejecución que
sea perjudicial para el sistema o software.

1
Organización de lenguajes y compiladores 1
.

Otra vulnerabilidad que es independiente del 1.2.2. Técnicas para extraer información de un
atacante es en el momento de la implementación de las código fuente que utilizan ideas o partes de
características del lenguaje donde estas deben estar un compilador
implementadas de manera segura y consistente, si hay Existen varias técnicas y mecanismos los cuales
un problema en la implementación de una función de se utilizan para extraer información clave de un código
seguridad critica, podría abrir la puerta a una fuente. Como, por ejemplo:
vulnerabilidad.
1. Grep Análisis es una herramienta de línea de
comando utilizada para buscar patrones específicos
1.2 Análisis estático dentro de archivos de código fuente, donde da como
El termino de análisis estático se refiere a cualquier resultado todas las líneas del archivo analizado las
proceso de evaluar código sin ejecutarlo. El análisis coincidencias con el texto especificado. Es capaz de
estático es muy poderoso porque permite la rápida buscar patrones complejos utilizando expresiones
consideración de muchas posibilidades sin comprometer regulares. Todo esto lo hace utilizando como
al sistema. Las herramientas de los análisis estáticos concepto el análisis léxico el cual se encarga de
pueden explorar una larga cantidad de “¿y sí?” separar en tokens las palabras claves de un código
escenarios sin la necesidad de ir dentro de los procesos fuente y formar patrones especiales mediante la
computacionales requeridos. Un bueno analizador combinación de expresiones regulares y caracteres
estático provee una rapidez en obtener un consistente y especiales.
detallada evaluación del cuerpo del código fuente [3].
2. Comprobación de sangrado de código, en términos
En el caso de seguridad informática, el análisis simples asegura que el código se escriba de manera
estático es utilizado para examinar código fuente u objeto consistente y fácil de leer, lo que evita de errores y
de un programa ya que esta técnica detectará posibles vulnerabilidades de seguridad.
vulnerabilidades de seguridad y errores en el código que
podrían ser explotados por atacantes. El análisis estático 3. Búsqueda de patrones en el código, esta técnica se
se realiza mediante el uso de herramientas de análisis utiliza para encontrar ocurrencias de patrones
que examinan el código en busca de patrones que específicos en el código. Pueden existir patrones de
puedan indicar la presencia de vulnerabilidades o errores. diferentes tipos, tanto de errores como de
vulnerabilidad.
Durante el proceso de análisis, se examinan
aspectos del código fuente, como la sintaxis, la semántica Mucho de los compiladores de hoy en día ya
y la estructura del programa. Es por eso que se dice que cuentan con medidas de seguridad integradas para
los analizadores estáticos comparten muchos procesos prevenir los diferentes ataques en las diferentes fases del
de un compilador debido que, como similitud los compilador. Sin embargo, es importante tomar en cuenta
compiladores realizan un análisis sintáctico y semántico que aún pueden existir vulnerabilidades desconocidas o
del código para asegurarse de que cumple con las reglas no corregidas en los compiladores.
de la sintaxis del lenguaje para traducir el código a
lenguaje máquina. Todo esto puede realizar el analizador 1.2.3. Fases de construcción de un modelo de
estático con la gran diferencia que no ejecuta ni una sola análisis estático
línea de código. En la Figura 1 se observa un esquema que
describe las fases de construcción de un modelo de un
1.2.1. Tipos de análisis de código fuente analizador estático, donde al igual que las fases de un
relacionados con partes de un compilador compilador estas se ejecutan una seguida de la otra. Lo
En el análisis estático, los compiladores se que provoca que la salida de una etapa sea la entrada de
utilizan para llevar a cabo la fase de análisis léxico y la otra.
sintáctico del código fuente. Además, existen Como las primeras fases del compilador, análisis
herramientas de análisis estático que se basan en la léxico y sintáctico, un modelo de análisis estático cuenta
generación de árboles de sintaxis abstracta (AST). también con una fase importante, la internalización,
El análisis de flujo de datos es una técnica que donde se define la calidad del modelo final.
se centra en el seguimiento de los datos a través del La fase que le sigue a la Internalización en la
código fuente para identificar vulnerabilidades, como Figura 1 es la Derivación donde se genera un modelo del
fugas o inyecciones de información. conjunto de entidades y con modelo de ejecución, donde
En cuanto al código que se audita en el análisis se aplican técnicas de análisis que permitan extraer
estático, se trata del código fuente en si mismo. El código información del código y generar informes.
es procesado por el compilador para generar el árbol de
sintaxis abstracta, que luego es utilizado para por algunas
herramientas de análisis para identificar posibles
vulnerabilidades.

2
Organización de lenguajes y compiladores 1
.

1. Reconocer Sintaxis
El problema con la sintaxis es que al momento
de generar una máquina de estados que exprese la
gramática y el código a analizar sea complejo de
entender y mantener debido a la mala
documentación y los años de manipulación por el
equipo de la empresa es que se haga imposible o se
requiera mucha personalización para construir un
parser.

2. Ambigüedades sintácticas
Esto sucede cuando las respuestas esperadas
Figura 1. Fases de construcción de un analizador por ambos escenarios como el usuario y el parser
estático de código fuente. son diferentes, ya que a veces la gramática recorre
otros caminos debido a que los escenarios son en su
mayoría muy inesperados y más cuando el
1.2.4. Etapa de Internalización desarrollador realiza un código limpio.
La internalización que se muestra en la Figura 1 es
la que más relacionada esta a las fases de un compilador, Ahora se entiende el porque esta fase es la más
sin decir que esta etapa ofrece herramientas para realizar importante al momento de construir un modelo de análisis
el parseo, recorridos de sintaxis y muchas más. estático ya que las soluciones son muchas y al final cada
El objetivo en esta etapa es intentar aplicar técnicas una debe estar adaptada para un código fuente específico
como el parseo para generar un árbol AST. además de saber cuál es el objetivo por alcanzar.
En la Figura 2 se observa las dos fases de un Luego de haber tenido éxito en la fase de
compilador, cuando se crean los tokens de código fuente internalización, sigue la etapa del análisis del código
y luego el AST generado por la implementación de donde todo aquello implementado anteriormente nos
herramientas que generan la tarea de transformación. servirá para localizar todas las vulnerabilidades posibles,
Existen muchas herramientas que ahorran el trabajo, pero acá es donde entran las herramientas y técnicas para
su entorno de trabajo se ve reducido a unos cuantos extraer la información de un código fuente, donde se
lenguajes, en el caso de C se cuenta con Gcc, en Java destaca grep análisis e interpretación abstracta.
con Mono y Eclipse que a pesar de no ser un lenguaje
cuenta con plugins que facilitan el trabajo.

Figura 3. Análisis de código fuente. [5]

En la figura 3 se observa un caso de alguna


configuración contenida en un fichero, una contraseña
esta en texto claro, lo cual no presenta ningún peligro,
Figura 2: Etapa de internalización [4]. pero si un posible error, pero como este ejemplo pueden
haber muchos más complejos donde pueda venir
La etapa de internalización también se puede inyección de código malicioso el cual se podría detectar
realizar de manera manual donde los conceptos de un con una buena implementación de un análisis estático.
compilador resaltan ya que para llevar el caso del parseo
se cuentan con las clásicas herramientas como, utilizar Cabe destacar que el análisis estático cuenta con
LALR, GLR, Parsers, PEG y Parser Combiators. El muchas más herramientas y que quizá no estén muy
problema de aplicar estas herramientas manualmente es relacionadas con las fases de un compilador, pero a pesar
que surgen muchos problemas, entre estos problemas se del sin fin de técnicas y programas el análisis estático no
encuentra: pierde sus raíces las cuales siempre serán analizar un
código fuente para obtener de manera indirecta palabras
claves o tokens los cuales dan una mayor facilidad al
momento de construir la estructura de la gramática y darle

3
Organización de lenguajes y compiladores 1
.

un sentido con la finalidad de hallar errores del propio CITAS


código o bien vulnerabilidades las cuales los atacantes 1. Dowd, M., McDonald, J., & Schuh, J. (2006). The Art
podrían aprovechar de mil maneras. of Software Security Assessment: Identifying and
Preventing Software Vulnerabilities. Addison-Wesley
CONCLUSIONES Professional.
1. Los compiladores como muchos piensan no solo 2. Seacord, R. C. (2013). Secure Coding in C and C++.
están enfocados para traducir el código fuente a Addison-Wesley Professional.
lenguaje de bajo nivel, sino que también para
mejorar la seguridad de los programas
informáticos mediante el análisis estático del 3. Chess, B., & West, J. (2007). Secure Programming
código fuente. with Static Analysis. Addison-Wesley Professional.

4. Chess, B., & McGraw, G. (2004). Static analysis for


2. Las vulnerabilidades en el software son
security. IEEE Security & Privacy
debilidades que los atacantes pueden utilizar
como ventaja para realizar actividades ilícitas, y
las vulnerabilidades de código fuente pueden 5. AlBreiki, H. H., & Mahmoud, Q. H. (2014). Evaluation
estar relacionadas con la forma en que los of static analysis tools for software security. In 2014
compiladores procesan el código fuente. 10th International Conference on Innovations in
Information Technology (IIT) (pp. 93-98). Al Ain,
3. El análisis estático es una técnica poderosa que United Arab Emirates: IEEE. doi:
10.1109/INNOVATIONS.2014.6987569.
permite detectar posibles vulnerabilidades de
seguridad y errores en el código antes de que
sea utilizado en un entorno de producción. Las
herramientas de análisis estático examinan el
código en busca de patrones que puedan indicar Artículo escrito por:
la presencia de defectos o errores. Alvaro Norberto García Meza
Estudiante de ingeniería en Ciencias y Sistemas
4. Duran el proceso de análisis, se examinan Universidad de San Carlos de Guatemala
aspectos del código fuente, como la sintaxis, la Cursante de 5to semestre.
semántica y la estructura del programa. Es
importante tener en cuenta que, aunque el
análisis estático es útil, se queda corto para
localizar todas las posibles vulnerabilidades o
errores en el código.

REFERENCIAS
[1] Dowd, M., McDonald, J., & Schuh, J. (2006). The Art of
Software Security Assessment: Identifying and Preventing
Software Vulnerabilities. Addison-Wesley Professional,pp
100-101.

[2] Seacord, R. C. (2013). Secure Coding in C and C++.


Addison-Wesley Professional, pp 30-31.

[3] Chess, B., & West, J. (2007). Secure Programming with


Static Analysis. Addison-Wesley Professional, pp 50-51.

[4] Current Trends in Source Code Analysis, Plagiarism


Detection, and Issues of Analysis Big Datasets - Scientific
Figure on ResearchGate. Available from:
https://www.researchgate.net/figure/AST-representation-of-
source-code_fig4_317826391 [accessed 9 May, 2023]

[5] WeLiveSecurity. (2021, January 18). Análisis estático de


código fuente orientado a seguridad.
https://www.welivesecurity.com/la-es/2021/01/18/analisis-
estatico-codigo-fuente-orientado-a-seguridad/#El-
an%C3%A1lisis-est%C3%A1tico-de-c%C3%B3digo-
fuente-orientado-a-seguridad-dentro-de-los-
est%C3%A1ndares-de-seguridad-de-software

View publication stats

También podría gustarte