modbus経由でアクセスできるシステムへの攻撃事例の話があったので、簡単にmodbusスキャンに関する記録を残しておく。
OT/ICS系の攻撃っていうのは基本的に何かの値を書き換えるだけで、脆弱性の悪用とか高度なことをしなくても良い場合が多いような印象がある。
ここでの話も、認証無しアクセスできるmodbusで対象マシン上で管理されている値を書き換えただけ。それでも、システムが停止したりするので重大事件ではあるんですけどね。
攻撃といってもITに比べれば地味な作業ではあるが、ただ値を書き換えるだけでは特に影響な可能性もある。そのため、どの値をどのように書き換えることでインシデントが発生するのかというハッカー的思考が重要となる。
そこが面白そう。
脆弱な管理のmodbusデバイス
modbusはデバイスから情報を読み取ったり、対象システムの設定値を書き換えるのに使用されたりする。
これらは「認証情報が必要無い」、「通信が暗号化されていない」、「システムの重大な設定を読み書きできる」ことが多い。
何らかのSCADA的な管理システムなどが、現場で動いているPLCを管理するために使用することが多いと思われる。
こういったmodbusデバイスを遠隔で管理するために、インターネット越しに操作できるようにすることがあるらしい。
そんなときにセキュリティを意識していなければ、modbusデバイスがインターネット上に公開されるわけですね。そんなデバイスはmodbus経由で勝手に操作されるので、今日も世界のどこかの現場でインシデントが起こっていることでしょう。
おそらくだが、ニュースで「工場ラインで重大な事故が発生しました。」という事件があった際に実はOT/ICSデバイスがハッキングされているのではと考えている。しかし、結局そんな考えを現場の人々は持っていないから原因不明で終わっているものも多いのではないかと。
modbusのスキャンツールや操作ツール
スキャンツール
よくポートスキャンで使う「nmap」にも、modbusポートのスキャンスクリプトがある。
「modbus-discover.nse」でModbusデバイスの情報を収集しSlave ID (SID、デバイスアドレス)を列挙
modbusが全てTCPで使用されるわけではないが、TCPならnmapでポートスキャンで検出できる。
一応、mesploitにも「auxiliary/scanner/scada/」にmodbus用ツールがある。が、別に他と比べて凄い訳ではないのでわざわざ起動する必要あるか?という感じ。
ちなみに、CATO NETWORKSの「impacketにmodbus関連操作を可能とする機能がある」という記述はAIのハルシネーション。
そんなの聞いたこと無いし、見つからなかった。
読み書きツール
読み取りや書き込みは以下の4種が有名?
mbtget
GitHub - sourceperl/mbtget: A simple Modbus/TCP client write in pure Perl.
mbpoll
GitHub - epsilonrt/mbpoll: command line utility to communicate with ModBus slave (RTU or TCP)
modbus-cli(ruby)
一番有名だがインストールめんどくさい時がある。
GitHub - tallakt/modbus-cli: Modbus command line utility
modbus-cli(python)
GitHub - favalex/modbus-cli: Command line tool to access Modbus devices
こんな感じ
$ nmap -sV -p 502 --script modbus-discover <target-ip> # ruby版 modbus-cli $ modbus read <IP> %MW0 10 $ modbus write <IP> %MW0 0
↑みたいなことを勉強するなら個人的にはHacker Ariseが一番オススメ。