西ヨーロッパに住んでいる「普通の」市民である場合、私のコンピュータのスワップをワイプまたは暗号化することが本当に必要ですか?
これは個人的な判断であり、データのプライバシーをどの程度重視するか、および攻撃者の手に渡った場合にデータが公開されないようにどの程度保護するかによって異なります。あなたがラップトップを持っていて、ある日それが盗まれたとしましょう-泥棒がパスワードまたは暗号化キーまたはその他の方法で個人データを抽出しようとする可能性はどのくらいありますか?多くの人が気にしませんが、気にする人もいます。確かに、ほとんどの泥棒はラップトップを売ってすぐに金銭的な利益を得ますが、攻撃者がデータ自体にアクセスしようとしてさらに先へと動機を与えられる場合があります。
そして、誰かが「はい」と答える前に、私がどのようにテストでき、自分のスワップをリークして、暗号化された家にかかわらず、どの種類のデータが保護されていないかを実際に確認できるように、私に手本を与えることができますか?
プロセスのメモリがスワップスペースにスワップアウトされる可能性があります。メモリの漏洩は危険な場合があります-明らかな例はHeartbleedです-Heartbleed を使用してサイトの秘密暗号キーを盗んだ方法を参照してください。Heartbleedによって公開されるメモリは1つのプロセスにのみ属しますが、スワップスペースによって潜在的に公開されるメモリはすべてのプロセスに属します。プライベートキーまたはパスワードリスト(Webブラウザなど)がスワップアウトされるプロセスを想像してください。これらのアイテムはプレーンテキストでスワップスペースに表示されます。それらを抽出することは、特定のパターンのデータについてメモリをふるいにかけることの問題です-それは、strings
または、Heartbleed(テストでは連続するいくつかのバイトが公開暗号鍵の除数であることがテストされている)のように、より複雑になる可能性があります。暗号化された/ homeパーティションがある場合、ユーザーのデータのロックを解除する暗号化キーを形成するデータのブロックを探すことは明らかです。
実際の例:
やるbash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000'
そのスタック上のいくつかの秘密データをbashのプロセスを作成します
sysctl vm.swappiness=100
(必要ありませんが、もっと簡単な例を行うことができる)swappinessをを高めるために
run top -c
、fを押し、SWAP列を有効にし、qを押してトッププロセスビューに戻り、プロセスが表示されるまで下にスクロールしbash -c
ます。
別のターミナルで、LinuxからChimnay Kanchiのプログラムを保存します。システムメモリに負荷をかける方法は?to usemem.c
、それをコンパイルし、ターミナルで繰り返しgcc -o usemem usemem.c
実行しusemem &
ます。これは一度に最大512MBのメモリブロックを使用します。(メモリがスワップアウトされる原因は問題ではなく、通常のシステム使用、暴走プロセス、または意図的な攻撃である可能性があり、最終結果は同じです)
ウォッチトップ、bash -c
スワップされるのを待つ(SWAP列の値> 0)
strings /dev/sdaX | grep SECRET
Xがスワップパーティションである場合に実行します
おめでとうございます-スワップパーティションから「秘密の」データを抽出しました。SECRETテキストの複数のコピーに続いて「パスワード」が表示されます。コピーには、親bashプロセス、トッププロセス、および「bash -c」プロセスからリークされた完全なコマンドラインが含まれます。完全なコマンドラインを含まない行は、「bash -c」プロセスからリークしました。
コマンドラインだけでなく、シークレットがプロセスメモリからリークすることを証明するには、unsigned char secret[] = "SECRET=XXXX";
usemem.cに行を追加します(unsigned long mem;
行のすぐ下)。再コンパイルしてusemem &
繰り返し実行strings /dev/sdaX | grep SECRET
します。今回は 'XXXX'シークレットが漏洩しているのがわかります。