これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド guestfs-security です。
プログラム:
NAME
guestfs-security - libguestfs のセキュリティ
DESCRIPTION
このマニュアル ページでは、libguestfs の使用によるセキュリティへの影響、特に
信頼できないゲストまたは悪意のあるゲストまたはディスク イメージ。
SECURITY OF 取り付け ファイルシステム
信頼できないゲスト ファイルシステムをホスト カーネルに直接マウントしないでください (例:
ループバックまたは kpartx を使用します)。
ファイルシステムをマウントすると、カーネル ファイルシステム (VFS) の間違いが問題に発展する可能性があります。
悪意のあるファイルシステムを作成する攻撃者によるエクスプロイト。 これらの悪用は非常に深刻です
XNUMXつの理由。 まず、カーネルには非常に多くのファイルシステム ドライバーがあり、
これらはめったに使用されず、開発者のコードにはあまり注意が払われませんでした。
Linux ユーザースペースは、ファイルシステムのタイプを検出することで潜在的なクラッカーを支援し、
ファイルシステムの種類が予期しないものであっても、適切な VFS ドライバーが自動的に選択されます。
第 XNUMX に、カーネル レベルのエクスプロイトは、ローカル ルートのエクスプロイトに似ています (ある意味でさらに悪い)。
ハードウェア レベルに至るまで、システムへの即時かつ完全なアクセスが可能になります。
これらのエクスプロイトはカーネル内に非常に長期間存在する可能性があります。
(https://lwn.net/Articles/538898/)。
Libguestfs は、エクスプロイトから保護するための階層化されたアプローチを提供します。
信頼できないファイルシステム
--------------------------------------
アプライアンスカーネル
--------------------------------------
非 root として実行されている qemu プロセス
--------------------------------------
sVirt [libvirt + SELinux を使用する場合]
--------------------------------------
ホストカーネル
Linux カーネルは qemu 仮想マシン内で実行され、通常は非 root ユーザーとして実行されます。
攻撃者は、最初にカーネルを悪用するファイルシステムを作成する必要があります。
qemu 仮想化 (例: 欠陥のある qemu ドライバー) または libguestfs を悪用した
プロトコル、そして最終的にはホスト カーネルのエクスプロイトと同じくらい深刻なものにする必要があります。
その権限を root に昇格させます。 さらに、libvirt バックエンドを使用する場合、
SELinux、sVirt は、qemu プロセスを制限するために使用されます。 この複数段階のエスカレーションは、
静的なデータを使用することは非常に難しいと考えられていますが、決して言いません。
セキュリティ問題については「決して」。
呼び出し元は、マウント時にファイルシステムの種類を強制することで攻撃対象領域を減らすこともできます。
(「guestfs_mount_vfs」を使用します)。
全般的な SECURITY 考慮事項
ゲストからダウンロードするファイルやデータには注意してください (「ダウンロード」とは、
「guestfs_download」コマンドだけでなく、ファイル、ファイル名、
ディレクトリまたはディスク イメージのその他のもの)。 攻撃者はデータを操作して、
プログラムを騙して間違った動作をさせます。 次のような場合を考えてみましょう。
・データ(ファイルなど)が存在しない
· 存在するが空である
· 通常よりもはるかに大きい
・任意の8ビットデータを含む
· 予期しない文字エンコーディングである
· ホモグリフを含む。
プロトコル SECURITY
このプロトコルは安全になるように設計されており、上限が定義された RFC 4506 (XDR) に基づいています。
メッセージのサイズ。 ただし、libguestfs を使用するプログラムでも注意が必要です。たとえば、
ディスクイメージからバイナリをダウンロードしてローカルで実行するプログラムを作成できます。
そして、プロトコルのセキュリティをどれだけ確保しても、その結果からあなたを救うことはできません。
検査 SECURITY
検査 API (「検査」を参照) の一部は、信頼できない文字列を API から直接返します。
ゲストであり、これらには任意の 8 ビット データを含めることができます。 発信者はこれらを回避するように注意する必要があります
構造化ファイルに出力する前に (たとえば、
ウェブページ)。
ゲスト構成は、仮想サーバーの管理者によって通常とは異なる方法で変更される可能性があります。
マシンであり、現実を反映していない可能性があります (特に信頼できないもの、または積極的に悪意のあるものについては、
ゲスト)。 たとえば、次のような構成ファイルからホスト名を解析します。
/etc/sysconfig/ネットワーク 私たちはゲスト内でそれを見つけますが、ゲスト管理者は簡単に
これらのファイルを操作して、間違ったホスト名を指定します。
検査 API は、次の XNUMX つの外部ライブラリを使用してゲスト構成を解析します。Augeas (Linux)
構成) と hivex (Windows レジストリ)。 どちらも面で頑丈になるように設計されています
悪意のあるデータが含まれますが、サービス拒否攻撃の可能性は依然としてあります。
サイズが大きすぎる設定ファイル。
ランニング 信頼できない GUEST コマンド
ゲストからコマンドを実行する場合は十分に注意してください。 でコマンドを実行すると、
ゲストの場合、同じユーザーの下で、自分が制御していないバイナリに CPU 時間を与えています。
qemu 仮想化でラップされていますが、アカウントをライブラリとして使用します。 さらに詳しい情報と
代替手段は「実行コマンド」セクションにあります。
CVE-2010-3851
https://bugzilla.redhat.com/642934
このセキュリティ バグは、qemu がディスク上で行う自動ディスク フォーマット検出に関係します。
画像。
RAW ディスク イメージは単なる RAW バイトであり、ヘッダーはありません。 qcow2 のようなその他のディスク イメージ
特別なヘッダーが含まれています。 Qemu は既知のヘッダーの XNUMX つを探すことでこれに対処します。
何も見つからない場合は、ディスク イメージが RAW であると想定されます。
これにより、生のディスク イメージを与えられたゲストが他のヘッダーを書き込むことができます。 で
次回の起動時(またはディスクイメージがlibguestfsによってアクセスされたとき)、qemuは自動検出を行います
そして、ゲストが書き込んだヘッダーに基づいて、ディスク イメージの形式が、たとえば qcow2 だったと考えます。
これ自体は問題ありませんが、qcow2 は多くの機能を提供します。
ディスク イメージが別のイメージ (「バッキング ディスク」と呼ばれる) を参照できるようにします。 これを行うのは、
バッキングディスクへのパスを qcow2 ヘッダーに配置します。 このパスは検証されていません
任意のホスト ファイルを指すこともできます (例: "/etc/passwd")。バッキング ディスクが公開されます。
qcow2 ディスクイメージの「穴」を介して、もちろん完全に制御下にあります
攻撃者の。
libguestfs では、次の XNUMX つの状況を除いて、これを悪用するのはかなり困難です。
1. ネットワークを有効にしているか、ディスクを書き込みモードで開いています。
2. ゲストから信頼できないコードも実行しています (「コマンドの実行」を参照)。
これを回避する方法は、ディスクを追加するときに予期されるディスク形式を指定することです (
オプションの「format」オプションを「guestfs_add_drive_opts」に追加します)。 次の場合は常にこれを行う必要があります。
ディスクは raw フォーマットなので、他の場合にも適しています。 (「ディスクイメージ」も参照してください)
フォーマット」)。
「guestfs_add_domain」などの呼び出しを使用して libvirt から追加されたディスクの場合、フォーマットがフェッチされます。
libvirt から取得し、通過しました。
libguestfs ツールの場合は、 - フォーマット 必要に応じてコマンドラインパラメータを変更します。
CVE-2011-4127
https://bugzilla.redhat.com/752375
これはカーネルのバグであり、ゲストがホストのドライブの一部を上書きできるようになります。
通常はアクセスすべきではないものです。
libguestfs を、以下の変更を含む 1.16 以降のバージョンに更新するだけで十分です。
問題を軽減します。
CVE-2012-2690
https://bugzilla.redhat.com/831117
virt-edit と guestfish の両方の古いバージョンの「edit」コマンドは新しいファイルを作成しました
変更は含まれていますが、新しいファイルの権限などが設定されていませんでした。
古いもの。 この結果、次のようなセキュリティに敏感なファイルを編集すると、
/ etc / shadow そうすれば、編集後も誰でも読み取り可能な状態になります。
libguestfs を 1.16 以降のバージョンに更新するだけで十分です。
CVE-2013-2124
https://bugzilla.redhat.com/968306
このセキュリティ バグは、信頼できないゲストが特別なツールを使用した検査における欠陥でした。
ゲスト OS 内の細工されたファイルにより、C ライブラリで二重解放が発生する可能性があります (
サービス)。
libguestfs を脆弱ではないバージョンに更新するだけで十分です: libguestfs ≥
1.20.8、≥ 1.22.2、または ≥ 1.23.2。
CVE-2013-4419
https://bugzilla.redhat.com/1016960
使用している場合 ゲストフィッシュ(1) -リモート またはゲストフィッシュ - 聞く guestfish が作成するオプション
既知の場所にあるソケット (/tmp/.guestfish-$UID/ソケット-$PID).
両端が通信するには、位置が既知である必要があります。 ただし、いいえ
含まれているディレクトリ (/tmp/.guestfish-$UID) が所有しています。
ユーザー。 したがって、別のユーザーがこのディレクトリを作成し、所有するソケットをハイジャックする可能性があります。
別のユーザーの guestfish クライアントまたはサーバーによって。
libguestfs を脆弱ではないバージョンに更新するだけで十分です: libguestfs ≥
1.20.12、≥ 1.22.7、または ≥ 1.24。
否定 of サービス いつ 検査 ディスク 画像 腐敗した BTRFS ボリューム
libguestfs (および libguestfs をライブラリとして使用するプログラム) をクラッシュさせる可能性がありました。
破損した btrfs ボリュームを含むディスク イメージが表示されます。
これは、サービス拒否を引き起こす NULL ポインタの逆参照が原因であり、そうではありません。
これ以上悪用可能であると考えられます。
修正についてはコミット d70ceb4cbea165c960710576efac5a5716055486 を参照してください。 この修正は以下に含まれています
libguestfs 安定ブランチ ≥ 1.26.0、≥ 1.24.6、および ≥ 1.22.8、および RHEL ≥ 7.0。
libguestfs の以前のバージョンには脆弱性はありません。
CVE-2014-0191
Libguestfs は以前、libvirt XML の解析に安全でない libxml2 API を使用していました。 これらの API
デフォルトでは、特定の XML ドキュメントが存在する場合にネットワーク接続の確立が許可されます。
提示されました。 不正な XML ドキュメントを使用すると、すべての CPU とメモリを使い果たすことも可能でした
またはマシン上のファイル記述子。
libvirt XML は信頼できるソース (libvirt デーモン) からのものであるため、これは考えられません。
これが悪用可能だった可能性があるということです。
この問題は libguestfs ≥ 1.27.9 で修正され、修正は安定バージョン ≥ にバックポートされました。
1.26.2、≥ 1.24.9、≥ 1.22.10、および ≥ 1.20.13。
砲弾ショック (バッシュ CVE-2014-6271)
この bash のバグは、libguestfs に間接的に影響を与えます。 詳細については、以下を参照してください。
https://www.redhat.com/archives/libguestfs/2014-September/msg00252.html
CVE-2014-8484
CVE-2014-8485
binutils のこれら XNUMX つのバグは GNU に影響を与えます ストリング(1) プログラム、つまり
libguestfs の「guestfs_strings」および「guestfs_strings_e」API。 ストリングを実行する
信頼できないファイルにより、任意のコードが実行される可能性があります (libguestfs に限定)
アプライアンス)。
libguestfs ≥ 1.29.5 および ≥ 1.28.3 では、libguestfs は「文字列」を使用します。 -a BFDを回避するオプション
ファイルを解析しています。
CVE-2015-5745
https://bugzilla.redhat.com/show_bug.cgi?id=1251157
これは libguestfs の脆弱性ではありませんが、常に virtio-serial ポートを与えるためです。
各ゲストに対して (ゲストとホスト間の通信はこのように行われるため)、
アプライアンスからホストへの qemu プロセスが可能です。 次の場合に影響を受ける可能性があります。
· libguestfs プログラムは、ゲストから信頼できないプログラムを実行します (「guestfs_sh」を使用)
など)、または
· (たとえば) カーネル ファイル システム コードで別のエクスプロイトが見つかり、
不正なファイルシステムがアプライアンスを引き継ぐ。
sVirt を使用して qemu を制限すると、一部の攻撃が阻止されます。
権限 of .ssh および .ssh / authorized_keys
https://bugzilla.redhat.com/1260778
道具 virt-カスタマイズ(1) virt-sysprep(1)と 仮想ビルダー(1) を持っています --ssh-注入
SSH キーを仮想マシンのディスク イメージに挿入するためのオプション。 彼らは、
~ユーザー/.ssh ディレクトリと ~user/.ssh/authorized_keys これを行うには、ゲスト内のファイルを使用します。
libguestfs < 1.31.5 および libguestfs < 1.30.2 では、新しいディレクトリとファイルはモードを取得します。
それぞれ0755とモード0644。 ただし、これらの権限(特に ~ユーザー/.ssh)
OpenSSH が使用するアクセス許可よりも広範囲です。 現在の libguestfs のディレクトリ
とファイルはモード 0700 とモード 0600 で作成されます。
onworks.net サービスを使用してオンラインで guestfs-security を使用する