Arduinoのリモートコントロール、ペンテスト

それには2年かかり、「もう1つのスマートスイッチ」について言及すると、著者は卵を投げられます。 しかし、これはこれについてではなく、会話は開発ツールについてです。 私は、電子デバイスを使用したリモート作業用のユーザーアプリケーションの開発を自動化することにした最初の人でも最後の人でもありません。



この分野の他の開発者が提供するソリューションに常に興味がありました。 ほとんどの場合、出会ったのはドキュメントを広める非常に深刻なツールでした。 ただし、本格的な作業ツールに他の何かを期待することは困難です。



この点で、私のサービスは脇に立っています。 また、包括的なソリューションを提供するわけではありませんが、一部のタスクでは、その軽さのために非常に適しています。 ビジュアルインターフェイスと作業プログラムの設計がシンプルなため、デバイスのプロトタイピングを高速化できます。 ニーモニックエディターを使用すると、コントロールをすばやく配置し、作業プログラムをダウンロードして、ニーズに合わせて変更できます。 引き渡された後、すべての作業はわずか5分で完了します。



私たちの時代のユーザーインターフェイスの迅速な作成は、例外的な機能ではなく、現代の標準では必要最小限です。 環境は別の問題です。つまり、インターフェイス自体に加えて、他のすべてが重要であるということです。 これはSCADAの典型的な例ですが、ここではグラフィックスが常に一番上にありますが、開発者は戦闘中に鉄を固定してOPCサーバーに固定しようとするでしょうか? ドライバーを事前に収集しないと、開発者はおそらくSCADAの使用を拒否します。



インターフェイスを作成するためのツールはどこにありますか? デバイスにWebサーバーを埋め込むことができます。これには、多くの既製の視覚要素があります。私はそれを使いたくありません。 したくない? デバイスには、HTMLページをホストするためのメモリがありませんか? つまり、再び、特定の中間サーバー(OPCサーバー)が頼みます。



したがって、クラウドサーバーの新しい方向性が現れ、そこにデータを送信し、HTMLページを通じてデータを視覚化します。 この方向性は非常に新しく、同時に、これらのソリューションはすでに顧客を見つけています。



本格的な自動化の場合、これは通常受け入れられませんが、日常的なことでは、安価なソリューションとして非常に完全です。



クラウドソリューションで出会ったのは、ユーザーデータを保存することでした。 これはおそらく、私自身がまだ実装していない最も緊急のタスクです。 しかし、私のサービスでは、リアルタイム管理の良い仕事をし、データ交換のためのコンパクトなプロトコルを開発し、承認とストリーム暗号化を実装しました。 監視とは対照的に、管理にはセキュリティを強化する必要があります。



実装自体と、サービスの作成時に適用したいくつかの手法について説明します。



このサービスは、ユーザーが自分のアカウントを作成できるサイト自体で構成されています。 アカウントにログインすると、ユーザーには自分のコントロールパネルのリストが表示されます。 各コントロールパネルは、1つまたは複数のデバイスを同時に制御できます。



ユーザーは、友人が彼を信頼しているパネルのリストも持っています。 そして、全員と共有されるパネルの3番目のリストがあります。 サービスのすべてのユーザーは、自分のパネルを友人に信頼したり、他のユーザーと共有したりできます。



パネルを設計するには、エディターに移動する必要があります(エディターの場合、インストールされているSilverlightプラグインが必要です)。

申し訳ありませんが、将来、このエディターをHTML5およびjavascriptテクノロジーに変換します(javascriptのおかげで、私はすでに信じられていて、恋に落ちさえしました)。



ハードウェア用のコントロールパネルを作成する前に、「接続場所」を作成する必要があります。 各「接続ポイント」は一意であり、コントロールパネルと電子デバイス間のリンクとして使用されます。



各エンティティにグローバルな一意の識別子を割り当てるだけで十分だったため、このエンティティは一見不要です。



しかし、私は別の行動をとりました。パラメーターのバインドは名前で行われるため、このプロセスがより視覚的になります(名前は複数の単語で構成されます)。 当然、名前の一意性は1つの「接続の場所」内で尊重される必要があります。



上記のパラメーターは、「signal」という名前の別のエンティティです(「signal」という言葉の意味はあまり多くありません)。 各信号には、独自のタイプ、許可される操作、およびアクセスレベルがあります。 アクセスレベルは、コントロールパネルが共有されている場合にのみ使用されます。たとえば、特定のアクションを保護する必要がある場合、所有者以外の誰も特定のパラメーターを書き込めません。



1つの「接続ポイント」で最大255の信号を接続できます(1つの物理デバイスでは、この量で十分です)。 トランスポートプロトコルがコンパクトであることは私にとって重要でした。 たとえば、1つの4バイトパラメーターと8バイトのタイムスタンプ、およびその名前の転送は、8バイトでパックされます(4 + 8 +名前= 8)。 このようなGSMモデムの算術演算は感謝のみを意味します。



一般に、これらの用語には直接的な不幸があり、誰もが必要なくエンティティを発明しようと努力しています。







おそらく、信号の作成は最も不快な場所ですが、急いで石を投げないでください、これには独自の理由があります。 この情報に基づいて、作業プログラムのソースコードが開発者向けに自動的に作成されます(Arduino、Windows、およびFreeBSDプラットフォーム用)。 このコードは最初は動作可能であり、Arduinoにダウンロードできます。 開発者にとっては、シグナルハンドラーに有用なコードを入力するだけです(たとえば、LEDをオンにするか、新しいボタン状態を送信します)。



既製のソースと、sish関数の形式で簡潔なAPIを受け取った開発者は、交換プロトコルを理解する必要はありません。 そして一般に、このアプローチでは、エラーの確率が何倍も減少します。



すべて、物理デバイスの準備が整い、インターネットに接続されています。 ここで、コントロールパネルを作成します。

コントロールをパネルに配置し、必要な信号にバインドします。







エディタを終了し、「マイパネル」タブで作成したコントロールパネルを開きます。すぐに機器に自動接続されます。



デモンストレーションとして、私はArduinoを共有しました。LEDを点滅させ、2つのJPEGカメラから写真を撮ることができます(世帯がテーブルからブラシをはがさない限り)。



他に何を実装したいですか:

1)カスタムSVGコントロールを埋め込む機能。

2)クラウドサービスからオフラインモードに切り替えるメカニズム(インターネットがない場合)。

3)データロギング(簡単なタスクではありません)。



どの実装でも、落とし穴があります。 CANOpenに基づいた分散システムを開発したプロジェクトがあったため、各実行ユニットで、緊急事態を処理するための個別のロジックをレイアウトしました。 システムには約20のノードがありました。 これは信頼性であり、すべての緊急事態を100%解決し、システム全体の反応は5ミリ秒に収まりました。



All Articles