Barracuda CloudGen Firewallを使ってSCADAの通信制御を実施する

IoTやM2Mというワードが飛び交う中、いまだに工場の生産設備にはサポートが切れた Windows機などが数多く存在しています。今回はBarracuda CloudGen Firewallを導入して古い生産設備を保護できないか考えてみました。
既存環境に導入することを想定してネットワーク構成の変更の必要が無いブリッジ接続で構成しています。通常このブリッジ接続の段階でIPSとアンチウィルスを動作させているため、ある程度のセキュリティを担保できるのですが、今回はさらに突っ込んでSCADAの通信制御を行ってみようと思います。実環境でどの程度役に立てるものかわかりませんが、何かの一助となれば幸いです。

#検証に使用した機材
・Barracuda CloudGen Firewall F183R
・IEC60870-5-104 Server Simulator（Windows PC）
・IEC60870-5-104 Client Simulator（Windows PC）

#Barracuda CloudGen Firewallの準備

基本設定は完了しているものとします。
既述ですが、今回は古い生産設備に導入することを想定してネットワーク構成の変更の必要が無いブリッジ接続で導入できるように設定しています。通常このブリッジ接続の段階でIPSとアンチウィルスを動作させているため、ある程度のセキュリティを担保できるのですが、今回はSCADAの通信制御を行います。

管理ツールの「NG Admin」からSSHを利用して、次のコマンドを実行し SCADA専用スキャナを起動します。
Barracuda CloudGen FirewallではSCADA専用スキャナエンジンもあらかじめ組み込まれており、オプションライセンスが必要ありません。

[root@F183R:~]# acpfctrl scada kernel
[root@F183R:~]# acpfctrl scada sock on
[root@F183R:~]# acpfctrl scada show
scada analysis is being done in kernel-space
scada data are being sent through ACPF socket


#SCADAエミュレーターの準備
Server側では数多く存在するSCADAのプロトコルの1つ「IEC60870-5-104」をシュミレートする「IEC60870-5-104 Server Simulator」を利用しています。

1: 「Add Server」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/7fa635a2-9abb-a422-c08d-d0a292be4381.png)

2: 「IEC104_SERVER_1」のタブをクリックし「Source IP Address」にサーバのIPアドレスを入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/a2984d88-e0d7-6819-d094-d9c51526cee3.png)

3: 「Configuration_1」のタブをクリックして「Add Row」をクリックして下記追加します。

「S.No」の「1」には「IEC60870-5-Group to Choose」を「Measured Short Float」、「Event Report Type ID」を「M_ME_TF_1 = 36」、「Starting IOA」を「100」、「Range」を「10」に設定します。

4: 再度、「Add Row」をクリックして下記追加します。

「S.No」の「2」には「IEC60870-5-Group to Choose」を「Set Point command – Float Value」、「Event Report Type ID」を「C_SE_TC_1 = 63」、「Starting IOA」を「1000」、「Range」を「10」に設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/48548719-95d8-404e-0cfe-b9ca33cc3178.png)

5: 「Data_Objects_1」のタブをクリックして「Start_Communication」をクリックします。これで、サーバシュミレータが待ち受け体制に入ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/74b58ea8-eb77-4e80-b9dc-191723e8f7be.png)


Client側では「IEC60870-5-104 Client Simulator」を利用しています。

1: 「Add Client」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/7022c92f-fa3c-6ded-5778-f14e07d6d93a.png)

2: 「IEC104_CLIENT_1」のタブをクリックし「Server IP Address」にサーバのIPアドレスを入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/07967c73-6a16-2dec-04ce-caf428fad2c1.png)

3: 「Data_Objects_1」のタブをクリックし「Start Communication」をクリックします。「Server Status　-Connected」になることを確認します。これでクライアントがサーバに接続できました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/8f510518-3b44-0f3a-6a32-673077992962.png)

#動作確認
1: Barracuda CloudGen Firewallの「Applicationルール」で ICSプロトコルの検知を有効にし、全許可ルールを設定します。
この状態で「IEC60870-5-104 Client Simulator」をサーバ側に接続してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/776ffa7c-bd2a-c795-0344-e8590004769c.png)

2: Barracuda CloudGen Firewallの管理ツールを確認してみると「IEC 60870-5-104」に関係する通信が細かく見える化されていることが分かります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/76b01395-15f1-0cf5-1be1-837981fa305a.png)

#制御
1: Applicationルールで「IEC 60870-5-104 Interrogation Command」のみをブロックするように設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/6a82230f-0bf7-ea9c-9983-44884cb8f08a.png)

2: 設定後、再度「IEC60870-5-104 Client Simulator」をサーバ側に接続してみます。

3: 該当するIEC60870-5-4の Interrogation Commandのみブロックされており、シュミレーターも「Server Status Connected」にならず接続が完了しません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274514/f202d086-978f-a39a-f1a9-a6090261b214.png)

#おわりに
Barracuda CloudGen Firewallを利用してSCADAの通信を制御できることがわかりました。
通常、SCADA通信を利用する設備は送信元、送信先が明確であることが多いと思いますし、またプロトコル内で利用するコマンドなども決まっていることが多いのではないかと考えます。レイテンシーの問題など課題はあると思いますが、旧来の生産性システムのセキュリティ保全に何か役立てるのではないかと考えています。