FalcoSecurity.Plugin.Sdk
1.0.0
SDK do Plugin Falco não oficial para .NET, alimentado pelas exportações nativas do DNNE e pelo gerenciamento de memória nativo Net6+.
Para um exemplo completo e informações adicionais sobre como isso funciona, confira o wiki!
| Desc | Changelog | ||
|---|---|---|---|
| Falcosecurity.plugin.sdk | Tipos SDK do plug -in do núcleo | Changelog.md | |
| Falcosecurity.plugin.sdk.generators | Geradores de origem para exportações nativas | Changelog.md | |
| Falcosecurity.plugin.sdk.template | Modelo de projeto dotnet new falcoplugin |
[ FalcoPlugin (
Id = 999 ,
Name = "dummy_plugin" ,
Description = "A dummy plugin" ,
Contacts = "mvenditto" ,
RequiredApiVersion = "2.0.0" ,
Version = "1.0.0" ) ]
public class Plugin : PluginBase , IEventSource , IFieldExtractor {
public string EventSourceName => "dummy_source" ;
public IEnumerable < string > EventSourcesToExtract
=> Enumerable . Empty < string > ( ) ; // only consume ourselves event-source
public IEnumerable < OpenParam > OpenParameters =>
=> Enumerable . Empty < string > ( ) ; // no specific open-params
public IEnumerable < ExtractionField > Fields => new List < ExtractionField > {
new ( type : "uint64" ,
name : "dummy.counter" ,
display : "Counter value" ,
desc : "Current value of the internal counter" )
} ;
public IEventSourceInstance Open ( IEnumerable < OpenParam > ? openParams ) {
return new CounterInstance ( ) ;
}
public void Close ( IEventSourceInstance instance ) {
instance . Dispose ( ) ;
}
public void Extract ( IExtractionRequest extraction , IEventReader evt ) {
var counter = BitConverter . ToInt32 ( evt . Data ) ;
extraction . SetValue ( ( ulong ) counter ) ;
}
}
public class CounterInstance : PullEventSourceInstance {
public int Counter { get ; set ; }
public CounterInstance ( ) : base ( batchSize : 10 , eventSize : 8 ) {
Counter = 1 ;
}
protected override void PullEvent ( EventSourceInstanceContext ctx , IEventWriter evt ) {
var unixNano = ( ulong ) DateTimeOffset . Now . ToUnixTimeSeconds ( ) * 1000000000 ;
evt . Write ( BitConverter . GetBytes ( Counter ) ) ;
evt . SetTimestamp ( unixNano ) ;
if ( Counter >= 50 ) {
ctx . IsEof = true ;
}
Counter += 1 ;
}
} - rule : Dummy counter rule
desc : Dummy counter equals 42
condition : (dummy.counter=42)
output : dummy.counter is 42 value=%dummy.counter
priority : DEBUG
source : dummy_source
tags : [dummy] admin@em algum lugar: ~ $ árvore/usr/share/falco
/usr/share/falco/
└── Plugins
├── libjson.so
├── libk8saudit.so
└── DUMMY_PLUGIN
├── plugin_native.so
├── FalcoSecurity.plugin.sdk.dll
├── FalcoSecurity.plugin.sdk.dummyplugin.dll
├── Microsoft.Extensions.ObjectPool.dll
└── FalcoSecurity.plugin.sdk.dummyplugin.runtimeconfig.json
admin@em algum lugar: ~ $ Falco-Dummy_Source
Sáb 5 de novembro 18:08:52 2022: Falco Versão: 0.33.0 (x86_64)
[...TRUNCADO...]
Sáb 5 de novembro 18:08:52 2022: Fontes de eventos ativadas: Dummy_source
Sáb 5 de novembro 18:08:52 2022: Abertura da fonte do evento 'Dummy_source'
Sáb 5 de novembro 18:08:52 2022: Captura de abertura com plugin 'Dummy_plugin'
Sáb 5 de novembro 18:08:52 2022: Fechando a fonte do evento 'Dummy_source'
18: 08: 52.000000000: Dummy.counter.counter é 42 valor = 42
Eventos detectados: 1
Contagem de regras por gravidade:
Debug: 1
Regras desencadeadas pelo nome da regra:
Dummy Counter Regra: 1
admin@em algum lugar: ~ $ █Este SDK não é oficial e não está associado nem endossado por Sysdig e FalcoSecurity/Falco