1. 개요
1.1 배경
직쏘 랜섬웨어는 2016년에 등장한 윈도우 기반 악성 소프트웨어로, C#과 .NET 프레임워크로 개발되었다. 파일을 AES 알고리즘으로 암호화하며, 특정 시간이 지나면 암호화된 파일을 삭제하는 타이머 기능이 특징이다. 특징으로는 피해자에게 영화 '쏘우'의 직쏘 캐릭터 이미지와 함께 금전을 요구하는 경고 메시지를 표시하며, 암호화 키는 원격 서버로 전송되어 피해자가 금액을 지불한 후 복호화 키를 받을 수 있도록 한다.
1.2 파일 정보
1.3 Time Table
1.4 분석 수행 인원
최용우 SK 뉴스쿨 정보보안과 5기 교육생
2. 악성코드 상세분석
2.1 jigsaw 의 구조
•
BitcoinBlackmailer.exe
◦
디컴파일된 실행 파일 이름
•
PE
◦
PE(Portable Executable) 섹션, 파일 헤더, 섹션 헤더, 그리고 실제 코드와 데이터가 포함됨
•
References
◦
외부 어셈블리 및 라이브러리에 대한 참조가 포함됨. .NET 어셈블리, 시스템 라이브러리 등 외부 종속성 확인 가능
•
Resources
◦
실행 파일에 포함된 리소스 파일들. 이미지, 문자열, 바이너리 데이터 등 다양한 형식의 리소스가 포함될 수 있음.
•
Costura
◦
.NET 애플리케이션에서 종속성을 패킹하는 라이브러리. 이 섹션은 종속 어셈블리를 하나의 실행 파일에 포함시켜, 별도의 종속 파일 없이 독립 실행 파일로 동작할 수 있게 함
•
Main:
◦
랜섬웨어의 주요 로직이 구현된 네임스페이스
•
Main.Properties:
◦
애플리케이션의 속성 정보를 포함하는 섹션.
•
Main.Tools:
◦
랜섬웨어가 사용하는 도구 및 유틸리티 클래스들이 포함된 네임스페이스
2.2 초기 설정
(1) Main(string[])
•
메인 함수 시작 부분 분석
◦
Hacking.initSoftware 메소드 호출 및 FormBackground 폼 생성 확인, 해당 부분에 대한 분석이 필요함
(2) Hacking.initSoftware
•
Config.StartMode
◦
인자 값 분석을 위해 해당 클래스 분석 진행
◦
랜섬웨어에 활용되는 여러 설정 확인
◦
프로그램 시작 시 StartMode 는 ErrorMessage 로 설정됨을 확인
•
Hacking.initSoftware
◦
설정 값을 이용하여 메세지 박스를 생성
•
실제 동작 확인
(3) FormBackground
•
InitializeComponent()
◦
FormBackground 를 만드는 과정 분석
◦
해당 폼에 타이머를 추가하고, 타이머가 도달할 때마다 파일을 암호화하고 있음을 확인
◦
타이머 값이 6000이므로 6초마다 암호화 진행
•
EncryptFileSystem()
◦
암호화 메소드 확인 결과 암호화 진행 후 대상 파일에 .fun 이 추가되는 형식임을 확인
•
EncryptFile()
◦
하위 메소드에서 AES 알고리즘 사용 및 KEY, IV 값 확인
◦
추가로 복호화 하는 메소드 존재도 확인
2.3 게임시작
(1) FormGame
•
타이머 시작 시 welcomeMessage 설정
•
실제 동작 확인
2.4 여기서부터 내일 수업에 지장이 갈 것 같아서 정확한 확인은 못 했습니다 죄송합니다..
•
비트코인 주소 가져오기
◦
비트코인 주소가 하드코딩 되어있지만 실제 표시되는 주소랑 다름
◦
해당 메소드에서 뭔가 가져오는 로직이 있는듯 함
•
돈 냈을때
◦
돈 낸거 검사해서 냈으면 암호화 해제 후 본인을 제거함
◦
돈이 부족하거나 입금을 하지않으면 예외처리를 하고 그 밖의 예외가 발생하면 인터넷에 연결되었냐고 메세지를 띄움 (실제로 인터넷에 연결됐는지 검사하는것은 아님)
•
지속성확보
◦
레지스트리를 변경하여 시스템 시작 시 자동으로 실행되도록 설정하여 지속성 확보
결론 및 대응방안
3.1 결론
해당 랜섬웨어는 실행 시 지속성 확보를 위해 레지스트리를 수정하며 메세지 박스를 띄운다. 그리고 6초마다 파일을 암호화하고 1시간마다 파일을 삭제하며 비트코인을 입금할 시 암호화를 해제하고 본인을 삭제한다.
3.2 대응방안
암호화에 사용된 키와 IV 값이 하드코딩 되어 있으므로 정적, 동적 분석을 통해 해당 값을 확보 후 직접 복호화를 시도할 수 있을 것 같다.