Clickjacking là một loại hình tấn
công liên quan trực tiếp với người dùng và không thể diễn ra nếu không
có sự tham gia của người dùng. Theo nghĩa nào đó, Clickjacking một kỹ
thuật nhằm đánh cắp các “cú click” của người dùng.
Clickjacking là gì?
Khi thực hiện một cú click, người dùng nghĩ là mình nhấn chuột lên một
đối tượng đang hiển thị trên màn hình, nhưng thực ra lại đang truy cập
vào một trang web hoàn toàn khác. Điều đó xảy ra là do một số tính chất
của ngôn ngữ HTML đã bị lợi dụng, như: Một trang web có thể chứa một
trang web khác bằng cách sử dụng thẻ iframe. Các phần tử của trang web
(HTML element) có thể tồn tại ở dạng hiện rõ, bị làm mờ, hoặc bị ẩn hoàn
toàn; Nếu các HTML element chồng lên nhau thì thứ tự chồng chất được
quyết định bởi một tham số đặc biệt, gọi là z- index.
Như vậy, một phần tử HTML có thể được thiết lập để đặt trước tất cả mọi
phần tử HTML khác, nhưng lại tồn tại ở dạng ẩn và phần tử HTML đó có
thể là một trang web được tải về nhờ thẻ iframe. Trong cách thức tiến
hành tấn công Clickjacking, kẻ tấn công sẽ dùng thẻ iframe để mở một
trang web mà chúng muốn người dùng nhấn chuột vào, đồng thời đặt iframe
(được thiết lập ở chế độ ẩn) đó phía trên trang web đang được hiển thị
trên trình duyệt của người dùng. Việc này có thể thực hiện được bằng
cách sử dụng Cascading Style Streets (CSS), với tham số opacity để thiết
lập tính ẩn và tham số z-index để thiết lập thứ tự xếp chồng. Kết quả
là khi người dùng nhấn chuột vào trang web mà anh ta đang xem thì cú
nhấn chuột đó lại được tính là thực hiện trên trang web (ẩn) của kẻ tấn
công. Để người dùng nhấn chuột vào đúng vị trí mà kẻ tấn công mong muốn,
chúng sẽ sử dụng tính năng định vị tuyệt đối của CSS để thiết lập cho
vị trí đó trùng với vị trí của vùng trên trang web đang hiện mà có nhiều
khả năng người dùng sẽ nhấn chuột vào.
Thực hiện tấn công Clickjacking
Ban đầu, Clickjacking được hacker sử
dụng để kiếm tiền quảng cáo trên mạng. Để thực hiện Clickjacking, kẻ tấn
công sẽ lôi kéo người dùng truy cập vào trang web đã bị cài mã
Clickjacking. Cách sơ đẳng nhất (nhưng vẫn được dùng khá phổ biến hiện
nay) để khiến người dùng nhấp chuột, đó là hiển thị một thông báo trên
trang web mà người dùng đang xem, rằng anh ta đã trúng một giải thưởng
nào đó, rồi yêu cầu người dùng truy cập vào đường link nhất định để xem
chi tiết chương trình trúng thưởng đó.
Nếu người dùng tin vào thông báo và nhấn chuột có thể vào đường link “Cách nhận giải thưởng” thì cú nhấn chuột được tính là nhấn vào dòng quảng cáo cho Amazon của Bing (được đặt ở chế độ ẩn). Kết quả là kẻ tấn công sẽ được trả một khoản tiền nhất định.
Tuy nhiên, hình thức tấn công này cũng có thể được sử dụng với mục đích khác, ví dụ như lừa người dùng nhấn vào nút “Retwit” hay nút “Like” cho những dòng tin của kẻ tấn công, hoặc quy mô hơn, như cài một Web Shell server lên máy chủ web.
Việc sử dụng Clickjacking có thể cài (trái phép) một Web Shell server lên một máy chủ web. Tấn công này thực ra chỉ hướng đến một ứng dụng cụ thể, nhưng rất phổ biến hiện nay, đó là WordPress. Nguyên nhân dẫn đến khả năng tấn công không chỉ nằm trong bản thân WordPress mà còn do các môđun mở rộng (plugin). Việc mở trang để cài đặt plugin là quá đơn giản. Trong trang quản trị website, chỉ cần mở kho lưu trữ ra, chọn một plugin và nhấn nút Install Now (tương tự như trong FireFox). Như vậy, không gì có thể ngăn cản tải trang web này vào một iframe ẩn và đánh lừa cho nạn nhân nhấn lên nút Install Now. Tuy nhiên, bằng cách đó thì plugin mới chỉ được cài đặt chứ chưa được kích hoạt. Nhưng có thể biết chính xác rằng file plugin đó (được phân phối dưới dạng file nén ZIP) nằm ở một thư mục nhất định và có thể truy cập được. Vấn đề là ở chỗ, cần phải cài plugin nào để đạt được mục đích. Có hai sự lựa chọn là: đưa vào kho chứa một plugin có tính năng Trojan (và thực hiện Clickjacking để plugin đó được cài đặt) hoặc tìm một plugin có lỗ hổng bảo mật và khai thác nó. Phương án hai dường như đơn giản hơn, và đã được khai thác. WordPress cũng đã vá lỗ hổng Clickjacking trên đây vào tháng 5/2011 (phiên bản 3.1.3).
Tấn công Clickjacking nâng cao
Dù rằng tấn công trên đây đã mang lại
hiệu quả ấn tượng (lấy được shell), nhưng kỹ thuật Clickjacking được sử
dụng trong đó là quá đơn giản. Có những kỹ thuật Clickjacking phức tạp
hơn nhiều, giúp mở rộng khả năng mà kẻ tấn công có thể đạt được, ví dụ
như:
- Có thể khiến người dùng không chỉ đơn giản là nhấn chuột, mà còn thực
hiện kéo - thả các đối tượng. Ví dụ, dịch chuyển một đoạn text vào form.
Hoặc có thể dịch chuyển text ra khỏi iframe, qua đó kẻ tấn công đạt
được khả năng thu được các dữ liệu hữu ích (như thông tin ẩn trên các
mạng xã hội chẳng hạn).
- Khiến người dùng nhập dữ liệu (như mật khẩu) vào form.
- Có thể điều khiển vùng hiển thị trong iframe thông qua anchor để định vị thuận tiện hơn.
- Có thể thiết kế một iframe ẩn dõi theo sự di chuyển của con trỏ chuột
để “cướp lấy” sự kiện nhấn chuột, không cần biết người dùng đã nhấn
chuột ở vị trí nào. Và như thế, không phải quan tâm đến vấn đề định vị
nữa.
- Có thể thiết kế để người dùng thực hiện nhiều cú nhấn chuột ở các vị
trí nhất định. Cách đây không lâu, bằng cách này, hacker đã tấn công lên
Flash Player và giành được quyền truy cập tới webcam và microphone trên
máy tính của người dùng.
Video Clickjacking and Like-Hijacking:
Truy cập trái phép webcam và microphone
Chúng ta đã biết rằng Flash Player có khả năng truy cập đến webcam và
microphone. Tính năng này được sử dụng trong rất nhiều ứng dụng web.
Mô hình tấn công Clickjacking
Việc thiết lập cấu hình cho Flash
Player có thể được thực hiện ngay từ trang web bằng cách nhấn chuột phải
lên đối tượng SWF và chọn “Options...” trong menu ngữ cảnh; Ý tưởng sử
dụng Clickjacking để truy cập webcam đã xuất hiện từ một số năm trước.
Tác giả của PoC (Proof of Concept) khi đó đã đưa trang cấu hình Flash
Player vào trong iframe ẩn; tiếp đó đề nghị người dùng tham gia vào một
trò chơi đơn giản: mỗi cú nhấn chuột của người dùng sẽ giúp kẻ tấn công
tiến gần hơn đến khả năng truy cập webcam và microphone. Ngay sau đó,
Adobe đã nhanh chóng sửa lỗi này bằng cách thêm mã bảo vệ (gọi là
framebusting) vào trang cấu hình. Kể từ đó kiểu tấn công này dần bị lãng
quên.
Nhưng gần đây một sinh viên của Đại học Stanford đã thực hiện lại thành
công kiểu tấn công trên dựa trên tính toán rằng: nếu Adobe không cho
phép đưa toàn bộ trang cấu hình vào trong iframe, vậy thì chỉ cần đưa
file SWF có chức năng cấu hình Flash Player vào iframe thôi cũng được.
Cách làm này đã đạt được kết quả.
Adobe đã vá lỗ hổng này vào cuối tháng 10/2011, sau khi các ẩn phẩm nổi
tiếng như Wired và Gizmodo đăng tải thông tin rằng Flash Player cho phép
hacker theo dõi người dùng qua webcam.
Chống lại Clickjacking
Có rất nhiều ứng dụng web có thể bị
tấn công bởi Clickjacking. Tuy nhiên, kiểu tấn công này cũng có thể dễ
dàng ngăn chặn được. Thông thường, để chống lại Clickjacking, người ta
sử dụng những kịch bản JavaScript đặc biệt, nhằm ngăn chặn việc hiển thị
trang web trong frame. Những snippet như thế được gọi là framebuster
hay framekiller và có dạng đơn giản như sau:
if (top.location != location) top.location = self.location;
Kịch bản framebuster bao gồm một cấu trúc điều kiện, nó kiểm tra xem có phải trang web được tải vào trong một frame hay không, và một đoạn mã để thực thi trong trường hợp điều kiện trên là đúng. Tuy nhiên, cách bảo vệ này có thể bị vượt qua một cách dễ dàng. Do vậy, các nhà phát triển ứng dụng đã đưa ra những cách thức kiểm tra phức tạp hơn để chống lại Clickjacking. Một công trình nghiên cứu của các chuyên gia từ Stanford về các dạng framebuster khác nhau và cách vượt qua chúng được đăng trên (http://w2spconf.com/2010/papers/p27.pdf). Các chuyên gia cũng khẳng định rằng phương pháp này không thể đảm bảo chống lại hoàn toàn Clickjacking.
Phương pháp phòng chống thứ hai (hiệu quả hơn) thuộc về các nhà phát triển trình duyệt. Họ đã đưa vào một header đặc biệt được gọi là X- FRAME- OPTIONS. Header này cho biết trang web có thể được tải vào trong một frame hay không. Header này lần đầu xuất hiện vào năm 2009 và đến nay thì đã được hỗ trợ bởi hầu hết các trình duyệt (Internet Explorer, Safari, Firefox, Chrome). Header X- FRAME-OPTIONS có hai chế đô: DENY – cấm hoàn toàn việc tải trang web vào trong frame; SAMEORIGIN – cho phép tải trang web vào trong frame nếu trang chứa frame thuộc cùng domain với trang web được tải vào trong frame.
Các dự án lớn (trong đó có WordPress) đang dần chuyển sang sử dụng X- FRAME-OPTIONS. Nhưng cách bảo vệ này cũng có những hạn chế. Thứ nhất, header này cần phải đặt trên từng trang web. Thứ hai, những website đa domain không thể sử dụng cách thức này (hiện nay, X- FRAME- OPTIONS chưa hỗ trợ “danh sách webiste trắng”). Và thứ ba, header có thể bị cắt bỏ khi đi qua proxy.
Kết luận
Clickjacking không nguy hiểm bằng SQL
Injection hay XSS. Tuy nhiên, hình thức tấn công này lại liên quan trực
tiếp đến người dùng và là một phương tiện bổ trợ đắc lực cho kỹ nghệ xã
hội (social engineering) và người ta đã thực hiện tấn công Clickjacking
nhằm nhiều mục đích khác nhau.
Cần phải nói thêm rằng, việc chống lại Clickjacking có thể được thực hiện cả từ phía nhà phát triển ứng dụng web và người dùng. Môđun mở rộng NoScript cho FireFox (http://addons.mozilla.org/ru/firefox/addon/noscrip) từ lâu đã cho phép chống lại tấn công này. Việc thiết đặt tham số ClearClick sẽ ngăn chặn việc nhấn chuột lên các đối tượng ẩn. Đáng tiếc là chưa thấy có môđun tương tự cho các trình duyệt khác.
ATTT
* Bổ xung bài viết:
Add-ons giúp bảo vệ bạn trước các cuộc tấn công Clickjacking với tên gọi: Clickjacking Reveal (phiên bản mới nhất hiện tại là 1.1).
- Dành cho trình duyệt Google Chrome: tải về từ Chrome Web Store.
- Dành cho trình duyệt Mozilla Firefox: tải về từ Add-ons for Firefox.
- Dành cho trình duyệt Apple Safari: tải về file này và mở bằng Safari.
Add-on này sẽ phát hiện và giúp bạn nhận diện được các thẻ iframe "ẩn" đang bám theo con trỏ.
* Danh sách website sử dụng Like-Hijacking (để mọi người đề phòng):
- docnhat.net
- suong.vn/home/
- chaobuoisang.net
- coderviet.org
- www.clipgiaitriviet.net
- ...
- Đang cập nhật.