
A Simple Ransomware Vaccine

간단한 랜섬웨어 보호 도구
우리는 랜섬웨어가 vssadmin을 사용해 모든 섀도 복사본을 삭제하는 것을 꽤 자주 목격합니다. 해당 요청을 가로채서 호출한 프로세스를 종료할 수 있다면 어떨까요? 간단한 백신을 만들어 봅시다.

우리는 vssadmin.exe(및 wmic.exe)에 대해 디버거를 등록하며, 이 디버거가 바로 우리가 컴파일한 raccine.exe입니다. Raccine은 먼저 모든 부모 프로세스의 PID를 수집한 다음 모든 부모 프로세스를 종료하려고 시도하는 바이너리입니다.
장점:
vssadmin.exe 또는 wmic.exe)을 교체할 필요가 없습니다. 시스템 파일 교체는 무결성 문제를 일으킬 수 있고 패치가 적용될 때마다 백신 적용(raccination)이 깨질 수 있습니다단점 / 사각지대:
vssadmin.exe delete shadows(또는 기타 차단 목록에 포함된 명령 조합)의 정당한 사용이 더 이상 불가능합니다vssadmin.exe delete shadows를 호출하려던 프로세스까지 종료하며, 이는 백업 프로세스일 수도 있습니다vssadmin.exe를 호출한 프로세스 트리에 포함되지 않은 방식(예: schtasks를 통한 방식)은 탐지하지 못합니다vssadmin.exe(및 wmic.exe) 호출이 가로채져 디버거로 raccine.exe에 전달됩니다 (vssadmin.exe delete shadows는 raccine.exe vssadmin.exe delete shadows가 됩니다)악성 명령 조합:
delete 및 shadows (vssadmin, diskshadow)resize 및 shadowstorage (vssadmin)delete 및 shadowstorage (vssadmin)delete 및 shadowcopy (wmic)delete, catalog 및 -quiet (wbadmin)win32_shadowcopy 또는 인코딩된 명령 목록의 요소 (powershell)recoveryenabled (bcedit)ignoreallfailures (bcedit)^ 오래된 목록: 해당 YARA 규칙을 확인하세요
인코딩된 PowerShell 명령 목록: JAB, SQBFAF, SQBuAH, SUVYI, cwBhA, aWV4I, aQBlAHgA 등 다수
Raccine이 없는 Emotet - 링크

Raccine이 있는 Emotet - 링크 (Raccine 설치와 관련된 프로세스 활동은 무시하세요)

감염이 초기에 차단됩니다.
사용에 따른 책임은 본인에게 있습니다!
Raccine이 적용된 시스템에서는 raccine-reg-patch-uninstall.reg 제거 패치를 적용하기 전까지 차단 목록에 포함된 명령을 사용하는 명령을 실행할 수 없습니다. 이로 인해 작업 중 해당 특정 명령을 실행하는 다양한 백업 솔루션이 손상될 수 있습니다. 이는 해당 요청을 차단할 뿐만 아니라 백업 솔루션과 이를 호출한 프로세스를 포함한 트리의 모든 프로세스를 종료합니다.
모든 프로세스 실행을 기록하는 확실한 보안 모니터링이 있다면 로그를 확인하여 vssadmin.exe delete shadows, vssadmin.exe resize shadowstorage ... 또는 기타 차단된 명령줄이 정당한 목적으로 빈번하게 또는 산발적으로 사용되는지 확인할 수 있습니다. 그런 경우 Raccine 사용을 자제해야 합니다.
delete 및 shadows가 포함된 vssadmin.exe 실행만 차단하고, 그 외의 경우에는 모든 매개변수를 원래 매개변수로 vssadmin을 호출하는 새 프로세스에 전달하는 버전explorer.exe 제거delete shadowcopy를 호출하는 wmic 방식 지원, 화이트리스트에 등록된 프로세스 시작에 대한 출력 없음 (wmic 출력 처리 문제 방지)delete shadowstorage 추가 검사, @_hillu의 코드 검토, 애플리케이션 아이콘bcdedit.exe /set {default} bootstatuspolicy ignoreallfailures 및 bcdedit.exe /set {default} recoveryenabled no 추가 검사powershell.exe 및 win32_shadowcopy 또는 인코딩된 명령 목록 추가 검사Visual C++ 재배포 가능 패키지와 .NET Framework는 모두 install-raccine.bat을 실행하면 자동으로 설치됩니다.
Raccine.zip을 다운로드합니다raccine-installer.bat을 실행합니다
배치 설치 프로그램에는 "제거" 옵션이 포함되어 있습니다.
관리자 권한으로 다음을 수행합니다:
raccine-reg-patch-uninstall.reg를 실행합니다%ProgramFiles%\Raccine 및 %ProgramData%\Raccine 폴더를 삭제합니다reg delete HKCU\Software\Raccine /F를 실행합니다taskkill /F /IM RaccineSettings.exe를 실행합니다reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "Raccine Tray" /F를 실행합니다schtasks /DELETE /TN "Raccine Rules Updater" /F를 실행합니다업그레이드하려면 제거 후 재설치를 권장합니다. 제거 시 구성이 포함된 모든 레지스트리 키가 삭제됩니다.
Raccine은 버전 1.2부터 통합 시그니처 업데이터를 갖추고 있습니다. RaccineRulesSync.exe라는 이 프로그램은 예약된 작업을 통해 하루에 한 번 실행되도록 구성되어 있습니다. 트레이 아이콘 메뉴의 옵션을 사용하여 시그니처 업데이트를 수동으로 실행할 수 있습니다.
버전 1.0부터 Raccine은 프로세스 명령줄 또는 부모 프로세스가 악성인지 여부를 판단하기 위해 YARA 규칙을 추가로 사용합니다. Raccine은 두 가지 다른 목적을 위해 2세트의 규칙을 사용합니다.
./yara - 모든 매개변수가 포함된 명령줄에 적용되는 규칙, 예: WMIC.exe delete justatest./yara/in-memory - 가로챈 프로세스의 부모 프로세스 메모리에 적용되는 규칙, 예: 우리가 가로챈 프로세스 vssadmin.exe를 실행하는 ransomware.exe버전 1.1부터 프로세스 및 해당 부모 프로세스의 속성을 고려하는 훨씬 더 복잡하고 영리한 YARA 규칙을 허용하기 위해 외부 변수 목록을 YARA 매칭 프로세스에 전달합니다.
매칭 프로세스는 명령줄에서 다음과 같이 실행됩니다:
"C:\Program Files\Raccine\yara64.exe" -d FromRaccine="true" -d Name="WMIC.exe" -d ExecutablePath="C:\Windows\System32\wbem\WMIC.exe" -d CommandLine="WMIC.exe delete justatest" -d Priority=32 -d FromRaccine="true" -d ParentName="cmd.exe" -d ParentExecutablePath="C:\Windows\System32\cmd.exe" -d ParentCommandLine="'C:\WINDOWS\system32\cmd.exe' " -d ParentPriority=32 C:\ProgramData\Raccine\yarayara\mal_emotet.yar C:\ProgramData\Raccine\yara\Rac1C6A.tmp
다음 목록은 조건에서 외부 변수를 사용하는 YARA 규칙 예시를 보여줍니다.
rule env_vars_test {
condition:
Name contains "WMIC.exe"
and CommandLine contains "delete justatest"
and ParentPriority >= 8
and (
ParentCommandLine contains "cmd"
or ParentCommandLine contains "powershell"
)
}
GPO 폴더에는 Raccine.ADMX 및 Raccine.ADML이 포함되어 있습니다. 배포 시 Raccine.ADMX 파일은 C:\Windows\PolicyDefinitions에 넣습니다. 함께 제공되는 Raccine.ADML 파일은 C:\Windows\PolicyDefinitions\en-US에 넣습니다.
사용 방법: GPEDIT.MSC를 열고 컴퓨터 구성 > 관리 템플릿 > 시스템 > Raccine으로 이동합니다
변경 사항을 구성한 후에는 gpupdate.exe를 실행하여 GPO를 갱신해야 할 수 있습니다.
가로챈 모든 항목과 수행된 작업이 기록된 로그 파일이 C:\ProgramData\Raccine\Raccine_log.txt에 작성됩니다.

모든 차단 이벤트는 Application 이벤트 로그에 항목을 생성합니다.

Raccine이 생성하는 이벤트 ID
버전 0.10.0부터 Raccine은 "시뮬레이션 모드"로 설치할 수 있습니다. 이 모드는 모든 트리거를 활성화하고 모든 작업을 기록하지만 아무것도 종료하지 않습니다. 이 모드는 Raccine이 다른 소프트웨어와 간섭하는지 확인하기 위해 백업 솔루션 또는 기타 합법적인 소프트웨어가 실행되는 환경에서 합리적인 기간 동안 사용해야 합니다. 아이디어는 Raccine을 시뮬레이션 모드로 설치하고 일주일 또는 한 달 동안 기록하게 한 다음 로그를 확인하여 조직에서 사용하는 합법적인 소프트웨어를 차단했을지 확인하는 것입니다.

raccine.exe를 실행하면 부모 프로세스 트리가 종료되는 것을 볼 수 있습니다 (v0.1 스크린샷)

버전 1부터 사용 가능하며 필수입니다.



현재 처리 중인 랜섬웨어가 특정 프로세스 이름(예: taskdl.exe)을 사용하는 경우, .reg 패치를 변경하여 해당 이름에 대한 호출을 가로채고 Raccine이 호출하는 프로세스 트리의 모든 부모 프로세스를 종료하도록 할 수 있습니다.
Raccine을 확장하고 싶지만 특히 Windows 플랫폼에서의 C++ 코딩 기술이 부족합니다.
설치에 문제가 발생한 경우(예: 갑작스러운 오류 메시지, 서비스 손상 또는 더 이상 시작되지 않는 프로그램) reg-patches 하위 폴더에 있는 raccine-reg-patch-uninstall.reg 파일을 실행하세요. 그러면 모든 것이 정상으로 돌아와야 합니다.
그 후에는 install-raccine.bat을 사용하여 전체 제거를 실행할 수도 있습니다.
올바른 발음은 "Rax-Een"입니다.
C:\ProgramData\Raccine_log.txt 생성diskshadow.exe delete shadows 명령 포함| 변수 | 설명 | 예시 값 |
|---|
| FromRaccine | true | |
| Name | 이미지 파일 이름 | WMIC.exe |
| ExecutablePath | 바이너리의 전체 경로 | C:\Windows\System32\wbem\WMIC.exe |
| CommandLine | 매개변수가 포함된 전체 명령줄 | WMIC.exe delete justatest |
| Priority | 프로세스 우선순위 | 32 |
| ParentName | 부모 이미지 파일 이름 | cmd.exe |
| ParentExecutablePath | 부모 실행 파일의 전체 경로 | C:\Windows\System32\cmd.exe |
| ParentCommandLine | 매개변수가 포함된 부모의 전체 명령줄 | C:\WINDOWS\system32\cmd.exe |
| ParentPriority | 부모 프로세스 우선순위 | 32 |