기본 정보
저자: 강수진 외 4명
연도: 2021
게재처: 한국정보보호학회
요약: 랜섬웨어는 악성 소프트웨어로 컴퓨터에 저장된 데이터를 암호화하여 접근을 제한하고, 사용자에게 접근 권한을 대가로 금전을 요구한다. 최근 랜섬웨어는 대칭키 또는 스트림 암호 알고리즘을 사용하여 피해자의 파일을 암호화하고, 해당 암호키를 공격자의 공개키로 암호화하는 하이브리드 암호 시스템을 사용한다. 대부분 랜섬웨어는 파일 암호화 시 안전하다고 알려진 AES 알고리즘을 사용하며, 일부 랜섬웨어에서 Salsa20과 같은 스트림 암호를 사용한 경우도 발견된다. 모두 안전성이 확인된 알고리즘이지만, 공격자가 잘못 설계하는 경우 암호학적 취약점이 발생한다. 2019년 하반기에 등장한 Ragnar Locker 랜섬웨어는 하이브리드 암호 시스템을 사용하지만, 파일 암호화 시 스트림 암호에 동일한 키를 반복 사용함으로 취약점이 발생했다. 본 논문에서는 키 재사용 공격을 활용하여 공격자의 개인키 없이 감염된 데이터의 복호화 방안과 해당 취약점을 활용할 수 있는 방안을 제시한다.
1. 서론
랜섬웨어란?
- 컴퓨터의 시스템을 잠그는 방식이나 저장된 데이터를 암호화하는 방식으로 사용자의 데이터를 탈취하는 악성 소프트웨어
- 이후 데이터의 복호화를 대가로 사용자에게 금전을 요구함
랜섬웨어의 변화
과거 랜섬웨어
- 대칭키 암호 알고리즘 사용해서 사용자 데이터 암호화
- 암호화 속도 빠름
- 키 보관 문제 발생
- 키 보관 문제 해결하기 위해
- C&C 서버를 통해 키 받아오기
- → 네트워크에 연결되어 있지 않으면 랜섬웨어가 동작하지 않는 경우 발생
- 랜섬웨어 내부에 키 보관
- → 역공학을 통해 랜섬웨어 내부나 메모리에 남아있는 키를 찾아내서 복호화 가능
최신 랜섬웨어
- 하이브리드 암호 시스템 사용
- 빠른 암호화 가능
- 효율적인 키 관리 가능
💡 하이브리드 암호 시스템이 랜섬웨어에 어떻게 적용될까?
- 데이터 암호화에 블록 암호나 스트림 암호 알고리즘을 사용
- 사용된 암호키를 공격자의 공개키 암호 알고리즘으로 암호화
- 암호키를 감염된 시스템 내부에 보관
- 공격자의 개인키가 없으므로 데이터 복호화가 어려움
랜섬웨어 공격의 피해
2019년
- 상반기: GandCrab 랜섬웨어
- 약 50만건의 피해
- 6월: Ryuk 랜섬웨어
- 플로리다 시 공격
- 2차례에 걸쳐 110만 달러 받아냄
2020년
- 2월: Clop 랜섬웨어
- 네덜란드의 Maastricht 대학감염, 공격자에게 24만 달러 지불
- 8월: Maxe 랜섬웨어
- Xerox(미국의 프린트 제조기업), LG전자 감염
- 주요 기업 데이터 유출
2. 배경지식 및 관련 연구
2.1 배경지식
키 재사용 공격
스트림 암호 알고리즘에서 동일한 키를 재사용하는 경우 발생하는 취약점에 대한 공격
(1) 암호키(Key)로 부터 키 스트림(KS)를 생성
(2) 평문(P)와 XOR 연산하여 암호문(C)을 생성
(3), (4) 동일한 키로 암호화된 암호문 Ca, Cb
(5) 암호문 Ca에 대해서 평문 A를 획득할 수 있는 경우 키스트림 획득 가능
(6) Cb를 복호화 가능
→ 스트림 암호에 동일한 키를 반복적으로 사용하는 경우, 암호화에 사용된 키 스트림을 획득할 수 있고 이를 통해 다른 암호문의 복호화가 가능하다!
→ 키 재사용 공격을 활용하여 David Rupprecht등은 LTE 프로토콜의 도청 공격이 가능함을 보이고, 취약점을 발견했다. (https://www.usenix.org/conference/usenixsecurity20/presentation/rupprecht)
2.2 관련 연구
랜섬웨어 탐지 및 예방에 대한 연구
- Andrea Continella등은 I/O (Input/Output) 모니터링, 파일명이 변경된 파일의 비율 및 유형, 폴더 나열 작업의 빈도 등을 기반으로 랜섬웨어 탐지 방안을 제시
- D. Gonzalez와 T. Hayajneh는 일반적인 암호화 랜섬웨어의 페어로드 감염 방법 및 공격 방식에 대해 연구하고 이를 바탕으로 예방법을 제시
- 정상문 등은 암호화된 파일의 엔트로피 측정을 통해 랜섬웨어 탐지 모델을 구축하고 이를 탑재한 랜섬웨어 탐지 및 대응 시스템을 제안
랜섬웨어의 공격 회피에 대한 연구
- Nolen Scaife 등은 사용자 데이터를 변조하는 프로세스를 탐지하고 이를 발견하면 강제 종료하는 방법을 사용하여 랜섬웨어 공격에 대한 조기 경고 시스템을 제안
- 이수현 등은 공격의 대상이 되는 시스템 자체의 구성을 변화시켜 공격을 어렵게 하는 moving target defense 개념을 이용한 랜섬웨어 공격 회피방안 연구
네트워크 단에서 랜섬웨어의 공격을 막기 위한 연구
- Krzysztof Cabaj 등은 C&C 서버와 통신하여 암호키를 받아오는 CryptoWall 랜섬웨어를 분석하여 랜섬웨어가 사용하는 도메인, URL, IP 정보를 수집하고 이를 이용하여 랜섬웨어의 감염을 차단하는 시스템을 제안
- 김동현 등은 랜섬웨어가 주로 사용하는 DGA(Domain Generation Algorithm) 함수를 역공학으로 분석하여 랜섬웨어 공격을 탐지하고 잠재적인 악성 URL로의 접속을 차단하는 연구를 진행
감염된 데이터의 복구 및 복호화 방안에 대한 연구
→ 탐지에 적용되지 않는 특정으로 동작하는 랜섬웨어는 탐지 및 예방이 어려움
→ 침해 대응의 일환
- 이세훈 등은 메모리 분석을 통해 Donut 랜섬웨어에 감염된 파일을 복호화
- Kyungroul Lee 등은 랜섬웨어에 감염된 경우, 백업 시스템과 동기화된 랜섬웨어 감염 파일을 탐지하여 백업 시스템에서 원본 파일을 복구하는 방법을 제시
- 이세훈 등은 2019년 주요 신규 랜섬웨어 5종을 분석하여 그 중 메모리 포렌식 및 취약한 난수 발생기 재현을 통해 LooCipher의 복호화 방안을 제시
공격자가 감염된 파일의 복구 및 복호화 가능성을 제거하기 위해 감염 시 사용한 암호키와 관련 요소 및 시스템 백업 파일을 제거하는경우, 기존 연구에서 제안된 방법을 사용하는데 어려움이 발생
→ 본 논문은 스트림 암호 알고리즘의 동일한 키 재사용으로 발생하는 취약점을 활용하여 감염된 데이터를 복호화 하는 방법을 제안 (감염 시 사용한 암호키 및 관련 요소에 대한 정보 없이도 복호화 가능)
3. Ragnar Locker 랜섬웨어
3.1 개요
- 발견 시기: 2019년 말
- 공격 특징: 내장된 가상화 프로그램 사용하여 감염된 PC에 설치된 백신 우회
- → https://www.techtarget.com/searchsecurity/news/252483581/Ragnar-Locker-ransomware-attack-hides-inside-virtual-machine
- 공격대상: 기업
- 2020년 4월: 다국적 에너지 기업인 EDP를 공격, 약 10TB의 기밀 정보를 탈취, 유포하지 않는 조건으로 약 1000만 달러 요구
- 2020년 7월: 미국의 여행 서비스 회사 CWT 공격, 파일 복호화를 위해 약 450만 달러 지불
- 2020년 9월: 컨테이너 운송회사 공격, 일시적으로 서비스 마비
- 2020년 11월: 이탈리아 주류회사인 Campari & 일본 게임 개발 업체인 Capcom 공격, 각 기업의 기밀 정보를 탈취하고 서비스 마비
- Ragnar Locker 랜섬웨어 샘플 파일의 해시값MD5 24B354B142B5046263E91170DB92790B
SHA1 BBB71391CA40BCEBFAADF8E136741 2333457D771 SHA256 9706A97FFA43A0258571DEF8912DC2 B8BF1EE207676052AD1B9C16CA9953 FC2C
3.2 전체 동작 과정
Ragnar Locker 랜섬웨어의 전체 동작 과정
1) 시스템 언어 확인
감염된 PC 시스템의 언어가 excluded language list에 포함되어 있지 않다면 감염 진행
왜 제외할 언어를 설정했는지 생각해보니까… 이 랜섬웨어 만든 사람들이 러시아 사람들이라서 자기네들 PC나 그냥 지역 사람들은 걸리지 말라고(?) 한거인듯?!
→ (ragnar locker 랜섬웨어 개발자 체포 기사: https://www.europol.europa.eu/media-press/newsroom/news/ragnar-locker-ransomware-gang-taken-down-international-police-swoop)
2) 백업 및 원격 기능 서비스 종료
감염 전 백업 및 원격 기능을 지원하는 서비스를 종료
- 랜섬웨어 내부에 RC4 알고리즘으로 암호화하여 저장
- 랜섬웨어 내부에 하드코딩된 0x40바이트 길이의 고정키로 복호화하여 사용
- 종료시킨 서비스 목록, 랜섬노트 및 공개키 복호화 시 반복적으로 사용됨
💡 RC4 알고리즘
- 스트림 암호
- TLS나 WEP등의 프로토콜에 사용되어 왔음
- 안정성 문제가 있어 지금은 쓰이지 않는다
(https://ko.wikipedia.org/wiki/RC4)
3) 실행 프로세스 설치 경로 획득
Windows 폴더가 아닌 경우 해당 프로세스 종료
4) 볼륨 섀도 복사본 삭제
윈도우의 백업 기능을 사용하지 못하게 하기 위함
5) 랜섬노트 생성
랜섬노트는 랜섬웨어 내부에 RC4 알고리즘으로 암호화 되어 있음 → 고정키를 사용하여 복호화
- 감염이 완료되면 모니터에 출력
6) 파일 암호화
파일 암호화 시 스트림 암호인 Salsa20 알고리즘 사용
램섬웨어 실행과 운영체제 실행에 연관이 있는 파일 및 폴더를 제외한 모든 파일을 암호화
<제외할 파일 및 폴더 리스트>
💡 Salsa20 알고리즘
64바이트의 평문과 동일한 구성의 64바이트 키 스트림을 단순 연산(XOR, 덧셈, 시프트)으로 총 20라운드의 연산 과정을 통해 암호화를 수행
(https://en.wikipedia.org/wiki/Salsa20)
4. Ragnar Locker 암호화 과정
- 파일 암호화 시 스트림 암호인 Salsa20 알고리즘 사용
- 스트림 암호키 생성에 사용된 seed를 RSA-2048-OAEP로 암호화하여 보관
4.1 암호키 생성 및 파일 암호화
파일 암호화에 사용할 암호키: 두개의 랜덤한 난수 seed_1과 seed_2로 생성됨
두 난수 seed_1, seed_2의 생성과정
- r_1 = CryptGenRandom
- → CryptGenRandom: 윈도우에서 제공하는 난수 생성 함수
- n_2 = SHA512(r_1)
- seed_1 = n_1$의 상위 0x28 바이트
- r_2 = CryptGenRandom
- n_2 = SHA512(r_2)
- seed_2 = n_2의 상위 0x20 바이트
→ 생성된 seed_1과 seed_2를 산술연산자와 비트연산자를 사용하여 Salsa20 알고리즘의 initial state를 구성한다. 이때 생성된 암호키는 단일키로써, 모든 파일 암호화 시 동일하게 사용된다.
4.2 Seed 암호화
파일 암호키 생성에 사용된 seed_1과 seed_2는 공격자의 공개키와 RSA-2024-OAEP 알고리즘으로 암호화 되고 감염된 파일의 끝에 연접됨
→ 이후, Ragnar Locker 랜섬웨어의 시그니처인 “_RAGNAR_” 문자열과 NULL(0x00) 문자를 삽입
<암호화된 파일의 구조>
4.3 암호키 삭제
파일 암호키 생성에 필요한 seed들은 프로그램 단위에서 키 파기 과정(제로화, 할당해제)을 진행하지 않음
- 제로화
- 정의: 메모리에 저장된 암호 키 데이터를 0으로 덮어쓰는 과정
- 목적: 암호 키가 더 이상 필요 없을 때, 메모리에 남아 있는 민감한 정보를 삭제하여 외부로 유출되는 것을 방지
- 구현: memset(key, 0, sizeof(key));
- 할당해제
- 정의: 메모리에서 암호 키가 사용하던 공간을 반환하는 과정
- 목적: 더 이상 필요하지 않은 메모리 자원을 해제하여 시스템 자원을 효율적으로 관리하고, 암호 키가 저장된 메모리 영역을 다른 용도로 사용되기 전에 덮어씀
- 구현: free(key);
💡 키 파기 과정
: 키 자료들이 물리적 또는 전자적 과정에 의해 복구 될 수 없도록 키 자료에 대한 모든 흔적을 제거하는 방식
- 랜덤 비트열이나 모두 0 또는 1 로 이루어진 비트열로 데이터에 여러번 덮어쓰기
- 장시간 메모리에 저장된 키는 흔적이 남아있기 때문에 자주 업데이트되는 구성요소에 키를 분할하여 저장
(KISA 암호 키 관리 안내서 PDF, 49페이지)
랜섬웨어의 악성 행위가 끝난 후, ExitProcess 함수를 이용하여 자신을 종료시킴
→ 자신의 흔적을 제거하기 위해서
- ExitProcess
- Windows 운영체제에서 프로세스를 종료하는 함수
- 현재 실행중인 프로세스의 스레드가 모두 종료되고 모든 핸들이 닫힘
메모리 포렌식을 활용한 암호키 복원 가능성 확인 실험
실험 환경
VMware Workstation: 가상 분석환경 구축
FTK Imager, DumpIt: 메모리 추출
Volatility: 메모리 포렌식
x64bdg: 동적 분석
010 Editor: 메모리 내 존재하는 seed 찾기
Volatility를 활용한 Ragnar process 검색
- 배경
- 전역 변수 $seed_1$과 $seed_2$: 프로세스 내 데이터 영역에 존재
- 목적: Ragnar Locker 프로세스를 분석하여 $seed_1$과 $seed_2$ 획득 가능성 확인
- 실험과정
- Ragnar Locker 동작: 모든 악성 행위 후 ExitProcess 함수를 통해 자가 종료
- 탐지 방법:
- 현재 실행 중인 프로세스뿐만 아니라 종료된 프로세스도 검색
- psscan 기능 사용하여 프로세스 존재 여부 확인
- 실험 결론
- 총 7회 실험 수행
- 결과: Ragnar Locker 프로세스 발견 실패
- 결론
- psscan 기능을 사용한 탐지 시도에도 불구하고 Ragnar Locker 프로세스를 찾지 못함
동적 분석을 통한 seed 전수조사
- 배경
- 목표: 감염 후 메모리 내 $seed_1$과 $seed_2$ 값이 존재하는지 확인하여 파일 암호화에 사용된 키를 추측 및 구현 가능성 평가
- 실험 과정
- 가상 환경 설정:
- Ragnar Locker 랜섬웨어를 동적 분석
- 파일 암호화에 사용된 $seed_1$과 $seed_2$ 값 획득
- 파일 암호화 진행:
- 암호화 과정 실행
- 모든 악성 행위 종료 후 메모리 추출
- 메모리 분석:
- 010 Editor를 사용하여 추출된 메모리에서 $seed_1$과 $seed_2$ 값 검색
- 가상 환경 설정:
- 실험 결과
- 검색 결과: 메모리 내 $seed_1$과 $seed_2$ 값 모두 존재하지 않음
- 결론: 메모리 포렌식을 통한 암호 키 복원은 어려움
5. 파일 복호화 방안
암호키 생성 및 탐지의 한계점
- 메모리 분석: 암호키 생성에 사용된 $seed_1$과 $seed_2$ 획득 어려움
- 암호키 인증 문제: 추측한 암호키 검증을 위한 인증자가 없어 데이터 복호화하여 암호키 검증 해야함
배경
암호키 생성 과정
- CryptGenRandom 함수: 암호학적으로 안전한 난수 생성기
- SHA512 해시 함수: 암호학적으로 안전한 해시 알고리즘
- $seed_1$과 $seed_2$: 각각 40바이트와 32바이트 크기의 값으로 랜덤하게 생성
전수조사 불가능성
- $seed_1$과 $seed_2$
- $seed_1$과 $seed_2$를 찾는 것은 $r_1$과 $r_2$를 전수조사하는 것과 동일
- 40바이트의 $seed_1$과 32바이트의 $seed_2$를 랜덤하게 추측하는것과 동일
- Salsa20 암호 알고리즘
- 초기 상태인 64바이트를 전수조사하는 방법도 있음 (0으로 고정되는 position 값 제외하면 56바이트)
- 전수조사 필요량: 약 $2^{448}$ 계산량으로 현실적으로 불가능
키 재사용 공격을 통한 복호화
- 동일한 암호 키 사용: 모든 파일 암호화에 동일한 키 사용
- 원본 파일 필요: 감염된 파일과 대응되는 원본 파일을 통해 키 스트림 획득
- 키 스트림 획득 및 복호화:
- 원본 파일과 감염된 파일을 XOR 연산하여 키 스트림 획득
- 획득한 키 스트림으로 다른 감염된 파일 복호화 가능
- → 단점: 획득한 키 스트림의 길이가 복호화 대상 파일의 크기보다 작은 경우, 키 스트림의 크기만큼만 복호화 가능
복호화 알고리즘
1. 입력: 감염된 파일 File1, **File2**와 **File1**의 원본 파일 Original File
2. 키 스트림 획득: **File1**과 **Original File**을 XOR 연산키 스트림 획득
3. 복호화 대상 파일 길이 결정:
- 키 스트림이 감염된 파일보다 길 경우: 전체 파일 복호화
- 키 스트림이 짧을 경우: 키 스트림 길이만큼 복호화
4. 복호화 수행: 키 스트림과 File2를 XOR 연산하여 원본 파일 획득
복호화 실험
- 원본 파일 획득 방법:
- Windows 7 기본 사진 파일
- C:\\Users\\Public\\Pictures\\Sample Pictures 경로의 파일 사용
- 해당 사진은 인터넷에서 다운 받아 원본 파일 획득
- 이메일 또는 메신저
- 주고받은 파일을 다시 저장하여 원본 파일 획득
- Windows 7 기본 사진 파일
- 결과: 감염된 파일을 올바르게 복호화복호화 성공 결과
6. 활용 방안
블록 암호에 키 재사용 공격의 적용
Ragnar Locker 랜섬웨어의 경우 하이브리드 암호 시스템을 사용했지만, 스트림 암호에 동일한 키를 사용하여 키 재사용 공격이 가능했음.
→ 해당 취약점은 블록 암호에도 적용될 수 있음
블록 암호
블록 암호의 운용 모드 중 CTR 모드와 OFB 모드도 스트림 암호와 유사한 방식으로 동작함
→ 암호키를 통해 키 스트림을 생성하고 이를 평문과 XOR함
따라서, 블록 암호에서도 동일한 암호키와 초기 벡터(IV)를 재사용하면 키 재사용 공격이 가능
유사 사례 - 데이터 암호화 애플리케이션
"LockMyPix"와 "Privary"의 미디어 파일 복호화 연구에서 유사한 복호화 방법 사용
→ 랜섬웨어뿐 아니라 다양한 환경에서 키 재사용 문제 발생 시, 동일한 복호화 방안 적용 가능
따라서, 암호키 없이 암호화된 데이터의 복호화 가능성 높일 수 있음
7. 결론 및 논의
주요 내용
- 하이브리드 암호 시스템: 최신 랜섬웨어는 공개키 암호와 블록 암호 혹은 스트림 암호를 결합한 하이브리드 암호 시스템을 사용
- 스트림 암호의 취약점: 동일한 키를 반복 사용하면 암호학적 취약점 발생
Ragnar Locker 랜섬웨어 사례
- 동일한 키 재사용: 파일 암호화에 사용된 스트림 암호 알고리즘에서 동일한 키를 반복 사용
- 키 재사용 공격 가능: 공격자의 개인키 없이도 암호화된 파일 복호화 가능
- 실험 증명: 연구를 통해 키 재사용 공격의 가능성 증명
한계점 및 해결책
- 한계점: 원본 파일 획득이 어렵거나, 원본 파일 길이가 충분하지 않으면 감염된 모든 파일의 복호화가 어려움
- 해결책: 운영체제마다 저장된 고유한 파일을 활용하여 복호화 가능
결론
- 암호화 설계의 중요성: 안전한 암호 알고리즘을 사용하더라도 잘못 설계하면 취약점 발생
- 미래 적용: 동일한 키를 재사용한 경우, 본 연구 결과를 바탕으로 암호화된 데이터를 복호화할 수 있을 것으로 기대
'study > 논문' 카테고리의 다른 글
[논문] 윈도우 환경에서의 메모리 해킹 방지 시스템 연구 (1) | 2023.11.20 |
---|---|
[논문] 단편화된 실행파일을 위한 데이터 구조 역공학 기법 (0) | 2023.10.01 |
논문 읽는 법 (0) | 2023.09.07 |