Androidアプリケーションでの安全でないアクセス許可





今日、Androidはスマートフォン、タブレット、スマートウォッチ、テレビ、さらには自動車で使用される最も人気のあるモバイルプラットフォームの1つです。 プラットフォームのオープン性、使用される最も多様なバージョンと実装により、Androidアプリケーションを作成する際にセキュリティの問題が最前線になります。



ご存じのように、セキュリティは特定の各Androidデバイスのアクセス許可システムによって提供されます。 このシステムは、重要なデータを保護し、情報または通信チャネルへの不正アクセスを防止するように設計されています。



デフォルトでは、OS、個人データ、またはその他のアプリケーションに影響を与える可能性のある操作を実行する権限を持つAndroidアプリケーションはありません。 ただし、このような許可がなければ、どのアプリケーションも役に立たなくなります。



権限はアプリケーション機能の一種のフィルターであり、インストール中にデータへのアクセスを許可するかどうかはユーザーのみに依存します。 問題は、ユーザーが通常、アプリケーションがアクセスしたいものを読んでいないことであり、ためらうことなく許可していることです。 この動作により、個人データの悪用またはカーネルの変更の前提条件が作成されます。



ここでは、Androidの既存のマニフェストシステムと権限を確認します。 マニフェストファイルには、権限、コンテンツプロバイダー、サービス、アクティビティ、ブロードキャストレシーバーなど、アプリケーションパッケージに関する情報が含まれています。



マニフェストファイルの一般的な構造の例。 許可リクエストは色付きで強調表示されます:







最も危険な権限



アクセスできるデータを決定するには、ユーザーはこのアプリケーションの目的を覚えておく必要があります。 たとえば、「なぜゲームに私のアドレス帳へのアクセスまたはSMSを送信する許可が必要なのですか?」明らかに、ゲームにはSMSの送信が含まれていません。 機能のアクセス要求とのこのような矛盾は、そもそも警戒すべきです。



将来確認したい権限



  1. ルート権限をリクエストします。 root権限を持つユーザーは、制限なしでシステムを制御できます。 デフォルトでは、Androidはそのような権利を与えません。経験の浅いユーザーがいたずらをする可能性があるためです。 ルート権限は、「Androidデバイスのルート化」と呼ばれるプロセスによって付与されます。 そして、悪意のあるアプリケーションがそれらを受け取った場合、好きなことをすることができます。



    以下は、アプリケーションが特権ユーザーとしてシェルスクリプトを実行してデバイスを再起動する方法の簡単な例です。



    try { String[] reboot = new String[] { "su", "-c", "reboot" }; //-c will cause the next argument to be treated as a command Process process = Runtime.getRuntime().exec(reboot); process.waitFor(); //wait for the native process to finish executing. } catch (Exception e) { Toast.makeText(getApplicationContext()," Device not rooted.\n Could not reboot...",Toast.LENGTH_SHORT).show(); }
          
          





    su



    コマンドを使用すると、アプリケーションは特権特権で起動し、デバイスがルート化されている場合は再起動します。 そうでない場合、メッセージが表示されます。







    ルートアクセスをリクエストするには:







    マニフェストファイルに次の行を追加する必要があります。



    <uses-permission android:name="android.permission.ACCESS_SUPERUSER">









個人データの読み取りと書き込みの許可を要求します。 ユーザーが個人データを心配しないようにするには、マニフェストでそのようなリクエストを使用しないでください。



<uses-permission android:name="android.permission.READ_CALENDAR"></uses-permission>





<uses-permission android:name="android.permission.WRITE_CALENDAR"></uses-permission>





<uses-permission android:name="android.permission.READ_CALL_LOG"></uses-permission>





<uses-permission android:name="android.permission.WRITE_CALL_LOG"></uses-permission>





<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>





<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>









金融費用に関連する許可。 ユーザーが軽率に許可する許可には、費用がかかるものがあります。 ほとんどの場合、SMS / MMSの送信と音声通話を行っています。 さらに、これは標準の電話アプリケーションを呼び出さずにバックグラウンドで発生する可能性があります。

メッセージ送信のリクエスト:



<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>







通話リクエスト:



<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>







SMSを送信する簡単な例:



  String message = "Hello Android fans! "; String number = "xxxxxxxxxxxx"; //it is preferable to use a complete international number SmsManager.getDefault().sendTextMessage(number, null, message, null, null);
      
      





このコードは、対応するリクエストがマニフェストファイルに含まれている場合にのみ機能することに注意してください。



<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>







位置情報データへのアクセス。 ユーザーが許可すると、アプリケーションは次の情報をいつでも受信できるようになります。





おおよその位置データへのアクセスをリクエストします。



<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>









正確な位置データへのアクセスをリクエスト:



<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>









正確な位置データを取得する方法は次のとおりです。



 public class MainActivity extends Activity implements LocationListener { private LocationManager locationManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this); } @Override public void onLocationChanged(Location location) { String myLocation ="Location changed...\n\nYou are located at: " + "\nLatitude: " + location.getLatitude() + "\nLongitude: " + location.getLongitude(); Toast.makeText(getApplicationContext(), myLocation, Toast.LENGTH_LONG).show(); } @Override public void onProviderDisabled(String provider) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); Toast.makeText(getApplicationContext(), "Gps is turned off... ", Toast.LENGTH_SHORT).show(); } @Override public void onProviderEnabled(String provider) { Toast.makeText(getApplicationContext(), "Gps is turned on... ", Toast.LENGTH_SHORT).show(); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }
      
      





このコードのパフォーマンスは、マニフェストファイル内の対応するリクエストの可用性に依存することを忘れないでください。



Java MainActivity



クラスはLocationListener



を実装して、デバイスからデータを取得します。 現在の場所は、 onCreate()



メソッドでrequestLocationUpdates()



を呼び出すことでrequestLocationUpdates()



されます。 場所が変更されると、 onLocationChanged()



が呼び出されて新しいデータが取得されます。 GPSデータが利用できない場合、onProviderDisabled()メソッドが呼び出され、位置情報をアプリケーションに渡します。







オーディオとビデオへのアクセス。 ユーザーがそのような許可を与えた場合、ユーザーは彼の話を聞いたり、スマートフォンのカメラを監視に使用したりする危険があります。 マニフェストファイル内のアクセスリクエスト:



<uses-permission android:name="android.permission.CAMERA"></uses-permission>





<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"></uses-permission>





<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"></uses-permission>





<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>







パッケージをインストールします。 この許可を与えると、アプリケーションはユーザーの知識がなくても追加のパッケージをインストールできます。



<permission android:name="android.permission.INSTALL_PACKAGES">







バックグラウンドプロセスを停止します。 この許可により、アプリケーションはkillBackgroundProcesses(String)を呼び出すことができ、その助けを借りて、バックグラウンドで実行されているプロセスを停止できます。



<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"></uses-permission>









Androidマシュマロ



2015年5月に発表されたAndroidの6番目のバージョンは、新しい許可メカニズムを実装しています。 これは、アプリケーションのインストール中ではなく、最初に何らかの機能を使用する際に要求されます。 これにより、開発者とユーザーの両方が楽になることを願っています。



All Articles