일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 판례평석
- 악성코드 분석
- 블랙바스타
- 보안사고 회고
- Malware Tool
- VirtualAddress
- 독서
- 릭 릭스비
- 우크라이나
- CISO 제도 분석
- 분석
- L:azarus
- 부다페스트 협약
- 오픈소스 관리체계
- Black Basta
- 악성코드분석
- 악성코드
- 랜섬웨어
- 사이버안보 협약
- MALWARE
- 랜섬웨어 분석
- 오래된 지혜
- 디지털 증거의 증거능력
- 사이버안보
- 국제 사이버 범죄
- 러시아
- CAN Network
- x64dbg
- 오픈체인
- Fileless
- Today
- Total
봔하는 수달
[2022 RSA Conference 시리즈] Breaking Prometheus Ransomware Crypto Goes Wrong 본문
[2022 RSA Conference 시리즈] Breaking Prometheus Ransomware Crypto Goes Wrong
봔수달 2023. 1. 19. 10:472022년도 6월 우연한 기회로 해외연수의 기회가 주어졌다.
결론부터 말하자면 학생으로서 본분의 일과 일정이 겹쳐서 대면으로 참석할 수 있는 기회는 포기했지만 정말 운이 좋게도 온라인 티켓으로 대체를 해주셔서 인상적으로 봤던 몇가지를 기록하고자 한다.
오늘은 그 중 가장 인상깊었던 랜섬웨어의 암호 취약점을 통해 복호화하는 세션에 대해서 리뷰하고자한다.
https://www.youtube.com/watch?v=PlOjfpXWRyE
Break Ransomware
해당 세션에서는 프로메테우스 랜섬웨어의 암호 취약점을 이용하여 랜섬웨어를 복호화하는 원리와 시연을 확인할 수 있었다. 최초 분석가는 랜섬웨어를 분석하고 간파하기 위해 아래와 같은 전략을 수립한다.
Identify source material
public code re-use
Identify weaknesses
Focus on the file encryption key and associated parameters
Think outside of the box
Don’t try to get the private key
Don’t try to brute force entire key space
client had a ransomware event
Multiple ransomware binaries discovered across several machines
Encrypted files and no good backups
File submitted for analysis
Prometheus ransomware
위 내용은 기본적으로 특정 랜섬웨어뿐만 아닌 통상적인 랜섬웨어를 분석할 때에도 사용되는 방법론으로 RaaS의 랜섬웨어의 특징인 Public 코드에 대해서 재사용률이 높고 무리하게 개인 키와 전체 키 공간에서 무작위 대입 공격을 수행하는 행위는 지양하라는 말이 담겨있다.
Methodology about Analyzing Prometheus
해당 분석가는 다음과 같은 분석 스텝을 소개하였다.
First – Undertstand the ransomware behavior
가장 먼저 해당 랜섬웨어의 행위에 대해서 알아야한다. 그렇기에 샌드박스 환경 에서 수행을 하여 해당 랜섬웨어의 행위를 관찰한다.
Run in analysis environment sandbox
Observe behavior
Second – Determine “How” exactly Prometheus encrypts files
어떤 방식으로 프로메테우스가 파일을 암호화하는지 확인하기 위해 리버스 엔지
니어링을 통해 암호화 루틴을 분석하고 복구 가능 여부를 확인한다.
Determine the encryption method
Work backwards to dermine the inputs to the encryption algorithm and
whether we could recover them
분석을 통해 샘플 사이에서 변경되지 않은 하드코딩 되어있는 IV(Initial Vector)를 사용하는 부분을 확인한다.
해당 랜섬웨어에서의 키 생성 루틴은 C#에서 제공하는 Random 함수를 사용하였고 32비트 이하의 값을 이용함, 이를 통해 분석가는 해당 비트를 통해서 파일 암호화 키를 생성하는데 사용할 것이라고 추측.
그리하여 분석가는 Random 함수의 레퍼런스를 분석을 진행하여 다음과 같은 사실을 확인.
Random() by default uses Environment. TickCount as the seed.
Environment.TickCount is a 32-bit number representing the amount of
time since the system started
Remarks
해당 속성의 값은 시스템 타이머에서 파생되며 32비트 부호에 있는 정수로 저장됩니다. TickCount 속성은 시스템 타이머에서 파생되므로 일반적으로 10~16ms의 범위인 시스템 타이머의 해상도로 제한됩니다.
Predicting Environment.TickCount
In order to guess the key, you need a place to start. This helps limit the
keyspace you need to brute force.
Take the difference between the boot time and a file time stamp.
If its less than INT_MAX, no further operations are required.
Otherwise, obtain the offset from INT_MIN and add it to INT_MIN
Decryption Optimizations
There are potential optimizations due to the seed being dependent on time.
Files encrypted after another file will have a larger seed value.
It is possible to sort files by last write time in order to not have to continuously recalculate the potentioal tic count and ensure that the estimates are more accurate.
Seed values are relatively close to each other on each infected device.
암호에 사용되는 시드가 시간에 따라 달라지기 때문에 잠재적으로 최적화가있습니다. 이는 파일 이후에 암호화된 파일의 시드 값이 더 크다는 특성을갖고있고 이를 카운트하며 지속적으로 재 계산하기 위해 쓰기 시간별로 파일을 정렬하면 감염된 장치별 시드 값이 상대적으로 가깝다는 것을 확인 가능합니다.
Break once, then reapply
Malware familes often reused code (even vulnerable code)
Ransomware famileds have similar vulnerabilities.
Some data is hard-coded
Non-secure random number generators rely on the seed value entirely for randomness
Applicable to other ransomware families and multiple programming languages
C# Random, Java Random, C rand() etc ...
Ransomware Family | Vulnerability |
Prometheus | Used C# Random to Generate Keys |
AtomSilo | Used time64() and rand() to generate keys |
LockFile | Used time64() and rand() to generate keys |
Bandana | Used C# Random to generate keys |
Chaos | Used C# Random to generate keys |
PartyTicket (new) | Default seed value of Golang's Math.Rand() - generated key is constant |
악성코드의 경우 비슷한 유형의 코드 패턴을 가진 것 들을 패밀리라고 통칭한다.
이런 비슷한 코드들의 경우 보통 코드 재사용률이 높은데 코드에 취약점이 존재하더라도 재사용률이 상당히 높다. 이러한 취약점을 가진 랜섬웨어는 패밀리에서 유사한 취약점을 가지고 있습니다.
Example – Bandana Ransomware
Like Prometheus, Bandana is Written in C#
Uses AES-256 to Encrypt Files
Added a new layer – RFC2898DeriveBytes class
In order to the obtain key, we need the “password” passed to the function RFC2898DeriveBytes()
Luckily “password” is generated by C#’s Random() and SHA256 hashed
SHA256 Hash the results of the potential “password”
Pass the “password” to RFC2898DeriveBytes
Get the “Key” and “IV”
Files are encrypted with AES-256-CBC using PKCS7 padding
Decrypt file data and attempt to match to known plaintext value
Key Difference
Only one encryption key is used to encrypt all files
Decrypting file data and attempt to match to known plaintext value
Allows for guaranteed decryption, if at least one file encrypted on the system has known content
Example: Chaos Ransomware
Chaos ransomware is also like Prometheus
Hardcoded salt (1, 2, 3, 4, 5, 6, 7, 8)
RFC2898DeriveBytes, with Random() generated password
AES-256-CBC encryption
Main difference is the File format:
“<EncryptedKey>” + <RSA encrypted RFC2898DeriveBytes password> + “<EncryptedKey>” + <Encrypted Data>
Investigate Creating a Decryptor Framework
To create a decryptor that exploits key generation weaknesses:
Determine the encrypted file format
Extract the encrypted data - remove any junk
Determine the encryption algorithm
Determine success
Some areas of the ransomware samples will require deeper analysis
Determine the Encrypted File Format
Requires detailed analysis
Usually consists of two parts:
Encrypted data
Symmetic(대칭) Key and IV
Encrypted with an asymmetric algorithm
Failures & Lessons learned
다양한 랜섬웨어 암호화 로직에서 해독기는 고정된 단일 크기로 접근하는 방식은 사용이 불가능하다.
키 취약점이 존재하더라도 암호화된 파일과 암호화 이전 파일을 갖고 있지 않은 경우에는 해독할 수 없다.
Prometheus를 사용하면 암호화된 키가 파일에 추가됩니다. 그러나 해당 키는 OAEP 패딩으로 암호화되므로 파일의 암호화된 키를 암호화된 추측키와 비교할 수 없다.
새로운 버전의 유사한 랜섬웨어는 우리가 암호화를 깨더라도 수정한 버전으로 다시 출시 될 것이다.
Framwork development and research is on-going.
'정보보안 > 동향' 카테고리의 다른 글
[법률 동향] CISO 개정안 제도 분석 (0) | 2023.02.14 |
---|---|
[동향] 사이버범죄협약[부다페스트협약] (2) | 2023.01.19 |
[보안 동향]오픈소스 취약점에 대한 고찰 (0) | 2023.01.17 |