Android スマホのSSLパケットを解析する方法

 burp proxy と呼ばれる無料のパケット解析ソフトがあります。proxyとして動作するのでandroidiphone のパケットを解析することができます。android からwifi接続でproxyアクセスするように設定すると、burpproxyが通信を仲介してパケットのログを取得してくれます。接続を仲介している為、SSLパケットを復号することもできます。対応しているプロトコルは、http とwebsocketです。それ以外のパケットの解析はできません。類似のソフトにFiddlerがあります。こちらでも同様のことが可能です。また、burp proxy は、javaで動作しており、インストーラjavaのパッケージが含まれています。javaの環境を別途用意する必要はありません。

f:id:russianble:20200302161528j:plain

burp proxy を利用してandroidのパケットを解析する場合、上図のように同一の無線LAN親機を利用するPCが必要になります。親機からPC,Android双方にDHCPでIPが割り振られて入れば、AndroidからBurpProxyに接続できます。この方法を用いるとMITM proxyのような環境を容易に構築できます。導入方法は、下記手順となります。

 mitm リバースproxy reverse

導入方法(PC側)

①下記サイトから、Burp Proxy CommunityEditionをダウンロードします。Community版は、脆弱性の調査機能や、パケット改ざん機能に制限がありますが、パケット解析は可能です。下図のようにCommunityEditionのWindows64bit版を選択し、ダウンロードをクリックします。ここでは、Windows 64bitの環境として説明を進めていきます。

https://portswigger.net/burp/releases/community/latest 

 

f:id:russianble:20200302123647j:plain

 

インストーラーを起動し、Burp proxyをPCにインストールします。ウィザードに従ってインストールしてください。注意点は特にありません。

インストール後、スタートメニューに下記のプログラムが登録されます。

f:id:russianble:20200302123726j:plain

③スタートメニューから上記のburp proxy を起動します。

下記画面が表示されます。今回は、一時的なプロジェクトを選択してNextのボタンを押します。

f:id:russianble:20200302123746j:plain

④設定はデフォルトを選択し、StartBurpを押します。デフォルト設定で起動した場合、127.0.0.1 ポート番号8080としてProxyサーバーが開始されます。この後の手順で一部設定を変更します。

f:id:russianble:20200302123640j:plain

 

⑤BurpProxyを起動すると、下記メイン画面が表示されます。proxyが稼働した状態で左上のCapturing スイッチがオンであれば、パケットがキャプチャされます。まず、デフォルトの設定を一部変更します。メニュー下にあるタブからProxyタブをクリックします。

f:id:russianble:20200302123701j:plain

 

⑥Proxyタブをクリックすると、下記画面が表示されます。デフォルト設定では、Intercept On となっているので、クリックし、Offにします。Intercept On になっていると、proxyが仲介するデータを一旦保持して、通信が止まった状態になります。パケットを改変したりしたい場合、この機能を使います。今回は、必要ない為、Offにしておきます。

f:id:russianble:20200302123656j:plain

 

⑦proxyタブのサブのタブでoptionタブを選択します。

Editボタンを押します。

f:id:russianble:20200302123713j:plain

 

Proxyサーバーのアドレスを設定するダイアログが表示されます。

今回は、Androidからアクセスできるように、DHCPから振られたアドレスに変更します。spcific address にチェックを付け、コンボボックスの▼ボタンを押すとアドレスの候補が出ます。DHCPからPCに振られたアドレスがあれば、それを選択します。その後、OKボタンを押します。

f:id:russianble:20200302123722j:plain

 

⑨変更したIPアドレスでProxyが再起動します。Firewallのブロック画面が出るので許可してください。

f:id:russianble:20200302123652j:plain

 

SSLパケットの解析の必要がないなら、設定はこれで完了です。SSLパケットも解析する場合、次の手順でパケット解析用のSSL鍵を用意します。

先ほどのProxyタブのoptionサブタブを表示します。

今度は、import/export CA Certification のボタンを押します。

f:id:russianble:20200302123717j:plain

 

⑪表示されたダイアログでCertificate in DER format をチェックし、Nextを押します。

f:id:russianble:20200302123738j:plain

⑫証明書の出力ファイルパスを入力します。例では、デスクトップにcecert.cer という証明書を出力します。このファイルは、後でAndroid側で使用されます。

PC側の設定は、これで終わりです。

f:id:russianble:20200302123742j:plain

 

proxyサーバーで通信が発生した場合、下記のProxyタブのサブタブである、HTTP historyタブと TargetタブのSitemapに通信ログが表示されます。

f:id:russianble:20200302123708j:plain

f:id:russianble:20200302123733j:plain

 

 導入方法(Android側)

Androidのproxy設定を変更します。例では、Android6.0を利用してますが、ご使用の環境に読み替えて設定してください。

まず設定アプリを立ち上げ、WiFiを選択します。

f:id:russianble:20200302123904p:plain

 

②接続しているAPポイントを長押しし、"ネットワークを変更"をタップします。

f:id:russianble:20200302123910p:plain

 

③プロキシ設定を手動に変更します。

f:id:russianble:20200302123808p:plain

 

④設定をスライドさせると、IPアドレスとポート番号の設定箇所がります。今回の環境では、192.168.11.7 と8080のポート番号を設定します。ご使用の環境に合わせて入力してください。プロキシポートは、薄い色で8080と表示されていますが、8080を入力し直さないと保存できないので注意してください。

f:id:russianble:20200302123816p:plain

 

SSLパケットを解析する場合、証明書のインストールを行います。

(PC側の設定で作成した証明書ファイルをSDカードもしくは、USBケーブル等を利用して端末にコピーしておいてください。ここでは、SDカードのdownloadフォルダに格納しました。)

設定アプリのセキュリティをタップします。

f:id:russianble:20200302123829p:plain

 

⑥認証情報ストレージの"SDカードからインストール"をタップします。

f:id:russianble:20200302123837p:plain

 

⑦ここでは、SDカードのDownloadフォルダに格納してるcecert.cerをタップします。

f:id:russianble:20200302123844p:plain

 

⑧証明書名を指定する画面が出ます。任意の名前を入力してください。ここれは、burpと入力しておきます。

f:id:russianble:20200302123851p:plain

 

⑨証明書の登録を確認します。先程の認証情報ストレージの画面から"信頼できる認証情報"をタップします。表示された画面で"ユーザー"をタップします。PortSwigger と表示されていれば、証明書のインストールが完了しています。(証明書を削除したい場合、この画面で証明書をタップし、表示されたポップアップの最下部にある削除ボタン押して下さい。)

設定は、以上で完了です。あとは、chrome 等でwebページを閲覧すれば、BurpProxy の画面にパケット解析ログが表示されます。

f:id:russianble:20200302123858p:plain
f:id:russianble:20200302123822p:plain

 より詳しい情報は、下記公式サイトを参考にしてください。

getting started with burp suite

https://portswigger.net/support/getting-started-with-burp-suite

documentation

https://portswigger.net/burp/documentation

スリープ解除されないようにスリープする

スリープ解除タイマが有効な場合、スリープを勝手に解除されることがあります。常にスリープを解除させたくない場合であれば、下記設定で、スリープ解除タイマを無効にすれば解決できます。

電源オプション⇒詳細な電源設定の変更⇒スリープのスリープ解除タイマの許可

もし、一時的にだけ、スリープ解除させたくない場合、下記のスクリプトを使うと便利です。SetSuspendState関数 を使っているのですが、引数を変えるとスリープ解除タイマを無効にしてスリープさせることができます。利用するには、下記のsleep.bat と sleep.ps1 を使います。2っのファイルをCドライブ直下のtestフォルダに移動し、batファイルをダブルクリックするとスリープします。

Universal Orchestrator

sleep.bat の中身

PowerShell.exe -ExecutionPolicy RemoteSigned "C:\test\sleep.ps1"

sleep.ps1の中身

$signature = @"
[DllImport("powrprof.dll")]
public static extern bool SetSuspendState(bool Hibernate,bool ForceCritical,bool DisableWakeEvent);
"@
$func = Add-Type -memberDefinition $signature -namespace "Win32Functions" -name "SetSuspendStateFunction" -passThru
$func::SetSuspendState($false,$false,$true)

 

sleep.ps1 は、下記サイトを参考にさせていただきました。

winscript.jp

 

タスクスケジューラでスリープ解除タイマが動作しない場合の改善方法

タスクスケジューラのタスクを登録する際、条件タブで"タスクを実行するためにスリープを解除する"にチェックした場合、コンピュータがスリープ状態であっても復帰してタスクを実行できます。ですが、Windows10では、うまく動作しなくなったようです。

そこで解決方法がないか探した結果、下記の条件をクリアすれば、スリープ解除できることが分かりました。 スリープ解除タイマ 動作しない スリープ解除しない

条件

 トリガー時の操作として"プログラムの開始"を選択し、その際実行されるプログラムは、即座に終了するのもを指定する。

下記設定のようにプログラムを指定すると、スリープ解除できました。わずかな時間でプログラムを終了しないとスリープ解除が始まらないのかもしれません。下記、英語のサイトの記述を参考にしました。

superuser.com

f:id:russianble:20200116213038j:plain

 設定の補足

条件タブは、スリープ解除できるようにチェックをつける必要があります。

f:id:russianble:20200116214010j:plain

一般タブは、下記のようにしています。"ユーザーがログオンしているかどうかにかかわらず実行する"を選ばなくても解除されました。こちらを選ぶ場合は、"バッチジョブとしてログオン"の権利が必要になります。システム管理者であれば、この権限を持っています。また、この自動ログオンでタスクが起動される場合、バックグラウンドジョブとして動作するため、UI画面が表示することはできません。session0で起動されます。この場合も、上記のようにすぐ終了するプログラムを指定しなければ、スリープ解除できません。一旦スリープ解除したあとに別のタスクを動作させれば、起動時間の長いタスクも処理できると思います。

f:id:russianble:20200116214006j:plain

トリガー条件は、テスト環境では、下記のようにしています。

f:id:russianble:20200116213041j:plain

 その他の注意点として、コントロールパネルで下記を有効にする設定も必要です。

電源オプション⇒詳細な電源設定の変更⇒スリープのスリープ解除タイマの許可

詰め替えそのまま PS-2 説明書

三輝 詰め替えそのままのパッケージにセット手順とポンプのクリーニング方法が書かれています。捨ててしまった方の為にスキャンを置いておきます。sanki 使い方 液漏れ 目詰まり ポンプ

大きい画像

f:id:russianble:20191229145302j:plain

 

大きい画像

f:id:russianble:20191229145311j:plain



 

広告ブロック アドオン uBlock Origin の使い方

uBlock Originとは

uBlock Origin は、ブラウザの機能を拡張するアドオンで広告ブロック機能を強化することができます。開発は、オープンソースで行われており透明性も高く、評価も良いです。スクリプトをブロックするのでなく、接続自体をブロックできるので柔軟に動作をカスタマイズできます。現時点で、SafariGoogle ChromeChromiumMicrosoft EdgeMozilla FirefoxOperaVivaldi とほぼ全てのブラウザに対応しています。スマホ用のアドオンも存在します。ABP Ad Blocker

おすすめする理由

uBlock Originをお勧めする一番の理由は、不要なJavaScriptをブロックするだけでなく、サイトへの接続自体をブロックできる為です。NoScriptを使った場合、Script単位でブロックを指定しますが、uBlockの場合、接続先URL単位でブロックします。この場合、広告サイト自体にまったくアクセスしないでトラッキングを防げます。これは推測ですが、サードパーティークッキーをオフにしてもfacebookのいいねボタンを表示すると相手にIPでばれてしまうのではないかと思います。訪問中のサイトからfacebook等へのアクセスを完全にブロックできれば、閲覧履歴を収集されることもないと思います。uBlockでは、訪問先のサイトごとにブロック設定をカスタマイズできます。この設定は、ローカルのブロックとして処理されます。全てのサイトに対して有効なブロックはグローバルのブロックと呼んでます。facebookをグローバルでブロックし、facebookのサイトを訪問している場合だけ、ローカルでブロックを許可するようにすると、facebook以外のサイトを表示している時だけ、facebookのアクセスをブロックできます。

www.nikkei.com

導入方法

FireFoxの場合、アドオン検索でuBlock Originを検索して、uBlock Originのページに移動し、[FireFoxへ追加] を押すだけです。デフォルトで広告フィルタのリストが搭載されているので、後は自動で広告サイトやトラッキングをブロックしてくれます。ブロックした場合、ツールバーに表示されるuBlockのアイコンにブロック数が表示されます。デフォルトの動作は、基本モードです。デフォルトで最適な設定になっている為、特別にカスタマイズしたいことがなければ設定タブの内容を変更する必要はありません。

 

uBlock Origin – 🦊 Firefox (ja) 向け拡張機能を入手

f:id:russianble:20191210004407j:plain

 

モードについて

基本モードと上級者モードがあります。

基本モード

広告サイトのドメインごとにブロックのカスタマイズができなく、フィルタリストに従って自動でブロックするモードです。唯一できることは、サイトによってブロック機能のON、OFFを切り替えることです。あと、scriptやビデオ再生といった機能単位の制限はできます。

上級者モード

サイト内のサブドメインや、サードパーティードメインごとにブロックするか個別に指定できます。ですが、設定を誤るとサイトの動作がおかしくり、広告ブロックが正しくできないようになることがあります。上級者向けです。細かく設定したい場合、こちらをおすすめします。

 

モードの切り替え方法

モードの切り替えは、uBlockのメニューから①の設定ボタンを押し、設定画面で [私は上級者です] のチェックを切り替えるだけです。変更後は、リロードが必要です。

f:id:russianble:20191210003204j:plain

 

f:id:russianble:20191210004028j:plain



基本モード操作方法

 基本モードは、下図のようにブロック結果が表示されます。①がの列がブロック結果を表し、がブロック、が許可、色はブロックと許可が混在していることを表します。②の列は、ブロックの内訳を表します。+が許可、-がブロックを表します。+は、1~9の要素をブロック、++は、10~99の要素をブロックとおおまかな数を表しています。色の場合、+と-が混在してます。③のボタンを押すことでフィルタリングを有効、無効に切り替えられます。ここで変更した設定は、即座に記憶され次回に表示した時も適用されます。④の「すべて」をクリックすると、ブロック結果を折りたたむことができます。折りたたむとトップレベルドメインだけ表示されます。

f:id:russianble:20191210010141j:plain

上級モード操作方法

上級モードでは、ベーシックモードと同じフィルタが適用されます。カスタマイズしなければ同じ動作ですが、訪問サイトごとに設定を書き換えることができます。

上級モードの画面は下記になります。基本モードと同じで、①がブロック結果を表します。②は、グローバルのブロック設定と結果、③は、ローカルのブロック設定と結果をあらわします。②、③の列にカーソルを近づけると、下記例では、ファーストパーティースクリプトのように3色の帯が表示され、クリックする色により許可()、デフォルト設定()、ブロック()を個別のサイトごとに設定できます。グローバルは、全てのサイトに対してブロックを設定し、ローカルは、訪問先のURLにのみ設定されるフィルタを決定します。ここで設定を変更すると一時的に反映された状態となり、下図2番目のように左上に2っボタンが出てきます。ここで右の鍵ボタンを押すと設定が保存されます。保存ボタンを押さないままブラウザを終了するとカスタマイズした設定はクリアされます。また、設定変更した場合、保存したかに関係なくリロードしないと反映されません。

f:id:russianble:20191210012527j:plain

f:id:russianble:20191210011617j:plain

ここで、下図を例にブロック状態の見方について説明します。②、③の列のセルの色は、カスタマイズされた設定を表します。下記を例にすると、amazon.co.jp がローカルで許可、amazon-adsystem.com がローカルで許可、doubleclick.netがグローバルでブロック、facebook.comがグローバルでブロックされる設定になっています。1rx.io などは、①の列を見るとブロックされているのが分かりますが、これは、カスタマイズによる設定ではないので色となっています。ですが、ブロックされているので-の印は表示されています。このブロックは、フィルタリストによるものです。カスタマイズの設定を誤ってしまうと、②や③の列がでも①のブロック結果がとなってブロックされていない事があります。②③列の色は、ブロックされていることを表しているわけではありません。ここで設定した値は、オプションのMyルール設定に書き出されます。万一設定を誤って動作がおかしくなってもMyルール設定を元の状態に戻せば完全に元に戻ります。

 f:id:russianble:20191210012527j:plain


 設定画面のその他のタブについて

フィルタ設定

基本モード、上級者モードのベースに利用するフィルタを選択します、私はデフォルト設定のまま使ってます。カスタムフィルタを自分で作成したり、外部サイトで配布されているフィルタを適用したりできます。

f:id:russianble:20191210021714j:plain

Myルール設定

上級者モードでカスタマイズした設定がここに表示されます。一時設定で保存してない場合、右のペインに一時設定が表示されます。通常は、左右どちらも同じ設定が表示されています。

rule_sample.txt   // テスト用のサンプルです。正しく表示できないページもあります。

f:id:russianble:20191210021706j:plain

ホワイトリスト設定

 電源ボタンを押してフィルタ機能自体をオフにした場合、ここに除外サイトとして登録されます。フィルタオフは、一時的ではなく即保存されるので注意しましょう。

f:id:russianble:20191210021721j:plain

 おまけ

uBlockには、動作ログを表示できる機能があります。表示方法は、uBlockのメニューからリクエストログをクリックするだけです。その後、ログを取りたいページをブラウザでリロードすると、uBlockの通信ログが記録されます。うまくページが表示できない場合や、ブロックした要素を調べたい時に便利です。

f:id:russianble:20191210213853j:plain

f:id:russianble:20191210213843j:plain

以上です

詳しい説明は、英語ですが下記サイトにドキュメントがあります。

Dynamic filtering: quick guide · gorhill/uBlock Wiki · GitHub

SQLite Unixtimeの数値で表された日付から日付文字列に変換する方法

SQLiteでは、日付を保存する型が無い為、REALやINTEGERに日付を保存するそうです。INTEGERでUnixtime形式で保存した数値を日付表示する場合、工夫が必要となります。10桁のUnixtimeを表す文字列があれば、下記の記述で日付文字列を取得できます。

SELECT datetime(1092941466, 'unixepoch');

 私の場合、16桁の数値から表示したかった為、INTEGERを一旦文字列に戻して10桁に変換しました。例としてtable1のdateaddedというinteger型のカラムから値をとってきてます。※とりあえず表示はできましたが、詳しくないので最適かは分かりません

select datetime( substr(printf('%d',dateadded),1,10),'unixepoch','localtime') from table1

 参考ページ

SQLite Query Language: Date And Time Functions

 

Android6.0 SDカードの内部ストレージ化を解除する方法

SDカードを内部ストレージ化した場合に、また本体を内部ストレージとして使いたい場合があります。その場合、SDカードの内部ストレージ状態を解除できます。その手順を説明します。

① 設定から[ストレージとUSB]をタップし、下記画面を出します。次に内部ストレージをタップします。

f:id:russianble:20191024102237p:plain

 

② 内部ストレージの画面で右上のメニュー表示ボタンを押し、データの移行をタップします。

f:id:russianble:20191024102242p:plain

 

③ この画面で移動をタップすれば、SDカードに移行された内部ストレージのデータが本体に移動します。操作はこれで完了です。後は、再起動すると本体が内部ストレージとして使われるようになります。

f:id:russianble:20191024102249p:plain

 

補足

本体の容量を増やすには、SDカードの内部ストレージ化以外に個別にアプリの保存場所をSDカードに設定することができます。事前にこの操作を行っている場合、アプリのデータがSDカードに残っています。その場合、下記手順でアプリのデータを本体に移動できます。

① 設定の[ストレージとUSB]をタップし、次に[SDカード]をタップします。すると下記画面が出るので、アプリをタップします。

f:id:russianble:20191024102254p:plain

 

② SDカードに移動されたアプリの一覧が出ます。本体にデータを移動させたアプリをタップします。ここに表示されるのは、SDカードに移動可能なアプリのみです。googleアプリなど元々保存先を変更できないアプリもあります。

f:id:russianble:20191024102258p:plain

 

③ 使用されているストレージの[変更]をタップし、内部ストレージに変更します。

f:id:russianble:20191024102304p:plain

 

④ ①~③の手順を繰り返し、全てのアプリを本体に移せば下記のようになり、SDカードのデータが空になります。この状態になればSDカードから本体に完全にデータが移行されているので取り外しても問題ありません。

f:id:russianble:20191024102309p:plain