랜섬웨어 Petya 분석과 최근 랜섬웨어 동향
* 본 내용은 i-Keeper CERT 5회차 세미나에서 발표한 내용 자료입니다.
목차
1. 랜섬웨어란
2. 랜섬웨어 Petya
3. Petya에 감염된 PC windows 7 분석 및 복호화
4. 최근 랜섬웨어 동향
5. 결론
6. 요약
1. 랜섬웨어란
- Ransom (몸값) + Software (소프트웨어) 의 합성어이다.
- 피해자의 시스템이나 데이터 및 정보들을 인질로 삼아 피해자들에게 금전적인 요구를 하는 악성 소프트웨어이다.
2. 랜섬웨어 Petya
2.1. 소개
- 2016년 처음 발견된 랜섬웨어.
- MBR 부분을 암호화한 후 강제로 재부팅하고 하드 디스크의 모든 파일에 접근할 수 없도록 만든다.
- Windows 운영체제인 PC를 표적으로 삼는다.
- 주로 위장된 이메일 첨부파일을 통해 확산된다.
2.2. NTFS 구조 (간략화)
2.2.1. MBR
- Master Boot Record.
- 운영체제가 어디에, 어떻게 위치해있는지를 식별하여 컴퓨터의 주기억장치의 적재될 수 있게 하는 정보.
- 하드디스크의 첫번째 섹터에 위치한다.
- 512 byte (부트코드 446 byte + Partition Table 64byte + 시그니처 2byte)
- 파티션 테이블에 어떤 파일시스템인지가 기입되어있다.
2.2.2. VBR
- Volume Boot Record.
- NTFS로 포맷된 파티션의 가장 앞부분에 위치하는 영역.
- 부트 섹터, NTLDR 위치 정보, 추가적인 부트 코드가 저장된다.
2.2.3. MFT
- Master File Table.
- NTFS는 파일, 디렉터리, 메타정보를 모두 파일 형태로 관리한다.
- 각 파일의 위치, 속성, 시간정보, 이름, 크기 등의 메타정보는 MFT Entry라는 특별한 구조로 저장된다.
- 일반적으로 볼륨의 12.5% 정도가 MFT 영역으로 할당된다.
2.2.4. DATA
- 파일의 실제 데이터를 담고있다.
2.2.5. 부팅 과정
1) BIOS 에 의해 POST (Power On Self-Test) 과정이 진행된다.
2) 추가 BIOS(SCSI, Video 등) 가 로드 된다.
3) 앞선 과정을 거치고 나면 하드 디스크 드라이브의 MBR 부트코드를 호출한다.
4) MBR의 부트코드는 16bit 기계어 코드들로 이루어져 있다.
MBR의 파티션 테이블을 참조하여 부팅이 가능한 파티션을 구분한 뒤 해당하는 파티션의 VBR 부트 코드를
호출하는 기능을 수행한다.
2. Petya에 감염된 PC windows 7 분석 및 복호화
2.1. Window 7 (이미 감염 된 상태)
가상머신을 실행하자마자 빨간 화면이 계속해서 뜬다.
아무키나 누르면 금전을 요구하는 화면으로 바뀐다.
계속해서 이 화면이 뜬 채로는 아무것도 분석을 할 수 없기 때문에 HxD로 PET.vmdk 파일을 열어본다.
- 특정 값 '0x564d444b'를 가진다.
- vmware 의 파일인 vmdk 의 파일형식임을 알 수 있다.
- offset 0x40~47
- MBR 시작 주소 값을 저장하고 있다.
- windows 이므로 리틀엔디언 방식이다. 즉, 803C -> 3C80
HeX 값 3C80 을 계산기에 넣어보자. 15,488. 즉, 15,488 섹터이다.
실제로 감염 된 상태의 하드디스크를 간략화 한 표이다.
15,488 섹터를 0x0라고 생각하고 분석을 해보면
0x0 - 0x200
악성 MBR (512 byte)
- Boot code (446 byte)
- Partition Table (64byte)
- Signature (2byte)
0x4400 - 0x200
기존 데이터 XOR 0x37 (16,896 byte)
0x6400 - 0x4400
악성데이터 (8192 byte)
0x6C00 - 0x6400
기존데이터 (2,048 byte)
0x6E00 - 0x6C00
악성데이터 (512byte)
0x7000 - 0x6E00
0x37373737 .... ("7777777...") (512 byte)
0x7200 - 0x7000
0x37 연산 된 원본 MBR
2.2. 복호화
0x37 연산된 원본 MBR 을 복사하여 새 파일을 만들어준다.
XOR_mbr 로 저장한다.
(복호화 해주는 petya.exe 가 이름을 바꾸면 인식을 못하기때문에 이름 양식 맞춰주기)
petya.exe ?
XOR 연산 암호화 과정
XOR (배타적 논리합) 연산은 두 비트가 서로 다를 때 1를 반환하고 같을 때 0을 반환하는 논리연산이다.
1. 키 생성 : 암호화에 사용할 키를 생성한다. 키는 평문(암호화할 데이터)과 같은 길이여야한다.
2. 암호화 : 평문과 키를 비트 단위로 XOR 연산하여 암호문을 생성한다.
3. 복호화 : 암호문과 같은 키를 다시 XOR 연산하여 평문을 복원한다.
암호화
평문: 01010100
키: 00101100
암호문: 01111000 (평문과 키를 비트별 XOR 연산)
복호화
암호문: 01111000
키: 00101100
평문: 01010100 (암호문과 키를 비트별 XOR 연산하여 원래 평문 복원)
Petya 의 경우 0x37 (십진수 55) 를 키로 사용하였다.
def xor_decrypt(hex_string, key):
# 16진수 문자열을 바이트 배열로 변환
try:
byte_array = bytes.fromhex(hex_string)
except ValueError as e:
print(f"입력 값에 오류가 있습니다: {e}")
return ""
# XOR 복호화
decrypted_bytes = bytearray()
for byte in byte_array:
decrypted_bytes.append(byte ^ key)
# 복호화된 데이터를 16진수 문자열로 변환하여 반환
return decrypted_bytes.hex()
def main():
# 사용자로부터 16진수 문자열 입력 받기
hex_input = input("암호화된 데이터를 16진수 문자열로 입력하세요: ").replace(" ", "")
# XOR 키 설정
key = 0x37
# 복호화 수행
decrypted_hex = xor_decrypt(hex_input, key)
# 복호화된 데이터 출력
if decrypted_hex:
print("복호화된 데이터 (16진수 값):", decrypted_hex)
if __name__ == "__main__":
main()
PETYA 응용프로그램 실행시 ORI_mbr 가 생성된다.
악성 MBR이 있던 자리
0x0 - 0x200 (512 byte)
에 붙여 넣고 저장해준다.
offset 79200 - 7971FF 까지 악성/기존 데이터 부분 전부 0으로 씌운다.
복구 완료
4. 최근 랜섬웨어 동향
정보보호학회지 제 32권 제3호, 2022년 6월
4.1. 개요
- 비트코인과 같은 가상화폐의 등장으로 익명성을 보장하게 되면서 공격자의 계좌 추적이 어렵기 때문에 공격자들은 몸값의 대가로 가상화폐를 요구하는 일이 많아졌다.
- 서비스형 랜섬웨어 (RaaS, Ransomware as a Service) 의 등장으로 랜섬웨어 공격의 진입장벽이 낮아졌다.
- 랜섬웨어 개발자가 자신의 멀웨어를 다른 해커에게 판매하는 사이버 범죄
4.2. 랜섬웨어 피해예상
- Cybersecurity Ventures(미국 정보보안 사이트) 의 보고서에 따르면 랜섬웨어로 인한 피해액은 2015년 약 $3억에서 2017년 $50억으로 약 15배 증가
- 2031년까지 $2,650억 이상의 규모로 증가할 것으로 예상된다.
4.3. 랜섬웨어 변화과정
1세대
랜섬웨어에 감염된 환경에서 랜섬웨어가 실행되면 정보 및 데이터 암호화 에 사용할 대칭키를 생성한다.
암호화에 사용된 대칭키는 핸섬웨어의 자체에 존재하는 공개키로 암호화되어 은닉된다.
암호화 수행이 완료되면 바탕화면 변조나 랜섬노트를 생성하여 사용자에서 감염 사실을 알린다.
랜섬노트에는 지불해야할 가상화폐 금액과 공격자의 가상 화폐 주소가 기록되어 있다.
공격자는 금액이 지불되면 사용자에게 복호화 키를 전달한다.
2세대 (이중 갈취)
- 암호화 이전에 데이터를 우선적으로 확보한 후, 공격 대상 환경의 데이터 및 시스템 을 암호화한다.
- 암호화된 시스템을 인지한 사용자들이 요구 금액을 지불하지 않을 때, 공격자는 우선적으로 입 수한 사용자의 데이터 및 정보를 다크웹이나 자신들이 운영하는 웹사이트에 공개하기 시작한다.
- 지갑 탈취 형 악성코드
- 피해자가 암호화폐를 송금하기 위하여 수신자의 지갑 주소를 입력 할 때, 해당 주소를 공격자 자신의 지갑 주소로 바꿔치기한다.
- 이때 공격자는 약 1만개의지갑주소를악성코드에 심어 놓았으며, 피해자가 입력하는송신자의지갑주소와 가장 유사한 것을 선택하여 바꿔치기한다.
- 채굴형 악성코드
- 채굴형악성코드들은 랜섬웨어에 감염된 사용자의 환경에 가상화폐 채굴도구를 설치한다.
- 감염된 환경에서 채굴된 가상화폐를 공격자 자신의 계좌로 전송하여 가상화폐를 획득한다.
- 공격자는 감염 환경의 컴퓨팅 자원을사용하여 부가적인 수익을 얻을 수 있다.
3세대
- 3중 협박 형태로 랜섬 디도스 공격을 수행한다.
- 랜섬디도스(RDDoS)는 랜섬웨어 공격과 더불어 디도스(DDoS) 공격을 혼합한 형태를 말하며 특정한 서비스나 전제적인 네트워크를 디도스 공격을 수행하여 중단시키겠다고 협박한다.
- 디도스 공격을 먼저 수행하고 공격 중단을 위하여 금전을 요구하거나, 디도스 공격 이 전에 희생자에게 먼저 연락하여 금전을 요구하는 방식을 사용한다.
- 보통은 개인보다는 기업을 대상으로 공격을 수행하며, 공격 받은 기업의 이메일이나 보안담당자 에게 이메일로 협박을 수행한다.
- 기업에서 대응하지 않거나 금전을 지불하지 않을 경우에는 실제로 작은 규모의 디도스 공격을 수행하기도 한다.
4세대
- 판매하는 조직과 실제로 랜섬웨어를 배포하는 배포자가 수익을 분배한다.
- 원활한 협상이 필요하다면 조직의 협상전문가가 협상을 진행하기도 한다.
5. 결론
- 최근의 랜섬웨어들은 불특정 다수를 대상으로 공격을수행하던 방식과 다르게 특정 기업이나 기관을 노린 표적형 랜섬웨어공격이 많다.
- 조직화된 해킹 그룹들이 서비스형 랜섬웨어를 제작하여 배포함으로써 공격 횟수와 피해 규모는 날로 늘어날 것.
- 이러한 위협에 대응하기 위해서는 랜섬웨어에 대한 지속적인 관심을 가지고 피해를 사전 예방하고자 하는 노력이 필요할 것.
6. 요약
- 랜섬웨어 Petya에 대해서 분석해보고, 관련 응용프로그램 툴의 작동방식을 유추해보고, 최근(2022년 기준) 랜섬웨어 동향에 대해 조사해보았다.
- Petya는 MBR 이라는 하드디스크 가장 맨 앞에 있는 부팅을 담당하는 부분을 암호화 시키고 피해자의 PC를 재부팅하게 만들어 접근불가하게 만드는 랜섬웨어이다.
- 복호화 방법의 가장 핵심적이었던 것은 악성 MBR, 중간중간 악성 데이터들의 데이터를 덮어씌워 0으로 처리하고, 본래 있던 0x37 로 암호화 된 데이터를 복호화 툴 / 직접코딩 / 사이트 등을 통해 복구한 후 원래 있어야 하는 MBR 자리에 찾아서 붙여넣어주는 것이다.
- 사실 windows 10 도 비교해보고 싶었는데.. 바쁨..이슈로 하지 못했다. 다음에 보고서 형태로 제출하도록 하겠다.
- 최근 랜섬웨어의 동향은 역할이 배분된 거대한 형태의 공격이다.
- 서로 랜섬웨어를 사고 팔기도 하는 구조.
랜섬웨어 Petya
https://www.cloudflare.com/learning/security/ransomware/petya-notpetya-ransomware/
NTFS 파일시스템 구조
https://github.com/proneer/Slides
GitHub - proneer/Slides: Slides
Slides. Contribute to proneer/Slides development by creating an account on GitHub.
github.com
vmawre 구조보기
https://www.vmware.com/app/vmdk/?src=vmdk