web-dev-qa-db-ja.com

最も一般的なランサムウェアプログラムは、元のファイルをそのまま削除しますか、それとも最後に大量のファイルを削除しますか?

私は、Cryptolocker、Cryptowall、Torrentlocker、KeRanger、RSA4096などの最も一般的な種類について話しています(これらすべてに必ずしも答える必要はありませんが、1つまたは2つで十分です)。最も普及している種類が異なる場合は、回答は、プログラムまたはカテゴリごとにセクションに分割できます。

A:ファイルの暗号化されたコピーを作成し、そのファイルの元のファイルを削除してから、次のファイルに進みますか?

またはB:一括操作ですべてのファイルの暗号化されたコピーを作成し、最後に1つの大きな削除操作を実行しますか?

削除すると、ドライブの関連セクターも上書きされますか? (これには時間がかかります。)ただし、これは、特定のファイルがRecuvaやPhotorecなどのソフトウェアによって回復されるのを完全に防ぐためです。

ランサムウェアは、その作業が完全に完了するまで隠されたままであることを望んでいるため、ステルスであり、存在の兆候をできるだけ少なくしたいと考えています。

ランサムウェアの作成者の観点から見ると、Aの欠点は、ユーザーが操作中にファイルにアクセスしようとすると、ファイルがなくなっている(または、暗号化されたファイルが単にフォルダー階層の元のファイルを置き換える場合は破損している)ことに気付く可能性があることです。 。)これは、ランサムウェアが発見されるか、身代金を要求するために仕事を終えることが許可されないことを意味します。

一方、Bは、元のファイルがすべて最後までアクセス可能なままであるという欠点を犯罪者に与えます。つまり、 ユーザーが操作中にランサムウェアを発見した場合 は、他の指示を介して、データを簡単に回復できます。

質問を繰り返すと、最も普及しているタイプのランサムウェアはどのようにしてこの「問題」を「解決」しようとしますか?

おそらく、それほど大きな問題ではないかもしれません。影響を受けるほとんどの人は、ランサムウェアの操作中に(Bのように)キャッチするのに十分な警戒を怠るか、ファイルがなくなった場合に実際に何をするか( A)で?

エンジェルの応答に加えて、あなたが言及した人気のあるランサムウェアのバリエーションに見られるように、暗号化はファイルごとに行われ、1つのファイルが暗号化されてから、プレーンテキストバージョンのファイルが削除されてから、ランサムウェアは次のファイル。複数のファイルを暗号化するために並列スレッドを開始する場合がありますが、目的は同じです。 eda2、Cryptowall、CTB-Lockerによってどのように行われるかを見てみましょう。

eda2(オープンソースのランサムウェア)
まず、オープンソースのランサムウェア、つまり eda2 から始めましょう。作者がgithubからコードを削除すると、次のようになります。

    //Encrypts a file with AES algorithm
    public void EncryptFile(string file, string password)
    {
        byte[] bytesToBeEncrypted = File.ReadAllBytes(file);
        byte[] passwordBytes = Encoding.UTF8.GetBytes(password);

        // Hash the password with SHA256
        passwordBytes = SHA256.Create().ComputeHash(passwordBytes);

        byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);

        File.WriteAllBytes(file, bytesEncrypted);
        System.IO.File.Move(file, file + ".locked"); //new file extension
    }

ドライブとディレクトリのチェックを開始し、条件に一致する各ファイル(ファイル拡張子は事前定義されたリストにあります)をEncryptFileメソッドに再帰的に渡し、ファイルは暗号化されたバージョンで上書きされます。


Cryptowall 4
Cryptowall 4は Cisco Talos によって分析され、次の図はその暗号化プロセスを示しています。
Cryptowall
このランサムウェアによって実行される個別のスレッドがあり、そのうちの1つは暗号化部分を実行する「DoFilesEncryption」スレッドです。

フォルダを反復処理してファイルを見つけた後:

この時点で実際のファイルコンテンツの暗号化が行われ、元のファイルは512 KBのチャンクであるブロックで読み取られます。各ブロックは、AES-CBC 256アルゴリズムを使用して、生成されたキーで暗号化され、新しいファイルに直接書き込まれます(最初の4バイトのブロックサイズと共に)。

そして、削除は次のようになります:

// Move the new encrypted file name in the old original position, replacing the old one

bRetVal = MoveFileEx(newEncFileName, lpOrgFileName,
MOVEFILE_WRITE_THROUGH | MOVEFILE_REPLACE_EXISTING);
if (!bRetVal)
// Delete the old file in the standard manner:
    DeleteFile(lpOrgFileName);
else {
    // Rename the original replaced file in the new random file name
    bRetVal = MoveFileEx(lpOrgFileName, newEncFileName, MOVEFILE_REPLACE_EXISTING);
}

CTB-Locker
分析したように here で、Cryptowallと同じですが、このルーチンが実行されるファイルの暗号化を担当するスレッドがあります。

  • MoveFileEx API呼び出しを使用して、ファイルが一時ファイル(%TEMP%\ <name> .tmp、<name>はコアハッシュによって決定される)に移動されます
  • 一時ファイルがメモリに読み込まれます
  • 非対称鍵ペアと対称秘密鍵が生成されます
  • ファイルバッファーは、zlibライブラリ(実行可能ファイルに対して静的にリンクされています)のDEFLATEデータ圧縮アルゴリズムを使用して圧縮されます。
  • 圧縮後、ファイルバッファはAES-256-ECBを使用して暗号化されます
  • このファイルに関連付けられた公開鍵と暗号化された情報ベクトルで構成されるヘッダーが、暗号化されたデータの前に追加されます
  • ヘッダーが付加された暗号化バッファが一時ファイルに書き込まれます
  • 一時ファイルを移動して、MoveFileEx API呼び出しを使用して元のファイルを上書きし、元のファイルに追加された(コアハッシュから派生した)新しい拡張子を追加します。

さらなる考えとまとめ
前述のように、ファイルは外出先で暗号化され、通常は暗号化されたバージョンで上書きされます。次に、この設計を分析してみましょう。私の意見では、ファイルを1つずつ暗号化して置き換えるのが優れたオプションです。

  • ファイルを1つずつ暗号化するのは簡単に実装できます
  • ランサムウェアが操作の途中で停止した場合でも、いくつかの重要なファイルが暗号化され、被害者が喜んで支払う可能性があります
  • ファイルを一括で暗号化してから一括で削除するには、追加のディスク容量と複雑なファイルの削除が必要です

ランサムウェアの懸念事項の1つは、静かで隠れていることです。もう1つの懸念事項は、高速である必要があることです。また、実行可能ファイルをできるだけ小さくするために、それらは単純でなければなりません。
保護されていないシステムをターゲットにし、これらのマルウェアが使用するエクスプロイトキットはFlashなどのアプリケーションの脆弱性をターゲットにし、データのバックアップがない被害者から利益を得るので、通常は対処する必要はありません。強化された非常に安全なシステム。彼らは単に保護されていないバックアップされていないユーザーを対象としています。彼らは利益を上げるために弾丸の証拠である必要はありません、彼らは十分に良くなければならないので、時には彼らは可能な限り最高の実装を持っていません。

大きなファイルを暗号化するときのパフォーマンスの問題に対処するために、ランサムウェアが使用する1つのテクニックは、ファイルの最初のnバイトのみを暗号化することです。これは通常、ほとんどのファイルを破壊するのに十分であり、ファイル全体を暗号化するよりもはるかに高速です。残念ながら、現時点でこの手法を使用した特定のランサムウェアの名前は見つかりませんでした。

ランサムウェアの操作中をキャッチする
を参照してください 暗号化ランサムウェアの操作中にキャッチする場合はどうしますか? バックグラウンドについては、ランサムウェアの操作中にキャッチしても必ずしも完全に停止したりすべてを取得したりできるわけではありませんファイルを元に戻します。

ランサムウェアはファイルシステム全体を暗号化せず、通常は実行可能ファイルをそのまま残します。そのため、被害者は何かが間違っていることに気づくために画像、ドキュメント、またはそのようなものを開かなければなりません。
ランサムウェアに関する調査をまだ行っていないコンピュータに精通している人であっても、何が起こっているのか明確ではない可能性があります。ドキュメントが破損している、または開かない理由はいくつかあります(一部のランサムウェアファイルの拡張子を変更しないでください)。ランサムウェアがファイルを暗号化していることを誰かが実際に気付く確率にこれを追加すると、これは大きな問題ではないようです。

大きな問題であったとしても、一括暗号化/削除の代わりに、マルウェアは非表示のまま暗号化を行わずにユーザーのアクティビティを監視し、ユーザーの非アクティブ/ afkを発見すると、暗号化プロセスを開始できます。

18
Silverfox

彼らは主にファイルごとになります。したがって、「幸運」である場合、someフォルダのみが感染していることに気付くでしょう。これにはいくつかの理由があります。

  • コーディングが簡単。暗号化ルーチンを繰り返すすべてのファイルを反復処理するだけです。

  • 外部プログラムに適しています。ランサムウェアは、暗号化を実行するためのファイルを処理するサードパーティのプログラムを使用している場合があります。

  • フルディスクの問題はありません。オプションBには、少なくとも50%の空きハードディスクが必要です。あなたの何人がそのスペースを空けていますか?

  • オプションAを使用して ランサムウェアの中間操作を検出 した場合でも、いくつかの非常に重要なファイルが暗号化されていて、料金を支払う可能性があります。元のファイルが最後に削除されただけの場合、それは決して起こりません。

しかし、おそらく最も重要なこととして、ファイルを上書きすることができます。

これは、フォレンジック対策と「暗号化の最適化」の両方で重要です。

100 MBのファイルをコピーする代わりに、たとえば、ファイルを開き、最初の1 MBを暗号化して、ディスク内の同じ場所に保存します(おそらくランサムウェア固有のデータも追加します)。ユーザーには、元のアプリケーションで開けない100 MBの「暗号化」ファイルが残っていますが、必要なI/O転送は約2 MBだけでした。

そして、ディスク内のすべてのドキュメントを使用不可にしようとする場合、それは本当に重要です。

11
Ángel