見習いフォレンジッカーのメモ

デジタルフォレンジックに関することを書いていこうと思います。誤りを含む可能性も高いので、信じるか信じないかはあなた次第です。。

Mac OSXのIME(Imput Method Editor)アーティファクトに関して(About Mac OSX IME Artifact)

※This is a my very simple first report, there is the possibility of including mistakes.
 We need further verification.

ご存知の方もいらっしゃるかもしれませんが、今回も調査に役立つかもしれないアーティファクトを見つけたので、今わかっていること(こうだと思っていること)や私がこれを見つけた経緯、ちょっとした検証や考察などについて書きます。

また、簡単なパーサを書いたのでそちらもご紹介します。

【解析対象ファイルの場所】
/Users/USERNAME/Library/Dictionaries/JapaneseInputMethod/
ディレクトリ下の

  • DynamicBigramPhraseLexicon_ja_JP.db
  • DynamicPhraseLexicon_ja_JP.db
  • LexicalLearning_ja_JP.db
  • NonLexicalLearning_ja_JP.db
    *未確認ですが恐らく日本語環境にしかありません

【わかること】
ユーザが過去に入力した文字列

もう少し詳細を書くと、これは日本語環境のMacで使用されているIME(Input Method Editor)入力の変換履歴ではないかと考えており、「ユーザが入力し変換した(もしくは自動変換された)文字列」が残されているように見えます。「Dynamic」「LexicalLearning」「NonLexicalLearning」といったファイル名などから、自動変換や変換時の精度向上などの為に記録されているものではないかと予測されます。

日本では、アルファベットだけではなく、ひらがな、カタカナ、漢字の3つの形式(適切な表現が他にあるかもしれませんが)の文字を組み合わせて文章を書きます。これらを入力・変換するために使用しているのがIMEです。
下記のように、日本語入力モードで文字を入力すると下線が引かれ一部の文字は自動で変換されます。下線が引かれている状態でスペースキーを押すと、カタカナや漢字に変換できます。この下線が引かれた範囲がdbに記録されるように見えます。

IMEを使用して変換を行うと下記のようになります。

文字を入力すると下線が引かれ、一部の文字は自動で変換されます。スペースキーを押せば右下の変換候補から変換したい変換パターンを選択できます。

f:id:kasasagi_f:20190219232356p:plain

スペースを押して任意の候補に変換

f:id:kasasagi_f:20190219232824p:plain

Enterを押して決定

f:id:kasasagi_f:20190219232705p:plain

 【意義】
このアーティファクトは、IMEを使用して変換をすれば記録されると考えられるので、日本語入力を使っていれば、アプリケーションやブラウザ上のウェブページで入力したものも記録されます。
従って、掲示板やウェブチャット・メールに書き込んだ文字列も残されています。様々な秘匿化の影響を受けない可能性が高い為、他のアーティファクトでは調査困難なことも調べられるかもしれません。
しかしながら、際限なく残ってるわけではないようなので、運が良ければという話にはなります(自分の検証した範囲では、業務等で常時利用しているような端末であれば、1日〜1週間程度かと思います。あまり文章などを書かないという用途であれば多少長く残っていそうです)。

実際に私のMacで検証した結果、自分がテキストエディタ・パワーポイント・Webメール・Slack・Facebook Messenger等で打ち込んだ文字列が記録されていました。

また、現在は日本語環境でしか検証していませんが、他のIMEを使用している環境でも同じような仕組みがあるのではないかと考えられます。

【見つけた経緯・検証】
最近はMacフォレンジックに興味があり、簡単な調査ツールなどを作成していたので、Japan Security Analyst Conference 2019の会場や懇親会で「Macフォレンジックツールで欲しい機能ありますか」と聞いて回ったところ、「IMEみたいな日本独自のアーティファクト系は?」という声を頂いたので、遅くなりましたが先日探してみました。

今回はIMEの記録を探そうと思い意図的に探したので、findコマンド等でIMEと関係のありそうなフォルダやファイルを探していきました。
その中に、dbファイルを見つけた為、何らかの記録データが格納されているのではないかとあたりをつけてSQLite Viewerで中身を確認しました。(下記の例ではDynamicPhraseLexicon_ja_JP.dbを対象にしています)

f:id:kasasagi_f:20190220223741p:plain

f:id:kasasagi_f:20190220225751p:plain

すると、

FirstSurface SecondReading SecondSurface

 などのカラムに何らかのバイナリが入っていることを確認し、バイナリエディタへコピーして読める文字にならないか確認しました。

その結果、UTF-16(Little Endian)で変換すると日本語に戻ることを確認しました。

下記の18 8a 32 93を例にします。

f:id:kasasagi_f:20190221003806p:plain

これをHex Fiend(バイナリエディタ)に貼り付け、UTF-16(Little)で表示すると
「記録」になります。
(解析気分を味わいたければ、2バイトづつ逆バイトオーダーで取り出し上記の例でいうと8a 18 93 32に並び替えてUTF-16(Big Endian)に変換しても良いです。また、何れにせよサロゲートペアの文字だとこのような単純なやり方で戻すのは難しいかもしれません)

f:id:kasasagi_f:20190223165244p:plain

f:id:kasasagi_f:20190223165412p:plain
全て手で戻すのは面倒なので、pythonで簡単なスクリプトを書きました。
このスクリプトを用いると、バイナリの箇所だけ日本語に変換した状態でテーブルの内容をcsvに書き出すことができます。
(プログラミングが得意はわけではないので、拙いものですが。。。)

GitHub:
https://github.com/fkasasagi/OSX_IME_Parser

使い方(python3のみ対応):
python osx_ime_parser.py -f DynamicBigramPhraseLexicon_ja_JP.db

以下が実行ディレクトリに作成されるアウトプットです。

f:id:kasasagi_f:20190221013344p:plain

ファイル名は処理した「ファイル名_ファイルの更新時間.csv」です。

検証用に文字を打ち込んで半日ほど経った後、ツールを使い、できたcsvexcelで開くと下記のような感じでした。

  • DynamicBigramPhraseLexicon_ja_JP.db
    FirestSurfaceに最初に打ち込んだ文字、SecondReadingにFirestSurfaceの後に続く言葉の変換前、SecondSurfaceにSecondReadingの変換後の文字が入っているように見えます。その他のカラムの中身も謎です。私が検証用に入力した文字が残されていました。「入力するとカタカナや漢字に変換できます」と自然に打ったのですが、何気なく打ったので、「に」だけ入力後変換せずにエンターを押してしまい結果抜けているように見えます。「Dynamic」とあることから、自動変換などに関連があるのではないかとも予想されます。もう一度しっかり記録をとって細かい検証をしたいところです。

f:id:kasasagi_f:20190221005916p:plain

  • DynamicPhraseLexicon_ja_JP.db
    Readingに変換前、Surfaceに変換後の文字が記録されているように見えます。その他のカラムの中身は謎です。私が検証用に入力した文字が残されていました。
    こちらも「Dynamic」とあることから、自動変換などに関連があるのではないかとも予想されます。

f:id:kasasagi_f:20190221010344p:plain

  • LexicalLearning_ja_JP.db
    Readingに変換前、Surfaceに変換後、LeftSurface1にSurfaceの直前の文字、LeftSurface2にLeftSurface1前の文字が記録されているように見えます。
    その他のカラムの中身は謎です。私が検証用に変換した文字が残されていました。ファイル名から、語彙を学習し変換等に役立てているのでしょうか。

f:id:kasasagi_f:20190221010825p:plain

  • NonLexicalLearning_ja_JP.db
    謎です。

f:id:kasasagi_f:20190221011017p:plain

現在作成中のMac Forensicsをもっと楽にする簡素なGUIを持ったpythonツールにも組み込む予定です。(こちらはいつリリースできるかわかりませんが)

 

【その他】
下記のこともまだわかっていません
・自動変換された場合とスペースキーで手動変換した場合の差
・DBが更新されるタイミング
・記録されるものと記録されないものを決める条件が他にあるか
・どの程度の数(または量)の変換記録が残されているか
MacのどのVer.からこのアーティファクトはあるのか 

【検証OS・使用ツール】
Mac OS Mojave Ver.10.14.3 on MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
・DB Browser for SQLite Ver.3.10.1
・Hex Fiend Ver.2.8 (1517561380)
OSX_IME_Parser Ver.01(https://github.com/fkasasagi/OSX_IME_Parser)


*前回のbamに関してのブログから1年が経ちましたが、辞めた訳ではありません。
  細く長く自分のペースでやっていくつもりです。