このブログでは、Log4jのセキュリティ問題、一般的な開発者コミュニティへの影響、そしてRAD Studio開発者への具体的な影響について説明いたします。
この10日間、よほどインターネットへ接続できない環境でなければ、多くのアプリケーションやインターネットサービスに影響を与えたLog4jの問題について目にしたことがあるでしょう。
Log4j という非常に有名な Javaのロギングライブラリを使用している場合、Minecraftのコンソールメッセージ(Minecraftゲームクライアントでメッセージを入力すると、第三者によりMinecraftサーバーで任意のリモートコードが実行可能)の重大な脆弱性が発見され、すべてのIT 企業と、ソフトウェアアプリケーションを使用するすべての企業は、これらの問題が自社のソフトウェア、ホストサービス、社内Webサイト、その他のユースケースシナリオに影響を及ぼしているかどうかの検証や調査が必要になりました。
影響を受けるソフトウェアアプリケーションのリスト(例えば、その1つがこちら)はかなり印象的です。というのも、Javaは以前のように宣伝やマーケティングがやや弱まったとはいえ、世界で最も人気のある言語の1つであり、JVMは最も人気のある実行環境の1つであることに変わりはないからです。
RAD StudioのネイティブコードはJavaに依存しない
さて、今回見つかったLog4jに関する脆弱性についてエンバカデロ全般、特にRAD Studioに対してどのような影響を与えているのでしょうか。DelphiまたはC++Builderで構築されたソフトウェア(Androidアプリケーションを除く)は、Javaを一切使用しておらず、Javaに依存していないため、Log4jの影響は受けません。
一般的には、DelphiやC++Builderはネイティブにコンパイルされたアプリケーションを作成します。ネイティブアプリケーションは、実行環境の問題(ここではJava、.NET、JavaScriptの実行環境を指す)の影響を受けにくくなっています。
ただし、今回の場合、問題は実行環境ではなく、一般的なライブラリにあり、RAD Studioの開発者は、他の開発者コミュニティと同様にアドオンコンポーネントやサードパーティライブラリを使用しています。
もう一度明確にしておきましょう。DelphiやC++Builder(あるいは一般的なC++)で作成されたWebサーバーやWebサービスは、Log4jの問題の影響を受けません。 もちろん、ASP.NET、Python、またはPHPで構築されたWebアプリケーションについても同様です。
今回の脆弱性は、Javaで記述されたソフトウェアに固有の問題で、Log4jに依存しているJavaソフトウェアは多く、影響度は広範囲に渡るため、深刻な脆弱性と言えます。
さてDelphiとC++Builderに話を戻すと、コンパイルされたコードはセキュリティは向上しますが、それだけでは不十分です。また完全に信頼できる(最低限、ソースコードが提供されている)ライブラリやコンポーネントだけを選ぶことも重要となります。
さらに、開発者が具体的にセキュリティを意識してコードを記述することも重要です。先週紹介されたコピー&ペーストのコーディングスタイル(Log4jの問題の直接の原因ではありませんが)は、リスクが高く、アプリケーションの安全性を担保できないので注意が必要となります。
オープンソースへの貢献
今回のLog4jの脆弱性で明らかになったもう一つの重要な問題があります。大企業が管理する数百万ドルのプロジェクトがあり、開発者が(通常の仕事以外の)空き時間に管理、そして資金が発生しないオープンソースプロジェクトに依存しています。オープンソースを使用して、開発者自身が活用するプロジェクトに時間やリソース、資金を還元することなくコストを削減できるという考え方は、業界では大きな問題になりつつあります。
これは、DelphiやC++Builderのエコシステムにも言えることです。エンバカデロはいくつかのオープンソースライブラリへの資金提供や寄付を開始しましたが、オープンソースのDelphiライブラリやツールを活用しているすべてのビジネスアプリケーションに対して、DelphiやC++Builderの開発者の皆様もセキュリティアセスメントも含めて、是非オープンソースへ貢献ください。
業務用アプリケーションで使用しているオープンソースプロジェクトはいくつありますか?最後に寄付したのはいつですか?
セキュリティは多面的
セキュリティは多角的な側面を持っており、以下の各項目は、その一考です。
- ネイティブにコンパイルされたアプリケーション
- ランタイム実行環境に依存しない
- 精査された信頼できるサードパーティライブラリやコンポーネントの使用
- オープンソースプロジェクトを活用した貢献のコミットメント
- セキュリティに配慮したコード作成(コピー&ペーストの禁止)
- アプリケーションのソースコードを検証するためのツール
- ソースコードの安全な保管(ソースコードインジェクションを回避するため)
- セキュアなビルド環境(バイナリコードインジェクションを回避するため)
- アプリケーション実行可能ファイルの署名
上記のリストは、セキュリティ対策を考慮する上での全てではありませんが、エンバカデロではコンパイルされたコードが重要な要素であると考えています。
今回のLog4jの脆弱性の問題を通して、今一度 セキュリティ対策について再考し、開発者が安全なアプリケーション開発が行える手助けになれば幸いです。
どうかLog4jを使用しないRADStudioでのコーディングをお楽しみください!