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

341 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 22 - SSH/SFTPのペンテスト
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出**してください。
</details>
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
もし、**ハッキングのキャリア**に興味があり、アンハッカブルをハックしたい場合は、**採用中です!**(流暢なポーランド語の読み書きが必要です)。
{% embed url="https://www.stmcyber.com/careers" %}
## 基本情報
**SSHまたはSecure ShellまたはSecure Socket Shell**は、ユーザーが**セキュリティのないネットワークを介してコンピュータに安全にアクセスするためのネットワークプロトコル**です。
**デフォルトポート:** 22
```
22/tcp open ssh syn-ack
```
**SSHサーバー:**
* [openSSH](http://www.openssh.org) OpenBSD SSH、BSD、Linuxディストリビューション、およびWindows 10以降に搭載されています。
* [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) 低メモリとプロセッサリソースの環境向けのSSH実装で、OpenWrtに搭載されています。
* [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) Windows向けのSSH実装で、クライアントは一般的に使用されますが、サーバーの使用は稀です。
* [CopSSH](https://www.itefix.net/copssh) Windows向けのOpenSSHの実装です。
**SSHライブラリサーバーサイドの実装:**
* [libssh](https://www.libssh.org) SSHv2プロトコルを実装したマルチプラットフォームのCライブラリで、[Python](https://github.com/ParallelSSH/ssh-python)、[Perl](https://github.com/garnier-quentin/perl-libssh/)、および[R](https://github.com/ropensci/ssh)にバインディングがあります。KDEではsftpに、GitHubではgit SSHインフラストラクチャに使用されています。
* [wolfSSH](https://www.wolfssl.com/products/wolfssh/) ANSI Cで書かれたSSHv2サーバーライブラリで、組み込み、RTOS、リソース制約のある環境を対象としています。
* [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) Apache SSHD javaライブラリはApache MINAに基づいています。
* [paramiko](https://github.com/paramiko/paramiko) Python SSHv2プロトコルライブラリ
## 列挙
### バナーの取得
```bash
nc -vn <IP> 22
```
### 自動化されたssh-audit
ssh-auditは、sshサーバーおよびクライアントの設定監査のためのツールです。
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit)は、[https://github.com/arthepsy/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>
```
[アクションを見るAsciinema](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
### サーバーの公開SSHキー
```bash
ssh-keyscan -t rsa <IP> -p <PORT>
```
### 弱い暗号アルゴリズム
これはデフォルトで **nmap** によって発見されます。ただし、**sslscan** または **sslyze** を使用することもできます。
### 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
```
### [ブルートフォース](../generic-methodologies-and-resources/brute-force.md#ssh)
一般的なsshの資格情報は[こちら](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt)と[こちら](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt)にあります。
### プライベートキーのブルートフォース
使用可能な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
`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**](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コマンドの実行
もう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
```plaintext
# 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
```
## ファジング
* [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt)
* [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh\_version\_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh\_version\_2)
## 参考文献
* [https://www.ssh-audit.com/hardening\_guides.html](https://www.ssh-audit.com/hardening\_guides.html)には、SSHを強化するための興味深いガイドがあります。
* [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
もしあなたが**ハッキングのキャリア**に興味があり、アンハッカブルをハックしたいのであれば - **私たちは採用しています!**(流暢なポーランド語の読み書きが必要です)。
{% 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'
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details>