
TrustedSec Attack Platformは、組織への確立された接続を確保するために、インフラストラクチャ上でドロッパーを展開する信頼性の高い手法です。
TAP - リモートペネトレーションテストプラットフォームビルダー。
作者: David Kennedy @HackingDave
会社: TrustedSec (https://www.trustedsec.com)
プロジェクトページ: https://github.com/trustedsec/tap
TrustedSec プロジェクト - Copyright 2020
対応オペレーティングシステム: Linux (Ubuntu Linux 推奨)
TAP はリモートペネトレーションテストプラットフォームビルダーです。セキュリティ業界の皆さんにとって、移動はしばしば負担となり、顧客に多大なコストを追加することになります。TAP は、これらのボックスの展開を非常にシンプルにし、リモートペネトレーションテストプラットフォームを展開するための自己回復型で安定したプラットフォームを構築するために設計されました。基本的には概念は単純で、新品のボックスを事前構成して TAP セットアップファイルを実行します。これにより、Linux 上に希望どおりに構成されたサービスがインストールされます。実行されることは、インターネットに公開されているマシンへのリバース SSH トンネルを確立することです。そこから、接続先のサーバーからローカルにボックスにアクセスできます。TAP は SSH 接続が失効したことを自動的に検出し、自動的に再構築します。
また、他にも多くのオプションがあります。たとえば、SSH を失った場合には、テキストファイルに接続してコマンドを実行してくれます。また、継続的に自己更新し、Ubuntu Linux (その OS を使用している場合) の最新パッケージが実行されていることを確認します。
python setup.py - This will install TAP.
アンインストールするには:
python setup.py - This will uninstall TAP.
TAP をセットアップする際に疑問に思うかもしれないのは、REMOTE SSH サーバーです。これは、SSH を公開している外部ボックスです。TAP マシンに接続させたいボックス、つまりインターネット上で接続を待機しているマシンです。セキュリティ上の欠陥となるため、root を使用することは推奨されません。通常のユーザーを使用して SSH トンネルを確立してください。現時点ではパスワードのみですが、後ほど SSH キーのサポートを追加する予定です。パスワードは AES を使用して保存されますが、現時点では暗号キーの保存は安全ではありません。ボックスへの永続的なアクセス権を持つ者は、時間と粘り強さがあれば暗号キーを取得して設定内のパスワードを復号化できます。これは後のリリースで修正される予定です。
2 つ目は、REMOTE ボックス上にある LOCAL ポートです。TAP がリバース SSH で接続し戻ると、REMOTE ボックスに接続してマシン上にローカルポートを確立します。インターネット上のリモートボックスに SSH 接続する際は、ssh user@localhost -p を実行します。これが、アクセスできるように TAP が REMOTE システム上でバインドするポートになります。
これを構成すると、TAP には更新を取得するデフォルトのパスがありますが、これを独自の更新パスに変更できます。これは意図的に github には置いていません。承認された更新に必要なものを指定できるようにするためです。
次に、TAP にコマンドを送信できます。TAP は 2 分ごとに新しい指示を確認します。パスを指定する必要があります。例:
TAP はそのパスを 2 分ごとにチェックして新しいコマンドを探します。次の部分は重要です。テキストファイルの最初の行には "EXECUTE COMMAND" (二重引用符なし) が含まれている必要があります。TAP がこれを識別すると、そのコマンドが以前に実行されたかどうかを確認し、実行されていない場合はコマンドを行ごとに実行します。これは、TAP との接続を失い、修正のためにコマンド実行を呼び出す必要がある場合に役立ちます。
setup を実行すると、/usr/share/tap にファイルがインストールされます。指定すれば自動的に起動し、Debian アップデートや TAP アップデートなどの更新を自動的に確認します。
Debian を使用している場合は、接続先の REMOTE ボックスと同様に、更新サーバーをホワイトリストに登録する必要もあります。
以上です!
SSH キーを使用せずパスワードを使用する場合は、設定は AES 形式で保存されます (python-pycrypto が必要です)。パスワードを更新する必要がある場合は、scripts ディレクトリに移動してください。そこには、暗号化されたパスワードを更新し、新しい動的暗号キーを作成する update-password スクリプトがあります。
また、そこに着いたら便利なトリックとして、基本的に SSH VPN のために私たちが書いた小さなツールがあります。これは、ポートスキャンや脆弱性スキャンなどの大量のトラフィックを行わない場合に最適です。以下は、sshuttle をラップして VPN を作成する簡単なツールです。以下のファイルを Python ファイルに保存して実行し、コマンドを使用するだけです。TAP が展開されているリモートネットワークに VPN で接続します。非常に大容量のトラフィックでなければ、何でも行うことができます (かなり安定しています)。
VPN を扱う方法は 2 つあります。1 つ目は、以下の SSHuttle を使う方法です。また、TrustedSec の Geoff Walton によって作成された透過 VPN を使用することもできます。これは scripts フォルダ内にあります。これにより TAP インターフェイスが作成され、SSH 経由でシステムに VPN 接続されます。SSHuttle ではポートスキャンなどが正常に機能しないため、ssh-tunnel スクリプトを強くお勧めします。
SSHUTTLE は、SSH を透過プロキシ VPN の方法として使用できるようにするツールです。このスクリプトを使用して、リモートの TAP デバイスと通信し、プロキシ経由でシステムをトンネリングして完全な VPN を実現できます。これにより、TAP デバイス自体を利用するのではなく、自分のデバイスを通じてテストを行うことができます。
import subprocess
import time
if not os.path.isfile("/usr/sbin/sshuttle"):
print "[!] SSHUTTLE does not appear to be installed, installing now"
subprocess.Popen("apt-get install sshuttle -f", shell=True).wait()
print("Welcome to the sshuttle wrapper for TAP.")
print("Enter the address for the SSH server, i.e. box.sshserver.com")
reverse1 = input("Enter SSH server (REMOTE server): ")
reverse2 = input("Enter the remote SSH port for %s:: " % (reverse1))
reverse3 = input("Enter the port to tunnel for the local TAP machine (i.e. TAP box localhost port): ")
reverse4 = input("Enter the username to connect to REMOTE system: ")
print)"Triggering tunnel now...")
time.sleep(2)
subprocess.Popen("ssh -f %s@%s -L %s:localhost:%s -N" % (reverse4, reverse1, reverse3, reverse2), shell=True).wait()
subprocess.Popen("sshuttle --dns -vr %s@localhost:%s 0/0" % (reverse4,reverse3), shell=True).wait()
TAP は proxychains4 (proxychains-ng) を使用して、すべての http/https トラフィックを SSH 経由でリモートボックスにトンネリングします。これはコンテンツ/エグレスフィルタリングに役立ち、常にすべてを最新の状態に保つことができます。proxychains を使用するには、proxychains4 <command_you_want_to_use> と入力するだけです。TAP の更新は自動的にこれを使用します。
TAP はセットアッププロセス中に、システム上で実行されたすべてのコマンドをログに記録するかどうかを尋ねます。記録する場合、システムに入力されたすべてのコマンドがログに記録されるため、顧客に提供したり、デバイスで何が発生したかの記録を保持したりできます。すべてのログは /var/log/messages の下に保存されます。
Ubuntu 18.04 LTS (Debian や他の Ubuntu バージョンでも問題なく動作するはずです)