テオ・デ・ラート
W^X の作業を開始したときから、JIT を使用するアプリケーションがかなりの数あったため、これが長い道のりであることは明らかでした。 JIT 実装は、次の XNUMX つのカテゴリに分類できます。
- メモリを W 状態と X 状態の間で切り替え、システム コールの「コスト」を受け入れる
mプロテクト . - 同じメモリの W マッピングと X マッピングのペアの間にエイリアスを作成します。
- 最も「ダーティ」なオプションには、同時記録と実行を可能にする W|X メモリ モデルが必要です。
現在、XNUMX 番目のオプションを使用するプログラムは大幅に減り、XNUMX 番目と XNUMX 番目のオプションを使用するプログラムが増えています。 ただし、W|X JIT (主に Chromium と Iridum) でプログラムを実行する必要があるため、「wxallowed」ファイルシステム マウント オプションが追加されました。これにより、実行可能ファイル ELF が存在する場合に、書き込みと実行の両方にメモリを同時に使用できるようになります。ファイルには「wxneeded」マーカーが付けられ、アプリケーション自体もメカニズムを使用してさらに保護されました
このようなアプリケーションの脆弱性の悪用をさらに複雑にするために、メカニズムへの追加が提案されています。
Chrome/Iridium プロセスは、pledge と unveil を使用してすでに非常に確実に保護されていますが、たとえば write(2) システム コールを使用する機能を削除すると、攻撃者にとってさらなる困難が生じるため、明らかに何らかの利点があります。 ただし、JIT 実装で W|X メモリからのネイティブ システム コールを使用する場合にも問題が発生する可能性があります。 ただし、ABI は何度も変更されていますが、誰も問題を報告していないため、これが当てはまらないことを期待する理由があります。
変更は OpenBSD-Current ブランチの通常のスナップショットですでに利用可能になっており、興味のある方はぜひテストしてください。
Chrome/Iridium でのこのモードの登場に関する関連ニュースについては、Theo からの個別のコメントが必要です。
出所: オープンネット.ru