Giá trị đƣa ra bằng thủ tục biến đổi độ dài 64 bit và chia thành nhiều tokencode phụ thuộc vào thiết bị tạo tokencode và khoảng thời gian hiển thị.
2.5.1.1. Giá trị thời gian (Time)
Biến số đặt vào trong thuật toán SecurID biểu diễn thời gian hiện tại của thuật toán là giá trị 64 bit. Tuy nhiên, quá trình kiểm tra đã chỉ ra rằng giá trị 64 bit này là đƣợc tạo ra từ biểu diễn 32 bit của thời gian hiện tại (GMT) tính theo các giây từ 12 giờ đêm ngày 01/01/1986.
Trong hàm làm tròn, giá trị đƣợc dịch trái hai lần là tƣơng đƣơng với phép nhân 4. Hàm này đảm bảo đƣợc giá trị của kết quả đầu ra luôn luôn là chẵn theo tính chất kết hợp của phép nhân. Do đó, hai bit có trọng số thấp nhất sẽ luôn luôn là 00 và các giá trị có thể của mỗi trọng số thấp nhất là 0x0, 0x4, 0x8 và 0xC. Phép nhân này sẽ xóa nhiều hơn hai bit của entropy từ giá trị thời gian 24 bit lên tới tổng giá trị thời gian có thể là 222 hay 4,194,304. Tổng giá trị thời gian này có thể giảm một cách đáng kể nếu giả thiết kẻ tấn công biết đƣợc giá trị thời gian xấp xỉ đã đƣợc tạo trƣớc đó.
Kết quả của khoảng thời gian đã đƣợc biến đổi này có khả năng tạo ra một chu kỳ tokencode hoàn chỉnh bằng cách tăng thông qua tất cả các giá trị thời gian có thể đối với một giá trị bí mật đơn lẻ. Chu kỳ hoàn chỉnh có chứa tổng 4,194,304 đầu ra 64-bit có thể từ thuật toán SecurID.
Thuật toán Convert
Giá trị trước khi convert
Giá trị tokencode 64 bít time
Giai đoạn của chu kỳ đƣợc thiết kế dài hơn thời gian sống của thiết bị chứa mã thông báo, nếu thiết bị chạy trong thời gian thực (trong trƣờng hợp một độ dài của tokencode 8-bit đƣợc sử dụng với chu kỳ hiển thị là 60 giây, nó sẽ mất gần 16 năm để lặp qua tất cả các giá trị tokencode có thể). Tuy nhiên, việc sử dụng một thiết bị tokencode mềm đã đƣợc sửa đổi , thời gian có thể tăng lên với một tốc độ lớn hơn, do đó việc đƣa ra toàn bộ chu kỳ tokencode chỉ là vấn đề bao nhiêu phút.
2.5.1.2. Giá trị bí mật (Secret)
RSA đã tiết lộ cách thức họ tạo ra các mã bí mật 64-bit ban đầu mà đƣợc sử dụng giống nhƣ các giá trị đầu vào bên trong thuật toán của họ. Những giá trị này đƣợc quy định trƣớc, giả thiết ngay cả nếu cơ chế tạo ra có thể đoán đƣợc, nó có thể đƣợc thay đổi một cách trong suốt tới một lƣợc đồ tạo ngẫu nhiên hơn. Tuy nhiên, thậm chí với cách tạo số giả ngẫu nhiên hoặc ngẫu nhiên mạnh của mã bí mật, số lƣợng giới hạn các giá trị có thể đƣợc coi là không thích hợp trong một vài trƣờng hợp nào đó.
Sẽ có thành phần bí mật đƣợc xem là thoả hiệp từ các thẻ cứng hoặc các ứng dụng thực thi thẻ mềm, tất cả các giá trị đầu ra có thể đƣợc quay vòng qua và đƣợc ghi lại bằng ccsh sử dụng thuật toán SecurID. Điều này có thể thực hiện mà không giả mạo bằng thiết bị lƣu tokencode giả mạo, do đó việc tấn công sẽ không đƣợc phát hiện tức thì.
2.5.1.3. Giá trị biến đổi (Convert)
Giá trị tokencode có thể đƣợc nhập vào bởi ngƣời sử dụng đƣợc hiển thị trong chuỗi nhị phân từ 6 đến 8 bit. Giá trị nhị phân này xuất phát từ giá trị hexa 64-bit, đƣợc gọi là ―giá trị trƣớc khi biến đổi‖ bằng cách sử dụng một thủ tục biến đổi đơn giản nhƣ sau:
For each nibble in the hexadecima pre-convert value {
if (nibble > 9) {
nibble = nibble - 2;
Với mỗi nibble trong giá trị trƣớc biến đổi, nếu nibble lớn hơn 9 thì phép biến đổi đƣợc sử dụng. Ngƣợc lại, nếu nibble nhỏ hơn hoặc bằng 9, số tự nhiên đƣợc hiển thị. Từ đây, giá trị chỉ ra cho ngƣời dùng có thể chỉ ra giống nhƣ trong bảng dƣới đây: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 A B A B A B A B A B C D C D C D C D C D E F E F E F E F E F
Bảng 2.1. Bảng các giá trị của tokencode
Theo tƣ tƣởng thiết kế, giá trị nhóm 6 từ 0xA đến 0xF có khả năng đƣợc ánh xạ tới giá trị thập phân từ 0 đến 9. Tuy nhiên, do 0xA, 0xC và 0xE chỉ có thể đƣợc ánh xạ sang 0, 2, 4, 6 hay 8 và 0xB, 0xD và 0xF chỉ có thể đƣợc ánh xạ tới 1, 3, 5, 7 hoặc 9, số lƣợng các giá trị trƣớc biến đổi có thể đƣợc giảm một cách đáng kể.
Gọi tlen là độ dài của mã thông báo, với mỗi giá trị tokencode bất kỳ đƣợc đƣa ra, thủ tục biến đổi chỉ cung cấp 4tlen các giá trị trƣớc biến đổi có thể, các giá trị này sau đó có thể đƣợc phân tích để quyết định các cấu hình bit riêng biệt của giá trị bí mật thực sự.
Thiết kế lý tƣởng nếu đƣa ra 7tlen giá trị trƣớc biến đổi có thể. Ví dụ, một tokencode 6 ký tự đặc biệt, có 46 hay 4096 giá trị trƣớc biến đổi có thể đƣợc tạo ra. Trƣờng hợp lý tƣởng sẽ đƣa ra 76 hay 117,649 các giá trị trƣớc biến đổi có thể.
Với mỗi giá trị của tokencode đƣợc hiển thị thực sự thì có một khả năng là 62,5% số là số tự nhiên (ví dụ, một số 0 đƣợc hiển thị có một giá trị 0 trƣớc biến đổi), còn lại 12,5% khả năng số là {A, C, E} hoặc {B, D, F}.
2.5.1.4. Các xung đột trong chu kỳ của tokencode
Việc phân tích các chu kỳ tokencode cho một ví dụ về các secret 64 bit đƣợc tạo ra một cách giả ngẫu nhiên mang lại các kết quả thú vị. Ngoài 8,388,608 tokencode có khả năng (hai tokencode đƣợc đƣa ra cho mỗi giá trị thời gian), xấp xỉ 8 triệu tokencode là duy nhất và chỉ xuất hiện một lần trên một chu kỳ. Còn lại gần 300,000 là các giá trị lặp lại hoặc bị xung đột.
Do đó, 4% chu kỳ tokencode có các giá trị lặp. Đây là một phần giá trị đƣợc tạo ra do vòng convert. [4]
2.6. CÁC ĐIỂM YẾU TRONG RSA SECURID 2.6.1. Giới thiệu 2.6.1. Giới thiệu
Hệ thống SecurID là một dạng phổ biến của 2 nhân tố xác thực liên quan đến thẻ cầm tay phân phát cho ngƣời dùng, phần mềm client cho một loạt các hệ thống, và phần mềm máy chủ cho việc quản lý và xác thực tập trung.
Chiếc thẻ này chứa một bộ vi xử lý 8 bít, một đồng hồ, một màn hình LCD, một cục pin, và có thể là một bàn phím cảm ứng. Đơn vị này đƣợc đặt trong một bộ chống giả mạo bằng thép, và đƣợc thiết kế để xoá bộ nhớ nếu bị mở ra.
Thẻ sẽ phát sinh một chuỗi cố định các con số có vẻ không liên quan đến nhau (có thể coi nhƣ là các mã thẻ) bằng cách kết nối một số seed đã đƣợc lập trình sẵn với thời gian , và thực thi chúng thông qua cái mà thƣờng đƣợc coi là hàm băm SecurID.
Security Dynamic thƣờng có 2 hàm băm, hàm băm cho thẻ và hàm băm gọi là F2. Hãy quan sát thông tin phía dƣới về chi tiết của F2. Độ dài của các mã thẻ có thể từ 6-8 chữ số, và sẽ không thay đổi đối với một thẻ cho trƣớc. Nếu thẻ này có một bộ phím nó có thể kết nối một PIN (của 4-8 chữ số, có thể cấu hình bởi ngƣời quản trị - administrator) với đầu ra của bảng bấm. PIN này đƣợc đƣa vào đầu ra của hàm băm không cần hỗ trợ bổ sung nào.
Phần mềm máy khách bao gồm sửa đổi tới một hệ thống kiểm định của một máy chủ, nhờ vậy nó có thể giao tiếp với máy chủ ACE. Phần mềm này sẵn có đối với một loạt các hệ thống, từ AppleTalk Remote Access tới bộ định tuyến Cisco, các máy chủ Annex Terminal, và các máy trạm UNIX.
Chúng ta sẽ tập trung vào trƣờng hợp một máy trạm UNIX chạy chƣơng trình Security Dynamics1 sdshell. Chƣơng trình này sẽ đƣợc ấn định là user1s shell. Một khi ngƣời dùng đã đƣợc xác thực tới /bin/login, họ sẽ đƣợc cho vào tới sdshell, giao tiếp với máy chủ ACE để thu về thông tin kiểm định đối với ngƣời dùng đó.
Mặc dù các vụ tấn công đƣợc mô tả ở đây tập trung vào cài đặt sdshell, nhƣng ảnh hƣởng đến tất cả thiết lập của giao thức. Và cũng có một máy khách cho phép SecurID đƣợc tích hợp vào trong một sản phẩm mới trên một nền hệ thống đƣợc hỗ trợ mà không cần can thiệp nhiều từ Security Dynamic .
Máy chủ bao gồm một deamon, một cơ sở dữ liệu, và một phần mềm để quản trị cả 2. Máy chủ có thể chạy trên một loạt các nền hệ thống, và có thể hỗ trợ cho việc hoạt động đối với TCP/IP, Novell 3.11 và 3.12, và AppleTalk. Việc tham định cũng có thể đƣợc thi hành thông qua TACACS, XTACACS, và TACACS+.
Chúng ta sẽ tập trung vào việc cài đặt TCP/IP, đƣợc sử dụng ở hầu hết các hệ thống có kết nối internet. Giao thức là stateless, và chạy trên UDP. Deamon lắng nghe tín hiệu từ UDP cổng 124 theo mặc định.
Cơ sở dữ liệu trong phiên bản 1.2.4 là một cơ sở dữ liệu phẳng độc quyền, và đƣợc thay thế trong phiên bản 2 bởi một Progress DBMS. Cơ sở dữ liệu vào các file log chƣa mã hoá DES, và chỉ có thể đƣợc thao tác bởi chƣơng trình sdadmin, hoặc đƣợc đọc bởi sdlogmon. Cơ sở dữ liệu sẽ chứa thông tin cho một thẻ: xác định thời gian hết hạn, lần cuối đăng nhập thành công (theo lý thuyết), lần cuối thâm nhập, pin, ƣớc lƣợng về độ lệch đồng hồ và seed. Nó có thể cũng chứa thông tin về các nhóm ngƣời dùng, nhóm các máy, và những nhóm hoặc ngƣời dùng đƣợc cho phép đăng nhập tới mỗi máy hoặc nhóm các máy đó.
Hệ thống sẽ hỗ trợ 2 máy chủ, 1 master và một slave. Chúng ta sẽ không khảo sát tƣơng tác giữa chúng, và sẽ chỉ xem xét trƣờng hợp một single master, bởi vì thực tế sự tấn công đƣợc mô tả ở đây không bị ảnh hƣởng bởi liên kết master-slave.
2.6.2. Giao thức Ace
Trong phần này sẽ khảo sát giao thức đƣợc thiết lập trong phiên bản 1.2.4 của phần mềm. Mục đích của giao thức Ace là cho phép cơ sở dữ liệu các seed và thuật toán thẻ (card algorithm) cùng tồn tại trong một máy trung tâm có thể đƣợc bảo vệ tốt. Giao thức mà xác nhận, đƣa ra ―4 mức thành công của mã hoá chéo‖ và ―sự xác thực qua lại‖ giữa máy chủ và máy khách . Việc yêu cầu về sự xác thực qua lại sẽ đƣợc chỉ dẫn là thất bại.
Các thuật ngữ liên quan đến giao thức:
c : Là 1 khoá DES đƣợc phát sinh trƣớc đó bởi máy khách và gửi tới máy chủ. Ek(văn bản gốc - plaintext): Tham chiếu tới mã hoá DES của văn bản gốc với khoá K. Giao thức đó sẽ không sử dụng 1 IV, và chỉ mã hoá các khối đơn lẻ trong ECB mode.
IP: Là địa chỉ IP của máy khách ACE.
P: Là passcode mà ngƣời dùng muốn đƣợc xác thực.
: Là mã truyền mà một thẻ riêng + pin để đƣa ra các passcode +1, -1, là các passcode mong muốn nếu đồng hồ thẻ bị lệch 1 số lƣợng lên hoặc xuống.
T: Là 1 nhãn thời gian (timestamp).
F2: Là 1 hàm băm đƣợc phát triển bởi Security Dynamic. Đối với một giao thức hoạt động nhƣ đã thiết kế, nó phải là không thể bị đảo ngƣợc (tính toán đầu vào từ đầu ra) và có khả năng chống lại sự xung đột (không thể tìm thấy 2 đầu vào mà sinh ra cùng một kết quả). Nếu nhƣ nó có thể dẽ dàng bị hoán đổi thì 1 số seed của thẻ có thể sẽ bị kẻ tấn công phát Nó cần có khả năng chống lại sự tấn công bởi vì máy chủ đòi hỏi sẽ không chấp nhận các tokencode đã từng đƣợc sử dụng rồi. F2 sinh ra 256 bit đầu ra từ đầu vào của nó. F2 có thể đƣợc dẫn xuất từ việc kiểm tra chƣơng trình ‗sdshell‘ có sẵn trong máy tính.
WP: Tham chiếu tới ―Worktation Passcode‖, nó là 64 bit của 256 bit đầu ra của F2. WP[1] tham chiếu đến 64 bit đầu tiên.
Giao thức sẽ bắt đầu khi ngƣời dùng tác động lên một vài quá trình (đăng nhập, in rshd, …) để đƣa ra shell.
1. Sdshell ra tín hiệu cho máy chủ với 1 thông điệp Hello (Hình 2.12). 2. Aceserver đáp ứng với 1 nhãn thời gian T(Hình 2.13).
3. Sdshell nhắc ngƣời dùng ngƣời dùng ‗nhập passcode‘. 4. Ngƣời dùng gửi lại passcode hiện thời, P.
5. Sdshell tính toán ra F2(IP, T, P), và chia nhỏ nó thành wp[1-4].
6. Sdshell gửi đi một gói UDP với (tên ngƣời dùng, Ec(wp[1])), (Hình 2.14). 7. Aceserver giải mã gói tin trên, và tính ra F2(IP, T, ). Nếu wp từ việc tính
toán đó phù hợp với cái đƣợc gửi đi bởi sdshell thì giả sử ngƣời dùng đã có thẻ và pin, và sẽ đƣợc cho phép vào. Nếu không, aceserver sẽ tính ra F2(IP, T, +1) và F2(IP, T, -1) và so sánh chúng với giá trị nhận đƣợc.
8. Nếu nhƣ sự so khớp thành công thì một thông điệp xác thực sẽ đƣợc gửi đi cho sdshell: Ewp[2](authorization), shell chạy. Ngƣợc lại nếu không khớp, aceserver sẽ xem xét với khoảng từ -10 đến +10. Nó có thể gửi đi 1 thông điệp yêu cầu 1 tokencode thứ hai để nó đảm bảo rằng việc ƣớc lƣợng giờ của nó là chính xác. Nó cũng có thể gửi lại 1 thông điệp lỗi, đƣợc mã hoá với wp[1] giống nhƣ khoá .
Các gói tin (packets):
Các định dạng gói tin hoàn toàn chƣa đƣợc biết tới tại thời điểm này, nhƣng những cái mà chúng ta đã tìm ra minh hoạ cho một vài yếu điểm, xảy ra xác thực không mã. Mỗi gói đƣợc chỉ ra nhƣ là phần thân của gói udp, theo sau bởi một bộ phân tích của gói đó.
Mỗi gói sẽ chứa một vài con số mã thuật và các thiết bị lƣu trữ, cũng nhƣ là một vài hằng số đƣợc hoán chuyển theo các quy luật đã thiết đặt. Và cũng sẽ có ít nhất 2 chuỗi số trong mỗi gói.
Chuỗi A tăng lên 1 đối với mỗi gói client gửi đi trong 1 phiên (session). Chuỗi B giảm xuống 1 mỗi gói.
Chuỗi C tăng lên 5 cho mỗi thông điệp Chuỗi D giảm xuống 5 cho mỗi thông điệp
A B C D và F là các byte đƣợc gửi trả và đƣa ra trƣớc với một vài sự chuyển vị. E thay đổi từ phiên này qua phiên khác.
Tên đăng nhập không đƣợc mã hoá và đƣợc biểu diễn đạt dƣới dạng hệ số16(hex). (―adam‖ = 61 64 61 6d).
Các byte đƣợc gạch dƣới chƣa từng thay đổi trong một kiểu gói tin. 8 16 24 32 +----+----+----+----+----+----+----+----+ 4500 0098 1633 0000 3c11 517f cd88 41c6 c034 4720 09a0 02f3 0084 0000 6702 0010 0000 0000 0000 0000 0000 0000 0000 0000 (208 more 0 bytes) 8 16 24 32 +----+----+----+----+----+----+----+----+ Securid |SeqA|0000|mrkr|seqB| 'A' 'B' 'C' 'D' | 'E' 'F' |0084 0000|6702 0010
8 16 24 32
+----+----+----+----+----+----+----+----+ 4500 0098 c9b2 0000 3111 a8ff c034 4720 cd88 41c6 02f3 09a0 0084 0000 6c02 0010 4a58 8000 0000 000a 3273 c5c6 003a 5bfa c92d 5cc2 b52d cdcd df39 0ce8 0cfa 0b54 4b55 55dd 6bd9 e5fa 7931 7ee8 c72a 77a4 3c16 d2f8 897b 5fc8 dcc4 0cc4 ae86 a1f4 7279 e41d 66b3 100b a577 2c47 3762 d7d9 ab50 36d8 56b3 55aa 0599 d30a 6be8 6191 3349 3bff eafb 3a83 84e8 955e 4576 9071 bc96 df03 07f4 7605
8 16 24 32
+----+----+----+----+----+----+----+----+ Securid |SeqC|0000|mrkr|seqD| 'C' 'D' 'A' 'B'| 'F' 'E' |0084 0000|6702 0010 4a58 8000 0000 000a 32| Encoded time