私のWindows8(Metro)アプリケーションは、さまざまなWebサービスを使用してデータにアクセスしてマッシュアップします。これらの各サービスにアクセスするには、キー(いくつかの複数のキー)が必要です。結果として、これらのキーは価値があり、私にお金がかかります(または使用法に応じて可能です)。これらのキーをアプリケーションに簡単に含めることができます。しかし、どうすれば私の鍵を詮索好きな目や虐待から守ることができますか?
3 に答える
サーバーからセキュリティで保護されたWebサービスを呼び出し、結果をクライアントに返すようにアプリケーションをリファクタリングすることを検討してください。これにより、クライアント側にクレデンシャルを配置する必要がなくなります。
心配が帯域幅になる場合は、キー自体をバイナリにパッケージ化せずに、ダウンロードして暗号化することができます。http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspxを参照してください。
どのように行っても、サービスがクライアントから呼び出されている場合、ユーザーは引き続きサービスにアクセスできます。
編集:質問:公開されたサービスを保護するにはどうすればよいですか回答:できませんが、難しくすることはできます。
まず、クライアントからサービスへの通信チャネルを保護するクライアント証明書をインストールします。
次に、サーバーによって生成されたナンスを含めます。これにより、クライアントは、サーバーの要求に応じて、デプロイされたコード内の既知のdllまたはexeからランダムなオフセットでバイト文字列を読み取る必要があります。デプロイされたオブジェクトが法的な手段によって再配布から保護されている場合、保護に使用するイメージをアプリケーションと一緒に再配布する必要があるため、誰かがサードパーティのクライアントを作成した場合は月に訴えることができます。
Webサービスにユーザーごとのスロットルがあることを確認してください。各ユーザーを1時間あたり100クリックに制限します。または、偽物と本物の境界線を問わないようにします。
レポートと監査。高価なWebサービスへのヒットを記録し、アプリケーションの使用法と一致する方法で生成されたことを定期的に検証します。
ランダム化します。ソフトウェアをリバースエンジニアリングしようとしている人の生活を困難にしたい場合は、少なくとも毎日、サービスにアクセスするために使用されるURIをランダム化するようにしてください。日付をシードとして使用し、その日の一意のURIを返す関数を作成します。
難読化-この時点で、アプリケーションを攻撃することに真剣に取り組んでいる人が必要です。彼の一日をさらに台無しにするには、コンパイルされたバイナリを適切な難読化ツールに通して、次のことを確認します。
繰り返しになりますが、これらのいずれも、サービスがサービスの外部で使用できないことを保証するものではありませんが、かなり困難になります。ソフトウェアだけがサービスにアクセスできるようにする必要がある場合は、暗号トークンを使用してアプリケーションの秘密鍵を配布します。そうすれば、彼らがサービスを利用できる唯一の方法は、誰かがデバイスを自分のコンピューターに物理的に接続している場合です。
完全に保護することはできません。配置できるすべてのものに回避策があるため、完全かつ完全に危険にさらされているものとして扱う必要があります。
WinFormsアプリでも同じです。
私が似たようなものを求めていたときからの関連:WinFormsアプリケーションの一般的な脆弱性
短いバージョン-これらのキーを他の場所に保存している場合でも、エンドユーザーがコードを逆コンパイルして、コードがこれらのキーにどのようにアクセスしているかを確認できれば、それらを取得できます。
あなたができる最善のことは、防御を可能な限り困難にするために、可能な限り多くの(そして合理的な)防御を追加することです。私たちのアプローチはこの回答に記載されています。あなたはそれを改善することができるかもしれません。もしそうなら、私たちは私たちを改善したいので、共有してください。
プラットフォームに依存しない方法は、暗号化されたキーを保存することかもしれません。または、アプリの存続期間中にキーがほとんどまたはまったく変更されない場合は、キーをハードコーディングします。