
- 脆弱性管理
Log4Shellとは?最悪レベルの脆弱性に学ぶ脆弱性管理のメリット
Apache Log4jに発見された重大な脆弱性「Log4Shell」。脆弱性の重大度を示すCVSSスコアが10点中10点と最高レベルとなっているこのLog4Shellがどのようなものなのかをおさらいしながら、ツールを使った脆弱性管理のメリットをご紹介します。
|
今、仮にこんな脆弱性があったとします。
WebサーバソフトXには、リモートの攻撃者によって、Webルート外のドキュメントが読み取られたり、
任意のコマンドが実行される脆弱性が存在します。
これは、UNICODEでエンコードされた文字を含む不正なURLを介して行われます。
…え、いきなりそんなこと言われても、これだけじゃよく分からないんだけど?
「Webルート外のドキュメント」って何?「任意のコマンド」って、何のコマンド?
「UNICODEでエンコードされた文字を含む不正なURL」って、どんなURLなの?
いろんな疑問が浮かびますよね。
結論から言うと、全ての脆弱性は、それだけでは「利用しにくい」脆弱性であると言えます。どんな脆弱性かという内容だけでは正直よく分からないものです。
実は上に挙げた脆弱性は過去に実在したものなのですが、今を遡ること約20年、MicrosoftのWebサーバ「IIS」(Internet Information Service)のバージョン4.0と5.0で発見され大騒ぎになった脆弱性です。
脆弱性それだけでは利用しにくいし、よく分からないものだと書きましたが、なぜそんなに大騒ぎになったのでしょうか?それは、この脆弱性を攻撃するコードは「具体的にはこんな感じだよ」というサンプルが示されたからというのが大きな要因です。このようなものでした。
http://(対象のWebサーバのFQDNまたはIPアドレス)/scripts/..%c1%c1../winnt/system32/cmd.exe?/c+dir+c:\
★注意事項★
以下に挙げる内容は、パッチの適用されていないIIS4.0と5.0にしか効果のない攻撃コードですが、それ以外の
Webサーバに対して行ったとしても攻撃と見なされる恐れがありますので実行しないで下さい。
当時の状況を、もう少し分かり易く再現して説明してみましょう。
まず、手元のパソコンでブラウザを立ち上げます。そして、攻撃対象のWebサーバに対して、
①アドレスバーに「http://…cmd.exe?/c+dir+c:\」と入力してEnterキーを押すと、
② コマンド「dir c:\」が実行されて、
③ (IISが動いているサーバの)c:\ 直下のディレクトリ一覧が出力される!
|
そうですね、攻撃者が実行したいのは「dir c:\」なんてコマンドではありません。でも、このコードを見れば、
「dir+c:\」の部分が「dir c:\」として実行される(正確にはcmd.exe /cに渡される)のは明らかですから、
ちょっと書き換えれば他のコマンドだって実行できそうです。
これが「サンプルが示される」ことによる「利用しやすさ」であり、恐ろしさでもあります。
では他のコマンドも実行できるとしたら、何を実行したいでしょうか?
…ここは一つ、ワルモノ(攻撃者)になったつもりで考えてみましょう。
まず、攻撃対象のWindowsサーバには自由にログオンできた方が便利そうですから、自分用のユーザーを作りたいかしら?
「dir+c:\」の部分を「net+user+hasegawa+/add+Password\123」に書き換えると
⇒OSユーザー「hasegawa」を、パスワード「Password\123」で作れそうです。
でも、一般ユーザーではできることが限られますし、管理者権限があった方が良さそうですね。
「dir+c:\」の部分を「net+localgroup+administrators+hasegawa+/add」に書き換えると
⇒OSユーザー「hasegawa」を、「Administrators」グループに所属させることができそうです。
でもでも、インターネットに公開されているサーバなんだから、きっとファイアウォールが働いていて、おいそれとはアクセスできなさそうです。ただ、この脆弱性は任意のコマンドが実行できるんだから、止めてしまえばいいんですよね。
えっと、ファイアウォールを止めるには…
「dir+c:\」の部分を「netsh+advfirewall+set+allprofiles+state+off」に書き換えると
⇒ファイアウォールを無効化できそうです。
…と、こんな風に、当時の環境では攻撃が行われていたのであろうと推察します。
※実際には、IIS4.0ならWindowsNT 4.0、IIS5.0ならWindows2000ですので、上記のコマンドは少し違うのですが、話を分かりやすくするために最近のWindows環境でのコマンドを載せています
ということで、何が言いたいのかと言うと「利用しやすい脆弱性」とは攻撃コードが示されている脆弱性である、ということなのです。
「攻撃コード」のことは「exploitコード」、または単に「exploit」と呼ばれますが、脆弱性を発見した研究者によって、それがどんなものなのか、どう直したらいいのかを検討するために書かれることもあれば、ワルモノが脆弱性を発見して、それを攻撃する目的で書かれたり、近年ではダークウェブなどで、他のワルモノに売ってお金を稼ぐために書かれたりもしているようです。
|
脆弱性管理データベース「NVD」によると、CVSSv2基本値で「7.5」とされています(CVSSv3は掲載されていません)。当時をご存知の方にとっては意外に低いなと感じられると思うのですが、なぜこの値になるのでしょうか?
ここで、改めてCVSS基本値の計算方法を見てみたいと思います。実はこんな早見表を使って計算します。
項目 | 評価結果と値 | ||
---|---|---|---|
AV:攻撃元区分 | ローカル | 隣接 | ネットワーク |
0.395 | 0.646 | 1.0 | |
AC:攻撃条件の複雑さ | 高 | 中 | 低 |
0.35 | 0.61 | 0.71 | |
Au:攻撃前の認証要否 | 複数 | 単一 | 不要 |
0.45 | 0.56 | 0.704 | |
C:機密性への影響 | なし | 部分的 | 全面的 |
0.0 | 0.275 | 0.66 | |
I:完全性への影響 | なし | 部分的 | 全面的 |
0.0 | 0.275 | 0.66 | |
A:可用性への影響 | なし | 部分的 | 全面的 |
0.0 | 0.275 | 0.66 |
…でも、ちょっと分かりにくいですね。NVDなどで計算結果が公開されているのですから、自分で計算しようという人はあまりいないと思いますが、でも計算の仕組みを説明したいので、CVE-2000-0884について頑張って計算してみました。このようになります
項目 | 評価結果と値 | ||
---|---|---|---|
AV:攻撃元区分 | ローカル | 隣接 | ネットワーク |
0.395 | 0.646 | 1.0 | |
AC:攻撃条件の複雑さ | 高 | 中 | 低 |
0.35 | 0.61 | 0.71 | |
Au:攻撃前の認証要否 | 複数 | 単一 | 不要 |
0.45 | 0.56 | 0.704 | |
C:機密性への影響 | なし | 部分的 | 全面的 |
0.0 | 0.275 | 0.66 | |
I:完全性への影響 | なし | 部分的 | 全面的 |
0.0 | 0.275 | 0.66 | |
A:可用性への影響 | なし | 部分的 | 全面的 |
0.0 | 0.275 | 0.66 |
この早見表は、列の左の方が値が低く、右の方だと値が高くなるように並べています。
CVE-2000-0884は、AV(攻撃元区分)、AC(攻撃条件の複雑さ)、Au(攻撃前の認証要否)では最大値なのですが、C(機密性)、I(完全性)、S(可用性)については真ん中の「部分的」、最大値ではないので値は少し低く出て「7.5」という結果になっています。
「C」「I」「A」の箇所がなぜ最大値でないのか。
このCVE-2000-0884は、常にAdministratorの権限でコマンドが実行できるわけではなくて、あくまでも「IISのサービスが動いているユーザーの権限」でコマンドが実行されるだけだからなのですね。デフォルトの設定のまま使っていた環境が被害を受けたわけです。
とはいえ、実際問題として多くのサーバでAdministrator権限が取られ、nimdaワームによる被害は世界規模で甚大なものがありましたし、「7.5」という数値には何だか納得できないなと感じるのは、私だけではないはずです…。
世の中には様々な「重大度」(=CVSS基本値)の脆弱性が発見されており、攻撃者は目的に応じて使い分けるのですが、多くの場合「既に示されている攻撃コード」を参考にして攻撃が行われます。ということは、同じ脆弱性であっても、攻撃コードの有無によって危険性は変わります。これを加味したものが「CVSS現状値」というものです。
次回は、この「CVSS現状値」についてご紹介しますね。
→アシストの脆弱性管理製品については、 Tenable のページをご覧ください
つづく
長谷川 まり
|
|
Apache Log4jに発見された重大な脆弱性「Log4Shell」。脆弱性の重大度を示すCVSSスコアが10点中10点と最高レベルとなっているこのLog4Shellがどのようなものなのかをおさらいしながら、ツールを使った脆弱性管理のメリットをご紹介します。
CVSS値という脆弱性の重大度を表す数字と、攻撃者にとっての脆弱性の「利用しやすさ」を加味した「CVSS現状値」という指標をご紹介し、脆弱性管理の優先度のつけ方のベストプラクティスを探ります。
近年、様々な脆弱性を突いて社内ネットワークに侵入したりランサムウェアに感染させたり、といった手口のサイバー攻撃が増えています。 このような被害を受けないようにするための「脆弱性管理」についてご紹介するシリーズ第1回です。