SSH - Secure Shell

Khái niệm

Là một giao thức mạng cho phép kết nối an toàn tới máy tính qua mạng không an toàn. Giao thức này rất cần thiết để duy trì tính bảo mật và toàn vẹn

Default port: 22

22/tcp open ssh syn-ack

SSH servers:

  • openSSH – OpenBSD SSH, shipped in BSD, Linux distributions and Windows since Windows 10

  • Dropbear – SSH implementation for environments with low memory and processor resources, shipped in OpenWrt

  • PuTTY – SSH implementation for Windows, the client is commonly used but the use of the server is rarer

  • CopSSH – implementation of OpenSSH for Windows

SSH libraries (implementing server-side):

  • libssh – multiplatform C library implementing the SSHv2 protocol with bindings in Python, Perl and R; it’s used by KDE for sftp and by GitHub for the git SSH infrastructure

  • wolfSSH – SSHv2 server library written in ANSI C and targeted for embedded, RTOS, and resource-constrained environments

  • Apache MINA SSHD – Apache SSHD java library is based on Apache MINA

  • paramiko – Python SSHv2 protocol library

Cách thức làm việc:

SSH hoạt động qua ba bước chính:

1. **Định danh host**: Xác định định danh của hệ thống tham gia phiên SSH thông qua việc trao đổi khoá. Mỗi máy tính có khoá định danh gồm khoá riêng và khoá công cộng. Máy chủ gửi khoá công cộng cho máy khách, và máy khách sử dụng khoá công cộng để mã hoá khoá phiên ngẫu nhiên trước khi gửi lại cho máy chủ.

2. **Mã hoá**: Sau khi thiết lập phiên làm việc bảo mật, dữ liệu được trao đổi một cách mã hoá để bảo vệ thông tin. Máy khách thường quyết định cơ chế mã hoá, với các phương pháp phổ biến như 3DES, IDEA, Arcfour và Blowfish. Việc trao đổi khoá mã hoá cũng được thực hiện một cách bảo mật.

3. **Chứng thực**: Bước cuối cùng này xác thực người dùng có quyền truy cập hệ thống. Có nhiều phương thức chứng thực, bao gồm mật khẩu, rhosts, và chứng thực bằng cặp khoá RSA thông qua ssh-keygen và ssh-agent.

Ưu điểm của SSH:

1. **Mã hóa dữ liệu**: SSH mã hóa thông tin, bảo vệ thông tin người dùng và mật khẩu khỏi những kẻ tấn công khi truyền qua mạng.

2. **Bảo mật giao thức**: SSH bảo vệ khỏi các cuộc tấn công như IP source routing, giả mạo DNS, nghe lén dữ liệu, giả mạo địa chỉ IP, và thao túng dữ liệu trên routers.

3. **Thiết lập giao thức khác**: SSH có thể tạo các giao thức truyền dữ liệu khác như FTP, giúp cho việc quản lý và truyền tải dữ liệu an toàn hơn.

4. **Quản lý từ xa hiệu quả**: Cho phép quản trị viên IT truy cập và quản lý server từ xa một cách an toàn.

Nhược điểm của SSH:

1. **Quản lý key kém**: Nếu không quản lý các SSH keys đúng cách, có thể dẫn đến việc mất kiểm soát quyền truy cập, đặc biệt là khi có nhiều nhân viên hoặc hệ thống tự động hóa sử dụng SSH.

2. **Lưu trữ key không an toàn**: Các key được lưu trữ trên client có thể bị lạm dụng nếu không được quản lý chặt chẽ. Chúng có thể tích tụ theo thời gian, dẫn đến rủi ro bảo mật.

3. **Mối đe dọa từ lỗ hổng bên ngoài**: Một số lỗ hổng bảo mật bên ngoài như Shellshock có thể được thực thi qua SSH, dù bản thân SSH không bị lỗi.

4. **Rủi ro từ scripting sai lầm**: Việc kết hợp các lệnh SSH trong script mà không cẩn thận có thể dẫn đến lộ thông tin xác thực cho những kẻ tấn công.

Một số kiểu tấn công:

Brute force usernames, passwords and private keys

Username Enumeration

Trong một số phiên bản OpenSSH có thể thực hiện timing attack để liệt kê user

msf> use scanner/ssh/ssh_enumusers

Some common ssh credentials here and here and below.

Private Key Brute Force

Known badkeys can be found here: https://github.com/rapid7/ssh-badkeys/tree/master/authorized

Weak SSH keys / Debian predictable PRNG: Một số hệ thống có lỗi đã biết trong hạt giống ngẫu nhiên dùng để tạo ra khóa mật mã. Điều này có thể dẫn đến không gian khóa giảm đáng kể có thể bị tấn công bằng cách dùng bruteforce. Các bộ khóa được tạo trước trên các hệ thống Debian bị ảnh hưởng bởi PRNG yếu có sẵn tại đây: g0tmi1k/debian-ssh .

Kerberos

crackmapexec sử dụng giao thức ssh có thể sử dụng option --kerberos để authenticate via kerberos.

SSH-MitM

Nếu attacker ở cùng local network với nạn nhân kết nối với SSH server sử dụng username và password, hắn có thể thực hiện MitM attack để đánh cắp thông tin đăng nhập đó:

Attack path:

  • Chuyển hướng lưu lượng truy cập: Attacker chuyển hướng lưu lượng truy cập của nạn nhân đến máy của họ, thực sự chặn được nỗ lực kết nối đến SSH server.

  • Chặn và ghi nhật ký: Máy của attacker hoat động như một proxy, capturing thông tin đăng nhập của người dùng bằng cách giả mạo là SSH server.

  • Thực thi và chuyển tiếp lệnh: Cuối cùng, máy chủ của attacker sẽ ghi lại thông tin đăng nhập của người dùng, chuyển tiếp các câu lệnh đến máy chủ SSH thực, thực thi chúng và gửi kết quả trở về cho người dùng, khiến quá trình này có vẻ liên mạch và hợp pháp.

In order to capture perform the actual MitM you could use techniques like ARP spoofing, DNS spoofing or others described in the Network Spoofing attacks.

SSH-Snake

Duyệt qua mạng lưới bằng cahs sử dụng SSH private key được phát hiện trên hệ thống, sử dụng từng private key trên mỗi hệ thống cho các máy chủ mới sử dụng SSH-Snake.

SSH-Snake thực hiện các tác vu sau một cách tự động và đệ quy:

  • Trên hệ thống hiện tại, tìm bất kỳ SSH private key nào

  • Trên hệ thống hiện tại, tìm bất kỳ hosts or destinations (user@host) mà private key tìm được có thể được chấp nhận

  • Cố gắng SSH vào tất cả các destination bằng cách sử dụng tất cả các khóa riêng đã phát hiện

  • Nếu kết nối thành công đến đích, lặp lại các bước #1 - #4 trên hệ thống được kết nối.

Nó hoàn toàn self-replicating and self-propagating -- and completely fileless.

Config Misconfigurations

Root login

SSH servers thường cho phép người dùng root đăng nhập theo mặc định. Disabling root login là bước quan trọng để bảo mật máy chủ, giảm thiểu truy cập trái phép bằng đặc quyền quản trị và tấn công brute force

To Disable Root Login in OpenSSH:

  • Edit the SSH config file with: sudoedit /etc/ssh/sshd_config

  • Change the setting from #PermitRootLogin yes to PermitRootLogin no.

  • Reload the configuration using: sudo systemctl daemon-reload

  • Restart the SSH server to apply changes: sudo systemctl restart sshd

SFTP Brute Force

SFTP command execution

Một số thiết lập SFTP, khi mà administrators có ý định cho người dùng trao đổi tệp mà không bật quyền remote shell access. Mặc dù thiết lập người dùng với non-interactive shells (e.g., /usr/bin/nologin) và giới hạn họ trong một thư mục cụ thể, Users có thể lách các hạn chế này bằng cahcs thực hiện lệnh (like /bin/bash) ngay sau khi đăng nhập, trước khi non-interactive shell được chỉ định. Điều nay cho phép thực hiện lệnh trái phép, làm suy yếu các biện pháp bảo mật đã định.

Here is an example of secure SFTP configuration (/etc/ssh/sshd_config – openSSH) for the user noraj:

Match User noraj
       ChrootDirectory %h
       ForceCommand internal-sftp
       AllowTcpForwarding no
       PermitTunnel no
       X11Forwarding no

       PermitTTY no

Cấu hình này chỉ cho phép SFTP: vô hiệu hóa quyền truy cập shell bằng cách buộc lệnh start and vô hiệu hóa quyền truy cập TTY nhưng cung vô hiệu hóa mọi loại port forwarding or tunneling.

SFTP Tunneling

Nếu bạn có quyền truy cập vào máy chủ SFTP, bạn cũng có thể chuyển hướng lưu lượng truy cập của mình qua máy chủ này, ví dụ như sử dụng port forwarding:

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

SFTP có lệnh "symlink". Do đó, nếu có quyền ghi trong một số thư mục, có thể tạo symlinks cho các thư mục/tệp khác Vì bạn có thể bị mắc kẹt bên trong chroot nên việc này không thực sự hữu ích, nhưng nếu bạn có thể symlink từ no-chroot service (for example, if you can access the symlink from the web), you could open the symlinked files through the web.

For example, to create a symlink from a new file "froot" to "/":

sftp> symlink / froot

If you can access the file "froot" via web, you will be able to list the root ("/") folder of the system.

Authentication methods

Thường thì các phương pháp xác thực mạnh được bật mà không tắt các phương pháp xác thực yếu hơn. Một trường hợp thường gặp là bật publickey trên cấu hình openSSH và đặt nó làm phương thức mặc định nhưng không tắt password. Vì vậy bằng cách sử dụng verbose mode của SSH client attacker có thể thấy rằng một phương pahs yếu hơn được bật:

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

Nếu giới hạn lỗi xác thực được đặt và bạn không bao giờ có cơ hội tiếp cận phương pháp passowrd, bạn có thể sử dụng tùy chọn PreferredAuthentications để buộc sử dụng phương pháp này.

ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password

Xem lại cấu hình máy chủ SSH để kiểm tra xem chỉ những phương thức mong đợi mới được phép. Sử dụng verbose mode on the client

Config files

ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

https://book.hacktricks.xyz/network-services-pentesting/pentesting-ssh

https://vietnix.vn/ssh-la-gi/

Detection:

Brute Force:

https://www.elastic.co/guide/en/security/7.17/potential-ssh-brute-force-detected.html

Last updated