MỤC LỤC
CHƯƠNG 1: LÝ THUYẾT AN TOÀN MẠNG 3
1.1.Các rủi ro đối với một hệ thống mạng 4
1.2.Các bước tấn công vào một hệ thống mạng 5
1.2.1.Tiến trình thu thập thông tin: 5
1.2.2.Tiến trình truy cập ban đầu 6
1.2.3.Leo thang phân quyền 6
1.2.4.Tiến trình che đậy dấu vết: 6
1.3.Các nguy cơ bị tấn công khi sử dụng TELNET 6
CHƯƠNG 2: GIỚI THIỆU SSH 8
2.1.Giao thức SSH là gì? 9
2.2.Lịch sử phát triển các phiên bản SSH 9
CHƯƠNG 3: BÊN TRONG GIAO THỨC SSH 10
3.1.Tổng quan về các đặc điểm của SSH 11
3.1.1. Tính bí mật (Privacy) 11
3.1.2.Tính toàn vẹn (Integrity) 11
3.1.3.Chứng minh xác thực (authentication) 11
3.1.4.Việc cấp giấy phép 12
3.1.5.Chuyển tiếp (forwarding) hoặc tạo đường hầm (tunneling) 13
3.2.Kiến trúc chung của một hệ thống SSH 14
3.3.Bên trong SSH-2 : 17
3.3.1.Tóm tăt cơ chế hoạt động của SSH-2 18
3.3.2.Giao thức lớp vận chuyển SSH (SSH-TRANS) 19
3.3.3.Giao thức chứng thực SSH (SSH_AUTH) 24
3.3.4.Giao thức kết nối SSH-CONN 26
3.4.Bên trong SSH-1 27
3.5.Giới thiệu các thuật toán sử dụng trong SSH 28
3.5.1.Những thuật toán khoá công khai 28
3.5.2.Những thuật toán khoá bí mật 30
3.5.3.Những hàm băm 31
3.6.Các mối đe doạ mà SSH có thể đánh trả 32
3.6.1.Eavesdropping 32
3.6.2.Dịch vụ đặt tên và giả mạo IP 32
3.6.3.Chiếm đoạt kết nối 33
3.6.4.Các kiểu tấn công Man-in-the-Middle 33
3.7. Các mối đe doạ mà SSH không thể ngăn cản 35
3.7.1. Phá mật khẩu 35
3.7.2. IP và các kiểu tấn công TCP 36
3.7.3. Phân tích đường truyền 37
3.7.4. Convert Channels (kênh biến đổi) 37
3.7.5. Sự cẩu thả 38
CHƯƠNG 4: CẤU HÌNH SSH TRÊN CISCO ROUTER 39
KẾT LUẬN 41
42 trang |
Chia sẻ: netpro | Lượt xem: 3084 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đề tài Ngiên cứu mã hóa bảo mật Open SSH, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
nó cho phép bạn kiểm tra trễ 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 3-1 và diễn tả dưới đây.
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
Session key
Là một giá trị phát sinh ngẫu nhiên, là khoá đối xứng cho việc mã hoá truyền thông giữa một SSH client và SSH server. Nó được chia ra làm 2 thành phần cho client và server trong một loại bảo bật trong suốt quá trình thiết lập kết nối SSH để kẻ xấu không phát hiện được nó.
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
A program that caches user keys in memory, so users needn't keep retyping their passphrases. The agent responds to requests for key-related operations, such as signing an authenticator, but it doesn't disclose the keys themselves. It is a convenience feature. SSH1, SSH2, and OpenSSH have the agent ssh-agent, and the program ssh-add loads and unloads the key cache.
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.
Signer
Một chương trình kí hiệu gói chứng thực hostbased.
Random seed
A pool of random data used by SSH components to initialize software pseudo-random number generators.
Một dãy dữ liệu ngẫu nhiên đựoc dùng bởi các thành phần SSH để khởi chạy phần mềm sinh số ngẫu nhiên
Configuration file
Một chồng thiết lập để biến đổi hành vi của một SSH client hoặc SSH server. Không phải tất cả thành phần đều được đòi hỏi trong một bản bổ sung của SSH. Dĩ nhiên những server, client và khoá là bắt buộc nhưng nhiều bản bổ sung không có agent và thậm chí vài bản không có bộ sinh khoá.
3.3.Bên trong SSH-2 :
Giao thức SSH-2 được chia làm 4 bộ phận chính, được diễn tả như 4 giao thức riêng rẽ trong nhiều tài liệu IETF khác nhau. Theo thông thường, chúng được sắp xếp cùng với nhau để cung cấp thiết lập các dịch vụ mà hầu hết người dùng kết hợp chúng thành một SSH-2 đầy đủ.
-Giao thức lớp vận chuyển SSH (SSH-TRANS)
-Giao thức xác thực SSH (SSH-AUTH)
-Giao thức kết nối SSH (SSH-CONN)
-Giao thức truyền file SSH (SSH-SFTP)
Hình 3-2 phác thảo việc phân chia công việc giữa các giao thức, và chúng quan hệ với nhau như thế nào, những chương trình ứng dụng và mạng. Những chữ nghiêng là phần mở rộng giao thức.
SSH-2 đươc thiết kế để mở rộng và modul hoá. Tất cả các giao thức lõi định nghĩa miêu tả các dịch 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
§Xác thực server
§Bảo toàn và bí mật dữ liệu
§Xác thực người dùng
§Nén dữ liệu
Client và server thương lượng việc sử dụng một thiết lập phổ biến, cho phép thao tác rộng giữa các phần bổ sung khác nhau. Trong hầu hết các loại, giao thức định nghĩa ít nhất một phương thức để đẩy mạnh thao tác giữa các phần xa hơn. Nên nhớ rằng điều này chỉ có nghĩa một việc tuân theo được thực hiện đòi hỏi hỗ trợ phương thức trong đoạn mã của nó ; bất cứ một phương thức ngoại lệ nào cũng có thể bị tăt bởi người quản trị trong một điều kiện đặc biệt nào đó. Vì thế, trên thực tế việc chứng thực khoá công khai đòi được hỏi bởi SSH-AUTH không có nghĩa là nó luôn luôn có sẵn cho client từ bất cứ máy nào chạy SSH server, nó chỉ có nghĩa là nó phải có sẵn và có thể được bật lên nếu cần.
3.3.1.Tóm tăt cơ chế hoạt động của SSH-2
Một phiên làm việc của SSH-2 trải qua 4 bước chủ yếu như sau:
+ Thiết lập kết nối ban đầu (SSH-TRANS) + Tiến hành xác thực lẫn nhau (SSH-AUTH) + Mở phiên kết nối để thực hiện các dịch vụ (SSH-CONN) + Chạy các dịch vụ ứng dụng SSH ( có thể là SSH-SFTP)
SSH-TRANS là khối xây dựng cơ bản cung cấp kết nối ban đầu, ghi chép giao thức, xác thực server, mã hoá cơ bản và các dịch vụ bảo toàn. Sau khi thiết lập một kết nối SSH-TRANS, client có một kết nối đơn, đảm bảo, luồng truyền byte full-duplex đến một xác nhận tương đương.
Kế đến, client có thể dùng SSH-AUTH thông qua kết nối SSH-TRANS đến xác thực của chính nó với server. SSH-AUTH định nghĩa một cái khung đối với việc nhiều cơ chế xác thực có thể được sử dụng, sữa chữa mọi thứ như là định dạng và những yêu cầu khác của xác thực,những điều kiện để thành công hoặc có thể bị lỗi và làm thế nào client học được những phương thức có sẵn. Có thể là một phương thức bất kỳ nào đó được thi hành, và giao thức cho phép trao đổi tuỳ ý một phần của bất kỳ cơ chế riêng nào để phần mở rộng giao thức dễ định nghĩa để kết hợp chặt chẽ với bất cứ phương thức xác thức mong muốn nào trong tương lai. SSH-AUTH chỉ yêu cầu một phương thức: khoá công cộng với thuật toán DSS. Xa hơn nữa, nó định nghĩa hai phương thức: mật khẩu và dựa trên host. Một số phương thức đã được định nghĩa trong nhiều bản thảo Internet khác nhau và vài bản đã được chấp nhận rộng rãi.
Sau khi xác thực, SSH client yêu cầu giao thức SSH-CONN để cung cấp một sự đa dạng của các dịch vụ thông qua một kênh đơn cung cấp bởi SSH-TRANS. Điều này bao gồm mọi thứ cần để hỗ trợ nhiều phiên tương tác và phiên không tương tác: những luồng đa thành phần khác nhau (hoặc channel) ngang qua kết nối bên dưới, quản lý X, TCP và agent forwarding, truyền tín hiệu thông qua kết nối, nén dữ liệu và thực thi chương trình từ xa.
Cuối cùng, một ứng dụng có thể sử dụng SSH-SFTP qua một kênh SSH-CONN để cung cấp truyền file và các chức năng thao tác hệ thống tập tin từ xa.
3.3.2.Giao thức lớp vận chuyển SSH (SSH-TRANS)
3.3.2.1.Tiến trình tạo kết nối
Để minh hoạ, chúng ta lấy một ví dụ một Client SSH chạy trên một máy Macintosh sẽ đọc cấu hình file của nó và sau đó tạo một kết nối TCP đến phía bên đầu xa ( ví dụ đến host.foo.net) như sau:
$ ssh -vv host.foo.net
OpenSSH_3.6.1p1+CAN-2003-0693, SSH protocols 1.5/2.0,
OpenSSL 0x0090702fdebug1: Reading configuration data
/Users/res/.ssh/config
debug1: Applying options for com
debug1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to host.foo.net [10.1.1.1] port 22.
debug1: Connection established.
3.3.2.2.Tiến trình chọn lựa phiên bản giao thức
Càng sớm càng tốt khi server chấp nhận kết nối, giao thức SSH bắt đầu. Server thông báo phiên bản giao thức của nó bằng một chuỗi văn bản:Debug1: Remote protocol version 2.0, remote software version 4.1.0.34 SSH Secure Shell
Bạn có thể thấy chuỗi này trong kết nối đơn giản của bạn đến server như telnet:
$ telnet host.foo.net 22
Trying 10.1.1.1...
Connected to host.foo.net
Escape character is '^]'.
SSH-2.0-4.1.0.34 SSH Secure Shell
^]
telnet> quit
Connection closed.
Định dạng của thông báo là: SSH--
Trong trường hợp này, server dùng giao thức SSH-2 và phần mềm 4.1.0.34 của SSH từ công ty bảo mật truyền thông (SSH Communication Security). Mặc dù trường chú thích có thể bao gồm mọi thứ nhưng SSH server thường chỉ đưa vào đó tên và phiên bản sản phẩm. Điều này rất có ích để client thường nhận biết chính xác server dùng sản phẩm và phiên bản gì để làm việc cho đúng và tránh lỗi hoặc không tương thích với nhau.Phiên bản giao thức số “1.99” có ý nghĩa đặc biêt: nó hỗ trợ cả hai giao thức SSH-1 và SSH-2.Tiếp theo, OpenSH phân tích lời chú thích:
debug1: no match: 4.1.0.34 SSH Secure Shell
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.6.1p1+CAN-2003-0693
nhưng không tìm thấy một cái hợp với danh sách của nó thì nó biết là có vấn đề. Nó chọn SSH-2 (chỉ chọn trong ví dụ này) và gửi chuỗi phiên bản của nó đến server giống như cách mà server đã gửi. Nếu client và server đồng ý phiên bản của chúng đã tương thích thì tiến trình kết nối tiếp tục, nếu không thì cả hai có thể kết thúc kết nối.
3.3.2.3.Tiến trình thương lượng tham số
Đã thiết lập kết nối và đồng ý trên một phiên bản, nhiệm vụ đầu tiên của SSH-TRANS là chuẩn bị các thuộc tính bảo mật cơ bản của SSH:
oTính bí mật (privacy)
oTính toàn vẹn (integrity)
oXác thực server
oNén dữ liệu
Nhưng đầu tiên, hai bên phải đồng ý các thông số phiên, bao gồm các phương thức để đạt được các thuộc tính. Tiến trình diễn ra trong gian đoạn này gọi là tiến trình trao đổi khoá.
Debug1: SSH2_MSG_KEXINIT sent
Debug1: SSH2_MSG_KEXINIT receive
Client gửi thông báo KEXINIT (khởi tạo tao đổi khoá) của nó và nhận một cái tữ server. Ở đây có sự chọn lựa nó đưa cho server:
debug2: kex_parse_kexinit: gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==, gss-group1-sha1-A/vxljAEU54gt9a48EiANQ==, diffie-hellman-group-exchange-sha1, diffie-hellman-group1-sha1
Thuật toán trao đổi khoá mà client hỗ trợ là:
diffie-hellman-group1-sha1
Thuật toán này được định nghĩa và yêu cầu bởi SSH-TRANS, chỉ rõ cho biết là dùng thủ tục Diffie-Hellman để thoả thuận khoá cùng với những tham số cụ thể khác (Oakley Group 2 và thuật toán băm SHA-1)
diffie-hellman-group-exchange-sha1
Tương tự, nhưng cho phép client chọn từ một danh sách các nhóm tham số, địa chỉ liên quan về những khả năng có thể bị tấn công dựa trên một nhóm được bố trí trước, định nghĩa trong tài liệu phác thảo IETF “secsh-dh-group-exchange”
gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==
gss-group1-sha1-A/vxljAEU54gt9a48EiANQ==
Những các tên trông kỳ quặc là được mã hóa Base64 - chúng hiển thị hai giá trị khác nhau của xác thực Kerberos, trao đổi Diffe-Hellman. Một cơ sở hạ tầng Kerberos có sẵn cung cấp xác thực server tự động và linh hoạt mà không cần xác nhận SSH host key và file known-host riêng. Xác thực Kerberos được cung cấp bởi GSSAPI và những tên phía sau là mã hóa Base64 của hàm băm MD5.
Trong điều kiện tóm tắt của thỏa thuận, một thuật toán trao đổi khoá SSH có hai đầu ra :
oMột share secret, K
oMột “exchange hash”, H
K là tham số bí mật chính đối với phiên: SSH-TRANS định nghĩa một phương thức đối với secret K từ những nguồn gốc khoá khác nhau và những tham số mã hoá khác cần thiết cho việc mã hoá cụ thể và thuật toán toàn vẹn dữ liệu được sử dụng trong kết nối SSH. Exchange hash H thì không bí mật, mặc dù nó không cần thiết để lộ ra và nó là duy nhất trong mỗi phiên .
Trao đổi khoá cũng diễn ra trên xác thực server để đề phòng việc giả mạo và tấn công man-in-the-middle và có thể được lặp lại trong một kết nối để thay thế một cái cũ hoặc xác thực lại server.
Tiếp theo, client cung cấp một kiểu SSH host key mà nó có thể cháp nhận :
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,null
Trong trường hợp này, nó cung cấp RSA, DSA và null đối với trường hợp không có khoá. Nó bao gồm cả null bởi vì nó hỗ trợ Kerberos cho xác thực host. Nếu dùng trao đổi khoá Kerberos thì không có SSH host key nào cần thiết đối với việc xác thực server.Sau đó, client liệt kê những thuật toán mã hoá dữ liệu mà nó hỗ trợ :
debug2:kex_parse_kexinit:aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour, aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se
Dữ liệu chính thì không bao giờ được mã hoá trực tiếp với phương thức khoá công khai như RSA hoặc DSA bởi vì chúng làm qua chậm. Thay vào đó, chúng ta sử dụng một thuật toán khoá đối xứng như trong danh sách phia trên để bảo vệ khoá phiên đối với việc mã hoá bằng phương thức khoá công khai nếu thích hợp.
Kế đến, client hiển thị danh sách các thuật toán toàn vẹn dữ liệu mà nó có sẵn:
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160, hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
Thuật toán toàn vẹn được ứng dụng để mỗi thông điệp được gửi bởi giao thức hồ sơ SSH cùng với một chuỗi số và một khoá phiên toạ ra một mã xác nhận thông điệp (MAC:message authentication code) được thêm vào mỗi thông điệp. Bên nhận có thể dùngg MAC và bản sao chép khoá phiên của nó để kiểm tra thông điệp không bị biến đổi trên đường truyền, không bị truyền lặp lại và không phải là do một phiên khác gửi tới, đó là những thuộc tính của toàn vẹn dữ liệu.Cuối cùng, client cho biết kỹ thuật nén dữ liệu mà nó hỗ trợ:
debug2: kex_parse_kexinit: none,zlib
Sau khi gửi thông điệp thoả thuận của nó, client cũng nhận từ server danh sách các tham số mà server hỗ trợ:
debug2: kex_parse_kexinit: diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-dss,x509v3-sign-rsa
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,twofish128-cbc,cast128-cbc,twofish-cbc, blowfish-cbc,aes192-cbc,aes256-cbc,twofish192-cbc,twofish256-cbc,arcfour
debug2: kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib
Kế đến, mỗi bên chọn các thuật toán tương ứng từ các thuật toán hõ trợ của bên kia:
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
Trong trường hợp này, việc chọn lựa trên cả hai bên là giống nhau. Tuy nhiên, chúng không cần thiết phải giống. Việc mỗi bên chọn lựa một thuật toán hay một khoá độc lập với nhau cũng không có hại gì.
3.3.2.4.Tiến trình trao đổi khoá và xác thực server
Tại thời điểm này, chúng sẵn sàng để đưa ra danh sách trao đổi khoá:
debug2: dh_gen_key: priv key bits set: 131/256
debug2: bits set: 510/1024
debug1: sending SSH2_MSG_KEXDH_INITClient
chọn mọt thuật toán trao đổi khoá từ bộ thông báo của server, trong trường hợp này thì server chỉ đưa ra có một cái. Nó sinh ra một khoá tạm thời như một phần của thuật toán Diffe-Hellman và gửi thông điệp khởi tạo của trao đổi diffie-hellman-group1-sha1, cùng lúc đó server biết được phương thức mà hai bên sử dụng và bắt đầu trao đổi.Tiếp theo, client đợi và server gửi thông điệp KEXDH_INIT của chúng:
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Host 'host.foo.net' is known and matches the DSA host key.
debug1: Found key in /Users/res/.ssh/known_hosts:169
debug2: bits set: 526/1024
debug1: ssh_dss_verify: signature correct
Bao gồm trong phần trả lời của server là khoá công khai SSH của nó, cùng với một chữ kí cung cấp khoá bí mật tương ứng mà nó giữ. Dĩ nhiên cữ kí sẽ được kiểm tra nhưng không có ý nghĩa quan trọng, bước quan trọng ở đây là kiểm tra định danh khoá công khai của server. Trong ví dụ này, client tìm một bản kết hợp tên foo.host.net với khoá được cung cấp bởi server.SSH-2 hỗ trợ hệ thống PKI (Public Key Infrastructure) để kiểm tra khoá công khai, định nghĩa một số kiểu khoá bao gồm gắn với giấy xác thực :
3.3.3.Giao thức chứng thực SSH (SSH_AUTH)
3.3.3.1.Tiến trình yêu cầu chứng thực
Quá trình chứng thực được client bắt đầu bằng yêu cầu chứng thực và server hồi đáp lại. Một yêu cầu chứng thực bao gồm những phần như sau:
§Username U: là định danh giấy phép của client.
§ Tên dịch vụ S: những việc mà client yêu cầu được truy cập, bắt đầu hoạt động thông qua kết nối SSH-TRANS sau khi chứng thực thành công. Có thể có nhiều dịch vụ có sẵn nhưng thông thường chỉ có một “ssh-connection” yêu cầu truy cập đến những dịch vụ cung cấp khác nhau thông qua giao thức SSH-CONN: đăng nhập, thi hành lệnh từ xa, chuyển tiếp cổng và tất cả những thứ khác mà người sử dụng muốn làm với SSH.
§Tên phương thức M, và phương thức dữ liệu cụ thể D : phương thức xác thực cụ thể được dùng trong yêu cầu là “pasword” hoặc “publickey” và phương thức dữ liệu cụ thể truyền bất cứ thứ gì cần thiết để bắt đầu trao đổi chứng thực rõ ràng, ví dụ, một mật khẩu được kiểm tra bởi server. Như là tên khoá trao đổi trong SSH-TRANS thì tên có cú pháp “@domain” có thể được dùng bởi bất cứ ai để thực hiện phương thức cục bộ, trong khi những tên không có @ phải được đăng kí tên toàn bộ các phương thức chứng thực SSH.Mỗi khi phương thức chứng thực bắt đầu, nó có thể bao gồm bất kỳ một số kiểu thông điệp chi tiết nào khác mà nó cần. Hoặc trong trường hợp đơn giản, dữ liệu mang bởi yêu cầu ban đầu cũng đã đủ và server có thể hồi đáp đúng như thể. Trong bất cứ trường hợp nào, sau khi yêu cầu và sau vài phương thức thông điệp theo sau đó thì server cấp phát một hồi đáp chứng thực.
3.3.3.2.Tiến trình hồi đáp chứng thực
Một hồi đáp chứng thực có hai trạng thái: Thành công và thất bại. Một thông báo thành công không mang dữ liệu nào khác ngoài thông báo là xác thực đã thành công và dịch vụ yêu cầu đã được bắt đầu. Thêm nữa, thông báo SSH-TRANS được client gửi được định nghĩa cùng với giao thức của dịch vụ và SSH-AUTH được chạy .Một thông báo lỗi có sẽ có cấu trúc hư sau:
§Một danh sách các phương thức chứng thực có thể tiếp tục
§Một cờ “ partial success”Nếu cờ partial success không bật lên thì thông báo đó có nghĩa là những phương thức chứng thực trước đó đã bị lỗi. Nếu cờ partical được bật lên thì thông báo có nghĩa là phương thức đã thành công, tuy nhiên, server yêu cầu phải bổ sung những phương thức còn bị lỗi khác cho thành công trươc khi đồng ý cho truy cập.
3.3.3.3.Chứng thực khoá công khai
Một yêu cầu chứng thực khoá công khai mang phương thức có tên là “publickey” và có thể có nhiều dạng khác nhau phụ thuộc vào một cờ được thiết lập. Một dạng của phương thức này là:
§flag = FALSE
§Tên thuật toán
§Dữ liệu khoá
Thuật toán khoá công khai có thể dùng là những thuật toán thiết lập trong SSH-TRANS và định dạng dữ liệu khoá phụ thuộc vào kiểu khoá như ssh-dss hay ssh-rsa.Với cờ thiết lập là FALSE, thông báo này chỉ đơn thuần là kiểm tra xác thực: nó yêu cầu server kiểm tra khoá này có được xác thực để truy cập như mong muốn của tài khoản hay không, nếu được thì gửi lại một thông báo cho biết. Nếu khoá không được xác thực, hồi đáp có giá trị FALSE đơn giản.Sau khi xác nhận khoá và gửi thông báo thành công, server cho biết đã chấp nhận truy cập và kết thúc phiên SSH-AUTH.
3.3.3.4.Xác thực password
Phương thức mật khẩu thì rất đơn giản: nó tên là “password”. Phương thức này chỉ có trong một số bản bố sung của SSH2. Sau khi kiểm tra các tham số thích hợp, server sẽ gửi thông báo chấp nhận truy cập của client và nếu có giao thức này thì server sẽ gửi kết hợp password với thông báo đó để xác thực với client.
3.3.3.5.Xác thực dựa trên host (hostbased)
Cũng là một phương thức của một số bản bổ sung. Phương thức này dùng để server xác thực client mà nó đã nhận yêu cầu có đúng hay không dựa trên tên máy. Giả sử rằng bạn ở máy A gửi yêu cầu đến server nhưng không đi trực tiếp đến server mà trên đường truyền phải đi qua máy B thì server không kiểm tra máy B mà sẽ kiểm tra xem có phải bên gửi yêu cầu truy cập đến nó có phải là máy A hay không.
3.3.4.Giao thức kết nối SSH-CONN
Khi yêu cầu xác thực thành công, client se có một dịch vụ tên “ssh-con” nhưng nó không hiển thị trên client mà hiển thị trên server như sau:debug1: userauth-request for user res service ssh-connection method publickeyServer bắt đầu chạy dịch vụ và hai bên đi đến giao thức kết nối SSH
3.3.4.1.Kênh (channels)
Dịch vụ cơ bản SSH-CONN cung cấp là multilexing. SSH-CONN điều khiển một kênh đơn, bảo đảm, luồng byte đôi được cung cấp bởi SSH-TRANS và cho phép client tạo những kênh luận lý SSH-CONN khác chạy qua nó. Kênh được nhận dạng bằng số kênh và có thể được tạo hoặc huỷ bỏ bởi client hoặc server. Kênh là một điều khiển lưu lượng riêng lẻ và mỗi kênh có một kiểu kênh được định nghĩa theo mục đích sử dụng. Kiểu được định nghĩa như sau:§session: Đơn thuần chỉ là mở một kênh phiên chứ không bắt đầu chạy một chuơng trình.Một phiên SSH-CONN có thể có nhiều kênh phiên, hỗ trợ đồng thời, ví dụ cùng chạy giao thức truyền file và thực thi chương trình trên một phiên SSH-CONN.§x11: một kết nối X11 client.§orward-tcpip: một kết nối bên trong để chuyển tiếp một cổng ở xa. Khi một kết nối đến trên một cổng TCP chuyển tiếp ở xa, server sẽ mở kênh này trở lại client để mang kết nối.§direct-tcpip: một kết nối TCP bên ngoài. Kết nối trực tiếp này đến mở một kết nối TCP ở một socket định sẵn và thêm kênh đến kết nối đó. Socket có thể dùng một tên miền hoặc địa chỉ IP
3.3.4.2.Yêu cầu (request)
Thêm vào một dãy kênh hoạt động- mở, đóng, gủi dữ liệu, gửi dữ liệu khẩn cấp,…SSH-CONN định nghĩa một thiết lập cho yêu cầu với tính đầy đủ hoặc chỉ là một kênh bộ phận. Một yêu cầu đầy đủ ảnh hưởng đến toàn bộ trạng thái của kết nối trong khi một yêu cầu kênh (bộ phận) chỉ được mở một kênh cụ thể.Yêu cầu dầy đủ là:§tcpip-forward: yêu cầu một cổng chuyển tiếp TCP đằng xa cancel-tcpip-forward: huỷ bỏ một chuyển tiếp từ xa§pty-req: chỉ định một pty, bao gồm kích cỡ cửa sổ và kiểu thiết bị đầu cuối.§x11-req: cài đặt chuyển tiếp x11§env: thiết lập một biến điều kiện. § shell, exec, subsystem: chạy tiện ích tài mặc định của tài khoản, một chương trình tuỳ ý, hoặc một dịch vụ đơn giản.§ window-change: thay đổi kích thước cửa sổ thiết bị đầu cuối§xon-xoff: dùng điều khiển bên client §signal: gửi một tín hiệu đặc biệt đến một tiến trình ở xa.§exit-signal: trả về một tín hiệu kết thúc chương trình.Khi SSH-CONN chạy, client gửi yêu cầu và mở một kênh phiên. Sau đó gửi một số yêu cầu muốn thực hiện thông qua các kênh…Bây giờ thì client đã đăng nhập thành công vào máy chủ SHH từ xa.
3.4.Bên trong SSH-1
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:v non-modular: SSH-1 được định nghĩa như một giao thức nguyên đơn, còn SSH-2 được thiết kế modul hoá.vless 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.vad 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.vSingle 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.vRhostsRSA 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.vLess 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.vweaker integrity checking: SSH-1 sử dụng phương thức kiểm tra toàn vẹn không mạnh lắm, đó là thuật toán CRC-32.verver 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 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ả ứua 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.vweak 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.
3.5.Giới thiệu các thuật toán sử dụng trong SSH
3.5.1.Những thuật toán khoá công khai
3.5.1.1Rivest-Shamir-Adleman (RSA)
Thuật toán khóa public RSA là kiểu tính toán không đối xứng được sử dụng rộng rãi nhất. Nó bắt nguồn từ sự phân tích thành thừa số của nhiều số nguyên là tích của 2 số nguyên tố gần bằng nhau.
Sự phân tích thành thừa số được tin dùng rộng rãi vì sự phức tạp, mặc dù chưa được chứng minh. RSA có thể được dùng cả cho việc mã hóa và chữ ký.
Đến tháng 9 năm 2000, RSA được yêu cầu cấp bằng sáng chế tại Mỹ bởi Public Key Partners Inc (PKP) , 1 công ty mà RSA Security Inc là 1 đối tác. Khi bằng sáng chế có hiệu lực, PKP muốn kiểm soát việc sử dụng thuật toán RAS ở Mỹ, và việc sử dụng trái phép là phạm luật. Đến giữa những năm 1990, RSA Security cung cấp miễn phí RSAref, với bản quyền cho phép ngành giáo dục và thương mại sử dụng (cũng như phần mềm được bán ra phi lợi nhuận). Từ đó RSA tr
Các file đính kèm theo tài liệu này:
- Nghiên cứu về giao thức ssh,cấu hình trên openssh.doc