web-dev-qa-db-ja.com

ローカルソケットを保護する方法は?

Androidオペレーティングシステムをコアサービスとして実行するcで記述されたサービスを作成しました。このサービスと通信するいくつかのAndroidアプリがあります。ソケット接続(Java-> C)。

私の問題は、サービスが使用しているポートを知っていれば誰でも私のサービスへの接続を開くことができることです。アプリケーションには認証情報がなく、Androidサンドボックスで実行されます。

不正なアプリがこのサービスにアクセスしないようにするために、どのような方法を使用できますか?ローカルホストのsslに関連がないように見えますか?

両方のアプリがコンパイルされているため、秘密鍵を共有できますが、Androidアプリは逆コンパイルできます。

通常、同じマシン上のクライアント/サーバー接続をどのように保護できますか?

7
Lunar

これは XY問題 のインスタンスのように感じます。

短い答えは:

一般に、これはアプリから情報を提供し、その情報へのアクセスを制御する方法です。

長い答え:

ソケットを使用してサービスから他のアプリケーションに情報を通信していますが、これは実際には「Android-y」の方法ではありません。 Androidには、 インテント と呼ばれるものを使用したプロセス間通信のシステムがあります。ただし、セキュリティ固有の質問から少し離れているので、 Android docsで、StackOverflowでお気軽に質問してください!

結論としては、このインテントとパーミッションのシステムは、アプリのアクセスを制限するためのAndroidのツールです。モバイル開発はシングルユーザーのユースケースを対象としているため、これは従来のデスクトップモデル(アプリケーションではなくユーザーに基づく)とは異なります。

5
mfrankli

本を読んだときの埋め込みAndroid Android内部でローカルソケットがハードウェアサービスを提供するために内部的に使用されているように聞こえるので、このアーキテクチャは完全にAndroidの通常。ローカルソケットは、Linux上のそれらを含むディレクトリの許可を取得します。

Linuxの実装では、ファイルシステムに表示されるソケットは、それらが存在するディレクトリの権限を尊重します。それらの所有者、グループ、および権限は変更できます。ソケットが作成されたディレクトリに対する書き込みおよび検索(実行)権限がプロセスにない場合、新しいソケットの作成は失敗します。ソケットオブジェクトに接続するには、読み取り/書き込み権限が必要です。

この動作は、UNIXドメインソケットの権限を無視する多くのBSD派生システムとは異なります。ポータブルプログラムは、セキュリティのためにこの機能に依存すべきではありません。

http://man7.org/linux/man-pages/man7/unix.7.html を参照してください

0
satur9nine