
Electronegativity एक उपकरण है जो इलेक्ट्रॉन अनुप्रयोगों में गलत कॉन्फ़िगरेशन और सुरक्षा विरोध-पैटर्न की पहचान करने के लिए है।
⚠️ हम अब इस प्रोजेक्ट को सक्रिय रूप से बनाए नहीं रख रहे हैं ⚠️
Electronegativity एक उपकरण है जो Electron-आधारित अनुप्रयोगों में गलत कॉन्फ़िगरेशन और सुरक्षा विरोध-पैटर्न (anti-patterns) की पहचान करता है।
यह सुरक्षा-संबंधित कॉन्फ़िगरेशन खोजने के लिए AST और DOM पार्सिंग का उपयोग करता है, जैसा कि "Electron Security Checklist - A Guide for Developers and Auditors" श्वेतपत्र में वर्णित है।
सॉफ्टवेयर डेवलपर और सुरक्षा ऑडिटर इस उपकरण का उपयोग Electron का उपयोग करके अनुप्रयोग विकसित करते समय संभावित कमजोरियों और कार्यान्वयन बग्स का पता लगाने और उन्हें कम करने के लिए कर सकते हैं। Electronegativity का उपयोग करते समय Electron (अ)सुरक्षा की अच्छी समझ अभी भी आवश्यक है, क्योंकि उपकरण द्वारा पता लगाए गए कुछ संभावित मुद्दों के लिए मैन्युअल जांच की आवश्यकता होती है।
यदि आप Electron सुरक्षा में रुचि रखते हैं, तो हमारे BlackHat 2017 शोध Electronegativity - A Study of Electron Security पर एक नज़र डालें और Doyensec's blog पर नज़र रखें।

यदि आपको अधिक शक्तिशाली या अद्यतन किसी चीज़ की आवश्यकता है, तो Doyensec से कई वर्षों के अनुप्रयुक्त अनुसंधान एवं विकास के परिणामस्वरूप Electronegativity पर आधारित एक बेहतर SAST उपकरण उपलब्ध है। 2020 के अंत में, हमने एक परियोजना रोडमैप बनाने के लिए बैठक की और एक विकास टीम बनाई जो अब ElectroNG पर काम कर रही है। आप एक हालिया blog post में OSS संस्करण पर कुछ प्रमुख सुधारों के बारे में अधिक पढ़ सकते हैं।
प्रमुख रिलीज़ 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
Electron के एक संस्करण से दूसरे में अपग्रेड करते समय ब्रेकिंग परिवर्तन खोजने के लिए Electronegativity का उपयोग करें:
$ 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 -->) केवल उस पंक्ति के लिए निर्दिष्ट जाँच को अक्षम कर देगी। उनके स्नेक केस आईडी (DANGEROUS_FUNCTIONS_JS_CHECK) या उनके कंस्ट्रक्ट नाम (dangerousFunctionsJSCheck) दोनों का उपयोग करके एकाधिक जाँच नाम प्रदान करना भी संभव है:
shell.openExternal(eval(safeVar)); /* eng-disable OPEN_EXTERNAL_JS_CHECK DANGEROUS_FUNCTIONS_JS_CHECK */
यदि आप किसी .js या .html फ़ाइल के शीर्ष पर किसी कोड से पहले eng-disable निर्देश रखते हैं, तो यह पास की गई जाँचों को पूरी फ़ाइल के लिए अक्षम कर देगा।
eng-disable एनोटेशन पर नोटv1.9.0 से पहले वैश्विक जाँचों को कोड एनोटेशन का उपयोग करके अक्षम नहीं किया जा सकता था। यदि आप अभी भी पुराने संस्करण का उपयोग कर रहे हैं, तो इसके बजाय मैन्युअल रूप से जाँचों की सूची को अक्षम करने के लिए -x CLI तर्क का उपयोग करें (जैसे -x LimitNavigationJsCheck,PermissionRequestHandlerJsCheck,CSPGlobalCheck)।
ध्यान दें कि एनोटेशन का उपयोग कुछ उच्च-स्तरीय जाँचों जैसे CSP_GLOBAL_CHECK या AVAILABLE_SECURITY_FIXES_GLOBAL_CHECK पर लागू नहीं हो सकता है। उन मामलों के लिए, आप अपने स्कैन से विशिष्ट जाँचों को बाहर करने के लिए -x फ़्लैग का उपयोग करना चाह सकते हैं।
Electronegativity Action आपकी GitHub CI/CD पाइपलाइन के भाग के रूप में "Code scanning alerts" प्राप्त करने के लिए चल सकता है:

आप Electronegativity का उपयोग प्रोग्रामेटिक रूप से भी कर सकते हैं, CLI के समान विकल्पों का उपयोग करके:
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 | Description |
|---|
| -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 | निष्कर्षों का विवरण दिखाएँ, डिफ़ॉल्ट true है |
| -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 | उपयोग जानकारी आउटपुट करें |