
Generazione automatica di regole YARA dal database dei certificati compromessi di Cert Central.
Generazione automatica di regole YARA a partire dal database di certificati compromessi di CertGraveyard.
# Clona il repository
git clone https://github.com/tjnel/certgraveyard_yara.git
cd certgraveyard_yara
# Installa con UV
uv sync --all-extras
# Scarica l'ultimo CSV da CertGraveyard
cert-graveyard-yara download
# Controlla se il CSV è cambiato
cert-graveyard-yara check-changed
# Genera le regole YARA
cert-graveyard-yara generate
# Valida le regole
cert-graveyard-yara validate --engine yara
# Crea file combinato e archivio ZIP
cert-graveyard-yara combine
cert-graveyard-yara package
# Esegui l'intera pipeline
cert-graveyard-yara run --all
Scarica l'ultima release o usa direttamente le regole:
# Scansione con il set di regole combinato
yara rules/combined/MAL_Compromised_Cert_*.yara /path/to/scan
# Oppure usa regole individuali
yara rules/individual/*.yara /path/to/scan
cert-graveyard-yara/
├── .github/workflows/ # GitHub Actions
│ ├── daily-update.yml # Controllo CSV giornaliero e generazione regole
│ ├── ci.yml # Validazione e test delle PR
│ └── release.yml # Creazione release
├── src/cert_graveyard_yara/ # Codice sorgente
│ ├── __init__.py
│ ├── downloader.py # Download e caching CSV
│ ├── parser.py # Parsing CSV
│ ├── generator.py # Generazione regole YARA
│ ├── validator.py # Validazione regole
│ ├── changelog.py # Gestione changelog
│ └── cli.py # Interfaccia a riga di comando
├── tests/ # Suite di test
├── rules/
│ ├── individual/ # File di regole YARA individuali
│ └── combined/ # File di release combinati
├── data/ # Dati CSV e file hash
├── templates/ # Template Jinja2
└── CHANGELOG.md
Ogni regola segue questo formato:
import "pe"
rule MAL_Compromised_Cert_Emotet_DigiCert_0a_1b_2c_3d {
meta:
description = "Rileva il malware Emotet utilizzando un certificato compromesso..."
author = "TNEL (https://github.com/tjnel/certgraveyard_yara)"
reference = "https://certgraveyard.org"
hash = "a1b2c3d4..."
malware = "Emotet"
malware_type = "Trojan"
cert_issuer = "DigiCert SHA2 Assured ID Code Signing CA"
cert_serial = "0a:1b:2c:3d"
cert_valid_from = "2024-01-15"
cert_valid_to = "2025-01-15"
condition:
uint16(0) == 0x5a4d and
for any sig in pe.signatures : (
sig.issuer contains "DigiCert SHA2 Assured ID Code Signing CA" and
sig.serial == "0a:1b:2c:3d"
)
}
# Installa con dipendenze di sviluppo
uv sync --all-extras
# Esegui linting
uv run ruff check src tests
# Esegui controllo tipi
uv run mypy src
# Esegui test
uv run pytest
# Esegui tutti i test con copertura
uv run pytest
# Esegui un file di test specifico
uv run pytest tests/test_generator.py
# Esegui con output verboso
uv run pytest -v
| Variabile | Descrizione | Default |
|---|---|---|
CERTGRAVEYARD_URL | URL di download CSV | https://certgraveyard.org/api/download_csv |
Licenza MIT - vedi LICENSE per i dettagli.
| Comando | Descrizione |
|---|
download | Scarica il CSV da CertGraveyard |
check-changed | Controlla se il CSV è cambiato dall'ultima esecuzione |
generate | Genera regole YARA dal CSV |
validate | Valida le regole YARA |
changelog | Aggiorna il changelog con le modifiche |
combine | Crea un file YARA combinato |
package | Crea un archivio ZIP delle regole |
run | Esegue l'intera pipeline |