선택적 암호화 알고리즘을 사용하는 Qilin 랜섬웨어 분석
최근 Qilin 랜섬웨어가 전 세계 다양한 국가와 산업의 기업들을 대상으로 지속적인 공격을 감행하고 있으며, 국내에서도 피해 사례가 확인되고 있다. 이에 따라 본 게시글에서는 Qilin 랜섬웨어의 주요 특징과 암호화 방식, 그리고 복호화가 불가능한 기술적 이유를 분석하여, 향후 유사한 위협에 효과적으로 대응할 수 있는 인사이트를 제공하고자 한다.
요약
Qilin Ransomware 정보
– 2022년 8월 등장
– 전세계 다양한 국가와 산업의 기업들을 대상으로 랜섬웨어 공격
– RaaS(Ransomware-as-a-Service) 모델 및 이중 갈취(Double Extortion) 기법 사용
– 초기 침투 방법은 주로 스피어 피싱으로 알려짐
랜섬웨어 악성코드 정보
– 실행 시 비밀번호를 인자로 사용하며 내부에 포함된 비밀번호와 비교 후 실행 여부를 결정
– 볼륨 섀도우 삭제, DB관련 서비스 중지, 이벤트 로그 삭제, 바탕화면 변경을 수행
– 랜섬웨어 동작 전 인자 값을 확인하며, 다양한 기능이 존재
– 파일 암호화에 사용되는 알고리즘이 AES와 ChaCha20으로 총 2가지 유형이 사용됨
– 다른 플랫폼으로 이식성이 좋은 Golang 및 Rust 언어로 개발됨
– 실행 시 임시 폴더에 QLOG폴더를 생성하여 실행 기록저장
– AES 키 관련 정보를 RSA 공개키로 암호화하여 파일의 끝에 삽입
1. 개요
1.1 Qilin(Agenda)
Qilin 랜섬웨어 그룹은 2022년 8월 처음 등장했으며, Agenda 랜섬웨어라고도 불린다. 네덜란드, 브라질, 세르비아, 영국, 일본, 호주 대한민국 등 다양한 국가를 대상으로 지속적으로 공격하고 있으며 다른 랜섬웨어 갱단과 같이 감염된 시스템의 파일을 암호화하고 피해 기업의 민감 데이터를 탈취하며, 몸값이 지불되지 않는 경우 이를 공개한다.
초기 침투 방법은 주로 스피어 피싱으로 알려졌으며 분석 및 탐지를 우회할 목적으로 Go 언어에서 Rust 언어로 랜섬웨어 제작 언어를 변경하였다. 교육 부문, 헬스케어, 핵심 인프라 (전력, 상수도, 통신, 의료)로 다양한 산업이 공격 대상으로 확인되었다.
2. 분석내용
2.1 초기루틴
Qilin 랜섬웨어는 실행 시 “–password” 인자를 통해 올바른 비밀번호가 입력된 경우에만 동작한다. 비밀번호가 입력되면 해당 값을 SHA-256 해쉬로 계산해 바이너리 내부에 하드코딩된 SHA-2 해쉬와 비교하며, 일치할 경우 암호화를 시작한다. 비밀번호를 인자로 받는 랜섬웨어는 통상 입력된 비밀번호를 Key로 사용해 코드를 복호화한 뒤 실행된다. 그러나 Qilin 랜섬웨어는 코드가 이미 복호화된 상태이므로, 비밀번호가 틀리더라도 조건문을 우회해 일치시키면 이후 코드가 계속 실행된다.
본문에서는 조건문을 우회하여 진행하였으며 이어서 실행되면 CreateMutexW() 함수를 사용해 파일마다 다르게 내장된 비밀번호의 SHA-256 해쉬값을 Mutex로 생성하여 중복 실행을 방지한다. 또한 여러 개의 인자를 지원하며, 각 인자값의 세부 내용은 아래 [표 1]과 같다.
|
인자 값 |
행위 |
|---|---|
|
-debug |
디버그 모드로 실행 |
|
-safe |
파일 암호화 이후 안전모드로 재부팅 |
|
–password |
실행 시 필요한 비밀번호 입력 |
|
–paths |
지정된 경로만 암호화 |
|
–timer |
실행 전 시간 지연 |
|
–no-proc |
파일 암호화 시 프로세스 종료 X |
|
–no-services |
파일 암호화 시 서비스 종료 X |
|
–spread |
PsExec를 통해 네트워크 전파 |
|
–no-extension |
파일 암호화 이후 확장자 변경 X |
|
–no-wallpaper |
파일 암호화 이후 바탕화면 변경 X |
|
–no-network |
네트워크 경로 암호화 X |
|
–no-note |
랜섬노트 생성 X |
|
–no-destruct |
파일 암호화 이후 자가삭제 X |
[표 1] 인자 값 별 행위
2.2. 암호화 준비
QIlin 랜섬웨어는 이벤트 로그와 백업 관련 데이터를 제거해 사고 분석과 시스템 복구를 어렵게 하며 vssadmin.exe를 이용해 볼륨 섀도 복사본(Volume Shadow Copies)을 삭제하는데, 완전한 삭제를 위해 다음 절차를 수행한다. 볼륨 섀도 복사본 서비스(Volume Shadow Copy Service, VSS)의 시작 유형을 수동 시작으로 변경하고 서비스를 시작한 뒤, vssadmin.exe로 볼륨 섀도 복사본을 삭제한다. 이후 서비스를 종료하고 시작 유형을 사용 안 함으로 변경한다. 자세한 명령어는 아래 [표 2]와 같다.
|
볼륨 섀도 복사본 삭제 명령어 |
|---|
|
1. wmic service where name=’vss’ call ChangeStartMode Manual 2. net start vss 3. vssadmin.exe delete shadows /all /quiet 4. net stop vss 5. wmic service where name=’vss’ call ChangeStartMode Disabled |
[표 2] 복구 방해 명령어
이후 시스템에 등록된 모든 이벤트 로그를 백업 없이 삭제하는 PowerShell 스크립트를 실행한다. 이로 인해 결과적으로 시스템 로그를 삭제한 기록만 로그에 남게 된다. 자세한 내용은 아래 [표 3]과 같다.
|
이벤트 로그 삭제 스크립트 |
|---|
| “powershell” $logs = Get-WinEvent -ListLog * | Where-Object {$_.RecordCount} | Select-Object -ExpandProperty LogName ; ForEach ( $l in $logs | Sort | Get-Unique ) {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog($l)} |
[표 3] 이벤트 로그 삭제 스크립트
또한 레지스트리 등록을 통해 지속성을 유지한다. 이때 레지스트리 값 이름은 “*랜덤6글자” 형식으로 생성되며, 값 이름 앞에 “*”가 포함되면 안전 모드에서도 랜섬웨어가 실행된다. 하지만 “–no-destruct” 인자값을 사용하지 않으면 자가 삭제되기 때문에 레지스트리 값만 존재하게 되어 재부팅 이후에는 작동하지 않는다.

[그림 3] 지속성 유지를 위한 레지스트리 등록
이외에도 Qilin 랜섬웨어는 정상적인 복구 절차를 방해하고 파일 암호화 성공률을 극대화하기 위해 파일 암호화 이전에 특정 서비스를 선제적으로 종료한다. 문자열 매칭 기반으로 서비스를 종료하고 시작 유형을 사용 안함으로 변경한다. 대상에는 데이터베이스(MSSQL), 메일 서버(Exchange), 가상화 플랫폼(Hyper-V), 백업 소프트웨어(Veeam, Veritas Backup Exec, Commvault, Acronis), 회계/ERP(QuickBooks, SAP), 그리고 보안 솔루션(Sophos) 등이 포함된다.
주요 예시로는 sql, vss, backup, vmms, veeamtransportsvc, backupexecjobengine 등이 있으며, 이는 데이터 저장·관리, 백업·복구, 가상화 및 보안 관련 서비스를 중지시켜 복구와 운영 지속성을 저해하려는 목적이다.
|
종료 대상 서비스 |
|---|
|
vmms, mepocs, memtas, veeam, backup, vss, sql, msexchange, sophos, msexchange, msexchange\\$, wsbexchange, pdvfsservice, backupexecvssprovider, backupexecagentaccelerator, backupexecagentbrowser, backupexecdivecimediaservice, backupexecjobengine, backupexecmanagementservice, backupexecrpcservice, gxblr, gxvss, gxclmgrs, gxcvd, gxcimgr, gxmmm, gxvsshwprov, gxfwd, sapservice, sap, sap\\$, sapd\\$, saphostcontrol, saphostexec, qbcfmonitorservice, qbdbmgrn, qbidpservice, acronisagent, veeamnfssvc, veeamdeploymentservice, veeamtransportsvc, mvarmor, mvarmor64, vsnapvss, acrsch2svc, (.*?)sql(.*?) |
[표 4] 종료 대상 서비스
또한, 파일 암호화 진행 중에도 지속적으로 프로세스를 검사하여 해당 프로세스를 종료시킨다. 서비스 종료와 마찬가지로 데이터 저장·관리, 백업·복구, 가상화 및 보안 관련 서비스를 중지시켜 복구와 운영 지속성을 저해하려는 목적이다.
|
종료 대상 프로세스 |
|---|
|
vmms, vmwp, vmcompute, agntsvc, dbeng50, dbsnmp, encsvc, excel, firefox, infopath, isqlplussvc, sql, msaccess, mspub, mydesktopqos, mydesktopservice, notepad, ocautoupds, ocomm, ocssd, onenote, oracle, outlook, powerpnt, sqbcoreservice, steam, synctime, tbirdconfig, thebat, thunderbird, visio, winword, wordpad, xfssvccon, bedbh, vxmon, benetns, bengien, pvlsvr, beserver, raw_agent_svc, vsnapvss, cagservice, qbidpservice, qbdbmgrn, qbcfmonitorservice, sap, teamviewer_service, teamviewer, tv_w32, tv_x64, cvmountd, cvd, cvfwd, cvods, saphostexec, saposcol, sapstartsrv, avagent, avscc, dellsystemdetect, enterpriseclient, veeamnfssvc, veeamtransportsvc, veeamdeploymentsvc, mvdesktopservice |
[표 5] 종료 대상 프로세스
주요 파일을 잘못 암호화하여 시스템이 손상되는 것을 방지하기 위해, 암호화에서 제외되는 확장자와 파일 및 경로가 별도로 지정되어 있다. 자세한 목록은 아래 [표 6], [표 7], [표 8]과 같다.
|
암호화 제외 파일 확장자 |
|---|
|
themepack, nls, diapkg, msi, lnk, exe, scr, bat, drv, rtp, msp, prf, msc, ico, key, ocx, diagcab, diagcfg, pdb, wpx, hlp, icns, rom, dll, msstyles, mod, ps1, ics, hta, bin, cmd, ani, 386, lock, cur, idx, sys, com, deskthemepack, shs, theme, mpa, nomedia, spl, cpl, adv, icl, msu, 9_bJ6s6BxF (암호화 확장자이며 파일마다 상이함) |
[표 6] 암호화 제외 파일 확장자
|
암호화 제외 파일 이름 |
|---|
|
desktop.ini, autorun.ini, ntldr, bootsect.bak, thumbs.db, boot.ini, ntuser.dat, iconcache.db, bootfont.bin, ntuser.ini, ntuser.dat.log, autorun.inf, bootmgr, bootmgr.efi, bootmgfw.efi, #recycle, autorun.inf, boot.ini, bootfont.bin, bootmgr, bootmgr.efi, bootmgfw.efi, desktop.ini, iconcache.db, ntldr, ntuser.dat, ntuser.dat.log, ntuser.ini, thumbs.db, #recycle, bootsect.bak |
[표 7] 암호화 제외 파일 확장자
|
암호화 제외 경로 |
|---|
|
windows, system volume information, intel, admin$, ipc$, sysvol, netlogon, $windows.~ws, application data, mozilla, program files (x86), program files, $windows.~bt, msocache, tor browser, programdata, boot, config.msi, google, perflogs, appdata, windows.old, appdata, boot, windows, windows.old, $recycle.bin, admin$ |
[표 8] 암호화 제외 파일 확장자
2.3. 파일 암호화
암호화 제외 경로, 파일, 확장자 확인이 완료되면 파일 암호화를 진행하기전에 파일 암호화에 사용할 알고리즘을 선택하는데 파일 암호화 시 사용되는 알고리즘은 AES-256 알고리즘과 ChaCha20 알고리즘의 총 두 가지 유형으로 구분된다. 기본적으로 파일은 AES-256(대칭키)으로 암호화되고, 암호화 키는 RSA-4096공개키로 암호화된다.
다만, 피해 시스템이 AES-NI(Advanced Encryption Standard-New Instructions)를 지원하지 않는 경우에는 파일이 ChaCha20 알고리즘으로 암호화된다. AES-NI를 지원하지 않는 경우는 대략 2011년 이전 구형 CPU이거나 메인보드에서 AES-NI Enable/Disable 기능을 지원하여 Disable로 설정된 경우이다.
모든 확인 절차가 완료되면 파일 전체 데이터가 암호화된다. 암호화가 완료된 후, 파일의 끝에는 “—–END CIPHERTEXT BLOCK—-“문자열이 추가되어 암호화된 데이터 구간이 명확히 구분된다. 이후 암호화된 데이터의 첫 부분에서 최대 512 바이트까지의 데이터가 삽입된다.
최종 파일 구조는 “암호화된 데이터 + 암호화된 키 데이터 + 끝을 알리는 문자열 + 암호화된 데이터(최대 512 바이트)”의 형태로 구성된다. 따라서 로컬 환경에는 해당 파일을 복호화할 수 있는 단서가 남아 있지 않게 된다.

[그림 4] 파일 암호화 이후 추가되는 데이터 구조 (원본 16바이트 크기의 파일이 암호화된 상태)
2.4.랜섬노트
아래 [그림 5]는 Qilin 랜섬웨어를 감염시킨 화면이며 바탕화면이 변경된 것을 확인할 수 있다.

[그림 5] 암호화 완료 후 바탕화면 변경 테스트 환경
랜섬노트는 “README-RECOVER-<암호화 확장자>.txt”라는 파일명으로 생성되며 본문에서 분석한 파일은 “9_bJ6s6BxF”를 사용한다. 암호화 제외 폴더를 제외한 나머지 모든 경로에 우선 랜섬노트를 생성하는 방식이므로, 시스템 전역의 대부분 디렉터리에 랜섬노트가 생성된다.
랜섬노트에는 시스템 및 네트워크에서 민감 데이터를 다운로드했으며 대중매체와 협력하고 있으므로, 협상이 이루어지지 않을 경우 해당 데이터를 자체 페이지(DLS)에 게시하겠다고 기재되어 있다. 수집된 데이터에는 직원 개인정보(주민등록번호, 운전면허증 등), 이력서, 고객 데이터, 청구서 등과 기업의 금융 정보 및 영업비밀이 포함된 것으로 서술되어 있다. 피해자에게는 노트에 기재된 아이디와 비밀번호를 사용해 DLS 사이트에 접속할 것을 요구하고 있다.

[그림 6] 랜섬노트(README-RECOVER-9_bJ6s6BxF.txt)
3. 안랩 대응 현황
안랩 제품군의 진단명과 엔진 날짜 정보는 다음과 같다.
3.1 V3 진단
- Ransomware/Win.Qilin.C5753179 (2025.04.16.03)
- Ransomware/Win.QilinCrypt.C5545083 (2023.11.20.02)
- Ransomware/Win.Qilin.C5792289 (2025.08.27.01)
- Ransomware/Win.Qilin.R727382 (2025.09.24.03)
- Trojan/Win.Generic.C5503103 (2023.10.09.02)
- Trojan/Win.Evo-gen.C5771612 (2025.06.17.02)
- Trojan/Win.Generic.C5545081 (2023.11.20.02)
- Ransom/MDP.Delete.M2117 (2019.01.31.00)
- Ransom/MDP.Command.M2255 (2019.06.19.00)
- Ransom/MDP.Event.M1946 (2018.06.06.00)
- Ransom/MDP.Edit.M1870 (2018.03.06.00)
3.2 EDR 진단
- Persistence/EDR.RunKey.M11517 (2023.12.12.00)
- Ransom/EDR.Decoy.M2470 (2022.09.30.00)
- SystemManipulation/EDR.Event.M2486 (2022.07.09.00)