
COBOL लिगेसी सिस्टम्स के लिए सुरक्षा हार्डनिंग टूलकिट — अदृश्य यूनिकोड डिटेक्शन, फॉर्मेट बाउंड्री विश्लेषण, सोर्स ट्रांसफॉर्मेशन इंटीग्रिटी
COBOL लिगेसी सिस्टम्स के लिए सुरक्षा ऑडिटिंग टूलकिट
VTR Research Methodology का हिस्सा | DOI: 10.5281/zenodo.22063208 Status: Reproducible | License: MIT | Track: Critical Infrastructure
GnuCOBOL स्रोतों में कंपाइलेशन कॉन्टेक्स्ट विचलन, अदृश्य Unicode हमलों, और असुरक्षित COBOL पैटर्न का पता लगाता है। एक ही स्रोत फ़ाइल -fixed बनाम -free के साथ कंपाइल करने पर अलग-अलग प्रोग्राम उत्पन्न करती है — यह टूल उस विचलन को देखने योग्य और पुनरुत्पादन योग्य बनाता है।
git clone https://github.com/LuisCastellanos-dev/cobol-shield
cd cobol-shield
bash tools/poc_compiler_flag.sh
यह टूल रिमोट कोड एक्ज़ीक्यूशन, प्रिविलेज एस्केलेशन, या नेटवर्क एक्सप्लॉइटेशन का दावा या प्रदर्शन नहीं करता। VTR पद्धति के अनुसार निष्कर्षों को CONFIRMADO, PROBABLE, या OBSERVADO के रूप में वर्गीकृत किया जाता है — वर्गीकरण प्रमाण की मजबूती को दर्शाता है, प्रभाव की गंभीरता को नहीं।
COBOL लिगेसी सिस्टम्स के लिए सुरक्षा ऑडिटिंग टूलकिट
GnuCOBOL स्रोतों में अदृश्य Unicode हमलों, असुरक्षित COBOL पैटर्न, और फ़ॉर्मेट रूपांतरण अखंडता समस्याओं का पता लगाता है। GnuCOBOL 3.1.2 के साथ सत्यापित। IBM Enterprise COBOL या Micro Focus पर व्यवहार सत्यापित नहीं — कंपाइलर-विशिष्ट फ़्लैग सेमांटिक्स भिन्न हो सकते हैं।
PIC X सब कुछ स्वीकार करता है। आपके बैच को नहीं करना चाहिए।
cobol-shield दो अलग-अलग खतरे की सतहों को कवर करता है:
1. Unicode अदृश्य अक्षर — CVE-2021-42574 और Glassworm-श्रेणी के वेक्टर जो विज़ुअल कोड समीक्षा को बायपास करते हैं और PIC X फ़ील्ड्स को चुपचाप दूषित करते हैं।
2. COBOL स्टैटिक विश्लेषण — लिगेसी स्रोतों में असुरक्षित पैटर्न: अनइनिशियलाइज़्ड वर्किंग-स्टोरेज, अनचेक्ड STRING/UNSTRING ओवरफ़्लो, REDEFINES आकार बेमेल, और फ़िक्स्ड-फ़ॉर्मेट पोज़िशनल शर्तें जो रूपांतरण के तहत अर्थ बदल देती हैं।
| फ़ाइल | उद्देश्य |
|---|---|
tools/check-invisibles.py | CI चेकर — अदृश्य Unicode का पता चलने पर 1 के साथ बाहर निकलता है |
tools/clean-invisibles.py | फ़ॉरेंसिक ऑडिट लॉग के साथ सैनिटाइज़र |
src/AUDITOR-INVISIBLE.cob | HEX-OF का उपयोग करने वाला इन-COBOL बाइट वैलिडेटर |
tools/cobol_rules.py | स्टैटिक विश्लेषण नियम R-01 से R-04 |
tools/transform_renumber.py | फ़िक्स्ड-फ़ॉर्मेट रीनंबर शिफ्ट सिम्युलेटर (चरण 2) |
tools/poc_compiler_flag.sh | निर्णायक PoC — एक ही फ़ाइल, -fixed बनाम -free, कंपाइलर फ़्लैग विचलन |
tools/poc_differential.sh | चरण 2 डिफ़रेंशियल PoC — SOURCE A बनाम SOURCE B (मैनुअल माइग्रेशन) |
प्रत्येक नियम VTR Finding Schema v1 आउटपुट उत्पन्न करता है जो context_loader के माध्यम से
cryptofault और vtr-forensic-img के साथ संगत है।
| नियम | नाम | गंभीरता | वर्गीकरण |
|---|---|---|---|
| R-01 | UNINITIALIZED_WS | उच्च | HECHO |
| R-02 | UNSTRING_NO_OVERFLOW | उच्च | HECHO |
| R-03 | REDEFINES_SIZE_MISMATCH | उच्च | HECHO |
| R-04 | FORMAT_BOUNDARY_ANALYSIS | जानकारी | PROYECCION |
R-01 — UNINITIALIZED_WS VALUE क्लॉज़ के बिना और PROCEDURE DIVISION में INITIALIZE या MOVE के बिना घोषित Working-Storage वेरिएबल्स का पता लगाता है। बैच और CICS वातावरणों में मौन अपरिभाषित व्यवहार का जोखिम।
R-02 — UNSTRING_NO_OVERFLOW ON OVERFLOW हैंडलिंग के बिना STRING/UNSTRING स्टेटमेंट्स का पता लगाता है। जब इनपुट लक्ष्य फ़ील्ड लंबाई से अधिक हो तो मौन ट्रंकेशन।
R-03 — REDEFINES_SIZE_MISMATCH उन REDEFINES का पता लगाता है जहाँ पुनर्परिभाषित फ़ील्ड अपने आधार से अधिक बाइट्स घोषित करता है। मेमोरी सीमा उल्लंघन का जोखिम — कंपाइलर-निर्भर व्यवहार।
R-04 — FORMAT_BOUNDARY_ANALYSIS (चरण 1 — केवल अवलोकन) फ़िक्स्ड-फ़ॉर्मेट COBOL स्रोतों में पोज़िशनल शर्तों का पता लगाता है:
COL73_NONEMPTY — पहचान क्षेत्र (कॉलम 73–80) में गैर-स्पेस सामग्रीCOL7_VERB — कमेंट की गई पंक्ति में COBOL निष्पादन योग्य क्रिया (col7 = * / / / D)SOURCE_BOUNDARY — कॉलम 80 से आगे की सामग्रीR-04 severity=info, classification=PROYECCION उत्पन्न करता है। यह फ़ॉर्मेट
शर्तों का दस्तावेज़ीकरण करता है — कमज़ोरियों का नहीं। प्रभाव के लिए रूपांतरण
डिफ़रेंशियल विश्लेषण (चरण 2) की आवश्यकता है।
केंद्रीय थीसिस: एक COBOL फ़िक्स्ड-फ़ॉर्मेट फ़ाइल के अर्थ उस कंपाइलर फ़्लैग पर निर्भर करते हैं जिसके साथ इसे बनाया गया है — और वह फ़्लैग स्रोत फ़ाइल के बाहर रहता है।
GnuCOBOL 3.1.2 के साथ प्रदर्शित, एकल आर्टिफ़ैक्ट, कोई संशोधन नहीं:
bash tools/poc_compiler_flag.sh
cobc -x -fixed poc-same-file.cbl → compiles → output: 0000001000
cobc -x -free poc-same-file.cbl → 10 compilation errors
-fixed के तहत: पंक्ति 6 col7=* कमेंट इंडिकेटर है — MOVE 999999
निष्क्रिय है, प्रोग्राम निष्पादित होता है और 1000 प्रदर्शित करता है।
-free के तहत: अनुक्रम संख्याएँ 000100...001000 संख्यात्मक
लिटरल के रूप में पार्स की जाती हैं — PROGRAM-ID हेडर अनुपस्थित बताया जाता है, प्रत्येक पंक्ति
एक त्रुटि उत्पन्न करती है। एक ही फ़ाइल वाक्यात्मक रूप से अमान्य है।
कंपाइलर फ़्लैग स्रोत फ़ाइल के अंदर नहीं है। यह Makefile, CI कॉन्फ़िगरेशन, या ऑपरेटर इनवोकेशन में रहता है। इसे बदलना — जानबूझकर या गलती से — बदल देता है कि प्रोग्राम वैध है या नहीं और वह क्या करता है।
प्रमाण: corpus/fixed-format/poc-evidence.md
SHA-256 और पूर्ण त्रुटि लॉग प्रलेखित।
एक पूर्ववर्ती PoC मैनुअल माइग्रेशन के माध्यम से उसी थीसिस को प्रदर्शित करता है:
SOURCE A (fixed-format, col7='*' dormant): output → 0000001000
SOURCE B (free-format, code active): output → 0000999999
SHA-256 A: b70a948a0df5e8f685e82f5bffc9c4710f2c0a7a23b6294e7ca20092c2d25d37
SHA-256 B: f5fd80f79ed3e5be97628f89790256d6fba80605dce2b7985b729b5fef6f26d5
सीमा: SOURCE B गलत माइग्रेशन का मैनुअल प्रतिनिधित्व है, IBM Z Open Editor या वास्तविक रीनंबरिंग के तहत IBM SCU का आउटपुट नहीं। ऊपर दिए गए कंपाइलर फ़्लैग PoC में यह सीमा नहीं है।
पता लगाई गई रेंज:
| कोडपॉइंट | नाम | जोखिम |
|---|---|---|
| U+0001–U+001F | C0 Controls | बैच एबेंड्स |
| U+200B–U+200F | Zero-Width | डेटा करप्शन, VSAM ट्रंकेशन |
| U+202A–U+202E | Bidi Override | Trojan Source — CVE-2021-42574 |
| U+2066–U+2069 | Bidi Isolate | दिशा स्पूफ़िंग |
| U+FE00–U+FE0F | Variation Selectors | Glassworm-श्रेणी स्टेग्नोग्राफ़ी |
| U+E000–U+F8FF | Private Use Area | पेलोड छिपाना |
| U+FEFF | BOM | मौन प्रीपेंडेड बाइट |
# Byte-level inspection
hexdump -C source.cob | grep -E "e2 80 (8b|ae)"
# Unicode CI check — exits 1 on detection
python3 tools/check-invisibles.py .
# Sanitize with forensic audit log
python3 tools/clean-invisibles.py . --report audit-$(date +%Y%m%d).log
# Run static analysis rules
python3 -c "
from tools.cobol_rules import scan_path_r01, scan_path_r02, scan_path_r03, scan_path_r04
import json
for f in scan_path_r02('your-source.cbl'):
print(f.to_json())
"
# Transformation differential PoC
bash tools/poc_differential.sh
- name: Check for invisible Unicode
run: python3 tools/check-invisibles.py .
PIC X(n) एक रॉ बाइट बफ़र है। यह बिना सत्यापन के किसी भी बाइट अनुक्रम को
स्वीकार करता है। जब एक Zowe API लेयर MOVE के माध्यम से JSON को COBOL कॉपीबुक में
पास करती है, तो अदृश्य Unicode चुपचाप रिकॉर्ड में प्रवेश कर जाता है।
फ़िक्स्ड-फ़ॉर्मेट COBOL एक दूसरी सतह जोड़ता है: पोज़िशनल कॉलम सेमांटिक्स (col 7 इंडिकेटर क्षेत्र के रूप में, cols 73–80 पहचान क्षेत्र के रूप में) फ़ॉर्मेट-निर्भर हैं। एक माइग्रेशन टूल जो इन सेमांटिक्स को संरक्षित नहीं करता वह निष्क्रिय कोड सक्रिय कर सकता है या चुपचाप प्रोग्राम संरचना को दूषित कर सकता है।
CVE-2021-42574 के साथ साझा तंत्र डिटेक्शन गैप है — वह सामग्री जो विज़ुअल निरीक्षण को बायपास करती है। डेटा-फ़ील्ड ट्रंकेशन वेक्टर और फ़ॉर्मेट रूपांतरण वेक्टर CVE-2021-42574 में वर्णित स्रोत-कोड सेमांटिक फ़्लिप से अलग हैं।
pip install pytest
python -m pytest tests/ -q
# 159 tests, 0 failures