Giới thiệu công cụ OpenSSH

Một phần của tài liệu Nghiên cứu xây dựng giải pháp phòng chống tấn công, đột nhập vào hệ thống để đảm bảo an toàn thông tin trên hệ điều hành mã nguồn mở (Trang 73)

OpenSSH là một chƣơng trình mã nguồn mở đƣợc sử dụng để mã hóa các giao dịch giữa các host với nhau bằng cách sử dụng giao thức SSH. Dự án OpenSSH đƣợc phát triển dựa trên nền tảng của dự án OpenBSD. Nó đƣợc thiết kế để sử dụng những thuật toán mã hóa mạnh để nâng cao tính an toàn và ngăn chặn sự phá hoại của các tin tặc. Mặc dù đƣợc xây dựng và phát triển trên nền tảng OpenBSD, nó cũng có khả năng tƣơng thích và có thể hoạt động trên hầu hết các hệ điều hành thuộc dòng họ Unix nhƣ Linux, HP-UX, AIX, MacOS X, Solaris…

Bộ ứng dụng OpenSSH thay thế rlogin và telnet với chƣơng trình ssh, rcp với scp (Secure Copy Program) và ftp với sftp (Secure File Transfer Program). Bao gồm cả sshd (ở phía máy chủ), ngoài ra còn có một số các tiện ích khác nhƣ ssh-add, ssh- agent, ssh-keysign, ssh-keyscan, ssh-keygen và sftp-server.

OpenSSH xuất hiện đầu tiên trong OpenBSD2.6 vào tháng 10 năm 1999. OpenSSH là một bộ giao thức SSH/SecSH miễn phí cung cấp việc mã hóa các dịch vụ mạng nhƣ đăng nhập từ xa hoặc chuyển tập tin từ xa. Dƣới đây là một số tính năng nổi bật của OpenSSH:

- OpenSSH là một dự án mã nguồn mở: Cũng nhƣ các phần mềm nguồn mở khác, OpenSSH đƣợc cung cấp hoàn toàn miễn phí cho tất cả mọi ngƣời thông qua Internet. Điều này khuyến kích cộng đồng sử dụng và kiểm soát mã nguồn, các lỗ hổng trong phần mềm sẽ đƣợc phát hiện và sửa chữa bởi tất cả mọi ngƣời.

- Cấp giấy phép miễn phí: OpenSSH tuân thủ các quy định của phần mềm nguồn mở do vậy nó có thể đƣợc sử dụng bởi bất kỳ ai với bất cứ mục đích gì, nó bao gồm vả việc sử dụng trong thƣơng mại. Một điều có thể nhận thấy rằng nếu các thiết bị định tuyến (router), các thiết bị mạng, các hệ điều hành...đều đƣợc tích hợp sẵn SSH vào đó thì các vấn đề về bảo mật và đảm bảo an toàn dữ liệu trên mạng sẽ tăng lên đáng kể.

- Khả năng mã hóa mạnh bởi việc sử dụng chuẩn mã hóa 3DES và Blowfish: Cả hai chuẩn mã hóa trên đều đƣợc cung cấp miễn phí và sử dụng rộng rãi ở nhiều nƣớc trên thế giới. 3DES cung cấp khả năng mã hóa chứng thực thời gian. Blowfish cung cấp khả năng mã hóa nhanh hơn. Cũng nhƣ những chuẩn mã hóa khác, cả hai chuẩn nêu trên đều cung cấp khả năng mã hóa dữ liệu trƣớc khi nó đƣợc đƣa vào đƣờng truyền một cách an toàn. Các thuật toán sử dụng trong OpenSSH đã đƣợc giới thiệu trong phần trên. Việc mã hóa sẽ đƣợc bắt đầu trƣớc khi thực hiện xác thực, và không có mật khẩu hay các thông tin đƣợc truyền trên mạng một cách rõ ràng. Việc mã hóa cũng đƣợc sử dụng để bảo vệ chống lại các gói tin giả mạo. - Khả năng chứng thực mạnh bởi việc sử dụng các cơ chế Public-key, OPTs (One

Time Password), Kerberos: Có tác dụng bảo vệ chống lại tính dễ tổn thƣơng trong quá tình chứng thực bởi việc khai thác và sử dụng các kỹ thuật nhƣ: IP Spoof, DNS Spoof, Fake Router... Có bốn phƣơng pháp chứng thực đƣợc OpenSSH sử dụng:

 Chỉ chứng thực Pucblic-key.

 Sự chứng thực host bởi việc sử dụng Public-key kết hợp với .rhost.  Sự chứng thực dựa trên OPTs kết hợp với s/key.

- Mã hóa giao thức X11 cho việc sử dụng X Windows: Mã hóa dữ liệu trong quá trình sử dụng X Window giữa hai host. Đƣợc sử dụng để chống lại những cuộc tấn công từ xa nhằm vào xterm nhƣ Snooping, Hjacking...

- Mã hóa cho quá trình chuyển đổi cổng (Port Forwarding): Cho phép quá trình chuyển đổi các port TCP/IP tới một hệ thống khác thông qua một kênh đƣợc mã hóa. Nó đƣợc sử dụng cho những giao thức Internet chuẩn không cung cấp khả năng mã hóa dữ liệu trên đƣờng truyền nhƣ SMTP, POP, FTP, Telnet...

- Đại diện chuyển tiếp cho những đăng nhập vào các mạng đơn: Một khóa chứng thực của ngƣời dùng có thể và thƣờng đƣợc lƣu trữ trên máy của họ, nó có thể trở thành một trạm đại diện chứng thực. Khi ngƣời sử dụng hệ thống truy cập từ một hệ thống mạng khác. Kết nối của họ sẽ đƣợc chuyển tới cho trạm đại diện chứng thực này. Nó có tác dụng cho phép ngƣời sử dụng truy cập đến hệ thống một cách an toàn từ bất kỳ hệ thống nào.

- Nén dữ liệu: Cung cấp khả năng nén dữ liệu một cách an toàn. Dữ liệu sẽ đƣợc nén trƣớc khi truyền do vậy nó cải thiện hiệu suất đáng kể đối với các mạng chậm. - Chứng thực chung cho Kerberos và Andrew File System bằng cách sử dụng

Ticket: Những ngƣời sử dụng Kerberos và AFS sẽ đƣợc cung cấp một mật khẩu chung để sử dụng và truy cập hai dịch vụ trên một thời gian nhất định.

Từ năm 1999 đến nay, OpenSSH đã nâng cấp và phát triển với nhiều phiên bản khác nhau từ phiên bản OpenSSH 3.4 (6/2002) đến phiên bản OpenSSH 5.8 (tháng 1/2011) và phiên bản mới nhất hiện tại vừa đƣợc cập nhật là OpenSSH 5.9 (tháng 9/2011). Chi tiết công cụ OpenSSH tham khảo tại http://openssh.org

3.4.1.2 Các chương trình trong OpenSSH

Nhƣ đã trình bày, OpenSSH không phải là một chƣơng trình riêng lẻ mà là tổng hợp một bộ các chƣơng trình bao gồm:

- OpenSSH Client – (ssh): ssh là một chƣơng trình quan trọng của OpenSSH sử dụng để đăng nhập vào một máy tính từ xa và thực hiện các lệnh thao tác với máy tính từ xa đó. Chƣơng trình này đƣợc thiết kế để thay thế cho các chƣơng trình thông dụng trƣớc đây nhƣ rlogin, rsh và đồng thời cung cấp các thông tin liên lạc đã đƣợc mã hóa an toàn giữa hai máy không tin cậy trên một mạng không an toàn. Kết nối X11 và các cổng TCP bất kỳ cũng có thể đƣợc chuyển tiếp qua các kênh an toàn.

- OpenSSH Daemon – (sshd): sshd là chƣơng trình daemon cho ssh. cùng với ssh các chƣơng trình này thay thế cho rlogin và rsh, và cung cấp thông tin liên lạc đƣợc mã hóa an toàn giữa hai host không tin cậy trên một mạng không an toàn. sshd lắng nghe các kết nối từ các máy client. Nó thƣờng bắt đầu khởi động từ /etc/rc. sshd chia nhỏ một daemon mới cho mỗi kết nối đến.

- Authentication agent – (ssh-agent): ssh-agent là một chƣơng trình lƣu giữ các khóa cá nhân (private key) đƣợc sử dụng để xác thực khóa công khai (RSA, DSA, ECDSA). Ý tƣởng đó là ssh-agent đƣợc khởi động khi bắt đầu một phiên X hoặc một phiên đăng nhập. Thông qua việc sử dụng các biến môi trƣờng agent có thể đƣợc đặt và tự động đƣợc sử dụng để xác thực khi đăng nhập vào các máy khác sử dụng ssh.

- Secure File Transfer Program – (sftp): sftp là chƣơng trình đƣợc sử dụng để phục vụ các yêu cầu FTP một cách an toàn.

- Secure Copy Program – (scp): scp là chƣơng trình sao chép dữ liệu giữa các máy trong cùng một mạng hoặc qua Internet, scp sử dụng ssh để truyền dữ liệu và cũng sử dụng cùng kiểu chứng thực đồng thời cung cấp cơ chế bảo mật tƣơng tự nhƣ ssh. Không giống nhƣ rcp (remote file copy), scp sẽ yêu cầu mật khẩu nếu cần thiết để xác thực.

- Authentication key generation, management and conversion – (ssh-keygen): ssh- keygen tạo, quản lý và chuyển đổi các khóa xác thực cho ssh. ssh-keygen có thể tạo ra các khóa RSA sử dụng cho giao thức SSH phiên bản 1 và DSA hoặc khóa RSA cho giao thức SSH phiên bản 2. Loại khóa đƣợc tạo ra đƣợc quy định cụ thể với tùy chọn -t. Trong trƣờng hợp không chỉ định cụ thể loại khóa nào, ssh-keygen sẽ tạo ra một khóa RSA sử dụng trong các kết nối giao thức SSH phiên bản 2. Ngoài ra ssh-keygen cũng đƣợc sử dụng để tạo ra cácc nhóm sử dụng trong trao đổi nhóm Diffie-Hellman (DH-GEX)

Ngoài các chƣơng trình cơ bản ở trên, OpenSSH còn có một số chƣơng trình, tools, plugin, addin khác nữa.

3.4.1.3 Quá trình truy cập máy tính từ xa với SSH.

Cú pháp tổng quát của chƣơng trình ssh khi kết nối với máy tính từ xa bao gồm các tùy chọn nhƣ dƣới đây:

ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-bbind_address] [-ccipher_spec] [-D [bind_address:]] [-eescape_char] [-Fconfigfile] [-Ipkcs11]

[-iidentity_file] [-L [bind_address:]] [-llogin_name] [-mmac_spec] [-Octl_cmd] [-ooption] [-pport] [-R [bind_address:]] [-Sctl_path] [-Whost:port] [-wlocal_tun[:]] [user@]hostname [command]

Các tùy chọn này cho phép ngƣời dùng sử dụng công cụ một cách hiệu quả, với những tham số phù hợp với yêu cầu của mình. Dƣới đây trình bày một số tùy chọn quan trọng, các tùy chọn khác có thể tham khảo tại http://www.openbsd.org/cgi- bin/man.cgi?query=ssh&sektion=1

-2 Bắt buộc ssh chỉ thực hiện với giao thức phiên bản 2.

-4 Bắt buộc ssh sử dụng địa chỉ Ipv4.

-6 Bắt buộc ssh sử dụng địa chỉ Ipv6.

-A Cho phép chuyển tiếp trong kết nối xác thực agent. Cũng có thể thực hiện điều này thông qua file cấu hình.

-a Hủy chuyển tiếp trong kết nối xác thực agent.

-C Yêu cầu nén cho tất cả dữ liệu, Nén dữ liệu sẽ có ích rất nhiều đối với các mạng chậm, Tuy nhiên với các mạng nhanh thì điều này là không cần thiết.

-c escape_char : Lựa chọn các thuật toán mã hóa dữ liệu cho phiên làm việc. Với SSH-2.0 các thuật toán theo thứ tự ƣu tiên nhƣ sau: aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128- cbc, aes192-cbc, aes256-cbc, arcfour, rijndael-cbc@lysator.liu.se... Nếu muốn sử dụng thuật toán mã hóa nào thì chỉ cần chỉ rõ tên thuật toán, trong trƣờng hợp mặc định thuật toán đầu tiên sẽ đƣợc chọn. giả sử muốn chọn thuật toán arcfour128 để mã hóa dữ liệu cho phiên làm việc sử dụng câu lệnh: ssh -c arcfour128 <username>@<host> và kết quả là thuật toán arcfour128 đƣợc chọn. debug1: kex: server->client arcfour128 hmac-md5 none

debug1: kex: client->server arcfour128 hmac-md5 none

-F configfile: Chỉ định một tập tin cấu hình cho mỗi ngƣời dùng. Nếu một tập tin cấu hình đƣợc đƣa ra trên dòng lênh, toàn bộ hệ thống tập tin cấu hình (mặc định /etc/ssh/ssh_config) sẽ bị bỏ qua. Mặc định cho các tập tin cấu hình cho mỗi ngƣời sử dụng là ~/.ssh/config.

-i identity_file: Lựa chọn một file định danh (private key) cho xác thực khóa công khai đọc. Mặc định cho SSH-2.0 là ~/.ssh/id_dsa, ~/.ssh/id_ecdsa và ~/.ssh/ id_rsa. Các file định danh cũng có thể đƣợc xác định trên cơ sở mỗi máy chủ trong file cấu hình.

-K Kích hoạt tính năng xác thực GSSAPI và chuyển tiếp thông tin GSSAPI tới máy chủ.

-k Vô hiệu hóa chuyển tiếp thông tin GSSAPI đến máy chủ.

-m mac_spec: Chỉ định thuật toán MAC (message authentication code) đƣợc sử dụng dùng cho SSH-2.0. Các thuật toán MAC theo thứ tự ƣu tiên bao gồm: hmac-md5, hmac-sha1, umac-64@openssh.com, hmac-ripemd160, hmac-sha1- 96, hmac-md5-96. Trong trƣờng hợp mặc định theo thứ tự ƣu tiên thuật toán hmac-md5 sẽ đƣợc chọn, nếu ngƣời dùng muốn thay đổi thuật toán MAC phải chi định rõ trong lệnh ssh sau tùy chọn -m.

-N Không cho phép thực các lệnh từ xa. Điều này là rất hữu ích chỉ cho các cổng chuyển tiếp (chỉ dùng cho SSH-2.0).

-V Hiển thị phiên bản OpenSSH đang sử dụng và kết thúc.

-v Chế độ nhiều dòng, khi thực hiện ssh sẽ hiển thị các thông báo gỡ lỗi về quá trình thực thi của nó. Điều này là rất hữu ích trong việc gỡ lỗi kết nối, xác thực, và các vấn đề cấu hình.

-X Cho phép chuyển tiếp X11.

-x Vô hiệu hóa chuyển tiếp X11.

3.4.1.4 Tạo và sử dụng khóa Public-Key/private-Key trong truy cập qua SSH.

Nhƣ đã trình bày ở trên, quá trình kết nối tới máy ở xa qua giao thức SSH đòi hỏi phải chứng thực ngƣời dùng. Các phƣơng pháp chứng thực bao gồm: Publickey, gssapi và password. Sử dụng mật khẩu để chứng thực đơn giản chỉ cần nhập mật khẩu của tài khoản ngƣời dùng trên máy chủ muốn đăng nhập, trong phần này sẽ tìm hiểu phƣơng pháp chứng thực khóa công khai (publickey).

Chứng thực khóa công khai là một kỹ thuật cơ bản nhƣng tỏ ra rất hiệu quả, mang lại sự an toàn cho hệ thống. Ƣu điểm của phƣơng pháp chứng thực này đó là nó an toàn và rất linh hoạt, không cần đòi hỏi mật khẩu đăng nhập qua đó tránh đƣợc các nguy cơ sau:

 Tấn công dò mật khẩu (bruce password scan).  bảo vệ mật khẩu root.

Tạo khóa Public Key và Private Key:

Có nhiều chƣơng trình đƣợc dùng trong việc tạo khóa Public Key và Private Key sử dụng trong xác thực khóa công khai nhƣ ssh-keygen, puttygen,...Tuy nhiên trong phần này sẽ trình bày phƣơng pháp tạo khóa thông qua chƣơng trình ssh-keygen tích hợp sẵn trong công cụ OpenSSH.

Để tạo khóa sử dụng lệnh nhƣ sau:

ssh-keygen [-bbits] -ttype [-Nnew_passphrase] [-Ccomment] [-foutput_keyfile] Các tùy chọn tạo khóa bao gồm:

-b bits: Xác định kích thƣớc của khóa đƣợc tạo ra (số lƣợng các bit của khóa đƣợc tạo). Đối với khóa RSA kích thƣớc tối thiểu là 768 bit và mặc địch là 2048 bit. Nói chung khóa RSA với chiều dài 2048 đƣợc coi là đủ an toàn. Với khóa DSA có chiều dài 1024 bit theo quy định của FIPS 186-2.

-t type: Xác định loại khóa đƣợc tạo ra. Các giá trị có thể là rsa1 đối với SSH-1, dsa, rsa đối với giao thứ SSH-2.

-C comment: Chú thích cho khóa.

-f output_keyfile: Xác định tên tập tin của file khóa sinh ra.

Trong trƣờng hợp không chỉ rõ các thông số chiều dài khóa, loại khóa tạo ra thì chƣơng trình sẽ mặc định tao ra khóa RSA có chiều dài 2048.

Sau thi thực hiện tạo khóa, sẽ tạo đƣợc hai tệp tin lƣu khóa công khai (public key) và khóa bí mật (private key), khóa công khai có tên giống nhƣ khóa bí mật nhƣng có thêm phần mở rộng .pub. Ví dụ trong trƣờng hợp tạo khóa RSA mặc định sẽ tạo ra file id_rsa chứa khóa bí mật và file id_rsa.pub chứa khóa công khai. Tƣơng tự id_dsa chứa khóa bí mật DSA, id_dsa.pub chứa khóa công khai DSA. Khóa mặc định sẽ đƣợc lƣu trong thƣ mục ~/.ssh/

Dƣới đây minh họa tạo khóa RSA với chiều dài 2048 bit, khóa đƣợc lƣu vào file key_rsa_2048.

Hình 3.34: Tạo khóa với ssh-keygen

Kết quả tạo khóa thu đƣợc :

Khóa công khai (Public Key) lƣu trong file: key_rsa_2048.pub

Khóa bí mật (Private Key) lƣu trong file: key_rsa_2048

Hình 3.36: Nội dung khóa bí mật trong file key_rsa_2048

Ngoài tính năng chính là tạo cặp khóa cho xác thực khóa công khai, chƣơng trình ssh-keygen còn cung cấp nhiều tính năng khác nữa nhƣ thay đổi mật khẩu passphrase cho file khóa, thay đổi chú thích trong file chứa khóa, xem thông tin fingerprint của file khóa, và nhiều chức năng khác. Tham khảo tại: http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-keygen&sektion=1.

Thiết lập xác thực thông qua publickey:

Sau khi tạo đƣợc cặp khóa Public Key và Private Key, phải đảm bảo giữ bí mật khóa Private-Key. Khóa Private-Key đƣợc lƣu giữ tại máy SSH client. Khóa Public-Key đƣợc chuyển lên SSH Server muốn kết nối.

Để SSH thực hiện xác thực thông qua Publickey cần phải cấu hình một vài thông số trong file cấu hình của SSH server nhƣ sau:

- PasswordAuthentication no : Không cho phép xác thực thông qua mật khẩu. - RSAAuthentication yes: Cho phép chứng thực sử dụng khóa RSA.

- PubkeyAuthentication yes: Cho phép xác thực thông qua khóa công khai.

- AuthorizedKeysFile %h/.ssh/authorized_keys: Chỉ định tên tập tin chứa khóa xác thực.

Tên file chứa khóa Public-Key lƣu trữ trên SSH Server có tên mặc định authorized_keys và đƣợc lƣu trữ trong thƣ mục ~/.ssh/. Tuy nhiên, Chúng ta cũng có thể thay đổi tên file này sao cho thích hợp. Khi đó, file chứa khóa Public-Key trên SSH Server phải đổi tên sao cho trùng với tên file quy định trong file cấu hình. Để cập nhật các thay đổi trong file cấu hình cần khởi động lại dịch vụ SSH thông qua lệnh

Một phần của tài liệu Nghiên cứu xây dựng giải pháp phòng chống tấn công, đột nhập vào hệ thống để đảm bảo an toàn thông tin trên hệ điều hành mã nguồn mở (Trang 73)

Tải bản đầy đủ (PDF)

(103 trang)