見出し画像

Log4j脆弱性問題、非エンジニア向けの解説

今IT業界で大騒ぎになっているLog4jの問題。

IT系じゃない人の中には「なんのこっちゃ?」と思っている方もいると思うので、できるだけ分かりやすく解説してみます。
酔った勢いで書いているので雑なところはご了承ください・・・

Log4jとは?

正式には「Apache Log4j (アパッチ ログフォージェイ)」といいます。
Apacheソフトウェア財団が公開しているライブラリで、ログの管理を簡単に行えるようにするためのものです。
プログラミング言語Javaで作られた「多くの」システムに組み込まれています。

ログとは?

システムで起きたことの記録のこと。
□□からアクセスがありました、画面から○○の入力がありました、外部に△△の問い合わせをしました、××でエラーになりました、といったことを記録しています。
このようなログはシステムに不具合が発生したときや、ユーザーからの問い合わせがあったときに、変な動作をしていないかどうか?変な動作があったとしてどこで起きていたか?など原因追及するために利用されます。

Log4jはこのログを、「どのファイルに記録するか」、「テストのときはどこまで記録するか、リリースした後はどこまで記録するか」といったことなどを簡単に制御できる仕組みを持っています。

どんな脆弱性なのか?

ログとして記録される文字を介して任意のコードを実行することができます。
たとえば、Log4jを使っているWebサービスで、ユーザー登録画面や問い合わせ画面など、利用者がスマホやPCから入力を行える画面があるとします。
で、その画面で入力した内容をLog4jを使ってそのままログに出力するような処理があったとします。
上の説明であった「画面から○○の入力がありました」というログを記録する場合ですね。
このとき、javaのコーディングに精通した利用者が、入力箇所に「javaのコード」を入力したとします。
そうすると、本来はその入力内容をだた記録ファイルに書き出す(上の「〇〇」にあたる箇所)はずが、その入力内容を処理コードとして「実行」してしまう、という問題です。
(詳しいやり方は、悪用を防ぐためにも割愛します)
コードを実行できるということは、そのシステムが見ているデータベースの中身を見ることができますし、システムを改ざんしたり好き勝手にうごかしたりすることも可能です。
Webサービスを外部から勝手に停止させられたり、データベースから個人情報が盗まれる、ということもありえるわけです。

何が大問題なのか?

多くのシステムで使われている

Log4jはJavaの世界では非常にメジャーなライブラリです。
ログライブラリといえばLog4jかLogbackどちらかを使う、というくらい代表的なものです。
Java言語自体が未だにプログラミング言語の人気トップ5に入るくらいよく使われている言語であり、現在世界中で稼働しているサービスの中にも非常に多くのものがJavaで作られています。
その中の多くのサービスがLog4jを使っている、ということです。
実際、iCloud、Steam、Amazon、Twitter、Minecraftなど、有名な多くのサービスで使われているようです。

この脆弱性を突いた攻撃が既に行われている

この脆弱性を利用した攻撃方法はWeb上で公開されていて、その手法で実際に攻撃がおこなわれた、という報告が既にあるそうです。

これにより実害を受けた(データが盗まれたり、システムが改ざんされたり)かどうかは不明ですが、それがいつ起こってもおかしくない状態です。

自分のシステムで使われているかどうか分かりづらい

システムを構築するとき、どのライブラリを使うかはシステムの設定に記載するのですが、それを確認するだけでは不十分です。
なぜなら、そのシステムが使っている別のライブラリで、Log4jを使っているものがたくさんあるからです。
ログをとるということはシステム開発・運営で絶対にやる行為です。なのでシステム構築に使われるであろう様々なライブラリで、あらかじめLog4jが使われている場合が多いのです。
システム管理者は、どんな小さなサービスであれ、Javaで構築されているのならばLog4jを使っているものと考えて対処すべきです。

攻撃を受けたサービスが更なる悪用の温床になる

ところが、ユーザー数が少ない、ほとんど使われていない泡沫的なサービスも世界中に多々あり、それらの中には、もはや碌に管理されず放置されているものもあります。
管理者がいない、もしくは管理者が管理用パスワードを忘れてしまって、すぐには手のつけようがない、そんなものも少なからずあります。
つまりLog4jを使っているのに対策が施されないサービスが世界中にゴロゴロ転がっている状況です。
これらは当然、攻撃の的になり、攻撃を受けたサービスは任意のコードを実行できる、つまり他のサービスを攻撃することすら可能になります。
攻撃者はこのようなサーバをいくつも踏み台にして(経由して)、まるでマネーロンダリングのように攻撃元を追えなくして、犯罪行為を行います。

ではどうすればよいか?

Log4jを使っているサービスは、Log4jのバージョンアップを行う。
脆弱性対策を施したバージョンが既に公開されています。
使っているかどうか分からなくても、対策を行えるツールがいろいろと公開されています。
例えば、「任意のコードを実行できる」を逆手に取って、対策を行うコードを実行させるものとか。

管理がおざなりになっているサービスなどは、まずはこれらの、すぐにできる対策を実施しして一時的な対応を行って、それから恒久的な対応策を時間をかけて施すのがよいかと思いますね。
なんなら、この機会にサービスを閉じることも検討すべきだと思います。管理できていないということは他のトラブルが起きたときにも損害が発生する可能性があるので。

あとは、放置されているサービスを介して攻撃を受ける機会が増えることも想定されるので、しばらくはこの問題以外の脆弱性に関するニュースも頻繁にチェックして、なるべく早く対策を行えるよう身構えておくべきかと思います。

システム管理者以外の人たちも、この機会に、もう利用していないWebサービスを整理するのがよいかと。
不要なところに個人情報を放置しない。
これ、けっこう大事なことだと思いますよ。



※この記事は「アランチャの書きたかったことを吐き出すAdvent Calendar 2021」の15日目の記事です。

この記事が気に入ったらサポートをしてみませんか?