2021. 9. 19. 16:49ㆍ보안 연구/Reversing
본 티스토리 블로그는 PC 환경에 최적화되어 있습니다.
모바일 유저분들은 아래 네이버 블로그를 이용해 주세요.
악성코드 분석 일지(랜섬웨어)
본 네이버 블로그는 모바일 환경에 최적화되어 있습니다. PC 유저분들은 아래 티스토리 블로그를 이용해 ...
blog.naver.com
이전에 파일이나 시스템 일부를 암호화하여 정상적인 접근 로직을 무력화하고 복호화를 대가로 비트코인과 같은 몸값을 요구하는 랜섬웨어 공격이 세간에 주목을 받았었습니다.
이번 분석 샘플은 단순한 악성코드가 아니라 사용자가 원하는 랜섬웨어를 생성하도록 도와주는 일종의 도구로서 사용된 것으로 확인이 되며 분석 난이도 도 그렇게 높지 않으므로 한번 뜯어보도록 하겠습니다.
- File Information
해당 바이러스는 랜섬웨어의 일종으로서 C#으로 작성되었으며 기본 정보는 아래와 같습니다.
다음으로 파일의 실행 화면 캡처 본과 내부 소스코드를 분석해 보도록 하겠습니다.
실행 화면)
해당 프로그램은 직접적으로 악성 행위를 하는 것이 아니라 사용자가 원하는 행위를 진행하는 악성파일을 제작하도록 옵션을 제공하고 있다는 점에서 특이하다고 할 수 있는데 해외의 다른 유저가 직접 실행해 본 결과를 동영상으로 올린 게 있어서 링크를 걸어드리겠습니다.
- Code Analysis
해당 프로그램은 위에서도 언급하였듯 악성코드 제작용으로 사용되기에 화면 폼과 코드를 분리하여 기능들을 분석할 것이며 분석 항목은 아래와 같습니다.
1. 공격 대상 선정(file extentions)
2. Dropped File Name
3. Process Name
4. 악성코드 전파 유무 설정(Network & USB)
5. 공격 방식 선정
6. 악성코드 생성(Build)
1. 공격 대상 선정(file extentions)
해당 코드 부분을 확인해 보면 다음과 같습니다.
기본적으로 화면 창 세팅을 위한 코드이며 맨 아래 this.shapedButton2_Click; 부분을 확인해 보면 extentions() 메서드를 호출하고 있으며 내부 초기화 함수 루틴은 아래와 같습니다.
즉, 암호화할 파일 확장자를 입력받아 저장해놓는다는 것을 알 수 있군요.
2. Dropped File Name
기본적으로 해당 chaos ransomeware는 read_it.txt로 고정되어 있으며 파일 이름과 텍스트 내용을 모두 사용자가 설정이 가능합니다.
3. Process Name
생성한 악성 프로그램이 내부에서 동작할 때 프로세스 이름을 지정하는 설정으로 윈도우 기본 프로그램이나 다른 프로그램으로 위장하기 위한 옵션입니다.
4. 악성코드 전파 유무 설정(Network & USB)
생성된 악성코드를 실행할 경우 Network나 USB를 통한 자가복제 옵션을 제공하고 있습니다.
해당 부분의 코드는 체크박스 코드(yes or no 여부만 확인하는 용도의 코드)만 존재하기에 세부적인 동작이나 생성과정은 Build 과정에 다루도록 하겠습니다.
5. 공격 방식 선정
윈도우 관리자 권한 저지를 위한 백업 관련 정보나 리커버리 모드 등을 삭제하거나 바탕화면을 변조, 파일을 덮어쓰기(Overwrite), AES/RSA와 같은 공개키 암호 알고리즘으로 이전에 선정한 공격 대상을 암호화시켜 접근을 불가능하게 만들 수 있습니다.
특히 공개키를 아용한 암호화는 선택 시 반드시 복호화 키(개인키)를 생성하도록 하고 있으며
chaos Ransomeware Builder 실행 파일이 위치한 곳에 “입력한 복호키 이름” + “-decrypter”이름의 폴더를 생성한 후 내부에 publicKey.chaos, privateKey.chaos 이름으로 공개키와 개인키가 생성됨을 알 수 있습니다.
이외의 기타 세부적으로 제공하는 옵션은 설명이 길어지므로 생략하도록 하겠습니다.
5. 악성코드 생성(Build)
앞서 언급한 옵션들의 정보를 입력해놓으면 build 버튼 클릭만으로 사용자가 원하는 랜섬웨어를 생성하는 것이 가능합니다.
일단 악성 프로그램을 생성하기 위해서는 컴파일 과정을 거쳐야 하는데 그러기 위해서는 소스코드를 생성하는 고정이 필요하며, 사용자가 이전에 입력한 데이터들을 이용 가능한 형식으로 재 가공하여 집어넣는 과정도 있어야 합니다.
C#에서는 텍스트 파일에 소스코드를 작성하면 다른 실행파일이 해당 소스파일에 접근하여 컴파일할 수 있도록 자체적으로 기능을 제공하고 있으며 세부적인 기술 내용은 아래 msdn 문서 내용을 참고하길 바랍니다.
.NET 앱의 리소스 파일 만들기
.NET 앱의 리소스 파일을 만듭니다. 문자열, 이미지 또는 개체 데이터가 포함된 XML 파일이나 프로그래밍 방식으로 문자열 리소스, XML 또는 이진 파일을 사용하여 텍스트 파일을 작성합니다.
docs.microsoft.com
디버깅을 통해 해당 소스코드를 추출할 수 있었으며 생성된 소스코드는 다음과 같습니다.
build 버튼을 누르면 해당 소스코드가 컴파일되어 실행파일이 생성되며 또한, 생성된 소스코드는 앞서 설정한 옵션대로 작성되어 있으며 간단하게 모든 옵션을 끄고 ".tango7777" 확장자를 가진 파일만 암호화하는 랜섬웨어를 생성하여 실행해 보면 다음과 같습니다.
procmon으로 동작 기록을 보면 다음과 같습니다.
이번 샘플은 C#으로 작성이 되어 있어서 dnspy로 특별한 기술 없이 원본 코드를 확인하는 것이 가능하였지만 코드 흐름을 읽어내는데 많은 시간을 소모하였으며 거의 5~6시간을 소모한 것 같았습니다.
역시 리버싱의 길은 멀고도 험한 것 같군요...
추가적으로 추출한 소스코드는 길이가 무지막지하게 길어서 첨부파일로 따로 올려 드리도록 하겠습니다!
긴 글 읽어주셔서 감사합니다!!!
'보안 연구 > Reversing' 카테고리의 다른 글
프로젝트 2일차 (0) | 2022.01.15 |
---|---|
프로젝트 1일차 (0) | 2022.01.15 |
Hardware Reversing - 아두이노 기본(1) (0) | 2022.01.03 |
Window Message Hook basic (0) | 2021.12.08 |
악성코드 분석 일지(한글문서) (0) | 2021.09.21 |