/
Segmentation

セキュリティの脆弱性:攻撃者がどのようにネットワークに侵入し、拡散するのか

次のような状況を想像してみてください。

忙しい日の会議の合間に、近所のスーパーマーケットに駆け込んで、手早くサンドイッチと飲み物を買う。駐車場で財布を後部座席に置き忘れてしまったけれど、キーフォブを押して新車をロックすることは忘れなかった。

どうやらあなたの車のモデルにはソフトウェアの不具合があり、リモコンキーで前側の2つのドアはロックできるものの、後ろ側の2つのドアはロックできないようです。つまり、あなたが店内にいる間に、泥棒があなたの財布に気づき、裏口から盗もうとするのです。嬉しい驚きとともにドアが開き、彼らはあなたの財布にアクセスできるのです!

そのシナリオは、セキュリティ上の脆弱性を縮図的に示したものである。その不具合は小さなもので、それ自体では全く何も影響を及ぼさなかった。誰かがそれが何へのアクセスを可能にするかに気づいた瞬間から、それは問題となった。  

ソフトウェアも同様の仕組みで動作します。脆弱性は、それがもたらす結果に基づいて攻撃者の時間を費やす価値があり、その結果がその後のすべての行動を左右する。

攻撃者は脆弱性を攻撃の出発点と捉える。その背後では、彼らは一連の予測可能な手順を踏んでいる。つまり、脆弱性を見つけ出し、自分たちが制御するコードを実行し、マシンを乗っ取り、そこから拡散していくのだ。彼らは今やその一連のプロセスを機械の速度で実行しており、自動化によって最初の脆弱性の悪用からネットワーク全体に及ぶ問題までの期間が縮まり続けている。  

攻撃側の視点から、最初の弱点から最終目標まで、攻撃の流れを追跡できるため、防御側はどこで攻撃を阻止すべきかを把握できます。

攻撃者がエクスプロイトを成功させた場合、どのような利益を得られるのか?

脆弱性には主に3つの種類があります。欠陥は、コード自体、システムの構成方法、あるいはIDおよびユーザー層に存在する可能性がある。どのようなタイプで始まったとしても、攻撃が成功すると、一つ以上の結果が生じる傾向がある。

  • 任意コード実行(ACE)。攻撃者が脆弱性のあるアプリケーションの通常のプログラムフローにアクセスできるようになる、成功したエクスプロイト。そして、アプリケーション本来のコードではなく、攻撃者自身のコードを実行するように処理の流れをリダイレクトする。リモートコード実行(RCE)はACEのサブセットであり、ネットワーク上で実行される同じ攻撃です。
  • 特権の昇格(EoP)。これにより、攻撃者は最初に到達した権限よりも高い権限を取得することが可能になる。例えば、攻撃者はEoP(権限の解放)を利用して、一般ユーザーから管理者アカウントへと権限を移行します。Mimikatzのような人気ツールは、権限昇格を可能にする。
  • 情報開示(ID)。攻撃者が本来見るべきではない情報、多くの場合、機密性の高い個人データやシステムのセキュリティに関する詳細情報を入手できる脆弱性。
  • セキュリティ機能のバイパス。システムやソフトウェアパッケージの機密部分へのアクセスをブロックするはずだったセキュリティ対策を回避するエクスプロイト。

攻撃者にとって、脆弱性とその悪用は単なる目的達成のための手段であり、 侵入を開始し、足がかりを得るための方法に過ぎない。

技術的な中間段階においては、この点を念頭に置いておく必要がある。エクスプロイト後のすべてのステップはネットワーク接続上で実行され、防御側はどの接続を開いたままにするかを決定できる。

攻撃者はどのようにして脆弱性を悪用して侵害を開始するのか?

攻撃者は、バッファオーバーフローなどの脆弱性のあるアプリケーションを介して、メモリにエクスプロイトコードを注入しようとします。これにより、通常のプログラムの流れを、シェルコードとも呼ばれる攻撃者の悪意のあるコードにリダイレクトすることが可能になります。

次に、攻撃者の悪意のあるコード(シェルコード)がマシンを乗っ取り、最初の足がかりを得て、コマンド&コントロール(C&CまたはC2)を確立します。この時点で、攻撃者は侵入を成功裏に開始した。

各ステップは、攻撃全体の流れにおいて重要な役割を担っています。

  1. 脆弱性の発見。これは、システムやソフトウェアの製造方法、あるいはその使用方法における弱点を見つけるプロセスです。これには、リバースエンジニアリング、ファジング、コード解析(静的および動的)、または依存関係解析などが含まれます。‍
  2. 脆弱性のあるプログラムを悪用する。エクスプロイトとは、脆弱性を悪用することに成功した低レベルまたはネイティブコードのことです。これには、任意のコード実行(ACE)、バイパス、権限昇格(EoP)、または情報漏洩(ID)につながるエクスプロイトが含まれる可能性があります。‍
  3. シェルコード。シェルコードとは、実行中のプログラムの通常の処理フローを乗っ取り、そのフローをメモリ上で実行されている攻撃者の悪意のあるコードにリダイレクトしようとする、特定の低レベルの悪意のあるコード、または特別に作成された攻撃のことです。これには、バッファオーバーフロー、ヒープスプレー、VTableハイジャック、またはリターン指向プログラミング(ROP)などが含まれます。‍
  4. 逆殻構造。リバースシェルは、攻撃者のリスナーインフラストラクチャへの接続を開始し、脆弱なプログラムまたはシステムへの不正アクセスを取得します。これには、コマンドプロンプト(cmd)、追加の脆弱性をダウンロードするためのbash、および権限昇格などのより高度なペイロードが含まれる場合があります。‍
  5. マルウェアのペイロード。マルウェアのペイロードは、より高度な機能を持つ、 段階的に実行される悪意のある実行ファイルまたはエクスプロイトであり、最初の足がかりを超えて攻撃を進行させるものです。追加のマルウェアが侵害されたシステム上で提供する機能や動作は、真の、多くの場合小さなシェルコードが提供できるように設計されている範囲を超えています。 これには、ローカル権限昇格の脆弱性を悪用した多段階攻撃と、ワームのような横方向移動を行うマルウェアが含まれる可能性があります。

上記のステップ2~4はすべてメモリ上で実行されます。攻撃者は脆弱なプログラムを悪用し、シェルコードを使用して制御フローを乗っ取り、リバースシェルを仕掛ける。これは、プロセス(実行中の実行ファイル)の仮想メモリ構造を使用して分析できます。その構造は、スタック、ヒープ、データ、BSS、テキストセクションという5つの主要な部分から構成されている。  

アドレス空間を下位アドレスから上位アドレスへと示したメモリレイアウト図。低いアドレスにはプログラムコード用のテキストセクションがあり、続いて初期化済みデータ用のデータセクション、そして未初期化データ用のBSSセクションが続きます。これらの上には上向きに成長するヒープがあり、一番上には下向きに成長するスタックがある。ヒープとスタックの間には、空きアドレス空間が存在する。

特に注目すべきはスタック部分だろう。第2部では、これらのメモリ領域について詳しく解説し、以下のエクスプロイト手法の1つを例に挙げます。

脆弱性を悪用するための主要な手法

主な攻撃手法には以下のようなものがあります。

  • 侵害されたアカウントを標的とした、 IDベースの攻撃。‍
  • プログラミングロジックにおける様々な欠陥を利用して、悪用可能な脆弱性を生み出す論理欠陥攻撃。‍
  • バッファオーバーフローとは、バッファがオーバーランして戻りアドレスを上書きしてしまう現象です。‍
  • ヒープスプレー攻撃とは、実行可能な悪意のあるコードをヒープに散布(スプレー)しようとする攻撃であり、エクスプロイトが侵入した後にそのコードが実行される可能性を高めます。ヒープスプレーは、アドレス空間配置ランダム化(ASLR)メモリ保護を回避しようとするものです。

脅威アクターが脆弱性を悪用して最初の足がかりを得ると、彼らは予測可能な戦略の半分を完了したことになる。彼らは今、そのアクセス権を利用してマシンからマシンへと移動し、攻撃を拡大させ、目的を達成する必要がある。

脅威アクターはどのようにして脆弱性を悪用して情報漏洩を拡散させるのか?

攻撃の拡散段階は、より馴染みのある領域へと移行する。これは通常、MITRE ATT&CKフレームワークの戦術と技術の後半部分に相当します。この4つのステップは、最初の5つのステップの続きとなるもので、全部で9つのステップになります。

  • 発見。発見とは、自分がたどり着いたシステムと、それが接続されているネットワークについてより深く学ぶことを意味する。これには、アカウントの検出、ネットワーク情報、ブラウザの検出、クラウドインフラストラクチャの検出などが含まれます。‍
  • 横方向への動き。横方向の移動とは、遠隔システムに接続して乗っ取り、ネットワーク全体に拡散していくことを意味する。これには、RDP/SSHハイジャック、管理者共有、SMB、パスザハッシュ、ソフトウェア展開ツール、および既存のシステムを利用した攻撃手法などが含まれます。‍
  • 指揮統制。コマンド&コントロールとは、攻撃者が自身のリスナーインフラストラクチャを介して感染したシステムと通信し、制御する方法である。これには、リバースシェルチャネル、ウェブチャネル、ドメイン生成アルゴリズム(DGA)、DNSテキストチャネル、ドメインフロント(CDN)などが含まれます。
  • 目標。目標とは、攻撃の最終目的のことである。これには、データ盗難やデータ流出(pyexfilやicmpexfil)、 ランサムウェア、サービス拒否攻撃、ボットネットなどが含まれます。

情報漏洩を拡散させるための最善のテクニック

攻撃者は拡散するために特別なツールを必要とすることはほとんどない。管理者がシステムを管理したり、チームがファイルを共有したりするために使用する同じ経路が、マシンからマシンへの情報漏洩の経路にもなり得るのです。

  • 管理ポートとプロトコル。RDP、SSH、WinRMは、攻撃者にもITチームと同様のリモート制御権限を与える。
  • ファイルとフォルダの共有。SMB共有は、文書を転送するのと同じくらい簡単にマルウェアを拡散させる。
  • 計測機器。WMIのようなツールを使えば、攻撃者は新しいファイルを一つもドロップすることなく、リモートシステム上でコマンドを実行できる。
  • ウェブベースのチャネル。HTTPとDNSのトラフィックによって、コマンドとコントロールは通常のブラウジングのノイズの中に紛れ込むことができる。

攻撃の流れが脆弱性よりも重要な理由

新たな脆弱性は、どのチームも修正するよりも速いスピードで出現し、最も大きな被害をもたらす脆弱性は、スコアが最も高いものとは限らない。被害の程度を左右するのは、脆弱性が悪用された後に起こるすべての事象です。攻撃者がどれだけ遠くまで移動できるか、どれだけのシステムに到達できるか、そしてどれだけの時間作業を続けられるか、といった要素が影響します。

これは守備側にとって朗報だ。なぜなら、スプレッド攻撃の局面は予測しやすい部分だからだ。発見、横方向の移動、指揮統制、そして最終目標の達成はすべて、ほとんどのネットワークがデフォルトで可能にしているシステム間の接続に依存している。そうした道を閉ざせば、足がかりは足がかりのままとなる。セグメンテーション、管理ポートとプロトコルの厳密な制御、ワークロード間の通信方法の明確な可視化によって、9段階のプロセスを5段階で完了させることができます。

駐車場の車を思い出してください。泥棒の存在が重要だったのは、扉が一つ開いたからに過ぎない。セグメンテーションとは、たとえ一つの鍵が故障しても、他のすべてのドアを施錠したままにしておく方法です。

攻撃者は現在、この一連の処理全体を自動化し、機械の速度で実行している。探知と対応は依然として重要であり、爆発半径が既に小さい場合に最も効果を発揮する。侵入地点で侵入を食い止めることが、セキュリティチームが行動を起こすための時間を稼ぐ鍵となる。

第2部では、メモリエクスプロイトについてさらに詳しく掘り下げ、エクスプロイト内部で特別に作成された文字列や入力がどのように機能するのか、そして防御側がそれらを阻止するために使用できる技術について解説します。

Illumioセグメンテーションを体験してみましょう 横方向の移動経路を遮断し、侵入地点で突破口を封じ込める方法を確認する。

関連記事

今すぐIllumio Insightsを体験してください

AI を活用した可観測性が、脅威をより迅速に検出、理解、封じ込めるのにどのように役立つかをご覧ください。