
このリポジトリには、ブカレスト大学FMIの「Operating Systems: Design And Security」コースのために執筆した、Linuxの権限昇格の脆弱性であるCVE-2016-5195に関する論文とプレゼンテーションスライドが含まれています。
私の論文では、Dirty COWを使用してバイナリを静かにバックドア化できると主張しました。これは、検出を困難にするためにすぐにrootへ権限昇格しないというものでした。
これは実際には正しくありません。修正されたページをライトバックしようとすると、カーネルはそのページがダーティである(本来あるべき状態ではない)ことに気づき、パニックを起こしてシステムをクラッシュさせるからです。
これを防ぐには、すぐにrootへ権限昇格し、自動ライトバックを無効化する必要があります。具体的には「echo 0 > /proc/sys/vm/dirty_writeback_centisecs」を実行します。 私のProof of Conceptはこれを行っていないため、VMでのテスト中に /etc/passwd の変更に成功した後、すぐにクラッシュします(その変更はディスクに永続化されません)。
https://www.exploit-db.com/exploits/40847 は、/etc/passwd を上書きした後、クラッシュを防ぐためにライトバックを無効化するエクスプロイトコードの例です。
他の方法としては、ファイルバッキングされたページの代わりにvDSOにパッチを当てる方法があります(https://github.com/scumjr/dirtycow-vdso)。この方法はシステム上のすべてのプロセスに影響を与え、クラッシュしません。また、コンテナからのエスケープもできるなどの他の利点があり、攻撃のために /etc/passwd を読み取り専用で開くことさえ妨げる可能性のあるSELinuxの制限も受けません。
rootへ権限昇格した後にシステムにバックドアを仕込めるのは確かですが(他のどの権限昇格手法でも同様です)、それは通常のファイルシステム操作を伴い、侵入検知システムによって検出される可能性があります。一方、私が当初考えていたようにライトバックが機能していたなら、書き込みシステムコールが関与せずにカーネルがページをライトバックするだけなので、書き込み操作の監視を迂回できたかもしれませんが、実際には単にパニックを起こすだけです。