Lunatik プロジェクトは、Lua 言語を使用して Linux カーネルの機能を拡張し、カーネルレベルのハンドラー スクリプトを迅速に記述できるようにするツールキットを開発しています。コードは、カーネル レベルで実行するように変更された Lua インタープリターを使用して実行されます。プロジェクト コードは C で記述され、MIT ライセンスの下で配布されます。
特別なドライバーを使用してカーネル レベルで Lua スクリプトをロードおよび実行し、ユーザー空間からカーネル内の Lua 環境を管理するためのコマンドライン ユーティリティが提供されます。このプロジェクトでは、Linux カーネルからの Lua スクリプトの読み込みと実行を管理するための C API も提供されており、これを使用して、たとえば、C で記述された従来のカーネル モジュールから個々の Lua ハンドラーを実行できます。Lua コードからカーネル関数にアクセスするために、Lua API と一連のバインディングが提供されます。
Luaスクリプトは、カーネル内部の動作仕様によって制限されるライブラリ関数と機能のサブセットを使用できます。例えば、コードは浮動小数点演算をサポートしておらず、ioライブラリとosライブラリは使用できず、数学ライブラリの多くの関数も利用できません。C APIは、luaL_Stream、luaL_execresult、luaL_fileresult、luaopen_io、およびluaopen_os関数をサポートしていません。
コマンドライン ユーティリティの機能には、カーネル内の Lunatik モジュールをロード、アンロード、およびリロードするコマンドの発行、ロードされたモジュールのステータスの表示、カーネル内で実行されているスクリプトのリストの表示、スクリプトの実行、カーネル内での Lua ランタイム環境の作成と停止、対話型 REPL (Read-Eval-Print Loop) シェルの使用などがあります。
このプロジェクトでは、Lunatikの機能を評価するのに役立つサンプルも提供されています。例えば、キャラクタデバイスドライバ、MACアドレスログ機能を備えたネットワークスニファー、キー/値データを格納するデータベースを実装するスクリプトが用意されています。 サーバー ECHO プロトコル用には、押されたキーを記録するキーロガー、キーボード ロッカー (「↑ ↑ ↓ ↓ ← → ← → LCTRL LALT」を押した後、シーケンスが再度入力されるまでカーネルはキーストロークの処理を停止します)、システム コールを監視するドライバー、ルーティング サービス、および Netfilter および XDP サブシステム用のさまざまなアドオンがあります。
出所: オープンネット.ru
