Dr.セキュリティ®

脆弱性診断のやり方②
サーバー/クラウド

この記事を書いた人

Dr.セキュリティ®
代表技術者 冨田 圭介

DFプロ認定資格保有
① CDFP-B(基礎資格)
② CDFP-P(実務者資格)
脆弱性診断士資格保有
冨田 圭介

2種類の方法をご紹介

サーバー等に対するスーパー簡易的な脆弱性診断のやり方として、当記事では下記の2つの方法をご紹介します。

  • ①【素人向け】表層解析(脆弱性情報の検索)
  • ②【エンジニア向け】ポートスキャン(不意のポート開放の確認)
上記①・②は確認できる内容がそれぞれ異なります。①表層解析では「プログラムの脆弱性」を確認でき、②ポートスキャンでは「設定ミス等による脆弱性」を確認できます。このようにそれぞれで確認できる脆弱性の性質が異なりますので、どちらか一方ではなく両方を実行すると良いです。

それでは以降で①②それぞれのやり方をご説明します。

①【素人向け】表層解析(脆弱性情報の検索)

概要

サーバー等は自動アップデートしない設定で運用していることが多いかと思いますので、サーバー等の中のプログラム(OSやサーバソフトウェアなど)の脆弱性が問題になりがちです。そのためここではプログラムの脆弱性を確認するためのやり方をご説明します。
大まかな流れは次の通りです。

  1. サーバーソフトウェアのバージョンをメモする
  2. 脆弱性情報のデータベースを検索する
  3. 検索結果を確認する
  4. 検出漏れを防ぐためにWeb検索も併用する

Step.1 サーバーソフトウェアのバージョンの確認

サーバーにインストールされているサーバーソフトウェアのうち、脆弱性診断したいものをリストアップし、それぞれのバージョンをメモに記して下さい。なお診断対象とするのはアプリケーションだけでなくOSやミドルウェアも含めた方が良いです。

Step2. JVN iPediaで検索

「JVN iPedia」とは、平たく言うと脆弱性の情報を無料で閲覧・検索できるサービスです。
【URL】https://jvndb.jvn.jp/

「脆弱性対策情報データベース検索」という部分(下の画像の赤枠部分)に、サーバーソフトウェアの名称を入れて検索すると、当該製品の脆弱性がJVNに登録されているか否かを確認できます。

Step3. JVNの検索結果を確認


上の画像のように、検索結果に「該当するデータがありません。」と表示された場合は、JVNのデータベースには当該プログラムの脆弱性情報が登録されていないことを示しています。この場合は「プログラムの脆弱性」は問題無さそうだと判断できますが、しかしこの段階ではまだ断定しません。(後述のStep4でもう少し検索してみます)

続いて、プログラム自体に脆弱性がある場合の例をご紹介します。

上の画像のように、検索結果に当該プログラムが表示される場合は、プログラム自体に脆弱性があることを示しています。(この例では Apache HTTP Server を検索しました)
各行の先頭列の「JVNDB-」で始まるリンク部分をクリックすると、その脆弱性の情報を閲覧できます。


上の画像は脆弱性情報の中にある、「影響を受けるシステム」の項目の部分です。
この例を見ますと、「2.4.0以上2.4.60未満」と表示されています。これはその文言のとおり、このプログラムのバージョンが上記の範囲である場合は脆弱性があることを意味しています。

Step1でメモしたバージョンが上記に該当する場合は「脆弱性がある」と判断し、その範囲外である場合は「脆弱性は無い」と判断します。

【重要】けっこう間違えがちなこと

下記の2つのバージョンは、どちらが新しいバージョンですか?

  • 1.23.4
  • 1.5.67
この問いに対して、「1.5.67」と答える人が結構います。
それは誤りです。
正解は、1.23.4の方が新しいバージョンです。

間違える理由は、ピリオドを無視して連続する数値だと解釈しているからです。算数のように「左側が大きい桁で、右に向かって10の位が下がっていく。」というように解釈すると誤った答えとなります。
  • 1234
  • 1567
こう見ると1567の方が数値が大きいから、1.5.67の方が新しいバージョンだ、というように間違えてしまうわけです。

バージョンの数値は連続する数値ではありません。ピリオドで区切って解釈して下さい。
「1 . 23 . 4」は、1、23、4に分けて読んでください。

左側の1は、「メジャーバージョン」というバージョンを表す値です。
真ん中の23は、「マイナーバージョン」というバージョンを表す値です。
右側の4は、「パッチバージョン」というバージョンを表す値です。

このようにして「1.23.4」と「1.5.67」を比べると、どちらも左のメジャーバージョンは1で同じです。
続いて真ん中のマイナーバージョンの値を比べると、前者は23で、後者は5です。23の方が5よりも大きい、つまり新しいマイナーバージョンということになります。
よって「1.23.4」と「1.5.67」を比べると、「1.23.4」の方が新しいです。

Step4. Web検索してみる

JVN iPediaで型番を検索しても該当する製品がなかった場合でも、念の為Google等で「ソフトウェア名 + 脆弱性」をキーワードにして検索してみると良いです。
なぜそうするかと言うと、一般的な呼称のソフトウェア名と、正式なソフトウェア名が異なる場合があるからです。

JVNでは正式名称で登録されているため一般呼称で検索してもヒットしない可能性があります。一方、Googleの検索結果は検索キーワードに完全一致するものだけでなく、似たようなキーワードのWebページも検索結果の一覧に表示されるので、JVNに登録は無いけれど、実は脆弱性があるかも? と気付けるかも知れないからです。

脆弱性を検出した場合

ほとんどの場合はソフトウェアのメーカーやベンダーのWebサイトで対処方法がアナウンスされていますので、それらのWebサイトのサポートページなどでお知らせや更新情報などがないかご確認下さい。

②【エンジニア向け】ポートスキャン(不意のポート開放の確認)

概要

私がこれまでに担当してきた事案において、ファイアウォールのポート開放の設定と、実際に開放されているポートの状態が異なっているというケースが時々ありました。なぜそのような現象が起こるか、その原理を説明すると冗長になるためここでは割愛しますが、大雑把に言いますとファイアウォールが起動した後に生じた誤操作、バッチ処理の不具合、マルウェア/サイバー攻撃などが原因で、ファイアウォールで閉じているはずのポートが実際には開いてしまっていることがあるのです。
肝心なことなので強調してもう一度書きます。

ファイアウォールの設定を確認すると、しっかり閉じている。
それなのになぜか、実際には開いている。

こうなると設定状況を確認するだけではポートの異常に気付けないので非常に厄介です。

この脆弱性を検出するためには、実際のポートの状態を検査する「ポートスキャン」をおこなうのが最も確実な確認方法となります。
なお、ssコマンドなどでポートの状態を検査するやり方でも良いように思われるかもしれませんが、私はポートスキャンをお勧めしております。
その理由は、「攻撃者と同じ目線」で確認できるからです。
ポートスキャンは攻撃者がおこなう偵察行為でも用いられる手段のため、ポートスキャンをおこなえば攻撃者が見る情報(見られ得る情報)と同じ内容を目の当たりにすることができるという長所があります。

Step1. ポートスキャンツール「Nmap」をインストール

ポートスキャンの定番のツールである「Nmap」という無料アプリを使用します。
Nmapのオフィシャルサイト:https://nmap.org/

Windows, Mac, Linux版がありますので、ご使用環境に合うファイルをダウンロードしインストールして下さい。

以降ではWindows PCを使用する場合の例をご紹介します。
Nmapを起動すると下の画面(GUIの「Zenmap」)が表示されます。

Step2. サーバーのIPアドレスを確認

  1. WAN側のIPアドレス(グローバルIPアドレス)
  2. LAN側のIPアドレス(プライベートIPアドレス)
上記の2つのIPアドレスを確認し、メモに記して下さい。
どちらか一方ではなく、必ず両方とも確認&メモして下さい。
これらのIPアドレスはサーバーのターミナル等で確認できます。Linuxサーバーの場合はifconfigコマンドやipコマンド、 Windows Serverの場合はipconfigコマンドなどでご確認下さい。

Step3. LAN側からのスキャン実行

Nmap(Zenmap)の画面にコマンドを入力してスキャンしてください。

  1. 「ターゲット」に、サーバー等のプライベートIPアドレスを入力。
  2. 「コマンド」に、Nmap -sS -p 1-65535 -T4 -Pn **** を入力。
    (****の箇所にはローカルIPアドレスを入れます)
  3. 「スキャン」をクリック
  4. スキャンが完了するまで待ちます。

Step4. LAN側のスキャン結果を確認


スキャンが完了すると上の見本のようにスキャン結果が表示されます。
表示された一覧のなかに、不意に開放されてしまっているポートがないかご確認下さい。

Step5. WAN側のスキャン&確認

Step3・4ではLAN側(プライベートIPアドレス)に対してスキャン&確認しましたが、これと同様に今度はWAN側(グローバルIPアドレス)に対してスキャン&確認して下さい。

不意のポート開放を検出した場合

不意のポート開放は重大なインシデントに繋がりやすいので、なぜ開いてしまったのか原因を探るべきだと思いますが、まずは安全のために閉じるべきですので、ファイアウォールを再起動するなどして対処して下さい。

フォレンジック調査も視野に入れて下さい

マルウェア/サイバー攻撃によってサーバーのポートを開放されてしまった場合ですと、当該サーバーが侵害されただけでなくネットワーク内で横展開(LAN内の他の機器が侵害)されている可能性もあるため、フォレンジック調査やスレットハンティングの実施をご検討頂いたほうが良いです。

関連ページ