Skip to content

Defense Randomization

Per-session randomization

Each client session gets different rate limit values:

from drogue.defense.randomizer import DefenseRandomizer

randomizer = DefenseRandomizer(
    rate_limit_range=(80, 120),  # randomize between 80-120% of base
)

# Get randomized limit for a session
effective = randomizer.get_effective_limit("session_abc", base_limit=100)
# 80 to 120 depending on session

Honeypots

from drogue.defense.randomizer import HoneypotManager

manager = HoneypotManager()

# Register honeypot paths
manager.register("/admin/debug", auto_ban=True, ban_duration=3600.0, response_code=404)
manager.register("/.env", auto_ban=True)
manager.register("/wp-admin", auto_ban=True)

# Check if a path is a honeypot
if manager.is_honeypot("/admin/debug"):
    print("Honeypot triggered")

# Record a hit
manager.record_hit("/admin/debug", "scanner_client_id")

# Check if client is a bot
if manager.is_bot("scanner_client_id"):
    print("Bot detected")

# Get hit history for a client
hits = manager.get_hits("scanner_client_id")  # list of timestamps

# Get stats
stats = manager.get_stats()
# {"registered_honeypots": 3, "clients_botted": 2, "total_hits": 5}

# Clear a client
manager.clear_client("scanner_client_id")

Configuration

from drogue.core.config import DrogueConfig

config = DrogueConfig(
    adaptive_enabled=True,
    adaptive_cpu_threshold=0.8,
    adaptive_memory_threshold=0.8,
)

Why randomization helps

  • Prevents attackers from discovering exact limits
  • Different clients hit limits at different times
  • Honeypots detect automated scanners
  • Makes reverse-engineering rate limits harder