SSH - Secure Shell
Last updated
Last updated
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:
– OpenBSD SSH, shipped in BSD, Linux distributions and Windows since Windows 10
– SSH implementation for environments with low memory and processor resources, shipped in OpenWrt
– SSH implementation for Windows, the client is commonly used but the use of the server is rarer
– implementation of OpenSSH for Windows
SSH libraries (implementing server-side):
– multiplatform C library implementing the SSHv2 protocol with bindings in, and; it’s used by KDE for sftp and by GitHub for the git SSH infrastructure
– SSHv2 server library written in ANSI C and targeted for embedded, RTOS, and resource-constrained environments
– Apache SSHD java library is based on Apache MINA
– Python SSHv2 protocol library
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.
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.
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.
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
crackmapexec sử dụng giao thức ssh có thể sử dụng option --kerberos để authenticate via kerberos.
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.
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.
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
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:
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.
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.
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:
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.
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
Detection:
Brute Force:
Some common ssh credentials and and below.
Known badkeys can be found here:
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: .
In order to capture perform the actual MitM you could use techniques like ARP spoofing, DNS spoofing or others described in the.
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.