-
랜섬웨어 분석 및 개발개발 프로젝트/랜섬웨어 ( ransomware) 분석 2021. 12. 5. 09:46728x90
주의
이 프로젝트는 2016년 랜섬웨어에 대한 분석글을 보고 최소 기능을 구현한 프로젝트
랜섬웨어 배포는 명백한 불법이므로 해당 프로그램은 배포하지 않습니다.
또한 최소 기능만을 실험한 것이므로 암호학 관점에서만 의미가 있을뿐 랜섬웨어의 그 기능을 다 하지도 않습니다.
암호학에 관심이 있어 최소 기능만 구현한 것이므로 랜섬웨어라고도 할 수 없습니다. 따라서 이에 대한 어떤 문의도 소스코드 공개도 없습니다.
개발
Libs
QT5, c++, boost, curl
Algorithm
AES256 CBC (pw, iv)
SHA256
RSA 4096
랜섬웨어는 사회적으로 매우 큰 피해를 주는 악성적인 프로그램이다.
하지만 랜섬웨어를 자세히 들여다 보면 디지털 암호학에 대해 매우 잘 이해하고 있음을 알 수 있다.
대칭키(AES)와 공개키 기반(PKI, RSA) 를 이용해 데이터를 암호화 하는 방법은 현대 암호학에서 자주 사용되는 방법이다.
내가 생각하기에 해커는 총 3개의 프로그램을 구성 햇을 것이다.
1. 해커가 사용하는 키 관리 프로그램
해커는 비밀키를 소유하고 있다가 돈을 지불한 사람에게 해당 비밀키를 이용해 공개키로 암호화된 AES 대칭키를 복호화 후 복호화된 평문 대칭키를 전달하는 방법을 택햇을 것이다.
만약 암호화된 피해자의 파일이 동일한 AES 대칭키를 사용했다면 해당 대칭키로 모두 복호화가 가능하다.
해커가 검거되어 파일이 복호화 됐다는 기사는, 해커의 마스터키를 이용해 위 과정으로 복호화 한 것이다.
제작한 프로그램은 다음과 같은 기능을 갖는다.
Asymmetric Symmetric key studio
1. Client Key(RSA Key) 생성, 관리
2. Hashpot(AES256으로 암호화된 파일) 파일 분석
2.1 분석을 통해 RSA Public key 추출
2.2 Client의 RSA Private Key 전달
2.3 마스터키를 사용하는 경우면 암호화된 파일 분석후 복호화된 AES 대칭키만 전달
3. AES256(Password, IV) Encrypt, Decrypt
4. Web Server 연동(Key 관리) (구현하지 않음)
5. 감염 Client 확인 (구현하지 않음)
6. Server 연결 상태 확인 (구현하지 않음)
4,5,6 번은 랜섬웨어의 비즈니스 모델이다.
보통 Tor 네트워크로 접근가능한 onion 사이트에서 그 기능을 하고 있다.
특정 파일 하나 올리면 복호화 해 준다던지. 해당 파일을 올렸을때 피해자 파일에 기록한 여러가지를 취합해 고객(?) 관리를 햇을 것이다.
따라서 어떻게 설계햇을지만 분석하고 구현은 하지 않았다.
2. 피해자 PC 에서 위 방법으로 암호화를 진행하는 랜섬웨어
별도의 UI가 없이 여러가지 exploit 방법을 통해 백그라운드에서 돌아가는 랜섬웨어 파일이다.
구현 관점은 여러가지인데 나열하면 다음과 같다
나는 두가지 모두 구현하였다.
1. 마스터키 사용 케이스
1.1 피해자 파일 오픈
1.2 AES 256 PW, IV 랜덤키 생성
1.3 AES 256 CBC 로 파일 전체 암호화
1.4 AES 256 PW, IV 평문 대칭키를 마스터키(Public key) 로 암호화
1.5 공개키로 암호화 된 부분 파일에 함께 기록
2. 마스터키 사용하지 않는 케이스
2.1 피해자 파일 오픈
2.2 RSA or ECC 키 세트 생성
2.3 Private key 해커의 서버로 전송, 전송시 피해자를 식별할 수 있는 하드웨어 시리얼 혹은 특정 대칭키를 함께 전송, 전송후 Private key 삭제
2.4 AES 256 PW, IV 랜덤키 생성
2.5 AES 256 CBC 로 파일 전체 암호화
2.6 AES 256 PW, IV 평문 대칭키를 피해자 PC 에서 생성한 Public key 로 암호화
2.7 공개키로 암호화 된 부분 파일에 함께 기록
랜섬웨어에 걸린후 당신의 PC는 강력한 암호화 알고리즘 RSA 어쩌고 하는데 이 말은 반절만 맞는말이다.
공개키 기반의 암호화 방식은 AES 에 비하여 암,복호화가 느리고 사이즈 제한도 있다.
따라서 위 1,2번 방식대로 대칭키 + 공개키(비대칭키) 를 함께 섞어 구현햇을 것이다.
3. 복호화 프로그램
군대에서 K1을 사용햇는데 병기 정비를 할때 "조립은 분해의 역순"이라고 했던말이 떠오른다.
10년도 더 됐는데 아직도 기억에 남는다.
복호화는 암호화의 역순이다.
먼저 피해자 파일 하나를 수집한다.
피해자 파일에는 해커가 다음과 같이 기록했을 것이다. 나또한 그것을 분석 , 추측하며 다음과 같이 기록해두었다.
File.hashpot
- Client unique key // 피해자 식별 고유키
- Encrypt type // 마스터키를 사용햇는지 아닌지 등의 식별 추가 정보
- Encrypted by RSA (AES 256 PW, IV ) // RSA 퍼블릭키로 암호화 된 AES 평문 키
- Encrypted by AES 256 (file raw) // 원본 파일을 AES 256 으로 암호화한 파일 본문
HashPot select key 로 비밀키를 선택하고, 해당 비밀키로 File.hashpot 을 오픈 후 파일 분석 후
다음과 같은 복호화 과정을 진행한다.
1.1 파일 분석 ( Client unique key, Encrypt type 이용)
1.2 비밀키를 이용해 공개키로 암호화된 AES 256 PW, IV 복호화
1.3 복호화된 평문 PW, IV 를 이용해 파일 원본 raw chunk 에 대해 복호화 진행
1.4 파일에 기록되어 있던 식별값(Client unique key, Encrypt type) 과 Encrypted by RSA 를 제거
1.5 복호화된 원본 파일 바이너리로 덮어쓰고 저장
728x90