
डेवलपर और सुरक्षा इंजीनियर के अनुकूल पैकेज NodeJS अनुप्रयोगों को सुरक्षित करने के लिए।
Node Security Shield (NSS) एक ओपन सोर्स रनटाइम एप्लिकेशन सेल्फ-प्रोटेक्शन (RASP) टूल है जिसका उद्देश्य NodeJS सुरक्षा में व्यापक अंतर को पाटना है। यह डेवलपर और सुरक्षा इंजीनियर को यह घोषित करने में सक्षम बनाता है कि कोई एप्लिकेशन किन संसाधनों तक पहुँच सकता है।
Log4Shell (CVE-2021-44228) भेद्यता से प्रेरित होकर, जिसका शोषण इसलिए किया जा सकता है क्योंकि कोई एप्लिकेशन मनमाने नेटवर्क कॉल कर सकता है, हमने महसूस किया कि किसी एप्लिकेशन के लिए एक ऐसे तंत्र की आवश्यकता है जिसके द्वारा वह घोषित कर सके कि वह किन विशेषाधिकारों की अनुमति देता है, ताकि अतिरिक्त नियंत्रण लागू करके ऐसी भेद्यताओं के शोषण को कठिन बनाया जा सके।
इसे प्राप्त करने के लिए, NSS (Node Security Shield) में Resource Access Policy (RAP) है।
Resource Access Policy CSP (Content Security Policy) के समान है।
यह डेवलपर/सुरक्षा इंजीनियर को यह घोषित करने देता है कि किसी एप्लिकेशन को किन संसाधनों तक पहुँचना चाहिए। और Node Security Shield इसे लागू करेगा।
npm install nodesecurityshield
// Require Node Security Shield
let nodeSecurityShield = require('nodesecurityshield');
// Enable Attack Monitoring and/or Blocking
nodeSecurityShield.enableAttackMonitoring("Unique-App-Id",resourceAccessPolicy ,callbackFunction);
const resourceAccessPolicy = {
"outBoundRequest" : {
"blockedDomains" : ["compromised.domdog.io"],
"allowedDomains" : []
},
"executedCommand": {
"allowedCommands": ["pwd" , "(node)[](https://github.com/domdogsec/nodesecurityshield/blob/HEAD/helper%5C/)[a-z|0-9]*(.js)"]
}
};
outBoundRequest: आउटबाउंड अनुरोधों के लिए स्वीकृत व्यवहार को परिभाषित करता है
executedCommand: कमांड निष्पादन के लिए स्वीकृत व्यवहार को परिभाषित करता है
allowedCommands सरणी String स्वीकार करती है। कमांड के एक पैटर्न की अनुमति देने के लिए आप RegEx पास कर सकते हैं।executedCommand प्रॉपर्टी परिभाषित हो।pwd कमांड को निष्पादित करने की अनुमति है औरhelper के अंदर .js फ़ाइलों को node प्रक्रियाओं के रूप में स्पॉन करने की अनुमति है।.* के उपयोग से बचें। क्योंकि यह पाइप के बाद किसी भी कमांड के निष्पादन की अनुमति देगा।var callbackFunction = function (violationEvent,violations,violationLimitPerMinReached) {
console.log(JSON.stringify(violationEvent,null, 4));
}
violationEvent - RAP उल्लंघन जो हुआ। इसे CSP उल्लंघन के रूप में प्रस्तुत किया गया है।
violations - RAP उल्लंघनों की संख्या। हर मिनट शून्य पर रीसेट होता है।
violationLimitPerMinReached - सत्य यदि RAP उल्लंघनों की संख्या 'maxViolationsPerMinute' [RAP में एक विकल्प] से अधिक हो जाती है।
किसी हमले को ब्लॉक करने के लिए - एक त्रुटि फेंकें
throw new Error("Request Blocked. It violates declared Resource Access Policy.")
{
"csp-report": {
"document-uri": "https://Unique-App-Id",
"blocked-uri": "https://compromised.domdog.io:443",
"violated-directive": "connect-src",
"effective-directive": "connect-src",
"original-policy": "{\"outBoundRequest\":{\"blockedDomains\":[\"compromised.domdog.io\"],\"allowedDomains\":[]}}",
"disposition": "report",
"status-code": 200,
"script-sample": "",
"source-file": "Error\n at TLSSocket.obj.<computed> [as connect] (/mnt/c/Ironwasp/Product/NodeSecurityShield/lib/hook.js:20:25)\n at Object.connect (_tls_wrap.js:1606:13)\n at Agent.createConnection (https.js:126:22)\n at Agent.createSocket (_http_agent.js:273:26)\n at Agent.addRequest (_http_agent.js:232:10)\n at new ClientRequest (_http_client.js:302:16)\n at request (https.js:310:10)\n at Object.get (https.js:314:15)\n at /mnt/c/Ironwasp/RD/Node/SimpleVulnerableNode/routes/ssrf.js:19:19\n at Layer.handle [as handle_request] (/mnt/c/Ironwasp/RD/Node/SimpleVulnerableNode/node_modules/express/lib/router/layer.js:95:5)"
}
}
document-uri: इसमें Unique-App-Id है, जो NSS के आरंभीकरण के दौरान पारित किया गया थाblocked-uri: आउटबाउंड अनुरोध का डोमेन जिसने RAP का उल्लंघन कियाviolated-directive: connect-src आउटबाउंड अनुरोध का पर्याय है, इसी तरह script-src कमांड निष्पादन का पर्याय हैoriginal-policy: उल्लंघन की गई Resource Access Policy (RAP)source-file: इस उल्लंघन का स्टैक ट्रेस।const resourceAccessPolicy = {
"outBoundRequest" : {
"blockedDomains" : ["compromised.domdog.io"],
"allowedDomains" : []
},
"executedCommand": {
"allowedCommands": ["pwd" , "(node)[](https://github.com/domdogsec/nodesecurityshield/blob/HEAD/helper%5C/)[a-z|0-9]*(.js)"]
},
"reportUri": "https://ingest.sentry.io/api/6011856/security/?sentry_key=",
};
outBoundRequest: आउटबाउंड अनुरोधों के लिए स्वीकृत व्यवहार को परिभाषित करता है
executedCommand: कमांड निष्पादन के लिए स्वीकृत व्यवहार को परिभाषित करता है
allowedCommands सरणी String स्वीकार करती है। कमांड के एक पैटर्न की अनुमति देने के लिए आप RegEx पास कर सकते हैं।executedCommand प्रॉपर्टी परिभाषित हो।pwd कमांड को निष्पादित करने की अनुमति है औरhelper के अंदर .js फ़ाइलों को node प्रक्रियाओं के रूप में स्पॉन करने की अनुमति है।.* के उपयोग से बचें। क्योंकि यह पाइप के बाद किसी भी कमांड के निष्पादन की अनुमति देगा।Sentry डैशबोर्ड से स्क्रीनशॉट

const resourceAccessPolicy = {
"outBoundRequest" : {
"blockedDomains" : ["compromised.domdog.io"],
"allowedDomains" : ["domdog.io","*.domdog.io",
{
"domains": [
"domgo.at",
],
"modules": [
{
"file": "\/routes\/ssrf.js",
},
{
"file": "\/node_modules\/axios\/",
}
]
},
{
"domains": [
"cluster0-shard-00-00.lb9jm.mongodb.net",
"cluster0-shard-00-01.lb9jm.mongodb.net",
"cluster0-shard-00-02.lb9jm.mongodb.net"
],
"modules": [
{
"file": "\/node_modules\/mongodb\/"
}
]
}
]
},
"executedCommand": {
"allowedCommands": ["pwd" , "(node)[](https://github.com/domdogsec/nodesecurityshield/blob/HEAD/helper%5C/)[a-z|0-9]*(.js)"]
},
"reportUri": "https://endpoint-to-send-violations",
"maxViolationsPerMinute": 50
}
outBoundRequest: आउटबाउंड अनुरोधों के लिए स्वीकृत व्यवहार को परिभाषित करता है
executedCommand: कमांड निष्पादन के लिए स्वीकृत व्यवहार को परिभाषित करता है
allowedCommands सरणी String स्वीकार करती है। कमांड के एक पैटर्न की अनुमति देने के लिए आप RegEx पास कर सकते हैं।executedCommand प्रॉपर्टी परिभाषित हो।pwd कमांड को निष्पादित करने की अनुमति है औरhelper के अंदर .js फ़ाइलों को node प्रक्रियाओं के रूप में स्पॉन करने की अनुमति है।.* के उपयोग से बचें। क्योंकि यह पाइप के बाद किसी भी कमांड के निष्पादन की अनुमति देगा।||reportUri : दिए गए एंडपॉइंट पर उल्लंघन भेजता है। चूंकि उल्लंघन Content Security Policy उल्लंघनों के समान हैं, इसलिए किसी भी CSP मॉनिटरिंग समाधान का उपयोग किया जा सकता है। हमने उपरोक्त RAP में Sentry एंडपॉइंट का उपयोग किया।|reportUri: दिए गए एंडपॉइंट पर उल्लंघन भेजता है। चूंकि उल्लंघन Content Security Policy उल्लंघनों के समान हैं, इसलिए किसी भी CSP मॉनिटरिंग समाधान का उपयोग किया जा सकता है। हमने उपरोक्त RAP में Sentry एंडपॉइंट का उपयोग किया।allowedDomain सरणी निम्नलिखित के साथ ऑब्जेक्ट स्वीकार करती है
domain: डोमेन की सरणी जो प्रदान की गई फ़ाइलों के लिए अनुमत हैं।modules: फ़ाइल पथ वाले ऑब्जेक्ट की सरणी। केवल इन फ़ाइलों के माध्यम से निर्दिष्ट डोमेन पर किए गए आउटबाउंड अनुरोधों की अनुमति है।maxViolationsPerMinute: reportUri पर भेजे जाने वाले उल्लंघनों की अधिकतम संख्या। यदि निर्दिष्ट नहीं है, तो डिफ़ॉल्ट मान (100 उल्लंघन) का उपयोग किया जाता है।