# SOC

Le centre d'opération de cyberdéfense est là pour vous protéger !

# [SOC] Outils de cyber défense

## Introduction

Cette page répertorie une base d'outils de cyber défense utile à un SOC ou même à un administrateur aguéri et conscient des enjeux cyber.

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2023-09/scaled-1680-/hIBimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2023-09/hIBimage.png)

## Scanner d'URL

Une multitude d'outils existent pour scanner les URL grâce à leur réputation.

Voici une liste d'outils :

- [VirusTotal](https://www.virustotal.com/gui/home/upload)
- [MetaDefender Cloud - OPSWAT](https://metadefender.opswat.com/)
- [URLscan.io](https://urlscan.io/ "URLscan.io")
- [URLhaus](https://urlhaus.abuse.ch/browse/)
- [WhoIs](https://wiki.neopipe.fr/WhoIs)
- [Cisco Talos Intelligence](https://www.talosintelligence.com/)
- [ThreatMiner](https://www.threatminer.org/)
- [Brightcloud](https://www.brightcloud.com/tools/url-ip-lookup.php)

## Scanner d'adresse IP

Voici une liste d'outils en ligne pour analyser la réputation des adresses IP :

- [AbuseIPDB](https://www.abuseipdb.com/)
- [MetaDefender Cloud - OPSWAT](https://metadefender.opswat.com/)
- [Cisco Talos Intelligence](https://www.talosintelligence.com/)
- [Feodo Tracker](https://feodotracker.abuse.ch/)
- [Threatbook](https://threatbook.io/)
- [Pulsedive](https://pulsedive.com/)
- [Shodan](https://www.shodan.io/)
- [XForceIBM](https://exchange.xforce.ibmcloud.com)
- [Alienvault](https://otx.alienvault.com/)
- [GreyNoise](https://viz.greynoise.io/)

## Scanner de fichier et de hash

Voici une liste d'outils en ligne pour analyser des fichiers et des hashs de fichiers :

- [VirusTotal](https://www.virustotal.com/gui/home/upload)
- [MetaDefender Cloud - OPSWAT](https://metadefender.opswat.com/)
- [MalwareBazaar](https://bazaar.abuse.ch/browse/)
- [Malshare](https://malshare.com/)
- [Cisco Talos Intelligence](https://www.talosintelligence.com/)
- [HybridAnalysis](https://www.hybrid-analysis.com/)

## Règles de détection

- [SOC Prime Threat Detection Marketplace](https://tdm.socprime.com/)

## Blacklist d'empreintes de certificats SSL

- [SSL Blacklist](https://sslbl.abuse.ch/)

## Scanner de mail

Pour se protéger du phishing, il peut être utile d'utiliser des outils qui vont décortiquer le mail afin de potentiellement trouver des IOC.

- [PhishTool](https://www.phishtool.com/)

## Sandbox

Les sandboxs permettent de tester le comportement de fichier ou de site web afin de détecter un comportement malveillant dans un environnement protégé.

- [Browserling](https://www.browserling.com/) : Accéder à un site web dans une sandbox.
- [AnyRun](https://any.run/) : Lancer un exécutable Windows dans une sandbox.
- [Wannabrowser](https://www.wannabrowser.net/) : Accéder à un site web dans une sandbox.

## Matrice MITRE ATT&amp;CK

Framework permettant notamment de lister les TTPs et les APT.

- [MITRE ATT&amp;CK](https://attack.mitre.org/)

## Liste d'IOC multiples

- [ThreatFox](https://threatfox.abuse.ch/) : MISP events, Suricata IDS Ruleset, Domain Host files, DNS Response Policy Zone, JSON files and CSV files.

## PS - Obtenir le hash d'un fichier

```powershell
Get-FileHash <FILE> -Algorithm MD5
```

# [SOC] Afficher l'empreinte d'un fichier

## Introduction

Dans le cadre du travail d'analyste, il peut être intéressant d'obtenir l'empreinte d'un fichier sous ses différentes formes (**MD5**, **SHA-1** ou **SHA-256**).

Ce tutoriel traitera la méthodologie à suivre sous Linux exclusivement.

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2023-12/scaled-1680-/dfZimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2023-12/dfZimage.png)

## Manuel

#### MD5

```bash
md5sum <FILE>
```

#### SHA-1

```bash
sha1sum <FILE>
```

#### SHA-256

```bash
sha256sum <FILE>
```

## Changer l'empreinte d'un fichier

Il est possible de changer l'empreinte d'un fichier sans (presque) altérer son contenu en ajoutant un **null byte** à la fin de celui-ci :

```bash
echo -n -e "\x00" >> file.txt
```

<p class="callout info">Cette technique est très pratique pour échapper à la détection basée sur la signature mais permet aussi d'envoyer des échantillons de malware sur des plateformes publiques sans que celui-ci soit retrouvé par l'éditeur. </p>

# [SOC] YARA

## Introduction

Le **YARA** est un langage pour écrire des règles de détection de malware.

Il s'agit d'un langage simple et descriptif qui est adopté par le grand public.

Il est découpé par section qui ont chacune leur utilité.

![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-05/scaled-1680-/iSAimage.png)

## Source

- [TryHackMe - Yara](https://tryhackme.com/r/room/yara)
- [Cuckoosandbox - Sandbox pour tester vos règles Yara](https://github.com/cuckoosandbox)
- [PEfile - Scan les exécutables Windows PE ](https://github.com/erocarrera/pefile)

## Annexes

- [Github - Awesome Yara](https://github.com/InQuest/awesome-yara)
- [Valhalla - Base de règles Yara Opensource](https://valhalla.nextron-systems.com/)

## Anatomie d'une règle

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-05/scaled-1680-/EANimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2024-05/EANimage.png)

## Manuel

#### Installation

```bash
apt install -y yara
```

#### Meta

Cette section permet de donner des informations complémentaires qui ne seront pas interprêtés comme le ferait un commentaire dans du code.

Par exemple on peut utiliser le mot-clé **desc**, pour donner une description à notre règle afin qu'elle soit plus explicite pour les utilisateurs.

#### Strings

Cette section permet de détecter des chaînes de caractères présente dans les fichiers.

Voici un exemple d'utilisation :

```
rule helloworld_checker{
	strings:
		$hello_world = "Hello World!"

	condition:
		$hello_world
}
```

On peut aussi détecter des chaînes multiples :

```
rule helloworld_checker{
	strings:
		$hello_world = "Hello World!"
		$hello_world_lowercase = "hello world"
		$hello_world_uppercase = "HELLO WORLD"

	condition:
		any of them
}
```

#### Opérateurs

Comme dans les langages de programmation traditionnels, on peut utiliser des opérateurs pour nos conditions :

```
rule helloworld_checker{
	strings:
		$hello_world = "Hello World!"

	condition:
        #hello_world <= 10
}
```

<table border="1" id="bkmrk-op%C3%A9rateurs-descripti" style="border-collapse: collapse; width: 100%; height: 119.2px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">**Opérateurs**  
</td><td class="align-center" style="height: 29.8px;">**Descriptions**  
</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">&lt;=  
</td><td class="align-center" style="height: 29.8px;">Plus petit ou égal  
</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">&gt;=  
</td><td class="align-center" style="height: 29.8px;">Plus grand ou égal  
</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">!=  
</td><td class="align-center" style="height: 29.8px;">Différent de  
</td></tr></tbody></table>

#### Combinaisons

On peut utiliser les mot-clés suivants pour combiner nos conditions :

<table border="1" id="bkmrk-mot-cl%C3%A9s-description" style="border-collapse: collapse; width: 100%; height: 119.2px;"><colgroup><col style="width: 50.0618%;"></col><col style="width: 50.0618%;"></col></colgroup><tbody><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">**Mot-clés**  
</td><td class="align-center" style="height: 29.8px;">**Descriptions**  
</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">and  
</td><td class="align-center" style="height: 29.8px;">Les deux conditions doivent être valides  
</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">or  
</td><td class="align-center" style="height: 29.8px;">Au moins l'une des deux conditions doit être valide  
</td></tr><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">not  
</td><td class="align-center" style="height: 29.8px;">Inverse la condition (true devient false et false devient true)  
</td></tr></tbody></table>

Voici un exemple pour vérifier si la chaîne est présente et si la taille du fichier est inférieure à 10KB :

```
rule helloworld_checker{
	strings:
		$hello_world = "Hello World!" 
        
        condition:
	        $hello_world and filesize < 10KB 
}
```

#### Lancer le scan

```bash
yara <RULE>.yar <FILE_TO_SCAN>
```

<p class="callout success">Si la règle match, la commande renverra le nom de la règle qui a matchée ainsi que le nom du fichier qui a matché.</p>

#### Scanners d'IOC basés sur Yara

- [Loki](https://github.com/Neo23x0/Loki/releases)
- [THOR](https://www.nextron-systems.com/thor-lite/)
- [Fenrir](https://github.com/Neo23x0/Fenrir)
- [YAYA](https://www.eff.org/deeplinks/2020/09/introducing-yaya-new-threat-hunting-tool-eff-threat-lab)

## Loki

#### Mettre à jour la base de signature

```bash
python loki.py --update
```

#### Lancer un scan d'un dossier

```bash
python loki.py -p <DIR>
```

## YarGen

Cet outil permet de créer une règle Yara à partir d'un ou plusieurs fichiers connus pour être malveillants.

Il va se baser sur les chaînes de caractères et les informations pour générer la règle qui va détecter le ou les fichiers.

#### Téléchargement

- [Github - YarGen](https://github.com/Neo23x0/yarGen)

#### Mettre à jour l'outil

```bash
python3 yarGen.py --update
```


<p class="callout info">Cela va mettre à jour la base avec les chaînes et les opcodes.</p>

#### Créer une règle

```bash
python3 yarGen.py -m <FILE_PATH> --excludegood -o <OUTPUT.yar>
```

<p class="callout warning">Bien que l'outil soit fonctionnel, il est recommandé d'éditer la règle pour supprimer les chaînes qui pourraient lever des faux-positifs.</p>

# [SOC] Dettect

## Introduction

Le projet Dettect a pour objectif d'identifier les TTPs couvertes (et non-couvertes) par vos règles de détection.

Le projet vous aidera à générer un fichier avec vos datasources couvertes et à convertir ce fichier en un fichier importable dans le MITRE Navigator afin d'afficher les TTPs.

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-10/scaled-1680-/KGKimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2024-10/KGKimage.png)

## DeTT&amp;CT

Voici le lien du projet :

- [https://github.com/rabobank-cdc/DeTTECT](https://github.com/rabobank-cdc/DeTTECT)

Lancez le conteneur :

```bash
docker run -p 8080:8080 -v $(pwd)/output:/opt/DeTTECT/output -v $(pwd)/input:/opt/DeTTECT/input --name dettect -it rabobankcdc/dettect:latest /bin/bash
```

Puis lancez le serveur web en écoute :

```bash
python3 dettect.py e
```

<p class="callout success">Vous pouvez ouvrir un navigateur web et vous rendre sur [http://localhost:8080](http://localhost:8080) .</p>

- Après avoir créer vos datasources et télécharger votre configuration, déplacez-le dans le dossier input du projet.
- Ensuite ouvrez un shell dans le conteneur :

```
docker exec -it dettect bash
```

Puis convertissez pour obtenir un fichier de configuration importable dans le MITRE Navigator :

```bash
python3 dettect.py ds -fd input/data-sources-new.yaml -l
```

Et importez dans le MITRE Navigator :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2024-10/scaled-1680-/YTCimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2024-10/YTCimage.png)

# [SOC] Graylog

## Introduction

Graylog est un SIEM qui permet de centraliser vos logs et de faire des queries pour faire des analyses de threat hunting notamment.

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/wd7image.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/wd7image.png)

## Sources

- [https://www.it-connect.fr/tuto-graylog-sur-debian-centraliser-et-analyser-logs/](https://www.it-connect.fr/tuto-graylog-sur-debian-centraliser-et-analyser-logs/)
- [https://www.it-connect.fr/envoyer-les-logs-windows-vers-graylog-avec-nxlog/](https://www.it-connect.fr/envoyer-les-logs-windows-vers-graylog-avec-nxlog/)

## Installation

#### Serveur (Debian 12)

Tout d'abord, configurez correctement la timezone ou le serveur de temps :

```bash
timedatectl set-timezone Europe/Paris
```

Installez quelques outils de base dont nous auront besoin pour la suite :

```bash
apt update && apt install -y install curl lsb-release ca-certificates gnupg2 pwgen
```

##### MongoDB

```bash
curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor && echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list && apt update && apt-get install -y mongodb-org
```

<p class="callout warning">Vous allez obtenir une <span style="text-decoration: underline;">erreur</span> par rapport à **libssl** à ce stade et c'est normal, passez à la suite.</p>

Rendez-vous sur le site suivant pour trouver la version la plus récente de libssl et copiez le lien :

- [http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/](http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/)

<p class="callout info">Faite CTRL+F et cherchez "**libssl1.1\_1.1.1f-1ubuntu**2." puis sélectionnez la version deb amd64.</p>

Une fois l'URL récupérée, vous devriez faire quelque chose comme ça :

```bash
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.23_amd64.deb && dpkg -i libssl1.1_1.1.1f-1ubuntu2.23_amd64.deb
```

Puis réinstallez le paquet **mongodb-org** :

```bash
apt install -y mongodb-org
```

Et lancez le service :

```bash
sudo systemctl daemon-reload && sudo systemctl enable --now mongod.service
```

<p class="callout danger">Si l'installation de MongoDB s'est mal passée c'est que vous n'avez pas téléchargé le bon paquet sur le site d'Ubuntu.</p>

<p class="callout danger">Si l'installation de MongoDB s'est bien passée mais que le service ne démarre pas, assurez-vous de passer le CPU en mode <span style="text-decoration: underline;">host</span> s'il s'agit d'une VM.</p>

##### Opensearch

```bash
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring && echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list && apt update
```

```bash
env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<PASSWORD> apt-get install opensearch
```

<p class="callout info">Choisissez un mot de passe d'au moins 8 caractères avec minuscule, majuscule, chiffre et caractère spécial sinon l'installation d'opensearch échouera.</p>

Maintenant ouvrez le fichier de configuration **/etc/opensearch/opensearch.yml** et ajustez la configuration avec les éléments suivants :

```
cluster.name: graylog
node.name: ${HOSTNAME}
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
discovery.type: single-node
network.host: 127.0.0.1
action.auto_create_index: false
plugins.security.disabled: true
```

##### Java

Éditez le fichier de configuration **/etc/opensearch/jvm.options** pour définir la ram utilisée par Java (minimum 4G) :

```
-Xms4g
-Xmx4g
```

Vérifiez que le max\_map\_count est définit à **262144** :

```bash
cat /proc/sys/vm/max_map_count
```

Si ce n'est pas le cas (uniquement) :

```
sysctl -w vm.max_map_count=262144
```

Une fois que java est configuré, lancez et activez le service opensearch :

```
systemctl daemon-reload && systemctl enable --now opensearch
```

##### Graylog

```bash
wget https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb && dpkg -i graylog-6.1-repository_latest.deb && apt update && apt install -y graylog-server
```

Avant de lancez Graylog il faut configurer le **password\_secret** que vous pouvez générer avec la commande suivante :

```bash
pwgen -N 1 -s 96
```

Renseignez le à l'endroit adéquat dans le fichier **/etc/graylog/server/server.conf** .

Ensuite il faut configurer le mot de passe admin de Graylog. Pour cela on doit calculer son hash :

```bash
echo -n "<PASSWORD>" | shasum -a 256
```

Et renseignez le dans le fichier **/etc/graylog/server/server.conf** au niveau du champ **root\_password\_sha2** .

Toujours dans le fichier de configuration, définissez les paramètres suivants :

```
http_bind_address = 0.0.0.0:9000
elasticsearch_hosts = http://127.0.0.1:9200
```

Et enfin, activez et démarrez Graylog :

```bash
systemctl enable --now graylog-server
```

<p class="callout success">Graylog est désormais accessible via **http://&lt;IP&gt;:9000** .</p>

#### Agent Windows

Tout d'abord il faut configurer Graylog pour recevoir les logs.

Pour cela rendez-vous dans **System &gt; Inputs** et sélectionnez **GELF UDP** comme ci et cliquez sur **Launch new input** :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/5tXimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/5tXimage.png)

Configurez de la sorte (sauf pour le titre, mettez ce que vous souhaitez) :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/8bEimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/8bEimage.png)

Vous devriez voir quelque chose comme ça :

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/u5aimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/u5aimage.png)

Maintenant téléchargez l'agent **NXLog** sur la machine qui va envoyer les logs :

- [https://nxlog.co/downloads/nxlog-ce#nxlog-community-edition](https://nxlog.co/downloads/nxlog-ce#nxlog-community-edition)

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/E3Jimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/E3Jimage.png)

Saisissez la configuration suivante dans le fichier **C:\\Program Files\\nxlog\\conf\\nxlog.conf** :

```
# Récupérer les journaux de l'observateur d'événements
<Input in>
    Module      im_msvistalog
</Input>

# Déclarer le serveur Graylog (selon input)
<Extension gelf>
    Module        xm_gelf
</Extension>

<Output graylog_udp>
    Module        om_udp
    Host          192.168.10.220
    Port	  12201
    OutputType    GELF_UDP
</Output>

# Routage des flux in vers out
 <Route 1>
     Path        in => graylog_udp
 </Route>
```

<p class="callout info">Celle-ci enverra tous les logs de la machine sur Graylog, ce qui n'est pas forcément nécessaire, on pourrait envoyer seulement les logs **Security** et appliquer la configuration suivante :</p>

```
# Récupérer les journaux Security de l'observateur d'événements
<Input in>
    Module      im_msvistalog
    <QueryXML>
        <QueryList>
            <Query Id='1'>
                <Select Path='Security'>*</Select>
            </Query>
        </QueryList>
    </QueryXML>
</Input>

# Déclarer le serveur Graylog (selon input)
<Extension gelf>
    Module        xm_gelf
</Extension>

<Output graylog_udp>
    Module        om_udp
    Host          192.168.10.220
    Port	  12201
    OutputType    GELF_UDP
</Output>

# Routage des flux in vers out
 <Route 1>
     Path        in => graylog_udp
 </Route>
```

Désormais relancez le service NXlog pour appliquer la configuration :

```
Restart-Service nxlog
```

<p class="callout info">Le fichier de log de NXlog est le fichier **C:\\Program Files\\nxlog\\data\\nxlog.log** si vous devez debugger.</p>

# [SOC] Cyberchef

## Introduction

Cyberchef est un outil pour décoder, formater etc très utile en CTF ou dans les tâches quotidiennes.

## [![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/scaled-1680-/8dDimage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2025-06/8dDimage.png)

## Sources

- [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
- [https://kravensecurity.com/cyberchef-guide/#CyberChef](https://kravensecurity.com/cyberchef-guide/#CyberChef)

## Cyberchef API

Un projet a été réalisé, permettant d'exécuter des recettes via des call API (très pratique pour de l'automatisation :

- [https://github.com/gchq/CyberChef-server](https://github.com/gchq/CyberChef-server)

Pour l'installer (docker requis) :

```bash
git clone https://github.com/gchq/CyberChef-server && cd CyberChef-server && docker build -t cyberchef-server .
```

Pour lancer le serveur :

```bash
docker run -it --rm --name=cyberchef-server -p 3000:3000 cyberchef-server
```

Ensuite, par exemple, vous pourriez extraire des IPv4 d'un texte brut avec une simple requête curl :

```bash
curl -X POST -H "Content-Type: application/json" -d '{"input":"120[.]89[.]71[.]226 120[.]89[.]71[.]226:9090 aa", "recipe":[{"op":"Fang URL", "args":[true, false]}, {"op":"Extract IP addresses", "args":["IPv4", false]}]}' http://localhost:3000/bake
```

# [SOC] Splunk

# [Splunk] SPL

## Introduction

Le SPL est le langage de requête propriétaire à Splunk. Il est extrêmement puissant mais utilise une syntaxe peu triviale.

[![image.png](https://wiki.neopipe.fr/uploads/images/gallery/2026-02/scaled-1680-/87himage.png)](https://wiki.neopipe.fr/uploads/images/gallery/2026-02/87himage.png)

## Cheat-sheet

#### Index

Pour chercher dans un index :

```
index="main"
```

#### Opérateurs

<table border="1" id="bkmrk-op%C3%A9rateurs-%3D-%21%3D-%3E-%3E%3D" style="border-collapse: collapse; width: 100%; height: 208.578px;"><colgroup><col style="width: 100%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">**Opérateurs**</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">=</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">!=</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">&gt;</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">&gt;=</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">&lt;</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">&lt;=</td></tr></tbody></table>

#### Supprimer un champ de l'affichage

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | fields - User
```

#### Créer un tableau

```shell-session
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | table _time, host, Image
```

<p class="callout info">Ici un tableau sera affiché avec trois colonnes : \_time, host et Image.</p>

#### Renommer un champ

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | rename Image as Process
```

#### Supprimer les doublons

Vous pouvez supprimer les doublons en vous basant sur un champ :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | dedup Image
```

<p class="callout info">Ici, si un même process apparaît plusieurs fois dans les logs, il n'y aura quand même qu'un seul résultat affiché.</p>

#### Trier

Par exemple pour trier dans le temps :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | sort - _time
```

#### Statistiques

Pour avoir des statistiques, par exemple le **count** :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=3 | stats count by _time, Image
```

#### Graphiques

Vous pouvez faire une visualisation avec le mot clé **chart** :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=3 | chart count by _time, Image
```

#### Eval

Pour effectuer des opérations basiques comme mettre en minuscule un champ :

```shell-session
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | eval Process_Path=lower(Image)
```

#### Regex

Pour effectuer une regex :

```
index="main" EventCode=4662 | rex max_match=0 "[^%](?<guid>{.*})" | table guid
```

#### Lookup table

Après avoir importé votre CSV dans Splunk, vous pouvez effectuer des vérifications pour ajouter un champ :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | rex field=Image "(?P<filename>[^\\\]+)$" | eval filename=lower(filename) | lookup malware_lookup.csv filename OUTPUTNEW is_malware | table filename, is_malware
```

#### Time range

```
index="main" earliest=-7d latest=-1d EventCode!=1
```

#### Transaction

Permet de regrouper plusieurs events qui partagent un champ commun :

```
index="main" sourcetype="WinEventLog:Sysmon" (EventCode=1 OR EventCode=3) | transaction Image startswith=eval(EventCode=1) endswith=eval(EventCode=3) maxspan=1m | table Image |  dedup Image 
```

<p class="callout info">Le **maxspan** sert à spécifier une fenêtre de temps maximale entre les deux events.</p>

#### Subsearches

Permet de faire une sous-recherche comme filtre dans sa requête :

```
index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 NOT [ search index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | top limit=100 Image | fields Image ] | table _time, Image, CommandLine, User, ComputerName
```

#### Eventcount

Pour obtenir le nombre d'events de votre query :

```
| eventcount summarize=false index=* | table index
```

#### Metadata

```
| metadata type=sourcetypes
```

#### Sourcetype

Filtrer par sourcetype permet d'augmenter les performances de la query :

```
sourcetype="WinEventLog:Security" | table _raw
```

#### Fieldsummary

Pour avoir un récapitulatif de statistiques :

```
sourcetype="WinEventLog:Security" | fieldsummary
```