Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Fennec — Strumento di raccolta di artefatti per sistemi *nix | Kitploit
Strumenti/GitHubGitHub/abdulrhmanalfaifi/fennec
Informatica ForenseRaccolta InformazioniDigital ForensicsThreat IntelligenceRisposta agli IncidentiAnalisi dei Log
GitHubabdulrhmanalfaifi/fennec

Fennec

Strumento di raccolta di artefatti per sistemi *nix

Vedi Repository
220202 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Fennec 🦊

fennec è uno strumento di raccolta di artefatti scritto in Rust per essere utilizzato durante la risposta agli incidenti su sistemi basati su *nix. fennec permette di scrivere un file di configurazione che specifica come raccogliere gli artefatti.

Caratteristiche 🌟

  • 🦀 Un singolo binario compilato staticamente
  • 🔬 Esegui qualsiasi query SQL di osquery
  • 💻 Esegui comandi di sistema e analizza il loro output
  • 📚 Analizza qualsiasi file di testo usando regex
  • 🧰 Capacità di raccogliere log e file di sistema
  • 🧱 Restituisci dati in modo strutturato
  • 🃏 Supporto per più formati di output (JSONL, CSV e KJSON)
  • 🤸‍♀️ File di configurazione flessibile
  • 💾 Scrivi direttamente in file ZIP per risparmiare spazio
  • ⚡ Molto veloce!

Test 🧪

Utilizzo ✍```verilog

fennec 0.4.1 AbdulRhman Alfaifi [email protected] Aritfact collection tool for *nix systems

USAGE: fennec [OPTIONS]

OPTIONS: -c, --config Sets a custom config file (Embedded : true)

root@kitploit:~
-o, --output <FILE>
        Sets output file name [default: ABDULRHMAN-PC.zip]

-l, --log-level <LEVEL>
        Sets the log level [default: info] [possible values: trace, debug, info, error]

-f, --log-file <FILE>
        Sets the log file name [default: fennec.log]

-u, --upload-artifact <CONFIG>...
        Upload configuration string. Supported Protocols:
        * s3 : Upload artifact package to S3 bucket (ex. minio)
            * Format :
        s3://<ACCESS_KEY>:<SECRET_ACCESS_KEY>@(http|https)://<HOSTNAME>:<PORT>/<BUCKET_NAME>:<PATH>
            * Example (minio): s3://minioadmin:minioadmin@http://192.168.100.190:9000/fennec:/
        * aws3 : Upload artifact package to AWS S3 bucket
            * Format : aws3://<ACCESS_KEY>:<SECRET_ACCESS_KEY>@<AWS_REGOIN>.<BUCKET_NAME>:<PATH>
            * Example: aws3://AKIAXXX:[email protected]:/
        * scp : Upload artifact package to a server using SCP protocol
            * Format : scp://<USERNAME>:<PASSWORD>@<HOSTNAME>:<PORT>:<PATH>
            * Example: scp://testusername:[email protected]:22:/dev/shm

-q, --quiet
        Do not print logs to stdout

-t, --timeout <SEC>
        Sets osquery queries timeout in seconds [default: 60]

-h, --help
        Print help information

    --non-root
        Run Fennec with non root permisions. This isn't recommended, most artifacts require root
        permissions

    --osquery-path <PATH>
        Sets osquery path, if osquery is embedded it will be writen to this path otherwise the
        path will be used to spawn osquery instance (Embedded : true) [default: ./osqueryd]

    --output-format <FORMAT>
        Sets output format [default: jsonl] [possible values: jsonl, csv, kjson]

    --show-config
        Show the embedded configuration file

    --show-embedded
        Show the embedded files metadata

-V, --version
        Print version information
root@kitploit:~
* `-c`, `--config` : Usa il file di configurazione specificato invece della configurazione incorporata
* `-f`, `--log-file` : Cambia il nome predefinito per il file di log (predefinito: `fennec.log`)
* `-h`, `--help` : Stampa il messaggio di aiuto
* `-l`, `--log-level` : Cambia il livello di log predefinito (predefinito: `info`)
* `-o`, `--output` : Cambia il nome del file di output predefinito per il file zip (predefinito: `{HOSTNAME}.zip`, dove hostname è l'hostname della macchina valutato a runtime)
* `--osquery-path` : Percorso dell'eseguibile osquery. Questo valore verrà utilizzato in base alle seguenti condizioni:
  * Se il binario osquery è incorporato in `fennec`, verrà estratto e salvato in `--osquery-path`
  * Se osquery non è incorporato in `fennec`, verrà utilizzato il binario osquery presente nel percorso `--osquery-path`
* `--output-format` : Scegli il formato di output. Formati supportati:
  * jsonl : Oggetti JSON separati da nuova riga (predefinito)
  * csv: Valori separati da virgola
  * kjson: Usa questo formato se vuoi caricare il file risultante sulla piattaforma di analisi [Kuiper](https://github.com/DFIRKuiper/Kuiper).
* `-q`, `--quiet` : Non stampare i log su `stdout`
* `--non-root`: Esegui Fennec con permessi non root. Di default, Fennec richiede permessi `root` e uscirà con un messaggio di errore se non è root.
* `--show-config` : Stampa la configurazione incorporata e poi esci
* `--show-embedded` : Mostra i file incorporati
* `-t`, `--timeout` : Imposta il timeout in secondi per ogni osquery nei tipi di artefatto query
* `-u`, `--upload-artifact` : Carica il pacchetto artefatto su un server remoto. Protocolli supportati:
  * `s3` : Carica il pacchetto artefatto nel bucket S3
    * `Formato` : s3://<ACCESS_KEY>:<SECRET_ACCESS_KEY>@(http|https)://<HOSTNAME>:<PORT>/<BUCKET_NAME>:<PATH>
    * `Esempio`: s3://minioadmin:minioadmin@http://192.168.100.190:9000/fennec:/
  * `aws3` : Carica il pacchetto artefatto nel bucket AWS S3
    * `Formato` : aws3://<ACCESS_KEY>:<SECRET_ACCESS_KEY>@<AWS_REGOIN>.<BUCKET_NAME>:<PATH>
    * `Esempio`: aws3://AKIAXXXXXXXXXXXXXXXXX:[email protected]:/
  * `scp` : Carica il pacchetto artefatto su un server utilizzando il protocollo SCP
      * `Formato` : scp://`<USERNAME>`:`<PASSWORD>`@`<HOSTNAME>`:`<PORT>`:`<PATH>`
      * `Esempio`: scp://testusername:[email protected]:22:/dev/shm
* `-V`, `--version` : Stampa la versione di `fennec` ed esci

## Compila con le dipendenze 👨‍💻

fennec dipende da `osquery` per eseguire gli artefatti con il tipo `query`. La directory chiamata `deps` contiene il file che verrà incorporato nel binario a seconda del sistema operativo e dell'architettura di destinazione. Prima di compilare, segui i passaggi seguenti:

* Modifica il file di configurazione `deps/<TARGET_OS>/fennec.yaml` secondo necessità

* Compila il binario usando uno dei comandi seguenti:

  * collegato dinamicamente:  ```bash
  cargo build --release
  • collegato staticamente (compila tutte le dipendenze): ```bash RUSTFLAGS="-C target-feature=+crt-static" cargo build --release --target x86_64-unknown-linux-gnu
    root@kitploit:~

Puoi anche utilizzare i binari precompilati nella sezione release.

Esempi 🚀

Configurazioni predefinite

Il seguente è un esempio eseguito su Ubuntu 20 con le stesse configurazioni in questo repository:

example

Utilizzare Fennec con Kuiper

Per inviare dati in un formato supportato da Kuiper esegui Fennec con il seguente argomento:```bash sudo ./fennec --output-format kjson

root@kitploit:~
o aggiungi quanto segue alla sezione `args` nella configurazione:```yaml
args:
  - "--output-format"
  - "kjson"

Ricompila quindi esegui:```bash sudo ./fennec

root@kitploit:~
quindi carica il file zip risultante su Kuiper, ecco un esempio:

![kuiper_example](https://assets.kitploit.com/production/public/readmes/5116/8dd59147b5c77e04c01a7cd6d577c977a8f0ebf07053c0502ddeca5172f1a532.gif)

## Configuration🔨

Per impostazione predefinita, la configurazione nel percorso `deps/<TARGET_OS>/fennec.yaml` viene incorporata nell'eseguibile durante la compilazione. La configurazione è in formato YAML e ha due sezioni:

### Args

contiene un elenco di argomenti da passare all'eseguibile come argomenti della riga di comando, di seguito è riportato un esempio per la sezione `args` che imposterà il formato di output su `jsonl` e il nome del file di log su `fennec.log`:```yaml
args:
- "--output-format"
- "jsonl"
- "--log-file"
- "fennec.log"
...

Gli argomenti della riga di comando verranno utilizzati con le seguenti priorità:

  • argomenti passati all'eseguibile
  • argomenti nel file di configurazione
  • argomenti predefiniti

Artefatti

Contiene un elenco di artefatti da raccogliere. Ogni artefatto contiene i seguenti campi:

  • name: il nome dell'artefatto, i risultati dell'artefatto verranno scritti in un file con questo nome
  • type: il tipo di artefatto, gli artefatti supportati sono:
    • query
    • collection
    • command
    • parse
  • description (opzionale): contiene una descrizione dell'artefatto
  • quires OR paths OR commands: quires se il tipo di artefatto è query e contiene un elenco di query SQL di osquery. paths se il tipo di artefatto è collection OR parse e contiene un elenco di percorsi. commands se il tipo di artefatto è command e contiene un elenco di comandi. Questi nomi sono per leggibilità, puoi usarne qualsiasi in qualsiasi tipo di artefatto.
  • regex: questo campo viene utilizzato solo se viene utilizzato il tipo di artefatto parse o command, questo campo contiene un'espressione regolare per analizzare il file di testo in caso di artefatto parse o lo stdout in caso di artefatto command
  • maps (opzionale): contiene un elenco di mappatori per modificare i nomi delle chiavi e formattare i valori, consulta la sezione maps per maggiori dettagli

Tipi di artefatto: Query

Esegue query SQL di osquery. Il seguente artefatto di esempio per recuperare tutti gli utenti sul sistema:```yaml artifacts:

  • name: users type: query description: "List all local users" queries:
    • 'select * from groups join user_groups using (gid) join users using (uid)' ...
root@kitploit:~
#### Tipi di artefatto: Raccolta

Questo tipo di artefatto raccoglie file/cartelle specificati nel campo **paths**. Il seguente è un esempio di questo tipo di artefatto che raccoglie log di sistema:```yaml
artifacts:
  - name: logs
    type: collection
    description: "Collect system logs"
    paths:
      - '/var/log/**/*'
...

Artifact Types: Command

Esegui i comandi di sistema utilizzando l'interprete dei comandi shell nella seguente priorità:

  • $SHELL variabile d'ambiente
  • /bin/bash
  • /bin/sh

Questo è un esempio di questo tipo di artefatto che recupera i login errati:```yaml artifacts:

  • name: bad_logins type: command description: "Get failed logins (/var/log/btmp)" commands:
    • "lastb --time-format=iso | head -n -1" timeout: 30 regex: '(?P[^ ]+)[ ]+?(?P[^ ]+)[ ]+?(?P<src_ip>[^ ]+)?[ ]+?(?P<login_time>[^ ]+) - (?P<logout_time>[^ ]+)[ ]+?(()?(?P[^ ]+)())'
root@kitploit:~
Questo tipo di artefatto eseguirà i comandi nella lista `commands` e analizzerà l'output `stdout` utilizzando l'espressione regolare specificata nel campo `regex`. Nota che l'espressione regolare verrà applicata solo al flusso `stdout` e non a `stderr`. Inoltre, il campo `regex` è opzionale. Ecco un esempio dei risultati sia utilizzando il campo `regex` che senza di esso:
##### Senza campo `regex````json
{
  "line": 0,
  "stdout": "root     pts/1                         2023-09-12T17:13:28+03:00 - 2023-09-12T17:13:28+03:00  (00:00)"
}
Con regex campo```json

{ "username": "root", "tty": "pts/1", "src_ip": null, "login_time": "2023-09-12 14:13:28", "logout_time": "2023-09-12T17:13:28+03:00", "duration": "00:00", "@timestamp": "2023-09-12 14:13:28" }

root@kitploit:~
#### Tipi di Artefatto: Parse

Questo tipo di artefatto offre la capacità di analizzare file di testo utilizzando regex e restituire i dati in formato strutturato. L'esempio seguente analizza i log di accesso di nginx e restituisce i risultati in formato strutturato:```yaml
artifcats:
  - name: nginx_access
    type: parse
    description: "Nginx access logs"
    paths:
      - /var/log/nginx/access.*
    regex: '(?P<c_ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) - (?P<remote_user>[^ ]+) \[(?P<time>[0-9]{2}/[a-zA-Z]{3}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2} \+[0-9]{4})\] "(?P<method>[A-Z]+)?[ ]?(?P<uri>.*?)[ ]?(HTTP/(?P<http_prot>[0-9\.]+))?" (?P<status_code>[0-9]{3}) (?P<body_bytes_sent>[0-9]+) "(?P<referer>.*?)" "(?P<user_agent>.*?)"'

Questa configurazione leggerà i file nel percorso /var/log/nginx/access.* riga per riga ed eseguirà l'espressione regolare per estrarre i campi. Questo artefatto controlla anche se il file è in formato gzip, che viene utilizzato per comprimere i log vecchi per risparmiare spazio, e li decomprime e li analizza. L'espressione regolare deve essere in formato named captures come documentato nella libreria regex di Rust. Di seguito è riportato un esempio di record di accesso nginx prima e dopo l'analisi:

  • record originale ```verilog 192.168.133.70 - - [23/Jan/2022:19:14:37 +0000] "GET /blog/ HTTP/1.1" 200 2497 "https://u0041.co/" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"
root@kitploit:~
* record analizzato  ```json
{
  "c_ip": "192.168.133.70",
  "remote_user": "-",
  "time": "23/Jan/2022:19:14:37 +0000",
  "method": "GET",
  "uri": "/blog/",
  "http_prot": "1.1",
  "status_code": "200",
  "body_bytes_sent": "2497",
  "referer": "https://u0041.co/",
  "user_agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0",
  "full_path": "/var/log/nginx/access.log.9.gz"
}

Mappe

Questo campo opzionale può essere utilizzato per modificare i nomi dei campi dei risultati ed eseguire una post-elaborazione chiamata modificatori sul valore del campo. L'esempio seguente mostrerà i risultati per l'analisi del record di accesso di nginx senza mappe:```yaml artifcats:

  • name: nginx_access type: parse description: "Nginx access logs" paths:
    • /var/log/nginx/access.* regex: '(?P<c_ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) - (?P<remote_user>[^ ]+) [(?P[0-9]{2}/[a-zA-Z]{3}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2} +[0-9]{4})] "(?P[A-Z]+)?[ ]?(?P.?)[ ]?(HTTP/(?P<http_prot>[0-9.]+))?" (?P<status_code>[0-9]{3}) (?P<body_bytes_sent>[0-9]+) "(?P.?)" "(?P<user_agent>.*?)"'
root@kitploit:~
* record originale```verilog
192.168.133.70 - - [23/Jan/2022:19:14:37 +0000] "GET /blog/ HTTP/1.1" 200 2497 "https://u0041.co/" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"
  • record parsato senza mappe```json { "c_ip": "192.168.133.70", "remote_user": "-", "time": "23/Jan/2022:19:14:37 +0000", "method": "GET", "uri": "/blog/", "http_prot": "1.1", "status_code": "200", "body_bytes_sent": "2497", "referer": "https://u0041.co/", "user_agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0", "full_path": "/var/log/nginx/access.log.9.gz" }
root@kitploit:~
Per cambiare il nome del campo `time` in `@timestamp` aggiungiamo la seguente configurazione maps alle configurazioni degli artifact:```yaml
artifcats:
  - name: nginx_access
    type: parse
    description: "Nginx access logs"
    paths:
      - /var/log/nginx/access.*
    regex: '(?P<c_ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) - (?P<remote_user>[^ ]+) \[(?P<time>[0-9]{2}/[a-zA-Z]{3}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2} \+[0-9]{4})\] "(?P<method>[A-Z]+)?[ ]?(?P<uri>.*?)[ ]?(HTTP/(?P<http_prot>[0-9\.]+))?" (?P<status_code>[0-9]{3}) (?P<body_bytes_sent>[0-9]+) "(?P<referer>.*?)" "(?P<user_agent>.*?)"'
    maps:
    - from: time		#change field name from
      to: '@timestamp'	# to this name

Dopo aver eseguito lo strumento di raccolta con la configurazione sullo stesso log di accesso di nginx otteniamo il seguente output:```json { "c_ip": "192.168.133.70", "remote_user": "-", "@timestamp": "23/Jan/2022:19:14:37 +0000", "method": "GET", "uri": "/blog/", "http_prot": "1.1", "status_code": "200", "body_bytes_sent": "2497", "referer": "https://u0041.co/", "user_agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0", "full_path": "/var/log/nginx/access.log.9.gz" }

root@kitploit:~
#### Modificatori

`modifiers` fornisce l'elaborazione successiva sul valore del campo dei risultati dell'artefatto. Ad esempio, per riformattare data e ora. Continuando con l'esempio precedente, possiamo cambiare il formato di data e ora nel campo `@timestamp` nel formato `%Y-%m-%d %H:%M:%S`. Possiamo aggiungere quanto segue alle configurazioni dell'artefatto per ottenere questo risultato:```yaml
artifacts:
  - name: nginx_access
    type: parse
    description: "Nginx access logs"
    paths:
      - /var/log/nginx/access.*
    regex: '(?P<c_ip>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) - (?P<remote_user>[^ ]+) \[(?P<time>[0-9]{2}/[a-zA-Z]{3}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2} \+[0-9]{4})\] "(?P<method>[A-Z]+)?[ ]?(?P<uri>.*?)[ ]?(HTTP/(?P<http_prot>[0-9\.]+))?" (?P<status_code>[0-9]{3}) (?P<body_bytes_sent>[0-9]+) "(?P<referer>.*?)" "(?P<user_agent>.*?)"'
    maps:
    - from: time
      to: "@timestamp"
      modifier: 
        name: datetime_to_iso
        parameters:
          input_time_format: '%d/%b/%Y:%H:%M:%S %z'
          output_time_format: '%Y-%m-%d %H:%M:%S'

Il record risultante sarà simile a questo:```json { "c_ip": "192.168.133.70", "remote_user": "-", "@timestamp": "2022-01-23 19:14:37", "method": "GET", "uri": "/blog/", "http_prot": "1.1", "status_code": "200", "body_bytes_sent": "2497", "referer": "https://u0041.co/", "user_agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0", "full_path": "/var/log/nginx/access.log.9.gz" }

root@kitploit:~
I modificatori disponibili sono:

| Nome                     | Dettagli                                                      | input_time_format                      | output_time_format                                           |
| ------------------------ | ------------------------------------------------------------ | -------------------------------------- | ------------------------------------------------------------ |
| epoch_to_iso             | Converte timestamp epoch in formato data e ora personalizzato      | N/A                                    | specifica il formato di data e ora di output, default è `%Y-%m-%d %H:%M:%S` |
| datetime_to_iso          | Riformatta data e ora dal formato `input_time_format` al formato `output_time_format` | specifica il formato di data e ora di input | specifica il formato di data e ora di output, default è `%Y-%m-%d %H:%M:%S` |
| time_without_year_to_iso | Formatta data e ora senza anno dal formato `input_time_format` al formato `output_time_format` | specifica il formato di data e ora di input | specifica il formato di data e ora di output, default è `%Y-%m-%d %H:%M:%S` |
| to_int | Converte dati stringa (come i tipi di artefatto `command` e `parse`) in interi (`i64`, cioè intero a 64 bit con segno). Utile per campi come la dimensione del file per poter fare controlli come `size < 1024` usando la piattaforma dati di nostra scelta | N/A | N/A |

Il modificatore `time_without_year_to_iso` funziona come segue:

* Aggiunge l'anno corrente, poi verifica se il tempo del parser è < tempo corrente; se lo è, allora è il tempo corretto
* altrimenti è l'anno precedente

Questo modificatore assume che i log siano per **UN SOLO** anno, usalo con cautela
Scarica lo strumento
Dettagli OSArchitetturaSuccesso?Dettagli
Ubuntu 20.04.3 LTSx86_64✅
Ubuntu 19.04x86_64✅
Ubuntu 18.04.6 LTSx86_64✅
Ubuntu 17.04x86_64✅
Ubuntu 16.04.7 LTSx86_64✅
Ubuntu 15.10x86_64✅
Ubuntu 14.04.6 LTSx86_64✅
Ubuntu 13.04x86_64✅
Ubuntu 12.04.5 LTSx86_64✅
CentOS 8.4.2105x86_64✅
CentOS 7.9.2009x86_64✅
CentOS 6.10x86_64✅
CentOS 5.11x86_64❌osquery richiede libc >= 2.12
Ubuntu 20.04aarch64✅
MacOS Monterey v12.0.1x86_64✅è necessaria una regolazione della configurazione. Se hai esperienza con gli artefatti MacOS sentiti libero di contribuire
Oracle Linux Server 7.9x86_64✅