Back to updates
New releaseAug 6, 2026

certgraveyard_yara v2026.08.06

Automated YARA rule generation from the Cert Central compromised certificate database.

Share

CertGraveyard YARA - YARA Rules for Certificate Analysis

CertGraveyard YARA Rules Generator

GitHub license made-with-python

Automated YARA rule generation from the CertGraveyard compromised certificate database.

Features

  • πŸ”„ Daily Updates: Automatically checks CertGraveyard for new compromised certificates
  • πŸ“ YARA Rule Generation: Creates individual YARA rules for each certificate
  • βœ… Validation: Validates all rules with yara-python
  • πŸ“¦ Release Management: Automated releases with combined ruleset and ZIP archive
  • πŸ“‹ Changelog: Maintains detailed changelog of all additions and modifications

Quick Start

Installation

# Clone the repository
git clone https://github.com/tjnel/certgraveyard_yara.git
cd certgraveyard_yara

# Install with UV
uv sync --all-extras

Usage

# Download latest CSV from CertGraveyard
cert-graveyard-yara download

# Check if CSV has changed
cert-graveyard-yara check-changed

# Generate YARA rules
cert-graveyard-yara generate

# Validate rules
cert-graveyard-yara validate --engine yara

# Create combined file and ZIP archive
cert-graveyard-yara combine
cert-graveyard-yara package

# Run full pipeline
cert-graveyard-yara run --all

Using the Generated Rules

Download the latest release or use the rules directly:

# Scan with combined ruleset
yara rules/combined/MAL_Compromised_Cert_*.yara /path/to/scan

# Or use individual rules
yara rules/individual/*.yara /path/to/scan

Project Structure

cert-graveyard-yara/
β”œβ”€β”€ .github/workflows/      # GitHub Actions
β”‚   β”œβ”€β”€ daily-update.yml    # Daily CSV check and rule generation
β”‚   β”œβ”€β”€ ci.yml              # PR validation and testing
β”‚   └── release.yml         # Release creation
β”œβ”€β”€ src/cert_graveyard_yara/  # Source code
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ downloader.py       # CSV download and caching
β”‚   β”œβ”€β”€ parser.py           # CSV parsing
β”‚   β”œβ”€β”€ generator.py        # YARA rule generation
β”‚   β”œβ”€β”€ validator.py        # Rule validation
β”‚   β”œβ”€β”€ changelog.py        # Changelog management
β”‚   └── cli.py              # Command-line interface
β”œβ”€β”€ tests/                  # Test suite
β”œβ”€β”€ rules/
β”‚   β”œβ”€β”€ individual/         # Individual YARA rule files
β”‚   └── combined/           # Combined release files
β”œβ”€β”€ data/                   # CSV data and hash files
β”œβ”€β”€ templates/              # Jinja2 templates
└── CHANGELOG.md

Generated Rule Format

Each rule follows this format:

import "pe"

rule MAL_Compromised_Cert_Emotet_DigiCert_0a_1b_2c_3d {
   meta:
      description         = "Detects malware Emotet using compromised certificate..."
      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"
      )
}

Development

Setup Development Environment

# Install with dev dependencies
uv sync --all-extras

# Run linting
uv run ruff check src tests

# Run type checking
uv run mypy src

# Run tests
uv run pytest

Running Tests

# Run all tests with coverage
uv run pytest

# Run specific test file
uv run pytest tests/test_generator.py

# Run with verbose output
uv run pytest -v

CLI Commands

CommandDescription
downloadDownload CSV from CertGraveyard
check-changedCheck if CSV has changed since last run
generateGenerate YARA rules from CSV
validateValidate YARA rules
changelogUpdate changelog with changes
combineCreate combined YARA file
packageCreate ZIP archive of rules
runRun full pipeline

Configuration

Environment Variables

VariableDescriptionDefault
CERTGRAVEYARD_URLCSV download URLhttps://certgraveyard.org/api/download_csv

License

MIT License - see LICENSE for details.

Acknowledgments

  • CertGraveyard for providing the compromised certificate database
  • YARA for the pattern matching engine

Categories