개요
RanSim이라는 프로그램을 소개하고 랜섬웨어가 어떠한 방식으로 사용자의 파일을 암호화하는지 살펴본다.
RanSim이란
KnowBe41사는 과거 유명한 해커였던 Kevin Mitnick이 보안 컨설턴트로 참여하고 있으며 랜섬웨어나 다른 보안 문제를 효과적으로 관리할 수 있는 도구와 교육을 제공하고 있다. RanSim2은 이 KnowBe4 사에서 개발한 랜섬웨어 행위 시뮬레이터 프로그램이다.
RanSim은 기존 시스템에 존재하는 파일에는 영향을 주지 않으며 100% 안전한 시뮬레이션을 제공한다. 본 문서에서 사용한 RanSim 버전은 2.1.0.3 버전이다. RanSim은 버전을 업그레이드하면서 최신 랜섬웨어 경향을 반영하고 있으며 시나리오의 개수도 점점 늘어나고 있다. 2.1.0.3 버전에서는 2개의 정상 시나리오와 19개의 감염 시나리오를 제공한다. 이들에 대한 간략한 정리를 아래의 표에서 확인할 수 있다.
이름 | 기대 결과 |
설명 |
Archiver | 정상 실행 | gzip 알고리즘을 사용하여 단순히 파일을 압축 보관한다. 이 시나리오는 차단되어서는 안된다. |
Remover | 정상 실행 | 단순히 파일을 삭제한다. 어떠한 파일도 생성하지 않는다. 이 시나리오는 차단되어서는 안된다. |
WeakCryptor | 차단 및 복원 | 약한 암호화 방식으로 파일을 암호화한다. 원본 파일은 삭제한다. |
VirlockVariant | 차단 및 복원 | Virlock 랜섬웨어가 공통적으로 사용하는 파일 행위를 시뮬레이트한다. |
ThorVariant | 차단 및 복원 | 최근 버전의 Thor 랜섬웨어의 행위를 시뮬레이트한다. |
StrongCryptor | 차단 및 복원 | 강력한 암호화 방식으로 파일을 암호화한다. 원본 파일은 안전하게 삭제한다. |
StrongCryptorFast | 차단 및 복원 | 강력한 암호화 방식으로 파일을 암호화한다. 원본 파일은 삭제한다. |
StrongCryptorNet | 차단 및 복원 | 강력한 암호화 방식으로 파일을 암호화한다. 원본 파일은 삭제한다. 더불어 HTTP 연결방식으로 서버에 암호화 키 전송을 시뮬레이트한다. |
Streamer | 차단 및 복원 | 강력한 암호화 방식으로 파일을 암호화해서 하나의 파일에 그 데이터를 저장한다. 원본 파일은 삭제한다. |
SlowCryptor | 차단 및 복원 | 보안 제품에 의한 진단을 피하기 위해서 파일을 천천히 암호화하는 랜섬웨어 변종의 행위를 시뮬레이트한다. |
RIPlacer | 차단 및 복원 | "제어된 폴더 액세스" 방식으로 보호하고 있는 폴더 내 파일을 암호화하려고 시도한다. Windows Defender의 "제어된 폴더 액세스"에 대한 별도 설정을 미리 수행해야 한다. |
RigSimulator | 차단 및 복원 | Monero 암호화폐를 채굴하기 위해서 머신 CPU를 사용하는 "Mining Rig"를 시뮬레이트한다. |
Replacer | 차단 및 복원 | 원본 파일의 내용을 암호화 되지 않은 다른 내용으로 교체한다. 실제 랜섬웨어는 사용자로 하여금 파일들을 복구할 수 있다고 속이는 메시지를 보여준다. |
Injector | 차단 및 복원 | 일반적인 방법으로 정상 프로세스 안으로 암호화 코드를 삽입함으로써 파일을 암호화한다. |
ReflectiveInjector | 차단 및 복원 | 보다 발전된 방법으로 정상 프로세스 안으로 암호화 코드를 삽입함으로써 파일을 암호화한다. |
HollowInjector | 차단 및 복원 | 프로세스 Hollowing 방법으로 정상 프로세스 안으로 암호화 코드를 삽입함으로써 파일을 암호화한다. |
Mover | 차단 및 복원 | 강력한 암호화 방식으로 파일을 암호화 후 다른 폴더로 복사한다. 원본 파일은 안전하게 삭제한다. |
LockyVariant | 차단 및 복원 | 최근 버전의 Locky 랜섬웨어의 행위를 시뮬레이트한다. |
InsideCryptor | 차단 및 복원 | 파일의 헤더는 그대로 두고 파일의 내용 영역(대략 512 바이트 이후)을 강력한 암호화 방식으로 암호화한다. |
CritroniVariant | 차단 및 복원 | 최근 버전의 Critroni 랜섬웨어의 행위를 시뮬레이트한다. |
Collaborator | 차단 및 복원 | 최근 버전의 Critroni 랜섬웨어와 유사한 방식으로 파일을 암호화한다. 그러나 파일의 열거, 이동, 삭제에 대한 연산은 여러 개의 다른 프로세스가 수행한다. |
아래의 그림은 RanSim이 각각의 시나리오를 테스트할 때 사용하는 원본 파일들이다. RanSim은 각 시나리오에 해당하는 디렉터리에 이 원본 파일을 복사하면서 시작한다. RanSim 프로그램은 동작 말미에 각각의 시나리오 디렉터리에 복사한 파일과 원본 파일의 차이를 비교한다. 그 비교 결과에 따라 차단 및 복원이 정상적인지 확인 할 수 있다.
아래의 그림은 WeakCryptor 시나리오의 결과를 보여준다. 원본 파일은 존재하지 않고 “cr” 이라는 확장자를 가지는 암호화된 파일만 존재한다. RanSim 테스트시 사용하는 암호화된 파일의 확장자는 그 시나리오를 대표하는 식별자 역할을 하지 않는다. 그렇기 때문에 WeakCryptor 방식으로 동작하는 랜섬웨어는 “cr” 이라는 확장자를 사용하는구나 식의 오해는 하지 않길 바란다. 실제 랜섬웨어는 너무나도 다양한 방식으로 동작하고 다양한 형태의 확장자를 사용한다. RanSim은 단지 랜섬웨어의 대표적인 행위 패턴을 시뮬레이션 해주는 프로그램이고 그 정도로도 충분히 훌륭하다.
Archiver 시나리오
gzip 알고리즘을 사용하여 단순히 파일을 압축 보관한다. 이 시나리오는 랜섬웨어의 행위가 아니기 때문에 안티 랜섬웨어 프로그램은 이러한 행위를 차단하면 안된다. 테스트 디렉터리에 생성된 파일들을 확인해보면 아래의 그림과 같이 모두 gzip 파일에 대한 시그너처(1F 8B
)를 가지고 있음을 확인할 수 있다.
Remover 시나리오
단순히 파일을 삭제한다. 어떠한 파일도 생성하지 않는다. 이 시나리오는 일반적으로 발생하는 파일 연산이기 때문에 안티 랜섬웨어 프로그램은 이 연산을 진단해서는 안된다.
앞서 설명한 두 개의 시나리오는 정상적인 경우를 나타낸 것이다. 이제부터 설명하는 시나리오는 안티 랜섬웨어 프로그램에서 차단해야 하는 랜섬웨어 행위를 보여준다. 다만 우리가 사용하는 정상 프로그램 중에서도 자체 업데이트를 수행하거나 프로그램의 특수한 목적 때문에 이러한 행위를 수행할 수도 있다. 이런 경우에는 해당 프로그램을 예외처리 해주어야 한다.
WeakCryptor 시나리오
원본 파일을 읽은 후 약한 암호화 방식으로 암호화한다. 그런 다음 신규 파일을 생성하여 암호화된 데이터를 쓴다. 마지막으로 원본 파일은 삭제한다.
VirlockVariant 시나리오
Virlock 랜섬웨어가 공통적으로 사용하는 파일 행위를 시뮬레이트한다. WeakCryptor 와 동일한 것처럼 보이지만 최종적으로 암호화된 파일이 exe 확장자를 갖는다는 점에서 주의해야 한다. 실제 VirLock 랜섬웨어는 exe 확장자를 가지는 실행가능한 암호화 파일을 만들고 확장자 숨기기 설정을 적용한다. 감염상황을 인지하지 못한 사용자는 문서 파일을 연다고 생각하지만 실제로는 또 다시 랜섬웨어 감염 연산이 시작된다. 이것은 파일 서버를 사용하는 회사나 클라우드를 공유하는 사용자들에게서 쉽게 전파될 수 있는 상황이다.
ThorVariant 시나리오
Thor 랜섬웨어는 원본 파일을GUID 형태의 파일 이름과 thor 확장자를 가지는 파일로 Rename 한 후 암호화를 수행한다.
StrongCryptor 시나리오
우선 원본 파일을 강력한 암호화 방식으로 암호화한다. 그런 다음 신규 파일을 생성하여 암호화된 원본 파일의 내용을 신규 파일에 쓴다. 마지막으로 (암호화된) 원본 파일은 삭제한다.
StrongCryptorFast 시나리오
원본 파일을 읽은 후 강력한 암호화 방식으로 암호화한다. 그런 다음 신규 파일을 생성하고 암호화된 데이터를 쓴다. 원본 파일은 삭제한다. StrongCryptor 시나리오에 비해서 Write 연산이 줄어서 Fast 라는 이름을 붙은 것으로 생각된다.
StrongCryptorNet 시나리오
StrongCryptorFast 시나리오와 거의 동일하다. 다만 그림에서는 표현되지 않았지만 HTTP 연결방식으로 서버에 암호화 키 전송을 시뮬레이트한다.
Streamer 시나리오
Streamer 시나리오는 그 이름에서도 알 수 있듯이 여러 개의 파일을 읽어서 그 데이터를 암호화하여 실행 초기에 생성해 둔 하나의 신규 파일에 암호화된 데이터를 순차적으로 쓴다. 암호화된 데이터를 신규 파일에 쓴 후에 원본 파일은 삭제한다.
SlowCryptor 시나리오
안티 랜섬웨어 프로그램에 의한 진단을 피하기 위해서 파일을 천천히 암호화하는 랜섬웨어 변종의 행위를 시뮬레이트한다. 위의 그림에서도 알 수 있듯이 원본 파일을 읽고 삭제한 후 대략 2초의 시간이 지나고 나서야 신규 파일을 생성하고 전에 읽어 둔 데이터를 암호화하여 쓴다.
RIPlacer 시나리오
“제어된 폴더 액세스” 방식으로 보호하고 있는 폴더 내 파일을 암호화하려고 시도한다. Windows Defender의 “제어된 폴더 액세스”에 대한 별도 설정을 미리 수행해야 한다. Move 연산은 다른 디렉터리로 파일을 옮기는 연산이다. 이 때 파일의 이름을 바꿀 수도 있다. 반면에 Rename 연산은 동일한 디렉터리에서 파일의 이름만 바꾸는 연산이다. 위의 시나리오는 Move 연산을 반복하면서 여러 경로로 파일을 옮기고 그 과정에서 파일을 암호화한다.
RigSimulator 시나리오
이 시나리오는 Monero 암호화폐 채굴에 대한 것으로 본 문서에서는 다루지 않는다.
Replacer 시나리오
원본 파일의 내용을 암호화 되지 않은 다른 내용으로 교체한다. 원본 파일의 내용이 바뀌기는 했지만 암호화되지 않은 정상 파일 포맷을 가지기 때문에 안티 랜섬웨어 프로그램을 우회하는 기법으로 많이 사용된다.
InsideCryptor 시나리오
파일의 헤더는 그대로 두고 파일의 내용 영역(대략 512 바이트 이후)을 강력한 암호화 방식으로 암호화한다. 안티 랜섬웨어 프로그램은 파일의 암호화 여부를 파일 시그너처로 판별하기도 하는데 InsideCryptor 시나리오는 이러한 방법을 우회할 때 사용한다.
Injector 시나리오
DLL 인젝션 방법으로 정상 프로세스 안으로 암호화 코드를 삽입함으로써 파일을 암호화한다. RanSim에서 설명하는 인젝션 시나리오에서는 모두 notepad.exe를 인젝션 대상 프로세스로 사용하지만 실제 랜섬웨어는 svchost.exe, explorer.exe, iexplore.exe 등의 다양한 정상 프로세스를 대상으로 인젝션을 수행한다. notepad.exe 프로세스는 N 개의 파일을 암호화한 후에 N 개의 파일을 삭제한다. Injector.exe나 inj.exe는 실질적으로 파일 암호화에 관여하지 않았다. 모두 notepad.exe가 랜섬웨어 행위를 수행했다. 안티 랜섬웨어 프로그램은 이러한 공격을 진단하기 위해서 프로세스의 부모-자식 관계 및 리모트스레드 생성 등의 연산을 관리할 수 있어야 한다.
ReflectiveInjector 시나리오
Injector 시나리오와 거의 동일하다. 다만 DLL 인젝션이 아닌 Code 인젝션 방식을 사용한다. Code 인젝션 방식을 사용하게 되면 랜섬웨어 입장에서는 디스크에 랜섬웨어 행위를 수행하는 파일을 쓰지 않고 메모리 상에서 모든 것이 이뤄지기 때문에 진단을 어렵게 하는 효과가 있다. 이를 보통 fileless 방식이라고도 한다.
HollowInjector 시나리오
프로세스 Hollowing 방법으로 정상 프로세스 안으로 암호화 코드를 삽입함으로써 파일을 암호화한다. Inj.exe는 suspend 상태로 notepad.exe프로세스를 생성하고 기존 모듈을 unmap 한다. 그런 다음 랜섬웨어 행위에 필요한 메모리를 notepad.exe 프로세스에 쓴다. 마지막으로 실행 시작지점을 변경한 다음 resume 함으로써 notepad.exe는 본연의 기능을 상실하고 랜섬웨어로 동작하게 된다.
Mover 시나리오
WeakCryptor 시나리오와 거의 유사한 파일 연산 과정을 가지고 있지만 Mover 시나리오는 암호화되는 신규 파일이 원본 파일과 동일한 위치가 아니라 다른 디렉터리에 존재하다는 차이가 있다.
LockyVariant 시나리오
ThorVariant 시나리오와 유사한 파일 연산을 수행한다. 최신 버전의 Locky 랜섬웨어의 행위를 시뮬레이트한다.
CritroniVariant 시나리오
CritroniVariant 시나리오의 특징은 aaaaall.tmp 라는 이름을 암호화 단계의 중간 파일로 사용한다는 것이다. 그리고 “N개의 원본 파일 1개의 aaaaall.tmp 파일 N 개의 암호화 파일” 과 같은 형식으로 aaaaall.tmp 파일이 암호화되는 모든 파일에 관여하기 때문에 행위기반 안티 랜섬웨어 프로그램은 이러한 파일 연산을 주의 깊게 관찰해야 한다.
Collaborator 시나리오
Collaborator 시나리오는 그 이름에서도 알 수 있듯이 여러 프로세스가 협력하여 파일 암호화를 수행한다. 위의 그림은 하나의 파일을 암호화하는 과정을 도식화한 것이다. Collaborator.exe는 cmd.exe 프로세스를 실행하여 원본 파일을 암호화 파일로 복사한다. 여기까지는 아직 암호화되지 않은 상태이다. 복사가 완료되면 collaborator.exe는 파일 암호화를 수행한다. 마지막으로 원본 파일의 삭제는 다시 새로운 cmd.exe 프로세스를 실행하여 수행한다.
아래의 그림은 RanSim으로 Collaborator 시나리오가 수행될 때 cmd.exe 프로세스의 생성을 로깅한 것이다. 원본 파일을 암호화하기 위해서 그 개수에 비례해서 cmd.exe 프로세스가 실행된 것을 확인할 수 있다.
랜섬웨어 VS. 안티 랜섬웨어
RanSim 은 어디까지나 시뮬레이션 프로그램이다. 현실 세계의 랜섬웨어는 본 문서에서 소개한 다양한 시나리오가 복합적으로 반영되어 동작하는 경우도 많다. 또한 문서 파일만 노려서 암호화하던 초기 랜섬웨어와는 달리 실행 파일은 물론이고 운영체제 백업 및 복원과 관련된 ShadowCopy를 삭제하거나 MBR/GPT 영역을 조작하는 등 다양한 기법이 출현하고 있다. 최근 들어서는 암호화한 파일의 복호화 비용을 요구하는 데서 그치지 않고 더 나아가 파일을 유출하여 외부에 공개하는 것으로 금전을 요구하기도 한다.
안티 랜섬웨어 프로그램은 다양한 기법으로 대응방법을 제시하고 있다. 랜섬웨어의 행위를 추적하여 파일의 변조가 발생하기 전에 실시간으로 백업을 수행하고 랜섬웨어 행위로 진단되면 해당 프로세스를 종료하여 암호화된 파일을 복원해주는 방식이 있다. 그리고 보호 대상 디렉터리를 지정하여 허용 프로그램에 대해서만 접근을 제한하는 방법도 있다. 그 외에도 랜섬웨어가 결제관련 내용을 알리기 위해서 생성하는 랜섬노트 파일의 이름 형식이나 미끼 파일의 변조 유무를 확인하는 방식을 사용하기도 한다. 다양한 안티 랜섬웨어 제품들이 기능을 보완하면서 이러한 대응 기법들이 복합적으로 적용되고 있는 추세이다.
마무리
랜섬웨어의 암호화 기법은 나날이 고도화되고 있다. 본 문서에서 소개한 RanSim 프로그램의 시나리오가 모든 랜섬웨어의 행위를 표현한다고 할 수는 없다. 실제 랜섬웨어는 이러한 암호화 기법들을 다양하게 조합하여 공격하는 추세이기 때문이다. 다양한 랜섬웨어 공격에 대비하기 위해서 안티 랜섬웨어 프로그램을 사용하는 것도 중요하지만 무엇보다도 랜섬웨어를 대비하는 가장 좋은 방법은 중요한 파일을 안전하게 백업하는 것일 터이다.