VNCを使ったリモートアクセスの脆弱性

当社のICS CERTチームは、4つのVNC実装に37の脆弱性を発見しました。ほとんどの脆弱性は修正されましたが、すべてではありません。

リモートアクセスは便利であり、どうしても必要な場合もあります。マイナス面は、企業インフラへの侵入口となってしまう可能性があることで、リモートアクセスツールに脆弱性がある場合はなおさらです。

VNCの脆弱性

KasperskyのICS CERTでは、Virtual Network Computing(VNC)の実装をいくつか調査しました。 VNCは、技術サポート、機器の監視、通信教育その他の目的で広く採用されている、一般的なリモートアクセスシステムです。これらの実装には合計で37の脆弱性が発見され、そのうちのいくつかは1999年以降検知されずにいました。

VNCシステムを使用するデバイスの数を正確に示すのは困難ですが、Shodanのデータから判断すると、オンラインでアクセス可能なVNCサーバーの数は、調査時点で60万を超えていました(英語)。実際の数は、それよりも多い可能性があります。

脆弱性はどこで見つかったか

当社エキスパートが調査したのは、一般的なオープンソースのVNC実装4種です。

  • LibVNC:アプリ開発に利用可能な、既製コードスニペットのまとまり(いわゆるライブラリ)。 LibVNCは、たとえば仮想マシンへのリモート接続を許可するシステムで使用され、iOSやAndroidを搭載したモバイルデバイスでも使用されています。
  • TightVNC 1.X:ヒューマンマシンインターフェイス(HMI)への接続用に、産業用自動化システムのベンダーが推奨するアプリケーション。
  • TurboVNC :グラフィック、3D、動画を扱うリモート作業向けのVNC実装。
  • UltraVNC:Windows専用に構築されたVNC実装。工業生産でもHMI接続用に広く使用されています。

バグは4つのシステムすべてで発見されました。TurboVNCに1、TightVNCに4、LibVNCに10、UltraVNCには22のバグが見つかっています。

どのような脆弱性か、どう悪用される可能性があるか

VNCは2つの部分で構成されています。リモート接続先であるコンピューターにインストールされたサーバーと、接続元のデバイスで稼働するクライアントです。脆弱性がサーバー側で見つかることはあまりありません。サーバーの方がシンプルであるため、バグが少ないのが普通です。今回の調査では、サーバーとクライアントの双方にバグが見つかりました。ただ、サーバーに対する攻撃は多くの場合、認証を突破しないとできません。

見つかったバグはすべて、メモリの不正使用関連です。悪用された場合、比較的ましなケースでは、誤作動とサービス拒否の発生にとどまります。より深刻なケースでは、デバイス上の情報に対する不正アクセス、またはシステム上でのマルウェア実行が可能です。

一部の脆弱性は修正済みだが…

当社のCERTチームは、これらライブラリおよびアプリケーションの開発者にバグを報告しました。ほとんどのバグはすでに修正されていますが、例外があります。TightVNCの初期バージョンはサポートが終了しており、開発側は同バージョンについて脆弱性対応しない意図を示しています。別のVNCプラットフォームへの移行を検討するべきかもしれません。

多くのオープンソースプロジェクトがそうであるように、脆弱なコードは多数のソフトウェア開発で使用されています。自分たちが作成するソフトウェアに使われているオープンソースのコードの更新に、すべての開発者が目を光らせているわけではありません。このようなプログラムは、コードが更新されるまで脆弱なままであり、残念なことではありますが、いつまでも更新されない場合もあります。

企業が取るべき行動とは

発見された脆弱性の詳細は、Kaspersky ICS CERT のWebサイトでレポートとして公開されています(英語)。今回の調査は産業関連企業におけるVNCの使用に焦点を当てたものですが、この脅威はVNCを導入しているその他分野の企業にも関連します。

これらの脆弱性がサイバー犯罪者に悪用されることを防ぐため、インフラ内にあるリモートアクセス用プログラムの監視をお勧めします。

  • リモート接続が可能となっているデバイスを確認し、必要でない場合はリモート接続できないようにする。
  • VNCだけでなく、すべてのリモートアクセス用アプリケーションをリスト化し、バージョンが最新であることを確認する。信頼性に疑問がある場合は、使用を中止してください。使用を継続する場合は、必ず最新のバージョンにアップグレードしてください。
  • VNCサーバーを強力なパスワードで保護する。サーバーに対する攻撃を成功しにくくするためです。
  • 信頼性の低いVNCサーバー、またはテストしていないVNCサーバーには接続しない。
  • 産業関連の企業環境では、産業用自動化システムに特化したセキュリティソリューション(Kaspersky Industrial CyberSecurityなど)を使用する。
  • 信頼できるセキュリティソリューションを使用して企業を保護する。
ヒント