dụng Telnet, SSH.
Giao thức 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 trên trong mô hình phân lớp TCP/IP. Các công cụ SSH (như là OpenSSH, PuTTy,…) 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 riêng tư. Hơn nữa tính năng tunneling (hoặc còn gọi là port forwarding) của các công cụ này cho phép chuyển tải các giao vận theo các giao thức khác. Do vậy có thể thấy khi xây dựng một hệ thống mạng dựa trên SSH, chúng ta sẽ có một hệ thống mạng riêng ảo VPN đơn giản.
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.
Tổng quan về các đặc điểm của SSH:
− Tính bí mật (Privacy) của dữ liệu thông qua việc mã hoá mạnh mẽ Tính toàn vẹn (integrity) của thông tin truyền, đảm bảo chúng không bị biến đổi.
− Chứng minh xác thực (authentication) nghĩa là bằng chứng để nhận dạng bên gửi và bên nhận
− 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
Tính bí mật (Privacy)
Tính bí mật có nghĩa là bảo vệ dữ liệu không bị phơi bày. Mạng máy tính bình thường không bảo đảm tính bí mật, bất cứ ai truy cập đến phần cứng của mạng hoặc đến những host kết nối với mạng đều có thể sẽ đọc được tất cả dữ liệu đi qua mạng. Mặc dù mạng chuyển mạch hiện đại đã giảm những vấn đề này trong mạng vùng cục 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 đánh cắ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)
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 hay không 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.
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 sr 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à 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 sinh nê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 cộng (per-user public-key signature) và một cải tiến rlogin-style xác thực với định danh host được kiể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ợ 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.
Hình 2.17. Kiến trúc chung của giao thức SSH
SSH cũng có khoá (keys), phiên (sessions) và những thứ ngộ nghĩnh khác. Ở đâ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, ví thế bạn có thể bắt đầu thấy được bức tranh lớn về SSH như sau:
Server
Một chương trình cho phép đi vào kết nối SSH với một bộ máy, trình bày xác thực, cấp phép,…Trong hầu hết SSH bổ sung của Unix thì server thường là sshd.
Client
Một chương trình kết nối đến SSH server và đưa ra yêu cầu như là “log me in” hoặc “copy this file”. Trong SSH1, SSH2 và OpenSSH, client chủ yếu là ssh và scp.
Session
Một phiên kết nối giữa một client và một server. Nó bắt đầu sau khi client xác thực thành công đến một server và kết thúc khi kết nối chấm dứt. Session có thể được tương tác với nhau hoặc có thể là một chuyến riêng.
Key
nghì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ễ 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 mậ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
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
Một dãy dữ liệu ngẫu nhiên được 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.
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á.
Giao thức Telnet
TELNET là một giao thức khách-chủ (client-server protocol), dựa trên nền TCP, và phần khách (người dùng) thường kết nối vào cổng 23 với một máy chủ, nơi cung cấp chương trình ứng dụng thi hành các dịch vụ. Người ta cũng có thể sử dụng chương trình ứng dụng TELNET, để thiết lập một kết nối TCP tương tác của giao thức, và đồng thời còn có thể dùng nó để định nghĩa những thực thi mở rộng. Rất nhiều mở rộng của giao thức đã hoàn thành và một số những thực thi trong đó đã được chấp nhận là tiêu chuẩn của Internet. Tài liệu số 27 đến 32 của IETF STD định nghĩa những mở rộng của TELNET (phần đông trong số đó là những cái đang được dùng rất phổ biến). Trong số những mở rộng còn lại, những cái có tác dụng nhất, rất có thể là những cái vốn là những dự thảo tiêu chuẩn, lại là những cái đang trên đà trở thành tiêu chuẩn của IETF. Nếu cân nhắc về bảo an vi tính (computer security) thì TELNET là một giao thức không nên dùng, do ba nguyên nhân chính sau đây: Trong nhiều năm qua, một số điểm yếu (vulnerability) trong các daemon
của TELNET đã bị người ta phát hiện, và có thể vẫn còn những điểm yếu tồn tại chưa tìm thấy. Những điểm yếu đó tạo cơ hội cho những tấn công bên ngoài vào máy, vào người dùng, làm cho việc sử dụng và điều hành máy trở nên một mối lo ngại. Ở dạng nguyên của mình, TELNET không mật mã hóa
các dữ liệu truyền tải qua đường dây kết nối (kể cả mật khẩu), vì thế việc nghe trộm đường truyền thông là một việc tương đối dễ dàng thực hiện. Mật khẩu lấy trộm được có thể được dùng vào những việc có mục đích hiểm độc. TELNET thiếu nghi thức xác thực người dùng. Nhu cầu xác thực người dùng
là một nhu cầu quan trọng, đảm bảo sự giao thông giữa hai máy chủ trong cuộc, không bị một người trung gian xen vào (xin xem thêm những tấn công trung gian (Man-in-the-middle attacks).
Trong một môi trường làm việc mà sự an toàn và bí mật là một yêu cầu quan trọng, nhưng trên mạng lưới công cộng Internet, việc dùng TELNET là một việc không nên. Phiên giao dịch dùng TELNET là một phiên giao dịch thường, dữ liệu truyền thông không được mật mã hóa (unencrypted). Nếu có một người ngoài nào có khả năng truy cập, hoặc đến gần được vào một bộ định tuyến (router), một bộ chuyển mạch (switch), hoặc một cổng nối
(gateway) nằm trên mạng lưới, giữa hai máy chủ dùng "telnet" ở trên, người đó có thể chặn các gói dữ liệu của TELNET trên đường truyền, lấy những tin tức về đăng nhập, mật khẩu (và tất cả những gì mà người gửi đã đánh máy), bằng cách sử dụng một số những công cụ phần mềm như tcpdump hoặc
Wireshark chẳng hạn.
Những sơ hở này gây sự mất uy tín đối với TELNET rất cao và càng ngày càng ít người sử dụng nó. Người ta dần dần chuyển sang dùng SSH, một giao thức có tính năng tương tự, nhưng an toàn hơn. SSH ra đời vào năm
1995. SSH cung cấp tất cả những chức năng đã có trong "TELNET", nhưng thêm chức năng mật mã hóa dữ liệu, tránh cho những dữ liệu có tính nhạy cảm cao bị chặn lại và bị nghe trộm.
Những chuyên gia về bảo mật máy tính như Viện SANS (SysAdmin, Audit, Network, Security Institute) và những thành viên của nhóm tin tức
(newsgroup) comp.os.linux.security - (xem thêm FAQ ở đây) - khuyên mọi người rằng bất cứ một kết nối nào, không sử dụng đăng nhập từ xa (remote logins) dùng TELNET, trong những hoàn cảnh bình thường, đều đáng phải bị ngắt mạch, không được phép tiếp tục. Khi TELNET mới được thiết kế và xây
dựng vào năm 1969, phần đông những người dùng máy tính liên kết mạng là những người làm việc trong bộ phận vi tính của các cơ quan giáo dục, những bộ phận nghiên cứu lớn của tư nhân hoặc của chính phủ. Dưới môi trường ấy, bảo an truyền thông là một việc không mấy người quan tâm. Mãi cho đến khi sự bùng nổ về dải tần trong năm thuộc thập niên 1990, khi số lượng người truy cập và sử dụng Internet tăng lên gấp bội lần, và đồng thời với sự tăng trưởng này, số lượng người tấn công vào các máy chủ cũng tăng nhanh, thì việc bảo an truyền thông kết nối mới được để ý đến.
Chương 3
XÂY DỰNG HỆ THỐNG CHỐNG TẤN CÔNG TỪ CHỐI DỊCH VỤ PHÂN TÁN KIỂU GIẢ MẠO ĐỊA CHỈ IP NGUỒN TẤN CÔNG SỬ DỤNG KẾT HỢP GIỮA HỆ THỐNG CHỐNG TẤN CÔNG TỪ CHỐI DỊCH VỤ PHÂN TÁN VÀ THIẾT BỊ ĐỊNH TUYẾN ROUTER CISCO
Nội dung của chương 3 tác giả tập chung vào việc xây dựng hệ thống chống tấn công từ chối dịch vụ phân tấn kiểu giả mạo địa chỉ IP nguồn tấn
công gồm: Thiết kế kiến trúc hệ thống; Thiết kế giao diện quản trị; Xây dựng các môđun (Phát hiện tấn công DDoS; tự động thu thập địa chỉ IP sạch phục vụ cho giai đoạn tấn công; xác thực địa chỉ nguồn kết nối cho phép các kết nối bình thường vẫn có thể truy cập dịch vụ khi có tấn công xảy ra; tương tác giữa hệ thống chống tấn công DDoS và thiết bị định tuyến của Cisco).