ITセキュリティ女子のブログ

  • 脆弱性管理
2021.10.08

脆弱性管理のススメ(2) 攻撃者が「利用しやすい」脆弱性とは?

脆弱性管理のススメ(2)

みなさんこんにちは、長谷川まりです。

近年多発するサイバー攻撃。その外部対策として「脆弱性管理」をテーマに取り上げています第1回の記事 では、
1年間に見付かるセキュリティホール(以下、脆弱性と表記)が多すぎること、「CVSS値」という、脆弱性の「重大度」を表す数字があること、一方で、攻撃者は必ずしも「重大な」脆弱性ばかりを狙うわけではなく、「利用しやすいかどうか」を重視している、という話をお伝えしました。

今回は、「利用しやすい」とはどういうことなのかを見て行きたいと思います。

攻撃者が「利用しやすい」脆弱性とは?

今、仮にこんな脆弱性があったとします。

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:\ 直下のディレクトリ一覧が出力される!

IIS脆弱性イメージ

  • と、これだけです。しかも、この時実行されるコマンドは、IISを動かしているユーザーの権限で実行されますので、多くのサーバで、管理者権限で実行されてしまいました。どうですか?事の大きさがお分かりいただけますよね…、え?「dir 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」と呼ばれますが、脆弱性を発見した研究者によって、それがどんなものなのか、どう直したらいいのかを検討するために書かれることもあれば、ワルモノが脆弱性を発見して、それを攻撃する目的で書かれたり、近年ではダークウェブなどで、他のワルモノに売ってお金を稼ぐために書かれたりもしているようです。


CVSS基本値の計算方法

さて、話はCVSSに戻ります。単にCVSS値と言った場合、それはCVSSの「Base Score」即ち「基本値」を指すことが多いのですが、「現状値」というものもある、と前回少し触れました。「基本値」に、攻撃コードの有無を考慮して増減した値が「現状値」なのですが、まずは基本値の計算方法を紹介します。

今回取り上げた脆弱性、具体的には「CVE-2000-0884」という脆弱性でしたが、2000年に見付かった脆弱性です。当時の多くのWindows環境でAdministratorが乗っ取られ、2001年の「nimda(ニムダ)」をはじめとする様々なマルウェアを生み出したのがこの「CVE-2000-0884」という脆弱性です。ベテランエンジニアの方であれば、当時のことを覚えていらっしゃる方は多いと思います。

当時はまだ「CVSS」という仕組みが生まれる前でしたが、後年、過去に遡って値が付与されました。
さて、この脆弱性、CVSS基本値はいくつだと思いますか?

CVE-2000-0884のCVSS基本値

脆弱性管理データベース「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

● CVSSv2基本値の計算式

基本値 = ((0.6×影響度)+(0.4×攻撃容易性)-1.5)×f(影響度)
ただし、
影響度=10.41×(1-(1-C)×(1-I)×(1-A))
攻撃容易性=20×AV×AC×Au
f(影響度)=0(影響度が0の場合),1.176(影響度が0以外の場合)
※C,I,A,AV,AC,Auの各値については上の早見表を参照


…でも、ちょっと分かりにくいですね。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」の CVSSv2基本値の計算式

基本値 = ((0.6×6.4430)+(0.4×9.9968)-1.5)×1.176=7.485…⇒7.5
ただし、
影響度=10.41×(1-(1-0.275)×(1-0.275)×(1-0.275))=6.4430…
攻撃容易性=20×1.0×0.71×0.704=9.9968
f(影響度)=1.176
※C,I,A,AV,AC,Auの各値については上の早見表を参照


この早見表は、列の左の方が値が低く、右の方だと値が高くなるように並べています。
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現状値」についてご紹介しますね。

まりから一言

「脆弱性」と聞いてもなんだかピンと来ない、という声を多く聞きます。ましてや、「脆弱性を利用しやすい」とか「利用しにくい」とか、正直イメージが付きにくいと思うので、昔の出来事を引っ張り出してみましたがいかがでしたでしょうか。

新型コロナウイルスだけでなくサイバー攻撃のニュースもよく耳にする日々が続いておりますが…、IT空間もリアル空間も、皆様、どうぞご安全に!

→アシストの脆弱性管理製品については、 Tenable のページをご覧ください

つづく


長谷川 まり

株式会社アシストに入社以来十数年、セキュリティ対策製品担当として活動中。

売れない小説家だった祖父の影響で、文章を書くことが好き。
「役に立つ人間になる」をモットーに、日々真面目で丁寧な仕事を心がけている。

関連している記事

  • 脆弱性管理
2021.12.22

Log4Shellとは?最悪レベルの脆弱性に学ぶ脆弱性管理のメリット

Apache Log4jに発見された重大な脆弱性「Log4Shell」。脆弱性の重大度を示すCVSSスコアが10点中10点と最高レベルとなっているこのLog4Shellがどのようなものなのかをおさらいしながら、ツールを使った脆弱性管理のメリットをご紹介します。

  • 脆弱性管理
2021.12.01

脆弱性管理のススメ(3)優先度を決める基準のベストプラクティス

CVSS値という脆弱性の重大度を表す数字と、攻撃者にとっての脆弱性の「利用しやすさ」を加味した「CVSS現状値」という指標をご紹介し、脆弱性管理の優先度のつけ方のベストプラクティスを探ります。

  • 脆弱性管理
2021.08.27

脆弱性管理のススメ(1)

近年、様々な脆弱性を突いて社内ネットワークに侵入したりランサムウェアに感染させたり、といった手口のサイバー攻撃が増えています。 このような被害を受けないようにするための「脆弱性管理」についてご紹介するシリーズ第1回です。

プロフィール


長谷川まり
セキュリティ製品を担当。お客様からの信頼も厚い、お姉さん的存在。

人気記事

ページの先頭へ戻る