1. Trang chủ
  2. » Công Nghệ Thông Tin

TÌM HIỂU VÀ CẤU HÌNH DỊCH VỤ SSH TRÊN LINUX

57 1,1K 27

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 532,05 KB

Nội dung

Ngày nay rất nhiều người dùng có nhiều tài khoản máy tính. Và nhu cầu kết nối giữa chúng cũng gia tăng. Ví dụ như bạn muốn sao chép một file giữa hai máy thông qua mạng, đăng nhập vào một tài khoản ở xa từ một máy khác, hoặc truyền dòng lệnh đến một máy tính ở xa để thực hiện. có nhiều chương trình khác nhau đã tồn tại để phục vụ cho những mục đích đó như FTP và RCP để truyền file, TELNET và RLOGIN để đăng nhập từ xa, và RSH để thực hiện lệnh từ xa.

Trang 1

Vũ Xuân Huy Trần Nhật Trường

Trang 2

Mục Lục

KÝ TỰ VIẾT TẮT 4

DANH MỤC HÌNH ẢNH 5

DANH MỤC BẢNG 6

LỜI MỞ ĐẦU 7

CHƯƠNG I: TÌM HIỂU SSH 8

1.1 Giới thiệu SSH 8

1.2 Lịch sử phát triển 9

1.3 Các đặc điểm của SSH 10

1.3.1 Tính bí mật (Privacy) 10

1.3.2 Tính toàn vẹn (Integrity) 11

1.3.3 Chứng minh xác thực (Authentication) 11

1.3.4 Cấp giấy phép 12

1.3.5 Chuyển tiếp (Forwarding) hoặc tạo đường hầm (tunneling) 12

1.3.5.1 Local port forwarding 14

1.3.5.2 Remote port forwarding 16

1.3.5.3 Dynamic port forwarding 17

1.3.6 Một hệ thống SSH 18

1.4 Hai phiên bản SSH 20

1.4.1 SSH-1 20

1.4.1.1 Thiết lập kênh kết nối an toàn 21

1.4.1.2 Xác thực client 22

1.4.1.3 Kiểm tra tính toàn vẹn 25

1.4.1.4 Nén dữ liệu 25

1.4.2 SSH-2 26

1.4.2.1 Giao thức khác biệt (SSH-1 với SSH-2) 28

1.4.2.2 Thực hiện khác biệt 31

Trang 3

1.4.2.3 Sự ngẫu nhiên 32

1.5 Thuật toán sử dụng trong SSH 33

1.5.1 Những thuật toán khoá công khai 33

1.5.2 Những thuật toán khoá bí mật 34

1.5.3 Những hàm băm 35

1.6 Các loại tấn công mà SSH có thể ngăn cản 36

CHƯƠNG II: CÀI ĐẶT SSH 39

2.1 Cài đặt SSH Server và SSH Client 39

2.2 Tạo và cài đặt cặp key – khoá công khai / bí mật 39

2.2.1 Tạo cặp key 40

2.2.2 Cài đặt khoá công khai 41

2.3 Sử dụng 41

2.3.1 Đăng nhập từ xa (Remote login) 41

2.3.2 Copy không cần mật khẩu (Password) 41

2.3.3 Thực hiện lệnh từ xa 41

KẾT LUẬN 43

TÀI LIỆU THAM KHẢO 44

PHỤ LỤC 45

Trang 4

CRC Cyclic Redundancy Check

DES Data Encryption Standard : tiêu chuẩn mã hóa dữ liệu

DNS Domain Name System: hệ thông tên miền

DSA Digital Signature Algorithm: giải thuật ký số

DSS Decision Support System

ECDSA Elliptic Curve Digital Signature Algorithm : Giải thuật chữ ký số

trên đường cong elliptic

IETF Internet Engineering Task Force

IMAP Internet Message Access Protocol :Giao thức truy nhập Thông báo

Internet

MD5 Message-Digest algorithm 5

MITM Man-in-the-middle attack: tấn công xen giữa

NIS Network Information Service: Dịch vụ thông tin Mạng

NIST National Institute of Standards and Technology: Viện tiêu chuẩn

và Công nghệ Quốc gia

NNTP Network News Transfer Protocol: Giao thức chuyển tin trong

mạng máy tính

NSA National Security Agency: Cơ quan An ninh Quốc gia Hoa

Kỳ/Cục An ninh Trung ương

RIPEMD Integrity Primitives Evaluation Message Digest

RSADSI RSA Data Security: Bảo mật dữ liệu RSA

SSH/

SFTP SSH File Transfer Protoco: Giao thức truyền tệp tin.

DANH MỤC HÌNH ẢN

Trang 5

Hình 1 Xác thực, mã hóa và toàn vẹn 8

Hình 2 SSH Forwarding 13

Hình 3 SSH Tunneling 14

Hình 4 Local Port Forwarding 14

Hình 5 Remote port forwarding 16

Hình 6 VD cấu hình Firefox 17

Hình 7 Cấu trúc của một hệ thống SSH 18

Hình 8 Cấu trúc SSH-1 20

Hình 9 Thiết lập kết nối an toàn 21

Hình 10 Cấu trúc SSH-2 27

Hình 11 Tổng thể giao thức SSH-2 28

Hình 12 Hoạt động của SSH tại tầng SSH Transport Layer Protocol 29

Hình 13 Hoạt động của SSH tại tầng SSH User Authentication 30

Hình 14 Hoạt động của scp 33

Hình 15 Chỉnh sửa file /etc/ssh/sshd_config 39

Trang 6

DANH MỤC BẢNG

Bảng 1 Các loại khóa thành phần 19

Bảng 2 Hỗ trợ xác thực Kerberos trong SSH 24

Bảng 3 So sánh giao thức SSH-2 và SSH-1 31

Bảng 4 Sự khác nhau về lưu trữ file random 32

Trang 7

LỜI MỞ ĐẦU

Ngày nay rất nhiều người dùng có nhiều tài khoản máy tính Và nhu cầu kết nốigiữa chúng cũng gia tăng Ví dụ như bạn muốn sao chép một file giữa hai máy thôngqua mạng, đăng nhập vào một tài khoản ở xa từ một máy khác, hoặc truyền dòng lệnhđến một máy tính ở xa để thực hiện có nhiều chương trình khác nhau đã tồn tại đểphục vụ cho những mục đích đó như FTP và RCP để truyền file, TELNET và RLOGIN

để đăng nhập từ xa, và RSH để thực hiện lệnh từ xa

Trên rất nhiều hệ thống, chương trình ứng dụng “telnet” còn được dùng trongnhững phiên giao dịch tương tác TCP ở dạng sơ đẳng (interactive raw – TCP sessions),

và còn được dùng để thông nối với những dịch vụ trên các máy chủ POP3, mà khôngcần đến những trình khách chuyên dụng Tuy nhiên, tồn tại một vấn đề là nếu bạntruyền một file nhạy cảm thông qua Internet, có khả năng một kẻ xấu có thể chặn lại vàđọc dữ liệu Thậm chí, nếu bạn đăng nhập vào một máy tính từ xa khác bằng việc sửdụng một chương trình như telnet username và password của bạn có thể bị lộ khi chúngđược truyền trên mạng Có một cách giải quyết kinh tế và hiệu quả đó là, sử dụng giaothức SSH

Bản báo cáo nhóm thực hiện trình bày SSH là gì? Và nội dung của bạn báo cáo

sẽ giúp bạn hiểu tại sao giao thức này lại có thể giải quyết được vấn đề đã nêu ở trên

Cấu trúc báo cáo gồm hai chương:

- Chương 1: Giới thiệu về giao thức SSH, sẽ giúp bạn biết giao thức SSH là

gì?

- Chương 2: Trình bày cách cấu hình, cài đặt để sử dụng giao thức này.

Để đảm bảo đưa ra cái nhìn tổng quan và dễ hiểu nhất về giao thức SSH, nêncòn những kiến thức khác, chuyên sâu hơn về giao thức SSH mà bản báo cáo chưa nêu

ra được Và do thời gian cũng như những hạn chế mà báo cáo không tránh khỏi thiếusót, mong thầy cô và các bạn đóng góp và thông cảm

Cuối cùng, nhóm hy vọng bản báo cáo sẽ là tài liệu hữu ích giúp bạn có thể hiểuhơn về một giao thức mạng an toàn

Trang 8

CHƯƠNG I: TÌM HIỂU SSH1.1 Giới thiệu SSH

SSH (Secure Shell) là một giao thức mạng dùng để thiết lập kết nối mạng một cách bảo mật SSH hoạt động ở lớp ứng dụng trong mô hình phân lớp TCP/IP Các công cụ sử dụng SSH (như là OpenSSH, …) cung cấp cho người dùng cách thức để thiết lập kết nối mạng được mã hoá để tạo một kênh kết nối bí mật.

SSH là một chương trình tương tác giữa servers và clients có sử dụng cơ chế mãhoá Mỗi khi dữ liệu được gửi bởi một máy tính vào mạng, SSH tự động mã hoá nó Khi dữ liệu được nhận vào, SSH tự động giải mã nó Kết quả là việc mã hoá được thực hiện trong suốt: người dùng có thể làm việc bình thường, không biết rằng việc truyền thông của họ đã được mã hoá an toàn trên mạng SSH được phát minh bởi một công ty

tư nhân SSH chủ yếu sử dụng trên HĐH Unix/ Linux hơn là các server nền tảng Windows

Giao thức SSH bao gồm:xác thực, mã hóa và toàn vẹn dữ liệu truyền trên mạng,như hình bên dưới

Hình 1 Xác thực, mã hóa và toàn vẹn

Trang 9

1.2 Lịch sử phát triển

SSH1 và giao thức SSH-1 được trình bày năm 1995 bởi Tatu Ylõnen, một nhà nghiên cứu ở trường đại học kĩ thuật Helsinki của Phần Lan Sau khi mạng trường đại học của ông ta là nạn nhân của một cuộc tấn công đánh cắp password vào đầu năm đó Tháng 7 năm 1995, SSH1 được phát hành rộng rãi dưới dạng một phần mềm miễn phí

có source code, cho phép mọi người sao chép và sử dụng mà không thu phí Vào cuối năm đó, ước tính có khoảng 20.000 người dùng trên 50 quốc gia đã sử dụng SSH1, và mỗi ngày Ylõnen nhận 150 mail yêu cầu hỗ trợ Để đáp lại, Ylõnen đã thành lập SSH Communications Security (SCS, http://www.ssh.com) vào tháng 12 năm 1995 để duy trì, thương nghiệp hoá và tiếp tục phát triển SSH Cũng trong năm 1995, Ylõnen soạn thảo giao thức SSH-1 còn gọi là Internet Engineering Task Force (IETF), nó diễn tả hoạt động cơ bản của phần mềm SSH1 trên thực tế Nó là một giao thức có phần quảngcáo nhưng còn một số lỗi và giới hạn nhưng rất phổ biến Năm 1996, SCS giới thiệu một phiên bản mới đó là phiên bản chính của giao thức, SSH 2.0 hay SSH-2, phiên bảnnày được kết hợp chặt chẽ những thu 1ật toán mới và không hợp với SSH-1 Trong lúc đó, IETF thành lập một nhóm làm việc gọi là SECSH (Secure Shell) để chuẩn hoá giao thức và chỉ đạo sự phát triển của nó trên lợi ích chung Nhóm làm việc SECSH đã trình bày bản phác thảo Internet đầu tiên đối với giao thức SSH-2 vào tháng 2 năm

1997 Năm 1998, SCS phát hành sản phẩm phần mềm “SSH Secure Shell” (SSH2), dựa trên giao thức SSH-2 Tuy nhiên, SSH2 không thay thế SSH1 trong một số lĩnh vực, có 2 lí do Thứ nhất, SSH2 không có một số tiện ích, các đặc điểm có ích và cấu hình tuỳ chọn như SSH1 Thứ hai, SSH2 có nhiều giới hạn về việc đăng kí Bản chính SSH1 đã có sẵn miễn phí từ Ylõnen và trường đại học kĩ thuật Helsinki Phiên bản mớihơn của SSH1 từ SCS vẫn có sẵn miễn phí cho hầu hết người dùng, thậm chí cả cấu hình thương mại cũng miễn phí chỉ cần phần mềm đó không được trực tiếp bán cho việc thu lợi nhuận hoặc được tặng như là một dịch vụ cho khách hàng Vì thế, tuy SSH2 đã xuất hiện, nhưng hầu hết những người đang sử dụng SSH1 đều nhận ra vài ưuđiểm của SSH1 so với SSH2 và tiếp tục sử dụng SSH1, ba năm sau khi SSH2 ra đời thìSSH1 vẫn là phiên bản được sử dụng phổ biến trên Internet và vượt qua cả SSH2 là giao thức tốt hơn và bảo mật hơn Tuy nhiên, SSH2 cũng có hai sự phát triển hưa hẹn,

đó là một bản nới lỏng của SSH2 bản quyền và sự xuất hiện SSH-2 bổ sung Năm

2000, SCS mở rộng SSH2 bản quyền để cho phép sử dụng khi làm việc riêng lẻ đối vớicác tổ chức hoạt động phi lợi nhuận Nó cũng được mở rộng cho phép dùng miễn phí

Trang 10

đối với Linux, NetBSD, FreeBSD và hệ điều hành OpenBSD Cùng thời gian đó, OpenSSH (http://www.openssh.com) đã được phát triển nổi bật như là một SSH bổ sung, được phát triển dưới hoạt động của dự án OpenBSD (http://www.openbsd.org)

và miễn phí sẵn bên dưới OpenBSD có đăng kí OpenSH hỗ trợ cả SSH-1 và SSH-2 trong một chương trình Tuy OpenSSH được phát triển trên nền OpenBSD nhưng nó cũng hoạt động được trên Linux, Solais, AIX và những hệ điều hành khác Mặc dù OpenSSH tương đối mới và không có vài đặc điểm có trong SSH1 và SSH2 nhưng nó đang trên đà phát triển nhanh chóng và hứa hẹn trở thành bản SSH chính thức

1.3 Các đặc điểm của SSH

Các đặc điểm chính của giao thức SSH là:

- Tính bí mật (Privacy) : dữ liệu được mã hóa, chỉ hiển thị với người dùng địnhdanh, còn lại sẽ là khó hiểu

- Tính toàn vẹn (Integrity) : đảm bảo dữ liệu không bị biến đổi, nếu một bên thức ba chụp và sửa đổi dữ liệu của bạn trong quá trình chuyển thì SSH sẽ phát hiện thực tế này

- Chứng minh xác thực (Authentication) nghĩa là bằng chứng để nhận dạng bêngửi và bên nhận Nếu bạn cố gắng đăng nhập vào một tài khoản trên một máy tính từ

xa, SSH yêu cầu bằng chứng kỹ thuật số nhận dạng bạn Nếu vượt qua tất cả các bài kiểm tra, bạn có thể đăng nhập, nếu không bác bỏ yêu cầu

- Giấy phép (Authorization) :dùng để điều khiển truy cập đến tài khoản

- Chuyển tiếp (Forwarding) hoặc tạo đường hầm (Tunneling) để mã hoá những

phiên khác dựa trên giao thức TCP/IP

Trang 11

bộ nhưng nó vẫn còn một vấn đề nghiêm trọng đó là mật khẩu dễ bị những kẻ xấu đánhcắp.

SSH cung cấp tính bí mật bằng việc mã hoá dữ liệu đi qua mạng Đó là việc mã hoá hai đầu dựa trên khoá ngẫu nhiên (sinh ra để phục vụ cho một phiên kết nối và được huỷ đi khi phiên kết nối thành công) SSH hỗ trợ nhiều thuật toán mã hoá đối với phiên dữ liệu, đó là những thuật toán mã hoá chuẩn như: AES, ARCFOUR, Blowfish, Twofish, IDEA, DES và triple-DES (3DES)

1.3.2 Tính toàn vẹn (Integrity)

Tính toàn vẹn nghĩa là bảo đảm dữ liệu được truyền từ một đầu này đến đầu kia của mạng không bị thay đổi Giao thức SSH sử dụng phương pháp kiểm tra toàn vẹn mật mã, phương pháp này kiểm tra cả việc dữ liệu có bị biến đổi và dữ liệu đến có đúng là do đầu kia gửi hay không Nó sử dụng thuật toán băm khoá là MD5 và SHA-1

1.3.3 Chứng minh xác thực (Authentication)

Chứng minh xác thực là kiểm tra định danh của ai đó để xác định chính xác đúng là người đó hay không Mỗi kết nối SSH bao gồm hai việc xác thực: client kiểm tra định danh của SSH server (server authentication) và server kiểm tra định danh của người sử dụng yêu cầu truy cập (user authentication) Server authentication chắc chắn rằng SSH server là chính xác và không phải là kẻ lừa đảo để đề phòng kẻ tấn công lại gửi kết nối mạng đến một máy khác Server authentication cũng bảo vệ việc bị kẻ xấu ngồi ở giữa hai bên, lừa gạt cả hai bên, nghĩa là kẻ xấu sẽ nói với server nó là client và nói với client nó là server để đọc được dữ liệu trao đổi giữa hai bên User

authentication theo truyền thống là làm việc với mật khẩu Để xác thực định danh của bạn, bạn phải đưa ra mật khẩu, và nó dễ bị lấy cắp Thêm nữa, để dễ nhớ một mật khẩu,người ta thường đặt nó ngắn và có ý nghĩa nào đó nên dễ bị kẻ xấu đoán ra Đối với mật khẩu dài hơn thì người ta thường chọn những từ hoặc câu trong ngôn ngữ bẩm sinhnên cũng dễ bị bẻ khoá

SSH hỗ trợ xác thực bằng mật khẩu, mã hoá mật khẩu khi nó truyền đi trên mạng Đây là sự cải thiện rất lớn so với những giao thức truy cập từ xa thông thường khác (Telnet, FTP) mà chúng gửi mật khẩu qua mạng dưới dạng clear text Tuy nhiên, việc chứng thực như thế vẫn chỉ là chứng thực mật khẩu đơn giản, vì thế SSH cung cấp

cơ chế mạnh hơn và dễ sử dụng hơn: mỗi user có nhiều chữ kí khoá công khai user public-key signature) và một cải tiến rlogin-style xác thực với định danh host đượckiểm tra bằng khoá công khai Hơn nữa, những bản bổ sung khác nhau của SSH hỗ trợ

Trang 12

(per-vài hệ thống khác bao gồm Kerberos, RSA, mật khẩu S/Key one-time và PAM Một SSH client và SSH server đàm phán với nhau để xác định cơ chế xác thực sẽ sử dụng dựa trên cấu hình của chúng và một server thậm chí có thể yêu cầu nhiều kiểu xác thực.

Có hai phương pháp xác thực chủ yếu:

 Dựa trên khóa công khai

 Dựa trên mật khẩu

1.3.4 Cấp giấy phép

Việc cấp giấy phép có tác dụng quyết định ai đó có thể hoặc không thể làm gì

đó Nó diễn ra sau khi xác thực, bởi vì bạn không thể chấp nhận một ai đó có quyền gì khi chưa biết đó là ai SSH server có nhiều cách khác nhau để giới hạn hành động của client Truy cập đến phiên đăng nhập tác động lẫn nhau như TCP port và X Window forwarding, key agent forwarding, … có thể tất cả đều được điều khiển mặc dù không phải tất các đặc điểm đều có sẵn trên tất cả các bản bổ sung SSH,và chúng không luôn luôn tống quát hoặc linh hoạt như bạn ý muốn Giấy phép có thể được điều khiển tại một mức server rộng (ví dụ: /etc/ssh/sshd_config file đối với OpenSSH) hoặc theo tài

khoản phụ thuộc vào phương thức xác thực sử dụng

1.3.5 Chuyển tiếp (Forwarding) hoặc tạo đường hầm (tunneling)

Chuyển tiếp hoặc tạo đường hầm là tóm lược dịch vụ dựa trên TCP khác như là Telnet hoặc IMAP trong một phiên SSH mang lại hiệu quả bảo mật của SSH đến với các dịch vụ dựa trên TCP khác Ví dụ, một kết nối Telnet bình thường truyền

username, password của bạn và phiên đăng nhập của bạn ở dạng clear text Bằng cách chuyển tiếp telnet thông qua SSH, tất cả dữ liệu sẽ tự động được mã hoá và kiểm tra định danh và bạn có thể xác nhận dùng SSH tin cậy

Trang 13

Hình 2 SSH Forwarding

TCP port forwarding:

SSH dùng TCP/IP làm cơ chế truyền, thường dùng port 22 trên máy server khi

nó mã hoá và giải mã lưu lượng đi trên mạng Ở đây chúng ta nói đến một đặc điểm mãhoá và giải mã lưu lựơng TCP/IP thuộc về ứng dụng khác, trên cổng TCP khác dùng SSH Tiến trình này gọi là port forwarding, nó có tính trong suốt cao và khá mạnh Telnet, SMTP, NNTP, IMAP và những giao thức không an toàn khác chạy TCP có thể được bảo đảm bằng việc chuyển tiếp kết nối thông qua SSH Port forwarding đôi khi được gọi là tunneling bởi vì kết nối SSH cung cấp một “đường hầm” xuyên qua để kết nối TCP khác có thể đi qua

Giả sử bạn có một máy H ở nhà đang chạy IMAP và bạn muốn kết nối đến một IMAP server trên máy S để đọc và gửi mail Bình thường thì việc kết nối này không đảm bảo an toàn, tài khoản và mật khẩu mail của bạn được truyền đi dưới dạng clear text giữa chương trình mail của bạn và server Đối với SSH port forwarding, bạn có thểđịnh tuyến lại trong suốt kết nối IMAP ( tìm cổng TCP 143 trên server S) để truyền đi thông qua SSH, mã hoá bảo đảm dữ liệu truyền đi trên kết nối Máy IMAP server phải chạy một SSH server cho port forwarding để cung cấp việc bảo đảm đó Tuy nhiên, SSH port forwarding chỉ hoạt động trên giao thức TCP và không làm việc được trên

Trang 14

các giao thức khác như UDP hay AppleTalk forwarding là một hệ thống window phổ biến đối với các trạm làm việc Unix, một trong những đặc điểm tốt nhất của nó là tính trong suốt Sử dụng X bạn có thể chạy ứng dụng X từ xa để mở các cửa sổ của chúng trên màn hình hiển thị cục bộ của bạn và Agent forwarding SSH client có thể làm việc với một SSH agent trên cùng một máy Sử dụng một đặc trưng gọi là agent forwarding,client cũng có thể liên lạc với các agent trên những máy từ xa Điều thuận lợi là nó cho phép client trên nhiều máy làm việc với một agent và có thể tránh vấn đề liên quan đến tường lửa.

Hình 3 SSH Tunneling

SSH Port Forwarding

Có 3 loại SSH port forwarding là:

 Local port forwarding: là dạng kết nối từ phía SSH client được chuyển tiếp qua SSH server, rồi đi đến host/server đích

 Remote port forwarding: kết nối từ phía SSH server được chuyển tiếp qua SSH client, rồi đi đến host/server đích

 Dynamic port forwarding: tương tự “local port forwarding”, kết nối từ

phía SSH client được chuyển tiếp qua SSH server, rồi đến đích tuỳ ý không định trước.

1.3.5.1 Local port forwarding

Hình 4 Local Port Forwarding

Mở kết nối ssh tới ssh server với tuỳ chọn “-l port:host:hostport” trong đó

Trang 15

port là cổng ở phía ssh client được chỉ định để mở socket.

host:hostport là socket đích muốn tới (nhìn từ phía ssh server).

Chúng ta sẽ làm rõ hơn vấn đề thông qua ví dụ giả định:

 Desktop của bạn A (phía ssh client) có IP 192.168.1.101

 Server trung gian B (phía ssh server) có IP 172.16.0.111

 Đích muốn đến là web server X, có IP 1.1.1.1, có mở cổng 22/SSH và chỉ chấp nhận kết nối từ Server B

Thay cho việc phải SSH từ A lên B, rồi tiếp tục SSH lên đích là server X, chúng

ta có thể mở một “cánh cửa thần kỳ” là một socket ở phía A để lên X như sau:

Trên thực tế, một trường hợp rất thường xuyên áp dụng “local port forwarding”

đó là Mysql tunnelling Ví dụ từ Desktop A, bạn có thể ssh lên Server B, trên B chạyMysql ở cổng 3306 và chỉ chấp nhận kết nối từ local Vậy một cách đơn giản, để kếtnối Mysql trên B từ A, đó là dùng port forwarding

ssh -L 3307:localhost:3306 username@172.168.0.111

Sau khi có kết nối ssh, tiếp theo là dùng lệnh mysql trên A để kết nối đến dịch

vụ Mysql trên server B

mysql -h 127.0.0.1 -P 3307 -uroot -p

Giả sử bạn đồng thời muốn mở socket trên A để các máy khác trong cùng mạngLAN có thể kết nối được đến Mysql trên B Chỉ cần thêm tuỳ “-g” trong lệnh ssh, nhưsau:

ssh -L 3307:localhost:3306 -g username@172.168.0.111

Bây giờ trên máy A2 trong mạng LAN, có IP 192.168.1.102, bạn kết nối đếnMysql trên B thông qua A như sau:

ssh -h 192.168.1.101 -P 3307 -uroot –p

Trang 16

1.3.5.2 Remote port forwarding

Hình 5 Remote port forwarding

Mở kết nối SSH tới SSH server với tuỳ chọn “-r port:host:hostport” trong đó

port là cổng ở phía SSH server được chỉ định để mở socket.

host:hostport là socket đích muốn tới (nhìn từ phía SSH client).

Về mặt logic “remote port forwarding” hoàn toàn tương tự với “local portforwarding” chỉ thay việc kết nối đi từ SSH client bằng đi từ phía SSH server, thôngqua SSH client để đến server/host đích

Trên thực tế “remote port forwarding” ít được dùng hơn “local port forwarding”cũng như “dynamic port forwarding”, một trong những trường hợp ứng dụng của

“remote port forwarding” là “SSH ngược”

 Server B2 cùng dải mạng với ssh server B có IP 172.16.0.112

Mục đích: cho phép B ssh ngược về A Có thể mở rộng thêm bằng việc chophép B2 ssh ngược về A thông qua B

Thực hiện điều này đơn giản bằng các mở một kết nối ssh từ A lên B với tuỳchọn “-R”, như sau:

ssh -R 2222:localhost:22 username@172.16.0.111

Ở trên B, chúng ta có thể thấy một socket được mở ở cổng 2222

[root@B:~]# netstat -lntp | grep 2222

tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 29375/10

Thông qua socket này, từ B chúng ta có thể ssh ngược về A, như sau:

Trang 17

1.3.5.3 Dynamic port forwarding

Mở kết nối ssh tới ssh server với tuỳ chọn “-D port” với port ở đây là cổng ở

phía ssh client được bật lên như socket của SOCKS server Thông qua SOCKS nàychúng ta có thể đi tới bất kỳ đâu mà ở phía ứng dụng đích đó chỉ biết chúng ta đi ra từserver B, chứ không hề biết thực sự kết nối được khởi tạo từ A

ssh -D 2222 username@172.16.0.111

Sau khi tạo xong kết nối, chúng ta có thể sử dụng SOCKS này để ra Internet antoàn, ví dụ có thể cấu hình vào Firefox như hình bên dưới

Hình 6 VD cấu hình Firefox

Trang 18

Để kiểm tra việc cấu hình và SOCKS có hoạt động đúng, chúng ta có thể đi tới địa chỉ http://www.google.vn để kiểm tra IP ra Internet.

1.3.6 Một hệ thống SSH

Hình 7 Cấu trúc của một hệ thống SSH

SSH có khoảng một bộ 12 thuộc tính riêng lẻ, các thành phần tác động lẫn nhau cho ra các nét đặc trưng riêng Ở đây chúng ta qui định một bản tóm tắt tổng quan của tất cả các thành phần:

Key

Một lượng dữ liệu tương đối nhỏ, thông thường từ mười đến một hoặc hai ngàn bit Tính hữu ích của việc sử dụng thuật toán ràng buộc khoá hoạt động trong vài cách

để giữ khoá: trong mã hoá, nó chắc chắn rằng chỉ người nào đó giữ khoá (hoặc một ai

có liên quan) có thể giải mã thông điệp, trong xác thực, nó cho phép bạn kiểm tra trễ

Trang 19

rằng người giữ khoá thực sự đã kí hiệu vào thông điệp Có hai loại khóa: khoá đối xứng hoặc khoá bí mật và khoá bất đối xứng hoặc khóa công khai Một khoá bất đối xứng hoặc khoá công khai có hai phần: thành phần công khai và thàn phần bí mật SSH

đề cập đến 4 kiểu của khoá như phần tóm tắt trong bảng và diễn tả dưới đây

Name Lifetime Created by Type Purpose

c Identify a user to the serverSession

key

One session

Client (and server)

Secret

Protect communications

Host key Persistent Administrator Publi

c Identify a server/machineServer ke One hour Server Publi

c

Encrypt the session key (SSH1 only)

Bảng 1 Các loại khóa thành phần User key

Là một thực thể tồn tại lâu dài, là khoá bất đối xứng sử dụng bởi client như một

sự chứng minh nhận dạng của user ( một người dùng đơn lẻ có thể có nhiều khoá)

Host key

Là một thực thể tồn tại lâu dài, là khoá bất đối xứng sử dụng bới server như sự chứng minh nhận dạng của nó, cũng như được dùng bởi client khi chứng minh nhận dạng host của nó như một phần xác thực đáng tin Nếu một bộ máy chạy một SSH server đơn, host key cũng là cái duy nhất để nhận dạng bộ máy đó Nếu bộ máy chạy nhiều SSH server, mỗi cái có thể có một host key khác nhau hoặc có thể dùng chung Chúng thường bị lộn với server key

Server key

Tồn tại tạm thời, là khoá bất đối xứng dùng trong giao thức SSH-1 Nó đựợc tái tạo bởi server theo chu kỳ thường xuyên ( mặc định là mỗi giờ) và bảo vệ session key Thường bị lộn với host key Khoá này thì không bao giờ được lưu trên đĩa và thành phần bí mật của nó không bao giờ được truyền qua kết nối ở bất cứ dạng nào, nó cung cấp “perfect forward secrecy” cho phiên SSH-1

Trang 20

Key generator

Một chương trình tạo ra những loại khoá lâu dài ( user key và host key) cho SSH SSH1, SSH2 và OpenSSH có chương trình ssh-keygen

Known hosts database

Là một chồng host key Client và server dựa vào cơ sở dữ liệu này để xác thực lẫn nhau

Agent

Một chương trình lưu user key trong bộ nhớ Agent trả lời cho yêu cầu đối với khoá quan hệ hoạt động như là kí hiệu một giấy xác thực nhưng nó không tự phơi bày khoá của chúng Nó là một đặc điểm rất có ích SSH1, SSH2 và OpenSSH có agent ssh-agent và chương trình ssh-add để xếp vào và lấy ra khoá được lưu

agent và thậm chí vài bản không có bộ sinh khoá

1.4 Hai phiên bản SSH

1.4.1 SSH-1

Trang 21

Hình 8 Cấu trúc SSH-1

1.4.1.1 Thiết lập kênh kết nối an toàn

Trước khi tương tác có ý nghĩa xảy ra, SSH server và SSH client phải thiết lậpmột kết nối an toàn Điều này cho phép họ: chia sẻ khóa, mật khẩu và dữ liệu với nhau

Thông tin bên dưới sẽ giải thích làm thế nào mà SSH-1 đảm bảo an toàn củamột kết nói mạng Thông qua quá trình : bắt đầu từ SSH server và client đồng ý thuậttoán mã hóa rồi tạo ra và chia sẻ một khóa phiên bí mật, thành lập một kết nối an toàn

B1: client giao tiếp với server

B2: client và server tiết lộ phiên bản giao thức SSH hỗ trợ

B3: cả hai chuyển sang giao thức dựa trên gói

B4: server xác định mình với client và cung cấp các thông số phiên

B5: client gửi tới server một khóa (phiên) bí mật

B6: cả hai bên bật mã hóa và hoàn thiện xác thực server

B6: kết nối an toàn được thiết lập

Bây giờ thì client và server có thể truyền những tin nhắn đã được mã hóa

Trang 22

Hình 9 Thiết lập kết nối an toàn

1.4.1.2 Xác thực client

Khi kết nối an toàn được thiết lập, client cố xác thực chính nó tới server Cácclient có thể thử bất lỳ phương pháp xác thực nào cho tới thành công hoặc thất bại với

ví dụ năm phương pháp xác thực được định nghĩa bởi giao thức SSH-1,5:

- Kerberos (không phải là tính năng mặc định, nhưng có thể yêu cầu trong thờigian biên dịch)

- Rhosts

- RhostsRSA

- Khóa công khai

- Mật khẩu (mật khẩu đăng nhập của host, Kerberos, SecurID, S/Key, v.v.).F-secure SSHclient với Windows thử theo thứ tự:

- Khóa công khai.

- Mật khẩu.

Trang 23

Biết thứ tự với máy client của bạn giúp chẩn đoán các vấn đề khi thẩm định thấtbại hoặc hành vi bất ngờ.

a Mật khẩu xác thực

Đây là hình thức xác thực đơn giản nhất Người dùng chỉ định tên người dùng(trên các hệ thống Unix/Linux tên người dùng được lưu tại /etc/passwd) và tương ứngvới một mật khẩu Xác thực như vậy cho phép người sử dụng chỉ có một tập hợp cácthông tin cần thiết để xác thực

Trong thành phần Client SSH/SFTP xác thực khóa công khai được hỗ trợ thôngqua thuộc tính UserName và PassWord

Được thông báo về kết quả xác thực

Một khi server được xác thực bởi khách hàng (hoặc xác thực thất bại), sự kiệnnày được phát sinh bởi các thành phần client SSH/SFTP Nếu xác thực thành công, sựkiện OnAuthenticationSuccess được phát sinh, nếu không thì sự kiệnOnAuthenticationFailure được phát sinh

Xác thực của server

Chúng ta xem xét cách mà client có thể sử dụng để chứng thực mình khi kết nốivới server Bất kỳ điều gì về server , client không nên biết server nào đã kể nối

Không giống như SSL, giao thức SSH thường không hoạt động với bất cứ điều

gì giống như sử dụng được giấy chứng nhận X.509 (mặc dù một số SSH server hỗ trợ

xác thực X.509, chứng chỉ được sử dụng như một container cho các khóa) Điều duy

nhất server có là một cặp khóa Các server sẽ gửi khóa khóa công khai cho các phầnmềm client và client quyết định nếu nó tin cậy khóa Quá trình xác nhận được thựchiện bằng cách sử dụng sự kiện OnKeyValidate của các thành phần SSH / SFTP clientcủa SecureBlackbox Các client có thể hiển thị hàm băm của khóa của người dùng,hoặc kiểm tra các cơ sở dữ liệu quan trọng hoặc thực hiện một số hành động khác đểquyết định nếu khoá là hợp lệ

b Xác thực khóa công khai

Phương pháp xác thực khóa công khai là phương pháp mà cả client và serverđều cần phải thực hiện Phương pháp này yêu cầu từng client cần để có một cặp khóacông khai (cặp khóa được tạo ra bằng cách sử dụng thuật toán mã hóa bất đối xứngRSA hoặc DSA) Đầu tiên, các client gửi một khóa công khai đến các server Nếu cácserver tìm thấy trong danh sách khóa cho phép, client sẽ mã hóa gói dữ liệu sử dụngkhóa bí mật rồi gửi gói tin kèm khóa công khai đến cho server

Trang 24

Trong thành phần SSH/ SFTP client xác thực khóa công khai được thực hiệnbằng cách sử dụng class TElSSHMemoryKeyStorage Class này dùng để lưu trữ cáckhóa (đại diện là class TElSSHKey) Ứng dụng này nên đặt một khóa ( trong đó có cảphần khóa công khai và khóa bí mật ) cho lưu giữ hoặc đính kèm KeyStorage đểElSSHClient hay thành phần SSH / SFTP khác đi qua thuộc tính KeyStorage của thànhphần này.

c Xác thực máy chủ tin cậy

Xác thực bằng mật khẩu hoặc khóa công khai yêu cầu khách hàng chứng minhdanh tính của mình bằng việc biết mật khẩu hoặc khóa bí mật riêng biệt cho các tàikhoản đích trên server Đặc biệt, vị trí của client – những máy đang hoạt động- khôngliên quan đến việc chứng thực

Các thực host tin cậy khác với hai hình thức trên Thay vì bạn phải chứng minhdanh tính của mình để server tin cậy, xác thực host tin cậy thiết lập mối liên hệ giữacác máy Nếu bạn đang đănh nhập như người dùng A trên host A, kết nối đến tài khoản

B trên host B bằng SSH thì SSH server trên host B không kiểm tra định danh của bạn

mà chỉ kiểm tra độ tin cậy của host A, để chắc chắn rằng host A là một host tin cậy Nótiếp tục kiểm tra các kết nối đến từ một chương trình đáng tin cậy trên A, một cài đặtbởi người quản trị hệ thống sẽ không nói dối về định danh của người dùng A Nếu vượtqua hai bài kiểm tra này, server xác thực bạn như người dùng A và thực hiện một ủyquyền kiểm tra rằng A@A được truy cập vào tài khoản B@B

Quá trình diễn ra theo từng bước dưới đây:

B1: SSH client yêu cầu một kết nối từ SSH server

B2: SSH server sử dụng dịch vụ đặt tên cục bộ của mình để tìm kiếm một tênmáy chủ cho các địa chỉ nguồn của kết nối mạng lưới client

B3: SSH server tham khảo quy tắc ủy quyền trong một số file cục bộ, cho thấyhost cụ thể có tin cậy hay không Nếu phù hợp thì quá trình tiếp tục, nếu không nó bịlỗi

B4: các server xác nhận rằng các chương trình từ xa là đáng tin cậy bởi thựchiện theo quy ước Unix cũ của công đặc quyền

B5: nếu mội việc suôn sẻ, xác thực thành công

d Xác thực Kerberos

SSH1 và OpenSSH hỗ trợ xác thực dựa trên Kerberos còn SSH2 thì không

Trang 25

Bảng 2 Hỗ trợ xác thực Kerberos trong SSH

Trong bảng trên:

Tickets: biểu diễn chuẩn của xác thực Kerberos Client có một ticket cho

dịch vụ “host” (v5) hoặc “rcmd” (v4) trên server và gửi cho SSH server như một chứng minh định danh; server xác nhận theo mẫu chuẩn

Password Authentication: một phần của xác thực máy chủ sử dụng

Ketberos Thay vì kiểm tra mật khẩu bằng cách sử dụng cơ sở dữ liệu tài khoản của hệ điều hành, thay vì cố gắng có được các thông tin Kerberos ban đầu cho người dùng đích (một ticket hoặc một TGT) SSH server còn có các server lưu trữ TGT cho phiên làm việc để người dùng có quyền truy cập vào nó

Forwarding: chứng chỉ Kerberos thường chỉ có thể sử dụng khi được ban

hành Các giao thức Kerberos-5 cho phép người dùng chuyển tiếp thông tin giữa các máy với nhau, khi đã được chứng thực, tránh lặp lại không cần thiết

e Mật khẩu dùng một lần

Xác thực này thuận tiện bởi dễ dàng sử dụng ở bất kỳ nơi nào Nếu bạn thườngxuyên di chuyển và sử dụng máy tính của nhiều người thì việc sử dụng mật khẩu sẽthuận tiện hơn Nhưng trong trường hợp, bạn muốn đảm bảo an toàn, tránh các hoạtđộng tấn công ăn cắp như theo dõi màn hình, chụp bàn phím… thì việc sử dụng mậtkhẩu một lần hay hệ thống OTP (one-time password) là lựa chọn hoàn toàn đúng đắn.Sau đây là một số thuộc tính của hệ thống OTP:

- Một danh sách các khóa đã được in sẵn hoặc tính toán khóa tiếp theo vớilaptop hoặc PDA của bạn

- Một small hardware token (credit –card hay key-fob size )với màn hình LCD,hiển thị mật khẩu ngẫu nhiên

- Hệ thống hỏi đáp thách thức

1.4.1.3 Kiểm tra tính toàn vẹn

Giao thức SSH-1 sử dụng kiểm tra tính toàn vẹn yếu: kiểm tra dư thừa chu kỳ32b hoặc CRC-32 Điều này chỉ đủ để phát hiện nhưng thay đổi ngẫu nhiên với dữ liệu

mà không ngăn chặn được Trong thực tế, việc tấn công chèn (insertion attack – được

Trang 26

nói tới trong phần 1.7 ) đặc biệt lợi dụng điểm yếu này của SSH-1 Việc sử dụng cáckiểm tra toàn vẹn CRC-32 là một điểm yếu cố hữu nghiêm trọng trong SSH-1 để giúpnhắc nhở trong phát triển SSH-2 sử dụng mã hóa mạnh kiểm tra tính toàn vẹn.

1.4.1.4 Nén dữ liệu

Giao thức SSH-1 hỗ trợ nén dữ liệu cả phiên sử dụng thuật toán “deflate ” của GNU Các byte dữ liệu gói được nén riêng rẽ, trong mỗi luồng mà không liên quan đếnranh giới gói

Không chỉ cần thiết trong mạng LAN hay liên kết WAN nhanh, nén dữ liệu có thể cải thiện tốc độ trên các liên kết chậm, như luông modem analog Nó đặc biệt có lợicho chuyển file, forwarding X Ngoài ra, nén dữ liệu trước khi mã hóa sẽ làm gỉam độ trễ Điều này đặc biệt hiệu quả với 3DES, vốn khá chậm

SSH-1 cũng tương tự như SSH-2 nhưng có một số điểm khác, chúng ta sẽ so sánh những đặc điểm đó với SSH-2 để hình dung SSH-1:

 non-modular: 1 được định nghĩa như một giao thức nguyên đơn, còn

SSH-2 được thiết kế modul hoá

 less negotiation: SSH-1 có nhiều tham số cố định, thực ra, chỉ có kích thước mã hoá là được thương lượng Thuật toán nhận dạng, kiểu khoá host, phương thức trao đổi khoá,…tất cả đều cố định

 ad hoc naming: SSH-1 không có cú pháp định nghĩa tên linh hoạt như SSH-2 vàkhông có phần mở rộng bổ sung rõ ràng

 Single authentication: Quá trình xác thực user của SSH-1 chỉ cho phép một phương thức hoạt động thành công, Server không thể yêu cầu nhiều phương thức

 RhostsRSA authentication: Xác thực RhostsRSA của SSH-1 tương tự như xác thực dựa trên host về cơ bản là có giới hạn khi sử dụng địa chỉ mạng làm định danh máy client

 Less flexible remote forwarding: SSH-1 chỉ rõ chuyển tiếp từ xa chỉ trên một cổng, vì thế không thể đưa nhiều địa chỉ khác nhau đến một server

 weaker integrity checking: SSH-1 sử dụng phương thức kiểm tra toàn vẹn khôngmạnh lắm, đó là thuật toán CRC-32

 server keys: Tiến trình trao đổi khoá cố định của SSH-1 giao cho một khoá bất đối xứng gọi là server key, server key là một cặp khoá public/private tạm thời, sau một giờ lại được phục hồi và sử dụng để cung cấp tính kín đáo chuyển tiếp

Trang 27

cho khoá phiên Kín đáo chuyển tiếp nghĩa là thậm chí việc bảo mật thời gian dài như khoá bí mật host hoặc user được thoả hiệp trễ, không dùng mã hoá phiên SSH trong các bước trước đó, sử dụng một khoá này thì nó không bao giờđược ghi lên đĩa Thuật toán Diffe-Hellman dùng trong tất cả quá trình trao đổi khoá của SSH-2 cung cấp tính bí mật chuyển tiếp bởi chính nó vì thế không cần server key.

 weak key exchange: Tiến trình trao đổi khoá SSH-1 bảo mật không cao vì chỉ

một mình client chọn khoá phiên và gửi đến server

vụ mà chúng cung cấp và chúng phải phù hợp nhưng cho phép nhiều cơ chế có thể làm việc, cũng như là một cach để dễ dàng thêm vào một cơ chế mới Tất cả những tham sốchủ yếu của kết nối SSH đều có thể được thương lượng, bao gồm những thuật toán và phương thức sử dụng trong:

 Trao đổi khoá phiên

Trang 28

Hình 10 Cấu trúc SSH-2

1.4.2.1 Giao thức khác biệt (SSH-1 với SSH-2)

SSH-1 là giao thức nguyên khối, bao gồm nhiều chức năng trong một giao thức

Giao thức SSH-2 được chia làm 3 bộ phận chính và được diễn tả như 3 giao thức riêng

rẽ trong nhiều tài liệu IETF khác nhau:

Giao thức lớp vận chuyển SSH-TRANS

Giao thức xác thực user SSH-AUTH

Giao thức kết nối SSH-CONN

Ngày đăng: 28/02/2016, 14:57

TỪ KHÓA LIÊN QUAN

w