はじめに
最近、CTFに絶賛ハマり中の@fumiyan_proproです。解いている問題で面白そうなのを見つけたのでそのことについてお話したいと思いました。今回は、picoCTFに出てきた問題です。
目次
- slack space
- slack spaceからデータの復元
- さいごに
slack space
slack spaceの話の前に一度デバイスドライバについてお話します。デバイスドライバは記憶保存領域になります。ファイルのデータなどを保存する場所と思って頂いて構いません。デバイスドライバの単位としてよく使用されるのがクラスタになります。OSが読み書きで管理している単位になります。デバイスドライバの最小単位となるのがセクタになります。セクタが512バイトでクラスタがセクタ8個分の4096バイト使用するなどがあります。
表にすると下記になります。
名前 | 単位 |
---|---|
セクタ | 512バイト |
クラスタ | 4096バイト |
※クラスタはOSによって扱っているバイトが異なります。
これをもとにslack spaceとは何かというと
スラックスペースとは、コンピュータファイルがオペレーティングシステムによって割り当てられたすべてのスペースを必要としない場合に、コンピュータのハードディスクドライブ上に存在する残りのストレージのことです。
WhatIs.com slack space(DeepL翻訳)
上記の内容では、まだピンとこないかもしれないので具体的な内容としては、前提条件がセクタ512バイトで考えてみます。保存される単位はクラスタ単位で保存されます。今回はセクタ3つ分の1536バイトです。
1280バイトのファイルを保存しました。ファイルを保存した時にデバイスドライバ(記憶領域)に割り当てます。割り当てられる単位はクラスタ単位になるので3つ分のセクタ領域を使用しました。この時に、クラスタは1536バイトになるのでそこから1280バイト分引くと、256バイト未使用の領域が出てしまいます。この時の未使用の領域のことをslack spaceといいます。
1536 - 1280 = 256 <-- この256がslack space
slack spaceからデータの復元
次にslack spaceからデータを復元することが可能なのです。先ほど使用したクラスタに割り当てているファイルの内容を消したとします。その次に新しいファイルの内容で保存した時に、そのクラスタに1080バイト分データが割り当てられたとします。この時に200バイト分、前のslack spaceに足されるので456バイト分のslack spaceになりました。
ここでなんと、先ほどの200バイト分のデータの中に前のデータが残っている場合がありそこの部分から削除したファイルを復元することが出来るのです!!
1536 - 1080 = 456 <--今回のslack space
456 - 256 = 200 <-- 前回のslack spaceから今回のslack spaceを引いた値
200 <-- このslack spaceの中に前のデータが残っている可能性がある
データの復元などは、Autopsyなどのtoolを使用すると出来ます。
さいごに
2016年、連邦捜査局(FBI)は、ヒラリー・クリントン前国務長官の個人サーバーが機密情報を不適切に保存・送信したかどうかを判断するために、ヒラリー・クリントン前国務長官の個人サーバーのたるみ空間に常駐していた数百万通の電子メールの断片を見直していたことを明らかにした。
WhatIs.com slack space(DeepL翻訳)
上記の様に実際の事例でも使用されています。
この手の分野は、フォレンジックの分野になっており事件などでも使用されています。
参考文献
https://whatis.techtarget.com/definition/slack-space-file-slack-space
https://www.autopsy.com/
https://zarat.hatenablog.com/entry/2020/04/03/230926