25 KiB
22 - SSH/SFTPのペネトレーションテスト
AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告したい、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- PEASSファミリーを発見し、独占的なNFTsのコレクションをチェックする
- 💬 Discordグループやテレグラムグループに参加するか、Twitter 🐦 @carlospolopmでフォローする。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
ハッキングのキャリアに興味があり、ハッカブルではないものをハックしたい方 - 採用中です! (流暢なポーランド語の読み書きが必要です).
{% embed url="https://www.stmcyber.com/careers" %}
基本情報
SSHまたはSecure ShellまたはSecure Socket Shellは、ユーザーが保護されていないネットワークを介してコンピュータに安全にアクセスするための方法を提供するネットワークプロトコルです。
デフォルトポート: 22
22/tcp open ssh syn-ack
SSHサーバー:
- openSSH – OpenBSD SSH、BSD、Linuxディストリビューション、およびWindows 10以降のWindowsに搭載
- Dropbear – メモリとプロセッサリソースが少ない環境向けのSSH実装、OpenWrtに搭載
- PuTTY – Windows向けのSSH実装、クライアントは一般的に使用されるが、サーバーの使用は珍しい
- CopSSH – Windows向けのOpenSSH実装
SSHライブラリ (サーバー側の実装):
- libssh – SSHv2プロトコルを実装するマルチプラットフォームCライブラリで、Python、Perl、Rのバインディングがある; KDEのsftpやGitHubのgit SSHインフラストラクチャで使用されている
- wolfSSH – ANSI Cで書かれたSSHv2サーバーライブラリで、組み込み、RTOS、リソース制約のある環境を対象としている
- Apache MINA SSHD – Apache SSHD javaライブラリはApache MINAに基づいている
- paramiko – Python SSHv2プロトコルライブラリ
列挙
バナーグラビング
nc -vn <IP> 22
自動化されたssh-audit
ssh-auditはSSHサーバーとクライアントの設定監査ツールです。
https://github.com/jtesta/ssh-audit は https://github.com/arthepsy/ssh-audit/ からの更新されたフォークです。
特徴:
- SSH1とSSH2プロトコルサーバーのサポート;
- SSHクライアント設定の分析;
- バナーの取得、デバイスまたはソフトウェアとオペレーティングシステムの認識、圧縮の検出;
- 鍵交換、ホストキー、暗号化、メッセージ認証コードアルゴリズムの収集;
- アルゴリズム情報の出力(利用可能な時期、削除/無効化、安全でない/弱い/レガシーなど);
- アルゴリズムの推奨事項の出力(認識されたソフトウェアバージョンに基づいて追加または削除);
- セキュリティ情報の出力(関連する問題、割り当てられたCVEリストなど);
- アルゴリズム情報に基づいたSSHバージョンの互換性分析;
- OpenSSH、Dropbear SSH、libsshからの歴史情報;
- LinuxとWindowsで実行可能;
- 依存関係なし
usage: ssh-audit.py [-1246pbcnjvlt] <host>
-1, --ssh1 force ssh version 1 only
-2, --ssh2 force ssh version 2 only
-4, --ipv4 enable IPv4 (order of precedence)
-6, --ipv6 enable IPv6 (order of precedence)
-p, --port=<port> port to connect
-b, --batch batch output
-c, --client-audit starts a server on port 2222 to audit client
software config (use -p to change port;
use -t to change timeout)
-n, --no-colors disable colors
-j, --json JSON output
-v, --verbose verbose output
-l, --level=<level> minimum output level (info|warn|fail)
-t, --timeout=<secs> timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit <IP>
サーバーの公開SSHキー
ssh-keyscan -t rsa <IP> -p <PORT>
弱い暗号アルゴリズム
これはデフォルトでnmapによって発見されます。しかし、sslcanやsslyzeを使用することもできます。
Nmap スクリプト
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
nmap -p22 <ip> --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 <ip> --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods
Shodan
ssh
ブルートフォース攻撃:ユーザー名、パスワード、プライベートキー
ユーザー名列挙
OpenSSHの一部のバージョンでは、タイミング攻撃を利用してユーザーを列挙することができます。これを利用するためには、metasploitモジュールを使用できます:
msf> use scanner/ssh/ssh_enumusers
ブルートフォース
一般的なsshクレデンシャルについてはこちらとこちら、そして下記を参照してください。
プライベートキー ブルートフォース
もし使用可能なsshプライベートキーをいくつか知っている場合... 試してみましょう。nmapスクリプトを使用できます:
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
またはMSF補助モジュール:
msf> use scanner/ssh/ssh_identify_pubkeys
Or use ssh-keybrute.py
(native python3, lightweight and has legacy algorithms enabled): snowdroppe/ssh-keybrute.
既知の悪質なキーはこちらで見つけることができます:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
弱いSSHキー / Debian予測可能なPRNG
一部のシステムでは、暗号素材を生成するために使用されるランダムシードに既知の欠陥があります。これにより、キースペースが劇的に減少し、ブルートフォース攻撃が可能になる場合があります。弱いPRNGの影響を受けたDebianシステムで生成されたキーセットはこちらで利用可能です: g0tmi1k/debian-ssh.
被害者のマシンに有効なキーを探すために、こちらを調べるべきです。
Kerberos
crackmapexec は ssh
プロトコルを使用して --kerberos
オプションを使い kerberos経由で認証 を行うことができます。
詳細については crackmapexec ssh --help
を実行してください。
デフォルトの資格情報
Vendor | Usernames | Passwords |
---|---|---|
APC | apc, device | apc |
Brocade | admin | admin123, password, brocade, fibranne |
Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
D-Link | admin, user | private, admin, user |
Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
Juniper | netscreen | netscreen |
NetApp | admin | netapp123 |
Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
SSH-MitM
もし被害者がローカルネットワーク内にいて、ユーザー名とパスワードを使用してSSHサーバーに接続しようとしている場合、これらの資格情報を盗むために MitM攻撃を実行することができます:
攻撃パス:
- ユーザートラフィックが攻撃者のマシンにリダイレクトされる
- 攻撃者はSSHサーバーへの接続試みを監視し、それらを自身のSSHサーバーにリダイレクトする
- 攻撃者のSSHサーバーは、第一に、ユーザーのパスワードを含むすべての入力データを記録し、第二に、ユーザーが接続したい正当なSSHサーバーにコマンドを送信して実行し、その結果を正当なユーザーに返すように設定される
SSH MITM は上記のことを正確に行います。
実際のMitMをキャプチャするためには、ARPスプーフィング、DNSスプーフィング、または Network Spoofing attacks で説明されている他の技術を使用できます。
SSH-Snake
システムで発見されたSSHプライベートキーを使用してネットワークを横断し、各システムで各プライベートキーを新しいホストに使用したい場合は、SSH-Snake が必要です。
SSH-Snakeは以下のタスクを自動的かつ再帰的に実行します:
- 現在のシステムでSSHプライベートキーを見つける,
- 現在のシステムでプライベートキーが受け入れられる可能性のあるホストや宛先(user@host)を見つける,
- 発見されたすべてのプライベートキーを使用して、すべての宛先にSSHで接続を試みる,
- 宛先に成功して接続した場合、接続されたシステムでステップ #1 - #4 を繰り返す.
それは完全に自己複製および自己伝播であり、完全にファイルレスです。
設定の誤設定
Rootログイン
デフォルトでは、ほとんどのSSHサーバー実装はrootログインを許可しますが、このアカウントの資格情報が漏洩した場合、攻撃者は直接管理者権限を取得し、このアカウントに対するブルートフォース攻撃を行うことができるため、無効にすることが推奨されます。
openSSHでrootログインを無効にする方法:
- SSHサーバー設定を編集
sudoedit /etc/ssh/sshd_config
#PermitRootLogin yes
をPermitRootLogin no
に変更- 設定変更を考慮に入れる:
sudo systemctl daemon-reload
- SSHサーバーを再起動
sudo systemctl restart sshd
SFTPブルートフォース
SFTPコマンド実行
SFTP設定における一般的なSSHの誤設定は、しばしば見られます。ほとんどの場合、管理者はユーザーにファイルを共有するためのSFTPアクセスを提供したいと考えていますが、マシン上でリモートシェルを取得することは望んでいません。したがって、ユーザーを作成し、プレースホルダーシェル(例:/usr/bin/nologin
や /usr/bin/false
)を割り当て、ジェイル内にchrootすることでシェルアクセスやファイルシステム全体の悪用を防ぐことができると考えています。しかし、それは間違いです。ユーザーは、デフォルトのコマンドやシェルが実行される前に、認証直後にコマンドを実行するよう要求することができます。したがって、シェルアクセスを拒否するプレースホルダーシェルを回避するためには、(例えば /bin/bash
などの)コマンドを先に実行するよう要求するだけでよいのです。
ssh -v noraj@192.168.1.94 id
...
Password:
debug1: Authentication succeeded (keyboard-interactive).
Authenticated to 192.168.1.94 ([192.168.1.94]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending command: id
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
uid=1000(noraj) gid=100(users) groups=100(users)
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2412, received 2480 bytes, in 0.1 seconds
Bytes per second: sent 43133.4, received 44349.5
debug1: Exit status 0
$ ssh noraj@192.168.1.94 /bin/bash
以下は、ユーザー noraj
のための安全なSFTP設定の例です(/etc/ssh/sshd_config
– openSSH)。
Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
この設定は、開始コマンドを強制してシェルアクセスを無効にし、TTYアクセスを無効にするだけでなく、あらゆる種類のポートフォワーディングやトンネリングも無効にすることで、SFTPのみを許可します。
SFTP トンネリング
SFTPサーバーにアクセスできる場合、例えば一般的なポートフォワーディングを使用して、トラフィックをこれを介してトンネリングすることもできます。
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
SFTP Symlink
sftp には "symlink" コマンドがあります。したがって、あるフォルダに書き込み権限がある場合、他のフォルダ/ファイルのシンボリックリンクを作成できます。おそらく chroot 内に閉じ込められているため、これは特に役に立たないかもしれませんが、no-chroot サービスから作成したシンボリックリンクにアクセスできる場合(例えば、ウェブからシンボリックリンクにアクセスできる場合)、ウェブを通じてシンボリックリンクされたファイルを開くことができます。
例えば、新しいファイル "froot" から "/" へのシンボリックリンクを作成するには:
sftp> symlink / froot
ファイル "froot" にウェブ経由でアクセスできる場合、システムのルートフォルダ ("/") をリストすることができます。
認証方法
高セキュリティ環境では、単純なパスワードベースの認証よりも、キーベースまたは二要素認証を有効にするのが一般的です。しかし、より強力な認証方法を有効にしても、より弱い方法を無効にしないことがよくあります。よくあるケースは、openSSHの設定で publickey
を有効にし、デフォルトの方法として設定するが、password
を無効にしないことです。そのため、SSHクライアントの詳細モードを使用すると、攻撃者はより弱い方法が有効であることを確認できます:
ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive
例えば、認証失敗の制限が設定されており、パスワード方式に到達する機会が決してない場合、PreferredAuthentications
オプションを使用してこの方式を強制的に使用することができます。
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
SSHサーバーの設定を確認することは、予想されるメソッドのみが許可されていることを確認するために必要です。クライアントの詳細モードを使用すると、設定の有効性を確認するのに役立ちます。
設定ファイル
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa
ファジング
- https://packetstormsecurity.com/files/download/71252/sshfuzz.txt
- https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2
参考文献
- SSHを強化する方法に関する興味深いガイドは、https://www.ssh-audit.com/hardening_guides.htmlで見つけることができます。
- https://community.turgensec.com/ssh-hacking-guide
ハッキングのキャリアに興味があり、ハック不可能なものをハックしたい方 - 採用中です! (流暢なポーランド語の読み書きが必要です).
{% embed url="https://www.stmcyber.com/careers" %}
HackTricks 自動コマンド
Protocol_Name: SSH
Port_Number: 22
Protocol_Description: Secure Shell Hardening
Entry_1:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 {IP} ssh
Entry_2:
Name: consolesless mfs enumeration
Description: SSH enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ssh/ssh_version; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ssh/juniper_backdoor; set RHOSTS {IP}; set RPORT 22; run; exit'
AWSハッキングをゼロからヒーローまで学ぶ htARTE (HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告したい場合、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- The PEASS Familyを発見する、私たちの独占的なNFTsのコレクション
- 💬 Discordグループやtelegramグループに参加する、またはTwitter 🐦 @carlospolopmをフォローする。
- HackTricks](https://github.com/carlospolop/hacktricks)とHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有してください。