web-dev-qa-db-ja.com

許可されたデバイスのみにWebアプリケーションへのアクセスを制限しないようにするにはどうすればよいですか?

MVC Webアプリを開発しました。現在、オフィスエリアでこのアプリを使用しているクライアント。クライアントは、オフィスのPC /タブレット以外のデバイスでこのアプリを使用しないように要求しました。

さて問題は、それがWebアプリなので、だれもこのアプリをオフィスの外から、またはオフィスのPC /タブレット以外のデバイスで使用できないように制限を設定するにはどうすればよいですか?

11
bnil

アプリケーションの使用を特定のオフィスの場所と特定のデバイスに制限するためにできることはいくつかありますが、他の回答が指摘するように、それらのどれも絶対的な保護ではありません

  • アプリケーションの前にファイアウォールを設定して、アプリケーションへのアクセスを許可するIPアドレスをクライアントの外部IPアドレス範囲に制限します。ほとんどの企業では、インターネットに接続するルーターに静的IPアドレスが設定されているため、これらのIPアドレスからのみアクセスできるようにアプリケーションを設定すると、権限のない人がオフィスにいない限り、アクセスできないようになります。 TBHこれは、お客様の要件に最適なアプローチのようです
  • 承認されたデバイスでクライアント証明書を使用することもできます。 @adnanが指摘しているように、それらを別のマシンに移動することは可能かもしれませんが、攻撃者がそのシステムの1つに無防備なアクセス権を持っているスタッフメンバーである必要があります
  • おそらく探偵コントロールとして、これをブラウザーのフィンガープリントと組み合わせることができます(例: panopticlick )。デバイスとそのフィンガープリントのリストを作成し、フィンガープリントと一致しないデバイスでクライアント証明書が使用されている場合は、それをブロックできます。

私が言うように、これらは絶対的なものではありませんが、セキュリティには何もありません。顧客が探しているのは、サイトの外部からのアクセスを阻止することだけであれば、ソースIPアドレスフィルターアプローチを使用します。

15
Rory McCune

インターネットに接続されていないイントラネット上のサーバーでWebアプリをホストするだけです。

適切なルーティングとファイアウォール対策により、ローカルネットワークに接続していない人がWebアプリにアクセスできないようにする必要があります。

ネットワーク外のユーザーがWebアプリにアクセスする必要がある場合は、ローカルネットワークへのVPN接続をセットアップしてもらいます。

6
user10211

安全に行く必要がありますか?

これはおそらく、あなたができる限り「安全」です。技術的に安全ではありません。 Rookが言ったように、ここにはまだ悪用できるものがあります。これらは、システムを強化するために実行できるいくつかの手順です。

  1. オフィスLAN上の物理サーバーにWebサーバーをセットアップします。 [〜#〜] nat [〜#〜] を使用して外部トラフィックをWebサーバーに接続しないでください。サーバーが他のサイトで使用されている場合、それらは別のサーバーまたはVM上にある必要があります。

  2. SSL [〜#〜] vpn [〜#〜] ファイアウォールをセットアップします(Ciscoが思い浮かびます)。 CiscoにはiPad用のアプリ があり、ルータとの「安全な」トンネルのセットアップに使用できます。

  3. VPNを介して(リモートで)認証すると、特定の範囲内のローカルIPアドレスを割り当てます(これは、サーバーに接続しているクライアントの数によって異なります)。ルーターに応じて、ルールを割り当てることができます。 VPNの反対側のネットワーク(ユーザーのホームネットワークとしましょう)を制御できないため、これは潜在的な攻撃ベクトルです。

  4. ローカルトラフィックとVPNトラフィックは、追跡のために異なるIP範囲を持つ必要があります。ローカルトラフィックには、すべてログに記録される DHCPサーバー によってMACアドレス(スプーフィング可能)によって割り当てられた静的IPアドレスが必要です。これは、衝突やスプーフィングされたIPアドレスとMACアドレスをチェックするのに役立ちます。

  5. Webサーバーのファイアウォールで、Webサーバーに接続できるアドレスのサブネットを設定します。これには、ルーターでユーザーに割り当てられたVPN範囲と、ホワイトリストに登録された内部静的IPアドレスが含まれます。

  6. 次に、Webサーバー自体で、ホワイトリストに登録されたIPアドレス( IIS 7 および Apache )を介してWebサイトへのアクセスを制限できます。 DHCPサーバーとローカルファイアウォール(これは、* Nixボックスで誰かがiptablesを変更するためのエクスプロイトを見つけた場合は冗長です)。

Kasperskyのような企業のアフターマーケットソフトウェアファイアウォールを使用している場合(WindowsまたはLinuxボックス上)、そのようにトラフィックをブロックすることもできます。

このシステムに変更を加えるには:1.内部DHCPサーバーでIPアドレスリストを更新する必要があります2. Webサーバーのファイアウォールで3. Webサーバー設定で

これにより、実際のWebサーバーへのアクセスが「ロックダウン」されます...

次に、Webサーバーで [〜#〜] ssl [〜#〜] を実行し、ユーザーに特定のユーザー名とパスワードを要求する必要があります。パスワードは16文字以上にする必要があります。

ユーザーがウェブサーバーで認証されると、 [〜#〜] sms [〜#〜] または使い捨てを含む電子メールを介してメッセージを送信しますまたは、サーバー上で一定の時間ユーザーをホワイトリストに登録できるワンタイムパスワード。 (誰かがユーザーの携帯電話にアクセスできる場合、これは危険にさらされる可能性があります)。ユーザーがブラウザウィンドウを閉じた場合、ユーザーは再認証される必要があります(これによりセッションが終了します)。 keep-alive スクリプトは、特定の時間内にクライアントからの送信を予期するJavascriptなどの言語で実行するように設定できます。クライアントが応答しない場合は、セッションを終了します。 (これにより、アクセスのためにJavaScriptを無効にすることができなくなります。また、古いセッションの期限が切れる前にブラウザーを閉じて新しいセッションを開こうとするユーザーにも役立ちます。一度に1つの場所からのみログインできるようにする必要があります。

ユーザーがデバイスにパスワードを保存できないようにする必要があります 。 (これは、Firefoxなどのブラウザーのプラグインでバイパスできます。)

より厳密にするために、VNCやRDP(電話では理想的ではない)のようなものを介してタブレットに仮想端末へのログインを要求することもできます。次に、仮想マシンでWebクライアントを使用する必要があります。このVMは、次回の実行または接続時にクリーンになるように復元されます。

システムを知っている人はだれでもそれを利用できます。システムの外部にいる人はだれでも入るために多くの時間を費やす必要があり、システムが存在することを知る必要があります。

すべての側面を文書化する必要があります。ドキュメンテーションがあれば、システムの弱点を見つけようとする可能性があります。

再びこれは人々に帰着します。時間の経過とともに情報にアクセスできる人なら誰でも、すべての情報のコピー(携帯電話でのスクリーンショット、オフィス文書のテキスト付きPDFなど)を保存できます。SSLもクラック可能であるため、暗号化された「安全な」接続でさえ、適切に読み取ることができます人。

5
AbsoluteƵERØ

あなたが達成しようとしていることは不可能です。 HTTPは、ハードウェア固有の識別子を提供するように設計されていません。唯一の「識別子」は、まったく識別しないUser-Agentですandなりすましの可能性があるため、ブラウザもその情報にアクセスします。

クライアント証明書があっても、ブラウザから別のデバイスにエクスポートできます。

技術的に不可能であることをクライアントに伝えます。

4
Adi

コードの所有者は誰ですか?他の誰かがアプリを使用する可能性はどのくらいありますか?他の誰かがアプリを使用した場合、結果はどのくらい深刻になりますか?どのようなデバイスですか?アクセスは静的IPアドレスに制限されていますか?これらは、設計に関する推奨事項を尋ねる前に投稿で回答しておくべき質問のほんの一部です。

VPNのIPアドレスとクライアント証明書についてはすでに説明しましたが、一部のデバイスにクライアント証明書をインストールするのは難しい場合があります。静的IPは、適切に管理されたLAN内でのみ機能します。 VPNは、サーバー、ネットワーク、およびアプリケーション構成間の緊密な統合を必要とします。

シンプルなトークンを永続的なCookieに保存する(適切な権限とデバイス登録に関するプロセスなしで)ことはシンプルなソリューションですが、リバースエンジニアリング/スプーフィングに対する耐性はあまりありません。

1
symcbean

ソリューション番号1 IISを使用している場合、IISには組み込みのサービスがあり、IPアドレスに基づいてアプリケーションのアクセスを制限できます。

ソリューション番号2:ターミナルロックの実装を試みるこれにはプログラミングが必要です。

ハードウェア固有の識別子であるターミナルロックソリューションを実装できます。以下の手順に従ってください。

注:デバイスごとに静的IPを設定する必要があります。

  • A:Active-xコントロールを使用してクライアント側でMACAddress情報をキャプチャします。私はInternet Explorerにのみ実装しています。セキュリティを強化するために、MACAddress、IPAddress、およびコンピューター名をキャプチャできます。署名されていないアクティブxおよび署名されたアクティブxは、ブラウザーで有効にする必要があることに注意してください。
  • B:アプリケーションレベルでは、ステップAから情報を読み取り、データベースに渡された情報を保存/検証するために、同じことを実装する必要があります。
  • C:データベースレベルでは、以下の手順に従ってください。

  • ステップ1:アプリケーションが初めてアクセスされるとき、システムはIPアドレスを取得してテーブルに保存する必要があります。 dbo.Terminalsという名前のテーブルを作成し、アプリケーションを通じてIPアドレスを読み取って保存し、各IPに一意のIDを自動的に生成してみてください。このテーブルには、MACADDRESSという名前のいくつかのフィールドと、この一意のコードに対してマッピングするユーザーの追加フィールドが含まれている必要があります。 user1、user2、user3など。

  • ステップ2:次に、dbo.userテーブルを変更し、スイッチとして機能するStatic Terminal-applicableという名前のフィールドを追加します(オン/オフ)。

  • ステップ3:ユーザーログイン:コードを記述して、ステップBがオンになっているかどうかを確認します。はいの場合、端末にステップAが割り当てられているかどうかを確認します。次に、この端末に登録済みユーザーリストがあるかどうかを確認します(ステップA user1、user2などを参照)最後に、macaddressがキャプチャされ、dbo.terminalsで使用できることを確認します。キャプチャされていない場合は、取得してデータベースに保存します。上記のソリューションは、銀行ドメインおよび金融サービスシステムへのデバイスベースのアクセスである多くの銀行でテストされています。