27 KiB
22 - SSH/SFTPのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
もし、ハッキングのキャリアに興味があり、解読不能なものをハックしたい場合は、採用中です!(流暢なポーランド語の読み書きが必要です)。
{% 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-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz
```bash
ssh-keyscan -t rsa <IP> -p <PORT>
弱い暗号アルゴリズム
これはデフォルトで nmap によって発見されます。しかし、sslscan や 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のプライベートキーがわかっている場合は、試してみましょう。nmapスクリプトを使用できます。
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
または、MSF補助モジュール:
msf> use scanner/ssh/ssh_identify_pubkeys
または、ssh-keybrute.py
(ネイティブのPython3で、軽量でレガシーアルゴリズムが有効になっています)を使用することもできます:snowdroppe/ssh-keybrute。
ここで悪名高い鍵を見つけることができます:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
弱いSSH鍵/Debianの予測可能なPRNG
一部のシステムでは、暗号資材を生成するために使用されるランダムシードに既知の欠陥があります。これにより、ブルートフォース攻撃が可能な鍵スペースが劇的に減少する場合があります。弱いPRNGによって影響を受けたDebianシステムで生成された事前生成された鍵セットは、ここで入手できます:g0tmi1k/debian-ssh。
被害者のマシンの有効な鍵を検索するためにここを調べるべきです。
Kerberos
ssh
プロトコルを使用するcrackmapexecは、--kerberos
オプションを使用してKerberosを介して認証することができます。詳細については、crackmapexec ssh --help
を実行してください。
デフォルトの資格情報
ベンダー | ユーザー名 | パスワード |
---|---|---|
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スプーフィングなどの技術を使用することができます。詳細については、ネットワークスプーフィング攻撃で説明されています。
設定の誤構成
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コマンドの実行
もう1つの一般的なSSHの誤構成は、SFTPの設定でよく見られます。ほとんどの場合、SFTPサーバーを作成する際に、管理者はユーザーがファイルを共有するためにSFTPアクセスを持つことを望んでいますが、マシン全体でのリモートシェルアクセスや悪用を防ぐために、ユーザーにプレースホルダーシェル(例:/usr/bin/nologin
や/usr/bin/false
)を割り当て、彼らをジェイルにチューニングするだけで十分だと考えています。しかし、彼らは間違っています。ユーザーは、デフォルトのコマンドやシェルが実行される前に、認証後すぐにコマンドを実行するように要求することができます。したがって、シェルアクセスを拒否するプレースホルダーシェルをバイパスするには、単に事前にコマンド(例:/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):
# SFTP Configuration for noraj
Subsystem sftp internal-sftp
Match User noraj
ChrootDirectory /home/noraj
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PasswordAuthentication yes
PermitTunnel no
PermitTTY no
PermitUserEnvironment no
AllowAgentForwarding no
AllowStreamLocalForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
UsePAM yes
この設定では、ユーザーnoraj
に対してSFTPのみを許可し、その他のSSH機能を制限しています。ユーザーは自分のホームディレクトリ/home/noraj
に制限され、内部のSFTPサーバーが強制的に実行されます。パスワード認証が有効になっており、TCP転送やX11転送は許可されていません。また、クライアントとの接続が300秒間無効であれば切断され、最大2回まで再接続が許可されます。PAMも使用されています。
Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
この設定では、SFTPのみを許可します。シェルアクセスを無効にするために、startコマンドを強制し、TTYアクセスも無効にします。また、ポートフォワーディングやトンネリングもすべて無効にします。
SFTPトンネリング
SFTPサーバーへのアクセス権がある場合、一般的なポートフォワーディングを使用してトラフィックをトンネリングすることもできます。
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
SFTPシンボリックリンク
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
設定ファイル
Review the SSH server configuration is necessary to check that only expected methods are authorized. Using the verbose mode on the client can help to see the effectiveness of the configuration.
設定ファイル
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa
Fuzzing
- https://packetstormsecurity.com/files/download/71252/sshfuzz.txt
- https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2
References
- You can find interesting guides on how to harden SSH in https://www.ssh-audit.com/hardening_guides.html
- https://community.turgensec.com/ssh-hacking-guide
If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).
{% embed url="https://www.stmcyber.com/careers" %}
HackTricks Automatic Commands
ファジング
- https://packetstormsecurity.com/files/download/71252/sshfuzz.txt
- https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2
参考文献
- https://www.ssh-audit.com/hardening_guides.html でSSHの強化ガイドを見つけることができます。
- 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'
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm.
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。