Tấn công BEAST lên bộ giao thức SSL/TLS
Việc kiểm tra máy chủ Web có bị ảnh hưởng bởi tấn công BEAST hay không, được thực hiện rất dễ dàng bởi công cụ trực tuyến tại địa chỉ www.ssllabs.com/ssltest.
1. Phương pháp tấn công và khai thác lỗ hổng
Kẻ tấn công sẽ cài một chương trình (agent) vào trình duyệt của người dùng (client). Agent này có khả năng yêu cầu trình duyệt thực hiện một yêu cầu (HTTP request) và đọc nội dung yêu cầu này. Agent này có thể đơn giản là một đoạn mã javascript, cài vào trình duyệt theo cách tấn công XSS.
Hình 1: Mô tả tấn công BEAST
Đường truyền https từ client đến server được mã hóa bởi SSL/TLS nhằm đảm bảo tính bí mật, tính toàn vẹn và tính xác thực của nội dung thông tin.
1.1. Nguyên lý mã hóa trong chế độ xích mã khối CBC
Quá trình mã hóa trong SSL/TLS sử dụng khóa đối xứng được thỏa thuận qua quá trình “bắt tay”. Trong đó mã khối hoạt động dưới chế độ CBC (3DES, AES) với bản rõ đầu vào có độ dài không đổi (64, 128, 256 bit). Nếu sử dụng mã dòng thì sẽ dùng mã dòng RC4.
Ví dụ mã hóa bức ảnh bằng chế độ chế độ sách mã điện tử (ECB) và mã móc xích (CBC) được mô tả trong hình 2:
Hình 2: Chế độ CBC và chế độ ECB
Quá trình mã hóa và giải mã trong chế độ CBC:
Mã hóa
Ci = Ek(Ci-1 Å Pi)
C0 = IV
Giải mã
C0 = IV
Pi = Dk(Ci) Å Ci-1
Trong đó:
P, C tương ứng làbản rõ và bản mã;
C0 = IV là vector khởi tạo ban đầu;
Ek , Dk là các thuận toán mã hóa và giải mã.
Hình 3: Thuật toán mã móc xích (CBC)
Vector khởi tạo CBC (IV) không cần phải giữ bí mật nhưng không thể dự đoán trước khi kẻ tấn công lựa chọn một bản rõ. Với cùng đầu vào (khóa và bản rõ)nhưng vector khởi tạo khác nhau thì giá trị đầu ra sẽ khác nhau.
Một hàm tiên tri (oracle) có thể được xây dựng thành công nếu kẻ tấn công biết được các vector khởi tạo sử dụng trong chế độ CBC [5]. Coi như kẻ tấn công đã hoàn toàn sở hữu khối bản mã Cj-1 (khối bản mã trước đó). Do sử dụng chế độ CBC, nên khối bản mã này được dùng với vai trò vector khởi tạo cho khối bản rõ tiếp theo Pj. Có thể tạo ra một bản rõ dự đoán P*và xác nhận bằng cách quan sát khi nào thì biểu thức sau đây thỏa mãn (các chỉ số i và j khác nhau): Theo quá trình mã hóa, giải mã trong chế độ mã móc xích CBC ta luôn có:
C* = Ek(P*)
P*= Dk(C*)
Pj = Cj-1 Å P* = Cj-1 Å Dk(C*) (1)
Cj = Ek(Cj-1 Å Pj)
Ta luôn đặt được:
Pj+1 = C* Å Ci-1 Å Pi (2)
Khi đó:
Cj+1 = Ek(Cj Å Pj+1)
= Ek(Ek(Cj-1 Å Pj) Å Pj+1)
= Ek(Ek(Cj-1 Å Cj-1 Å P*) Å Pj+1)
= Ek(Ek(P*) Å Pj+1 (3)
= Ek (C*Å C*Å Ci-1 Å Pi)
= Ek(Ci-1 Å Pi)
= Ci
Nếu thỏa mãn phương trình (3), thì giá trị Pj+1 ở (2) mà kẻ tấn công dự đoán là chính xác và việc dự đoán này sẽ tìm thấy hoàn toàn bản rõ.Nguyên nhân chính gây ra độ phức tạp của kiểu tấn công này là nếu kẻ tấn công có thể kiểm soát được một khối bản rõ tùy ý Pj- thường gặp trong hầu hết các kịch bản ứng dụng thực tế như SSL/TLS thì cũng có thể chèn thêm dữ liệu vào header của yêu cầu. Dữ liệu header này thường có thể dự đoán được, nhưng kẻ tấn công vẫn không thể thay đổi những thông tin này. Các tác giả khắc phục vấn đề này bằng cách buộc các phần bản rõ không thể kiểm soát trở thành các thông báo tương ứng không thể thay đổi được (Cj-1 và Ci-1 có các hearder trước đó giống hệt nhau), cho nên kẻ tấn công có thể sử dụng những phần còn lại của đầu ra quan sát được.
1.2. Ý tưởng tấn công do Wei Dai đề xuất chống lại chế độ mã khối CBC
Để áp dụng phương pháp tấn công lên SSL/TLS và giải mã các khối bản mã, các tác giả đã đề xuất một kiểu tấn công mới được gọi là kiểu tấn công lựa chọn giá trị biên với các khối quan trọng (block-wise chosen-boundary attack). Ngoài ra, kẻ tấn công có thể chuyển thông báo trước khi mã hóa thành các giá trị biên của khối thông báo. Điều này có nghĩa là kẻ tấn công có thể thêm vào trước thông báo lượng dữ liệu tùy ý nhằm chia thành nhiều khối bản mã có độ lớn thích hợp. Ví dụ có thể chia một thông báo thành hai khối nhỏ: khối thứ nhất chứa dữ liệu tùy ý và byte đầu tiên của thông báo ban đầu; khối thứ hai chứa các byte còn lại và một byte lẻ chưa sử dụng đến. Do đó, tiền tố của một thông báo giúp kẻ tấn công xác định độ lớn dữ liệu có thể thay đổi thông báo (thêm vào một khối mới nếu cần). Kẻ tấn công có thể điều khiển việc thêm bất cứ dữ liệu nào với độ dài tùy ý.
Cách tấn công chống lại mã khối chế độ CBC dựa trên hai giả định:
Kẻ tấn công có thể chọn Pi;
Kẻ tấn công có thể biết được Ci.
Ý tưởng đưa ra trong trường hợp cụ thể trong hình 3 là sử dụng P4 để dự đoán khối bản rõ trước đó. Giả sử nghi ngờ P1 là X, sau đó đặt:
P4 = C3 Å C0 Å X
Nếu P1 là X thì:
C4 = Ek(C3 Å P4)
= Ek(C3 Å C3 Å C0 Å X)
= Ek(C0ÅP1)
= C1
Nếu P1 nhận một giá trị W cụ thể thì có thể giải mã được sau khi thử tất cả giá trị W có khả năng. Trong thực tế phạm vi của giá trịW rất rộng, tầm 2128. Câu hỏi được đặt ra là làm sao để thu nhỏ phạm vi dự đoán của W? Phương án được đưa ra là chọn ranh giới tấn công chống lại mã khối ở chế độ CBC. Di chuyển đường biên khối xung quanh để thu nhỏ giá trị W đến 256. Với giả thiết là kẻ tấn công có thể thêm một số byte vào bản rõ.
Hình 4: Di chuyển đường biên khối bằng cách chèn thêm vào bản rõ
Như vậy nếu thỏa mãn được điều kiện di chuyển đường biên khối để thu nhỏ W đến 256 thì hoàn toàn có thể tìm được hết bản rõ. (hình 4).
1.3. Ứng dụng ý tưởng tấn công của Wei Dai để giải mã yêu cầu HTTPS
Ứng dụng cụ thể của cách tấn công mục 1.2 là dùng để giải mã yêu cầu HTTPS. HTTP sử dụng SSL để bảo vệ cookies trong yêu cầu và hồi đáp (responses). SSL nhận được thông báo HTTP từ lớp ứng dụng là dữ liệu nguyên bản (raw data), sau đó được phân chia thành các bản ghi có chiều dài nhỏ hơn hoặc bằng 214 byte[4]. Lỗ hổng bảo mật được khai thác như sau: Mỗi bản ghi được mã hóa ở chế độ CBC với những vector khởi tạo móc xích với nhau, tức là vector khởi tạo CBC dành cho mỗi bản ghi chính là khối bản mã cuối cùng của bản ghi trước đó ngoại trừ vector khởi tạo đầu tiên.
Hình 5: HTTPS request được xử lý bởi SSL/TLS
Điều kiện để thực hiện thành công cuộc tấn công:
Kẻ tấn công nghe trộm được dữ liệu trên đường truyền giữa victim và server;
Kẻ tấn công có khả năng điều khiển được victim thực hiện một HTTP(S) POST requests tới server;
Kẻ tấn công điều khiển được đường dẫn đến trong POST request của victim;
Kẻ tấn công điều khiển được victim truy cập vào mộtwebsite tạo bởi chính kẻ tấn công để tiến hành cài Agent vào trình duyệt của victim.
Kịch bản tấn công như sau:
Người dùng 1 (Alice) đóng vai trò victim truy cập địa chỉ server của người dùng 2 (Bob): https://www.bob.com;
Alice truy cập địa chỉ https://www.oscar.com do kẻ tấn công (Oscar) điều khiển;
Oscar sẽ giải mã dữ liệu trên đường truyền từ Alice tới https://www.bob.com.
Nguyên lý tấn công [5]:
1) Oscar bắt Allicethực hiện một HTTPS POST requests tới server của Bob (với đường dẫnhttps://www.bob.com/AAAAAA), brower của Allice sẽ tạo một request (P =POST/AAAAAA HTTP/1.1 ), chia thành các bản ghi ở dạng các block và được mã hóa trong chế độ CBC. Kết quả là bản mã C = Ek(P) được gửi tới server của Bob;
2) Oscar thu được C= [C0…Cn] và đặt i = 1. Dữ liệu được xử lý bởi SSL/TLS được mô tả trong hình 6. Oscar đã tiến hành chèn AAAAAA vào trong P và ở đây Oscar sẽ tìm được cookies thông qua giải mã được REQUEST HEADER từ việc dự đoán giá trị P3 trong các bước tiếp theo;
Hình 6: HTTPS request Allice gửi cho Bob
3) Đặt Pi= Ci-1 Å C3 Å P3 với P3= P/1.1\r\nW[i]
Trong đó W[i] là giá trị dự đoán của X tương ứng với bản rõ Pi;
4) Gắn Pi vào request body;
5) Điều khiển trình duyệt của Allice tính Ci = Ek(Ci-1Å Pi). Và Ci sẽ được gửi tới server của Bob.
6) Thực hiện:
Ở đây Ci sẽ được khai triển như sau:
Ci= Ek(Ci-1 Å Pi)
= Ek(Ci-1Å Ci-1 Å C3 Å P3)
= Ek(C3ÅP3)
= C3
Tiến hành kiểm tra:
for(i=1; i<=256; i++){
if(Ci= C3)
return X=W[i];
else
goto step3;}
Cuối cùng tìm được các giá trị X và tất cả các bản rõ Pi tương ứng. Vậy Oscar sẽ giải mã thành công HTTPS request của Alice gửi cho Bob. Khi đó Oscar tìm được thành công cookies và từ đây dễ dàng truy cập vào server của Bob trên tài khoản của Alice.
2. Phiên bản SSL/TLS bị ảnh hưởng bởi BEAST
Những phiên bản SSL/TLS bị ảnh hưởng bởi BEAST được thể hiện trong hình 7 dưới đây:
Hình 7: Phiên bản SSL/TLS ảnh hưởng bởi BEAST
3. Giải pháp khắc phục và ngăn chặn tấn công
Việc sử dụng chế độ CBC áp dụng cho mã khối và các vector khởi tạo có thể dự đoán trước để đoán các khối bản rõ và kiểm tra tính đúng đắn của dự đoán đó. Hai chuyên gia của công ty google là Dương Ngọc Thái và Juliano Rizzo đã chứng minh bộ công cụ gọi là BEAST [1] có thể giải mã HTTPS request rồi đọc cookie (chứa session ID) có trong HTTPS request. Nhìn chung, các tác giả đã phát triển và mở rộng các ý tưởng và các kiểu tấn công của Bard, Möller [2] và Wei Dai [3].
Để chống lại tấn công BEAST, cần thực hiện các bước sau:
- Vô hiệu hóa tất cả các hệ mã khối như AES_CBC;
- Sử dụng giao thức bảo mật TLS phiên bản 1.1 và TLS phiên bản 1.2 thay choTLS phiên bản 1.0;
- Tắt giao thức SSL 2.0 trong các phiên bản OpenSSL cũ;
- Hạn chế các dạng tấn công Cross Site Scripting (XSS) nhắm vào máy chủ.
Một ví dụ về việc khắc phục lỗ hổng BEAST:
1) Phía máy server
Chỉnh sửa tập tin ssl.conf với các tham số sau:
SSLAllowClientRenegotiation0
SSLHonorCipherOrderon
SSLProtocol-all +SSLv3 +TLSv1 -SSLv2
SSLCipherSuiteRC4-SHA:HIGH:!ADH!aNULL
SSLProxyCheckPeerCNon
SSLProxyCheckPeerExpireon
Nếu máy chủ có hỗ trợ giao thức TLS 1.1 trở lên:
SSLCipherSuiteECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
2) Phía máy client, thực hiện các thao tác sau nhằm chống lại kiểu tấn công BEAST:
Dùng trình duyệt có hỗ trợ TLS 1.1 và TLS 1.2;
Thường xuyên cập nhật trình duyệt hiện hành;
Lưu ý các plugin trình duyệt như Java, Flash, Silverlight;
Đăng xuất hoặc đóng trình duyệt trang web khi không sử dụng;
Không lưu thông tin đăng nhập sau khi đã đăng nhập thành công tài khoản;
Sẽ tốt hơn nếu được sử dụng trình duyệt ở chế độ PrivateBrowsing.
Tài liệu tham khảo [1] J. Rizzo and T. Duong, Here Come The Ninjas, 2011. [2] G. V. Bard, The Vulnerability of SSL to Chosen Plaintext Attack, IACR Cryptology ePrint Archive, 2004. [3] http://www.weidai.com/ssh2-attack.txt. [4] T. Dierks and C. Allen, The TLS Protocol Version 1.0, RFC 2246, IETF, 1999. [5] C. Meyer, 20 Years of SSL/TLS Research An Analysis of the Internet’s Security Foundation, 2014. |