Linuxのセキュリティ機能「SELinux」は組み込みからクラウドまで広く浸透し、今や避けては通れません。本連載では、SELinuxの役割と、IoT時代の活用法を実践的に紹介します。初回はまず、SELinuxとは一体どのような時に役立つのか見ていきます。

SELinuxを無効にしていませんか?

 Linuxカーネルのセキュリティ機能であるSELinux(Security Enhanced Linux)が主要なLinuxディストリビューションに含まれるようになって久しいですが、システム構築の現場では、邪魔者として無効にされることが多くなっています。しかし、本当にSELinuxを無効にしてしまってよいのでしょうか?

 SELinuxを有効にすると対策が難しい「ゼロデイ」を含む脆弱性を突かれても多くをブロックできます。図1図2は、2016年9月にMySQL業界を騒がせた脆弱性について、公開された攻撃をSELinux有無を変えて実行した結果の比較です。

図1 MySQLの脆弱性攻撃テスト(SELinuxのない場合)
図1 MySQLの脆弱性攻撃テスト(SELinuxのない場合)
[画像のクリックで拡大表示]

 SELinuxが無い場合が図1です。図の(1)(2)のように一般ユーザーjoss-sigが攻撃ツールを実行すると、mysqlユーザー権限のシェルを起動でき(3)、mysqlユーザー所有のDBファイルを勝手に見たり破壊したりできてしまいます(4)。

 一方で、SELinuxがある場合が図2です。同様に攻撃ツールを実行すると(1)、攻撃の途中で、エラーで止まりこれ以上何もできません(2)。

図2 MySQLの脆弱性攻撃テスト(SELinuxのある場合)
図2 MySQLの脆弱性攻撃テスト(SELinuxのある場合)
[画像のクリックで拡大表示]