
DakshSCRA v0.38-beta
फ्रेमवर्क-जागरूक स्थैतिक कोड विश्लेषण उपकरण जो प्लेटफ़ॉर्म-विशिष्ट नियमों, टेंट विश्लेषण, प्रयास अनुमान और दमन आधार रेखाओं के साथ स्वचालित स्रोत कोड समीक्षा के लिए है।
Daksh SCRA (सोर्स कोड रिव्यू असिस्ट)```
Author:
- Debasis Mohanty ([email protected])
- Twitter / X: @coffeensecurity
- www.coffeeandsecurity.com
## Daksh SCRA के बारे में
Daksh SCRA (Source Code Review Assist) सोर्स कोड समीक्षा प्रक्रिया की दक्षता बढ़ाने के लिए बनाया गया है, जो कोड समीक्षकों के लिए एक सुव्यवस्थित और संगठित दृष्टिकोण प्रदान करता है।
हर चीज़ को बिना सोचे-समझे संभावित समस्या के रूप में चिह्नित करने के बजाय, Daksh SCRA विचारशील विश्लेषण को बढ़ावा देता है, संभावित समस्याओं की जाँच और पुष्टि पर ज़ोर देता है। यह दृष्टिकोण हर संभावित चिंता को बग के रूप में टैग करने की होड़ को कम करता है, जिससे झूठे सकारात्मक परिणामों पर बर्बाद होने वाला समय और भ्रम घटता है।
### पहली उपस्थिति
Daksh SCRA को शुरुआत में Black Hat USA 2022 (6-9 अगस्त) में एक सोर्स कोड समीक्षा प्रशिक्षण सत्र के दौरान पेश किया गया था, जहाँ इसे एक विशिष्ट दर्शकों के सामने विनम्रता से प्रस्तुत किया गया। इसकी आधिकारिक सार्वजनिक शुरुआत लास वेगास में Black Hat USA 2023 में हुई।
## विशेषताएँ और कार्यक्षमताएँ
- **सोर्स कोड में रुचि के क्षेत्रों की पहचान करता है:** हर चीज़ को बिना सोचे-समझे बग के रूप में लेबल करने के बजाय केंद्रित जाँच और पुष्टि को प्रोत्साहित करता है।
- **फ़ाइल पथों में रुचि के क्षेत्रों की पहचान करता है (विश्व में पहली बार):** समीक्षा के लिए प्रासंगिक अनुभागों को इंगित करने हेतु फ़ाइल पथों में पैटर्न पहचानता है।
- **उपयोग की गई तकनीकों की पहचान के लिए सॉफ़्टवेयर-स्तरीय टोही:** प्रोजेक्ट की तकनीकों की पहचान करता है, जिससे कोड समीक्षक उपयुक्त नियमों के साथ सटीक स्कैन कर सकते हैं।
- **कोड समीक्षा के लिए स्वचालित वैज्ञानिक प्रयास अनुमान (विश्व में पहली बार):** कोड समीक्षा के लिए आवश्यक प्रयास का अनुमान लगाने का एक मापने योग्य दृष्टिकोण प्रदान करता है।
- **फ्रेमवर्क-जागरूक स्कैनिंग:** जब प्रोजेक्ट का फ्रेमवर्क पहचाना जाता है, तो स्वचालित रूप से फ्रेमवर्क-विशिष्ट नियम लागू करता है।
- **टेंट विश्लेषण रिपोर्ट:** हैकर-मोड और प्रोफेशनल-मोड थीम के साथ प्लेटफ़ॉर्म-वार HTML टेंट प्रवाह रिपोर्ट।
- **RDL (Rule Description Language):** बाहरी नियम तर्क जिसे `rdl_ref` के साथ संदर्भित किया जाता है और `core/rdl_engine.py` पाइपलाइन द्वारा निष्पादित किया जाता है - फ़ाइल-जागरूक गेट, बूलियन एक्सप्रेशन, प्रोजेक्ट अवलोकन, और रिपोर्ट में निर्यातित तर्क मेटाडेटा का समर्थन करता है।
- **स्कैन स्थिति / फिर से शुरू करना:** लंबे स्कैन को चेकपॉइंट करें और बाधा के बाद फिर से शुरू करें।
- **दमन आधार रेखा:** ज्ञात झूठे सकारात्मक परिणामों की आधार रेखा उत्पन्न करें और लागू करें ताकि उन्हें भविष्य की रिपोर्टों से दबाया जा सके।
- **वेब UI:** वास्तविक समय कंसोल फ़ीड और जॉब आर्टिफैक्ट ब्राउज़र के साथ ब्राउज़र-आधारित स्कैन लॉन्चर।
> सक्रिय संवर्द्धन जारी है। आगामी रिलीज़ के लिए कई नई सुविधाओं और सुधारों की योजना बनाई गई है।
नए नियमों को अपडेट करने या जोड़ने और भविष्य के विकास में योगदान देने के लिए स्वतंत्र महसूस करें।
यदि आपको कोई बग मिले, तो उन्हें [[email protected]](mailto:[email protected]) पर रिपोर्ट करें।
विस्तृत दस्तावेज़ीकरण: [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)
---
## आरंभ करना
Daksh SCRA चलाने के दो तरीके हैं - जो भी आपके वर्कफ़्लो के अनुकूल हो उसे चुनें:
| | सबसे उपयुक्त | यहाँ जाएँ |
|---|---|---|
| 🌐 **वेब UI (Docker)** | शुरू करने का सबसे आसान तरीका - एक कमांड, एक ब्राउज़र डैशबोर्ड, लाइव स्कैन प्रगति, और एक रिपोर्ट/आर्टिफैक्ट ब्राउज़र। अधिकांश उपयोगकर्ताओं के लिए अनुशंसित। | [वेब UI (Docker)](#web-ui-docker) |
| 💻 **CLI (Python)** | स्क्रिप्टिंग, CI पाइपलाइन, या Docker के बिना स्कैन चलाना। | [CLI सेटअप](#cli-setup) |
दोनों मार्ग बिल्कुल समान स्कैनिंग इंजन चलाते हैं - वेब UI उसी CLI के ऊपर एक ब्राउज़र फ्रंट एंड है, इसलिए परिणाम दोनों तरह से समान होते हैं।
---
## वेब UI (Docker)
Daksh SCRA चलाने का सबसे तेज़ तरीका इसके ब्राउज़र-आधारित वेब UI के माध्यम से है, जिसे एक ही Docker Compose कमांड से लॉन्च किया जाता है। यह आपको एक स्कैन लॉन्चर, एक लाइव कंसोल फ़ीड, और पिछली रिपोर्टों का ब्राउज़ करने योग्य इतिहास देता है, बिना स्थानीय Python वातावरण की आवश्यकता के।
Docker सेटअप वेब UI और CLI को उसी इमेज से निर्मित स्वतंत्र सेवाओं के रूप में चलाता है, इसलिए आप उसी कंटेनर से दोनों (या दोनों में से कोई भी) उपयोग कर सकते हैं।
### वेब UI लॉन्च करें
फोरग्राउंड मोड (लॉग आपके टर्मिनल पर स्ट्रीम होते हैं):```bash
docker compose up --build
अलग / बैकग्राउंड मोड:```bash docker compose up --build -d
फिर [http://localhost:8080](http://localhost:8080) खोलें।
एक अलग पोर्ट उपयोग करने के लिए:```bash
DAKSH_PORT=9090 docker compose up
स्टैक को रोकने के लिए:```bash docker compose down
### लॉगिन करना
Web UI के लिए एक खाते की आवश्यकता होती है। पहली बार शुरू होने पर, `DAKSH_ADMIN_USERNAME` / `DAKSH_ADMIN_PASSWORD` से एक प्रारंभिक व्यवस्थापक खाता बनाया जाता है (इन्हें `.env` में सेट करें); यदि `DAKSH_ADMIN_PASSWORD` को खाली छोड़ दिया जाता है, तो एक यादृच्छिक पासवर्ड उत्पन्न होता है और API के स्टार्टअप लॉग में एक बार प्रिंट होता है - इसे सहेज लें, क्योंकि बाद में इसे पुनर्प्राप्त नहीं किया जा सकता।
पहली बार लॉगिन करने पर आपको अपना स्वयं का पासवर्ड (और, वैकल्पिक रूप से, उपयोगकर्ता नाम) सेट करना होगा। एक व्यवस्थापक खाता `POST /api/v1/auth/users` API एंडपॉइंट के माध्यम से अतिरिक्त खाते बना सकता है (इसके लिए अभी तक कोई समर्पित UI नहीं है)। प्रमाणीकरण से संबंधित सेटिंग्स (सत्र अवधि, कुकी सुरक्षा, CORS) की पूरी सूची के लिए `.env.example` देखें।
### आपको क्या मिलता है
- स्कैन, रिकॉन, अनुमान, रिकॉन+अनुमान, सूची, और PDF-से-JSON मोड के लिए प्रतिक्रियाशील कमांड बिल्डर
- निष्पादन के दौरान रीयल-टाइम कंसोल फ़ीड और प्रति-चरण लाइव प्रगति
- HTML / PDF / JSON आउटपुट के लिए प्रति-कार्य आर्टिफैक्ट स्नैपशॉट
- रन फॉर्म, लाइव फ़ीड, आर्टिफैक्ट्स, और हाल के कार्यों में तेज़ इन-ब्राउज़र नेविगेशन
- लक्ष्य पथ चुनने के लिए अंतर्निहित निर्देशिका ब्राउज़र (OS-जागरूक: Windows, macOS, Linux / Docker)
हुड के नीचे, CLI ही स्रोत सत्य है - यह सभी स्कैनिंग करता है और हर HTML / PDF / JSON आउटपुट उत्पन्न करता है। Web UI एक समय में एक सक्रिय कार्य चलाता है और प्रत्येक पूर्ण कार्य के आउटपुट को `runtime/webui/jobs/<job-id>/artifacts/` में स्नैपशॉट करता है ताकि पिछली रिपोर्टें सुलभ रहें।
### Docker में CLI चलाना
CLI का उपयोग करने के लिए आपको स्थानीय Python वातावरण की आवश्यकता नहीं है - यह अपनी स्वयं की Compose सेवा के रूप में उपलब्ध है, जो उसी इमेज से बनाई गई है:```bash
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source
छवि में क्या है
- FastAPI बैकएंड + Web UI फ्रंटएंड
- पूर्ण Daksh SCRA CLI, एक अलग सेवा के रूप में
- Playwright Chromium, PDF जनरेशन के लिए
- स्थायी
reports/औरruntime/वॉल्यूम - होस्ट पाथ माउंट ताकि स्कैन कंटेनर के अंदर से सोर्स ट्री तक पहुंच सकें
मुख्य माउंट पॉइंट:
| माउंट | कंटेनर के अंदर पाथ |
|---|---|
| प्रोजेक्ट सोर्स | /app |
| डिफ़ॉल्ट स्कैन रूट | /scan-targets |
| होस्ट ड्राइव उपनाम | /host, /host/c, /host/d |
| WSL माउंट | /mnt, /run/desktop/mnt/host |
पर्यावरण चर (.env में कॉन्फ़िगर करें):
| चर | विवरण |
|---|---|
DAKSH_PORT | Web UI पोर्ट (डिफ़ॉल्ट: 8080) |
DAKSH_SCAN_ROOT | कंटेनर के अंदर डिफ़ॉल्ट लक्ष्य निर्देशिका |
DAKSH_HOST_SOURCE | /scan-targets के रूप में माउंट करने के लिए होस्ट पाथ (डिफ़ॉल्ट: /tmp) |
DAKSH_HOST_MOUNT | अतिरिक्त होस्ट माउंट रूट |
DAKSH_HOST_C | Windows C: ड्राइव पाथ (WSL) |
DAKSH_HOST_D | Windows D: ड्राइव पाथ (WSL) |
DAKSH_DESKTOP_MOUNT | WSL डेस्कटॉप माउंट पाथ |
DAKSH_BROWSE_ROOTS | डायरेक्टरी ब्राउज़र रूट ओवरराइड करें (कॉमा-सेपरेटेड) |
DAKSH_ADMIN_USERNAME | प्रारंभिक एडमिन उपयोगकर्ता नाम (डिफ़ॉल्ट: admin) |
DAKSH_ADMIN_PASSWORD | प्रारंभिक एडमिन पासवर्ड - स्पष्ट रूप से सेट करने की दृढ़ता से अनुशंसा की जाती है |
Docker चलाने से पहले .env.example को .env में कॉपी करें और अपनी मशीन के लिए पाथ और क्रेडेंशियल सेट करें।
CLI सेटअप
Daksh SCRA को सीधे Python के साथ चलाना पसंद है? इसे स्थानीय रूप से सेट करने का तरीका यहां दिया गया है।
पूर्व-आवश्यकताएँ
- Python 3.8+
requirements.txtमें सूचीबद्ध सभी लाइब्रेरीज़
1. Daksh SCRA डाउनलोड करें```bash
git clone https://github.com/coffeeandsecurity/DakshSCRA.git
या नवीनतम ज़िप [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) से डाउनलोड करें और इसे अनज़िप करें।
### 2. वर्चुअल एनवायरनमेंट सेट अप करें
> 💡 वर्चुअल एनवायरनमेंट किसी भी डायरेक्टरी में बनाया जा सकता है - इसे DakshSCRA फ़ोल्डर के अंदर होना आवश्यक नहीं है।
**विकल्प A: एक-चरणीय सेटअप (अनुशंसित)**```bash
python setup_env.py
यह स्क्रिप्ट वर्चुअल एनवायरनमेंट बनाती है, सभी डिपेंडेंसी इंस्टॉल करती है, और Playwright का Chromium ब्राउज़र इंस्टॉल करती है (PDF एक्सपोर्ट के लिए आवश्यक)।
विकल्प B: मैन्युअल सेटअप
Windows:```bash python -m venv daksh-env .\daksh-env\Scripts\activate
macOS / Linux:```bash
python3 -m venv daksh-env
source daksh-env/bin/activate
फिर निर्भरताएँ स्थापित करें:```bash cd path/to/DakshSCRA pip install -r requirements.txt playwright install chromium
---
## CLI उपयोग
वर्चुअल एनवायरनमेंट के अंदर `python` का उपयोग करें, या उसके बाहर `python3` का।
### कमांड-लाइन विकल्प```
usage: dakshscra.py [-h] [-r RULES] [-f FILE_TYPES] [-v] [-t TARGET_DIR]
[-l {R,RF}] [--recon] [--rs] [--estimate]
[-rpt FORMATS] [--pdf-from-json]
[--json-input-dir PATH] [--pdf-output PATH]
[--pdf-multi-dir PATH] [--pdf-single-only]
[--skip-analysis] [--loc]
[--baseline-file PATH] [--baseline-generate] [--no-baseline]
[--review-config PATH]
[--resume-scan] [--state-file PATH] [--no-state] [--state]
| विकल्प | विवरण |
|---|---|
-r RULES | प्लेटफ़ॉर्म नियम (जैसे php, java, php,java) या स्वतः पहचान के लिए auto |
-f FILE_TYPES | स्कैनिंग के लिए डिफ़ॉल्ट फ़ाइल प्रकारों को ओवरराइड करें |
-v | वर्बोसिटी स्तर (-v, -vv, -vvv) |
-t TARGET_DIR | लक्ष्य स्रोत कोड निर्देशिका |
-l {R,RF} | प्लेटफ़ॉर्म नियम + फ्रेमवर्क सूचीबद्ध करें [R] या फ़ाइल प्रकार शामिल करें [RF] |
--recon | टोही चलाएँ (प्लेटफ़ॉर्म / फ्रेमवर्क / भाषा पहचान) |
--rs, --recon-strict | सख्त टोही: केवल उच्च-विश्वास वाली पहचान (इसे --recon के साथ उपयोग करें) |
--estimate | कोडबेस आकार के आधार पर कोड समीक्षा प्रयास का अनुमान लगाएँ |
-rpt, --report FORMATS | रिपोर्ट प्रारूप: html, pdf, या html,pdf (डिफ़ॉल्ट: html) |
--pdf-from-json | पुनः स्कैन किए बिना मौजूदा JSON आउटपुट से PDF रिपोर्ट बनाएँ |
--json-input-dir PATH | JSON रिपोर्ट निर्देशिका (डिफ़ॉल्ट: ./reports/data) |
--pdf-output PATH | एकल PDF आउटपुट पथ (डिफ़ॉल्ट: ./reports/scan/pdf/report.pdf) |
--pdf-multi-dir PATH | बहु-फ़ाइल PDF आउटपुट निर्देशिका (डिफ़ॉल्ट: ./reports/scan/pdf/multi-file) |
--pdf-single-only | केवल संयुक्त एकल-फ़ाइल PDF बनाएँ; प्रति-प्लेटफ़ॉर्म बहु-फ़ाइल सेट छोड़ें |
--skip-analysis | इस रन के लिए विश्लेषक चरण अक्षम करें |
--loc | प्रभावी कोड की पंक्तियाँ गिनें |
--baseline-file PATH | दमन बेसलाइन फ़ाइल (JSON) |
--baseline-generate | वर्तमान निष्कर्षों से दमन बेसलाइन बनाएँ |
--no-baseline | इस रन के लिए बेसलाइन दमन अक्षम करें |
--review-config PATH | निष्कर्ष ट्राइएज फ़ाइल (JSON); पहले समीक्षित झूठे सकारात्मक को रिपोर्ट से दबाएँ |
--resume-scan | स्टेट फ़ाइल से पहले बाधित स्कैन फिर से शुरू करें |
--state-file PATH | कस्टम स्कैन स्टेट / चेकपॉइंट फ़ाइल पथ |
--no-state | इस रन के लिए स्कैन स्टेट चेकपॉइंटिंग अक्षम करें |
--state | इस रन के लिए स्कैन स्टेट चेकपॉइंटिंग को बलपूर्वक सक्षम करें |
उपयोग उदाहरण
-f(फ़ाइल प्रकार) वैकल्पिक है। यदि निर्दिष्ट नहीं किया गया है, तो DakshSCRA चयनित प्लेटफ़ॉर्म के लिए डिफ़ॉल्ट फ़ाइल प्रकारों का उपयोग करता है।```bash
Single platform scan
python dakshscra.py -r php -t /path/to/source
Multiple platforms
python dakshscra.py -r php,java,cpp -t /path/to/source
Auto-detect platform and apply matching rules
python dakshscra.py -r auto -t /path/to/source
Override filetypes
python dakshscra.py -r php -f dotnet -t /path/to/source
Reconnaissance only (no scanning)
python dakshscra.py --recon -t /path/to/source
Reconnaissance + scanning
python dakshscra.py --recon -r php -t /path/to/source
Strict recon (high-confidence detections only)
python dakshscra.py --recon --rs -t /path/to/source
Effort estimation
python dakshscra.py --estimate -t /path/to/source
Scan with HTML + PDF report output
python dakshscra.py -r auto -t /path/to/source -rpt html,pdf
Verbosity levels
python dakshscra.py -r php -v -t /path/to/source # default python dakshscra.py -r php -vvv -t /path/to/source # show all pattern checks
Generate suppression baseline from current findings
python dakshscra.py -r auto -t /path/to/source --baseline-generate
Apply suppression baseline (suppress known FPs)
python dakshscra.py -r auto -t /path/to/source --baseline-file config/suppressions.json
Disable baseline for this run
python dakshscra.py -r auto -t /path/to/source --no-baseline
Apply findings triage / review config
python dakshscra.py -r auto -t /path/to/source --review-config config/review.json
Scan with checkpoint state enabled
python dakshscra.py -r auto -t /path/to/source --state
Resume an interrupted scan
python dakshscra.py -r auto -t /path/to/source --resume-scan
Resume with a custom state file
python dakshscra.py -r auto -t /path/to/source --resume-scan --state-file runtime/scan_state.json
Generate PDF from existing JSON outputs (no re-scan)
python dakshscra.py --pdf-from-json
Generate PDF from a custom JSON directory
python dakshscra.py --pdf-from-json --json-input-dir ./custom/reports/data
Custom output paths for PDF
python dakshscra.py --pdf-from-json --pdf-output ./reports/scan/pdf/custom.pdf --pdf-multi-dir ./reports/scan/pdf/multi-file
Single combined PDF only (skip per-platform set)
python dakshscra.py --pdf-from-json --pdf-single-only
### समर्थित प्लेटफ़ॉर्म नियम और फ्रेमवर्क```bash
python dakshscra.py -l R # List platform rules and framework mappings
python dakshscra.py -l RF # List platform rules, framework mappings, and filetypes
| प्लेटफ़ॉर्म | फ्रेमवर्क |
|---|---|
| dotnet | aspnetcore, entityframework |
| php | codeigniter, drupal, laravel, symfony, wordpress |
| java | hibernate, spring, springboot |
| javascript | angular, express, nestjs, nextjs, react, vue |
| kotlin | ktor, springkotlin |
| python | django, fastapi, flask |
| go | echo, fiber, gin |
| c | freertos |
| cpp | boost, qt |
| android | cordova-android, flutter-android, ionic-android, jetpack, nativescript-android, reactnative-android, xamarin-android |
| ios | cordova-ios, flutter-ios, ionic-ios, nativescript-ios, reactnative-ios, swiftui, uikit, xamarin-ios |
| reactnative | reactnative |
| flutter | flutter |
| xamarin | xamarin |
| ionic | ionic |
| nativescript | nativescript |
| cordova | cordova |
| ruby | rails, sinatra |
| rust | actix, axum, rocket |
| common | - |
नवीनतम समर्थित प्लेटफ़ॉर्म और फ्रेमवर्क प्राप्त करने के लिए, हमेशा चलाएँ:```bash python dakshscra.py -l R
---
## कॉन्फ़िगरेशन संदर्भ
### `config/tool.yaml`
Daksh SCRA रनटाइम डिफ़ॉल्ट `config/tool.yaml` के माध्यम से नियंत्रित किए जाते हैं।```yaml
state_management:
enabled: false
resume_mode: manual
persist_after_seconds: 300
persist_interval_seconds: 30
default_state_file: runtime/scan_state.json
cleanup_on_success: false
analysis:
run_by_default: true
include_frameworks: true
report_theme: hacker_mode
विश्लेषक कॉन्फ़िग विकल्प:
analysis.run_by_defaulttrue: विश्लेषक स्कैन के दौरान स्वचालित रूप से चलता हैfalse: विश्लेषक अक्षम रहता है जब तक कि कॉन्फ़िग या CLI के माध्यम से पुनः सक्षम न किया जाए
analysis.include_frameworkstrue: फ्रेमवर्क-स्तरीय विश्लेषक प्रविष्टियाँ शामिल करें जहाँ फ्रेमवर्क पहचान मौजूद हैfalse: केवल प्लेटफ़ॉर्म-स्तरीय विश्लेषक आउटपुट
analysis.report_themehacker_mode: गहरा उच्च-कंट्रास्ट आधुनिक विश्लेषक थीम (डिफ़ॉल्ट)professional_mode: हल्का आधुनिक विश्लेषक थीमboth: दोनों थीम वेरिएंट साथ-साथ उत्पन्न करें
RDL नियम लेखन
RDL (Rule Description Language) DakshSCRA की बाहरीकृत नियम-लॉजिक परत है। वर्तमान आर्किटेक्चर में:
- XML नियम नियम सूची बने रहते हैं और
name,regex, विवरण, और वैकल्पिकscan_configजैसे मेटाडेटा रखते हैं। - RDL लॉजिक
core/rdl_engine.pyद्वारा निष्पादित किया जाता है। - नियम लॉजिक फ़ाइलें
rules/scanning/logic/...के अंतर्गत रहती हैं और XML से<rdl_ref>का उपयोग करके संदर्भित की जाती हैं। rdl_refमानrules/scanning/के सापेक्ष हल किए जाते हैं, उदाहरण के लिए:logic/php/core/some_rule.rdl->rules/scanning/logic/php/core/some_rule.rdl- लॉजिक परिणाम रिपोर्ट JSON में
logic_engine,logic_source,logic_reason,logic_trace,logic_consulted_files, औरlogic_outcomeजैसे मेटाडेटा के रूप में निर्यात किए जाते हैं।
पुराना इनलाइन <rdl> रूप अब सक्रिय आर्किटेक्चर नहीं है और नए नियमों के लिए इसका उपयोग नहीं किया जाना चाहिए।
RDL आर्किटेक्चर एक नज़र में```text
XML rule -> regex / exclude / scan_config / descriptions -> rdl_ref -> rules/scanning/logic///.rdl -> core/rdl_engine.py -> pass / fail -> reason / fail_reason -> trace / consulted_files / outcome
#### स्कैन अनुक्रम
स्रोत नियम के लिए, DakshSCRA तर्क का मूल्यांकन इस क्रम में करता है:
1. Recon मिलान वाले प्लेटफ़ॉर्म और फ्रेमवर्क का चयन करता है।
2. XML नियम `rules/scanning/platform/...` से लोड किया जाता है।
3. `regex` उम्मीदवार पंक्तियाँ या पूरे-फ़ाइल मिलान ढूँढता है, जब मौजूद हो।
4. `exclude` उस नियम के लिए स्पष्ट शोर हटाता है, यदि मौजूद हो।
5. `rdl_ref` से बाहरी `.rdl` फ़ाइल का मूल्यांकन वर्तमान फ़ाइल टेक्स्ट, वर्तमान फ़ाइल पथ और प्रोजेक्ट रूट के विरुद्ध किया जाता है।
6. यदि RDL स्क्रिप्ट पास होती है, तो DakshSCRA निष्कर्ष को बनाए रखता है और निर्यात किए गए लॉजिक मेटाडेटा को रिपोर्ट आउटपुट में मर्ज करता है।
7. यदि RDL स्क्रिप्ट विफल होती है, तो मिलान को RDL विफलता कारण और निर्णय ट्रेस मेटाडेटा के साथ दबा दिया जाता है।
`filepaths.xml` में फ़ाइल-पथ नियमों के लिए, वही `rdl_ref` मॉडल लागू होता है, लेकिन मिलान का विषय
स्रोत कोड टेक्स्ट के बजाय सामान्यीकृत सापेक्ष पथ होता है। उस मोड में, RDL को सापेक्ष पथ
स्ट्रिंग वर्तमान-फ़ाइल टेक्स्ट और पथ संदर्भ के रूप में प्राप्त होती है।
#### वर्तमान नियम संरचना```xml
<rule>
<name>Rule Name</name>
<regex><![CDATA[regex_to_match]]></regex>
<rdl_ref>logic/common/core/insecure_sql_query_unsafe_string_concatenation.rdl</rdl_ref>
<exclude><![CDATA[pattern_to_exclude_lines]]></exclude> <!-- optional -->
<scan_config>...</scan_config> <!-- optional -->
<rule_desc>Short description of what the rule detects.</rule_desc>
<vuln_desc>Why the pattern matters.</vuln_desc>
<developer>Fix guidance for developers.</developer>
<reviewer>Manual confirmation guidance for reviewers.</reviewer>
</rule>
वर्तमान .rdl संरचना```text
VERSION 1 WHEN PRESENT /\b(?:mysql_query|mysqli_query|->query)\s*\(/i WHEN EXPR PRESENT:\$_(GET|POST|REQUEST|COOKIE) && MISSING:\b(?:prepare|bindParam|bindValue|PDO::prepare)\b REPORT AS area_of_interest REASON SQL query execution appears reachable without parameterisation in this file. FAIL_REASON Matching query API was found, but the file also contains prepared-statement indicators. TRACE SQLi gate: input source present and mitigation missing.
#### वर्तमान लेआउट```text
rules/
└── scanning/
├── platform/
│ ├── php/php.xml
│ ├── java/java.xml
│ └── ...
└── logic/
├── common/core/
├── php/core/
├── php/framework/laravel/
├── mobile/android/core/
├── filepaths/core/
└── ...
निष्पादन शब्दार्थ
WHEN PRESENT,WHEN MISSING, औरWHEN CURRENT_FILE_MATCHESवर्तमान फ़ाइल टेक्स्ट के विरुद्ध मूल्यांकन करते हैं।WHEN FILE_NAME_ISऔरWHEN FILE_PATH_MATCHESवर्तमान फ़ाइल पथ संदर्भ के विरुद्ध मूल्यांकन करते हैं।WHEN EXPRPRESENT:,MISSING:, औरEXISTS:विधेय पर बूलियन तर्क का समर्थन करता है।OBSERVE PROJECT_HAS_GLOB ... AS ...निष्कर्ष को गेट नहीं करता; यह ट्रेस मेटाडेटा में संबंधित प्रोजेक्ट फ़ाइलों को रिकॉर्ड करता है।REPORT AS,REASON,FAIL_REASON, औरTRACEनिर्यातित रिपोर्टिंग मेटाडेटा को नियंत्रित करते हैं।- रेगेक्स टोकन या तो कच्चे पैटर्न के रूप में या
/pattern/flagsके रूप में लिखे जा सकते हैं, जिनमेंi,m, औरsसमर्थित हैं।
समर्थित RDL कमांड
| कमांड | व्यवहार | विशिष्ट उपयोग |
|---|---|---|
WHEN PRESENT <regex> | वर्तमान फ़ाइल टेक्स्ट में पैटर्न के मौजूद होने की आवश्यकता | सह-घटित जोखिमपूर्ण API या संवेदनशील फ़ील्ड की आवश्यकता |
WHEN MISSING <regex> | वर्तमान फ़ाइल टेक्स्ट में पैटर्न के अनुपस्थित होने की आवश्यकता | जब शमन पहले से मौजूद हो तो दबाएँ |
WHEN EXPR <expr> | PRESENT: / MISSING: / EXISTS: के साथ &&, ` | |
WHEN CURRENT_FILE_MATCHES <regex> | पूर्ण वर्तमान फ़ाइल टेक्स्ट के विरुद्ध मिलान | जटिल संपूर्ण-फ़ाइल स्थितियों की पुनः जाँच |
WHEN FILE_NAME_IS <name> | वर्तमान फ़ाइलनाम का सटीक मिलान आवश्यक | plist / manifest / config नियमों को सीमित करें |
WHEN FILE_PATH_MATCHES <glob> | वर्तमान सापेक्ष पथ का glob से मिलान आवश्यक | फ्रेमवर्क/कॉन्फ़िग पथ नियमों को संकीर्ण करें |
UNLESS CURRENT_FILE_MATCHES <regex> | जब पूरी फ़ाइल बहिष्करण पैटर्न से मेल खाती है तो विफल | ज्ञात-सुरक्षित संरचनात्मक मामलों को ब्लॉक करें |
OBSERVE PROJECT_HAS_GLOB <glob> AS <label> | ट्रेस मेटाडेटा में संबंधित प्रोजेक्ट फ़ाइलों को रिकॉर्ड करें | सहायक कॉन्फ़िग या साथी फ़ाइलों को सतह पर लाएँ |
REPORT AS <outcome> | नियम परिणाम सेट करें, आमतौर पर area_of_interest | भविष्य-प्रूफ स्पष्ट परिणाम |
REASON <text> | नियम पास होने पर दिखाया गया कारण | बताएँ कि निष्कर्ष दृश्यमान क्यों रहा |
FAIL_REASON <text> | नियम मिलान को दबाने पर दिखाया गया कारण | बताएँ कि हिट को फ़िल्टर क्यों किया गया |
TRACE <text> | डीबग/निर्णय ट्रेस पंक्तियाँ जोड़ें | माइग्रेशन/डीबगिंग समर्थन |
WHEN EXPR में बूलियन अभिव्यक्तियाँ समर्थन करती हैं:
PRESENT:<regex>MISSING:<regex>EXISTS:<regex>&&,||,!, और कोष्ठक
उदाहरण 1 - PHP SQL इंजेक्शन गेटिंग
XML नियम:```xml Possible SQL Injection in Query Execution query)\s*\(]]> <rdl_ref>logic/common/core/insecure_sql_query_unsafe_string_concatenation.rdl</rdl_ref> <rule_desc>...</rule_desc>
बाहरी RDL:```text
VERSION 1
WHEN PRESENT /\b(?:mysql_query|mysqli_query|->query)\s*\(/i
WHEN EXPR PRESENT:\$_(GET|POST|REQUEST|COOKIE) && MISSING:\b(?:prepare|bindParam|bindValue|PDO::prepare)\b
REPORT AS area_of_interest
REASON Query execution appears to rely on direct input without parameterisation.
FAIL_REASON Query API matched, but parameterised query indicators were also found in the file.
उदाहरण 2 - फ़ाइल-जागरूक जाँच के साथ Android मैनिफेस्ट नियम
XML नियम:```xml Exported Components Without Permission activity|service|receiver|provider)\s[^>]*android:name="(?P[^"]+)"[^>]*android:exported="true"[^>]*(?:/>|>)]]> <rdl_ref>logic/mobile/android/core/exported_components.rdl</rdl_ref> <scan_config>...</scan_config>
बाहरी RDL:```text
VERSION 1
WHEN FILE_NAME_IS AndroidManifest.xml
WHEN CURRENT_FILE_MATCHES /android:exported\s*=\s*"true"/i
WHEN MISSING /android:permission\s*=\s*"/i
REPORT AS area_of_interest
REASON Exported component appears reachable without a permission guard.
उदाहरण 3 - फ़ाइल-पथ रुचि-क्षेत्र नियम
XML नियम:```xml Admin Section File Path <rdl_ref>logic/filepaths/core/admin_section.rdl</rdl_ref>
बाहरी RDL:```text
VERSION 1
WHEN CURRENT_FILE_MATCHES /(^|\/)(admin|administrator|root)(\/|$)/i
UNLESS CURRENT_FILE_MATCHES /(^|\/)(tests?|docs?|samples?|examples?)(\/|$)/i
REPORT AS area_of_interest
REASON File path suggests privileged application functionality.
FAIL_REASON Path matched an excluded documentation or sample location.
लेखन मार्गदर्शन
regexको इतना व्यापक रखें कि उम्मीदवारों को पकड़ सके, फिर संदर्भ को फ़िल्टर करने के लिए RDL का उपयोग करें।- सभी नियम तर्क के लिए
rdl_refको प्राथमिकता दें और.rdlफ़ाइल को उपयुक्त प्लेटफ़ॉर्म/फ्रेमवर्क तर्क ट्री के पास रखें। - नए इनलाइन
<rdl>ब्लॉक न जोड़ें। - सरल गेट्स के लिए
WHEN PRESENT/WHEN MISSINGका उपयोग करें औरWHEN EXPRका उपयोग केवल तब करें जब तर्क वास्तव में बूलियन हो। - समीक्षक-उन्मुख तर्क
REASONमें रखें और दमन स्पष्टीकरणFAIL_REASONमें रखें। PRESENTऔरMISSINGको पूरी-फ़ाइल जाँच के रूप में मानें। फ़ाइल में कहीं भी एक शमन उस फ़ाइल के हर मैच को दबा सकता है।- निष्कर्षों को प्रोजेक्ट संदर्भ से समृद्ध करने के लिए
OBSERVE PROJECT_HAS_GLOBका उपयोग करें, न कि पास/फेल गेट के रूप में। logic/...पथों को स्थिर और प्लेटफ़ॉर्म-स्कोप्ड रखें ताकि XML नियम पतले रहें और तर्क परत पुन: प्रयोज्य बनी रहे।
रिपोर्ट आउटपुट संरचना
सभी आउटपुट reports/ निर्देशिका के अंतर्गत लिखे जाते हैं:```
reports/
├── scan/
│ ├── html/
│ │ ├── report.html # Single-file HTML scan report
│ │ └── multi-file/ # Per-platform HTML report set
│ ├── pdf/
│ │ ├── report.pdf # Single-file PDF scan report
│ │ └── multi-file/ # Per-platform PDF report set
│ ├── recon/
│ │ └── reconnaissance.html # Reconnaissance HTML report
│ └── estimate/
│ └── estimation.html # Effort estimation HTML report
├── analysis/
│ └── /
│ ├── analysis.html # Taint analysis report (default theme)
│ ├── analysis_professional.html # Professional theme (if theme=both)
│ ├── analysis_xref.html # Cross-reference report
│ └── analysis.json # Structured analysis data
└── data/
├── areas_of_interest.json # AoI findings
├── filepaths_aoi.json # File path AoI findings
├── summary.json # Scan summary
├── recon.json # Recon summary
└── analysis.json # Analyzer output
रनटाइम फ़ाइलें (स्कैन स्थिति, लॉग, इन्वेंट्री) `runtime/` के अंतर्गत लिखी जाती हैं।
वेब UI के माध्यम से चलाते समय, प्रत्येक जॉब के आउटपुट को अतिरिक्त रूप से `runtime/webui/jobs/<job-id>/artifacts/` के अंतर्गत स्नैपशॉट किया जाता है (देखें [Web UI (Docker)](#web-ui-docker))।
---
## लेखक
| | |
|---|---|
| वेबसाइट | [coffeeandsecurity.com](https://www.coffeeandsecurity.com) |
| ईमेल | [email protected] |
| ट्विटर / X | [@coffeensecurity](https://x.com/coffeensecurity) |
| स्रोत | [github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) |
| लाइसेंस | GNU जनरल पब्लिक लाइसेंस v3.0 (GPL-3.0) |
यदि DakshSCRA ने आपकी टीम का महत्वपूर्ण समय, प्रयास, या लागत बचाने में मदद की है, महंगे वाणिज्यिक टूल्स पर निर्भरता कम की है, समीक्षा कवरेज में सुधार किया है, या कोड समीक्षा को अधिक संरचित और प्रभावी बनाया है, तो बेझिझक संपर्क करें और अपना अनुभव साझा करें। मैं हमेशा विचारशील प्रतिक्रिया और दिलचस्प बातचीत के लिए तैयार हूँ।
कोई बग मिला या योगदान देना चाहते हैं? GitHub पर एक issue या pull request खोलें।