hacktricks/network-services-pentesting/pentesting-ssh.md

25 KiB
Raw Blame History

22 - SSH/SFTPのペネトレーションテスト

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

ハッキングのキャリアに興味があり、ハッキング不可能なものをハックしたい方 - 採用中です! (流暢なポーランド語の読み書きと会話が必要です).

{% 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ライブラリで、PythonPerlRでのバインディングがあります。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-audithttps://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>

アクションを見る (Asciinema)

サーバーの公開SSHキー

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

弱い暗号アルゴリズム

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

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

または、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

crackmapexecsshプロトコルを使用して、--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ログインを無効にする方法

  1. SSHサーバー設定を編集する sudoedit /etc/ssh/sshd_config
  2. #PermitRootLogin yesPermitRootLogin noに変更する
  3. 設定変更を考慮に入れる:sudo systemctl daemon-reload
  4. SSHサーバーを再起動する sudo systemctl restart sshd

SFTPコマンド実行

SFTP設定における一般的なSSHの誤設定は、しばしば見られます。ほとんどの場合、SFTPサーバーを作成する際、管理者はユーザーにファイルを共有するための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

この設定はSFTPのみを許可しますスタートコマンドを強制してシェルアクセスを無効にし、TTYアクセスを無効にするだけでなく、あらゆる種類のポートフォワーディングやトンネリングも無効にします。

SFTPトンネリング

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

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

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

ファジング

参考文献

ハッキングのキャリアに興味があり、ハック不可能なものをハックしたい方 - 採用情報! (流暢なポーランド語の読み書きが必要です).

{% 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 🎥