アンドレイ・コノバロフ Googleソフトウェアエンジニア、 からの保護をリモートで無効にする方法を発表しました 封鎖 Ubuntuで提供されるLinuxカーネルで提供されます。 どれで 保護方法が効果的でないことを示していますさらに、彼が開示した方法は、理論的にはFedoraカーネルや他のディストリビューションでも機能するはずだと述べています(ただし、テストはされていません)。
封鎖に気付いていない人のために、 彼らはそれがLinuxカーネルのコンポーネントであることを知っている必要があります その主な機能は、システムのカーネル内のrootユーザーのアクセスを制限することです。 そしてこの機能 LSMモジュールに移動されました オプションでロードされます(Linuxセキュリティモジュール)。 UID0とカーネルの間にバリアを確立します、特定の低レベル関数を制限します。
これにより、メカニズム内で暗黙的なポリシーをハードコーディングするのではなく、ロック機能をポリシーベースにすることができます。 したがって、Linux Security Moduleに含まれているロックは、実装に単純なポリシーを提供します 一般的な使用を目的としています。 このポリシーは、カーネルコマンドラインを介して制御可能なレベルの粒度を提供します。
封鎖について
ロックはカーネルへのルートアクセスを制限し、UEFIセキュアブートバイパスパスをブロックします。
たとえば、ロックモードでは、/ dev / mem、/ dev / kmem、/ dev / port、/ proc / kcore、debugfs、debug mode kprobes、mmiotrace、tracefs、BPF、PCMCIA CISなどへのアクセス、一部のインターフェイスは次のとおりです。 CPUのACPIおよびMSRレジスタと同様に制限されています。
kexec_fileおよびkexec_load呼び出しがロックされている間、スリープモードは禁止され、PCIデバイスでのDMAの使用は制限され、EFI変数からのACPIコードのインポートは禁止され、割り込み番号とIの変更を含む入出力ポートでの操作が禁止されます。 /シリアルポートのOポート。
ご存知かもしれませんが、 Linuxカーネル5.4でロックダウンが追加されました。 ただし、パッチの形式で実装されているか、ディストリビューションで提供されているカーネルのパッチによって補完されています。
ここで、ディストリビューションで提供されるプラグインと組み込みカーネルの実装の違いのXNUMXつは、システムへの物理的なアクセスがあるときに提供されるロックを無効にする機能です。
UbuntuとFedoraはキーの組み合わせを使用します Alt + SysRq + X ロックを無効にします。 組み合わせが理解されます Alt + SysRq + X デバイスへの物理的なアクセスでのみ使用でき、リモート攻撃とルートアクセスが発生した場合、攻撃者はロックを無効にすることはできません。
ロックダウンはリモートで無効にできます
アンドレイ・コノヴァロフはそれを証明しました キーボード関連のメソッド ユーザーの物理的な存在を確認することは効果がありません。
エル ロックを無効にする最も簡単な方法はシミュレートすることであると開示しました 押す Alt + SysRq + X スルー / dev / uinput、ただし、このオプションは最初はブロックされています。
しかし 置き換えるための少なくともXNUMXつの方法 Alt + SysRq + X.
- 最初の方法では、インターフェイスを使用します sysrq-トリガー:シミュレートするには、「1」と入力してこのインターフェースを有効にします。 / proc / sys / kernel / sysrq 次に「x」と入力します / proc / sysrq-トリガー.
このギャップは、31月のUbuntuカーネルアップデートとFedora XNUMXで修正されました。開発者は、 / dev / uinput、彼らは最初にこのメソッドをブロックしようとしましたが、コードのバグのためにブロックは機能しませんでした。 - XNUMX番目の方法は、USB / IPを介してキーボードをエミュレートし、仮想キーボードからAlt + SysRq + Xシーケンスを送信することです。
カーネルでは、Ubuntuが提供するUSB / IPがデフォルトで有効になっており、モジュールは usbip_core y vhci_hcd 必要なものには、必要なデジタル署名が提供されます。
攻撃者は、ループバックインターフェイスでネットワークコントローラーを実行し、USB / IPを使用してリモートUSBデバイスとして接続することにより、仮想USBデバイスを作成できます。
指定された方法はUbuntu開発者に報告されていますが、解決策はまだリリースされていません。