Những yêu cầu từ các client nào không chia sẽ thông tin bảo mật shared secret với RADIUS sẽ không được xác nhận và trả lời silently discarded.. Nếu bất cứ điều kiện nào không được thỏa,
Trang 133
Chương IV:
GIAO THỨC RADIUS
Có hai giao thức RADIUS mô tả về:
[Giao thức RADIUS1] Xác nhận quyền (authentication), phân quyền (authorization), thông tin cấu hình giữa máy chủ quản lý truy cập mạng (Network Access Server - NAS) mà có các yêu cầu cần xác nhận và máy chủ xác nhận quyền dùng chung
(Shared Authentication Server)
[Giao thức RADIUS2] Thông tin về tài khoản giữa NAS và máy chủ quản lý tài khoản dùng chung (Shared Accounting Server)
RADIUS được xây dựng dựa trên giao thức lớp transport nào?
Một câu hỏi thường được đặt ra là tại sao RADIUS lại sử dụng giao thức UDP thay vì TCP ở lớp transport UDP được chọn vì một số chỉ tiêu kỹ thuật nghiêm ngặt được đặt ra
RADIUS thật ra là một giao dịch (transaction) được xây dựng dựa trên giao thức có các tính chất chính như sau:
1 Nếu như yêu cầu (request) gởi tới máy chủ xác nhận quyền sơ cấp (primary authentication server) thất bại, thì yêu cầu này phải được gởi tới máy chủ sơ cấp (secondary server) Để thực hiện yêu cầu này, một bản sao yêu cầu phải được lưu trên lớp transport để cho phép việc truyền luân phiên Điều này có nghĩa là phải có timers cho việc truyền lại (retransmission)
Trang 234
2 Các đòi hỏi về thời gian của RADIUS rất khác biệt so với TCP Một mặt, RADIUS không yêu cầu "câu trả lời" (responsive) về việc dò tìm dữ liệu bị mất User sẳn sàng chờ trong nhiều giây để cho việc xác nhận quyền (authentication) được hoàn tất Việc truyền lại thường xảy ra đối với TCP dựa trên thời gian truyền nhận trung bình (average round trip time) không cần thiết nữa, kể cả thời gian hao tốn cho việc nhận biết phản hồi về (acknowledgement overhead) Mặt khác, user không thể chờ đợi quá lâu trong nhiều phút cho việc xác nhận quyền Việc phải chờ quá hai phút để dữ liệu được truyền đi tin cậy là không hữu ích Việc sử dụng luân phiên nhanh chóng server sẽ cho phép user truy cập được vào mạng trước khi họ "bỏ cuộc"
3 Trạng thái rất tự do của RADIUS đã đơn giản hóa việc sử dụng UDP Các clients và servers có thể đăng ký vào hoặc ra khỏi mạng; Hệ thống bị khởi động lại vì một lý do nào đó; Nguồn điện bị mất… Các sự kiện bất thường (anomalous events) này nói chung sẽ không gây nguy hiểm nếu như có những timeouts tốt và xác định được các cầu nối TCP đã bị đứt Tuy nhiên UDP hoàn toàn bỏ qua các sự cố đặt biệt này; Các clients và servers có thể mở một
"chuyến vận chuyển dữ liệu" UPD ngay lập tức và để nó tự nhiên truyền trên mạng với các sự kiện có thể có
4 UPD đơn giản hóa việc thực hiện (implementation) server Ơû những phiên bản
trước, server được thực hiện đơn luồng (single threaded), có nghĩa là mỗi lúc chỉ có 1 yêu cầu được nhận, xử lý và trả về Điều này không thể quản lý được trong môi trường kỹ thuật an toàn quay vòng (back-end security mechanism) dùng thời gian thực (real-time) (1 hoặc nhiều giây) Hàng đợi yêu cầu của server sẽ bị đầy, và trong một môi trường có hàng trăm người được yêu cầu xác nhận quyền trong mỗi phút, thời gian quan vòng của yêu cầu (request turn-
Trang 335
around time) sẽ lớn hơn nhiều so với thời gian mà user mong đợi (Việc tìm tiếp trong một cơ sở dữ liệu hoặc trên một DNS chiếm mất trên 30 giây) Do vậy, giải pháp được chọn là thực hiện server chế độ đa luồng (multi-threaded) với UDP Những quá trình (processes) độc lập sẽ được sinh ra (spowned out) trên server ứng với mỗi yêu cầu (request) và những quá trình này sẽ trả lời trực tiếp với các NAS khách bằng gói UDP tới lớp truyền dẫn chính (original transport)
của client
II Giao thức RADIUS1:
1 Cơ chế hoạt động (operation)
Khi một client được định cấu hình để sử dụng RADIUS, thì bất cứ user nào của client đều giới thiệu những thông tin xác nhận quyền (authentication information) với client Đó có thể là dấu nhắc lệnh đăng ký vào mạng (login prompt) yêu cầu user nhập tên và mật khẩu vào User có thể lựa chọn việc sử dụng protocol thích hợp để thực hiện giới thiệu những thông tin này bằng các gói dữ liệu (packets), chẳng hạn như PPP (Point to Point Protocol)
Mỗi lần client nhận được thông tin như vậy, nó có thể chọn dùng RADIUS để xác nhận quyền Client sẽ tạo ra một "yêu cầu truy cập" (Access-Request) chứa các thuộc tính như tên, mật khẩu của user, số hiệu (ID) của client và số hiệu cổng (port ID) mà user sẽ truy cập vào Mật khẩu khi nhập vào sẽ được ẩn (phương pháp dựa trên giải thuật RSA Message Digest Algorithm MD5)
"Yêu cầu truy cập" (Access-Request) sẽ được gửi cho RADIUS thông qua mạng Nếu không có trả lời trong một khoảng thời gian quy ước thì yêu cầu sẽ được gửi lại Client cũng có thể chuyển (forward) yêu cầu cho các server dự phòng trong trường hợp server chính bị tắt hoặc
hư hỏng hoặc hoạt động theo kiểu round-robin
Trang 436
Mỗi khi RADIUS server nhận được yêu cầu, nó sẽ xác nhận client gởi Những yêu cầu từ các client nào không chia sẽ thông tin bảo mật (shared secret) với RADIUS sẽ không được xác nhận và trả lời (silently discarded) Nếu client là hợp lệ, RADIUS server sẽ tìm kiếm trong cơ sở dữ liệu (CSDL) user có cùng tên trong yêu cầu Chỉ mục của user (user entry) trong CSDL sẽ chứa danh sách các đòi hỏi cần thiết cho phép user truy cập vào mạng RADIUS luôn luôn xác nhận mật khẩu của user và có thể cả số hiệu của client và port mà user được phép truy cập
RADIUS server có thể yêu cầu các server khác xác nhận yêu cầu Lúc đó RADIUS đóng vai trò của một client
Nếu bất cứ điều kiện nào không được thỏa, RADIUS server sẽ gởi một trả lời "từ chối truy cập" (Access-Reject) biểu thị rằng yêu cầu của user là không hợp lệ Server có thể kèm một thông báo dạng văn bản (text message) trong Access-Reject để client có thể hiển thị cho user Không có một thuộc tính nào khác được phép chưa trong Access-Reject
Nếu tất cả các điều kiện đều được thỏa và RADIUS server muốn đưa ra một yêu cầu đòi hỏi user phải trả lời, thì RADIUS sẽ gởi một trả lời "đòi hỏi truy cập" (Access-Challenge), nó có thể dưới dạng một thông báo dạng văn bản được hiển thị cho user bởi client hoặc là một thuộc tính trạng thái (State attribute) Client sẽ nhận Access-Challenge, và nếu nó được trang bị challenge/response, nó sẽ hiển thị thông báo nhắc nhở user trả lời yêu cầu Sau đó client sẽ gửi lại (re-submit) "yêu cầu truy cập" gốc (original Access-Request) với một số hiệu yêu cầu (request ID) mới, nhưng thuộc tính tên - mật khẩu được lấy từ thông tin vừa mới nhập vào, và kèm luôn cả thuộc tính trạng thái từ Access-Challenge RADIUS server có thể trả lời "yêu cầu truy cập" mới bằng "chấp nhận truy cập" (Access-Accept), "từ chối truy cập" (Access-Reject) hoặc một "đòi hỏi truy cập" (Access-Challenge) khác
Nếu cuối cùng tất cả các điều kiện được thỏa, thì danh sách các giá trị cấu hình cho user được
Trang 537
đặt vào trả lời "chấp nhận truy cập" (Access-Accept) Các giá trị này bao gồm kiểu của dịch vụ (ví dụ: SLIP, PPP, Login user) và các giá trị cần thiết để cấp phát dịch vụ này Tỉ dụ như đối với SLIP hay PPP, các giá trị này có thể là đại chỉ IP, địa chỉ mạng con (subnet mask), MTU, phương pháp nén và số hiệu lọc gói (filtering packet ID) Ơû chế độ ký tự (character mode), các giá trị này có thể là giao thức (protocol) và tên máy chủ (host)
2 Dạng của gĩi (packet format)
Một cách chính xác, một gói RADIUS được bao bọc trong trường dữ liệu của gói UDP (UDP data field), và trường địa chỉ đích (UDP Destination Port field) có số hiệu cổng là 1645 Khi gói trả lời được tạo ra, số hiệu cổng của địa chỉ nguồn và đích được bảo lưu
Một gói dữ liệu của RADIUS được định dạng như sau (các trường được gởi đi từ trái sang phải)
Trang 6a Trường mã (code): 1 byte
Xác định kiểu của gói RADIUS Gói có mã không hợp lệ sẽ không được xác nhận và trả lời (silently discarded)
12 Status-Server (experimental - thực tế)
1 Status-Client (experimental - thực tế)
1 Reserved (dự trữ)
3
Trang 739
Accounting-Request/ Accounting-Response sẽ được trình bày ở giao thức RADIUS2
b Trường danh hiệu (Identifier): 1 byte
Dùng so trùng yêu cầu (request) và trả lời (reply)
c Trường độ dài (length): 2 bytes
Biểu thị độ dài của gói bao gồm các trường mã (code), danh hiệu (identifier), độ dài (length), xác nhận (authenticator), thuộc tính (attribute) Những byte nằm ngoài khoảng quy định bởi trường length sẽ được coi là những byte thừa, và sẽ bị bỏ qua khi nhận Nếu gói ngắn hơn giá trị trường length, nó sẽ không được xác nhận và trả lời (silently discarded) Giá trị nhỏ nhất của trường length là 20, giá trị lớn nhất là 4096
d Trường xác nhận (authentication): 16 bytes
Giá trị của trường xác nhận được dùng để xác nhận sự trả lời từ RADIUS server và nó được dùng trong thuật toán ẩn mật khẩu (password hiding algorithm) MSB (the most significant byte) sẽ được gởi trước
Bộ xác nhận yêu cầu (Request Authenticator)
Trong các gói "yêu cầu truy cập" (Access-Request), giá trị của trường xác nhận (authenticator field) là một số ngẫu nhiên 16 byte được gọi là bộ xác nhận yêu cầu (request authenticator) Giá trị này phải không thể được dự đoán trước (unpredictable) và duy nhất (unique) trong suốt thời gian sống của "thông tin bí mật" (secret) (mật khẩu dùng chung giữa client và RADIUS server); Vì nếu có sự lặp lại của giá trị này có nghĩa là một nhân vật nào đó (attaker) có thể trả lời câu hỏi này không cần sự xác nhận của RADIUS
Trang 840
server Do đó bộ xác nhận yêu cầu nên có giá trị toàn cục (global) và duy nhất theo thời gian (temporal uniqueness) Mặc dù giao thức RADIUS không có khả năng ngăn cản sự nghe lén phiên xác nhận (authenticated session) qua đường dây, nhưng việc sinh ra các giá trị không thể dự đoán trước cho bộ xác nhận yêu cầu có thể hạn chế rất nhiều sự kiện này
NAS và RADIUS server chia sẻ "thông tin bí mật" Thông tin bí mật dùng chung này có được sau khi giá trị của "bộ xác nhận yêu cầu" được đưa vào bộ băm một chiều MD5 (one-way MD5 hash) để tạo ra một giá trị số 16 byte Giá trị này được XOR với mật khẩu mà user nhập vào, kết quả sẽ được đặt vào thuộc tính User-Password trong gói Access-Request
Trường xác nhận trong gói "trả lời" (Response Authenticator)
Giá trị của trường xác nhận (authenticator field) trong các gói Request, Reject, Access-Challenge được gọi là bộ xác nhận trả lời (Response Authenticator) Giá trị này được tính bởi băm một chiều MD5 chuỗi các byte của các trường mã, danh hiệu, độ dài, xác nhận của gói "yêu cầu truy cập", và cộng thêm các thuộc tính trả lời và thông tin
Access-bí mật dùng chung
ResponseAuth= MD5(Code+ID+Length+RequestAuth+Attributes+Secret)
b Trường thuộc tính (Attributes)
Có những thuộc tính có nhiều phiên bản (instances) Những thuộc tính cùng loại được giữ nguyên thứ tự Đối với mỗi loại gói chỉ cho phép các thuộc tính nhất định mà thôi
3 Kiểu của gói (packet types)
Kiểu của gói được xác định bởi trường mã (code field) chiếm byte đầu tiên của gói RADIUS
3.1- Gói "yêu cầu truy cập" (Access-Request)
Trang 941
Gói Access-Request được gởi tới RADIUS server Nó chuyên chở thông tin dùng để xác định xem user có được phép truy cập vào NAS và các dịch vụ được chỉ định hay không Trường mã của gói phải có giá trị 1 Gói Access-Request phải chứa thuộc tính User-Name, User-Password hoặc CHAP-Password , và có thể chứa các thuộc tính NAS-IP-Address, NAS-Identifier, NAS-Port, NAS-Port-Type
Trường danh hiệu (Identifier field) phải được thay đổi khi nội dung của trường thuộc tính bị thay đổi hoặc là đã nhận được trả lời hợp lệ cho yêu cầu trước đó Trong trường hợp phải gởi lại gói (retransmission), trường danh hiệu không được thay đổi
3.2- Gói "chấp nhận truy cập" (Access-Accept)
Gói Access-Accept được gởi trả bởi RADIUS server khi tất cả các giá trị thuộc tính của gói Access-Request Nó cung cấp thông tin cấu hình cần thiết để cấp phát các dịch vụ cho user Trường mã của gói phải có giá trị 2 Gói Access-Accept nhận được ở NAS phải có trường danh hiệu trùng khớp với gói Access-Request tương ứng đã gởi trước đó và phải có trường xác nhận (Response Authenticator) phù hợp với thông tin bí mật dùng chung (shared secret)
3.3- Gói "từ chối truy cập" (Access-Reject)
Gói Access-Reject được gởi trả từ RADIUS server khi có giá trị thuộc tính không được thỏa Trường mã của gói phải có giá trị 3 Gói có thể chứa 1 hoặc nhiều thuộc tính Reply-Message với một thông báo dạng văn bản mà NAS sẽ hiển thị nó với user Trường danh hiệu của gói Access-Reject chính là bản sao của gói Access-Request tương ứng
3.4- Gói "đòi hỏi truy cập" (Access-Challenge)
Gói Access-Challenge được RADIUS server gởi đến user đòi hỏi thêm thông tin cần thiết mà user phải trả lời Trường mã của gói phải có giá trị 11 Gói có thể chứa 1 hoặc nhiều thuộc tính Reply-Message và có thể có 1 thuộc tính State Các thuộc tính khác không được xuất hiện
Trang 1042
trong gói Access-Challenge Trường danh hiệu của gói Access-Challenge phải trùng khớp với gói Access-Request tương ứng đã gởi trước đó và phải có trường xác nhận (Response Authenticator) phù hợp với thông tin bí mật dùng chung (shared secret) Nếu NAS không được trang bị challenge/response thì gói Access-Challenge nhận được sẽ coi như là gói Access-Reject Nếu NAS được trang bị chức năng challenge /response và gói Access-Challenge nhận được là hợp lệ thì NAS sẽ hiển thị thông báo và yêu cầu user trả lời thông tin mà RADIUS server yêu cầu Sau đó NAS sẽ gởi gói Access-Request gốc nhưng với danh hiệu yêu cầu (request ID) và xác nhận yêu cầu (request authenticator) mới, đồng thời thuộc tính User-Password cũng được thay thế bởi thông tin trả lời của user (đã được mã hóa) và có thể bao gồm cả thuộc tính State từ gói Access-Challenge
4 Các thuộc tính (attributes)
Các thuộc tính của RADIUS, chứa trong các gói yêu cầu-trả lời, mang thông tin xác nhận quyền, phân quyền, cấu hình cần thiết để cấp phát các dịch vụ cho user Giá trị trường độ dài của gói RADIUS sẽ quy định điểm kết thúc của các thuộc tính trong gói Dạng của thuộc tính như sau:
Trang 1143
Trường kiểu (Type): 1 byte
Đặc trưng cho 256 loại thuộc tính có giá trị từ 0 đến 255 Đây là những con số quy ước (tham khảo thêm trong tài liệu draft-ietf-radius-radius-05)
RADIUS server và client có thể bỏ qua các thuộc tính có kiểu không xác định
Trang 1244
………
Trường độ dài (Length): 1 byte
Biểu thị độ dài của thuộc tính cho các trường kiểu, độ dài và giá trị Nếu thuộc tính trong gói Access-Request có trường độ dài không hợp lệ thì RADIUS server sẽ trả về gói Access-Reject Nếu thuộc tính trong các gói Access-Reject, Access-Accept, Access-Challenge có trường độ dài không hợp lệ thì NAS client sẽ xem như là gói Access-Reject hoặc là không xác nhận và trả lời (silently discarded)
Trường giá trị (Value):
Dạng và chiều dài của trường giá trị được xác định bởi trường Kiểu (Type field) và trường độ dài (Length field) Có 4 loại dữ liệu cho trường giá trị như sau:
Loại dữ liệu độ dài
Address 32 bits, MSB đứng trước
Interger 32 bits, MSB đứng trước
Time 32 bits, MSB đứng trước (Tính từ 00:00:00 GMT 1/1/1970)
5 Ví dụ
Dạng gói cụ thể khi user telnet đến một máy chủ chỉ ra (specified host) sẽ như thế nào?
Giả sử NAS có địa chỉ là 199.200.201.9 gởi một gói UDP dạng Access-Request tới RADIUS server cho user tên jerry đăng ký truy cập tại port 4 có dạng như sau: