脆弱性診断の診断結果について、どのように確認されているでしょうか。診断結果報告書からわかることもあれば、実際にどのような問題に発展するのか一般的な脆弱性診断のみではわからない内容もあります。今回は実際に脆弱性診断を行っている診断員である私から、脆弱性診断のやり方、脆弱性診断で多くみかける脆弱性、脆弱性による具体的なリスクなどご紹介します。
プラットフォームの脆弱性診断とは?
脆弱性診断の種類は診断対象によりWebアプリケーション脆弱性診断、プラットフォーム脆弱性診断、WebAPI脆弱性診断などいくつかの種類があり、診断対象により診断方法が異なります。今回はWebアプリケーションに比べてなじみが薄いと思われるプラットフォームの脆弱性診断についてご紹介します。
プラットフォーム診断にはどのようなプランがある?
Proactive Defense で提供しているプラットフォームの脆弱性診断は2プランあります。弊社からインターネット経由でアクセスして診断するブラックボックス診断と、管理者権限でサーバにログインし内部から診断を実施するホワイトボックス診断があります。ログインして設定を確認する方が精度の高い確認が可能であるため、セキュリティの観点からするとホワイトボックス診断を推奨しています。
- ブラックボックス診断のイメージ
- ホワイトボックス診断のイメージ
プラットフォーム診断のやり方を紹介
まずプラットフォームの脆弱性診断のやり方からお話します。
プラットフォームの脆弱性診断は、最初に診断対象サーバに対してスキャンをベースとした検査を行います。診断では主にNessusというプラットフォーム診断用のツールを使います。他にもNmapやtestsslといったツールも使っていますが、主にはこのNessusでサーバ上で使用されているパッケージや、サーバ上で動作しているサービスについて脆弱性がないか診断していきます。
このNessusで診断対象サーバのIPアドレス(またはFQDN)と、SSHなどの接続情報を設定します。あわせてスキャンポリシーで、どのような診断項目の診断を行うかなどを選択し、スキャンを実施します。
Nessusのレポートでは、 検出された脆弱性が一覧で表示されます。脆弱性の説明やリスクのレベル、対策方法も含まれます。ただし誤検知もあるので精査が必要です。また明確な対策方法が記載されていない場合もあり、その際にも別途調査が必要です。
このようにツールで検出されたセキュリティ上の問題点を確認・精査を行った上で、問題点、およびその対策方法を診断結果報告書としてまとめています。
最近よく見つかっている脆弱性とは?
さて、ここ最近プラットフォーム診断ではどのような脆弱性が見つかっているのか?
今回は直近約2年分の診断結果を参考にして、いくつか代表的な脆弱性について取り上げ、その内容と対策方法について紹介していきたいと思います。
セキュリティアップデートが適用されていない問題点
まずは1点目、「セキュリティアップデートが適用されていない問題」です。
これが診断で一番良く見つかる問題です。
- 脆弱性内容
診断対象サーバで使用している各種ソフトウェアに対して最新のセキュリティアップデートが適用されておらず、既知の脆弱性を抱えた状態になっている、というのが一般的な説明です。要はソフトウェアを古いバージョンのまま使用しているせいで、脆弱性が存在するということです。
このバージョンにはこんな脆弱性が存在する、という情報が公開されています。そして場合によっては詳細な攻撃方法が公開されていたり、攻撃を行うためのツールが公開されているような場合もあります。
- 対策説明
対策方法は最新のセキュリティアップデートを適用する、です。主にはLinux系OSはパッケージの更新、Windows系はWindowsアップデートを行います。独自にインストールしているソフトウェアがあればそれらも忘れずに対応を行うようにします。
LinuxカーネルやWindowsアップデートだとインストール後に再起動が必要な場合がありますが、再起動が実施されていないせいで脆弱なままの場合があります。必ず再起動を行いましょう。
Webサービスで古いバージョンのSSL/TLSが使用されている問題
2つ目、古いバージョンのSSL/TLS(TLS1.1以下)が使用されている、という問題について解説します。
- 脆弱性内容
Webサービスで古いバージョンのSSL/TLS(TLS1.1以下)が使用されている。古いバージョンには脆弱性が存在しており、SSL/TLSを使用していても通信内容が漏洩する可能性がある、という問題です。現時点での非推奨と推奨バージョンは以下のとおりです。
- 非推奨:SSL2.0, SSL3.0, TLS1.0, TLS1.1
- 推奨:TLS1.2, TLS1.3
- 対策説明
対策方法はTLS1.1以下を無効化して、TLS1.2以上のみを使用するようにします。Webサーバの設定ファイルなどで設定を変更することが可能です。以下のように記述しましょう。
- 例. Apacheの場合:SSLProtocol +TLSv1.2 +TLSv1.3
なお、TLSのバージョン設定によってユーザへの影響が出るのではないか心配だというような声を耳にすることがあります。一般的なWebブラウザはそもそもTLS1.2以上しか使えなくなっているので、サーバ側で対策していなくても基本的には問題になることはありません。Webブラウザ側ですでに対策済みなので、よほど古かったり特殊なブラウザを使用しているユーザを除いて、サーバ側で無効化してもユーザに影響はありません。サーバ側の設定をわざわざ弱い設定にしておく必要はない、という見解です。
SSHサービスの暗号化設定に関する問題
3つ目、SSHサービスの暗号化設定に関する問題について解説します。
- 脆弱性内容
SSHサービスの暗号化設定において脆弱な内容が設定されているため、通信内容の盗聴や改ざんが発生する可能性がある、という問題です。
- Ciphers(暗号化方式)
- KexAlgorithms(鍵交換方式)
- MACs(メッセージ認証符号)
- 対策説明
安全性の低い設定値を無効化します。SSHの設定ファイルを修正することで設定を変更することが可能です。
こちらに関しては記載のとおりですが、脆弱性内容に記載の上側2つ(Ciphers・KexAlgorithms)が問題として見つかるケースが多いという点だけ補足しておきます。
具体的にどんな危険がある?実際に攻撃を試してみる
前章で、脆弱性診断でよく見つかる問題について紹介しました。続いて具体的な危険性をみていきましょう。
ソフトウェアがアップデートされていない問題について報告を受けた場合、どのような印象を持つでしょうか。「バージョンが古いからアップデートしてください。ってことでしょ。」ぐらいではないでしょうか。診断報告書に記載されている問題すべて改修するのがベストであることはわかりつつも、具体的にどのような危険がありえるのかの判断や想像が難しいケースもあると思います。
今回の記事ではもう少し深堀し、どのような危険性があるのかイメージをもって頂けるよう、デモを交えてご説明させて頂きたいと思います。
攻撃を試す
前章の脆弱性内容の説明で、「詳細な攻撃方法が公開されていたり、攻撃を行うためのツールが公開されているような場合もあります。」と紹介しました。今回は公開情報を参照して、どのように攻撃できるのかデモしてみたいと思います。今回は、攻撃方法を学習できるサイト(hack the box)を使って実際に攻撃しようと思います。
以下攻撃の流れをご説明しつつ、試していきます。
STEP1:ポートスキャンを実施する
まずポートスキャンで、ターゲット端末において稼働しているオープンポートを調査し、ターゲット端末で実行されているサービスとアタックサーフェスを検出します。
ターゲットのネットワークに対してパケットを送信し、ターゲットホストの発見やサービスやソフトウェアの検出方法など、下記事項について学習をしていきます。
- ホストの発見
ネットワーク全体に対してポートスキャンを実施すると、スキャン完了までに膨大な時間がかかります。最初に実施すべきことは、ターゲットネットワークにおける稼働ホストを発見することです。 - 稼働ポート/サービスの検出
稼働ホストが発見できたら、ターゲットホストを限定し、ポートスキャンを実施します。ポートスキャンでは、ターゲットホストにおけるオープンポートとサービスを検出します。 - ソフトウェアバージョン/OSの確認
オープンポートで稼働しているソフトウェアバージョンを確認します。 稼働ホストの OS を識別します。
STEP2:ターゲットを定める
脆弱性の特定では、ポートスキャンで確認できたソフトウェア名やそのバージョン情報から脆弱性を検索して悪用できそうなものを探します。
ポート80番で 「nostromo」というソフトウェアが稼働していることがわかりましたので、「nostromo」をキーワードに脆弱性を調べていきます。
パストラバーサルという脆弱性が見つかりました。
- パストラバーサルの脆弱性内容
パストラバーサルの脆弱性を持つアプリケーションは、あたかも家の中を自由に歩き回れる訪問者に対して、特定の部屋(ファイルやディレクトリ)のみへのアクセスを意図していたが、訪問者が隠された通路(../パス)を見つけて家のどこへでも行けるようになってしまったようなものです。
この通路を通じて、訪問者は家主が意図していない場所にアクセスし、重要な情報を見たり、悪意のある行動をとることが可能になります。
STEP3:脆弱性を悪用
脆弱性を利用した攻撃を実行してみます。
使用モジュール
「exploit/multi/http/nostromo_code_exec」
で設定が必要なオプションを確認し、設定します。
使用モジュール
「exploit/multi/http/nostromo_code_exec」
の設定値は以下
- rhosts:ターゲットIP
- lhost :攻撃マシンIP
攻撃コードを実行します。
すると、www-dataユーザのshellを取得することができました。
皆さんご存知かもしれませんがshellが取得できるということは、取得したユーザとしてサーバにログインしているのと同じです。取得したユーザ権限の範囲でファイル作成、削除、更新やコマンドの実行など、好きなことができてしまいます。
このように今回のケースでは、セキュリティアップデートができていない問題により、ユーザ権限を乗っ取られるリスクにつながりました。恐ろしいですね・・・。
まとめ
今回の記事では、実際に診断を行っている診断士である私から脆弱性診断のやり方、脆弱性診断で多くみかける脆弱性、脆弱性による具体的なリスクを紹介しました。見つかった脆弱性への攻撃を試すことで、その危険性について具体的なイメージを持っていただけたのではないでしょうか。
脆弱性診断の結果について、「どこから修正すべきか分からない」、「どのような危険性があるかわからない」、という場合があると思います。Proactive Defense では診断後の報告会やオンライン面談を無償で実施しております。ProactiveDefenseの診断が気になる方はぜひお問合せください。
この記事が皆さんの管理するシステムを安全にする一助となれば幸いです。