security

package
v0.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 15, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package security provides security controls and sandboxing for extension loading and execution, including plugin signature verification and resource monitoring.

This package protects against:

  • Malicious plugin code execution
  • Path traversal attacks
  • Unsigned or tampered plugins
  • Resource exhaustion (memory, CPU)
  • Unauthorized file access
  • Untrusted plugin sources

Sandbox Configuration

Create a sandbox with security policies:

cfg := &config.SecurityConfig{
    EnableSandbox:       true,
    RequireSignature:    true,
    AllowUnsafe:         false,
    AllowedPaths:        []string{"/plugins", "/extensions"},
    BlockedExtensions:   []string{".exe", ".sh", ".bat"},
    TrustedSources:      []string{"github.com/myorg"},
}

sandbox := security.NewSandbox(cfg)

Plugin Validation

Validate plugin before loading:

// Check plugin path is allowed
if err := sandbox.ValidatePluginPath("/plugins/my-plugin.so"); err != nil {
    log.Fatal("Invalid plugin path:", err)
}

// Verify plugin signature
if err := sandbox.ValidatePluginSignature("/plugins/my-plugin.so"); err != nil {
    log.Fatal("Signature verification failed:", err)
}

// Check plugin source is trusted
if err := sandbox.ValidatePluginSource("github.com/myorg/plugin"); err != nil {
    log.Fatal("Untrusted plugin source:", err)
}

Signature Verification

The package uses SHA256 hash-based signature verification:

// Plugin signature file (.sig) should contain SHA256 hash
// Example: my-plugin.so.sig
//   contains: "abc123...def456"

// Generate signature for plugin
hash := sha256.Sum256(pluginBytes)
signature := hex.EncodeToString(hash[:])
os.WriteFile("plugin.so.sig", []byte(signature), 0644)

Signatures are verified automatically during ValidatePluginSignature.

Resource Monitoring

Monitor and limit plugin resource usage:

monitor := security.NewResourceMonitor(&config.PerformanceConfig{
    MaxMemoryMB:   512,
    MaxCPUPercent: 50,
})

// Check if plugin can be loaded
if err := monitor.CheckResourceLimits("my-plugin"); err != nil {
    log.Fatal("Insufficient resources:", err)
}

// Record plugin metrics
monitor.RecordPluginMetrics("my-plugin", &security.PluginMetrics{
    MemoryUsageMB:   45.2,
    CPUUsagePercent: 12.5,
    LoadTime:        150 * time.Millisecond,
    InitTime:        50 * time.Millisecond,
})

// Get plugin metrics
metrics := monitor.GetPluginMetrics("my-plugin")

Path Validation

Prevent directory traversal attacks:

// Only allows access to whitelisted directories
cfg.AllowedPaths = []string{"/var/plugins", "/opt/extensions"}

// Blocks dangerous file extensions
cfg.BlockedExtensions = []string{".exe", ".sh", ".bat", ".cmd"}

Development vs Production

Use AllowUnsafe for development only:

if os.Getenv("ENV") == "development" {
    cfg.AllowUnsafe = true      // Skip signature checks
    cfg.RequireSignature = false
} else {
    cfg.AllowUnsafe = false     // Enforce all security
    cfg.RequireSignature = true
}

Best Practices

  • Always enable sandbox in production
  • Require signatures for production plugins
  • Use HTTPS for plugin distribution
  • Limit plugin file access to specific directories
  • Monitor resource usage continuously
  • Implement plugin update verification
  • Log all security validation failures
  • Use trusted plugin sources only
  • Set conservative resource limits
  • Clean up metrics when plugins are removed

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type PluginMetrics

type PluginMetrics struct {
	MemoryUsageMB   float64
	CPUUsagePercent float64
	LoadTime        time.Duration
	InitTime        time.Duration
	LastAccess      time.Time
}

PluginMetrics holds resource metrics for a plugin

type ResourceMonitor

type ResourceMonitor struct {
	// contains filtered or unexported fields
}

ResourceMonitor monitors plugin resource usage

func NewResourceMonitor

func NewResourceMonitor(cfg *config.PerformanceConfig) *ResourceMonitor

NewResourceMonitor creates a new resource monitor

func (*ResourceMonitor) CheckResourceLimits

func (rm *ResourceMonitor) CheckResourceLimits(pluginName string) error

CheckResourceLimits validates if plugin can be loaded based on resource limits

func (*ResourceMonitor) Cleanup

func (rm *ResourceMonitor) Cleanup(pluginName string)

Cleanup removes metrics for unloaded plugins

func (*ResourceMonitor) GetAllMetrics

func (rm *ResourceMonitor) GetAllMetrics() map[string]*PluginMetrics

GetAllMetrics returns all plugin metrics

func (*ResourceMonitor) GetPluginMetrics

func (rm *ResourceMonitor) GetPluginMetrics(pluginName string) *PluginMetrics

GetPluginMetrics returns metrics for a specific plugin

func (*ResourceMonitor) RecordPluginMetrics

func (rm *ResourceMonitor) RecordPluginMetrics(pluginName string, metrics *PluginMetrics)

RecordPluginMetrics records resource usage for a plugin

type Sandbox

type Sandbox struct {
	// contains filtered or unexported fields
}

Sandbox provides security controls for extension loading

func NewSandbox

func NewSandbox(cfg *config.SecurityConfig) *Sandbox

NewSandbox creates a new sandbox instance

func (*Sandbox) ValidatePluginPath

func (s *Sandbox) ValidatePluginPath(path string) error

ValidatePluginPath checks if plugin path is allowed

func (*Sandbox) ValidatePluginSignature

func (s *Sandbox) ValidatePluginSignature(path string) error

ValidatePluginSignature checks plugin signature if required

func (*Sandbox) ValidatePluginSource

func (s *Sandbox) ValidatePluginSource(source string) error

ValidatePluginSource checks if plugin source is trusted

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL