
CVE-2024-6387 向け SSH エクスプロイト : glibc ベースの Linux システム上における OpenSSH サーバーの RCE
CVE-2024-6387は仮想的な例ですが、ここではOpenSSHサーバー実装における実際の脆弱性であると仮定します。この脆弱性は、バッファオーバーフローやメモリ破損の問題を伴い、リモートの攻撃者がサーバー上で任意のコードを実行できる可能性があります。このような脆弱性がどのように悪用され得るかについて、その概要を以下に説明します:
提供されたPythonコードは、CVE-2024-6387を悪用するために設計されたエクスプロイトです。以下に、その処理手順の詳細を示します: 接続のセットアップ:ターゲットのSSHサーバーへのTCP接続を確立します。
def setup_connection(ip, port):
# ...
パケットの送受信:SSHサーバーとの間でパケットの送受信を処理します。
def send_packet(sock, packet_type, data):
# ...
SSHバージョン交換:SSHバージョン文字列を送受信してSSHハンドシェイクを開始します。
def send_ssh_version(sock):
# ...
def receive_ssh_version(sock):
# ...
鍵交換開始(KEX_INIT):鍵交換初期化パケットを送受信します。
def send_kex_init(sock):
# ...
def receive_kex_init(sock):
# ...
SSHハンドシェイクの実行:上記の手順を組み合わせてSSHハンドシェイクを完了します。
def perform_ssh_handshake(sock):
# ...
ヒープの準備:サーバー上のヒープ状態を操作するために一連のパケットを送信します。
def prepare_heap(sock):
# ...
偽のファイル構造:メモリ破損の脆弱性を悪用するために偽のファイル構造を作成します。
def create_fake_file_structure(data, glibc_base):
# ...
解析時間の測定:サーバーが特定のパケットを解析するのにかかる時間を測定し、最終的なエクスプロイトのタイミングを適切に調整するのに役立てます。
def time_final_packet(sock):
# ...
公開鍵パケット:シェルコードを含むエクスプロイトペイロードを含むパケットを細工します。
def create_public_key_packet(packet, size, glibc_base):
# ...
競合状態の悪用:最終パケットのタイミングを正確に調整して競合状態を悪用しようとします。
def attempt_race_condition(sock, parsing_time, glibc_base):
# ...
メイン関数:異なるglibcベースでの複数の試行を含む、全体的なエクスプロイト処理を調整します。
def main():
# ...
CVE-2024-6387は、リモートコード実行を可能にするOpenSSHの深刻な脆弱性です。提供されたPythonスクリプトは、ヒープを操作し、パケット送信のタイミングを調整してメモリ破損を引き起こすことでこの脆弱性を悪用し、最終的にサーバー上で攻撃者のシェルコードを実行します。このスクリプトは、ヒープスプレー、メモリ破損、競合状態に対する正確なタイミングといった、典型的なエクスプロイト開発技法を示しています。