web-dev-qa-db-ja.com

Egghunter攻撃は64ビットシステムでも意味がありますか?

背景

Egghunterは基本的に、2段階の悪用の試みの最初の段階として機能する小さなサイズのスタブです(一方、2番目の段階は通常、悪意のあるペイロードシェルコードです)。最初のステージでは、スタブはプロセスVAS(仮想アドレススペース)を検索して、同じプロセスメモリの別の場所に入力/注入される2番目のステージのペイロードを探します。見つかったら、制御を搾取の第2段階に移します。

X86システムでは、VASのサイズは4294967296バイトまたは約4Gbです。サイズ4GbのプロセスVAS全体をスキャンする方が比較的簡単です。

現在、x86_64システムでは、VASサイズは最大1680万Tb(テラバイト)です。そのような記憶の中で卵を見つけることは、干し草の山から針を見つけようとすることです。

質問:

これにより、egghunterの悪用手法はx86_64システムでは無関係になりますか?注入された卵+ペイロードの正確なリアルタイムの場所を実際に知らなくても、卵のラベルを見つけてペイロードを実行することは非常に難しいことが証明できるため

次のような問題:

  1. その多くのメモリを検索すると、数日/数週間かかる場合があります
  2. システムコールが[数百万x(Tb)]の反復で繰り返される場合のUB
  3. #2が発生したときのSegfault

だから、少なくとも注入された第2ステージのペイロードのメモリ内の正確な位置を知らなくても、64ビットシステムでの実際の攻撃では、egghunter攻撃は依然として意味がありますか?

2
Rennitbaby

それは理にかなっていますが、運に頼らなければなりません。簡単に言えば、それは機能しますが、実際には信頼できません。ユーザー空間のみが関連するため(47ビット)、アドレス空間全体を検索する必要はありません。詳細な説明が必要な場合は、この記事で64ビットシステムに対するこの攻撃を実験してみてください。 https://pentesterslife.blog/2017/11/24/x64-Egg-hunting-in-linux-systems/

1
user189437