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 1Vũ Xuân Huy Trần Nhật Trường
Trang 2Mụ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 31.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 4CRC 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 5Hì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 6DANH 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 7LỜ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 8CHƯƠ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 91.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 11bộ 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 13Hì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 14cá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 161.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 171.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 19rằ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 20Key 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 21Hì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 22Hì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 23Biế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 24Trong 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 25Bả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 26nó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 27cho 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 28Hì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