Python-digital-forensics-python-digital-mobile-device-forensics
Pythonデジタルモバイルデバイスフォレンジック
この章では、モバイルデバイス上のPythonデジタルフォレンジックと関連する概念について説明します。
前書き
モバイルデバイスフォレンジックは、モバイルデバイスの取得と分析を行い、調査対象のデジタル証拠を回復するデジタルフォレンジックの分野です。 モバイルデバイスには、位置に関する有用な情報を提供するのに役立つ組み込みの通信システムがあるため、このブランチはコンピューターフォレンジックとは異なります。
デジタルフォレンジックではスマートフォンの使用が日々増加していますが、それでもその不均一性のために非標準であると考えられています。 一方、ハードディスクなどのコンピューターハードウェアは標準と見なされ、安定した分野としても開発されています。 デジタルフォレンジック業界では、スマートフォンなどの一時的な証拠を持つ非標準デバイスに使用される技術について多くの議論があります。
モバイルデバイスから抽出可能なアーティファクト
最新のモバイルデバイスは、コールログまたはSMSメッセージのみを持つ古い電話と比較して、多くのデジタル情報を所有しています。 したがって、モバイルデバイスは、ユーザーに関する多くの洞察を調査員に提供できます。 モバイルデバイスから抽出できるいくつかのアーティファクトは以下のとおりです-
- メッセージ-これらは、所有者の心の状態を明らかにすることができ、調査員に以前の未知の情報を提供することもできる便利なアーティファクトです。
- ロケーション履歴-ロケーション履歴データは、人の特定の場所について検証するために調査員が使用できる有用なアーティファクトです。
- インストールされているアプリケーション-インストールされているアプリケーションの種類にアクセスすることにより、調査員はモバイルユーザーの習慣と思考についての洞察を得ます。
エビデンスのソースとPythonでの処理
スマートフォンには、主要な証拠のソースとしてSQLiteデータベースとPLISTファイルがあります。 このセクションでは、Pythonで証拠のソースを処理します。
PLISTファイルの分析
PLIST(プロパティリスト)は、特にiPhoneデバイスにアプリケーションデータを保存するための柔軟で便利な形式です。 拡張子 .plist を使用します。 バンドルとアプリケーションに関する情報を保存するために使用されるこの種のファイル。 XML と binary の2つの形式を使用できます。 次のPythonコードは、PLISTファイルを開いて読み取ります。 これに進む前に、独自の Info.plist ファイルを作成する必要があることに注意してください。
まず、次のコマンドで biplist という名前のサードパーティライブラリをインストールします-
今、plistファイルを処理するためにいくつかの有用なライブラリをインポートします-
さて、メインメソッドの下で次のコマンドを使用して、plistファイルを変数に読み込むことができます-
これで、この変数からコンソール上のデータを読み取るか、直接印刷することができます。
SQLiteデータベース
SQLiteは、モバイルデバイスのプライマリデータリポジトリとして機能します。 SQLiteは、自己完結型のサーバーなしのゼロ構成のトランザクションSQLデータベースエンジンを実装するインプロセスライブラリです。 それはゼロ構成のデータベースであり、他のデータベースとは異なり、システムで構成する必要はありません。
初心者またはSQLiteデータベースに慣れていない場合は、リンクlink:/sqlite/index [www.finddevguides.com/sqlite/index]をたどることができます。さらに、リンクlink:/sqlite/sqlite_python [www.finddevguidesをたどることができます。 .com/sqlite/sqlite_python] PythonでSQLiteの詳細を知りたい場合に備えて。
モバイルフォレンジック中に、モバイルデバイスの sms.db ファイルを操作して、 message テーブルから貴重な情報を抽出できます。 Pythonには、SQLiteデータベースと接続するための sqlite3 という名前の組み込みライブラリがあります。 次のコマンドで同じものをインポートできます-
今、次のコマンドの助けを借りて、データベースに接続できます、モバイルデバイスの場合は sms.db と言います-
ここで、Cはデータベースオブジェクトとやり取りできるカーソルオブジェクトです。
今、特定のコマンドを実行する場合、たとえば* abcテーブル*から詳細を取得する場合、次のコマンドを使用して実行できると仮定します-
上記のコマンドの結果は cursor オブジェクトに保存されます。 同様に、* fetchall()*メソッドを使用して、操作可能な変数に結果をダンプできます。
次のコマンドを使用して、 sms.db のメッセージテーブルの列名データを取得できます-
ここで、SQLite環境内のさまざまな環境変数と状態フラグを制御するために使用される特別なコマンドであるSQLite PRAGMAコマンドを使用していることに注意してください。 上記のコマンドでは、* fetchall()*メソッドは結果のタプルを返します。 各列の名前は、各タプルの最初のインデックスに保存されます。
今、次のコマンドの助けを借りて、すべてのデータについてテーブルを照会し、 data_msg という名前の変数に格納できます-
上記のコマンドは変数にデータを保存し、さらに* csv.writer()*メソッドを使用してCSVファイルに上記のデータを書き込むこともできます。
iTunesのバックアップ
iPhoneのモバイルフォレンジックは、iTunesによって作成されたバックアップで実行できます。 科学捜査官は、iTunesを通じて取得したiPhoneの論理バックアップの分析に依存しています。 iTunesはAFC(Appleファイル接続)プロトコルを使用してバックアップを取ります。 また、バックアッププロセスでは、エスクローキーレコード以外のiPhone上の内容は変更されません。
さて、デジタルフォレンジックの専門家がiTunesバックアップのテクニックを理解することがなぜ重要なのかという疑問が生じます。 iPhoneを同期するためにコンピューターを使用すると、iPhone上のほとんどの情報がコンピューターにバックアップされる可能性が高いため、iPhoneの代わりに容疑者のコンピューターに直接アクセスできる場合は重要です。
バックアップのプロセスとその場所
Apple製品がコンピューターにバックアップされるたびに、iTunes製品と同期され、デバイスの一意のIDを持つ特定のフォルダーが作成されます。 最新のバックアップ形式では、ファイルはファイル名の最初の2つの16進文字を含むサブフォルダーに保存されます。 これらのバックアップファイルには、info.plistのようないくつかのファイルがあり、Manifest.dbという名前のデータベースとともに役立ちます。 次の表は、iTunesのバックアップのオペレーティングシステムによって異なるバックアップの場所を示しています-
OS | Backup Location |
---|---|
Win7 | C:\Users\[username]\AppData\Roaming\AppleComputer\MobileSync\Backup\ |
MAC OS X | ~/Library/Application Suport/MobileSync/Backup/ |
PythonでiTunesバックアップを処理するには、まずオペレーティングシステムごとに、バックアップの場所にあるすべてのバックアップを識別する必要があります。 次に、各バックアップを反復処理し、データベースManifest.dbを読み取ります。
今、次のPythonコードの助けを借りて、同じことができます-
まず、次のように必要なライブラリをインポートします-
今、2つの位置引数、すなわちiTunesバックアップと目的の出力フォルダを表すINPUT_DIRとOUTPUT_DIRを提供します-
今、次のようにログを設定します-
今、次のようにこのログのメッセージ形式を設定します-
次のコード行は、* os.makedirs()*関数を使用して、目的の出力ディレクトリに必要なフォルダーを作成します-
今、次のようにmain()関数に提供された入力および出力ディレクトリを渡します-
さて、入力フォルダに存在するすべてのバックアップを識別するために* backup_summary()関数をさらに呼び出す main()*関数を記述します-
今、次のようにコンソールに各バックアップの概要を印刷します-
次に、Manifest.dbファイルの内容をdb_itemsという名前の変数にダンプします。
さて、バックアップのディレクトリパスを取る関数を定義しましょう-
さて、SQLite3を使用して、cという名前のカーソルでデータベースに接続します-
次に、次のように* create_files()*メソッドを定義します-
ここで、 db_items 辞書の各キーを反復処理します-
今、次のようにバックアップファイルをコピーするために* shutil.copyfile()*メソッドを使用します-
上記のPythonスクリプトを使用すると、出力フォルダーに更新されたバックアップファイル構造を取得できます。 pycrypto pythonライブラリを使用して、バックアップを復号化できます。
Wi-Fi
モバイルデバイスは、どこでも利用可能なWi-Fiネットワークを介して接続することにより、外の世界に接続するために使用できます。 デバイスがこれらのオープンネットワークに自動的に接続される場合があります。
iPhoneの場合、デバイスが接続されたオープンWi-Fi接続のリストは、 com.apple.wifi.plist という名前のPLISTファイルに保存されます。 このファイルには、Wi-Fi SSID、BSSID、および接続時間が含まれます。
Pythonを使用して標準のCellebrite XMLレポートからWi-Fiの詳細を抽出する必要があります。 そのためには、Wi-Fiネットワークの名前を使用してデバイスの場所を見つけるのに使用できる一般的なプラットフォームである、Wireless Geographic Logging Engine(WIGLE)のAPIを使用する必要があります。
WIGLEのAPI
WIGLEから無料のAPIを取得するには、WIGLEのウェブサイトhttps://wigle.net/accountに登録する必要があります。 WIGELのAPIを介してユーザーデバイスとその接続に関する情報を取得するためのPythonスクリプトについては、以下で説明します-
まず、さまざまなことを処理するために次のライブラリをインポートします-
次に、2つの位置引数、つまり INPUT_FILE と OUTPUT_CSV を指定します。これらはそれぞれ、Wi-Fi MACアドレスを持つ入力ファイルと目的の出力CSVファイルを表します-
これで、次のコード行は、入力ファイルが存在し、ファイルであるかどうかを確認します。 そうでない場合は、スクリプトを終了します-
今、次のようにメインに引数を渡します-
今、私たちは次のようにXMLファイルを解析します-
今、次のようにルートの子要素を反復処理します-
次に、値のテキストに「ssid」文字列が存在するかどうかを確認します-
今、私たちは次のように無線LAN辞書にBSSID、SSIDとタイムスタンプを追加する必要があります-
XMLパーサーよりもはるかに単純なテキストパーサーを以下に示します-
さて、リクエストモジュールを使用して* WIGLE API 呼び出しを行い、 query_wigle()*メソッドに移動する必要があります-
実際には、WIGLE APIコールには1日あたりの制限があります。その制限を超えると、次のようなエラーが表示されます。
ここで、* prep_output()*メソッドを使用して、辞書を簡単に書き込み可能なチャンクにフラット化します-
さて、次のようにこれまでに収集したすべてのデータにアクセスします-
これで、* write_csv()*関数を使用して、この章の以前のスクリプトで行ったように、出力をCSVファイルに書き込むことができます。