[2]IT業界激震の「bash脆弱性」とは

[2]IT業界激震の「bash脆弱性」とは

米国時間の2014年9月24日に、LinuxなどのUNIX系OSで標準的に使われているシェルである「bash」における深刻なバグ情報が公開されました。bashは、Linuxがインストールされていればほぼ100%の割合でインストールされているソフトウェアなので、非常に影響範囲が広く、クラウド・ホスティング業界をはじめ、bashが含まれるOSを採用している情報機器ベンダーなど、IT業界ではその対応に追われました。

LinuxのマスコットキャラクターTux。

 

この、IT業界が激震した「bash脆弱性」とはどのようなものだったのでしょうか。

 
 

bashは、「シェル」と呼ばれるソフトウェアの一種で、OSとユーザーの間をつなぐインターフェースの役割をします。シェルにはCLI(コマンドラインインターフェース)形式とGUI(グラフィカルユーザーインターフェース)形式がありますが、今回問題となったbashはCLI形式のシェルとなります。一般的に、CLIは効率性が高くプロ向きで、GUIはユーザビリティが高く初心者にも使いやすい、とされます。例えばJoe’sの技術者などは、1日の業務時間のほとんどをCLI形式のシェルと向き合って過ごしていると言っても過言ではありません。

 

bashの公式サイト。bashは様々なフリーソフトウェアを配布するGNU Projectのプロジェクトの1つ。

 
 

シェルには、ユーザーからの入力をリアルタイムに受け取って解釈し、実行する対話モード(インタラクティブモード)の他、シェルへの指令をスクリプトという形で記述し、それをシェルに読み込ませて実行するバッチモードという使い方があります。bashをメインのシェルとして採用しているOSでは、OS内部で実行されるさまざまな処理もスクリプトの形でbashで実行されるため、bashに脆弱性があると、システム全体が危機に陥ることになります。

 

未対応の環境で脆弱性検証コードを実行した様子。あなたのサーバーは大丈夫?

 

今回発見された脆弱性は、bashの持つ「環境変数」の機能に存在していたものでした。環境変数とはシステム用語になりますが、システムやアプリケーションにおいてデータを共有、伝達する方法の一つで、例えばLinuxでは多国語に対応していて、使う人によって言語を切り替えることで、表示されるメッセージなどに自分の母国語を使うことが出来ますが、そのために環境変数「LANG」を使って、システムに自分が使いたい言語が何なのかを伝えることが出来ます。

 
 
 

例)LANG=ja_JP.UTF-8  ※日本語で、UTF-8コードを使う場合

 

この環境変数は、基本的には「値(データ)」が保存されるものとなりますが、今回の脆弱性では、環境変数に対して「命令(関数)」を保存した場合の処理に誤りがあり、命令内に含まれる一部のコマンドが意図せずに実行されてしまという状況が発生しました。これにより、環境変数を使用している多くのシェルプログラムに対して、様々な不正なコマンドを実行させることが可能になり、その攻撃容易性と影響の大きさを知った技術者を中心に大騒ぎとなりました。

 

幸い、OSベンダー各社から迅速にセキュリティアップデートがリリースされたため、多くのユーザーでは、アップデートプログラムを適用するだけで回避することが出来、Joe’sでも、社内管理のサーバやマネージドサーバについては即日対応を実施することが出来ましたが、攻撃が非常に容易なだけにこの脆弱性を利用するマルウェアの発生も早く、対応には緊急性が求められる状況でした。

 

専任のシステム管理者がいない場合は、無理せずプロの手を借りることも大事。

今号の[1]の記事では、NetCommonsMoodleについて運用支援のサービスを開始したことをご紹介させていただきましたが、今回のような脆弱性を日々把握し、システムを安全な状態に保つことは、非常に労力のかかる高度な作業となります。そういった作業をシステム管理者以外のユーザーの方が兼任などで担当されるのは、業務負荷が高いだけでなく、システムや重要なデータが危険に晒されることも意味しています。予算などの関係もありますが、本来の目的であるシステムの利用に徹して業務の効率化を図っていただくためにも、プロの技術者がサーバー運用を代行する「マネージドサービス」の利用をご検討頂ければと思います。