menios icon indicating copy to clipboard operation
menios copied to clipboard

Implement capability-based security system for microkernel IPC

Open pbalduino opened this issue 4 months ago • 0 comments

Goal

Implement a capability-based security system to control access to resources and services in a microkernel architecture.

Context

Capabilities provide fine-grained access control essential for microkernel security. Unlike traditional permission models, capabilities are unforgeable tokens that grant specific rights to specific resources.

Definition of Done

  • Capability structure: Unforgeable capability tokens with type and permissions
  • Capability transfer: Secure transfer of capabilities via IPC messages
  • Capability validation: Fast validation of capability authenticity
  • Capability revocation: Ability to revoke capabilities when needed
  • Resource protection: All system resources protected by capabilities
  • Capability inheritance: Controlled inheritance across process creation
  • Capability storage: Secure per-process capability storage
  • Delegation: Controlled capability delegation between processes

Capability Structure

struct capability {
    uint64_t object_id;        // Unique object identifier
    uint32_t permissions;      // Permission bits
    uint32_t owner;           // Owning process ID
    uint64_t generation;      // Anti-reuse generation number
    uint64_t expiry;          // Expiration timestamp
    uint8_t signature[16];    // HMAC signature for authenticity
};

// Permission bits
#define CAP_READ     0x001
#define CAP_WRITE    0x002
#define CAP_EXECUTE  0x004
#define CAP_DELETE   0x008
#define CAP_GRANT    0x010    // Can grant to others
#define CAP_REVOKE   0x020    // Can revoke from others

Capability Types

// Object types
#define CAP_TYPE_FILE      1
#define CAP_TYPE_MEMORY    2
#define CAP_TYPE_DEVICE    3
#define CAP_TYPE_SERVICE   4
#define CAP_TYPE_PROCESS   5
#define CAP_TYPE_NETWORK   6

System Calls

// Capability management
capability_t create_capability(uint64_t object_id, uint32_t perms);
int grant_capability(pid_t process, capability_t cap);
int revoke_capability(capability_t cap);
int validate_capability(capability_t cap, uint32_t required_perms);

// Capability queries
int list_capabilities(capability_t *caps, size_t max_count);
int capability_info(capability_t cap, struct cap_info *info);

Implementation Details

Capability Storage

  • Per-process capability table
  • Hash table for fast lookup
  • Reference counting for shared capabilities
  • Secure storage protection

Capability Validation

bool validate_capability(struct capability *cap, uint32_t required_perms) {
    // Check permissions
    if ((cap->permissions & required_perms) != required_perms)
        return false;
    
    // Check expiration
    if (cap->expiry && get_time() > cap->expiry)
        return false;
    
    // Verify signature
    uint8_t computed_sig[16];
    hmac_sha1(cap, sizeof(*cap) - 16, kernel_key, computed_sig);
    return memcmp(cap->signature, computed_sig, 16) == 0;
}

Capability Transfer

  • Secure transfer via IPC messages
  • Capability delegation chains
  • Controlled capability amplification
  • Anti-confusion deputy protections

Resource Protection

  • All kernel objects protected by capabilities
  • Mandatory capability checks on access
  • No ambient authority (except initial capabilities)
  • Principle of least privilege enforcement

Testing Strategy

  • Test capability creation and validation
  • Test capability transfer via IPC
  • Test permission enforcement
  • Test capability revocation
  • Test delegation chains
  • Test anti-forgery protections
  • Test performance of capability operations

Dependencies

  • Message passing IPC: Issue #106 - Need IPC for capability transfer
  • Cryptographic support: Need HMAC for capability signatures
  • Process management: Need process identification for capability ownership
  • Memory management: Need secure memory for capability storage
  • Timer system: Issue #101 - Need timestamps for capability expiry

Integration Points

  • Integrate with all system calls for access control
  • Add capability checks to resource access
  • Implement capability inheritance for process creation
  • Support capability-based service discovery

Security Considerations

  • Cryptographically secure capability signatures
  • Protection against capability forgery
  • Secure key management for HMAC
  • Protection against time-of-check-time-of-use attacks
  • Capability confinement and least privilege

Files to Create/Modify

  • src/kernel/security/capability.c - Core capability implementation
  • src/kernel/security/capability.h - Capability interface
  • src/kernel/security/hmac.c - HMAC implementation for signatures
  • include/security/capability.h - Userspace capability interface

Error Handling

  • EPERM for insufficient capabilities
  • EINVAL for malformed capabilities
  • ENOENT for non-existent objects
  • ETIMEDOUT for expired capabilities
  • EACCES for revoked capabilities

Performance Considerations

  • Fast capability validation (< 100 cycles)
  • Efficient capability lookup structures
  • Minimal memory overhead per capability
  • Optimized HMAC computation
  • Cache-friendly capability tables

Advanced Features

  • Capability compression: Compact representation for common patterns
  • Capability derivation: Derive restricted capabilities from broader ones
  • Capability sets: Grouped capabilities for batch operations
  • Capability domains: Hierarchical capability organization
  • Audit logging: Security audit trail for capability operations

Usage Examples

// Create file capability
capability_t file_cap = create_capability(file_obj_id, CAP_READ | CAP_WRITE);

// Grant capability to another process
grant_capability(target_pid, file_cap);

// Validate capability before file operation
if (validate_capability(file_cap, CAP_READ)) {
    // Proceed with file read
    read_file(file_obj_id, buffer, size);
}

// Revoke capability
revoke_capability(file_cap);

Microkernel Integration

  • File server: Capabilities for files and directories
  • Device drivers: Capabilities for hardware devices
  • Network server: Capabilities for network resources
  • Memory manager: Capabilities for memory regions
  • Process manager: Capabilities for process control

Related Issues

  • Essential for microkernel security model
  • Required for Issue #106 (message passing IPC)
  • Foundation for secure server architecture
  • Enables fine-grained access control

pbalduino avatar Sep 28 '25 01:09 pbalduino