اخبار مصر

قراصنة Reddit.. دفع 4.5 مليون دولار وإلا تسريب 80 جيجابايت من البيانات

في فبراير، كشف Reddit أنه كان ضحية مخطط تصيد مستهدف كشف المستندات الداخلية ولوحات المعلومات والرموز والعقود، إلى جانب معلومات بعض المعلنين والموظفين الحاليين والسابقين.

 لا يبدو أن أيًا من البيانات قد وجد طريقه إلى الجمهور، لكن هذا قد يتغير قريبًا. تحملت عصابة برامج الفدية BlackCat، المعروفة أيضًا باسم ALPHV، مسؤولية الاختراق وتزعم أن لديها 80 جيجابايت من البيانات المضغوطة.

 في منشور بعنوان ملفات Reddit، أعلنت BlackCat أنها ستحذف المعلومات إذا أعطاها Reddit 4.5 مليون دولار وعكس زيادات أسعار API.

استحوذت BlackCat على المعلومات من خلال مخطط رأى الموظفين يتلقون “مطالبات صوتية معقولة” لزيارة موقع ويب مصمم تمامًا مثل بوابة الإنترانت الخاصة بـ Reddit. وقع أحد الأفراد في الحيلة، مما سمح للمتسللين بسرقة تفاصيل تسجيل الدخول ورموز العامل الثاني. أبلغ الشخص بعد ذلك عن خطأه، ويعتقد أن الخرق الأمني لم يضر بالمعلومات الشخصية لمستخدمي Reddit.

الآن، بعد أشهر، كشف المتسللون عن أنفسهم علنًا في خضم الاحتجاجات على مستوى الموقع ضد ارتفاع أسعار API (نعم، نفس تلك التي تطالب BlackCat بإعجاب كبير بالتراجع عنها). تجبر التكلفة المتزايدة تطبيقات الطرف الثالث الشهيرة مثل Narwhal و Apollo على الإغلاق، حيث ادعى صانع Apollo Christian Selig أنه سيحتاج إلى إنفاق 20 مليون دولار سنويًا للبقاء في العمل. يخشى المطورون أيضًا أن يؤدي فقدان تطبيقات الطرف الثالث إلى مزيد من الرقابة وفرصة أقل لزيادة عائدات الإعلانات.

شهد احتجاج ضخم ما يصل إلى 8000 subreddits مظلمة في وقت واح ، لكن النتائج مختلطة، مع مضاعفة Reddit لخططها. 

قال ستيف هوفمان الرئيس التنفيذي لشركة Reddit في مقابلة مع The Verge: “هؤلاء الأشخاص المجانين، هم غاضبون لأنهم اعتادوا الحصول على شيء مجانًا، والآن لن يكون مجانيًا”.

 كما اقترح تسهيل إزالة الوسطاء الذين لا يتخذون قرارات “شائعة”. على الرغم من عدم إظهار Reddit أي علامات على عكس قرارها، فقد توقف بعض المعلنين مؤقتًا على الموقع أثناء استمرار انقطاع التيار الكهربائي.

function replaceOembeds() { var allEmbeds = document.getElementsByTagName("OEMBED");

while (allEmbeds.length != 0) { replaceOembedWithHtml(allEmbeds[0], extractLinkFromOembed(allEmbeds[0])); allEmbeds = document.getElementsByTagName("OEMBED"); }

runYoutubeLazyLoad(); loadfbApi(); }

function replaceOembedWithHtml(element, sourceData) { if (sourceData.source.toLowerCase() === "youtube") { var html="

" + '

' + '

' + '

' + '' + '

' + '

';

replaceElementWithHtml(element, html); } else if (sourceData.source.toLowerCase() === "instagram") { var html="

';

replaceElementWithHtml(element, html); } else if (sourceData.source.toLowerCase() === "twitter") { var html="

'; replaceElementWithHtml(element, html); } else if (sourceData.source.toLowerCase() === "facebook") { var html="

' replaceElementWithHtml(element, html); } else { replaceElementWithHtml(element, ""); }

}

function extractLinkFromOembed(element) { return getUrlSource(element.getAttribute("url")); }

function getUrlSource(url) { var ytRegex = /http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?‌​[\w\?‌​=]*)?/; var instaRegex = /(https?:\/\/www\.)?instagram\.com(\/p\/(\w+)\/?)/; var twitterRegex = /twitter\.com\/.*\/status(?:es)?\/([^\/\?]+)/; var fbRegex = /^https?:\/\/www\.facebook\.com.*\/(video(s)?|watch|story|posts)(\.php?|\/).+$/;

if (ytRegex.test(url)) { return { source: "Youtube", url: url, id: ytRegex.exec(url)[1] }; }

if (instaRegex.test(url)) { return { source: "Instagram", url: url, id: instaRegex.exec(url)[3] }; }

if (twitterRegex.test(url)) { return { source: "Twitter", url: url, id: twitterRegex.exec(url)[1] }; }

if (fbRegex.test(url)) { return { source: "Facebook", url: url, id: fbRegex.exec(url)[1] };

}

return { source: "Unknown", url: url, id: "" }; }

function replaceElementWithHtml(element, html) { var str = html; var Obj = element; //any element to be fully replaced if (Obj.outerHTML) { //if outerHTML is supported Obj.outerHTML = str; ///it's simple replacement of whole element with contents of str var } else { //if outerHTML is not supported, there is a weird but crossbrowsered trick var tmpObj = document.createElement("div"); tmpObj.innerHTML = ''; ObjParent = Obj.parentNode; //Okey, element should be parented ObjParent.replaceChild(tmpObj, Obj); //here we placing our temporary data instead of our target, so we can find it then and replace it into whatever we want to replace to ObjParent.innerHTML = ObjParent.innerHTML.replace('

', str); } } function loadfbApi() { var js = document.createElement('script'); js.src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.2"; document.body.appendChild(js); } function runYoutubeLazyLoad() { /// youtube lazyload var youtube = document.querySelectorAll(".youtube");

for (var i = 0; i < youtube.length; i++) { var source = "https://img.youtube.com/vi/" + youtube[i].dataset.embed + "/0.jpg"; var image = new Image(); image.src = "https://www.alwafd.news/themes/alwafd/assets/images/no.jpg"; image.classList.add('lazyload'); image.setAttribute("data-src", source); image.setAttribute("alt", "youtube"); image.addEventListener("load", function () { youtube[i].appendChild(image); }(i)); youtube[i].addEventListener("click", function () { var iframe = document.createElement("iframe"); iframe.setAttribute("frameborder", "0"); iframe.setAttribute("allowfullscreen", ""); iframe.setAttribute("src", "https://www.youtube.com/embed/" + this.dataset .embed + "?rel=0&showinfo=0&autoplay=1"); this.innerHTML = ""; this.appendChild(iframe); }); }; }