Das Lunatik-Projekt entwickelt Tools, mit denen Sie mithilfe der Lua-Sprache die Funktionalität des Linux-Kernels erweitern und schnell Handler-Skripte schreiben können, die auf Kernel-Ebene ausgeführt werden. Um den Code auszuführen, wird ein Lua-Interpreter verwendet, der so modifiziert wurde, dass er auf Kernel-Ebene funktioniert. Der Projektcode ist in C geschrieben und wird unter der MIT-Lizenz vertrieben.
Zum Laden und Ausführen von Lua-Skripten auf Kernel-Ebene wird ein spezieller Treiber verwendet, und es wird ein Befehlszeilenprogramm angeboten, um die Lua-Umgebung im Kernel vom Benutzerbereich aus zu steuern. Das Projekt stellt außerdem eine C-API bereit, um das Laden und Ausführen von Lua-Skripten aus dem Linux-Kernel zu steuern, mit der beispielsweise einzelne Lua-Handler aus traditionellen, in C geschriebenen Kernel-Modulen ausgeführt werden können. Die Lua-API und eine Reihe von Bindungen werden bereitgestellt, um über Lua-Code auf Kernelfunktionen zuzugreifen.
Lua-Skripte können eine Teilmenge von Bibliotheksfunktionen und -fähigkeiten nutzen, die aufgrund der Besonderheiten der Arbeit innerhalb des Kernels eingeschränkt sind. Beispielsweise unterstützt der Code keine Gleitkommaoperationen, die Bibliotheken io und os können nicht verwendet werden und viele Funktionen der Mathematikbibliothek sind nicht verfügbar. Die C-API unterstützt die Funktionen luaL_Stream, luaL_execresult, luaL_fileresult, luaopen_io und luaopen_os nicht.
Zu den Funktionen des Befehlszeilenprogramms gehören das Abbrechen von Befehlen zum Laden, Entladen und erneuten Laden von Lunatik-Modulen im Kernel, das Anzeigen des Status geladener Module, das Anzeigen einer Liste der im Kernel ausgeführten Skripts, das Ausführen von Skripts sowie das Erstellen und Stoppen der Lua-Laufzeit Umgebungen im Kernel mithilfe der interaktiven Shell REPL (Read –Eval–Print Loop).
Das Projekt bietet außerdem eine Reihe von Beispielen, mit denen Sie die Fähigkeiten von Lunatik evaluieren können. Beispielsweise sind Skripte verfügbar, die einen Gerätetreiber für Zeichenketten, einen Netzwerk-Sniffer mit MAC-Adressenprotokollierung und eine Datenbank zur Speicherung von Schlüssel/Wert-Paaren implementieren. Server für das ECHO-Protokoll, einen Keylogger zum Protokollieren gedrückter Tasten, eine Tastatursperre (nach dem Drücken von „↑ ↑ ↓ ↓ ← → ← → LCTRL LALT“ stoppt der Kernel die Verarbeitung von Tastatureingaben, bis die Sequenz erneut eingegeben wird), einen Treiber zur Überwachung von Systemaufrufen, einen Routing-Dienst und verschiedene Add-ons für die Subsysteme Netfilter und XDP.
Source: opennet.ru
