Checksec es un bash script para analizar la implementación de medidas contra explotación de ejecutables (PIE, RELRO, PaX, Canaries, ASLR, Fortify Source). Fue esrito originalmente por Tobias Klein y el código fuente original se encuentra aquí: http://www.trapkit.de/tools/checksec.html.
Instalación
Lo ideal es clonar el “repository” de la herramienta y copiar el archivo checksec al directorio /usr/bin
arturo@imperial-star:~$ sudo cp checksec.sh/checksec /usr/bin
o para descargar una versión en particular del software:
arturo@imperial-star:~$ sudo cp checksec.sh/checksec /usr/bin
Otra alternativa es instalar el software con sudo apt-get install checksec
, el problema es que la versión que se instale puede ser una versión muy vieja.
Uso
El uso de la herramienta es sumamente sencillo, y el resultado de el análisis de algún ejecutable puede ser presentado en varios formatos (cli,csv,xml,json).
A continuación un ejemplo sobre como analizar un ejecutable (/usr/bin/git).
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols Yes 10 21 /usr/bin/git
Lo ideal es analizar de manera automatizada los ejecutables, por ejemplo durante la creación del paquete de instalación del software. Para esto hay que seleccionar el formato del resultado del análisis que sea más conveniente para uno y analizarlo de manera sistemática para asegurar que cada uno de los “binaries” contenidos en el paquete de instalación tenga implementadas todas las medidas contra explotación.
A continuación un ejemplo de como generar el resultado del análisis en formato csv (comma separated values).
Full RELRO,Canary found,NX enabled,PIE enabled,No RPATH,No RUNPATH,No Symbols,Yes,10,21,/usr/bin/git
Implementación de medidas contra la explotación
RELRO
Mas info aquí.
Stack canary
-fstack-protector-strong
Mas info aquí.
No eXecute (NX)
Al parecer por default los ejecutables generados con gcc tienen activada esta opción. Ver esta pregunta en stackoverflow.
Mas info aquí.
PIE, PIC
Al compilar -fpie, -fPIC o -fpic dependiendo de lo que se requiera.
Al linkear otras librerías para un ejecutable -pie.
Mas info aqui, aquí , aquí, aquí y aquí.
RPATH, RUNPATH
Es posible generar archivos sin RPATH/RUNPATH, por ejemplo asignando true a la variable CMAKE_SKIP_RPATH de CMAKE al generar una versión “release”.
Mas info aqui.
Usando el comando chrpath también es posible hacerlo después de haber generado el archivo binario.
SYMBOLS
Al generar una versión “release” de un archivo binario los “debug symbols” no serán incluidos, sin embargo otros símbolos sí lo serán. Con el comando strip es posible eliminar esos símbolos.
Para eliminar símbolos de un ejecutable:
Para eliminar símbolos de una librería
FORTIFY
-D_FORTIFY_SOURCE=2
Mas info aqui.