
Electronegativity هي أداة لتحديد التكوينات الخاطئة وأنماط الأمن المضادة في تطبيقات Electron.
⚠️ لم نعد نحافظ على هذا المشروع بنشاط ⚠️
Electronegativity هي أداة لتحديد التكوينات الخاطئة وأنماط الأمان السيئة في التطبيقات المبنية على Electron.
تستخدم تحليل AST و DOM للبحث عن التكوينات ذات الصلة بالأمان، كما هو موصوف في الورقة البيضاء "Electron Security Checklist - A Guide for Developers and Auditors".
يمكن لمطوري البرامج ومدققي الأمان استخدام هذه الأداة لاكتشاف وتخفيف نقاط الضعف المحتملة وأخطاء التنفيذ عند تطوير التطبيقات باستخدام Electron. لا يزال فهم جيد لأمان (وعدم أمان) Electron مطلوبًا عند استخدام Electronegativity، حيث تتطلب بعض المشكلات المحتملة التي تكتشفها الأداة تحقيقًا يدويًا.
إذا كنت مهتمًا بأمان Electron، فاطلع على بحثنا في BlackHat 2017 Electronegativity - A Study of Electron Security وتابع مدونة Doyensec.

إذا كنت بحاجة إلى شيء أكثر قوة أو محدثًا، فهناك أداة SAST محسنة مبنية على Electronegativity متاحة نتيجة لسنوات عديدة من البحث والتطوير التطبيقي من Doyensec. في نهاية عام 2020، جلسنا لوضع خريطة طريق للمشروع وأنشأنا فريق تطوير للعمل على ما يعرف الآن باسم ElectroNG. يمكنك قراءة المزيد عن بعض التحسينات الرئيسية على الإصدار مفتوح المصدر في منشور مدونة حديث.
يتم دفع الإصدارات الرئيسية إلى NPM ويمكن تثبيتها ببساطة باستخدام:
$ npm install @doyensec/electronegativity -g
$ electronegativity -h
استخدام electronegativity للبحث عن مشكلات في مجلد يحتوي على تطبيق Electron:
$ electronegativity -i /path/to/electron/app
استخدام electronegativity للبحث عن مشكلات في أرشيف asar وحفظ النتائج في ملف csv:
$ electronegativity -i /path/to/asar/archive -o result.csv
استخدام electronegativity عند الترقية من إصدار Electron إلى آخر للعثور على التغييرات المكسرة:
$ electronegativity -i /path/to/electron/app -v -u 7..8
ملاحظة: إذا واجهت الخطأ الفادح "JavaScript heap out of memory"، يمكنك تشغيل node باستخدام node --max-old-space-size=4096 electronegativity -i /path/to/asar/archive -o result.csv
يتيح لك Electronegativity تعطيل فحوصات فردية باستخدام تعليقات eng-disable. على سبيل المثال، إذا كنت تريد أن يتجاهل فحص معين سطرًا من الكود، يمكنك تعطيله كما يلي:
const res = eval(safeVariable); /* eng-disable DANGEROUS_FUNCTIONS_JS_CHECK */
<webview src="https://doyensec.com/" enableblinkfeatures="DangerousFeature"></webview> <!-- eng-disable BLINK_FEATURES_HTML_CHECK -->
أي تعليق مضمن eng-disable (// eng-disable, /* eng-disable */, <!-- eng-disable -->) سيعطل الفحص المحدد لهذا السطر فقط. من الممكن أيضًا توفير أسماء فحوصات متعددة باستخدام معرفاتها بحالة snake case (DANGEROUS_FUNCTIONS_JS_CHECK) أو أسماء بنائها (dangerousFunctionsJSCheck):
shell.openExternal(eval(safeVar)); /* eng-disable OPEN_EXTERNAL_JS_CHECK DANGEROUS_FUNCTIONS_JS_CHECK */
إذا وضعت توجيه eng-disable قبل أي كود في أعلى ملف .js أو .html، فسيؤدي ذلك إلى تعطيل الفحوصات الممررة للملف بالكامل.
eng-disableقبل الإصدار 1.9.0، لم يكن من الممكن تعطيل الفحوصات الشاملة باستخدام تعليقات الكود. إذا كنت لا تزال تستخدم إصدارًا قديمًا، فاستخدم وسيط سطر الأوامر -x لتعطيل قائمة من الفحوصات يدويًا (مثال -x LimitNavigationJsCheck,PermissionRequestHandlerJsCheck,CSPGlobalCheck).
لاحظ أن استخدام التعليقات قد لا يكون مناسبًا لبعض الفحوصات عالية المستوى مثل CSP_GLOBAL_CHECK أو AVAILABLE_SECURITY_FIXES_GLOBAL_CHECK. في هذه الحالات، قد ترغب في استخدام العلم -x لاستبعاد فحوصات معينة من المسح الخاص بك.
Electronegativity Action يمكن تشغيله كجزء من خط أنابيب CI/CD في GitHub للحصول على "تنبيهات فحص الكود" (Code scanning alerts):

يمكنك أيضًا استخدام electronegativity برمجيًا، باستخدام خيارات مشابهة لواجهة سطر الأوامر:
const run = require('@doyensec/electronegativity')
// or: import run from '@doyensec/electronegativity';
run({
// input (directory, .js, .html, .asar)
input: '/path/to/electron/app',
// save the results to a file in csv or sarif format (optional)
output: '/path/for/output/file',
// true to save output as sarif, false to save as csv (optional)
isSarif: false,
// only run the specified checks (optional)
customScan: ['dangerousfunctionsjscheck', 'remotemodulejscheck'],
// only return findings with the specified level of severity or above (optional)
severitySet: 'high',
// only return findings with the specified level of confidence or above (optional)
confidenceSet: 'certain',
// show relative path for files (optional)
isRelative: false,
// run Electron upgrade checks, eg -u 7..8 to check upgrade from Electron 7 to 8 (optional)
electronUpgrade: '7..8',
// assume the set Electron version, overriding the detected one
electronVersion: '5.0.0',
// use additional parser plugins
parserPlugins: ['optionalChaining']
})
.then(result => console.log(result))
.catch(err => console.error(err));
تحتوي النتيجة على عدد الفحوصات الشاملة والذرية، وأي أخطاء تمت مواجهتها أثناء التحليل، ومصفوفة من المشكلات التي تم العثور عليها، مثل هذا:
{
globalChecks: 6,
atomicChecks: 36,
errors: [
{
file: 'ts/main/main.ts',
sample: 'shell.openExternal(url);',
location: { line: 328, column: 4 },
id: 'OPEN_EXTERNAL_JS_CHECK',
description: 'Review the use of openExternal',
properties: undefined,
severity: { value: 2, name: 'MEDIUM', format: [Function: format] },
confidence: { value: 0, name: 'TENTATIVE', format: [Function: format] },
manualReview: true,
shortenedURL: 'https://git.io/JeuMC'
},
{
file: 'ts/main/main.ts',
sample: 'const popup = new BrowserWindow(options);',
location: { line: 340, column: 18 },
id: 'CONTEXT_ISOLATION_JS_CHECK',
description: 'Review the use of the contextIsolation option',
properties: undefined,
severity: { value: 3, name: 'HIGH', format: [Function: format] },
confidence: { value: 1, name: 'FIRM', format: [Function: format] },
manualReview: false,
shortenedURL: 'https://git.io/Jeu1p'
}
]
}
إذا كنت تفكر في المساهمة في هذا المشروع، يرجى إلقاء نظرة على CONTRIBUTING.md.
أصبح Electronegativity ممكنًا بفضل عمل العديد من المساهمين.
تم رعاية هذا المشروع من قبل Doyensec LLC.
استأجرنا لاختبار اختراق تطبيق Electron.js الخاص بك!
| Option | الوصف |
|---|
| -V | إخراج رقم الإصدار |
| -i, --input | المدخل (مجلد، ملف .js، .html، .asar) |
| -l, --checks | تشغيل الفحوصات المحددة فقط، تمرر بصيغة csv |
| -x, --exclude-checks | تخطي قائمة الفحوصات المحددة، تمرر بصيغة csv |
| -s, --severity | إرجاع النتائج ذات مستوى الخطورة المحدد أو أعلى فقط |
| -c, --confidence | إرجاع النتائج ذات مستوى الثقة المحدد أو أعلى فقط |
| -o, --output <filename[.csv or .sarif]> | حفظ النتائج في ملف بصيغة csv أو sarif |
| -r, --relative | إظهار المسار النسبي للملفات |
| -v, --verbose | إظهار الوصف للنتائج، القيمة الافتراضية صحيح |
| -u, --upgrade | تشغيل فحوصات ترقية Electron، مثال -u 7..8 للتحقق من الترقية من Electron 7 إلى 8 |
| -e, --electron-version | افتراض إصدار Electron المحدد، متجاوزًا الإصدار المكتشف، مثال -e 7.0.0 لمعاملة التطبيق على أنه يستخدم Electron 7 |
| -p, --parser-plugins | تحديد إضافات محلل إضافية لاستخدامها مفصولة بفواصل، مثال -p optionalChaining |
| -h, --help | إخراج معلومات الاستخدام |