
SSH-Snakeは、自己増殖・自己複製するファイルレスのスクリプトであり、SSH秘密鍵とホストの発見というポストエクスプロイテーションタスクを自動化します。
🐍 SSH-Snakeは、システム上で発見されたSSH秘密鍵を使用して自動的にネットワークトラバーサルを実行するように設計された強力なツールであり、ネットワークとその依存関係の包括的なマップを作成し、特定のシステムから開始してSSHとSSH秘密鍵を使用してネットワークがどの程度侵害される可能性があるかを特定することを目的としています。
SSH-Snakeは、SSHを介して接続されたシステム間の関係を自動的に明らかにすることができ、通常これを手動で行うには膨大な時間と労力がかかります。
言い換えれば、SSH-Snakeは以下のタスクを自動的かつ再帰的に実行します:
user@host)をすべて見つける。完全に自己複製および自己伝搬可能で、完全にファイルレスです。多くの点で、SSH-Snakeは実際にはワームです。自身を複製し、可能な限りシステムからシステムへと拡散します。
スーパーマリオゲームのようにSSH鍵を使って手動でシステム間をジャンプする代わりに、SSH-Snakeに作業を任せましょう。
このツールはハッキング目的で意図されていますが、システム管理者も自分のインフラストラクチャとネットワークをよりよく理解するために使用できます。発見された秘密鍵の出力を無効にしたい場合は、このコード行をコメントアウトしてください。
このスクリプトが実際にどのように動作するか、技術的な詳細、興味深い発見、設計上の決定、ベンチマーク、学んだ教訓についての詳細は、こちらのブログ記事をご覧ください。このソフトウェアはJoshua Rogersによって作成されました。
非常に小規模なネットワークにおけるSSH-Snakeの出力の縮小スクリーンショット。 |
|---|
青いノードは、destination(宛先)が自身に接続できることを示します(user@host<-->user@host)。赤いエッジは、接続が双方向であることを示します(user1@host1<-->user2@host2)。 |
|---|
SSH-Snakeはダウンロードまたはbashにパイプして実行できます:
wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
bash ./Snake.nocomments.sh
または
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | bash
SSH-Snakeは、人間の攻撃者がSSH秘密鍵とそれを使用して接続できる宛先を発見するために行うことをシームレスにエミュレートします。完全にBashで記述されており、主要なLinux(およびMacOS)システムで一般的に利用可能な最小限の依存関係で動作します: bash、ssh、coreutils、awk、uniq、sort、grep、tr、find、cat。getent または dscacheutil が必要です。sed は最初のシステムのみ必要です。同様に、sudo、hostname、ip、、、、、 も使用される可能性がありますが、必須ではありません(スクリプトはこれらが存在しない場合も適切に処理します)。必要なパッケージが1つもないシステムが発見された場合、正常に失敗し、その特定のシステムでスキャンを続行できないことをユーザーに通知します(そしてバックトラックし、前のシステムから続行します)。
SSH-Snakeは完全にファイルレスです: ユーザーがスクリプトを実行すると、stdinとbash引数(SSH経由)を介して宛先のbashに渡されます。スキャンされたシステム上にスクリプトの物理的な証拠は一切残りません。スクリプトの実行の唯一の証拠は、プロセスツリーと、必然的に発生する大量の無効なSSH試行です。
SSH-Snakeは発見に深さ優先アプローチを採用しています: 一度システムに接続すると、バックトラックする前にそのシステムからさらに接続を試みます。
SSH-Snakeという名前は、スクリプトの出力がネットワークを上下に這う蛇のように見えることに由来しています。ただし、ゲームのSnakeとは異なり、SSH-Snakeは自分の尾を噛んでも(すでにスキャンした、または現在スキャン中のシステムに接続しても)死にません。単に通常通りそこへの接続方法を出力し、その宛先を再スキャンせずに戻ります(無限再帰を避けるため)。
SSH-Snakeは様々なLinuxディストリビューションとMacOS(HomebrewでインストールしたBashを使用)でテストされています。互換性のないLinuxベースのOSに遭遇した場合は、報告を提出してください。
.bash_historyエントリからSSH秘密鍵ファイルを発見。SSH-Snakeには設定可能ないくつかの一般的な設定が用意されています。これらの設定はSETTINGS.md#general-settingsに文書化されています。
SSH-Snakeには、システム上のSSH秘密鍵を発見し、接続を試みるホストや宛先を発見するために使用できる、さまざまな設定可能/プラグアンドプレイの戦略(関数)も付属しています。適切なデフォルトが提供されていますが、可能な限り徹底的にスキャンを実行したい場合は、より多くの発見手法を有効にすると役立ちます。スキャンに時間がかかる場合は、一部の発見手法を無効にすると役立ちます。1つの戦略(find_ssh_keys)を除き、各戦略はオン/オフを切り替えることができます。これらはSETTINGS.md#configurable-discovery-strategiesに文書化されています。
SSH-Snakeの生の出力には、発見された秘密鍵、宛先、エラーメッセージに関する情報が混在しています。
SSH-Snakeの完全な出力に関する詳細な説明はOUTPUT.mdにあります。
出力の例はexample-output.logにあります。
SSH-Snakeの出力を使用して、スクリプトがトラバースしたネットワークのグラフ/可視化を作成できます。
SSH-Snakeの出力から画像/可視化を作成および解釈する方法の詳細な説明はGRAPHICS.mdにあります。
SSH-Snakeがトラバースするネットワークの可視化を作成する機能に加えて、3つのツールが提供されています。すなわち:
forward-lookup-host.py: 送信元ホストまたは宛先を指定して、直接または間接的に(すなわち、第三のシステムを介して)アクセスできるすべてのシステムを特定します。reverse-lookup-host.py: 宛先ホストまたは宛先を指定して、直接または間接的にそれにアクセスできるすべてのシステムを特定します。shortest-path-create-chain.py: ホストまたは宛先AとBを指定して、2つを結ぶ最短パスを特定します。3つ目のツールは、宛先Aから宛先Bに接続するために使用できるコマンドも生成します。例:
$ python3 tools/shortest-path-create-chain.py --file output.log --src '[email protected]' --dest '[email protected]'
Shortest path from [email protected] to [email protected]: [email protected]>[email protected]>[email protected]>[email protected]
[..]
ssh -i "/home/jrogers/.ssh/key" [email protected] 'sudo ssh -i "/root/.ssh/id_rsa" [email protected] 'ssh -i "/tmp/key" [email protected]''
スクリプトはかなり大きいため、ヒアドキュメントにロードすると(スクリプトは実際にはクワインであるため自動的に行われます)、bashが一時ファイルに書き込む原因となります(65535バイトを超えるため)。
100%ファイルレスのままにするためにサイズを削減するため、Snake.nocomments.shはすべてのコメント、不要な空白、空行を削除したバージョンです。これにより、ファイルサイズが削減され、bashによって一時ファイルが作成されなくなります。
スクリプトに関連するバグや問題に遭遇した場合は、GitHub Issueとして報告してください。その際、設定内容を含めてください。
スクリプトによって捕捉されていないエラーに関連する興味深い[line]出力に特に興味があります。
timeoutarpifconfigipconfigxargs