top of page
  • Yusuf Yılmaz Akdemir

Secure PLC Coding | Modularize PLC Code



PLC (Programmable Logic Controller)’ler PURDUE modelde kontrol katmanında yer alan endüstriyel bileşenlerdir. IEC61131-3 standartı ile belirtilen PLC programlama dilleri (Ladder diagram, Function Block Diagram, Structured Text, Instruction List ve Sequential Function Chart) yazılımcıların kullanıcı alışkanlıkları ve yapılacak projelere göre farklılık göstermektedir. PLC programlamada temel amaç projenin isterler doğrultusunda çalışabildiğini garanti etmektir. Bununla birlikte endüstriyel kontrol sistemleri ortamlarında sıklıkla kullanılan PLC’ler birçok saldırının hedefi olmuş ve olmaya devam edecektir. Bu saldırılardan en az hasar ile çıkabilmek için alışkanlıkların değişmesi ve siber güvenlik gereksinimlerinin kodlama yeteneklerine entegre olması gerekmektedir. Bu bağlamda oluşturduğumuz yazı dizinin ilk konusu PLC kodlarının modülerize edilmesidir.


Oluşturulacak PLC lojiği tek bir blok halinde (ana organizasyon bloğu) programlanmamalıdır. Lojikler farklı fonksiyon bloklarına bölünerek bu fonksiyon bloklarının yürütülme süreleri ile blok boyutları KB olarak izlenmelidir. Bütün lojik için ayrı bloklar oluşturulması input doğrulama, erişim kontrol yöntemi ve lojik bütünlüğünün doğrulanması gibi konularda da yardımcı olacaktır.


PLC lojiğinin modüllere bölünerek oluşturulması modüllerin bütünlüğünü test etmeyi ve kod takibini kolaylaştırır. Modüllerin içinde yer alan kodlar titizlikle test edildikten sonra bu modüllerde yapılacak herhangi bir değişiklik, modülün hash değerleri kaydedilerek orijinal kodun hash değerine karşı doğrulanabilir. Sonuç olarak FAT(Factory Acceptance Test)/SAT(Site Acceptance Test) sırasında kaydedilecek hash değerleri yaşanacak bir olaydan sonra modüllerin kod bütünlüğünü doğrulama konusunda yardımcı olacaktır.


Bir örnek ile açıklamak gerekirse, gaz türbini lojikleri “startup”, “Inlet Guide Vanes Control”, “Bleed Valve Control” vb. gibi bölümlere ayrılabilir. Bu sayede bu standart lojikler projelere sistematik olarak uygulanabilir. Bunun yanı sıra yük yönetim projelerinde yine lojikler; kesici, trafo, genaratör vb. gibi tipiklere ayrılarak projelerde yine sistematik olarak uygulanabilir. Bu sistematik yapı herhangi bir güvenlik probleminde hızlı aksiyon alınabilmesini sağlayacaktır.


Kodların modülerize olarak kullanılması sadece güvenlik açısından değil aynı zamanda lojik güvenilirliği ve bakım konularında fayda sağlayacaktır. Güvenlik açısından baktığımızda birazdan örneklerini vereceğimiz saldırılarda göreceğimiz gibi kötü amaçla eklenen kodların algılanmasında yardımcı olacaktır. Bunun yanı sıra lojik standardizasyonu, tutarlılık ve yetkisiz değişikliklere karşı korumada da yardımcı olacaktır. Program akış sırasını kontrol etmek ve lojiğin düzgün tepki vermemesine veya çökmesine neden olabilecek döngülerden kaçınmaya da yardımcı olacaktır. Modülerize kodların kullanılması hem bakım hem proje çalışanlarına hataların ayıklanmasında ve güncellemelerde kolaylık sağlayacaktır. Ayrıca oluşturulan modüller ek PLC’ler ve yeni projeler içinde kullanılabilir.


Endüstriyel kontrol sistemleri pek çok saldırının hedefi olmaya devam ediyor. Bu saldırıların daha kompleks ve hedefli olanları kontrol katmanında gerçekleştirilmektedir. Modülerize kod yapısının bu saldırılar incelendiğinde bir gereklilik olduğunu görmek mümkündür. Bir örnek verecek olursak PLC Blaster, Siemens S7 PLC’lerde çalışan zararlı bir yazılımdır. Bulaştığı PLC ile aynı network içerisinde yer alan başka PLC’ler olması durumunda o PLC’lere de bulaşma özelliği bulunmaktadır. Bu zararlı yazılım PLC’ye bulaştığında ana lojiği değiştirmeden kendi fonksiyon bloklarını ekleyebilmektedir. Modülerize yapıda eklenecek fonksiyon bloklarının fark edilmesi çok daha kolay olmaktadır. Bu zararlı yazılımın yanı sıra endüstriyel kontrol sistemleri cihazlarını hedef alan ve kamuya açıklanmış ilk zararlı yazılımlardan biri olan Stuxnet, birçok farklı davranışı kullanan büyük ve kötü amaçlı bir yazılım parçasıdır. Stuxnet hedef sistemin özelliklerine göre PLC’lere farklı kod ve data blokları yükleyebilme kabiliyetine sahipti. Modülerize yapı program akış sırasının kontrol edilmesinde fayda sağlayacağı için bu tarz saldırıların belirlenebilmesinde önemli rol oynamaktadır.


Sonuç olarak modülerize yapının PLC lojiklerine nasıl uygulanacağı, hangi faydaları sağlayacağından bahsettik ve bu yapının saha kullanımları ile alakalı örnekleri sunmuş olduk. Kodların modülerize olarak kullanılması aslında sahada yaygın bir alışkanlıktır. Ancak bu alışkanlık modüler yapının sağladığı diğer faydalardan dolayı oluşmuştur. Yaşanmış saldırılarda da görüleceği gibi fiziksel dünyaya çok fazla etkisi olan bu sistemlerin devreye alınmasında PLC yazılımcıları için kodlama alışkanlıklarının değişmesi ve kodlama yapılırken siber güvenlik bakış açısının kazanılması bir zorunluluk haline gelmiştir.


Referanslar

https://collaborate.mitre.org/attackics/index.php/Software/S0009

https://collaborate.mitre.org/attackics/index.php/Software/S0010

https://plc-security.com/

15 views

Recent Posts

See All
bottom of page