NỘI DUNG
Kết thúc nội dung Penetration Testing Step 3 – Cross-Origin Resource Sharing – CORS attack – Tập cuối, kỳ này tôi sẽ đổi gió bằng một chủ đề mới và “thân thiện với người dùng” hơn là Clickjacking.
Cũng như các nội dung khác, phần demo minh họa sẽ bao gồm nhiều kịch bản với các mức độ phức tạp khác nhau nên tôi không thể quất tất cả trong một kỳ. Trong nội dung kỳ này, tôi sẽ tập trung vào phần giới thiệu “ý tưởng” và mần thử một số kịch bản dễ ăn trước. Các thứ khó nhai hơn tôi sẽ triển trong kỳ tiếp theo.
Lưu ý:
- Như mọi khi, tôi cũng sẽ tận dụng các bài Lab dựng sẵn của ông PortSwigger để tiết kiệm thời gian dàn cảnh;
- Phần demo minh họa có thể chạy mượt mà không cần Burp Suite. Tuy nhiên, việc sử dụng Burp Suite Proxy để ngâm cứu quá trình tương tác của browser và server cũng mang lại nhiều thông tin hữu ích. Nếu cần, bạn có thể xem thêm trong nội dung Penetration Testing Step 3 – 6 điều bạn nên biết trước khi xài tool khủng Burp Suite;.
#1. Clickjacking mặt mũi ra sao?
Clickjacking là dạng interface-based attack (tôi tạm dịch là tấn công dựa vào giao diện) khi attacker ủ mưu dụ dỗ người dùng click vào một nội dung tưởng chừng vô hại nhưng lại kích hoạt các trò bẩn bựa nào đấy.
Tôi lấy một ví dụ cụ thể cho dễ hình dung:
- Attacker gửi email cho nạn nhân thông báo về việc chiến thắng giải đặc biệt kỳ rút thăm trúng thưởng toàn Thái dương hệ với giá trị 69 tỏi Biden;
- Muốn húp 69 tỏi kia thì nạn nhân cần mở đường link kèm trong email và làm một số thao tác cần thiết trước khi nhấn nút xác nhận;
- Đường link nói trên sẽ dẫn nạn nhân đến một decoy website (tức là cái website mà attacker đã cài cắm các thứ độc hại trên đó);
- Đâu đó trên cái decoy website sẽ có một button (ví dụ “Show me the money”) mà nạn nhân cần nhấn vào để hoàn tất thủ tục;
- Ẩn giấu bên dưới cái button “Show me the money” là một hidden button khác. Cái hidden button này một khi được nhân sẽ kích hoạt quá trình xử lý để hút tiền của nạn nhân từ một target website khác (ví dụ website ngân hàng X mà nạn nhân sử dụng).
Để cái trò clickjacking nói trên thành công, attacker sẽ cần mông má sao cho cái hidden button hút tiền (từ target website ngân hàng X) ẩn hoàn hảo bên dưới cái button “Show me the money”của decoy website thông qua một thứ là hidden iframe. Việc này có thể được attacker triển khai thông qua các thao tác hiệu chỉnh tương ứng với CSS như phần demo minh họa tiếp theo.
Lưu ý:
- Điểm khác biệt của cái clickjacking so với CSRF là việc yêu cầu nạn nhân phải thực hiện một hành động cụ thể ví dụ như click vào button “Show me the money” nói trên (việc giả mạo requesst với CSRF attack sẽ không cần nạn nhiên biết/thao tác gì sất);
- Giải pháp chống CSRF attack với CSRF token như giới thiệu trong nội dung Penetration Testing Step 3 – CSRF attack – Hồi thứ nhất sẽ không có tác dụng với clickjacking attack.
#2. Clickjacking attack – Đường cơ bản
Trong kịch bản này, tôi sẽ triển clickjacking attack nhằm kích hoạt một button trên target website được bảo vệ với CSRF token.
Để bắt đầu, tôi thử đăng nhập vào target website với credentials của tôi như mọi khi (wiener:peter). Tại đây, tôi xác định một vị trí “ăn hàng” tiềm năng là cái Delete account button.
Sau đó, tôi bơi qua Exploit Server và đút cái HTML template có chứa CSS Style kiểu như bên dưới vô chỗ Body Section.
<style>
iframe {
position:relative;
width: $width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
div {
position:absolute;
top: $top_value;
left: $side_value;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="$url"></iframe>
Lưu ý:
- Tôi sẽ cần cân chỉnh cái iframe thông qua việc thay đổi giá trị $width_value và $height_value cho phù hợp với nội dung của cái $url;
- $opacity sẽ được dùng để xác định độ transparent (trong suốt) của cái iframe cần che giấu. Để dễ mần ăn, tôi có thể để giá trị 0.1 trong lúc cần cân chỉnh vị trí cái iframe. Khi hàng họ đã ngon thì tôi sẽ chuyển về giá trị 0.0001 để ẩn đi;
- Cái z-index sẽ xác định thứ tự mà các đối tượng nằm “xếp lớp” lên nhau. Như ở trên, z-index của iframe (target website) có giá trị là 2 và z-index của div (decoy website) có giá trị là 1. Điều này có nghĩa là decoy website sẽ nằm trên và target website sẽ nằm dưới.
- Để cái button “Click me” trên decoy website khớp với button ẩn giấu “Delete account” tôi sẽ cần hiệu chỉnh $top_value và $side_value;
- Cái $url sẽ được cập nhật thành cái Lab ID tương ứng (trong trường hợp của tôi sẽ là https://acbd1f471e19fc8bc036c4840089008a.web-security-academy.net/my-account).
Sau khi Store và View exploit, tôi có thể xem xét tình hình và hiệu chỉnh $top_value/ $side_value cho đến khi cái button “Click me” nằm ngay ngắn bên trên button “Delete account” của cái target website.
Khi hàng họ đã chuẩn như ở trên, tôi có thể xác nhận bằng cách rê chuột lên bên trên cái button “Click me”. Nếu con trỏ chuyển thành biểu tượng bàn tay thì coi như việc cân chỉnh vị trí của tôi đã hoàn tất.
Lúc này tôi sẽ tiến hành bước cuối là hiệu chỉnh cái Opactity để cho cái iframe chìm vào bóng tối chỉ để lại mỗi cái button “Click me” đầy lôi cuốn như sau.
Để kết thúc trận đấu, tôi sẽ cần click vào Deliver exploit to victim. Việc này sẽ tương ứng với việc tôi gửi email chứa link độc hại đến cho nạn nhân rồi chờ đối tượng cắn câu như đã giới thiệu ở Mục 1.
#3. Clickjacking attack với thông tin nhập liệu qua URL parameter
Tương tự như kịch bản trước đó, tôi cũng đăng nhập vào target website với credentials wiener:peter và xác định đối tượng thú vị là Update email button.
Thử chạy cái chức năng Update email này, tôi xác định được target website sẽ sử dụng cái URL parameter để nhận input theo kiểu ?email=hacker@attacker-website.com.
Với thông tin này, tôi sẽ chuẩn bị một cái HTML template chứ CSS Style theo kiểu:
<style>
iframe {
position:relative;
width:$width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
div {
position:absolute;
top:$top_value;
left:$side_value;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="$url?email=hacker@attacker-website.com"></iframe>
Tôi cũng sẽ cần cập nhật cái $url thành giá trị tương ứng (https://acfd1f411e4e571cc01602ae00ae0055.web-security-academy.net/my-account trong trường hợp của tôi) trước khi dí cái đống này vô Body section trên Exploit server và cân chỉnh cái iframe cho phù hợp tương tự như kịch bản trước đó.
Sau khi vã mồ hôi chỉnh sửa, cuối cùng tôi cũng đã có một tác phẩm ưng ý như sau.
Công việc kế tiếp không có gì mới. Tôi sẽ tiến hành điều chỉnh cái opacity để che đậy hoàn toàn cái iframe trước khi xả đạn với Deliver exploit to victim.
1 thought on “Penetration Testing Step 3 – “Lần đầu” với Clickjacking”