サーバー等に対するスーパー簡易的な脆弱性診断のやり方として、当記事では下記の2つの方法をご紹介します。
- ①【素人向け】表層解析(脆弱性情報の検索)
- ②【エンジニア向け】ポートスキャン(不意のポート開放の確認)
それでは以降で①②それぞれのやり方をご説明します。
サーバー等に対するスーパー簡易的な脆弱性診断のやり方として、当記事では下記の2つの方法をご紹介します。
それでは以降で①②それぞれのやり方をご説明します。
サーバー等は自動アップデートしない設定で運用していることが多いかと思いますので、サーバー等の中のプログラム(OSやサーバソフトウェアなど)の脆弱性が問題になりがちです。そのためここではプログラムの脆弱性を確認するためのやり方をご説明します。
大まかな流れは次の通りです。
サーバーにインストールされているサーバーソフトウェアのうち、脆弱性診断したいものをリストアップし、それぞれのバージョンをメモに記して下さい。なお診断対象とするのはアプリケーションだけでなくOSやミドルウェアも含めた方が良いです。
「JVN iPedia」とは、平たく言うと脆弱性の情報を無料で閲覧・検索できるサービスです。
【URL】https://jvndb.jvn.jp/
「脆弱性対策情報データベース検索」という部分(下の画像の赤枠部分)に、サーバーソフトウェアの名称を入れて検索すると、当該製品の脆弱性がJVNに登録されているか否かを確認できます。
上の画像のように、検索結果に「該当するデータがありません。」と表示された場合は、JVNのデータベースには当該プログラムの脆弱性情報が登録されていないことを示しています。この場合は「プログラムの脆弱性」は問題無さそうだと判断できますが、しかしこの段階ではまだ断定しません。(後述のStep4でもう少し検索してみます)
続いて、プログラム自体に脆弱性がある場合の例をご紹介します。
上の画像のように、検索結果に当該プログラムが表示される場合は、プログラム自体に脆弱性があることを示しています。(この例では Apache HTTP Server を検索しました)
各行の先頭列の「JVNDB-」で始まるリンク部分をクリックすると、その脆弱性の情報を閲覧できます。
上の画像は脆弱性情報の中にある、「影響を受けるシステム」の項目の部分です。
この例を見ますと、「2.4.0以上2.4.60未満」と表示されています。これはその文言のとおり、このプログラムのバージョンが上記の範囲である場合は脆弱性があることを意味しています。
Step1でメモしたバージョンが上記に該当する場合は「脆弱性がある」と判断し、その範囲外である場合は「脆弱性は無い」と判断します。
【重要】けっこう間違えがちなこと
下記の2つのバージョンは、どちらが新しいバージョンですか?
バージョンの数値は連続する数値ではありません。ピリオドで区切って解釈して下さい。
「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」の方が新しいです。
JVN iPediaで型番を検索しても該当する製品がなかった場合でも、念の為Google等で「ソフトウェア名 + 脆弱性」をキーワードにして検索してみると良いです。
なぜそうするかと言うと、一般的な呼称のソフトウェア名と、正式なソフトウェア名が異なる場合があるからです。
JVNでは正式名称で登録されているため一般呼称で検索してもヒットしない可能性があります。一方、Googleの検索結果は検索キーワードに完全一致するものだけでなく、似たようなキーワードのWebページも検索結果の一覧に表示されるので、JVNに登録は無いけれど、実は脆弱性があるかも? と気付けるかも知れないからです。
ほとんどの場合はソフトウェアのメーカーやベンダーのWebサイトで対処方法がアナウンスされていますので、それらのWebサイトのサポートページなどでお知らせや更新情報などがないかご確認下さい。
私がこれまでに担当してきた事案において、ファイアウォールのポート開放の設定と、実際に開放されているポートの状態が異なっているというケースが時々ありました。なぜそのような現象が起こるか、その原理を説明すると冗長になるためここでは割愛しますが、大雑把に言いますとファイアウォールが起動した後に生じた誤操作、バッチ処理の不具合、マルウェア/サイバー攻撃などが原因で、ファイアウォールで閉じているはずのポートが実際には開いてしまっていることがあるのです。
肝心なことなので強調してもう一度書きます。
ファイアウォールの設定を確認すると、しっかり閉じている。
それなのになぜか、実際には開いている。
こうなると設定状況を確認するだけではポートの異常に気付けないので非常に厄介です。
この脆弱性を検出するためには、実際のポートの状態を検査する「ポートスキャン」をおこなうのが最も確実な確認方法となります。
なお、ssコマンドなどでポートの状態を検査するやり方でも良いように思われるかもしれませんが、私はポートスキャンをお勧めしております。
その理由は、「攻撃者と同じ目線」で確認できるからです。
ポートスキャンは攻撃者がおこなう偵察行為でも用いられる手段のため、ポートスキャンをおこなえば攻撃者が見る情報(見られ得る情報)と同じ内容を目の当たりにすることができるという長所があります。
ポートスキャンの定番のツールである「Nmap」という無料アプリを使用します。
Nmapのオフィシャルサイト:https://nmap.org/
Windows, Mac, Linux版がありますので、ご使用環境に合うファイルをダウンロードしインストールして下さい。
以降ではWindows PCを使用する場合の例をご紹介します。
Nmapを起動すると下の画面(GUIの「Zenmap」)が表示されます。
Nmap(Zenmap)の画面にコマンドを入力してスキャンしてください。
スキャンが完了すると上の見本のようにスキャン結果が表示されます。
表示された一覧のなかに、不意に開放されてしまっているポートがないかご確認下さい。
Step3・4ではLAN側(プライベートIPアドレス)に対してスキャン&確認しましたが、これと同様に今度はWAN側(グローバルIPアドレス)に対してスキャン&確認して下さい。
不意のポート開放は重大なインシデントに繋がりやすいので、なぜ開いてしまったのか原因を探るべきだと思いますが、まずは安全のために閉じるべきですので、ファイアウォールを再起動するなどして対処して下さい。
マルウェア/サイバー攻撃によってサーバーのポートを開放されてしまった場合ですと、当該サーバーが侵害されただけでなくネットワーク内で横展開(LAN内の他の機器が侵害)されている可能性もあるため、フォレンジック調査やスレットハンティングの実施をご検討頂いたほうが良いです。