لا يُمثل الحد الفاصل بين تكنولوجيا المعلومات والتشغيل في مؤسسات المرافق العامة خطًا واضحًا على مخطط الشبكة، بل هو أشبه بغشاء نفاذ تتدفق عبره البيانات في كلا الاتجاهين. فبرامج COBOL الدفعية تُنشئ ملفات تكوين نقاط الضبط التي تستخدمها وحدات التحكم المنطقية القابلة للبرمجة (PLCs)، وبرامج RPG تقرأ بيانات نظام SCADA التاريخي لأغراض الفوترة والتقارير التنظيمية، وأنظمة C القديمة تُترجم مخرجات الحواسيب المركزية إلى تنسيقات تفهمها أنظمة التحكم الموزعة، وتدفقات وظائف JCL تُجدول وتُرتب تبادل البيانات عبر هذا الحد وفقًا للتوقيت الذي تعتمد عليه العمليات التشغيلية. إن البرمجيات التي تُدير هذا التدفق ليست تكنولوجيا معلومات بحتة ولا تشغيل بحتة، بل هي بمثابة النسيج الرابط الذي يُشغل المرافق العامة، وهي فئة البرمجيات التي تكون فرق التحديث أقل استعدادًا لتحليلها عند بدء برنامج التحول.
يشهد قطاع الطاقة تحولاً رقمياً هائلاً يُعدّ من أهم التحولات في تاريخه. فمع قيام شركات المرافق بتحديث بنيتها التحتية باستخدام الشبكات الذكية، والمحطات الفرعية المتصلة، وأنظمة التحكم الصناعية، والأتمتة المتقدمة، أصبحت شبكات تكنولوجيا التشغيل أكثر ترابطاً من أي وقت مضى. ولا يُلغي هذا الترابط طبقة البرمجيات القديمة، بل يزيد من أهميتها، لأن كل نقطة نهاية جديدة للشبكة الذكية ومنصة تحليلات سحابية تعتمد على مصادر بيانات من تطبيقات كُتبت قبل عقود. إن تحديث هذه التطبيقات دون فهم دورها في سلسلة بيانات التشغيل ليس تحديثاً، بل هو اضطرابٌ ذو عواقب تتجاوز مركز البيانات لتشمل البنية التحتية المادية.
ابحث عن جميع المعلمات التشغيلية المضمنة في التعليمات البرمجية
SMART TS XL يحدد كل ثابت من ثوابت الاتحاد الأوروبي، وحدود الإنذار، وعناوين البروتوكول المضمنة في مجموعة التعليمات البرمجية القديمة الخاصة بك.
إعرف المزيد…ماذا تعني عبارة "مجاور لنظام SCADA" فعلياً
يشير مصطلح "المجاورة لأنظمة SCADA" إلى البرمجيات التي تعمل على جانب تكنولوجيا المعلومات وتتفاعل مع أنظمة التكنولوجيا التشغيلية، وليس برنامج SCADA نفسه، ولا البرامج الثابتة لوحدات التحكم المنطقية القابلة للبرمجة (PLC)، ولا التعليمات البرمجية المضمنة لوحدات التحكم عن بُعد (RTU)، بل إلى طبقة تطبيقات الأعمال التي تُغذي هذه الأنظمة بالبيانات وتستقبلها منها. تُعد هذه الفئة واسعة النطاق، وغير مُحللة بشكل كافٍ، وتختلف اختلافًا جوهريًا عن بقية تطبيقات المؤسسة.
في بيئة المرافق النموذجية، يتضمن الكود المجاور لنظام SCADA ما يلي:
برامج حساب المعدل ونقاط الضبط. برامج مكتوبة بلغة COBOL وPL/I لحساب نقاط ضبط الأحمال، وأهداف الجهد، وعتبات الضغط، وحدود التشغيل، تُرسل إلى أنظمة SCADA كملفات تكوين أو عبر تغذية بيانات مباشرة. تُشفّر هذه البرامج متطلبات الامتثال التنظيمي، والمواصفات الهندسية، وحدود السلامة المادية. لا ينتج عن الحساب غير الصحيح رقم خاطئ في التقرير، بل ينتج عنه نقطة ضبط تشغيلية غير صحيحة يتصرف بناءً عليها نظام التحكم.
مستخدمو بيانات نظام SCADA التاريخي. برامج مكتوبة بلغة RPG و COBOL تقرأ البيانات التشغيلية من قواعد بيانات نظام SCADA التاريخي لأغراض الفوترة، وإعداد التقارير التنظيمية، وتحليل الأداء. تعتمد هذه البرامج على تنسيقات بيانات محددة، واتفاقيات الطوابع الزمنية، وتعريفات الوحدات الهندسية التي ينتجها نظام SCADA التاريخي. قد يؤدي تغيير تنسيق مخرجات نظام SCADA التاريخي، أو تغيير في برنامج المستخدم الخاص بقسم تقنية المعلومات، إلى إتلاف حسابات الفوترة أو التقارير التنظيمية دون علم المستخدم.
برامج ربط البروتوكولات. برامج مكتوبة بلغة C مخصصة تُترجم بين تنسيقات مخرجات الحواسيب المركزية والواجهات القائمة على الملفات أو الشبكة التي تستخدمها أنظمة التحكم الموزعة (DCS) وأنظمة SCADA. تُنفذ هذه البرامج بروتوكولات محددة، مثل Modbus وDNP3 وIEC 61850، بالإضافة إلى تنسيقات خاصة بالموردين، وتعتمد على افتراضات مُبرمجة مسبقًا حول بنية الرسائل وترتيب البايتات والتوقيت، وهي افتراضات غير مذكورة في أي وثائق.
مسارات نقل البيانات من الدفعات إلى الوقت الفعلي. تتضمن هذه المسارات تدفقات مهام JCL التي تُجدول وتُرتب تبادل البيانات عبر حدود تكنولوجيا المعلومات/التشغيل ضمن فترات زمنية محددة. قد تُنتج عملية تشغيل الدفعات الليلية لمرفق ما بيانات تكوين يجب أن تكون متاحة لنظام SCADA قبل بدء العمليات الصباحية. هذا التبعية الزمنية مُضمنة في تكوين المُجدول والتوقعات التشغيلية لغرفة التحكم، وليست موثقة في أي مكان في كود التطبيق.
برامج معالجة الإنذارات والأحداث. برامج تستقبل سجلات الإنذارات من أنظمة SCADA، وتطبق منطق التصنيف والتوجيه، وتُنشئ أوامر العمل، وتُصدر سجلات الامتثال التنظيمي. غالبًا ما يكون منطق تصنيف الإنذارات، الذي يُحدد الأحداث التي تتطلب تقارير تنظيمية معينة، وفي أي أطر زمنية، مُضمنًا في شفرة برمجية تراكمت عليها عقود من التغييرات التنظيمية.
هذا هو الكود الذي يتحكم فيه المهندسون ومطورو تكنولوجيا المعلومات، والذين يمتلكون جزءًا منه، ولا يفهمه أي منهم تمامًا. عندما يسأل برنامج التحديث "ما الذي يمكننا تغييره؟"، تكون الإجابة بالنسبة للكود المرتبط بنظام SCADA دائمًا تقريبًا "أقل مما تتوقع، وبعد تحليل أكثر مما خططت له".
لماذا يفشل تحليل التحديث القياسي هنا
تفترض معظم أطر تحليل تحديث المؤسسات أن الكود الذي يتم تحليله يتحكم فقط في البيانات ومنطق الأعمال، وأن أي تغيير في البرنامج ينتج عنه نتيجة بيانات مختلفة دون أي تأثير على العالم المادي. إلا أن الكود المرتبط بنظام SCADA يخالف هذا الافتراض بأربع طرق محددة.
العواقب المادية لأخطاء البيانات
في تطبيقات الفوترة التقليدية، ينتج عن حساب خاطئ فاتورة غير صحيحة. هذا الخطأ قابل للاكتشاف والتصحيح، ونطاقه محدود. أما في الأنظمة المتصلة بنظام SCADA، فقد ينتج عن حساب خاطئ قيمة ضبط غير صحيحة، وهي القيمة المستهدفة التي يتحكم بها نظام التحكم من خلال تعديل المعايير الفيزيائية: الضغط، والجهد، ومعدل التدفق، ودرجة الحرارة. والنتيجة ليست مجرد رقم خاطئ في قاعدة البيانات، بل هي عملية فيزيائية تعمل خارج نطاق معاييرها المحددة، وتتراوح عواقبها بين انخفاض الكفاءة وتلف المعدات وحوادث السلامة.
يُعدّ هذا التباين بين خطأ البيانات وعواقبه المادية السبب الرئيسي لعدم إمكانية تحليل الشيفرة البرمجية المرتبطة بنظام SCADA بنفس مستوى تحمل المخاطر الذي تُعامل به الشيفرة البرمجية التجارية القياسية. فالتغيير الذي "يعمل بشكل صحيح" من حيث إنتاج مخرجات سليمة، قد يُنتج مع ذلك مخرجات غير صحيحة تشغيليًا، ضمن النطاق القانوني لنوع البيانات، وصحيحة نحويًا، ولكنها خاطئة ماديًا بالنسبة للسياق التشغيلي الذي تُمثله.
التبعيات الزمنية التي لا يمكن للتحليل الثابت نمذجتها
غالبًا ما تتضمن البرامج التقنية الملحقة بأنظمة SCADA قيودًا زمنية ذات أهمية تشغيلية بالغة، ولكنها غير مرئية لأدوات التحليل الثابت. فعلى سبيل المثال، يجب أن يكتمل برنامج توليد بيانات التكوين قبل أن تقرأها دورة استطلاع نظام SCADA. كما يجب أن تنتهي مهمة معالجة البيانات المجمعة قبل انتهاء الطابع الزمني للفترة الزمنية المطلوبة في التقارير التنظيمية. ويجب على برنامج الربط الذي ينقل الإنذارات معالجة الأحداث ضمن زمن الاستجابة المحدد في إجراءات التشغيل الخاصة بغرفة التحكم.
توجد هذه القيود الزمنية في الإجراءات التشغيلية للمرفق، وفي إعدادات المجدول، وفي الفهم الضمني للمطورين الذين كتبوا البرامج، وليس في شفرة المصدر. لا تملك أدوات التحليل الثابت التي تركز على بنية الشفرة وتدفق البيانات أي رؤية لمتطلبات التوقيت الموجودة خارج الشفرة نفسها.
النتيجة العملية: يجب أن يوثق تحليل تحديث البرامج المرتبطة بنظام SCADA بشكل صريح سياق التوقيت لكل برنامج ضمن نطاقه. وهذا يتطلب معرفة تشغيلية، ومقابلات مع مشغلي غرف التحكم، ومراجعة جداول الامتثال التنظيمي، وتحليل تبعيات وظائف المجدول، وليس مجرد تحليل للبرنامج.
تحديد وظائف السلامة
تحدد معايير IEC 61511 (السلامة الوظيفية لقطاعات الصناعات التحويلية) وIEC 61508 (السلامة الوظيفية للأنظمة الكهربائية/الإلكترونية/الإلكترونية القابلة للبرمجة المتعلقة بالسلامة) متطلبات اعتماد البرامج التي تؤدي وظائف السلامة. ولا يُعدّ الكود المعتمد وفقًا لهذه المعايير مجرد كود قديم يمكن إعادة هيكلته لسهولة الصيانة، بل إن الاعتماد خاص بعناصر برمجية محددة، أي الإصدار المحدد من الملف الثنائي الذي قيّمته جهة الاعتماد. ويؤدي تغيير الكود، حتى لو كان لإصلاح مشكلة جودة بسيطة في تطبيق تجاري، إلى إبطال الاعتماد، ويتطلب إعادة اعتماده قبل استخدام الكود المُعدّل في وظيفة السلامة.
تستخدم العديد من شركات المرافق برامجًا مُلحقة بنظام SCADA تُجري حسابات متعلقة بالسلامة، مثل كشف الضغط الزائد، وحساب نقاط ضبط حماية المحولات، ومنطق الإغلاق الطارئ، وقد تخضع هذه البرامج لمتطلبات شهادات السلامة دون علم فريق تحديث تكنولوجيا المعلومات. أول سؤال تحليلي يُطرح على هذه البرامج هو: هل يؤدي أي جزء منها وظيفة تتعلق بالسلامة؟ إذا كانت الإجابة نعم، فما هي هذه الوظائف، وما هي الشهادات المطلوبة، وماذا يتطلب تغييرها؟
اقتران الأجهزة والبروتوكولات
تعتمد برامج جسر البروتوكول ورموز واجهة التضمين اعتمادًا مباشرًا على إصدارات الأجهزة والبروتوكولات التي تُنفذها. فالبرنامج الذي يُنفذ بروتوكول Modbus RTU برموز وظائف محددة، وخرائط سجلات، وقيم مهلة زمنية لطراز معين من وحدة RTU من مُصنِّع معين، لا يُعدّ تنفيذًا عامًا لبروتوكول Modbus، بل هو تنفيذ لتلك التركيبة المحددة، بافتراضات قد لا تنطبق على أي تكوين آخر.
عند تحليل هذا الكود بهدف تحديثه، لا يقتصر الاعتماد على كود COBOL أو C المصدري فحسب، بل يشمل أيضًا طراز جهاز RTU، وإصدار البرنامج الثابت، وبنية التوصيلات السلكية، وإعدادات الشبكة. قد تؤدي التغييرات في أي من هذه العناصر إلى تعطيل الواجهة حتى لو لم يطرأ أي تغيير على كود البرنامج المصدري. كما أن التغييرات في كود البرنامج المصدري قد تؤدي إلى تعطيل واجهات تبدو غير ذات صلة، لأن الجسر كُتب للتعويض عن خصائص بروتوكول خاصة بالبائع غير موثقة في أي مكان.
حدود تكنولوجيا المعلومات/التشغيل: حيث يوجد الكود
يحدد نموذج بوردو (ISA-99 / IEC 62443) البنية المفاهيمية لشبكات أنظمة التحكم الصناعية في خمسة مستويات، من العمليات المادية في المستوى 0 إلى أنظمة أعمال المؤسسة في المستوى 4. عادةً ما يوجد رمز SCADA القديم المجاور في بيئات المرافق في المستويين 3 و4، وهما عمليات التصنيع ومناطق شبكة المؤسسة، ولكن تدفقات بياناته تعبر إلى المستوى 2 (طبقة الإشراف SCADA) في كلا الاتجاهين.
تُعدّ منطقة الحدود بين تقنيتي تكنولوجيا المعلومات والتشغيل، الواقعة بين المستويين 3 و2، المنطقةَ الأكثر خطورةً من الناحية الأمنية والتشغيلية. إذ تقوم جهاتٌ تابعةٌ لدولٍ بالتمركز داخل شبكات التشغيل قبل أشهرٍ من تفعيلها، بينما تقوم مجموعات برامج الفدية الآن بنشر حمولاتٍ خبيثةٍ مُصممةٍ خصيصًا لأنظمة التحكم الصناعية، بهدف تعطيل واجهات المستخدم الرسومية وإيقاف الإنتاج. ولا تُمثّل برامج SCADA المُدمجة نقطةَ الدخول الأكثر شيوعًا، بل هي طبقة الحدود بين تقنيتي تكنولوجيا المعلومات والتشغيل، حيث تتبادل أنظمة تكنولوجيا المعلومات وأنظمة التشغيل البيانات عبر واجهاتٍ صُممت لضمان الموثوقية التشغيلية لا لمقاومة الهجمات.
يُعدّ فهم مجموعة البرامج التي تعبر هذا الحدّ، ووظائفها فيه، شرطًا أساسيًا لتخطيط التحديث وتحسين الوضع الأمني. فبرنامج يقرأ من سجلّ بيانات نظام التحكم الإشرافي وجمع البيانات (SCADA) ويكتب النتائج في قاعدة بيانات الفوترة يعبر هذا الحدّ في اتجاه. بينما يعبره في الاتجاه الآخر برنامج يحسب نقاط الضبط ويكتبها في دليل التكوين الذي يقرأه جهاز التحكم المنطقي القابل للبرمجة (PLC). وكلاهما مرتبط بنظام SCADA. ولا يظهر أيٌّ منهما في مسح شبكة SCADA أو في جرد تطبيقات تكنولوجيا المعلومات، ولذلك لا يتم تحليلهما بشكل منهجي.
أنماط البرمجة الخاصة بالبرامج المجاورة لأنظمة التحكم الإشرافي وتحصيل البيانات (SCADA)
رمز حساب الوحدات الهندسية
تقوم حسابات وحدة القياس الهندسية (EU) بتحويل قيم المستشعر الخام، والتي عادةً ما تكون أعدادًا صحيحة من محولات تناظرية إلى رقمية، إلى قياسات فيزيائية بوحدات ونطاقات ودقة محددة. ينتج عن حلقة تيار 4-20 مللي أمبير من جهاز إرسال الضغط قيمة خام؛ وتقوم حسابات وحدة القياس الهندسية بتحويلها إلى رطل لكل بوصة مربعة (PSI) أو بار مع معايرة الصفر والمدى الصحيحة.
يتميز رمز الحساب هذا بخصائص تميزه عن منطق الأعمال القياسي:
كوبول
CALCULATE-PRESSURE-EU.
* RAW-COUNT ranges 0-4095 (12-bit ADC)
* SENSOR-ZERO-OFFSET = 819 (4mA = 20% of 4095)
* SENSOR-SPAN = 3276 (16mA span = 80% of 4095)
* RANGE-LOW-PSI = 0
* RANGE-HIGH-PSI = 500
COMPUTE EU-PRESSURE-PSI =
(RAW-COUNT - SENSOR-ZERO-OFFSET) /
SENSOR-SPAN *
(RANGE-HIGH-PSI - RANGE-LOW-PSI)
+ RANGE-LOW-PSI
IF EU-PRESSURE-PSI < RANGE-LOW-PSI OR
EU-PRESSURE-PSI > RANGE-HIGH-PSI
MOVE 'RANGE-VIOLATION' TO ALARM-STATUS
PERFORM GENERATE-ALARM
END-IF.
الثوابت في هذه العملية الحسابية، SENSOR-ZERO-OFFSET, SENSOR-SPAN, RANGE-LOW-PSI, RANGE-HIGH-PSIتتوافق هذه القيم مع مواصفات الجهاز المادي. إذا كانت مُضمنة في الكود (كما هو شائع في البرامج القديمة)، فإن أي تغيير في الجهاز المادي يستلزم تغيير الكود. أما إذا كانت هذه القيم خاطئة (نتيجة لإعادة معايرة الجهاز أو استبداله أو سوء تكوينه الأصلي)، فإن قيمة EU تكون غير صحيحة بشكل منهجي في جميع السجلات التي أنتجها البرنامج. يمكن للتحليل الثابت تحديد أماكن تعريف هذه الثوابت؛ ولا يمكن التأكد من صحتها لتكوين الجهاز الحالي إلا من خلال التحقق التشغيلي.
منطق توليد وتصنيف الإنذارات
يُعدّ رمز توليد الإنذارات من بين أكثر الرموز حساسيةً من الناحية التنظيمية في بيئات المرافق العامة، وذلك في إطار أنظمة التحكم الإشرافي وجمع البيانات (SCADA). وتحدد معايير NERC CIP (حماية البنية التحتية الحيوية) الخاصة بمرافق الكهرباء، ومتطلبات هيئة التنظيم النووي (NRC) للمنشآت النووية، ومتطلبات وكالة حماية البيئة (EPA) لإعداد التقارير الخاصة بمرافق المياه والصرف الصحي، جميعها الأحداث التي يجب أن تُولّد إنذارات، والمعلومات التي يجب أن تتضمنها هذه الإنذارات، والأطر الزمنية التي يجب الإبلاغ عنها خلالها.
كوبول
CLASSIFY-ALARM.
EVALUATE TRUE
WHEN EU-PRESSURE-PSI > HIGH-HIGH-LIMIT
MOVE 'HH' TO ALARM-PRIORITY
MOVE 'NERC' TO REPORTING-FLAG
PERFORM GENERATE-NERC-EVENT
WHEN EU-PRESSURE-PSI > HIGH-LIMIT
MOVE 'HI' TO ALARM-PRIORITY
MOVE 'LOG' TO REPORTING-FLAG
WHEN EU-PRESSURE-PSI < LOW-LIMIT
MOVE 'LO' TO ALARM-PRIORITY
MOVE 'LOG' TO REPORTING-FLAG
WHEN EU-PRESSURE-PSI < LOW-LOW-LIMIT
MOVE 'LL' TO ALARM-PRIORITY
MOVE 'NERC' TO REPORTING-FLAG
PERFORM GENERATE-NERC-EVENT
END-EVALUATE.
حدود الإنذار في هذا الكود، HIGH-HIGH-LIMIT, HIGH-LIMIT, LOW-LIMIT, LOW-LOW-LIMITتُعدّ هذه المعايير التشغيلية ذات أهمية تنظيمية. وتؤثر التغييرات التي تطرأ على هذه الحدود على كلٍّ من السلوك التشغيلي لنظام التحكم والتزامات الإبلاغ التنظيمي للشركة. لذا، يجب أن يخضع أي برنامج تحديث يمس رمز تصنيف الإنذارات لمراجعة الشؤون التنظيمية ضمن عملية التحكم في التغيير، وليس فقط لموافقة المهندسين.
تطبيقات جسر البروتوكول
تُعدّ برامج ربط البروتوكولات القديمة من بين أصعب البرامج المتصلة بأنظمة SCADA من حيث التحديث، نظرًا لصعوبة حصر تبعياتها. يُطبّق البرنامج إصدارًا مُحددًا من البروتوكول لجهاز مُحدد، مع مراعاة السلوكيات الخاصة بالبائع غير الموثقة في الكود.
c
/* Legacy Modbus RTU bridge -- written for Modicon 984 PLCs, circa 1998 */
/* NOTE: 984 series uses 1-based register addressing, not 0-based */
/* Function code 03 only -- 984 does not support FC 04 */
/* Max 60 registers per request -- 984 firmware limitation */
#define MODBUS_FC03_READ_HOLDING 0x03
#define MAX_REGS_PER_REQUEST 60 /* 984 firmware limit, not Modbus spec */
#define REGISTER_OFFSET 1 /* 984 uses 1-based addressing */
int read_holding_registers(int start_reg, int count, uint16_t *buffer) {
/* Compensate for 984 1-based addressing */
uint16_t adjusted_start = (uint16_t)(start_reg + REGISTER_OFFSET);
if (count > MAX_REGS_PER_REQUEST) {
/* 984 will return error if count exceeds 60 */
/* Split into multiple requests silently */
return read_registers_chunked(adjusted_start, count, buffer);
}
/* ... */
}
يحتوي هذا الكود على أربعة افتراضات ضمنية حول طراز محدد من وحدات التحكم المنطقية القابلة للبرمجة (PLC)، وهي غير واردة في مواصفات Modbus: عنونة السجلات بدءًا من 1، رمز الوظيفة 03 فقط، الحد الأقصى لعدد السجلات 60، وسلوك تجزئة البيانات للطلبات الكبيرة. لا يظهر أي من هذه الافتراضات في وثائق Modbus. إنها سلوكيات خاصة بمورد Modicon 984، موثقة في دليل أجهزة صدر عام 1998، وقد لا يكون متوفرًا الآن. إذا تم تحديث هذا الجسر دون فهم هذه الافتراضات، أو إذا تم استبدال وحدة التحكم المنطقية القابلة للبرمجة (PLC) بطراز أحدث يستخدم عنونة قياسية تبدأ من 0، فإن كل قراءة من السجلات ستُرجع قيمة خاطئة بمقدار إزاحة عنوان سجل واحد بالضبط.
تحليل ما قبل التحديث: ما يجب إنتاجه
قبل تعديل أو إعادة هيكلة أو استبدال أي كود مرتبط بنظام SCADA، يجب أن ينتج عن التحليل مجموعة من المخرجات التي تتجاوز ما يقدمه تحليل تحديث المؤسسة القياسي.
جرد الوظائف التشغيلية. يجب تصنيف كل برنامج مرتبط بنظام SCADA وفقًا لوظيفته التشغيلية: حساب وحدة التحكم، وتحديد نقطة الضبط، واستهلاك بيانات السجل، وتوليد الإنذارات، وربط البروتوكولات، وتحويل البيانات من الدفعات إلى الوقت الفعلي. يحدد هذا التصنيف الجهة التي يجب إشراكها في عملية التغيير، سواءً أكان مهندسو تكنولوجيا المعلومات فقط، أم فريق متعدد التخصصات يضم مهندسي التحكم، وموظفي العمليات، ومسؤولي الامتثال التنظيمي.
خريطة عبور حدود تكنولوجيا المعلومات/التشغيل. يجب توثيق كل تدفق بيانات يعبر حدود تكنولوجيا المعلومات/التشغيل: أي برنامج ينتج البيانات، وبأي تنسيق، وفي أي جدول زمني؛ وأي نظام تشغيل يستهلكها؛ وما هي عواقب عدم صحة البيانات أو تأخرها أو غيابها. تُعد هذه الخريطة بمثابة ملف تعريف المخاطر التشغيلية للطبقة المجاورة لنظام SCADA.
تحديد وظائف السلامة. يجب تقييم كل برنامج لتحديد ما إذا كان يؤدي وظيفة سلامة وفقًا لمعايير IEC 61511 أو IEC 61508 أو NERC CIP أو غيرها من المعايير المعمول بها. تتطلب البرامج المصنفة كبرامج ذات وظائف سلامة إجراءات تحكم منفصلة في التغييرات، وإخطارًا تنظيميًا، وربما إعادة اعتماد، ويختلف الجدول الزمني لتحديث هذه البرامج اختلافًا جوهريًا عن برامج الأعمال القياسية.
سجل معلمات التشغيل الثابتة. يجب تحديد كل ثابت ثابت يمثل معلمة تشغيلية، أو قيم معايرة المستشعر، أو حدود الإنذار، أو قيود البروتوكول، أو عتبات التوقيت، وتوثيقه مع دلالته التشغيلية، والتحقق من صحته وفقًا لمواصفات الجهاز الحالية. يصبح هذا السجل مدخلًا لعملية إدارة التكوين التي تستبدل الثوابت الثابتة بتكوين مُدار خارجيًا.
توثيق التبعيات الزمنية: يجب توثيق سياق التوقيت لكل برنامج، والنوافذ التشغيلية التي يجب أن ينجز خلالها، والتبعيات المُجدولة التي تُفرض هذه النوافذ، والإجراءات التشغيلية التي تعتمد على إنجازه، بشكل صريح. هذا التوثيق هو المواصفات التي يجب التحقق من صحة التنفيذ المُحدَّث بناءً عليها.
مواصفات البروتوكول والواجهة. يجب تحليل كل برنامج جسر بروتوكول للتحقق من سلوكيات خاصة بالمورد، وافتراضات إصدار البروتوكول، والتعويضات الخاصة بالجهاز. والنتيجة هي وثيقة مواصفات يمكن استخدامها للتحقق من صحة تطبيق بديل، مما يؤكد الحفاظ على جميع سلوكيات التعويض، حتى تلك التي لم تكن موجودة في المواصفات الأصلية.
أساليب التحديث الناجحة وتلك غير الناجحة
نمط "التشابك التدريجي" (Strangler Fig)، المُطبق بعناية. يُعد هذا النمط، الذي يبني وظائف جديدة بالتوازي مع الوظائف القديمة، ويُوجهها تدريجيًا، ويُوقف تشغيلها تدريجيًا، مناسبًا للبرمجيات المُلحقة بنظام SCADA والتي تُجري معالجة البيانات من جانب تكنولوجيا المعلومات (مثل مُستهلكي بيانات السجل، وحسابات الفواتير). يستمر البرنامج القديم في العمل أثناء عملية الانتقال؛ ويُنتج التنفيذ الجديد مُخرجات مُتوازية يتم التحقق من تطابقها قبل إيقاف تشغيل البرنامج القديم.
لا ينطبق مبدأ "الخنق" على مسارات البيانات الآنية. بالنسبة للبرامج التي تعمل ضمن مسار بيانات آني، حيث لا توجد طريقة آمنة لتشغيل البرامج القديمة والجديدة بالتوازي نظرًا لتأثيرها التشغيلي المتضارب، يجب أن يكون الانتقال فوريًا ويتم التحقق منه مسبقًا قبل أي عملية نقل إلى بيئة الإنتاج. تشغيل برنامج حساب نقاط الضبط بالتوازي، والذي ينتج قيمًا مختلفة عن البرنامج الحالي، سيرسل نقاط ضبط متضاربة إلى نظام التحكم.
يُفضّل نقل إعدادات النظام إلى ملف خارجي قبل إجراء أي تغييرات على الكود. بالنسبة للبرامج التي تحتوي على معايير تشغيلية مُضمّنة في الكود، فإنّ الخطوة الأولى الأكثر أمانًا لتحديث النظام هي نقل هذه المعايير إلى ملف إعدادات أو قاعدة بيانات دون تغيير منطق الحساب. هذا يجعل المعايير مرئية وقابلة للإدارة والتدقيق دون المساس بكود الحساب ذي الأهمية التشغيلية. ويُعدّ خطر نقل المعايير إلى ملف خارجي أقل بكثير من خطر إعادة هيكلة منطق الحساب.
كود وظائف السلامة: التحليل والتوثيق، وليس إعادة الهيكلة. ينبغي تحليل وتوثيق الكود المعتمد للسلامة خلال مرحلة تخطيط التحديث، ولكن يجب تأجيل أي تغييرات عليه إلى برنامج إعادة اعتماد مدروس بالتنسيق مع الجهات التنظيمية، وليس كجزء من مبادرة تحديث عامة. إن خطر إبطال شهادة السلامة خلال عملية تحديث شاملة لا يبرره أي فائدة نموذجية للتحديث.
كيفية SMART TS XL يدعم تحليل التعليمات البرمجية القديمة المرتبطة بنظام SCADA
SMART TS XLالصورة تحليل الكود الثابت ينطبق هذا على الجانب التقني من حدود نظام SCADA، أي برامج COBOL وJCL وRPG وPL/I وC التي تعمل على الحواسيب المركزية وأنظمة الحواسيب المتوسطة، والتي تُنشئ أو تُحوّل أو تستهلك بيانات تنتقل إلى بيئات التشغيل. بالنسبة لهذا الكود، يُنتج التحليل الهيكلي قائمة وظائف التشغيل وسجل المعلمات المُبرمجة مسبقًا، والتي يتطلبها تحليل ما قبل التحديث.
تُنشئ خريطة تبعية التطبيقات خريطة عبور حدود تكنولوجيا المعلومات/التشغيل: كل برنامج يكتب إلى واجهة ملف يستهلكها نظام SCADA، وكل خطوة في وظيفة JCL تُنتج بيانات ذات أهمية توقيتية تشغيلية، وكل برنامج في مسار بيانات السجل التاريخي من مصدر التشغيل إلى مستهلك تكنولوجيا المعلومات. عندما يقرأ برنامج COBOL الخاص بفواتير المرافق بيانات السجل التاريخي عبر جسر C وسيط، تُمثل خريطة التبعية كلاً من تبعية COBOL إلى C وتبعية C إلى السجل التاريخي كسلسلة متصلة، مما يجعل عبور تكنولوجيا المعلومات/التشغيل الكامل مرئيًا بدلاً من أن يكون قابلاً للاكتشاف فقط من خلال الحوادث التشغيلية.
تُعدّ إمكانية تحليل التأثير بالغة الأهمية للبرمجيات المتصلة بأنظمة SCADA، لأنها تُحدّد نطاق تأثير أي تغيير مُقترح قبل تنفيذه. يتطلب تعديل برنامج حسابات الاتحاد الأوروبي، المُشترك (عبر ملف النسخ) مع كود توليد الإنذارات، وكود تحديد نقاط الضبط، وكود كتابة البيانات التاريخية، فهم التأثيرات الثانوية الثلاثة جميعها قبل إجراء أي تعديل على الحسابات. في البرمجيات التجارية التقليدية، يُنتج التغيير غير الصحيح بيانات خاطئة. أما في البرمجيات المتصلة بأنظمة SCADA، فيُنتج معايير تشغيلية خاطئة.
تكشف إمكانية توسيع لغة التحكم في الوظائف (JCL) عن بنية التوقيت والتسلسل لطبقة المعالجة الدفعية: أي الوظائف تُنفذ وبأي ترتيب، وأي مخرجات مجموعات البيانات تُغذي أي الخطوات اللاحقة، وأي تدفقات الوظائف مُقيدة زمنيًا بالمتطلبات التشغيلية. هذه هي القاعدة الهيكلية التي تُوفرها وثائق التبعية الزمنية التي يتطلبها تحديث أنظمة SCADA.
تتيح إمكانية البحث المؤسسي إمكانية الوصول إلى سجل المعلمات الثابتة على نطاق واسع: العثور على كل حالة من حالات ثابت وحدة هندسية محددة، وكل قيمة حد إنذار، وكل عنوان بروتوكول ثابت عبر جميع عناصر COBOL وC وRPG وJCL في البيئة، في ثوانٍ معدودة، عبر ملايين أسطر التعليمات البرمجية. بالنسبة للمرافق التي تدير مئات الآلاف من أسطر التعليمات البرمجية القديمة المرتبطة بنظام SCADA، تُحدث إمكانية البحث هذه فرقًا جوهريًا بين عملية تدقيق يدوية تستغرق شهورًا وجرد آلي يستغرق ساعات.
للفرق التي تخطط تحديث التراث من أنظمة المرافق، SMART TS XL يُقدّم هذا التحليل الهيكلي لتقنية المعلومات ما يُمكّن فريق التحديث من العمل بفعالية جنبًا إلى جنب مع مهندسي التحكم في جانب التشغيل، الذين يفهمون السياق التشغيلي. لا يُمكن تجاوز حدود تقنية المعلومات/التشغيل بأمان من قِبل فرق تقنية المعلومات وحدها أو فرق التشغيل وحدها، بل يُمكن تجاوزها بأمان عندما يمتلك كلا الجانبين معرفة هيكلية دقيقة بمحتويات أنظمتهما.
لماذا يتطلب هذا القانون نوعًا مختلفًا من الاهتمام
لا تقتصر شركات المرافق التي تُحدّث أنظمتها القديمة المرتبطة بنظام SCADA على تحديث البرامج القديمة فحسب، بل تُغيّر طبقة البرمجيات التي تربط بين أنظمة الأعمال والبنية التحتية المادية. ولا تقتصر عواقب الخطأ في هذا التحديث على أخطاء البيانات أو انقطاع الخدمات أو الخسائر المالية، بل تمتد لتشمل الأنظمة المادية التي تخدم الأشخاص الذين يعتمدون على المرافق في تسيير شؤونهم.
إن الخصائص التي تميز هذا الكود، كالعواقب المادية لأخطاء البيانات، والتبعيات الزمنية غير المرئية للتحليل الثابت، وقيود شهادات السلامة، وترابط الأجهزة والبروتوكولات، ليست حججًا ضد تحديثه، بل هي حجج تدعو إلى فهمه فهمًا كاملًا قبل إجراء أي تغيير. يوفر إطار التحليل في هذا الدليل هذا الفهم. وبرنامج التحديث الناتج عنه يكون أكثر أمانًا لأن نطاق التغيير محدد بالأدلة لا بالافتراضات، والتبعيات الزمنية موثقة وليست ضمنية، وكود وظيفة السلامة محدد لا معدل عن طريق الخطأ، وتقاطعات حدود تكنولوجيا المعلومات/التشغيل محددة لا مكتشفة من خلال الحوادث التشغيلية بعد النشر.