HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN
BÁO CÁO BÀI TẬP LỚN MÔN HỌC
MẬT MÃ HỌC NÂNG CAO
Chủ đề số 05
TÌM HIỂU TẤN CÔNG PADDING ORACLE LÊN CHẾ ĐỘ
CBC CỦA MÃ KHỐI
Giảng viên:
ThS. Phạm Quốc Hoàng
KS. Nguyễn Văn Nghị
Thực hiện: Sinh viên lớp AT8B
1. Nguyễn Thị Thu Hiền
2. Trần Nhật Trường
3. Lê Văn Vũ
HÀ NỘI, 2015
MỤC LỤC
Danh mục kí hiệu và từ viết tắt......................................................................................
Danh mục các hình vẽ.....................................................................................................
Lời mở đầu......................................................................................................................
Chương 1. các khái niệm cơ bản.....................................................................................
1.1. Mã hóa khối - Block Ciphers.........................................................................................4
1.2. Một số kĩ thuật Padding.................................................................................................5
1.1.1. Bit Padding.....................................................................................................6
1.1.2. Byte Padding...................................................................................................6
1.1.3. Zero Padding...................................................................................................6
1.3. Giới thiệu CBC mode trong hoạt động mã khối............................................................7
Chương 2. Padding Oracle attack...................................................................................
2.1. Giới thiệu về Padding Oralce attack..............................................................................8
2.2. Using Padding Oracle attack........................................................................................12
1.1.4. Cracking CAPTCHA.....................................................................................12
1.1.5. Giải mã JSF ViewStates................................................................................13
2.3. Một số Web Framework dễ bị tấn công Padding Oralce............................................14
1.1.6. Ruby On Rails...............................................................................................14
1.1.7. OWASP ESAPI..............................................................................................14
Kết luận..........................................................................................................................
Tài liệu tham khảo........................................................................................................
DANH MỤC KÍ HIỆU VÀ TỪ VIẾT TẮT
Viết tắt
CBC
IV
Giải thích
Cipher Block Channing
Initialization Vector
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.1
DANH MỤC CÁC HÌNH VẼ
Hình 1.Mã hóa khối.........................................................................................................
Hình 2.Một số ví dụ về kỹ thuật Padding với Block size là 8 byte................................
Hình 3.Mô hình CBC của mã khối.................................................................................
Hình 4.Một số ví dụ về padding......................................................................................
Hình 5.Sơ đồ giải mã trong CBC mode........................................................................
Hình 6.CBC mode decryption.......................................................................................
Hình 7.Kết quả nhận được khi padding 8 byte 0.........................................................
Hình 8.Kết quả nhận được khi tăng padding block khởi đầu lên 1...........................
Hình 9.Kết quả nhận được khi padding đúng.............................................................
Hình 10.Vận dụng để đoán plaintext............................................................................
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.2
LỜI MỞ ĐẦU
Ngày nay, ngành công nghiệp web đang sử dụng rộng rãi và các trang web đang
sử dụng mã hóa không chính xác nên đã tạo ra các lỗ hổng để kẻ tấn công có thể đọc và
sửa đổi dữ liệu cần được bảo vệ. Nó đã được biết đến trong nhiều năm qua trong cộng
đồng.
Nếu thông điệp được mã hóa không được xác thực, tính toàn vẹn dữ liệu không
thể được đảm bảo mà làm cho hệ thống dễ bị tấn công, một trong số họ bị tấn công bởi
kỹ thuật Padding Oracle, một kỹ thuật được bởi Serge Vaudenay phát minh và trình bày
tại EuroCrypt năm 2002.
Vì vậy trong đề tài này chúng em đi vào nghiên cứu để tìm hiểu rõ hơn vè kỹ thuật
padding oracle lên chế độ cbc của mã khối.
Chúng em xin cảm ơn!
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.3
CHƯƠNG 1. CÁC KHÁI NIỆM CƠ BẢN
1.1. Mã hóa khối - Block Ciphers
Trong mã hóa khối, hàm mã hóa và giải mã thường lấy đầu vào là một block 1
khối dữ liệu có độ dài nhất định (4bytes, 8bytes….). Vì vậy, với một đoạn dữ liệu có độ
dài lớn, người ta thường chia nó thành các đoạn nhỏ (trùng với độ dài input của thuật
toán mã hóa) và mã hóa lần lượt.
Hình 1.
Mã hóa khối
Với các hệ mã dòng (Stream Cipher), đặc điểm chung là từng ký tự của bản rõ
được mã hoá tách biệt. Điều này làm cho việc phá mã trở nên dễ dàng hơn. Trong mã
khối, thông điệp sẽ được chia thành các khối (Blocks) có kích thước bằng nhau (VD:
DES làm việc với các khối 64 bit, AES với các khối 128 bit… ). Các khối thông điệp này
sẽ được mã hóa lần lượt và gửi đi. Trong kiểu mã hoá này, các tham số quan trọng là kích
thước (độ dài) của mỗi khối và kích thước khoá.
Điều kiện an toàn của mã hóa khối:
- Kích thước khối phải đủ lớn để chống lại các loại tấn công phá hoại bằng
phương pháp thống kê. Tuy nhiên điều này sẽ dẫn đến thời gian mã hóa tăng lên.
- Không gian khóa phải đủ lớn(tức là chiều dài khóa phải đủ lớn) để chống lại
tìm kiếm vét cạn.Tuy nhiên, khóa cần phải đủ ngắn để việc làm khóa, phân phối và lưu
trữ được hiệu quả.
Hầu hết các thuật toán mã hóa khối sử dụng lặp đi lặp lại các hàm đơn giản.
Phương pháp này còn được gọi là mã hóa khối lặp. Mỗi chu kỳ lặp được gọi là một vòng
(round) và thông thường các thuật toán có từ 4 tới 32 vòng.
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.4
Rất nhiều thuật toán mã hóa khối có tính chất của mạng Feistel, hay tổng quát hơn
là hệ thống thế và hoán vị. Các thành phần sử dụng trong thuật toán là các hàm toán học,
các hàm lô gíc (đặc biệt là hàm XOR), hộp thế (S-box) và hoán vị (P-box).
Khi thiết kế mã khối cần đảm bảo hai yêu cầu sau:
- Confusion (tính gây lẫn): làm phức tạp hóa mối liên quan giữa bản mã và khóa.
Do đó cũng ngăn chặn việc suy lại ra khóa. Tính chất này dựa vào sử dụng S-box.
- Diffusion(tính khuếch tán): Làm khuếch tán những mẫu văn bản mang đặc tính
thống kê (gây ra do dư thừa của ngôn ngữ) lẫn vào toàn bộ văn bản. Nhờ đó tạo ra khó
khăn cho kẻ thù trong việc dò phá mã trên cơ sở thống kê các mẫu lặp lại cao. Tính chất
này có được dựa vào sử dụng P-box kết hợp với S-box.
Mã khối có ưu điểm là tốc độ mà hóa rất nhanh, linh hoạt hơn trong việc xây dựng
các số giả ngẫu nhiên, dòng khóa… Mã khối có thể ứng dụng cho cả các thuật toán mã
hóa bí mật và mã hóa khóa công khai.
Một số hệ mã nổi tiếng như: Lucifer(1969), DES(1977), AES, RC4, GOST…
1.2. Một số kĩ thuật Padding
Trong mã hóa khối, hàm mã hóa và giải mã thường lấy đầu vào là một block 1
khối dữ liệu có độ dài nhất định (4bytes, 8bytes….). Vì vậy, với một đoạn dữ liệu có độ
dài lớn, người ta thường chia nó thành các đoạn nhỏ (trùng với độ dài input của thuật
toán mã hóa) và má hóa lần lượt. Vì đoạn dữ liệu được tách ra trong quá trình mã hóa, sẽ
gây ra trường hợp block cuối cùng sẽ ngắn hơn kích thước (size) cần, trong trường hợp
này người ta sẽ thêm vào sau một số kí tự, kỹ thuật này gọi là Padding.
Hình 2.
Một số ví dụ về kỹ thuật Padding với Block size là 8 byte
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.5
1.1.1. Bit Padding
Trong kỹ thuật này, một bit 1 sẽ được thêm vào khối tin. Sau đó là các bit 0.
Ví dụ: Đệm 9 bit vào sau một đoạn 23 bit để được khối tin 32 bit :
…| 1011 1001 1101 0100 0010 0111 0000 0000 |
1.1.2. Byte Padding
a) Chuẩn ANSI X.923
Theo tiêu chuẩn ANSI X.923, Các byte 0 được thêm vào sau, riêng byte cuối dùng
để xác định số byte được thêm vào.
Ví dụ: Trong ví dụ sau kích thước khối là 8 byte và số byte cần thêm vào là 4
byte(trong hệ Hexa):
…| DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
b) Chuẩn PKCS#5 và PKCS#7
Trong PKCS#7, giá trị của mỗi byte thêm vào chính bằng số byte được thêm vào.
Phần byte được Padding sẽ có dạng là:
01
Nếu số byte thêm vào là 1 byte
02 02
Nếu số byte thêm vào là 2 byte
03 03 03
Nếu số byte thêm vào là 3 byte
04 04 04 04
Nếu số byte thêm vào là 4 byte
Ví
dụ:
Trong
ví
dụ
sau,
kích
khốivào
là 8làbyte,
số byte cần thêm là 4 byte:
05 05 05 05 05
Nếu
số thước
byte thêm
5 byte
…..…| DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |
PKCS#5 giống hệt PKCS#7, ngoại trừ việc nó chỉ được sử dụng cho mật mã khối
có kích thước khối là 64 bit (8 byte). Trong thực tế, hai chuẩn này có thể sử dụng thay thế
cho nhau.
c) Chuẩn ISO/IEC 7816-4
Theo ISO/IEC 7816-4, byte đầu tiên được thêm vào bắt buộc phải có giá trị là 80
(trong hệ Hexa). Các byte tiếp theo là 00.
Ví dụ: Kích thước khối là 8 byte, số byte cần thêm vào là 4 byte:
…| DD DD DD DD DD DD DD DD | DD DD DD DD 80 00 00 00 |
1.1.3. Zero Padding
Tất cả các byte được thêm vào là số 0, kỹ thuật này không được coi là một chuẩn
để mã hóa.
Ví dụ: Kích thước khối là 8 byte, số byte cần thêm là 4 byte:
…| DD DD DD DD DD DD DD DD | DD DD DD DD 0 0 0 0 |
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.6
1.3. Giới thiệu CBC mode trong hoạt động mã khối
Trong chế độ này, mỗi khối tin trước khi được mã hóa thì được XOR với khối mã
sinh ra từ bước trước đó.
X1 = X1’ ⊕ IV
X2 = X2’ ⊕ Y1
...
Xi = Xi’ ⊕ Yi-1
Mô hình CBC như hình dưới. Ci = E(Pj ⊕ Ci-1, K) với i=2,3…N-1
Việc mã hóa khối đầu tiên, người ta dùng một khối dữ liệu giả được gọi là vecter
khởi tạo (initialization vecter-IV) và được chọn ngẫu nhiên: C 1 = E(K,[IV⊕P1])
Để giả mã, tiến hành ngược lại:
P1=D(K,C1) ⊕IV
Pj= D(K,Cj) ⊕ Cj-1 với j= 2,…,N
Hình 3.
Mô hình CBC của mã khối
Như vâỵ các khối mã đều phụ thuộc rất chặt theo kiểu “móc xích”. Người mã hóa
và giải mã phải sử dụng chúng một vector khởi tạo IV. Vector khởi tạo không vần giữ bí
mật nên thường được gán vào trước bản mã trước khi truyền thông điệp (IVC 1…Cn -1).
Tóm lược,
Mã hóa
Giải mã
CBC
C1 = E(K,[IV⊕P1])
Ci = E(Pj ⊕ Ci-1, K) với i=2,3…N-1
P1=D(K,C1) ⊕IV
Pj= D(K,Cj) ⊕ Cj-1 với j= 2,…,N
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.7
CHƯƠNG 2. PADDING ORACLE ATTACK
2.1. Giới thiệu về Padding Oralce attack
Đầu tiên, lỗ hổng này không liên quan đến CSDL Oracle hay Oracle company.
Trong mật mã học, một “oracle ” là một hệ thống mà việc mã hóa thực hiện bởi việc
tham gia vào đầu vào nhất định. Có thể hiểu, oracle là một hộp đen đáp ứng các yêu cầu.
Có thể hình dung nó như giao thức dựa trên hàm băm, với một đầu vào ngẫu nhiên, nó sẽ
trả về một đầu ra dữ liệu ngẫu nhiên tương ứng. Do đó, “Padding oracle ” là một loại hộp
đen mà giải mã thông điệp đầu vào và nói cho bạn biết việc padding là đúng hay sai.
Tưởng tượng trường hợp A connect đến server B và gửi một encrypted message
(C) với key thỏa thuận từ trước và sử dụng CBC, trên B có một ứng dụng (app) làm
nhiệm vụ:
1. Nhận cypher text
2. Decrypt cypher text=> plain text
3. Kiểm tra định dạng plain text, nếu padding không đúng=> return
ER_PADDING
4. Đọc dữ liệu trong plain text => return SOMETHING_ELSE
Giả sử bằng một cách nào đó, attacker có được đoạn encrypted message (C) này,
kỹ thuật Padding oracle có thể decrypt đoạn C mà không cần key cũng như thông tin về
thuật toán mã hóa.
Bạn cũng có thể hiểu đơn giản như thế này, Padding oracle là kỹ thuật dựa vào
hành động xử lý ngoại lệ của chế độ mã khối. Dù attacker padding đúng hay sai, nó sẽ trả
về kết quả tương ứng, và từ đó, attacker dò ra được thông tin về bytes hay bít cuối cùng.
Để hiểu thêm, hãy nhìn vào hai đoạn dữ liệu dưới đây . Chúng có block size là 8.
Đoạn 1, ta có thể dễ dàng thấy rằng nó chia thành 3 đoạn với block size là 8 (8A + 8B +
8C). Nhưng với đoạn 2, phần cuối rút đi 4 chữ cái. Vì vậy để apply block size là 8, ta
phải cần đến padding
Đoạn 1: AAAAAAAABBBBBBBBCCCCCCCC
Đoạn 2: AAAAAAAABBBBBBBBCCCC
Đơn giản là padding thêm vào các đoạn bit cần thiết trước khi mã hóa để tạo các
khối rõ ràng. Dưới đây là một tình huống padding khác. Tuy nhiên, trong đây ta chỉ dùng
tiêu chuẩn PKCS #5.
Ở chuẩn PKCS#5 block cuối cùng của đoạn bản rõ được pad với N byte với giá trị
N. Ví dụ, ở hình dưới, tất cả đều có block size là 8 bytes. Tại ví dụ 1, có 5 byte thiếu, do
đó tất cả 5 chỗ trống sẽ được thêm vào giá trị 0x05. Tương tự, ví dụ 3 chỉ có 1 byte bị
thiếu, do đó các chỗ còn lại sẽ được điền với giá trị 0x01
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.8
Hình 4.
Một số ví dụ về padding
Kịch bản tấn công:
Cuối cùng với tất cả thông tin hữu ích cần phải biết, chúng ta tập trung tiến hành
tấn công. Đầu tiên giả sử ta có đoạn URL dưới đây:
/>UID=8A219A434525535FF324D4G56FC95348
Giả sử các thông tin sẽ được gửi qua tham số UID ( username ) được mã hóa ở
CBC mode và tiêu chuẩn PKCS#5. Do đó ứng dụng giã mã giá trị này và trả về kết quả.
Nói cách khác, có 3 trường hợp có thể xảy ra khi ứng dụng gửi các UID khác nhau.
Trường hợp 1: Đoạn văn bản mã hóa chính xác – Hợp lệ và load page bình thường
Trường hợp 2 Đoạn văn bản mã hóa không chính xác( với đoạn padding không
đúng ) – Page không hợp lệ ( 404 )
Trường hợp 3: Đoạn văn bản mã hóa chính xác nhưng padding không hợp lệ - Lỗi.
Ví
dụ
tình
huống
1:
Bạn
đã
gửi
giá
trị
UID
8A219A434525535FF324D4G56FC95348 và nó giải mã để thành ‘tom’. Sau đó ứng
dụng sẽ gửi một response bình thường ( đây là đoạn URL mà ‘tom’ nhận được sau khi
logging in).
Ví
dụ
tình
huống
2:
Bạn
gửi
đi
giá
trị
UID=998877PA434525535FF324D4G56FC95348 và ứng dụng sẽ giải mã thành ‘xxx’
( user không hợp lệ ). Ứng dụng có thể sẽ trả về 404 message.
Ví
dụng
tình
huống
3:
Bạn
gửi
đi
giá
trị
UID=66IXS7IA434525535FF324D4G56FC95348 và giải mã thành ‘sam’ ( user hợp lệ )
nhưng với padding không hợp lệ. Ứng dụng sẽ trả về một ngoài exception.
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.9
Do đó, nếu bạn có thể gửi các đoạn văn bản mã hóa khác nhau và tìm giải mã các
giả trị khác nhau với padding hoặc không có padding ta có thể giải mã các đoạn mã hóa
cho sẵn.
Khai thác:
Hãy nhìn vào mô hình giải mã CBC mode dưới đây:
Hình 5.
Sơ đồ giải mã trong CBC mode
Trong giải mã CBC, mỗi đoạn mã hóa được sẽ được xor với đoạn block trước để
được plaintext
Cho nên ta có:
/>6FC95348
Cipher blocks: 8A219A43| 4525535F| F324D4G5| 6FC95348
Hình 6.
CBC mode decryption
Các bước tấn công:
Nếu request dưới đây với block khởi đầu là toàn số 0, ứng dụng khả năng sẽ trả về
500
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.10
Hình 7.
Kết quả nhận được khi padding 8 byte 0
Nhưng bây giờ, gửi một request tương tự nhưng tăng giá trị của block khởi đầu lên
1
/>6FC95348
Hình 8.
Kết quả nhận được khi tăng padding block khởi đầu lên 1
Chú ý rằng mặc request trả về một error, giả trị cuối cùng của đoạn giải mã sẽ thay
đổi khi ta gửi 0x01 trong request
Do đó, nếu ta tang chỉ vài byte cuối của IV lên vài lần ( lên tới FF ) chúng ta sẽ
đạt được một giá trị padding hợp lệ.
Hình 9.
Kết quả nhận được khi padding đúng
Từ đây, chúng ta có thể suy ra " intermediary value " tại vị trí này, vì chúng ta biết
rằng khi XORed với 0x3C, nó tạo 0x01.
Nếu [intermediary Byte] ^ 0x3C == 0x01,
sau đó [intermediary Byte] == 0x3C ^ 0x01,
như vậy [intermediary Byte] == 0x3D
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.11
Một khi bạn biết giá trị byte trung gian, chúng ta có thể suy ra những gì giá trị
thực tế là giải mã. Chỉ cần XOR nó với các văn bản mật mã trước đó. Hình sau thể hiện
điều đó.
Hình 10.
Vận dụng để đoán plaintext
2.2. Using Padding Oracle attack
1.1.4. Cracking CAPTCHA
CAPTCHA là một loại kiểm thử dạng hỏi đáp được dùng trong máy tính để xác
định xem người dùng có phải là con người hay không. Đây là một quá trình một máy tính
(máy chủ) yêu cầu một người dùng hoàn tất một kiểm tra đơn giản mà máy tính có thể dễ
dàng tạo ra và đánh giá, nhưng không thể tự giải nó được. Vì máy tính không thể giải
quyết CAPTCHA, bất kỳ người dùng nào nhập vào lời giải đúng sẽ được xem là con
người. Một loại CAPTCHA phổ biến yêu cầu người dùng phải nhập các chữ cái trong
một tấm hình méo mó, đôi khi cùng với một dãy số hoặc chữ lờ mờ xuất hiện trên màn
hình. Một số hệ thống CAPTCHA dựa trên mật mã là ví dụ đơn giản nhất cho padding
oracle attack.
Một hệ thống CAPTCHA bị tổn thương làm việc như sau:
1. Server sinh một random code, mã hóa nó sử dụng CBC-mode với khóa K và
IV. ERC=EK,IV(rand())
2. ERC này sẽ được sử dụng như là một tham số cho một số captcha.jsp 1 mà
ngay khi nhận được, sẽ giải mã nó, và tạo ra một hình ảnh méo mó. Nếu một form HTML
1
tương tự với các platform và ngôn ngữ lập trình khác, ở đây sử dụng Java/JSP như một ví dụ.
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.12
để hiện một CAPTCHA, nó chỉ đặt một cái gì đó giống như /captcha.jsp?token=ERC vào
một thẻ <img> để tải một hình ảnh méo mó.
3. ERC sẽ được lưu trữ hoặc như là một trường ẩn trong các form CAPTCHA
hoặc như một cookie, vì vậy một khi một người dùng submit, nó sẽ được gửi trở lại cho
server .
4. Sau đó server đi vào giải mã ERC, và so sánh nó với mã mà người dùng đã
nhập. Nếu bằng nhau, server chấp nhận yêu cầu bằng không từ chối.
Bởi vì captcha.jsp sẽ giải mã bất kỳ ERC gửi đến nó, nên dễ bị padding oracle
attack. Bây giờ sẽ xem xét khi nào padding là VALID, và khi nào không.
May mắn là, hầu hết các hệ thống CAPTCHA sẽ gửi lại một thông báo lỗi khi thất
bại trong việc giải mã ERC, chẳng hạn, padding là INVALID. Một số server gửi hoặc
phản hồi trống hoặc HTML với một error mesage. Ngoài ra, nếu sửa đổi ERC để padding
là VALID, captcha.jsp sẽ hiển thị một hình ảnh với broken code. Nếu mọi thứ làm việc
theo cách đó, attckers đã có một padding oracle, và họ có thể sử dụng nó giải mã bất kỳ
ERC nào để nhận được mã số ngẫu nhiên , do đó hoàn toàn bỏ qua bảo vệ CAPTCHA.
CAPTCHA với IV bí mật:
P0 = IV ⊕ DPaddingOracle(C0)
Attacker cần phải biết IV để có được P 0. Nói cách khác, nếu IV là bí mật sẽ không
thể giải mã block đầu tiên và không thể phá vỡ hệ thống CAPTCHA mà P 0 chứa một
phần của mã ngẫu nhiên.
Đối với những hệ thống CAPTCHA mà tác giả đã tìm thấy trong nghiên cứu, các
IV có thể được phục hồi dễ dàng với sự can thiệp của con người. Hầu hết các lần văn bản
được hiển thị trong hình ảnh CAPTCHA chính xác giống như P 0. Vì vậy, nếu attacker
biết DPadding Oracle(C0), sau đó họ có thể tính toán IV bí mật như sau:
IV = Human ⊕ DPaddingOracle(C0)
Ở đây ký hiệu Human chỉ ai đó đọc P0 từ hình ảnh CAPTCHA. Điều này là rất hữu
ích để tấn công các hệ thống CAPTCHA, khám phá IV một lần duy nhất cho phép
attacker giải mã bất kỳ thách thức mới, do IV là không thay đổi, khi không có bất kỳ sự
can thiệp nào của con người.
1.1.5. Giải mã JSF ViewStates
JavaServer Faces (JSF) giới thiệu một hệ thống mạnh mẽ và linh hoạt để lưu và
khôi phục lại trạng thái của thời điểm giữa các request gửi đến server. Triển khai JSF hỗ
trợ hai cơ chế chính để lưu trạng thái, dựa trên các giá trị của javax.faces và các tham số
khởi STATE_SAVING_METHOD. Nếu tham số này được thiết lập cho client, trạng thái
được lưu bao gồm trong việc đánh dấu thời điểm postback được gửi cho client (chẳng
hạn như trong một hidden input cho HTML?). Các thông tin trạng thái phải bao gồm các
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.13
yêu cầu tiếp theo, làm cho JSF có thể khôi phục lại mà không cần thông tin được lưu trên
server.
Mặc dù đặc điểm kỹ thuật JSF khuyên rằng thông tin states phải được mã hóa và
giả lộn xộn, nhưng như chúng ta biết thì nó không được thực hiện. Một số framework
như SUN Mojarra and Apache MyFaces có mã hóa thông tin states, nhưng họ không bảo
vệ sự toàn vẹn của states được mã hóa mà làm cho chúng dễ bị tấn công padding oracle.
Theo mặc định, tất cả các framework JSF sẽ hiển thị một thông báo lỗi rất chi tiết
nếu giải mã một view stste thất bại, điều này làm cho việc padding oracle trở lên rất rõ
ràng: nếu thấy javax.crypto.BadPaddingException thì padding INVALID, nếu không là
padding VALID.
Hầu hết các JSF framework cho phép tắt chức năng thông báo lỗi. Do đó, attacker
có thể sử dụng một số thủ thuật sau. Nếu attacker muốn giải mã block C i của mã hóa
view state C0|C1|...|Cn – 1, sau đó sẽ gắn thêm random C i để tạo thành C0|C1|...|Cn-1|Crandon|Ci
và gửi thông điệp này tới server. Vì JSF framework lờ đi giả mã block thêm vào này khi
giải mã và deserializing viewstate mà attacker có thể đánh cược việc padding là VALID
nếu server trả về trang giống như khi chưa tác động. Nó có thể là INVALID padding nếu
thấy có sự thay đổi, như một thông báo lỗi HTML 500. Viewstates thường không chứa
các dữ liệu nhạy cảm, nhưng chú ý rằng nó cũng có thể chứa quản lý những dữ liệu bí
mật.
2.3. Một số Web Framework dễ bị tấn công Padding Oralce
1.1.6. Ruby On Rails
Ruby On Rails được tạo ra vào năm 2003, là một trong những framework phát
triển web sử dụng rộng rãi nhất trên thế giới. Kể từ phiên bản 2.3, Ruby On Rails đã giới
thiệu ActiveSupport :: MessageEncryptor, một tập hợp các chức năng cung cấp một cách
mã hóa thông tin đơn giản để lưu trữ trong một vị trí không đáng tin cậy (như cookie).
Nếu bạn nhìn vào mã nguồn của ActiveSupport :: MessageEncryptor, có thể bạn sẽ thấy
rằng ứng dụng cung cấp chức năng mã hóa/ giải mã có thể bị tấn công padding oracle.
Mặc dù vậy, họ vẫn giữ nó.
1.1.7. OWASP ESAPI
OWASP ESAPI, viết tắt của OWASP Enterprise Security API Toolkits, là một dự
án yêu cầu bồi thường để "giúp các nhà phát triển phần mềm bảo vệ chống lại an ninh
liên quan đến thiết kế và thực hiện sai sót". Tuy nhiên, tất cả các OWASP ESAPI cho
Java lên đến phiên bản 2.0 RC2 đều dễ bị tấn công padding oracle.
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.14
KẾT LUẬN
Trong đề tài “Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối”,
nhóm em đã trình bày và phần nào làm rõ được kỹ thuật tấn công padding oracle. Các kỹ
thuật tấn công cơ bản và nâng cao.
Tài liệu được viết dưới đây chỉ mang tính chất tìm hiểu, do trình độ cũng như kinh
nghiệm ứng dụng thực tế của nhóm còn hạn chế nên chắc chắn không thể tránh khỏi
những sai sót. Mong rằng thầy cô và các bạn nhiệt tình đóng góp ý kiến để chúng em có
thể hoàn thiện và tiếp thu những kiến thức đúng đắn và bổ ích.
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.15
TÀI LIỆU THAM KHẢO
[1]
Nguyễn Đình Vinh, Trần Đức Sự, Vũ Thị Vân, Giáo trình Cơ sở an toàn thông
tin, Học viện Kỹ thuật mật mã, 2013
[2]
/>[3]
Juliano Rizzo & Thai Duong, Practical Padding Oracle Attacks
[4]
/>[5]
/>,
Tìm hiểu tấn công Padding Oracle lên chế độ CBC của mã khối
Tr.16