WifiInfo.getMacAddressが常に02:00:00:00:00:00を返す件(Android 6.0)

A+ a-


Android6.0でBluetoothとWifiのMACアドレスの扱いが変更になりました。
Android 6.0 Changes のAccess to Hardware Identifierに記載があります。


少量なので簡単に翻訳してみました。

ユーザデータ保護のため今回のリリースからAndroidはアプリケーションがWi-FiおよびBluetoothのAPIを使用して端末固有識別子へのアクセスする機能を削除しました。
WifiInfo.getMacAddress()とBluetoothAdapter.getAddress()メソッドは02:00:00:00:00:00を返します。
近距離外部のデバイスのBluetoothやWifiのハードウェア識別子にアクセスするには、ACCESS_FINE_LOCATION や ACCESS_COARSE_LOCATIONの権限を持っている必要があります。
  • WifiManager.getScanResults()
  • BluetoothDevice.ACTION_FOUND
  • BluetoothLeScanner.startScan()

NOTE:Android 6.0(API Level23)の端末がバックグラウンドでWi-FiもしくはBluetoothのスキャンを開始した場合、外部の端末にはその処理がランダムなMACアドレスから発信されたものとして認識されます。

簡単に纏めると
  • BluetoothやWifiのMacアドレスを取得すると常に02:00:00:00:00:00を返す。
  • スキャンする時はパミッションが必要になった。
  • WiFiやBluetoothスキャン時にランダムのMACアドレスを使用するようになった。
となります。

iOSでは去年8月頃にWifiネットワークスキャン時にMACアドレスをランダムに生成するという変更が入りましたので、その追従という形なのでしょうか。。。。

参考

ソフトウェアデザイン2月号にアンドロイドのランタイムパミッションの記事を書きました。

A+ a-

Software Designには、年に1回程度記事を書かせて頂いています。
現在発売中の2016年2月号には、「コミュニティメンバーが伝える Androidで広がるエンジニアの愉しみ」企画の第二回として、「Android6.0の新しいセキュリティモデル」について書かせていただきました。



ランタイムパミッションに関しては、話題が多いため、6ページという制限内では、細かい所や、あまり知られていないマニアックな点等は記載できませんでしたが、ソフトウェアデザインという雑誌は、様々な分野の方が読まれるため、あまりアンドロイドに詳しくない方でもわかるような内容になっております。



特集が、MySQLとPostgresSQLです。この辺りの古くて、でも使われている物は、新しく本になったり、ブログ等で記載する人も少ないので、最新情報をなんとなく耳に入れておくのが難しいです。そういった意味で結構うれしかったりします。

よろしければ手に取ってみてください。

ソフトウェアデザイン 2016年 02 月号



Android6.0 互換モード(4) 端末情報取得はヌルポ系

A+ a-

互換モード:「Android6.0以上の端末で、インストールタイムパーミッションモデルで実行しているアプリケーションが、端末の設定画面から、特定のパーミッションをはく奪された時」の動作確認記事4本目です。

前回までの記事です。互換モードの詳しい説明については(1)を参照してください

互換モードの動作は、仕様把握するよりも、さっさとランタイムパミッション対応に移行したほうがいいと思うので、あまりブログ記事にしても仕方ないと思っているのですが、ガッツリ色々と調べたので備忘も含めて記事にしております。

今回は、READ_PHONE_STATEパミッションが必要なメソッドの互換モードの動作です。READ_PHONE_STATEは、電話番号を取得したりするのに必要なパミッションですが、結論としては互換モードの時にNULLが返ります。戻り値がStringなのであまりないとは思いますが、ヌルポで落ちる可能性がありますので注意が必要です。

その他、READ_PHONE_STATEが所属するPHONEグループのその他パミッションに関しても調査しました。



以下調査結果です。

BoringSSLが採用されたAndroid6.0について

A+ a-

Android6.0でOpenSSLライブラリから、BoringSSLライブラリに移行をしました。
Android6.0 Changesの所にBoringSSLについての記載があるのですが、さらっと書いてあり、まぁそういうことねでさらとスルーしがちですが、具体的にどういう事なの?という事がはっきりしなかったので検証を以前行いました。

そういえばブログに記載してなかったなーと気が付いて、もう、Android6.0ネタも旬はすぎているので、誰か記事にしているだろうと思って、ググってみましたが誰も書かれていなかったので、ちょっと掘り起こして記事にしてみました。
(調査してから、期間をあけてブログに書くのはだめですね、色々と忘れてしまっています)

Android6.0 Changes


Andoid6.0のChangesのBoringSSL部分は短いので全訳すると以下となります。

AndroidはOpenSSLライブラリからBoringSSLライブラリに移行しています。
NDKを使用しているアプリケーションで、libcrypto.soやlibssl.so等NDKの一部ではない暗号化ライブラリをリンクしないでください。
これらのライブラリはパブリックなAPIではなく予告なく変更したり中断したりする可能性があります。
さらに、セキュリティの脆弱性問題に遭遇する可能性があります。
その代わりに、JNI経由でJavaの暗号APIをよびだすようにネイティブコードを変更したり、静的に暗号化ライブラリをリンクするようにしてください。
当初この文章を見たときに、OS付属のライブラリをダイナミックリンクするようなアプリなんてあまりないでしょうと思っていたのですが、その後結構存在する事がある事がわかりました。


CEC様主催の「ソフトウェア品質生産性向上セミナー」でRiskFinderのお話をします

A+ a-


皆様、新年あけましておめでとうございます。
リスクファインダー株式会社の初めてのお正月です。
今年も良い年になりますように。

さて早速ですが、1月25日にCEC様主催のセミナ「ソフトウェア品質生産性向上セミナー 〜IoTのセキュリティ課題を解決する4つのソリューション〜」でRiskFinderのご紹介をさせて頂くことになりました。
開催概要は以下のとおりです。

【日時】  2016年1月25日(月)13:30-16:40(13:00受付開始)
【開催場所】株式会社シーイーシー 恵比寿セミナールーム
      東京都渋谷区恵比寿南1-5-5 JR恵比寿ビル8F(駅徒歩0分)
【参加費】 無料
【詳細・申し込み】http://www.proveq.jp/event/20160125

今回はセミナで話す内容の予告です。