攻撃を知り、守りが「自分ごと」になった。
今回は、新型コロナ禍、家での実験の日々。そこから生まれたヒットブログ「WiresharkのDissector」「LANケーブルをニッパーで切断し5秒で侵入」の裏側
第6回:LANケーブルを5秒で切断侵入 - 実験と発信の日々(2019-2020)
【連載記事】 この記事は全9回の連載です。📚 連載まとめ・目次はこちら
規格ドキュメント学習 (2019年9月)
ペネトレーションテスターとしてのスキルを磨く方向から、一旦、制御システムセキュリティ全般の改善に注力するように方針転換した。そのために様々な規格やガイドラインを読み漁った。
例えば、IPA、JPCERT/CCの制御システムセキュリティに関する文章、NIST-FIPS、NIST SP 800、REST ICS Technical Security Assurance Position Paper 2016、などを読む。とくに紙の英語資料しか存在しないREST ICSには苦労した。田中は、これまで日本語でしか仕事をしてきておらず、Google翻訳はまだまだ専門分野では使い物にならない時代で、今では誰もが知っている翻訳ツールであるDeepLの日本語機能もなかった時代である。
これらドキュメントの中で、技術面から具体的な対策手法の記載がされているのは、NIST SP800-82 Rev.2 である。
とはいえ、規格書やガイドなどの一般論での記載からは、実際のシステムにおける具体的なイメージがつかみづらく、一般の方に理解してもらうのは難しいだろうなと思ったのも事実である。
また、IPAが公開している資料を読み、リスクアセスメントのためのガイダンス、インシデント事例など、経営層を含めトップダウンからのアプローチを行う上での指標の整備が進んでいることがわかった。 以前、田中がセキュリティ対策を検討する際にシステムのリスクアセスメントを行ったときには、まだIPAの「制御システムのセキュリティリスク分析ガイド」など存在しなかった。それに比較すれば、なんと便利になったものかと隔世の思いであった。なお、制御システムのセキュリティリスク分析ガイドは、2024年時点では、第2版が発行されており、オンライン開催分は無料というセミナーも開催されている優れものである。制御システムセキュリティに関わる多くの方が目にしている内容と思われるため、活用することをお勧めする。
これらの文献を読み漁り、制御システム業界に関わる人たちがどのようなプロセスで対策を検討するのが良いのだろうかと考えた。
ペネトレーションテストへの参加(2019年10月)
制御システムペネトレーションテストへ参加した。経験豊富なペネトレーションテスターが、実際にどのように攻撃を行うのかをテストを行う側の立場で見る初めての機会であった。この経験を通して、どのような対策が有効で、技術を有する攻撃者にとっては、何があまり効果がないのか感じることができた。
このとき感じたことは、 コスト対効果が高い対策は、USB利用教育はもちろん、推測困難なパスワード、ネットワークフィルタの最小化原則、ログの監視。 などである。
このテストでは、中間者攻撃でUDPやTCPの通信を盗聴しパケットの内容を解析、解析した内容をもとに攻撃ツールを生成し、不正な制御命令を送信し制御対象を不正に操作するということも実施していた。
コラム:中間者攻撃
TCP/IPでの中間者攻撃は、攻撃者がネットワーク上で他の二人の通信をこっそり傍受して、自分がその通信の一部であるかのように振る舞う手法です。これにより、攻撃者は情報を盗んだり、データを改ざんしたりすることができます。通信を安全に保つためには、暗号化された通信方法を使用することが重要です。
このときに、平文通信であればUDPであろうとTCPであろうと盗聴だけでなく改ざんが可能なこと、中途半端な難読化は解析されてしまうことなどを、ツールやソースコードなどを使った実践を通して理解した。過去にテストを受ける立場で攻撃の概要は知っていたとはいえ、自分で手を動かしてできるようになることで一段深く本当の意味で理解できた気がした。これが後のブログ公開や教育コンテンツ制作につながっていく。
Dissectorのブログ(2020年2月)
日本の制御システム業界で使われている通信プロトコルに関しては、比較的汎用的と言われるModbusや、ビル業界ではよく聞くBacnetなど仕様が公開されているプロトコルも存在する。一方、制御システムを設計する各社それぞれが独自のフォーマットを決めて通信している独自プロトコルを使用している例も数多くある。
そのような独自プロトコルにおいては、通信トラブル時などに、パケットキャプチャ解析ツールであるWiresharkで通信パケットをキャプチャして原因究明しようとしても通信内容を理解することは困難である。なぜならば、パケットの内容が人間が理解困難な16進数の羅列としてしか表示しないためである。制御業界の現場においては、この16進数の羅列を読み取る特殊技能をもった職人のような人もいるのであろうが、普通の人が読み取ることは不可能であった。これを解消する技術がWiresharkのDissectorをlua言語で作成する方法である。この技術は、すでに紹介した制御システムペネトレーションテストにおけるパケット解析の際に、当たり前のように使われていた技術である。
コラム:WiresharkのDissectorをlua言語で作成する方法
Wiresharkは、ネットワーク上のデータ通信を観察するためのツールです。Dissectorとは、Wiresharkが特定のデータ形式を解析し人間が理解できる形式で表示する仕組みです。
Luaはプログラミング言語の一つで、WiresharkのDissectorを作成する際に使うことができます。Lua言語を使用してDissectorを作るときは、Luaのコードを書いて、Wiresharkがどのようにデータを解析すべきかを定義します。このコードをWiresharkに追加することで、特定のデータ形式の詳細な解析が可能になります。これにより、ネットワークの問題を特定したり、通信内容を詳しく調べたりするのに役立ちます。
この技術を制御システムの開発現場でパケット解析に苦労している人たちへ伝えたいという思いから「WiresharkのDissectorを使った独自プロトコル解析をやさしく解説してみました」というタイトルのブログ記事を発表した。
当時、Dissectorに関する情報は、ネット検索すればそれなりに紹介されていたが、ネットワークの基礎知識がない初心者でも使いこなせるように丁寧に解説するという趣旨で作成したこのブログは、田中が書いた初のブログ記事である。その後、基礎的内容にとどまらず、さまざまなタイプのデータ型の解説や、1パケットに収まらない複数パケットにまたがるサイズの場合の対応など複数回にわたる記事として発行し最終的には4部作となっており、今現在も継続的なアクセスがあり、2026年3月現在、wireshark dissectorでgoogle検索するとトップに出てくるものとなっている。
田中は、ここで気づき始める。自分は、専門用語に悩む人たちに実体験を言葉にして届けることが、何よりも好きで、これこそが強みなのだ、と。
新たな環境で、経験したことが無いことに挑戦する事で初めて自分の特技に気づくことはあるものだ。
ケーブル侵入実験(2020年4月)
この頃、新型コロナウイルスが連日ニュースを賑わせる状況となっていた。すでにリモートワークが定着しており、家に実験機材を運び込み、以前より興味のあったことを実験する日々が始まった。
最初の実験が、LANケーブルからの侵入である。世間で話題になるサイバーセキュリティといえば、インターネットからの攻撃が主流である。しかし、外部ネットワークとは切断した制御システムを長く経験してきた田中にとっては、インターネットへのアクセスルートがない制御システムに対しては、それは、現実味が薄い攻撃手法とも思えていた。
攻撃者の観点から、現時点の世の中で実際に自分が制御システムを攻撃するとしたらどこをねらうかと考えた場合、物理的な観点で見落とされている箇所があるのではないかと思っていた。なお、このころすでにUSBメモリの脅威は既に広く周知されており、USB起点以外でという観点である。それがLANケーブルであった。
物理ネットワークからの侵入の脅威としてスイッチの空きポートに攻撃端末を繋げる方法や、LANケーブルを抜いてスイッチをかまして攻撃端末を繋げる方法はよく知られていた。一方でLANケーブルを切断しての侵入の脅威は語られていることはほとんど見たことがなかった。LANケーブルを切断加工してスイッチと攻撃端末を繋いで侵入するなど、あまりにも原始的すぎて誰も語らなかったのであろうと推察する。
ここに一石を投じたのが、「LANケーブルをニッパーで切断し5秒でネットワークへ侵入・盗聴できるか実験してみました」というブログである。
まず、実際にニッパーで切断して加工することでどれだけの時間で侵入できるか試した。最初は数十分かかったが何度もやっているうちに5分程度でできそうな感じになってきた。そのとき、5分もケーブルを切断して無通信状態がつづいていたら、それなりの通常のシステムであればおかしいと気づかれてしまうであろう。やることはケーブルの加工だけである。高速にケーブル加工できる手段はないか?
ここで、田中は試行錯誤するとともにgoogleで検索しまくる。検索を重ねた末に辿りついたのがぐっとすプラグである。ぐっとすプラグという機材を用いて5秒の通信断時間で侵入を果たすことができた。
この記事は、公開すぐに10万アクセスを超え、サイバーセキュリティという比較的ニッチな分野にもかかわらず2020年のはてなブログ年間ランキング20位という人気ぶりであった。このブログは、タイトル的にも出オチで興味を引くタイトルとしたこともあり、読者の受け取りようによってはサイバー攻撃手法のアイデアを紹介する内容であり、批判的なコメントや炎上の懸念もあった。ただし、本文の文体や構成を工夫したこともあり、批判的な反応はほとんどなかった。
これまでの2本のブログ公開の経験を経て、制御システムを開発してきた現場にいたからこそ気づくことができる世間の人が見逃している視点というものがあり、知らないため見逃されているだけで伝えれば興味を持つ人が一定数いるのだと自信を持ち始めるきっかけとなった。それとともに、どのような文章で書けば人に伝わるかという感覚をとぎすまし、自ら手を動かして試した内容を紹介するという情報提供のスタイルが確立していった。
ここでの教訓は、原理や仕組みが明らかになっており、そこに悪用できる脆弱性があると思われると、時間・金銭・サイズなど何かのハードルがあっても工夫・追求することで突破されてしまう事があるということかもしれない。しかも、現在では、検索は生成AIの助けで、攻撃対象の仕組みとやりたい事がわかっていれば、攻撃手法は数年前に比較し発見は容易になってきていると思う。
田中が、5分を5秒に短縮できる手段はあるはずだという信念のもと、執念深く検索し、ぐっとすプラグに辿り着いたように、攻撃者も目的さえあれば執念深く、攻撃手法を探し、発見するかもしれない。
OT IDSに初めて触れてみる(2020年6月)
以前より興味があった攻撃検知製品としてOT IDSがあった。制御システムのネットワークに流れるパケットをキャプチャして解析し、サイバー攻撃を検知するというものである。なぜ興味があったかというと制御システムと相性が良いと思っていたからである。理由は2つあり1つ目が可用性への影響である。制御システムは可用性が重視されるがパケットをキャプチャするだけならシステムの可用性に悪影響を及ぼさないと思えるからである。
コラム:制御システムの可用性重視の考え方
可用性とは、正常にサービスを提供し続けることを意味します。重要インフラなどの重要な制御システムでは可用性が重視されています。止まることで人命に関わるシステムなどにおいては可用性が重視されることが当然であることは誰もが納得するでしょう。高可用性を確保するにはシステムへの余計な外乱は排除したいものです。外乱が入ることによってシステムの動作が不調になることはまま発生するものであり、外乱の例としてソフトウェアのバグがあります。例えば何かの条件で永久ループを繰り返すバグにより計算機内のプロセスが暴走しCPUリソースを圧迫することや、ログをファイルに吐き続けディスクフルを起こすことなどです。このような状況となると他の正規のプロセスの動作に影響が発生しシステムの動作が不安定となります。
重要な制御システムにおいては、高可用性を確保するために、装置が壊れたことを検知し代わりの装置が機能を引き継ぐような冗長性に代表するように様々な対策がとられています。そのため、ハードウェアが壊れる、プロセスが異常停止するなどの検知できる障害に対しては対処し可用性を損なわない仕組みも組み込めますが、検知できない程度に不安定になるという障害が次に何が起こるか想定が難しく対処が困難なのです。
代表的なセキュリティ対策製品としてアンチウィルスソフトがありますが、これが制御システムの関係者から毛嫌いされてきました。アンチウィルスソフトが計算機のリソースを圧迫して、正規のプロセスの動作に影響を及ぼしシステムの動作を不安定とすることを懸念してのことです。
2010年ぐらいを思い出してみると、アンチウィルスソフトが自身のPCのリソースを圧迫して動作を重くするという現象を多くの人が経験したことがあるでしょう。このような経験がある制御システム関係者にとっては、伝統的に可用性を重視してきた文化圏に、「セキュリティが大切です」という新たな思想を布教しようとセキュリティベンダがやってきても、 「あなた自身が外乱です」 という思いだったのではと想像します。
制御システムセキュリティの話題として、ITとOTの壁が言われ続けて久しいですが、セキュリティの大切さを布教するのに相手の風土や文化に合わせずに受け入れられないのは当然だと思います。近年、ITとOT、それぞれの部門がお互いを理解・尊重することでセキュリティ対策が進んできたという話題が増えてきたのは健全なことだと思います。
コラム:相手に伝えるとは
先ほどのコラムの最初に、「可用性とは、正常にサービスを提供し続ける」と書きました。実は、これは可用性の性質だけではなく完全性の性質も含みます。広く伝えるためには簡潔さが重要と思います。まず、読む気になってもらわないと絶対に伝わらないからです。正確さより、まずは伝えること。そのため、冒頭では可用性とは、と書きました。正確さは、興味を持ってもらった後で良いと思います。このように、相手によっての使い分けは、意識・無意識を問わずあらゆる場面で見られるので情報の受け手も注意が必要と思います。正確さを目指すのか、広く伝えることを目指すのか、情報伝達は難しいものです。 ということで、少し正確に言うと、可用性は、「止まらない」、完全性は、「正しい」です。つまり、制御システムでは、可用性と完全性が重要です。 専門家目線で語ると、可用性だけで語る人には、完全性に言及したくなってしまうものです。専門家ほど正確さを大切にしている人が多いと思いますので。
2つ目の理由が通信の性質である。制御システムは、基本的に決められた相手とある程度一定の頻度で通信を行う。そのため通信パケットを監視していれば普段と異なる通信が発生すれば、なにかおかしいなと気づきやすい。たとえば、外部と通信しない制御システムにおいてインターネット上のIPアドレスと通信を試みるパケットが見つかれば、おかしいとすぐに気づける。これと対照的なのが家庭やオフィスなどで使うPCでありブラウザで世界中の任意の相手と通信を行っている。これだと、普段と異なる通信を発見するのはなかなか大変である。
ある知り合いに頼みOT IDS製品を入手し、簡易的なサーバ・クライアント環境に対し基本的なサイバー攻撃を行いどのような検知をするのか検証をしてみた。
行ったのは、攻撃端末の設置、ポートスキャン、中間者攻撃、既知脆弱性をついたサーバへの侵入である。
何をどのように検出するか実験し報告書にまとめた。結果は一般公開はせずにある企業に無償提供を行ったが反応は得られなかった。
今思えば、当たり前すぎて役に立たない情報だったのかもしれないし、現実感のないシナリオで実用的でなかったのかもしれない。受け止める体制がなかったのかもしれない。真相はわからない。
訓練環境構想(2020年秋)
訓練環境構想が持ち上がり、その中の制御システム環境として、市販の学習用制御システム(通称水ポコ)を購入し中間者攻撃を実験。
水ポコは、翌年の制御システムセキュリティカンファレンスの動画ネタ、独自プロトコル解析のトレーニング環境として利用していく。
やはり実際に動く制御対象というものがあると、見ている人にはわかりやすく関心も得やすいものである。
カンファレンスでは、USBからの侵入、LANケーブル侵入、中間者攻撃による改ざんをテーマに発表し、攻撃に関するテーマへの世間の関心度の高さの手応えを得た。
次回予告
次回は、2021年から2022年にかけての活動を描きます。
2021年、世界的なスポーツイベントであるオリンピックが開催。サイバーディフェンス研究所は、大会会場の制御システムのペネトレーションテストで大会のセキュリティ対策に関わります。
そして、ペネトレーションテスト手法の学習再開。TryHackMeでセキュリティの基本を勉強開始。朝から晩まで終日ログインして勉強する日々。
独自プロトコル解析トレーニング開催。制御システムを開発してきた知見を活かしたトレーニングの仕上げ。
そして2022年春、社内に自前で制御システムを作ろうという機運が高まり、工場制御システムと鉄道制御システムという2つの模擬制御システムを作成。
Factory I/Oとの出会い、OSSのPLCツール、そして本物の制御盤を制作している会社との仕事を通じて得られたものとは。
自分の手で制御システムを作る経験を描きます。
【ご注意】 本記事は教育・啓発を目的としています。登場人物・組織は架空のものであり、記載された技術情報の悪用を推奨するものではありません。
守るだけでは腑に落ちなかった - 制御システム技術者のサイバー修行録【連載まとめ】
- 第1回:なぜ私は24年勤めた会社を辞めたのか - 4時間で決まった転職
- 第2回:TCP/IPとの出会い - 閉ざされたシステムの時代(1996-2000)
- 第3回:トラブルシューターの日々と『100年使えるシステム』構想(2010-2015)
- 第4回:良いコンサル、悪いコンサル - MACアドレス認証が教えてくれたこと(2015-2019)
- 第5回:サイバーディフェンス研究所入社 - 攻撃者の視点を学び始める(2019)
- 第6回:LANケーブルを5秒で切断侵入 - 実験と発信の日々(2019-2020)(本記事)
- 第7回:自分の手で制御システムを作る - 工場、鉄道、そしてオリンピック(2021-2022)(次回予定)
- 第8回以降:順次公開予定