
مجموعة أدوات تقوية الأمان لأنظمة COBOL القديمة — كشف Unicode غير المرئي، تحليل حدود التنسيق، سلامة تحويل المصدر
مجموعة أدوات تدقيق أمني لأنظمة COBOL القديمة
جزء من منهجية أبحاث VTR | DOI: 10.5281/zenodo.22063208 الحالة: قابل لإعادة الإنتاج | الترخيص: MIT | المسار: البنية التحتية الحرجة
تكتشف تباينات سياق الترجمة، وهجمات Unicode غير المرئية، وأنماط COBOL غير الآمنة في مصادر GnuCOBOL. الملف المصدري نفسه عند ترجمته باستخدام -fixed مقابل -free ينتج برامج مختلفة — هذه الأداة تجعل هذا التباين قابلاً للملاحظة وإعادة الإنتاج.
git clone https://github.com/LuisCastellanos-dev/cobol-shield
cd cobol-shield
bash tools/poc_compiler_flag.sh
لا تدّعي هذه الأداة أو تُثبت تنفيذ تعليمات برمجية عن بُعد، أو تصعيد الصلاحيات، أو استغلال الشبكة. تُصنَّف النتائج كـ CONFIRMADO أو PROBABLE أو OBSERVADO وفق منهجية VTR — يعكس التصنيف قوة الأدلة، وليس شدة التأثير.
مجموعة أدوات تدقيق أمني لأنظمة COBOL القديمة
تكتشف هجمات Unicode غير المرئية، وأنماط COBOL غير الآمنة، ومشكلات سلامة تحويل التنسيق في مصادر GnuCOBOL. تم التحقق منها باستخدام 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 — يخرج بالرمز 1 عند اكتشاف Unicode غير مرئي |
tools/clean-invisibles.py | أداة تعقيم مع سجل تدقيق جنائي |
src/AUDITOR-INVISIBLE.cob | مدقق بايتات داخل COBOL باستخدام HEX-OF |
tools/cobol_rules.py | قواعد التحليل الساكن R-01 حتى R-04 |
tools/transform_renumber.py | محاكي إزاحة إعادة الترقيم بالتنسيق الثابت (المرحلة 2) |
tools/poc_compiler_flag.sh | إثبات المفهوم القاطع — الملف نفسه، -fixed مقابل -free، تباين علم المترجم |
tools/poc_differential.sh | إثبات المفهوم التفاضلي للمرحلة 2 — SOURCE A مقابل SOURCE B (ترحيل يدوي) |
تُنتج كل قاعدة مخرجات VTR Finding Schema v1 متوافقة مع
cryptofault وvtr-forensic-img عبر context_loader.
| القاعدة | الاسم | الخطورة | التصنيف |
|---|---|---|---|
| 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 تكتشف متغيرات Working-Storage المُعلنة دون جملة VALUE ودون INITIALIZE أو MOVE في PROCEDURE DIVISION. خطر سلوك غير معرّف صامت في بيئات الدفعات وCICS.
R-02 — UNSTRING_NO_OVERFLOW تكتشف جمل STRING/UNSTRING دون معالجة ON OVERFLOW. اقتطاع صامت عندما يتجاوز الإدخال طول الحقل الهدف.
R-03 — REDEFINES_SIZE_MISMATCH تكتشف REDEFINES حيث يُعلن الحقل المُعاد تعريفه بايتات أكثر من قاعدته. خطر انتهاك حدود الذاكرة — سلوك يعتمد على المترجم.
R-04 — FORMAT_BOUNDARY_ANALYSIS (المرحلة 1 — ملاحظات فقط) تكتشف الشروط الموضعية في مصادر COBOL بالتنسيق الثابت:
COL73_NONEMPTY — محتوى غير فراغي في منطقة التعريف (الأعمدة 73–80)COL7_VERB — فعل COBOL قابل للتنفيذ في سطر مُعلَّق (العمود 7 = * / / / 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 العمود 7=* هو مؤشر التعليق — MOVE 999999
خامل، يُنفَّذ البرنامج ويعرض 1000.
تحت -free: تُفسَّر أرقام التسلسل 000100...001000 كقيم
عددية حرفية — يُبلَّغ عن فقدان ترويسة PROGRAM-ID، ويُنتج كل سطر
خطأً. الملف نفسه غير صالح نحويًا.
علم المترجم ليس داخل الملف المصدري. إنه يعيش في Makefile، أو إعدادات CI، أو استدعاء المشغّل. تغييره — عمدًا أو عرضًا — يغيّر ما إذا كان البرنامج صالحًا وما الذي يفعله.
الأدلة: corpus/fixed-format/poc-evidence.md
موثّق SHA-256 وسجل الأخطاء الكامل.
يُثبت إثبات مفهوم سابق الأطروحة نفسها عبر الترحيل اليدوي:
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 تحت إعادة ترقيم حقيقية. إثبات مفهوم علم المترجم أعلاه لا يعاني من هذا القيد.
النطاقات المكتشفة:
| نقطة الترميز | الاسم | الخطر |
|---|---|---|
| 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 بيانات JSON إلى copybook COBOL عبر
MOVE، يدخل Unicode غير المرئي السجل بصمت.
يضيف COBOL بالتنسيق الثابت سطحًا ثانيًا: دلالات الأعمدة الموضعية (العمود 7 كمنطقة مؤشر، الأعمدة 73–80 كمنطقة تعريف) تعتمد على التنسيق. أداة الترحيل التي لا تحافظ على هذه الدلالات يمكنها تنشيط شيفرة خاملة أو إفساد بنية البرنامج بصمت.
الآلية المشتركة مع CVE-2021-42574 هي فجوة الاكتشاف — محتوى يتجاوز الفحص البصري. متجه اقتطاع حقل البيانات و متجه تحويل التنسيق متميزان عن انقلاب دلالات الشيفرة المصدرية الموصوف في CVE-2021-42574.
pip install pytest
python -m pytest tests/ -q
# 159 tests, 0 failures
نطاق المترجم: تم التحقق من جميع القواعد مقابل GnuCOBOL 3.1.2 فقط. يمتلك IBM Enterprise COBOL وMicro Focus COBOL دلالات أعلام مختلفة، وسلوك حدود الأعمدة، ودعم امتدادات مختلف. النتائج على هذين المترجمين غير مُتحقق منها — صنّفها كـ INFERENCIA حتى يتم اختبارها.