리눅스에서 랜섬웨어는 무슨 차이가 있을까
- 보안 정보/악성코드 관련 정보
- 2017. 3. 3. 14:39
malwares.com 코드분석팀 분석 자료
<부제 : 랜섬웨어 >
1. 개요 -
< Figure0. 감염 타겟 경로 >
리눅스의 모든 디렉토리를 crypto_lock함수의 인자로 호출해 암호화를 시도한다. 감염 후 시간이 흐른 뒤, 명령어도 암호화되어 시스템 명령을 실행할 수 없다.
< Figure1. 암호화 코드 >
랜섬웨어는 키를 만들고, 키를 이용하여 암호화를 진행한 뒤, 서버로 키를 전송하는게 일반적이다. 분석하고 있는 샘플에서도 gen_key에서 키를 생성하여 crypt_all에서 암호화를 진행한다. 파일 크기에 따라 같은 암호화를 여러번 진행한다.
< Figure2. 암호화 키 생성 >
현재시간으로 seed값을 설정해준 뒤, 랜덤함수를 이용하여 키를 8자리씩 3번 생성한다. 키를 알고있다면, 해커의 도움 없이도 파일을 복구할 수 있게되는데 위의 코드에는 취약점이 존재해 키를 유추할 수 있다.
< Figure3. 암호화 코드 >
생성한 암호화 키 3개로 DES(ECB)로 암호화를 진행한다. 이전에 블로그에서 포스팅 했던 "Marlboro 랜섬웨어" 본문에서 ECB 모드에 대해 이렇게 밝혔다. "암호화에는 대표적으로 ECB,CBC가 있는데 ECB는 암호문이더라도 하나의 블록이 분석이 된다면, 전체를 파악할 수 있어 큰 단위에 부적합하다."
< Figure4. 리눅스 랜섬웨어 감염 화면 >
암호화가 모두 완료되면 시스템이 강제적으로 재시작되며, 복구를 위해서 222BTC(한화 약 3억원)을 요구하는 화면이 나타나 다른 작업을 할 수가 없다. 그런데 서버로 키를 전송하는 루틴은 없었다. 결국에는 해커도 피해자의 키를 알 수 없으므로 해커가 요구하는 비트코인을 전송해도 복구해줄 가능성이 매우 낮다.
< Figure5. 고정된 srand 사용 >
일반적으로 랜덤한 값을 사용하고자 할 경우, SEED를 설정하고 rand를 사용한다. 하지만 SEED를 같은 값을 설정하고 rand를 호출할 경우, 같은 값을 받을 수 있다. 이렇게 되면 랜덤의 의미를 잃게되는데 분석하고 있는 랜섬웨어에서는 3번의 키생성에서 각각 현재시간으로 생성하지만 3번의 키를 생성하는동안 1초도 흐르지 않을 가능성이 매우 높다. 그러므로 3번의 키생성은 같은 키를 만드므로 취약하다.
< Figure6. 고정된 srand 사용 문제점 >
계속 실행해도 같은 결과임을 통해 고정된 SEED 사용으로 키 생성에 문제가 있음을 증명할 수 있다.
< Figure7. 동적디버깅으로 확인한 키 값 >
생성된 Key1,Key2,Key3를 값은 같았다. Key1은 다른 연산을 통해 변화가 이루어진다.
< Figure8. SEED 값 검색 >
디버깅한 결과와 같은 키값을 만들어내는 TIME값을 브루트포싱으로 찾아냈다. 감염된 날짜를 알고있다면, 몇초면 찾을 수 있을 정도로 속도가 빠르다.
< Figure9. 복구 연산 >
찾아낸 TIME값을 이용해 암호화 연산을 반대로 진행하는 코드를 작성해 복구를 시도해기로 했다.
< Figure10. 암호화 파일 >
- 파일:12345678 [내용을 알고있다고 가정]
->(HEX)0358a774a3c29b790a
- 파일:Secret
->(HEX)8d796e154a6f1da591a760c87deb2f306e0c91aaa82f77d0
복구를 시도해보기 위해서 랜섬웨어에 감염되기전 파일을 두개 생성했다. 하나의 파일을 8자리는 알고있다고 가정했다. 실행파일의 헤더부분이라도 8자리만 맞으면 TIME값을 예상할 수 있어, 크게 불가능한 가정은 아니다. ECB모드이므로 평문과 암호문의 길이에 영향이 없다는점도 이용할 수 있는 취약한 벡터다.
< Figure11. 파일 "12345678" 암호문 >
복구된 파일의 내용이 12345678이라는 내용을 담고있는 SEED값을 무차별대입해 "1489399667" 라는 값을 구했다.
< Figure12. 파일 "Secret" 암호문 >
위에서 얻은 SEED값을 가지고 Secret파일을 그대로 복구를 시도했더니 "Linux KillDisk Decrypt!" 문자열을 얻을 수 있었다. 시스템에 따라서 몇초의 시간적 오차가 있을 수 있으나, 어렵다던 해외 기사와는 다르게 감염 시점의 시간과 파일내용의 8글자만 알 수 있다면, 충분히 모두 복구가 가능했다.
3. 파일 정보
MD5 : B9748EC5A7A0E3BC3CA139083CA875B0
SHA-1 : 8F43BDF6C2F926C160A65CBCDD4C4738A3745C0C
SHA-256: 8A04F8481F1EF57F66B974802919E936C59A32D1CD9EF83186E6911B9AE773B0
'보안 정보 > 악성코드 관련 정보' 카테고리의 다른 글
의심스러운 설치파일 분석보고서 (0) | 2017.05.22 |
---|---|
안드로이드 악성코드 (0) | 2017.03.30 |
10만원. 싼맛에 복호화 하렴 Erebus 랜섬웨어 (0) | 2017.02.20 |
목적을 알 수 없는 봇넷 (0) | 2017.02.15 |
Marlboro 랜섬웨어 (0) | 2017.01.12 |
이 글을 공유하기