Skip to content

Commit

Permalink
CodeScan++
Browse files Browse the repository at this point in the history
  • Loading branch information
Aif4thah committed Nov 7, 2024
1 parent db028a3 commit 8cdb984
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 46 deletions.
64 changes: 19 additions & 45 deletions Dojo-101-DevSec/SAST-CodeQL.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,31 @@
# CodeQL

## Presentation

CodeQL est un outil permettant de découvrir des vulnérabilités en analysant le code source de vos applications.
## Ressources

Il peut aussi bien être utilisé pour des tests automatisés durant le Software développement Life Cycle (SDLC), que par des chercheurs en sécurité pour des projets spécifiques.
* [Binaires](https://github.com/github/codeql-cli-binaries)
* [Queries](https://github.com/github/codeql)
* [Github Actions](https://github.com/github/codeql-action)

Un de ses cas d’usage les plus rependus est probablement le scan automatique de projet GitHub, dont on peut bénéficier gratuitement [1].

L’outil se distingue par ces « queries » au format « from-where-select » qu’il est possible d’exécuter directement en ligne [2].
## Scan en local

Figure 1: Intégration Github
Il est également possible de s’approprier l’outil afin de rechercher des vulnérabilités dans le code hébergé ou rapatrié localement sur une machine dédiée. C’est à ce moment-là qu’intervient CodeQL-CLI.
### Installation

Cet outil est déjà très bien documenté [3]. L’idée de cet article est d’aller à l’essentiel afin de dégrossir rapidement la recherche de vulnérabilités dans une application cible, en vue de mener ensuite des tests plus spécifiques.
Import des binaires ( dossier `codeql`) et des queries ( dossier renomé `codeql-queries`) à partir des dépots Github

Pour cela, il est nécessaire de télécharger l’outillage afin de l’utiliser localement, à savoir :
```Powershell
PS C:\Users\vaca\Pro-temp\VulnerableLightApp> gci codeql*
Les binaires permettant d’exécuter nos requêtes (queries) [4] ;
Les queries elles-mêmes [4], qui serviront de base pour débuter la recherche de vulnérabilités.
Ces deux éléments sont ensuite placés côte à côte dans un même répertoire. Ceux-ci portant le même nom, un des deux doit être renommé. Dans notre cas le dossier contenant nos queries s’appelle « codeql-queries ». Notons que CodeQL peut être ajouté au Path, bien que cela ne soit pas indispensable :
Répertoire : C:\Users\vaca\Pro-temp\VulnerableLightApp
```Powershell
Mode LastWriteTime Length Name
---- ------------- ------ ----
da---l 06/06/2021 10:52 codeql
da---l 06/06/2021 10:48 codeql-queries
d----- 07/11/2024 09:12 codeql
d----- 07/11/2024 09:05 codeql-queries
```

Notre code et ses dépendances doivent également être convertis en une base de données que CodeQL pourra ensuite analyser.

Pour cela la commande database create va tenter de retrouver automatiquement, ou prendre en entrée, les options de compilation du projet et créer une base de données qu’il sera ensuite possible de maintenir dans le temps.

Ci-dessous un exemple de commande exécutée depuis le répertoire courant d’un projet, dans ce cas précis l’outil retrouve automatiquement le pom.xml du projet spring et la commande maven adéquate.

Evidement ce ne sera pas toujours le cas et l’option --command permet de corriger les éventuels écarts ou d’utiliser un outil spécifique pour la compilation :
### création des databases

ex: java

Expand All @@ -45,31 +36,27 @@ ex: java
ex: c#

```PowerShell
..\..\..\01-ToolBox\CodeQL\codeql-win64\codeql\codeql.exe database create <CodeQL-database> --language=csharp
..\codeql\codeql.exe database create VLA-CODEQLDB --language=csharp --command='dotnet build /t:rebuild'
```

À l’issue de la compilation, l’outil confirme que la base de données a été correctement créée par le retour suivant :

```
```txt
Successfully created database at <PATH>
```

L’objectif initial étant de dégrossir la recherche de vulnérabilités, il est préférable de lancer tout une batterie de requêtes. D’un point de vue sécurité, les queries préexistante classées par CWE (Common Weakness Enumeration) constituent un bon point de départ.

Pour aller à l’essentiel, des répertoires nommés « codeql-suites » contiennent des listes de requêtes spécifiées dans des fichiers .qls. Notons que l’extension .ql contiendra la requête CodeQL qui sera individuellement analysée.

Enfin, la commande database analyze et les options suivantes permettent de spécifier le chemin des « helpers » nécessaires à notre listes de requêtes ainsi que le format souhaité du résultat de l’analyse :
### Scans des databases

ex java

```PowerShell
C:\Users\vaca\OneDrive\Documents\Projets-InfoSec\01-ToolBox\CodeQL\codeql-win64\codeql\codeql.cmd database analyze --format=csv --output=cqlscan <CODEQL-database> "C:\Users\vaca\OneDrive\Documents\Projets-InfoSec\01-ToolBox\CodeQL\codeql\java\ql\src\codeql-suites\java-security-extended.qls"
..\codeql\codeql.cmd database analyze --format=csv --output=cqlscan <CODEQL-database> "..\codeql-queries\java\ql\src\codeql-suites\java-security-extended.qls"
```

ex c#

```PowerShell
..\..\..\01-ToolBox\CodeQL\codeql-win64\codeql\codeql.exe database analyze .\CodeQL-database\CQL-vulnApp C:\Users\vaca\OneDrive\Documents\Projets-InfoSec\01-ToolBox\CodeQL\codeql\csharp\ql\src\codeql-suites\csharp-security-and-quality.qls --format=csv --output=result.csv
.\codeql\codeql.exe database analyze VLA-CODEQLDB ..\codeql-queries\csharp\ql\src\codeql-suites\csharp-security-extended.qls --format=csv --output=CodeQL-result.csv --ram=8000
```


Expand All @@ -93,17 +80,8 @@ Différents formats sont possibles pour les résultats, en voici un extrait au f

Une fois cette première étape effectuée, la recherche de vulnérabilité peut être poursuivie par des requêtes CodeQL plus spécifiques, une lecture manuelle du code ou encore des tests dynamiques.

## Références

QuickStart: https://codeql.github.com/docs/codeql-cli/getting-started-with-the-codeql-cli/
License : https://securitylab.github.com/tools/codeql/license/
Query Console : https://lgtm.com/
Documentation : https://codeql.github.com/docs/codeql-cli/
Binaires : https://github.com/github/codeql-cli-binaries
Queries : https://github.com/github/codeql


## Retour d'experience
### Retour d'experience

C/C++ -> non testé
C# -> testé: un test uniquement, 1 « false négative »
Expand All @@ -112,7 +90,3 @@ Java -> bon niveau, besoin de règles spécifiques Spring
JavaScript / TypeScript -> bon niveau
Python -> un test uniquement, multiples « false négatives »

## Inclusion dans les CI-CD

* [CodeQL-action](https://github.com/github/codeql-action)

Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ gc ./urls.txt |%{
## exemple for testing json:

```powershell
echo '{"cle"="value}' |.\radamsa.exe -n 10
echo '{"cle"="value"}' |.\radamsa.exe -n 10
```

## fuff and radamsa (cf. RECON for fuff commands)
Expand Down Expand Up @@ -179,6 +179,7 @@ ffuf --input-cmd 'cat $FFUF_NUM.txt' -H "Content-Type: application/json" -X POST
# Minimalist fuzzing List dojo 101
<z>"z'z`%}})z${{z\
}})
https://127.0.0.1/
<script src=//127.0.0.1/test.js>
*
Expand Down

0 comments on commit 8cdb984

Please sign in to comment.