読者です 読者をやめる 読者になる 読者になる

アンタイ・フォレンジック伝道者の独り言

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

sqlparse v.1.1 を試す(2)

引き続き、sqlparse v.1.1 のテストを行ってみます。

昨日はページ内の削除レコードを検出する部分を試したわけですが、ページ内での上書きが発生した場合やページ再利用時にどうなるかテストしてみます。

まず、昨日と同じくサンプルのデータベースファイルとテーブルを作成します。下記は5件のレコードが存在しているリーフページです。

f:id:hideakii:20140907080156p:plain

Secure Deleteがオフの状態で、このテーブル内のデータ 5件を全て一括削除してみます。

f:id:hideakii:20140907080742p:plain

この状態であれば、Sqlpaeseで処理すると以下のように削除レコードを検出してくれます。

Type Offset Length Data
Unallocated 520 504 T#hogehoge005C#hogehoge0042#hogehoge003!#hogehoge002#hogehoge001

現在、ページ内には過去のレコード5件が残っていますが、この状態のまま新規にレコードを作成すると、以下のように過去のレコードが上書きされていきます。(1件だけレコードを追加)

f:id:hideakii:20140907081257p:plain

この状態でも、Sqlpaeseで処理すると以下のように削除レコードを検出してくれます。

Type Offset Length Data
Unallocated 522 486 T#hogehoge005C#hogehoge0042#hogehoge003!#hogehoge002

 次は若干トリッキー?なことをしてみます。レコード2はとても長い文字列を入れていますので、1レコードには収まりませんので、別のページが割り当てられた状態になります。

f:id:hideakii:20140907082831p:plain

部分的に別ページにデータが存在する状態で、このレコードを削除してみたのが下記の状況です。

f:id:hideakii:20140907083403p:plain

青い線の下にあるページ内には文字列が存在していることを目視であれば確認できますが、sqlparseで処理した結果は下記です。

Type Offset Length Data
Unallocated 524 298 6
Free Block 839 169 ?port139port139port139port139port139port139port139port139port139port139port139port139port139port139port139port139port139port139port139port139port139port139por

Free Block 839 の位置は青い線より上の部分にあり、ページが再利用されている青い線より下にあるデータは拾えてないことが分かります。

仕様を詳しく確認していないのですが、ページが別用途で再利用されていたりする場合には、そのページ内にレコードが残っていても検出しないかもしれません。