昨年も紹介したS4という制御システムに関するカンファレンスで、今年はICS Villageという新しい企画(公式サイト)がありました。制御システム用の機器を用意し、みんなで攻撃してみるというイベントです。
会場では、4つのセグメント(コーポレートゾーン、DMZ、制御センターゾーン、フィールドゾーン)からなるネットワークが構築され、参加者は無線を使ってコーポレートゾーンに接続できるようになっていました。

攻撃の最終目的はフィールドゾーンにアクセスし、フィールド機器(多くはPLCと呼ばれる機器)の制御を乗っ取ることですが、各セグメントの間にはファイアウォールがありますので簡単にはフィールドゾーンにたどり着くことすらできません。運営側に確認したところ、いかにして最終攻撃対象にたどり着くかもイベントの一部なのでICS Villageにある機器はすべて攻撃対象とのことでした。
特に初日は厳しい設定になっており、挑戦の状況によって二日目以降は設定を緩めていくというルールでした。
ところが、私も初日に挑戦してみて、いきなり初日にフィールド機器の制御を乗っ取ることに成功してしまったので、その手順を紹介します。
会場では、4つのセグメント(コーポレートゾーン、DMZ、制御センターゾーン、フィールドゾーン)からなるネットワークが構築され、参加者は無線を使ってコーポレートゾーンに接続できるようになっていました。

攻撃の最終目的はフィールドゾーンにアクセスし、フィールド機器(多くはPLCと呼ばれる機器)の制御を乗っ取ることですが、各セグメントの間にはファイアウォールがありますので簡単にはフィールドゾーンにたどり着くことすらできません。運営側に確認したところ、いかにして最終攻撃対象にたどり着くかもイベントの一部なのでICS Villageにある機器はすべて攻撃対象とのことでした。
特に初日は厳しい設定になっており、挑戦の状況によって二日目以降は設定を緩めていくというルールでした。
ところが、私も初日に挑戦してみて、いきなり初日にフィールド機器の制御を乗っ取ることに成功してしまったので、その手順を紹介します。
やはり初日は厳しい設定になっているだけあって、アクセス可能なマシンが少なく、見つかったのはネットワーク機器等も含めて5台ほどしかありませんでした。
その中で無線のアクセスポイントとなっているサーバに目をつけました。ふつうのLinux機で構築されており、アクセスポイントやDHCPサーバの役割を担っているようでした。このサーバではアクセスポイントに関する情報を格納するためMongoDBが稼働していました。そこで、MongoDBのセキュリティ設定を確認すると、認証無しでログインできることがわかりましたので、早速ログインしデータベースの情報を全て抜き出しました。
次に、データベース内の情報の中にサーバのホスト名が残っていることを見つけました。そのホスト名は、xxxxxxxx-laptop(xは伏せ字)でした。
このホスト名だとハイフンから前の部分がユーザ名ではないかと推測ができます。ユーザ名の候補を入手することができたら、まず試したのはいわゆるジョーアカウントと呼ばれる、ユーザ名とパスワードが同一のアカウントでのログインです。
で、ダメもとでやってみたらsshでログインできたというわけです。そこからrootになることもできましたし、管理用のサーバということでフィールドゾーンにアクセスすることも可能でした。おそらく管理用サーバに対してはファイアウォールが緩く設定されていたのでしょう。
一旦フィールドゾーンにアクセスできてしまうと、その中はザルなことが多く、
認証無しでPLCの管理画面にアクセスできたり、

デフォルトのアカウントで管理画面にアクセスすることもできますし、

ベンダーが仕込んでいるバックドアでログインすることもできますし、

認証情報が入ったファイルをダウンロードしてパスワードを解析し、ログインすることもできます。

管理画面にアクセスすれば、設定変更も可能ですし、

バックドア入りのファームウェアをアップロードすることも可能です。

さらにはHMIという監視用(時には管理用)の画面にアクセスすることも可能でしたし、


VNCでログインして正規のユーザが作業する様子を観察することも可能でした。

おまけとして、FTPサーバからTODOリスト漏えいや

攻略したマシンに保存されていたVMイメージからメモリフォレンジックをしてパスワードを入手することもできました。

さて、私が行った一連の攻撃ですが、運営側と話をしてみると初日からここまでやられることは全くの想定外だったそうです。(あれ、そういえば間にIPSが置かれていたのですが。。)
フィールド機器が設置されているネットワークにアクセスすることは難しいという理由で、内部はそこまで厳しく設定していないという話は現実の世界でもよく耳にします。
ただ今回のように、プロが設定していても想定外は起こります。想定外に備えて、内部ネットワークも「攻撃を続けにくい」構成にしておくことの重要性を示すいい教訓ではないでしょうか。
その中で無線のアクセスポイントとなっているサーバに目をつけました。ふつうのLinux機で構築されており、アクセスポイントやDHCPサーバの役割を担っているようでした。このサーバではアクセスポイントに関する情報を格納するためMongoDBが稼働していました。そこで、MongoDBのセキュリティ設定を確認すると、認証無しでログインできることがわかりましたので、早速ログインしデータベースの情報を全て抜き出しました。
次に、データベース内の情報の中にサーバのホスト名が残っていることを見つけました。そのホスト名は、xxxxxxxx-laptop(xは伏せ字)でした。
このホスト名だとハイフンから前の部分がユーザ名ではないかと推測ができます。ユーザ名の候補を入手することができたら、まず試したのはいわゆるジョーアカウントと呼ばれる、ユーザ名とパスワードが同一のアカウントでのログインです。
で、ダメもとでやってみたらsshでログインできたというわけです。そこからrootになることもできましたし、管理用のサーバということでフィールドゾーンにアクセスすることも可能でした。おそらく管理用サーバに対してはファイアウォールが緩く設定されていたのでしょう。
一旦フィールドゾーンにアクセスできてしまうと、その中はザルなことが多く、
認証無しでPLCの管理画面にアクセスできたり、

デフォルトのアカウントで管理画面にアクセスすることもできますし、

ベンダーが仕込んでいるバックドアでログインすることもできますし、

認証情報が入ったファイルをダウンロードしてパスワードを解析し、ログインすることもできます。

管理画面にアクセスすれば、設定変更も可能ですし、

バックドア入りのファームウェアをアップロードすることも可能です。

さらにはHMIという監視用(時には管理用)の画面にアクセスすることも可能でしたし、


VNCでログインして正規のユーザが作業する様子を観察することも可能でした。

おまけとして、FTPサーバからTODOリスト漏えいや

攻略したマシンに保存されていたVMイメージからメモリフォレンジックをしてパスワードを入手することもできました。

さて、私が行った一連の攻撃ですが、運営側と話をしてみると初日からここまでやられることは全くの想定外だったそうです。(あれ、そういえば間にIPSが置かれていたのですが。。)
フィールド機器が設置されているネットワークにアクセスすることは難しいという理由で、内部はそこまで厳しく設定していないという話は現実の世界でもよく耳にします。
ただ今回のように、プロが設定していても想定外は起こります。想定外に備えて、内部ネットワークも「攻撃を続けにくい」構成にしておくことの重要性を示すいい教訓ではないでしょうか。