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

25 KiB
Raw Blame History

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

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!

HackTricksをサポートする他の方法:

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

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

Or use ssh-keybrute.py (native python3, lightweight and has legacy algorithms enabled): 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 を実行してください。

デフォルトの資格情報

Vendor Usernames Passwords
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スプーフィング、または Network Spoofing attacks で説明されている他の技術を使用できます。

SSH-Snake

システムで発見されたSSHプライベートキーを使用してネットワークを横断し、各システムで各プライベートキーを新しいホストに使用したい場合は、SSH-Snake が必要です。

SSH-Snakeは以下のタスクを自動的かつ再帰的に実行します:

  1. 現在のシステムでSSHプライベートキーを見つける,
  2. 現在のシステムでプライベートキーが受け入れられる可能性のあるホストや宛先user@hostを見つける,
  3. 発見されたすべてのプライベートキーを使用して、すべての宛先にSSHで接続を試みる,
  4. 宛先に成功して接続した場合、接続されたシステムでステップ #1 - #4 を繰り返す.

それは完全に自己複製および自己伝播であり、完全にファイルレスです。

設定の誤設定

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コマンド実行

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

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

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'

AWSハッキングをゼロからヒーローまで学ぶ htARTE (HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法: