Uncategorized

Hazina Plugin Beveiliging: Sandboxing van Runtime-gegenereerde Code

Het uitvoeren van dynamisch gegenereerde code in productie klinkt eng. En dat zou het ook moeten zijn – als je het verkeerd doet. Hazina’s plugin sandbox is ontworpen met beveiliging als primaire zorg, met gebruik van meerdere beschermingslagen.

Defense in Depth

Hazina gebruikt vier beveiligingslagen voor plugins:

  1. Compilatietijd-analyse – Blokkeer gevaarlijke code voordat deze compileert
  2. Namespace-whitelisting – Alleen goedgekeurde API’s zijn beschikbaar
  3. Runtime sandbox – Tijdslimieten en geheugengrenzen
  4. Service-injectiecontrole – Plugins hebben alleen toegang tot services die je expliciet toestaat

Compilatietijd Beveiliging

// Deze patronen worden geblokkeerd tijdens de compilatie:
// - Directe toegang tot het bestandssysteem (System.IO.File, Directory)
// - Ruwe netwerkoproepen (Socket, HttpClient)
// - Procesuitvoering (Process.Start)
// - Reflectie (Assembly.Load, Type.InvokeMember)
// - Thread-manipulatie (Thread.Start, Task.Run)

De Sandbox Configureren

builder.Services.AddHazinaPlugins(options => {
    options.Security = new PluginSecuritySettings {
        // Namespace whitelist
        AllowedNamespaces = new[] {
            "System",
            "System.Linq",
            "System.Collections.Generic",
            "System.Text.Json",
            "MyApp.Models"   // Je eigen veilige types
        },

        // Uitvoeringslimieten
        MaxExecutionTime = TimeSpan.FromSeconds(30),
        MaxMemoryMB = 128,

        // Service toegang
        AllowedServices = new[] {
            typeof(IEmailService),
            typeof(ILogger),
            typeof(IDocumentStore)
        }
    };
});

De Plugin Context

Plugins hebben geen directe toegang tot DI – ze gaan via een gecontroleerde context:

// Binnen een plugin:
var logger = context.GetService<ILogger>();    // OK - op de whitelist
var db = context.GetService<DbContext>();       // Gooit een fout - niet op de whitelist
var param = context.GetParameter<Customer>("customer"); // Veilige parameter toegang

Timeout Bescherming

try
{
    var result = await pluginManager.ExecuteAsync("MyPlugin", parameters);
}
catch (PluginTimeoutException ex)
{
    logger.LogWarning("Plugin {Name} liep vast na {Duration}",
        ex.PluginName, ex.Duration);
}

Audit Trail

Elke plugin-uitvoering wordt gelogd:

  • Wie de plugin heeft gemaakt
  • Wanneer het werd gecompileerd
  • Elke uitvoering met duur en resultaat
  • Versiegeschiedenis met verschillen

In de volgende post kijken we naar Agent Orchestration – Hazina’s framework voor het bouwen van autonome AI-agenten.

Veelgestelde Vragen

Hoe zorgt Hazina voor de beveiliging van runtime-gegenereerde code?

Hazina hanteert een gelaagde beveiligingsaanpak genaamd Defense in Depth, die compilatietijd-analyse omvat om gevaarlijke code te blokkeren, namespace-whitelisting voor goedgekeurde API’s, een runtime sandbox met uitvoeringslimieten en gecontroleerde service toegang voor plugins.

Welke soorten code worden geblokkeerd tijdens de compilatie in Hazina?

Hazina blokkeert verschillende gevaarlijke codepatronen tijdens de compilatie, waaronder directe toegang tot het bestandssysteem, ruwe netwerkoproepen, procesuitvoering, reflectie en thread-manipulatie, om ervoor te zorgen dat alleen veilige code kan worden uitgevoerd.

Hoe kunnen ontwikkelaars de Hazina plugin sandbox configureren?

Ontwikkelaars kunnen de Hazina plugin sandbox configureren door de `AddHazinaPlugins`-methode te gebruiken, waar ze beveiligingsopties kunnen instellen zoals toegestane namespaces, uitvoeringslimieten en toegestane services om te controleren waartoe de plugins toegang hebben.

Welke informatie wordt gelogd tijdens de uitvoering van plugins in Hazina?

Hazina logt uitgebreide details tijdens de uitvoering van plugins, inclusief wie de plugin heeft gemaakt, wanneer het werd gecompileerd, de duur en het resultaat van elke uitvoering, en versiegeschiedenis met verschillen, wat zorgt voor een grondige audit trail voor verantwoording.

Terug naar overzicht
ENNL