NGINX(エンジンエックス)は人気の高いWebサーバーで、さまざまなシステムや機器に採用され情報システムのWebインターフェースの中核を担っています。そのため、メンテナンスを怠っていると、思いもしないところから脆弱性を突かれてしまう可能性があります。ですが、NGINXに限らずシステムの脆弱性対策は、とても広範囲な知識が必要で調べるだけでも大仕事です。そこで、この記事では、インターフェースの中核であるNGINXの脆弱性対策から、Webインターフェースの安全を確保する取り組み事例までを網羅的にご紹介します。
NGINXの脆弱性が重要視されている背景
NGINXは、高速、スケーラブル、高可用性という特徴を活かして、Webサイト、Webアプリケーション、クラウドインフラストラクチャー、メールサーバーのホスティングなどで採用されています。また、インテリジェントルーターやネットワークロードバランサーといった重要なネットワーク機器にもNGINXは採用されており、ネットワークのアクセス制御や負荷分散、セキュア通信のサポートなどその応用範囲は多岐にわたります。NGINXは広く使われているため、その脆弱性の影響範囲は計り知れません。また、これらの脆弱性を利用して攻撃者がシステムを乗っ取る可能性も考えられ、データ漏洩やシステムダウンの原因となる可能性もあります。そのため、これらの脆弱性は重要視されており、早急な修正が必要とされているのです。
NGINXの脆弱性とは?代表例を4つご紹介
これほど活用されているNGINX。脆弱性の意識がないと、知らぬ間に取り返しのつかない事態に陥ってしまうことも十分に考えられます。脆弱性対策を行うことで「セキュリティリスク」を軽減し「システムの信頼性」を高め「法的な責務」を果たすことに結びつきます。ここでは、NGINXの脆弱性とはどの様なものなのか、代表的な例を以下にご紹介いたします。
古いNGINXを使用している
システムの運用が適切でなく、公知の脆弱性を持つNGINXをそのまま使い続けているケースがあります。後ほど説明する設定の甘さと相まって、重要な情報がインターネットに漏えいしてしまいます。高度化が進むIT開発において、開発者と運用者との溝が運用メンテナンスを難しくしているという背景もあります。
ネットワーク機器に潜むNGINX
IoTデバイスにもNGINXが導入されていることを先ほどご説明しました。つまり、さまざまな場所に展開する大量のネットワーク機器にも、それぞれに専用のNGINXが利用されているかもしれないのです。それらの全てを管理するとすれば、相当なアセスメントと運用の仕組みが必要となってしまうのは容易に想像できます。
NGINXエンジニアの不足
NGINXはさまざまな用途に活用できるとご紹介しました。ユースケースに合わせた設定が行えるように、設定情報の記述も自由度の高い仕様となっています。しかしながら、この自由度が脆弱性の要因となってしまった事例も数多く報告されています。例えば”/”の記入一つで、システムに大穴が開いてしまう報告がありました。NGINXが関連する全てを見直しする影響は甚大で、IT業界に大きな衝撃を与えたのは記憶にも新しいです。
ネットワークの脆弱性
NGINXはWebインターフェースの中核に位置します、そしてそれをTSLやファイアウォールで守るのが一般的です。ネットワークのファイアウォールやセキュア通信がおろそかになると、いかにNGINXの脆弱性を対策しても効果は半減してしまいます。非SSL通信で設計してしまえば情報漏えい、サイバー攻撃を受け流せなくてシステムが破壊、情報が暗号化され人質にされる、など取り返しのつかない事態もありえます。
NGINXのそれぞれの脆弱性に対する対策例
NGINXで想定される脆弱性のいくつかをご紹介しました。結構大変ではないかと感じてしまったのではないでしょうか。でも大丈夫です。それらの脆弱性はNGINXのコミュニティサポートの優秀なメンバーが迅速に対応しています。これこそがオープンソースの強みです。これからNGINXを使い始めるのであれば、まずは機能を知り、脆弱性を知り、適切なメンテナンスを行うことで、想定以上のパフォーマンスを享受できます。それでは、先ほど述べた脆弱性ごとのアプローチをご紹介します。
古いNGINXの使用している事への対策例
NGINXの利用者と開発者とで、まずは利用しているNGINXのアセスメントを行います。そして、最新にアップグレードが可能なシステムと、アップグレードができないシステムとで明確に区分し、対応策を分けなければなりません。これは、NGINXの脆弱性をカバーし、安全に運用するための最初の一歩です。
アップグレードが可能なシステムに対する対策
こちらは安心してアップグレードを行いましょう。それだけでNGINXに蓄えられた知恵を享受できます。常に適切な脆弱性対策が施された環境が利用できることは、開発効率の向上にもつながり、それらは成果物の品質にも直結します。安定した品質は、導入後の運用にも効果を及ぼし、収益の向上にも結びつきます。適切なバージョンアップコントロールは、それほど重要なのです。
アップグレードができないシステムに対する対策
こちらは、出来ない事が明確になることこそが重要です。アップグレードができない前提でネットワークを括り、適切なアクセスコントロールを施します。どの様な脆弱性があるのかが明確なのですから、問題となる要素に集中してリスクコントロールが可能です。NGINXのバージョンを適切に見通して運用管理するだけでも、十分に大きな成果をえることができます。
ネットワーク機器に潜むNGINXへの対策例
ネットワーク機器に組み込まれているNGINXについても、バージョンアップ管理の視点では変わりはありません。新規開発であれば「適切なバージョン管理」に組み込むことで、通常のシステムと同じく迅速な特定と対策が可能です。しかしながら、無数に存在する機器の全てを知ることは非常に難しいです。
ハードウェアのメンテナンスである事を意識する
ネットワーク機器は製品として完結しているため、ユーザーが製品内のNGINXのバージョンを管理することは一般的にはできません。製品メーカーが配信する脆弱性情報を収集し得られた対策を、実際に稼働しているハードウェアに対して直接施す必要があります。この対策作業はハードウェアのファームウェアを書き換える作業が中心になるので、とてもリスクが高い作業となります。メンテナンスリスクを最小にするためにも、対象となるネットワーク機器を十分に理解し、脆弱性情報の収集と対策の検討を行う事がとても重要なのです。
脆弱性対策情報データベース検索を活用する
ネットワーク機器や、Red HatやDebian、UbuntuなどのLinux OSのように、NGINXがサーバーや機器のOSに組み込まれている場合があります。この場合、NGINXの見かけのバージョンは古くても脆弱性対応パッチがリリースされるようになっています。したがって、NGINXの脆弱性をチェックする場合は、Linux OSやネットワーク機器の脆弱性対策情報データベース検索もあわせて確認する必要があります。
なお、NGINXの開発元に報告された全てのセキュリティ問題は、脆弱性一覧として以下に掲載されていますので、こちらも併せて確認するようにしてください。https://nginx.org/en/security_advisories.html
Linux OSの脆弱性対策情報データベース検索の活用
インターネットからアクセスできるOSやネットワーク機器の脆弱性対策情報データベース検索を活用も有用です。
・Red Hat Security Advisory:https://access.redhat.com/security/security-updates/
・Ubuntu Security Notices:https://ubuntu.com/security/notices
・Debian Security Information:https://www.debian.org/security/
・ネットワーク機器の脆弱性対策情報データベース検索はベンダーに確認(契約しないと見られないことも多い)
脆弱性を許容する考え方
IoTデバイスは、その製品特性から大量でかつ安価であるという傾向が強いプロダクトです。その様な機材に高度な脆弱性管理を持ち込むのは非常に難しいケースも存在します。そこで、逆説的ですが、最初から脆弱性をつかれても大丈夫なように設計するという手段があります。もしもエッジデバイスが脆弱性を突かれたとしても、ホストサイドで監視し対策することで、エッジデバイス側の脆弱性対策コストの削減が狙えます。このようにユースケースによっては「リスクを許容する」という選択肢もあることを覚えておいて損はありません。
NGINXエンジニアの不足に対する対策例
NGINX専任のエンジニアを調達するにはコストの面で難しい場合が多くあります。とはいえ、NGINXのバージョンアップのたびに作業を依頼する方法だとコストや信頼性に不安が残ってしまいます。そこで、プロビジョニングツールを利用してアプリケーションの設定作業などをスクリプトに置き換える事で、この課題に対応する事ができます。複雑なNGINX環境の構築手続きをスクリプトにまとめる事で、専任のエンジニアがいなくても、いつでも高い作業クオリティが享受できます。このNGINXの設定スクリプトに脆弱性対策に必要なノウハウを組み込み情報資源化する事で、NGINXエンジニアの運用ノウハウのバイブルとなるのです。
ネットワークの脆弱性に対する対策例
NGINXのWebサービスにセキュア通信と適切なファイアウォール設定を組み付けることで、脆弱性対策をより強固にします。ありがちなのですが、自己署名証明書ではなく適切なサイト証明書を運用に組み込む様にしてください。適切なサイト証明書を用意し、WAFを正しく設定することが重要なポイントです。より強固にセキュリティを意識するのであれば、サイト証明書は組織証明が望ましいです。
ツールの活用
幸いにも、NGINXはWebシステムです。Webシステムには有償/無償で多くのネットワーク検証ツールが提供されています。これらの検証ツールを使って、ネットワーク全体の脆弱性の評価を客観的に行えます。NGINXに限らず有効ですので、この機会にお手元のシステムを評価してみるのも一興です。
NGINXの代表的な脆弱性一覧と対策例のまとめ
NGINXの脆弱性対策を中核に置いて、想定される脆弱性とその対策について説明いたしました。どの脆弱性もどの対策方法も、実にオーソドックスな手法で、NGINXに限らずApacheなどにもそのまま応用できます。脆弱性対策に最も必要なのは、開発と運用とが密に連携し、適切なリスクアセスメントを行い、永続的に運用できる体制を作ることなのです。最近のコンピューターシステムの進化はめざましく、誰もが密接にコミュニケーションし、高度な検証支援ツールが存在し、多様なDXが実現できています。NGINXの脆弱性をテーマに、脆弱性への対応方法についての事例紹介は以上です。皆様の安全安心なサービスの構築に役立てれば幸いです。