
ICS/SCADAの検出と列挙のためのNmap NSEスクリプト—BACnet、EtherNet/IP、CoDeSys、Fox、Modicon、Omron、S7—セキュリティ評価のためのプロトコルクエリを使用します。
#Redpoint
###Digital Bond の ICS 列挙ツール
Redpoint は、ICS アプリケーションとデバイスを列挙するための Digital Bond の研究プロジェクトです。
私たちは評価の際に Redpoint ツールを使用して ICS デバイスを発見し、二次テストに役立つ情報を取得します。これらのツールの一部は、このリポジトリで Nmap NSE スクリプトとして公開されます。
Redpoint ツールは、正規のプロトコルまたはアプリケーションコマンドを使用して、デバイスとアプリケーションを発見・列挙します。何かを悪用したりクラッシュさせたりするものではありません。ただし、多くの ICS デバイスとアプリケーションは脆弱であり、予期しないトラフィックによってクラッシュしたり、予期しない応答を返したりする可能性があるため、注意して使用してください。
各スクリプトは以下に説明されており、このリポジトリ内の .nse ファイルとして入手できます。
BACnet-discover-enumerate.nse - BACnet デバイスの識別と列挙
codesys-v2-discover.nse - CoDeSys V2 コントローラの識別と列挙
enip-enumerate.nse - Rockwell Automation およびその他のベンダーの EtherNet/IP デバイスの識別と列挙
fox-info.nse - Niagara Fox デバイスの識別と列挙
modicon-info.nse - Schneider Electric Modicon PLC の識別と列挙
omron-info.nse - Omron PLC の識別と列挙
pcworx-info.nse - PC Worx プロトコル対応 PLC の識別と列挙
proconos-info.nse - ProConOS 対応 PLC の識別と列挙
s7-enumerate.nse - Siemens SIMATIC S7 PLC の識別と列挙
==
###BACnet-discover-enumerate.nse
![BACnet-discover-enumerate サンプル出力] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/03/BACnet-nse.png)
####著者
Stephen Hilt と Michael Toecker
Digital Bond, Inc
####目的と説明
BACnet-discover-enumerate.nse の目的は、IP 接続されたデバイスが BACnet を実行しているかどうかを最初に識別することです。これは、事前に生成された BACnet メッセージをデバイスに問い合わせることで機能します。新しいバージョンの BACnet プロトコルは確認応答を返し、古いバージョンは BACnet エラーメッセージを返します。確認応答またはエラーのいずれかが存在すれば、対象の IP アドレスに BACnet 対応デバイスが存在することが証明されます。
次に、確認応答を受信した場合、このスクリプトは応答する BACnet デバイス上のいくつかの BACnet プロパティの列挙も試みます。ここでも、デバイスには事前に生成された BACnet メッセージが問い合わせられます。列挙の成功には特別に細工されたリクエストを使用します。BACnet デバイスがそのプロパティをサポートしていない場合、列挙は成功しません。
このスクリプトが照会する BACnet プロパティは次のとおりです。
ベンダー ID - 登録済み BACnet ベンダーに対応する番号。スクリプトは関連するベンダー名も返します。
ベンダー番号 - デバイスに設定されているベンダー名を表す文字列。ベンダー ID は ASHARE に登録された番号であるため、ベンダー ID とは異なる場合があります。
オブジェクト識別子 - デバイスを一意に識別する番号。オブジェクト識別子が分かれば、BACnet クライアントソフトウェアを使用して、値、プログラム、スケジュール、その他の運用情報を変更するコマンドを BACnet デバイスに送信できます。これはすべての BACnet デバイスに必須のプロパティです。
ファームウェアリビジョン - BACnet デバイスのファームウェアのリビジョン番号。
アプリケーションソフトウェアリビジョン - BACnet 通信に使用されているソフトウェアのリビジョン番号。
オブジェクト名 - BACnet デバイスに名前を割り当てるユーザー定義の文字列で、通常は試運転時に技術者が入力します。これはすべての BACnet デバイスに必須のプロパティです。
モデル名 - BACnet デバイスのモデル
説明 - デバイスを説明するためのユーザー定義の文字列で、通常は試運転時に技術者が入力します
場所 - デバイスの物理的な場所を記録するためのユーザー定義の文字列で、通常は試運転時に技術者が入力します
ブロードキャスト配布テーブル (BDT) - BACnet ネットワーク内の BACnet ブロードキャスト管理デバイス (BBMD) のリスト。これにより、BACnet ネットワークの一部であるすべてのサブネットが識別されます。
外部デバイステーブル (FDT) - BACnet デバイスに登録されている外部デバイスのリスト。外部デバイスとは、BACnet ネットワークの一部であるサブネット上になく、BDT にも含まれていないデバイスのことです。外部デバイスは多くの場合、外部ネットワーク上に存在し、攻撃者の IP アドレスである可能性があります。
BDT と FDT は大きなリストになる可能性があり、大規模な Nmap スキャンでは望ましくない場合があります。基本スクリプトは BDT と FDT を取得しません。BDT と FDT を取得するには、--script-args full=yes を指定してコマンドを実行してください。Usage セクションを参照してください。
![BACnet-discover-enumerate BDT および FDT 付きサンプル出力] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/08/screenshot_bacnet-1.png)
このスクリプトは、BACnet 仕様に 2004 年に追加された機能を使用して、外部デバイスとして BACnet ネットワークに参加することなく、単一のリクエストでデバイスのオブジェクト識別子を取得します。(詳細については、ANSI/ASHRAE Standard 135-2001 の ANSI/ASHRAE Addendum a を参照してください)
####歴史と背景
BACnet に関する Wikipedia の記事 (http://en.wikipedia.org/wiki/BACnet) より:
BACnet は、ビル自動化および制御ネットワークのための通信プロトコルです。これは ASHRAE、ANSI、ISO 標準[1] プロトコルです。BACnet トラフィックのデフォルトポートは UDP/47808 です。
BACnet は、暖房、換気、空調制御、照明制御、アクセス制御、火災検知システムおよびその関連機器などのアプリケーション向けのビル自動化および制御システムで使用されます。BACnet プロトコルは、コンピュータ化されたビル自動化デバイスが、実行する特定のビルサービスに関係なく情報を交換するためのメカニズムを提供します。
####インストール
このスクリプトを実行するには nmap が必要です。Nmap をお持ちでない場合は、Nmap の手順に従って Nmap をダウンロードしてインストールしてください。 http://nmap.org/download.html
#####Windows
bacnet-discover.nse をダウンロードしたら、NSE スクリプトディレクトリに移動する必要があります。これは管理者として行う必要があります。[スタート] -> [プログラム] -> [アクセサリ] に移動し、[コマンドプロンプト] を右クリックして、[管理者として実行] を選択します。
move BACnet-discover-enumerate.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
BACnet-discover-enumerate.nse をダウンロードしたら、NSE スクリプトディレクトリに移動する必要があります。これは sudo/root として行う必要があります。
sudo mv BACnet-discover-enumerate.nse /usr/share/nmap/scripts
####使用方法
ターミナルウィンドウまたはコマンドプロンプトで、host を BACnet をスキャンしたいターゲットに置き換えて、以下のコマンドのいずれかを使用します。出力に BDT と FDT を含めたい場合は、--script-args full=yes を使用します。
Windows: nmap -sU -p 47808 --script BACnet-discover-enumerate <host>
Windows: nmap -sU -p 47808 --script BACnet-discover-enumerate --script-args full=yes <host>
Linux: sudo nmap -sU -p 47808 --script BACnet-discover-enumerate <host>
Linux: sudo nmap -sU -p 47808 --script BACnet-discover-enumerate --script-args full=yes <host>
スキャン中に DNS ルックアップを実行せずに結果を高速化するには -n オプションを使用し、デバイスの起動確認のための ping を無効にするには -Pn オプションを使用して完全な結果を得ることもできます。
nmap -sU -Pn -p 47808 -n --script BACnet-discover-enumerate <host>
####注記
このスクリプトの公式バージョンは、https://github.com/digitalbond/Redpoint/blob/master/BACnet-discover-enumerate.nse で保守されています。
このスクリプトは、標準の BACnet 送信元および宛先ポートである UDP 47808 を使用します。
新しい (2004 年 2 月 25 日以降の) BACnet デバイスは、仕様により、独自の有効なインスタンス番号を持つ「キャッチオール」オブジェクト識別子を使用する特定のリクエストに応答する必要があります (ANSI/ASHRAE Standard 135-2001 の ANSI/ASHRAE Addendum a を参照)。古いバージョンの BACnet デバイスはこのキャッチオールに応答しない場合があり、代わりに BACnet エラーパケットを返します。
このスクリプトは外部デバイスとして BACnet ネットワークに参加しようとはしません。IP アドレス指定可能なデバイスに BACnet リクエストを直接送信するだけです。
== ###codesys-v2-discover.nse ![codesys-v2-discover サンプル出力] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2016/03/codesys-v2-discover-win.png)
####著者
Stephen Hilt, Reid Wightman
####目的と説明
codesys-v2-discover.nse スクリプトは、3S-Software GmbH 製のバージョン 2 ラダーロジックランタイムを実行している PLC を識別します。これらのコントローラは、新しいラダーロジックのインストールや実行中のラダーロジックのデバッグのための独自のバイナリプロトコルを使用します。このプロトコルは認証を必要とする場合があります。実際には、この動作をサポートするデバイスはほとんどありません。このスクリプトは認証をテストしません。
このスクリプトは、識別用の簡単なリクエストをデバイスに送信します。応答メッセージには、PLC 上で実行されている CoDeSys のオペレーティングシステムと特定のポイントリリースが含まれる場合があります。
####歴史と背景
Digital Bond は、2012 年 4 月に CoDeSys ランタイムシステムが設計上安全ではないという詳細を公開しました。このプロトコルは通常、制御ポートとして TCP/1200 または TCP/2455 を使用します。制御プロトコルには、コントローラからファイルをアップロードおよびダウンロードする機能が含まれています。また、このプロトコルは、追加機能を提供するコマンドシェルを提供する場合もあります。シェル機能には通常、現在実行中のラダーロジックを開始および停止する機能と、コントローラからデバッグ情報を取得する機能が含まれます。
最初のアドバイザリはランタイムのバージョン 2 にのみ適用されました。Digital Bond はまた、HD Moore が彼のインターネットスキャンプロジェクトの一環として元々作成した概念実証用の Nmap スクリプトも公開しました。
このバージョンのプロトコル用に Nessus スクリプトも作成されましたが、Nessus スクリプトにはエラーが含まれており、ビッグエンディアン CPU を搭載したコントローラを適切にチェックしません。
####インストール
このスクリプトを実行するには Nmap が必要です。Nmap をお持ちでない場合は、Nmap の手順に従って Nmap をダウンロードしてインストールしてください。 http://nmap.org/download.html
#####Windows
enip-enumerate.nse をダウンロードしたら、NSE スクリプトディレクトリに移動する必要があります。これは管理者として行う必要があります。[スタート] -> [プログラム] -> [アクセサリ] に移動し、[コマンドプロンプト] を右クリックして、[管理者として実行] を選択します。
move codesys-v2-discover.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
enip-enumerate.nse をダウンロードしたら、NSE スクリプトディレクトリに移動する必要があります。これは sudo/root として行う必要があります。
sudo mv codesys-v2-discover.nse /usr/share/nmap/scripts
####使用方法
ターミナルウィンドウまたはコマンドプロンプトで、 を EtherNet/IP をスキャンしたいターゲットに置き換えて、以下のコマンドのいずれかを使用します。
Windows: nmap -p 1200,2455 --script codesys-v2-discover <host>
Linux: sudo nmap -p 1200,2455 --script codesys-v2-discover <host>
####注記
このスクリプトの公式バージョンは、https://github.com/digitalbond/Redpoint/codesys-v2-discover.nse で保守されています。
このスクリプトは、開いている任意のポートで CoDeSys リクエストの送信を試みます。ほとんどのコントローラは標準ポートの 1200 または 2455 を使用しますが、一部のコントローラは 1201、1217、その他の代替ポートを使用します。
== ###enip-enumerate.nse ![enip-enumerate サンプル出力] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/04/enip.png)
####著者