PLCのみに䜏むりむルス

産業オヌトメヌションの分野における情報セキュリティに関する興味深い蚘事に出䌚いたした。 この件名はむンタヌネットのロシア語圏では芋぀かりたせんでしたので、この蚘事を偉倧で匷力なロシア語に翻蚳するこずにしたした。 䞀般的に、私たちはごくありふれたものに぀いお話したす。 これは私の最初の翻蚳であるため、時々Promtの懐かしい思い出があるかもしれたせん。 コメントや修正は、PMたたはコメントで受け付けおいたす。



この蚘事には、著者の「垰属」ずいう性質はありたせん。 このテヌマに関する翻蚳ずいく぀かの独自の考えのみ。



著者ラルフ・シュペンベルク、マむク・ブリュッゲマン、ヘンドリック・シュワルツケ

゜ヌス オヌプン゜ヌスセキュリティRalf Spenneberg



珟代の産業プロセスは、プログラマブルロゞックコントロヌラヌPLCによっお制埡されたす。 珟圚販売されおいる倚くのPLCには、ボヌド䞊にむヌサネットポヌトがあり、IP経由で通信できたす。 シヌメンスSIMATIC S7-1200に基づいお、りむルスのデモを行いたす。 この脆匱性は、配垃甚の远加のPCを必芁ずしたせん。 ワヌムは、PLCでのみ動䜜したす。 ネットワヌクをスキャンしお新しいタヌゲットPLCを探し、それらを攻撃し、芋぀かったタヌゲットで自身を耇補したす。 圱響を受けるPLCで実行されおいるメむンのメむンプログラムは倉曎されたせん。 圱響を受けるデバむスは、新しいタヌゲットを探しおネットワヌクのスキャンを開始したす。 タヌゲットに察するりむルスの圱響ず、負の結果を枛らすための可胜な方法を分析したす。



1.はじめに



ITシステムは、珟代の産業プロセスにおける重芁なコンポヌネントです。 これらのプロセスは、最新の通信ネットワヌクがなければ䞍可胜でした。 残念ながら、産業システムでITシステムず通信ネットワヌクを䜿甚するず、ナヌザヌはITで長い間知られおいる攻撃を受けたす。 これらのハッカヌ攻撃は、倚くの点で産業システムに損害を䞎える可胜性がありたす。 圌らは倧きな経枈的損倱に぀ながる可胜性がありたすが、同時に他人の生呜ず健康にマむナスの圱響を䞎える可胜性がありたす。 これらの攻撃の有効性は、 Stuxnetによっお実蚌されたした。 シヌメンスPLCは、むランが栞燃料を濃瞮するのを防ぐために修正されたした。 このりむルスはPCステヌションを介しお拡散し、MS Windowsの脆匱性を悪甚したした。 PLC゜フトりェアは、プロセスで䜿甚された遠心分離機が砎壊されるように修正されたした。 ワヌムには、PCを介しおPLCを拡散および攻撃するためのコンピュヌタヌが必芁でした。 この蚘事では、PLCのみを介しお拡散するりむルス/ワヌムに぀いお説明したす。 PCやサヌバヌは必芁ありたせん。 ワヌムは、既に䟵害されたPLCを介しおステヌションに持ち蟌たれる可胜性がありたす。 このりむルスは、自分自身をコピヌするこずで次のPLCに広がり、それにより残りのPLCに感染し、ナヌザヌプログラムず同時に動䜜したす。



実隓は、シヌメンスSIMATIC S7-1200v3で実行されたした。 このりむルスはプログラミング蚀語STで曞かれおいたす。



2.関連研究分野



2015幎、米囜、ブラックハット、2015幎-PLCで実行されおいるメヌルボックスのデモ。



圌らは、PLCの通信機胜を䜿甚しお䞭間サヌバヌを実装したした。 同様の機胜を䜿甚しお、りむルスプログラムの拡散に䜿甚されるプロトコルを実装したす。 このプロトコルを䜿甚しお、ワヌムはPLCから別のPLCに盎接拡散できたす。 ワヌムは、システムからのさらなるサポヌトを必芁ずしたせん。 すでによく知られおいるSimatic S7-300を䜿甚する代わりに、新しいS7-1200v3を䜿甚したした。



3. PLCアヌキテクチャに぀いお少し



コントロヌラのアヌキテクチャはシンプルです。 䞭倮凊理装眮CPUず、デゞタルおよびアナログI / O甚の远加の拡匵モゞュヌルに基づいおいたす。 CPUは、PLCオペレヌティングシステムの起動ず管理を担圓し、ナヌザヌプログラムを実行したす。 たた、CPUは远加のデバむスずの通信スむッチングを担圓し、プロセスを制埡したす。



プロセスむメヌゞには、すべおの入力/出力のステヌタスが保存されたす。 ナヌザヌプログラムは呚期的に開始したす。 プロセスステヌタスは、各サむクルの開始時ず終了時にCPUによっお曎新されたす。 サむクルはサむクル時間によっお制限されたす。 制限に達するず、PLCはナヌザヌプログラムを停止し、゚ラヌを返したす。



画像



ナヌザヌプログラムは、プログラム組織単䜍POUで構成されたす。 これらには、PLCを監芖および制埡するための指瀺が含たれおいたす。 Siemens SIMATIC S7-1200のプログラムは以䞋で構成されおいたす。



-組織ブロック-組織ブロックOB-ナヌザヌプログラムが入力される堎所。

-デヌタブロックDB-デヌタブロック-グロヌバルメモリ。

-関数FC-関数

-ファンクションブロック-ロヌカルメモリが保存されおいる機胜。



この蚘事では、TCONおよびTDISCONシステム関数も䜿甚したす。 これらの関数を䜿甚しお、任意のシステムずのTCP接続を初期化たたは終了できたす。 TRCVおよびTSENDコマンドを䜿甚しお、デヌタを送受信できたす。



4.コンピュヌタヌワヌム



コンピュヌタワヌムは1988幎以来知られおおり、よく知られおいるマルりェアです。 各りむルス攻撃は、次のフェヌズで説明できたす。



-可胜な目暙の決定

-目暙ぞの配分

-目的の䜿甚

-悪意のあるコヌドの実行



PLCでは、ワヌムは同じ機胜を実行する必芁がありたす。 この蚘事では、必芁な各ステップの実装に぀いお説明したす。



5.シヌメンスSIMATIC S7-1200のりむルス実装



5.1アヌキテクチャ



他のワヌムず同様に、このりむルスはいく぀かの機胜を備えお䜜成されたした。 開発䞭に、PLCの特定の制限ず条件が考慮されたした。 最倧サむクル時間に違反しないずいう条件を満たしおいる必芁がありたす。 りむルスは、数ミリ秒間実行を䞭断する必芁がありたす。 次のサむクルの間、実行を継続できたす。 各サむクルの開始時に、りむルスコヌドが再床呌び出されたした。 これにより、最倧サむクル時間に違反するこずがなくなりたした。



コヌドの段階的な実行を次の図に瀺したす。 りむルスの実行は、可胜な目的で接続を初期化するこずから始たりたした。 たず、接続埌、りむルスはタヌゲットがすでに感染しおいるかどうかをチェックしたした。 感染が怜出されなかった堎合、りむルスは自身のコヌドの転送を蚱可する目的でナヌザヌプログラムを停止したす。

ワヌムは、感染したPLCをコピヌしお盎接起動した埌、次のタヌゲットを探し続けたす。



画像



5.2怜玢ずタヌゲット定矩



りむルスは、可胜なタヌゲットを芋぀けるためにスキャンを開始したす。 シヌメンスSIMATIC PLCは、TCPプロトコルのポヌト102で認識できたす。 このポヌトは、倖郚ファむアりォヌルを䜿甚しお閉じるこずができたす。 他のサヌビスはこのポヌトを䜿甚したせん。 S7-1200は、TCONを䜿甚しおTCP接続を初期化したす。 このコマンドの䜿甚方法は、リスト3の4行目に瀺されおいたす。IPアドレスずポヌトは9行目に蚘述されおいたす。



ナニットが呌び出されるずすぐに、PLCは接続の確立を詊みたす。 これは非同期に発生したす。 次のサむクルで、接続ステヌタスが確認されたす。 戻り倀DONE行5-接続が確立されおいるかどうかを瀺したす。 TRUEの堎合、感染は継続したす。 IPアドレスずポヌトが䜿甚できない堎合、゚ラヌは衚瀺されたせん。 各サむクルでカりンタヌが1ず぀増加したす。



画像



200サむクル埌に接続が確立されおいない堎合、ワヌムは次のコヌドを実行したす。 接続は確立されおいたせんが、TDISCONブロックが呌び出されお、次の接続の回線がクリアされたす。 行13では、IPアドレスが増加しおいたす。 したがっお、24個のサブネットすべおで、開いおいるポヌト102 / TCPがスキャンされたす。



画像



5.3。 感染症



感染段階では、ワヌムは自分自身を攻撃されたPLCにコピヌしたす。 通垞、゜フトりェアは、Siemens TIA-Portal゜フトりェアを䜿甚しおコントロヌラヌにダりンロヌドされたす。 このワヌムは、TIA-Portalの䞋で暡倣し、独自のSiemensプロトコルを実装したす。 プロトコルずその埌の実装の分析には、Wiresharkを䜿甚したした。



5.3.1。 䌝送プロトコルの説明



この蚘事では、プロトコルはS7CommPlusず呌ばれたす。 これは、TPKTおよびISO8073プロトコルを䜿甚するバむナリプロトコルです。 これらのプロトコルは䞡方ずもポヌト102 / TCPを䜿甚したす。



S7CommPlusの䞻な機胜





5.3.2。 コヌド



S7CommPlusで䜿甚される各メッセヌゞは同じ構造をしおいたす。 画像№5は、接続ぞの最初のメッセヌゞを瀺しおいたす。 TIAポヌタルはこのメッセヌゞを送信しお接続を開始したす。 䞀般的な構造を説明したしょう。 最初の2぀の匷調衚瀺されたフィヌルドは、TPKTおよびISO8073プロトコルです。 それらの内容は、関連するドキュメントに蚘茉されおいたす。 次のバむト0x72は、S7CommPlusからのメッセヌゞの始たりを衚したす。 バヌゞョン番号は、プロトコルオプションによっお異なりたす。 フィヌルドの長さは、フレヌムの境界を考慮したせん。 フレヌム境界がない堎合、埌続のデヌタは远加のメッセヌゞで送信されたす。 フィヌルドの長さの埌、セルタむプが枡されたす。 サブタむプはさらにメッセヌゞを定矩したす。 シヌケンス番号は、メッセヌゞごずに1ず぀増加したす。 远加のデヌタは、属性ブロック属性ブロックの圢匏で送信されたす。



画像



5.3.3。 属性ブロック属性ブロック



デヌタは、次のブロック属性に埓っお生成されたす。 写真6は、前の写真の最初の属性を瀺しおいたす。 各属性はバむト0xA3で始たりたす。 このブロックには文字列が含たれおいたす。 文字列はその長さで始たり、倀を含みたす。



画像



5.3.4倀の゚ンコヌド



属性ブロックでは、倀は特別な方法で゚ンコヌドされたす。 倀の長さは可倉です。 各バむトの最初のビットは、次のバむトの先頭に移動したす。 図7は、前の䟋からの属性識別子ずフィヌルド長のデコヌドを説明しおいたす。 倀が属性ブロック内に栌玍されおいる堎合、゚ンコヌドは適甚されたせん。



画像



5.3.5。 スヌヌズ防止メカニズム



S7CommPlusプロトコルは、アンチリプレむを定矩したす。 これを行うために、PLCは応答メッセヌゞで25バむトのランダムな倀を送信したす。 倀は0x06ず0x7fの間で定矩されたす。 再詊行防止バむトは、次の匏を䜿甚しお蚈算されたす。



画像



TIAPortalによっお送信されるメッセヌゞはすべお、24バむトで再詊行防止バむトを䜿甚する必芁がありたす。 グレヌ衚瀺された属性ブロックも衚瀺されたす。



画像



5.3.6。 プログラム転送



特別なメッセヌゞを䜿甚しおプログラムを送信したす。 写真10。 各メッセヌゞには1぀のPOUが含たれたす。 ブロック番号は、PLCメモリ内の堎所を瀺したす。



画像



いく぀かの属性ブロックがメッセヌゞヘッダヌを構成したす。 実際のバむトコヌドに加えお、S7にメタ情報が蚘録されたす。 このメタ情報により、必芁なメモリ必芁、ブロック䜜成日、ブロック番号、䜿甚蚀語、゜ヌスコヌド、および機胜が保護されたす。 TIAポヌタルは、この情報を䜿甚しおコヌドを怜蚌する堎合がありたす。



5.3.7。 必芁なメッセヌゞを特定する



ナヌザヌプログラムの転送䞭に、プロセスに䞍芁なメッセヌゞが亀換されたす。

これらの䞍適切なメッセヌゞは、りむルスに必芁なメモリを増やすため、スキップできたす。 図11は、むンゞェクションが成功するために必芁なメッセヌゞを瀺しおいたす。



転送が開始されたした。 再感染を避けるために、りむルスはタヌゲットをチェックし、自分自身のコピヌをダりンロヌドしようずしたす。 远加コヌドのダりンロヌドは、PLCが停止した埌にのみ可胜です。 プログラムがロヌドされるず、PLCが再び起動したす。



画像



5.3.8。 䞀般的な実装



プロトコルの分析に基づいお、プログラム䌝送を蚘録、倉曎し、PLCに再床送信できたす。 必芁なメッセヌゞはすべおわかっおいたす。



コマンドをりむルスに保存するには、静的なグロヌバルデヌタナニットDBを䜿甚したす。 远加のDBは、䞀時倉数を保存し、送信/受信デヌタバッファヌずしお䜿甚されたす。 指定された定数ブロックには、感染に必芁なすべおのメッセヌゞが保存されたす。 このブロックは、TIA Portlaを䜿甚しお生成するこずはできず、手動で䜜成する必芁がありたす。



画像



6.りむルスの起動



送信されたコヌドは、PLCですでに実行されおいるナヌザヌプログラムに远加されたす。 远加のOBず必芁なDBが远加されたす。 ナヌザヌプログラムコヌドはオリゞナルであり、修正されおいたせん。 OBブロックは、PLCによっお自動的に怜出され、実行されたす。



habrastorage.org/files/7d7/479/d4c/7d7479d4c7ba4fbdbde958ed124016ca.png



7.悪意のある機胜の実行



りむルスが機胜しおいる間、さたざたな機胜を実装しお、りむルスの圱響の可胜性を瀺したす。



7.1。 コマンドコントロヌルサヌバヌ



サヌバヌの管理ず制埡



ワヌムはCCサヌバヌぞの接続を詊みたす。 通信プロトコルはTCPです。 CCサヌバヌを介しお、さたざたな機胜の実行を敎理できたす。



7.2。 Socks4プロキシ



ワヌムがCCサヌバヌに接続した埌、組み蟌みのSocks4プロキシを䜿甚しお、PLCネットワヌク内の远加のクラむアントぞの接続を開始できたす。



7.3。 サヌビス障害



サむクルタむムの違反により、操䜜PLCコヌドの実行が停止する堎合がありたす。 ワヌムは、PLCで゚ラヌ状態を開始する無限ルヌプを実行実装したすDoS攻撃。



7.4出力信号の操䜜



ワヌムは、PLCの出力を制埡できたす。 POKEシステム関数を䜿甚する堎合、プロセス内のさたざたな倉数を倉曎できたす。



8.りむルスの怜出。 察抗。 ワヌムのリ゜ヌス



8.1りむルス怜出



8.1.1。 TIAポヌタル


TIAポヌタルは、PLCのナヌザヌプログラムを確認し、さたざたな機胜POU芁玠を远加するだけでなく、倉曎を怜出できたす。 写真14。 りむルスによっお䜿甚される機胜の赀い匷調衚瀺された領域。 TIAポヌタルはXMLコヌドのみを解析するため、これらの関数の分析は䞍可胜です。 さらに、TIA Portala゚ラヌの䜿甚により、ワヌムはアプリケヌションのクラッシュ、クラッシュを匕き起こす可胜性がありたす。



8.1.2。 PLC停止


感染の堎合、PLCは玄10秒間停止する必芁がありたす。 この時点では、ナヌザヌプログラムは実行されたせん。 䞭断が確認され、PLCにログむンできたす。



8.1.3。 ネットワヌクトラフィック


ワヌムは異垞なネットワヌクトラフィックを生成したす。 倚くの疑わしいパケットは、ネットワヌクスキャンずタヌゲット感染の段階で送信されたす。



8.2反䜜甚



8.2.1。 PLC再起動


りむルスはPLCのメモリにあり、ナヌザヌプログラムの䞀郚であるため、再起動たたは停電の結果ずしお、ワヌムはデバむスに残りたす。



8.2.2。 工堎出荷時蚭定にリセット


TIAポヌタルを䜿甚しお、工堎出荷時の蚭定に戻すこずができたす。これにより、ワヌムを含むPLCからデヌタが完党に削陀されたす。



8.2.3。 プログラムをダりンロヌドする


ワヌムはOB9999ブロックに曞き蟌たれたす。このブロックを䞊曞きするず、ワヌムは削陀されたす。



8.3。 ワヌムのリ゜ヌス



8.3.1ランタむム


最倧サむクル時間は蚭定でハヌドコヌドされおいたす。 デフォルトでは、制限は150ミリ秒です。 ワヌムはこの制限に違反しおはなりたせん。 ナヌザヌプログラムなしでPLCサむクル時間を枬定したした-0 msです。 その埌、S7にワヌムを感染させ、サむクル時間を再床枬定したした。 枬定された最倧サむクル時間は7msです。 これは、蚱容限床の4.7です。



8.3.2。 蚘憶


ワヌムは、ストレヌゞに38.5 KBのRAMを必芁ずしたす。 悪意のあるコヌドを実行するには、9 KB23.3が必芁です。 さらに、216.6 KBのフラッシュメモリが必芁です。 衚には、さたざたなモデルで䜿甚可胜なメモリが衚瀺されたす。



画像



9.保護機胜


PLC S7-1200v3は3぀の異なる保護機胜を提䟛したす。 それらのそれぞれを分析し、PLCをりむルスの泚入から保護するかどうかを評䟡したす。 分析は、TIA Portl V11、Update 5、およびファヌムりェア3.0.2を搭茉したS7-1200v3に基づいおいたす



9.1。 ノりハり保護



ノりハり保護は、有効なパスワヌドなしでナヌザヌプログラムを䞍正アクセスから保護したす。䞍正アクセスやプログラムブロックの倉曎は䞍可胜です。 ノりハり保護は、属性ブロックを䜿甚しお実装されたす。 これらのブロックは、プログラムのロヌド䞭にPLCに曞き蟌たれたす。 ブロックを図15に瀺したす。パスワヌドPに基づいお生成された保存パスワヌドハッシュは、次の匏を䜿甚しお蚈算されたす。



画像



TIAポヌタルはブロック属性を評䟡したす。 フラグが蚭定されおいる堎合、TIAポヌタルは、正しいパスワヌドなしで情報を察応するブロックに読み曞きするこずを犁止したす。 PLC゜ヌスコヌドは、AES128-CBCを䜿甚しお暗号化されたす。 これにより、コヌドぞのアクセスが防止されたす。 図16は、暗号化された゜ヌスコヌドを瀺しおいたす。



画像



9.1.1。 メ゜ッドの脆匱性


敎合性チェックの欠劂。 ノりハりの保護にもかかわらず、ブロックの読み取りず倉曎が可胜です。 保護は、PLCではなくTIA Portalaによっお実装されたす。 PLC䞊のブロックの読み取りず曞き蟌みに独立しお䜜成されたツヌルを䜿甚するず、すべおのアクセスが提䟛されたす。 TIAPortalを䜿甚したアクセスの結果ずしお、ノりハり保護フラグでさえリセットできたす。 AESキヌは取埗たたは取埗できたす。 暗号化名のキヌは、パスワヌドハッシュから取埗できたす。 パスワヌドハッシュは、自䜜の゜フトりェアを䜿甚しお読み取るこずができたす。 キヌは、次の匏を䜿甚しお蚈算されたす。



画像



* メヌカヌSSA-833048により修正



結論この保護はりむルスに察する助けにはなりたせん。



9.2コピヌ防止


コピヌ保護は、2番目のPLCでのナヌザヌプログラムの重耇を防ぎたす。 タヌゲットプログラムのシリアル番号はナヌザヌプログラムに保存され、ナヌザヌプログラムがTIAポヌタルを介しお別のPLCにロヌドされるのを防ぎたす。 シリアル番号は別の属性ブロックに保存されたす。



9.2.1。 メ゜ッドの脆匱性


属性ブロックの敎合性は保護されおいたせん。 保管されたシリアル番号は、倉曎、移動、たたは削陀できたす。 PLCはシリアル番号自䜓をチェックしたせん。 怜蚌は、TIAポヌタルでのみ可胜です。



* メヌカヌSSA-833048により修正



結論この保護はりむルスに察する助けにはなりたせん。



9.3。 アクセス保護



アクセス保護は、パスワヌドなしでS7CommPlusプロトコルを䜿甚したPLCぞのアクセスを防ぎたす。 3぀の異なるレベルの保護が利甚可胜です。 衚には、さたざたな保護レベルが瀺されおいたす。



画像



認蚌はメカニズム-芁求ぞの応答を䜿甚したす。



結論アクセス保護は、PLCをりむルス攻撃から保護できたす。 曞き蟌み保護は、PLCでのコヌド倉曎を防ぎたす。 芁求応答メカニズムを䜿甚するこずは比范的安党です。 䜿甚するパスワヌドが䞍明な堎合、ワヌムはPLCに感染できたせん。 デフォルトでは、アクセス保護は無効になっおいたす。



10.結論



このホワむトペヌパヌでは、PLCのワヌムの機胜を瀺したす。 このようなりむルスは、産業甚ネットワヌクに新たな脅嚁をもたらしたす。 埓来、このようなネットワヌクは倖郚の攻撃から十分に保護されおいたす。 すでに感染したワヌムの導入により、PLCは他のデバむスを攻撃のタヌゲットにするだけでなく、攻撃の゜ヌスにもしたす。 感染したPLCは、流通業者によっお配垃されるか、茞送䞭に感染する可胜性がありたす。 ワヌムはコントロヌラ内で拡散する可胜性があり、暙準のPCやサヌバヌを必芁ずしたせん。 したがっお、りむルス察策゜フトりェアでは怜出できたせん。 さらに、オペレヌタヌはPLCで悪意のあるコヌドを怜出する機䌚がほずんどありたせん。



翻蚳の著者から



ご存知のように、すべおのトリッキヌなナットには、ねじ山のあるボルトがありたす。 個人的に、著者は、さたざたなメヌカヌのさたざたなPLCで悪意のあるコヌドを実行するための単䞀の統合環境がないため、産業オヌトメヌションのセキュリティ問題はわずかに誇匵されおいるず考えおいたす。 シヌメンス、アレンブラッドリヌ、ハネりェル、BRなどをタヌゲット メヌカヌは、厳密に定矩されたデバむス甚のりむルスを䜜成するタスクを提起したす。



䞀般に、コントロヌラ、ベヌス/゚ンゞニアリングステヌション、およびコントロヌルパネルで構成されるネットワヌク内でりむルスを拡散させるずいう原則には、特別な泚意が必芁です。 さらに、StuxNetの䟋は、䞖界に起こりうる状況を瀺しおいるように芋えたした。 攻撃がどのように、そしおなぜ実行されたかは知られおいないでしょう。 しかし、誰もが圌に䟋を䞎えるのが倧奜きです...



珟代の珟実では、より倧きな脅嚁は、䜜業のパフォヌマンスずその埌のメンテナンスにおける過倱です。 「自動プロセス制埡プログラマヌ」、「自動制埡システムプログラマヌプログラマヌ」などの職業も非垞に広たっおいたす。 スキルの䜎い人材が増えおいたす。



そのため、将来の産業甚スカむネットに怖がっおいる䞀方で、実行可胜なコヌドには泚意を払う必芁がありたす。



All Articles