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
duckdb — Framework di test della correttezza transazionale basato su Jepsen per DuckDB, che rileva anomalie di isolamento come violazioni G2-item e SSI tramite carichi di lavoro randomizzati e il checker Elle. | Kitploit
Strumenti/GitHubGitHub/jepsen-io/duckdb
Analisi delle VulnerabilitàPaper e RicercaApprendimento e FormazioneSicurezza dei DatabaseRilevamento di Anomalie
GitHubjepsen-io/duckdb

duckdb

Framework di test della correttezza transazionale basato su Jepsen per DuckDB, che rileva anomalie di isolamento come violazioni G2-item e SSI tramite carichi di lavoro randomizzati e il checker Elle.

Vedi Repository
5255 mesi faNon ancora revisionato

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

Jepsen DuckDB Test

Test Jepsen per il database DucKDB. Viene eseguito localmente, piuttosto che su un cluster remoto. Il test avvia una serie di processi locali che aprono un file DuckDB localmente, e interagisce con loro tramite STDIN/STDOUT.

Questo è un prototipo iniziale. Si avvia, esegue transazioni, le controlla per correttezza e segnala bug, ma non sono sicuro che quei bug siano reali.

Installazione

Avrai bisogno di un JDK (21+), Git, Gnuplot, Graphviz, e Leiningen. A differenza della maggior parte dei test Jepsen, questo viene eseguito interamente localmente; non hai bisogno di un cluster di macchine, chiavi SSH, ecc.

Debian

root@kitploit:~
sudo apt install openjdk leiningen gnuplot graphviz

OS X

root@kitploit:~
brew install openjdk leiningen gnuplot graphviz

Utilizzo

Per eseguire un test, prova:

root@kitploit:~
lein run test

DuckDB fornisce (sospetto) Strong SI per impostazione predefinita, ed è ciò che il test verifica. Tuttavia permette G2-item, che è una violazione di Repeatable Read. Per dimostrarlo, prova:

root@kitploit:~
lein run test --time-limit 10 --expected-consistency-model serializable --max-writes-per-key 8

Stiamo chiedendo di testare per dieci secondi, per cercare violazioni della Serializzabilità, e (per generare esempi piccoli e leggibili), di scrivere solo 8 elementi per chiave. Esempi di G2-item dovrebbero essere disponibili in store/latest/elle/G2-item.

Ci sono diverse opzioni di ottimizzazione disponibili. L'aiuto per le varie opzioni è disponibile tramite lein run test --help.

I risultati dei test vengono scritti in store/<test-name>/<date>/, e collegati simbolicamente come store/latest. Ciascuna di queste directory di test è autonoma; puoi copiarla, comprimerla in tar, analizzarla in seguito, eliminarla, e così via. Puoi anche eseguire un server web per sfogliare i risultati.

root@kitploit:~
lein run serve

È disponibile un REPL; vedi lein repl.

Struttura

Il test harness si trova in questa directory; il suo file di progetto è project.clj, il suo codice sorgente si trova in src/, e così via.

Il test harness esegue un programma separato, il "nodo locale", che incorpora la libreria DuckDB ed esegue transazioni su di esso. Il test harness genera transazioni casuali per un dato carico di lavoro, le invia tramite HTTP al nodo locale, e registra i risultati di tali transazioni, controllando alla fine varie anomalie transazionali. Cerchiamo Strong Snapshot Isolation, utilizzando il checker Elle (https://github.com/jepsen-io/elle).

Il nodo locale ha un piccolo server HTTP che riceve transazioni astratte (ad es. "leggi la chiave x, poi imposta y a 5") dal test harness, e le traduce in transazioni eseguite contro il driver JDBC di DuckDB.

Possiamo iniettare un tipo di guasto: uccisione dei processi.

Carichi di lavoro

Abbiamo due carichi di lavoro.

Il primo, append, esegue transazioni che aggiungono interi unici a liste, e legge il contenuto di tali liste. Ogni lista risiede in una singola riga, distribuita su diverse tabelle. Le liste sono identificate da chiave primaria o da una chiave secondaria non indicizzata. Le liste sono codificate sia come campi di testo sia come liste DuckDB INTEGER{] . La mutazione viene eseguita con INSERT ON CONFLICT UPDATE o MERGE INTO.

Il secondo, fkey-register, esegue letture e scritture di registri interi. In DuckDB, memorizziamo questi registri in due tabelle. Una tabella logica mappa chiavi a ID fisici, con una chiave esterna. Una tabella fisica mappa ID fisici a valori. Usiamo un semplice JOIN tra le due per la lettura. Le scritture vengono eseguite aggiornando la riga fisica, oppure creando una nuova riga fisica e alterando il puntatore logico ad essa. Ho appena fatto funzionare questo carico di lavoro oggi; viene eseguito, ma non è ancora rifinito.

Licenza

Copyright © 2026 Jepens, LLC

This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at https://www.eclipse.org/legal/epl-2.0.

This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.

Scarica lo strumento