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

27 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以降に搭載されています。
  • 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プロトコルライブラリ

列挙

バナーの取得

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>

アクションを見るAsciinema

サーバーの公開SSHキー

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の資格情報はこちらこちらにあります。

プライベートキーのブルートフォース

使用可能な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ログインを無効にする方法

  1. SSHサーバーの設定を編集します sudoedit /etc/ssh/sshd_config
  2. #PermitRootLogin yesPermitRootLogin no に変更します
  3. 設定の変更を反映させます sudo systemctl daemon-reload
  4. 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内でのみ操作できます。パスワード認証が有効になっており、TCPフォワーディングやX11フォワーディングなどの機能は無効化されています。また、クライアントとの接続が一定時間無効になるように設定されています。

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

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

設定ファイル

ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

Fuzzing

References

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

ファジング

参考文献

もし興味があるなら、ハッキングのキャリアを追求し、私たちは採用しています!(流暢なポーランド語の読み書きが必要です)。

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