Tải bản đầy đủ (.docx) (17 trang)

TÌM HIỂU VỀ CAPTCHAR VÀ PHƯƠNG PHÁP TẠO CAPTCHAR PTIT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (326.61 KB, 17 trang )

BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
✍ •✍

BÁO CÁO
MÔN : AN TOÀN ỨNG DỤNG WEB
ĐỀ TÀI:TÌM HIỂU VỀ CAPTCHAR VÀ PHƯƠNG
PHÁP TẠO CAPTCHAR


MỤC LỤC
I.

I. TỔNG QUAN VỀ CAPTCHA
1.

Khái niệm về CAPTCHA.
- CAPTCHA: viết tắt của cụm từ Completely Automated Public Turing
test to tell Computers and Humans Apart, là hình ảnh chứa xác nhận bị
bóp méo, gây khó nhận biết với máy móc nhưng đơn giản với con
người, nhằm giúp phân biệt đối tượng đang truy cập là người hay máy.
Những hình ảnh này có thể là kí tự, chữ số, hình ảnh về động vật, biển
bảo giao thông, vân vân.
- CAPTCHA được đặt ra vào năm 2000 bởi Luis von Ahn, Manuel
Blum, Nicholas Hopper and John Langford của đại học Carnegie
Mellon.
- CAPTCHA được tạo ra nhằm ngăn chặn các ứng dụng có thể thực hiện
một cách tự động trên trình duyệt web của người dùng. Mã CAPTCHA
thường được sử dụng trên các trang đăng kí tài khoản, lấy ý kiến trên
blog, các trang bình chọn,…nhằm giảm lượng spam ảo.
II. PHÂN LOẠI CAPTCHA.


Có rất nhiều loại CAPTCHA khác nhau, tùy thuộc vào mức độ phức tạp
của hình ảnh. Sau đây là 5 loại mã CAPTCHA phổ biến nhất.


1. The Standard Distorted Word CAPTCHA with an Audio
Option(Chuẩn Captch bị bóp méo với một lựa chọn âm thanh): xuất phát từ
các công ty CAPTCHA phổ biến trên mạng, reCAPTCHA. Nó khá tin cậy,
nhưng một số hình ảnh bị bóp méo hơi khó để giải quyết. Nếu quá khó để
nhập đúng mã CAPTCHA thì nó cho phép “reCAPTCHA” để tạo một hình
ảnh mới. Hoặc một tùy chọn bằng âm thanh đề phòng trường hợp nhập mã
không khả quan.

2. Picture Identification CAPTCHA(Mã CAPTCHA xác thực bằng
hình ảnh): loại mã này yêu cầu người dùng lựa chọn hình ảnh sao cho phù
hợp với câu hỏi được yêu cầu. Việc xác thực bằng hình ảnh khá dễ dàng so
với xác thực bằng “The Standard Distorted Word CAPTCHA with an
Audio Option”.


3. Math Solving CAPTCHA(Mã CAPTCHA xử lý toán học): Một hình
ảnh chứa một phép toán số học yêu cầu người dùng tính toán và nhập kết
quả để xác nhận.


4. 3D CAPTCHA(Mã CAPTCHA 3D): Loại CAPTCHA này rất khó
đọc, là kẻ thù của robot. Có một số loại 3D CAPTCHA bao gốm cả hình
ảnh và âm thanh. Chúng được gọi là “Super-CAPTCHA”.

5. Ad-injected CAPTCHA(Mã CAPTCHA chèn quảng cáo): Đây là loại
mã CAPTCHA đơn giản nhưng có chèn thêm thương hiệu vào cùng với

mã CAPTCHA nhằng quảng cáo cho thương hiệu đó.


III. CÁC ỨNG DỤNG CỦA CAPTCHA
1. Preventing Comment Spam in Blogs(Ngăn chặn rác trong các trang
Blogs thảo luận): Hầu hết các trang Blog đã quen với các chương trình gửi
ý kiến không có thực, thường dùng với mục đích nâng cao thứ hạng trên
các công cụ tìm kiếm của một số trang web. Nó được gọi là các bình luân
rác. Bằng cách sử dụng CAPTCHA, chỉ có con người mới có thể bình luận
vào trong một Blog. Không yêu cầu người dùng phải đăng nhập trước khi
họ đăng bình luận, và không có bình luận chính đáng nào bị bỏ qua.

2. Protecting Website Registration(Bảo vệ đăng kí Website): Một vài
công ty(Yahoo!, Microsoft, vân vân) cung cấp dịch vụ email miễn phí. Một
vài năm trước, hầu hết các dịch vụ này phải chịu một loại hình tấn công:
“bots” sẽ đăng kí hàng nghìn tài khoản email mỗi phút. Và giải pháp cho
vấn đề này là sử dụng CAPTCHA để đảm bảo rằng chỉ có con người mới
đăng kí được email. Nói chung, các dịch vụ miễn phí nên được bảo về với
một CAPTCHA để ngăn chặn lạm dụng bời kịch bản đăng kí tự động.


3. Protecting Email Addresses From Scrapers(Bảo vệ địa chỉ email khỏi
kẻ thu thập): Những kẻ gửi thư giác thu thập địa chỉ email trên các trâng
web. CAPTCHA cung cấp một cơ chế hiệu quả để ẩn địa chỉ email của
bạn đọc tự Web. Ý tưởng là yêu cầu người dùng nhập mã CAPTCHA
trước khi hiển thị địa chỉ email của bạn.
4. Online Polls(Bình chọn trức tuyến): Vào tháng 11 năm 1999,
tổ chức một cuộc bình chọn trực tiếp trường đại
học có ngành khoa học máy tính tôt nhất(một câu hỏi nguy hiểm trên web).
Giống như các trường hợp bình chọn online, địa chỉ IP của người bình

chọn được ghi lại để đảm bảo người bỏ phiếu bỏ nhiều hơn 1 lần. Tuy
nhiên, sinh viên đại học Carnegie Mellon(CMU) tìm thấy một cách để nhét
phiếu bình chọn sử dụng chương trình bình chọn cho CMU hàng ngàn lần.
Điểm CMU tăng nhanh chóng. Ngày hôm sau, học sinh tại MIT lại viết
chương trình riêng của họ và cuộc bình chọn đã trở thành cuộc thi giữa 2
“bot”. MIT đã hoàn thành với 21.156 phiếu bầu, CMU với 21.032 phiếu
bầu và mỗi trường khác chỉ có ít hơn 1.000 phiếu bầu. Do vậy, sử dụng mã
CAPTCHA trong bình chọn trực tuyến giúp giảm hẳn trường hợp phiếu ảo
từ “bot”.
5. Preventing Dictionary Attacks(Ngăn chặn tấn công từ điển):
CAPTCHA cũng có thể được sử dụng để ngăn chặn cuộc tấn công từ điển
trong các hệ thống mật khẩu. Ý tưởng rất đơn giản: ngăn chặn một chương
trình có thể tự động điền toàn bộ không gian của mật khẩu bằng cách yêu
cầu nó giải quyết một CAPTCHA sau khi đăng nhập một số lần không
thành công. Điều này hiệu quả hơn so với các phương pháp khóa tài khoản
khi người dùng nhập sai một số lần, hạn chế tình trạng kẻ tấn công có thể
khóa tài khoản của nạ nhân theo ý muốn.
6. Search Engine Bots(Công cụ tìm kiếm Bot): CAPTCHA được sử dụng
để ngăn chặn việc tìm kiếm một trang web khó hơn, xuất phát từ yêu cầu
của chủ trang web.


7. Worms and Spam(Sâu và thư rác): CAPTCHA cũng cung cấp một giải
pháp hợp lý đối phó với sâu email và thư rác.
IV. TRIỂN KHAI CAPTCHA
Nếu trang web của bạn cần được bảo về khỏi sự lạm dụng, thì bạn nên sử
dụng CAPTCHA. Có rất nhiều cách triển khai CAPTCHA, một số cách tốt
hơn so với người khác. Sau đây là các hướng dẫn được khuyến khích cho
bất kỳ mã CAPTCHA nào:
1. Accessibility(Khả năng tiếp cận): CAPTCHA phải được truy cập.

CAPTCHA chỉ dựa trên văn bản đọc hoặc các nhiệm vụ trực quan- ngăn
chặn người dùng khiếm thị tiếp cận với các nguồn tài nguyên được bảo vệ.
Bất kỳ một CAPTCHA nào cũng nên cho phép người khiếm thị có thể xác
nhận được mã. Ví dụ như cho phép người dùng lực chọn xác nhận bằng âm
thanh.
2. Hình ảnh an ninh: Hình ảnh CAPTCHA của văn bản nên bị bóp méo
một cách ngẫu nhiên trước khi được trình bày cho người sử dụng. Nhiều
CAPTCHA sử dụng văn bản không bị biến dạng hay văn bản bị bóp méo
ít, dễ bị tấn công bỏi các công cụ tự động.
3. Script Secure: Xây dụng mã CAPTCHA an toàn không dễ dàng. Ngoài
ra để làm những hình ảnh có thể đọc được bằng máy tính, hệ thống phải
đảm bảo rằng không có cách nào dễ dàng xung quanh việc tấn công nó.
4. Security Even After Wide-Spread Adoption: Có rất nhiều CAPTCHA
không an toàn khi có nhiều trang web cùng sử dụng chúng. Khi một trang
bị vượt qua mã CAPTCHA, thì các trang khác cũng sẽ bị kéo theo. Điều
này tạo động lực cho kẻ tấn công cố gắng khai thác lỗ hổng CAPTCHA.
5. Should I make Own CAPTCHA: Tự làm CAPTCHA là một ý tưởng
tồi, nó dễ gây ra lỗ hổng và dễ thất bại. Cách tốt nhất là bạn nên sử dụng
các dịch vụ được cung cấp sẵn như “re CAPTCHA”.

V. CÁC CÁCH THỨC TẤN CÔNG CAPTCHA.


Tính khả dụng của CAPTCHA trước tiên được đánh giá qua khả năng
chống lại các cuộc tấn công tự động. Tuy nhiên, rất nhiều hệ thống
CAPTCHA đã bị phá vỡ một cách tương đối dễ dàng. Chẳng hạn như dịch
vụ Microsoft CAPTCHA dựa trên những đoạn văn bản được sử dụng để
bảo vệ các dịch vụ trực tuyến của Microsoft. Dịch vụ này được đưa vào sử
dụng từ năm 2002, nhưng tới năm 2008 đã bị giải bởi Je Yan và El Ahmad
của đại học Newcastel (Anh). Đến năm 2011, các nhà khoa học thuộc

trường đại học Stanford (Mỹ) cũng đã giải thành công 13 trong số 15 cơ
chến

CAPTCHA

phổ

biến

nhất

được

sử

dụng.

Điều đáng chú ý là, để giải được các cơ chế CAPTCHA, tin tặc nhiều khi
không cần bỏ công nghiên cứu, phát triển các phần mềm nhận dạng tiên
tiến mà có thể qua mặt quá trình sinh và kiểm tra phức tạp trên bằng nhiều
cách khác nhau, trong đó có hai loại phổ biến nhất là tấn công vào máy
khách và tấn công vào máy chủ.
1. Tấn công máy khách.
Do có nhiều lập trình viên thực hiện việc sinh, lưu trữ và kiểm tra
CAPTCHA tại máy khách (điều này đi ngược các nguyên tắc thiết kế an
toàn cho các hệ thống phân tán và ứng dụng web) nên tin tặc có thể truy
xuất lời giải CAPTCHA. Một số cách tấn công máy khách phổ biến gồm:
- Tấn công vào các trường ẩn và vùng lưu trữ trên máy khách: các trường
ẩn và vùng lưu trữ trên máy khách luôn được coi là không an toàn để
truyền nhận thông tin giữa máy chủ và máy khách. Những giải pháp sử

dụng JavaScript và các trường ẩn để kiểm tra CAPTCHA ở phía máy
khách sẽ không mang lại giá trị bảo vệ nào và có thể bị tin tặc tấn công
một cách dễ dàng.
- Tấn công lựa chọn giá trị chuỗi CAPTCHA: Một số website đặt các
hàm sinh CAPTCHA ở phía máy khách và các thành phần kiểm tra trên
máy chủ. Tuy nhiên, ngay cả những giải pháp CAPTCHA không sử


dụng mã lệnh trên máy khách cũng không phải đã an toàn 100%. Tin
tặc vẫn có thể tấn công CAPTCHA phía máy chủ.
2. Tấn công máy chủ.
- Tấn công bằng bảng Rainbow cho CAPTCHA: Việc sinh các hình ảnh
ngẫu nhiên là một phần quan trọng của một hệ thống CAPTCHA an
toàn. Hầu hết các website hiện đang dùng một số hữu hạn các giá trị
CAPTCHA và mỗi giá trị đó được gán một mã định danh. Mã định
danh đó được gửi tới máy khách như một trường ẩn, hay một phần của
URL khi nhận hình ảnh CAPTCHA. Với những website sử dụng mã
định danh CAPTCHA tĩnh, phần lớn các hình ảnh CAPTCHA có thể
được tải xuống, xử lý bằng các phần mềm OCR hay xử lý thủ công để
tạo nên một bảng Rainbow. Khi máy chủ trả về một mã định danh
CAPTCHA đã được giải, thì lời giải sẽ được tìm thấy ngay trong bảng
và được gửi lên để vượt qua mặt công đoạn kiểm tra. Ngược lại, máy
khách cũng có thể gửi liên tiếp các yêu cầu CAPTCHA cho đến khi
một hình ảnh với mã định danh đã biết được trả về. Với những website
sử dụng mã định danh CAPTCHA động cho một số hình ảnh hữu hạn,
tin tặc vẫn có thể lập các bảng Rainbow dựa trên giá trị băm (MD5 hay
SHA1) của hình ảnh. Khi nhận một hình ảnh CAPTCHA mới, chúng sẽ
tính giá trị băm rồi dùng nó để tìm lời giải tương ứng với giá trị băm đó
từ bảng dữ liệu có sẵn.
- Tấn công lựa chọn CAPTCHA với mã định danh nhất định: Trong một

số giải pháp, máy chủ trả về mã định danh CAPTCHA cho máy khách,
nhưng không lưu mã định danh hay lời giải tương ứng trong phiên
HTTP. Khi máy khách gửi tin lên, máy chủ mới trích xuất mã định
danh từ trong đó và dùng nó để tìm kiếm lời giải tương ứng. Tin tặc có
thể lợi dụng điều đó để nhận dạng một hình ảnh CAPTCHA duy nhất,
lưu lại mã định danh và lời giải rồi gửi những thông tin đó trong hàng
loạt yêu cầu kiểm tra khác nhau. Một biến thể khác của kiểu tấn công


này là vét cạn (thử nhiều lần liên tiếp) trong cùng phiên làm việc. Khi
đoạn mã sinh hình ảnh CAPTCHA mới và thiết lập lời giải trong phiên
HTTP làm việc độc lập với đoạn mã kiểm tra CAPTCHA, đoạn mã
kiểm tra CAPTCHA không xoá lời giải trong phiên HTTP, tin tặc có
thể gửi đi, gửi lại các câu trả lời khác nhau cho cùng một hình ảnh để
dò ra câu trả lời đúng.
- Tấn công CAPTCHA tích lũy: Một số giải pháp CAPTCHA tích lũy
các lời giải hay mã định danh CAPTCHA trong phiên HTTP. Điều đó
có nghĩa là với mỗi yêu cầu nhận hình ảnh CAPTCHA mới, những giá
trị cũ vẫn được giữ lại và lời giải hay mã định danh của CAPTCHA
mới được thêm vào phiên HTTP. Tin tặc có thể lợi dụng cách làm này
để nhận dạng thủ công một hình ảnh CAPTCHA cho một phiên HTTP,
sau đó dùng lại lời giải/mã định danh đó cùng với Session ID cho nhiều
lần gửi thông tin lên máy chủ.
- Tấn công bằng cách dùng phần mềm nhận dạng: Không phải giải pháp
CAPTCHA nào cũng xử lý đủ tốt để ngăn chặn các phần mềm OCR.
Giải pháp CAPTCHA có thể bị qua mặt bởi những phần mềm nhận
dạng tiên tiến. Hơn thế nữa, tin tặc có thể sử dụng đồng thời nhiều phần
mềm OCR khác nhau để tấn công: hình ảnh CAPTCHA được sao chép
về để cho các cơ chế nhận dạng khác nhau xử lý đồng thời. Nếu cách
triển khai CAPTCHA có lỗ hổng để tấn công vét cạn có thể khai thác

trong cùng phiên làm việc, thì việc sử dụng nhiều phần mềm
CAPTCHA khác nhau có thể giảm đáng kể số lần cần thử, để tìm ra lời
giải đúng cho một phiên HTTP.
- Tấn công bằng cách sử dụng con người để nhận dạng: Từng có giả định
rằng, tin tặc có thể sử dụng các website có nội dung xấu để chuyển yêu
cầu nhận dạng CAPTCHA từ các website nghiêm túc sang, qua đó lợi
dụng những người muốn truy cập nội dung không lành mạnh này để
giải mã thay cho các máy gửi spam. Tuy nhiên, cách làm đó không đảm
bảo duy trì dịch vụ liên tục và lại quá phức tạp. Bên cạnh đó cũng tồn


tại một loại hình dịch vụ nhận dạng bằng cách sử dụng lao động giá rẻ
ở một số nước châu Á thông qua trang web kolotibablo.com. Trang này
cung cấp API để khách hàng của họ có thể gửi các hình ảnh
CAPTCHA theo thời gian thực cho mình và nhận về giá trị do những
nhân công giá rẻ này nhận diện. Họ cho biết có khoảng 500-1000 nhân
công làm việc trực tuyến trên toàn thế giới và con số này vẫn đang tiếp
tục tăng lên.
VI. HẠN CHẾ CỦA CAPTCHA VÀ CÁC PHUONG THỨC THAY
THẾ
- Việc hoàn thành một CAPTCHA không phải là một công việc dễ dàng.
Nhiều người cho rằng, nên ngừng sử dụng CAPTCHA vì chúng gây
khó khăn cho những người có thị lực kém, rối loạn khả năng đọc
(dyslexia) hay có những chứng bệnh đặc biệt khác. Việc chuyển trách
nhiệm từ chủ sở hữu các website sang những người dùng (những người
góp phần tạo nên giá trị của website) không phải là cách tốt nhất. Xét
từ khía cạnh pháp lý, việc sử dụng CAPTCHA có thể khiến chủ sở hữu
website bị người dùng kiện và một số nơi đã có quy định về vấn đề này.
Vì thế, trong Dự án mở về bảo mật ứng dụng web (OWASP) cũng
khuyên, nên thận trọng khi quyết định sử dụng CAPTCHA. Bên cạnh

đó, những giải pháp CAPTCHA sử dụng âm thanh (audio captcha)
cũng có nhiều vấn đề hạn chế liên quan đến ngôn ngữ và cũng không
an toàn hơn so với các CAPTCHA sử dụng hình ảnh (phần mềm
DeCAPTCHA của các nhà nghiên cứu ở đại học Stanford có khả năng
nhận

dạng

thành

công

75%

audio

captcha

của

eBay).

- Những thất bại trong việc tìm kiếm các giải pháp CAPTCHA tiện lợi
cho người dùng, khiến chúng ta cần xem xét một cách nghiêm túc việc
sử dụng CAPTCHA và tìm kiếm những hướng đi mới. Dù các hệ thống


trí tuệ nhân tạo có rất nhiều tiến bộ nhưng phần lớn các cơ chế chống
spam vẫn rất thô sơ. Trong khi đó, những nghiên cứu phá vỡ
CAPTCHA xuất hiện ngày một nhiều và tin tặc thì chủ yếu tập trung

khai thác những lỗ hổng trong lôgic ứng dụng thay vì cố gắng nhận
dạng tự động, điều này khiến hy vọng việc sử dụng CAPTCHA sẽ thúc
đẩy công nghệ nhận dạng trở nên khó khăn. Dưới đây là một số gợi ý


thể

thay

thế

cho

CAPTCHA:

- Sử dụng các giải pháp Akismet, Mollom và SBlam! để phân tích dữ
liệu do máy khách gửi lên, từ đó có thể tự động phát hiện spam.
Mollom đôi khi vẫn sử dụng CAPTCHA, nhưng chỉ trong trường hợp
hệ thống không thể xác định chắc chắn. Các website cũng có thể phát
triển hệ thống riêng dựa trên các giải pháp lựa chọn phù hợp.
- Năm 2007, Phil Haack đề xuất một phương pháp thông minh để phát
hiện những máy gửi spam đó là thêm một trường ẩn vào web form. Các
phần mềm tự động sẽ tương tác với mã HTML gốc chứ không phân
tích kết quả của chúng, do đó không phát hiện việc người dùng không
nhìn thấy trường ẩn. Nếu có dữ liệu trong trường ẩn, thì máy chủ có thể
chắc chắn rằng dữ liệu gửi tới không phải là do người dùng thực cung
cấp. Phương pháp này có thể được phức tạp hóa bằng cách dùng
JavaScript và băm dữ liệu. Các biện pháp làm rối đó có độ an toàn
không quá cao, nhưng chúng ta có thể giả định rằng những máy gửi
spam tự động sẽ không đủ tinh vi để nhập đúng thông tin. Ngoài ra, có

thể dùng JavaScript để tự động điền vào các trường ẩn, sau đó máy chủ
sẽ kiểm tra xem có khớp không. Việc kiểm tra thêm thời gian và dữ
liệu phiên có thể phát hiện ra những lần gửi dữ liệu tự động.


- Ngoài ra, các phương pháp như đo thời gian nhập thông tin vào mẫu
hay soạn thảo bình luận, theo dõi thao tác di chuột và gõ phím của
người dùng tại máy khách cũng có thể dùng để phân biệt người dùng
thực sự với máy móc. Tất nhiên, chúng chỉ có thể dùng như những biện
pháp bổ trợ chứ không thể là giải pháp chính cho cuộc chiến chống
spam.
- Cuối cùng, có thể tích hợp website với các mạng xã hội phổ biến để
góp phần hạn chế việc gửi tin nặc danh. Các dịch vụ tích hợp như
Janrain cho phép các website kết nối với các mạng xã hội khác nhau.
VII. DEMO TẠO VÀ KIỂM TRA MÃ CAPTCHA.
- Trang web sau đây sử dụng ISP và SERVLET để tạo và kiểm tra mã
CAPTCHA.
- Trang web bao gồm 4 thành phần: thành phần tạo hình ảnh chứa mã
CAPTCHA(CreateCaptcha.jsp), thành phần tạo form nhập cho người
dùng(Form.jsp),

thành

phần

đối

chiếu




CAPTCHA

(Controlprocess.java), thành phần thông báo khi nhập mã CAPTCHA
thành công(Home.jsp).
- Thành phần đầu tiên tạo hình ảnh chứa mã CAPTCHA:
• Tạo chuỗi mã gồm 6 ký tự, sử dụng hàm Random, và một mảng
chứ các ký tự và gửi sang Controlprocess.java để xử lý tiếp.

• Tạo ảnh chứa chuỗi mã vừa tạo.


- Thành phần thứ 2 là giao diện nhập mã CAPTCHA.

- Thành phần cuối cùng đối chiếu 2 mã CAPTCHA được gửi từ
CreateCaptcha.jsp và Form.jsp. Nếu thành công thì sẽ chuyển sang
trang thông báo thành công(Home.jsp).


- Thành phần thông báo khi nhập mã thành công.

TÀI LIỆU THAM KHẢO
• Luis von Ahn , Ben Maurer, Colin McMilen, David Abraham and Manuel Blum.

reCAPTCHA: Human – Based Character Recoqnition via Web Security Measures.
In Science.
• Jennifer Tam, Jiri Simsa, Sean Hyde, and Luis von Ahn. Breaking Audio
CAPTCHAs. In Advances in Neural Information Processing Systems( NIPS).
• Luis von Ahn , Manuel Blum and John Langford. Telling Humans and Computers
Apart Automatically. In Communications of the ACM



• Luisvon Ahn , Manuel blum, Nicholas Hopper, and John Langford. CAPTCHA:
Using Hard AI Problems for Security. In Eurocrypt.



×