log4j の脆弱性は SELinux で防げるか?

こんにちは! この記事は、GIG Advent Calendar の11日目の記事です。遅れてすみません!

log4j の脆弱性の件で各所大変なことになっていますね… 幸い私はその対応に終われることはありませんでしたが…

私が稀に嗜んでいる Minecraft でも、バージョン16以下であれば log4j の脆弱性を抱えているらしいです。 会社ではインフラエンジニアをやっているので、如何に脆弱性による被害を抑えられるかが気になります。

そこでこの記事では log4j と、インフラエンジニア(1年目)から見た脆弱性による被害を最小限に抑える方法について考えます。 1年目なので。。。色々大目に見てください。。。 もし間違いがあったら、是非記事にプルリクを送っていただければと思います。

log4j

log4j は、Java のロギングのライブラリらしいです。 今回知ったのですが、このライブラリはいろんなプロダクトに含まれているのですね…

https://logging.apache.org/log4j/2.x/

攻撃

様々な機能を備えており、その中でも Lookup という変数を使える機能が問題のようです。 試しにプライベートネットワーク上に Minecraft サーバを立てて、攻撃できる環境を色々用意してみた結果、確かに実行できそうでした。 手法について詳しく書いたら警察のご厄介になるかも分からないので、これ以上書きません。防ぐ方法を考えるのがメインですし、ね。

https://www.jpcert.or.jp/at/2021/at210050.html

対応策

AWS WAF のマネージドルールに、今回の脆弱性を対象とした攻撃を防ぐルールが追加されたようです。 https://dev.classmethod.jp/articles/aws-waf-new-rule-log4jrce/

また SELinux を使って、ターゲットのプロセスがあらかじめ指定したディレクトリ外を読み書きするのを防いだり、 指定したプロセス以外を起動するのを防いだり、外部の LDAP サーバとの通信を防いだりできるんじゃないかなと思っています。

ただし、ポリシーは正しく書かなければ意味が無いですし、SELinux は最後の砦みたいなところがあるので これに頼りきりにならずに、そもそも log4j の設定を見直したりして脆弱性を塞ぐ努力をするのが最優先でしょう。


すみません、今回の記事はここまでです。

攻撃できる環境を用意するだけで土日を使い果たしました…LDAP がよく分からず、LDAP の勉強から始めてました… SELinux で攻撃の影響を抑えられるような設定とか調べて、また記事書きます、きっと。