소프트웨어 불법 다운로드 하면 생기는 일
최근 온라인으로 상용 소프트웨어나 게임 등 유료 프로그램을 불법으로 다운로드 받으려는 사용자를 노려 악성코드를 유포하는 사례가 잇달아 발견되고 있다. 사용자가 검색 사이트에 특정 소프트웨어의 다운로드와 관련된 키워드를 입력하면 공격자가 미리 제작해 놓은 피싱 사이트와 악성코드가 노출되는 형태이다.
2022년 1분기 ASEC 리포트는 유명 소프트웨어 크랙으로 유포되는 최신 악성코드를 심층 분석했다. 이번 글에서는 보고서의 주요 내용을 간략히 살펴본다.
먼저, 공격자는 웹사이트에 ‘크랙(Crack)’이나 ‘키젠(Keygen)’과 같은 단어를 삽입하고 소프트웨어 대한 상세 내용도 올려 사용자를 유인했다. 사용자가 공격자의 웹사이트에 접속해 다운로드 버튼을 누르면 여러 번의 리다이렉션(redirection)을 거쳐 악성코드를 포함한 압축 파일이 다운로드 된다.
공격자의 웹사이트로부터 다운로드 되는 파일은 ZIP 또는 RAR 형식의 압축 파일이다. 다운로드된 파일 내부에 암호화된 압축 파일과 압축 파일의 패스워드를 명시한 텍스트 파일이 존재한다. 사용자가 암호화된 압축 파일을 풀면 최종적으로 악성코드가 생성된다.
이러한 방식으로 유포되는 악성코드는 두 가지 케이스로 나뉜다. 그것은 바로 단일 악성코드 유형과 드로퍼 악성코드 유형이다. 전자는 압축 해제 시 크립봇(CryptBot), 레드라인(RedLine), 라쿤(Raccoon) 등의 단일 악성코드가 생성하며, 후자는 NSIS와 7zip SFX 방식의 인스톨러(Installer) 형태의 파일을 생성한다.
악성코드 유포 사이트 특성 분석
악성코드를 유포하기 위해 공격자는 사회공학 기법을 활용한다. 가장 먼저, “Crack(크랙)", "Keygen(키젠)", "Serial(시리얼)", "Free(무료)", "Download(다운로드)" 등의 키워드로 크랙 파일을 찾는 사용자를 유인한다.
[그림 1] 악성코드 유포 방식 요약
[그림 2] 피싱 페이지로부터 다운로드된 압축 파일 구조
또한 불법 다운로드를 진행하기 위해 일시적으로 안티멀웨어 제품을 끄거나 파일 검사를 예외 처리하는 사용자의 심리를 이용했다. 크랙과 같은 불법 파일은 대개 안티멀웨어 제품으로부터 악성으로 분류되기 때문에 많은 파일 공유 사이트에서 안티멀웨어 제품의 실시간 감시 및 보호 기능을 끄고 파일을 실행하라고 안내를 쉽게 찾아볼 수 있다. 이에 따라 사용자는 안티멀웨어 제품을 잠시 끄거나 다운로드 받은 불법 파일의 검사를 예외 처리할 가능성이 높다. 이런 심리를 이용하기 위해 공격자는 악성코드 유포 사이트를 많이 만들어 놓았다.
실제로 검색 엔진에 상용 소프트웨어 이름과 크랙, 시리얼 등의 키워드를 검색할 경우 노출되는 대부분의 웹 사이트가 악성코드 유포 페이지이다. 대부분의 유포 사이트는 유사한 제목으로 구성되어 있는데, [그림 3]과 같이 도메인은 모두 다른 것을 확인할 수 있다.
[그림 3] 검색 엔진에 노출되는 악성코드 유포 사이트
공격자는 워드프레스를 활용해 쉽게 불법 파일 공유 사이트를 제작하고, 그 안에 유명 소프트웨어 크랙과 관련된 다수의 게시글 또는 페이지를 구축한다. 현재 상당히 많은 수의 사이트가 개설되었으며 그 수는 계속해서 늘고 있다. 한 사이트에 여러 페이지가 존재하므로 전체 유포 페이지 수는 훨씬 더 많을 것이다.
[그림 4] 악성코드 유포 사이트에 게시된 게시글
악성코드 유포 페이지는 유명 소프트웨어에 대한 설명, 스크린샷, 제품 이미지, 설치 방법 등 자세한 제품 내용이 포함되어 있다. 한때 한국 사용자를 대상으로 활발하게 유포되었던 블루크랩(BlueCrab) 랜섬웨어 유포 페이지와 비교해 보면, 최신 유포 페이지는 [그림 5]와 같이 매우 정교하게 만들어진 것을 확인할 수 있다.
[그림 5] 악성코드 유포 페이지 예시
사용자가 게시글 속 다운로드 버튼을 누를 경우 여러 차례의 리다이렉션 과정을 거쳐 최종 악성코드 다운로드 페이지로 연결된다. 다운로드 버튼의 태그 종류, 색상, 개수 등의 형태는 사이트별로 다양하지만 동작 방식은 유사하다.
[그림 6] 악성코드 유포 페이지의 다운로드 버튼
해당 버튼은 단순 링크 방식이 아니다. 유포 페이지에 삽입된 외부 자바스크립트(JavaScript) 실행 코드가 실행되며 활성화된다. 따라서 사이트의 소스코드만으로는 버튼을 눌렀을 때 연결되는 사이트의 주소를 알 수 없다. 이러한 방식은 연결되는 URL을 소스코드에서 숨김으로써 크롤링(crawling)을 방지할 수 있으며, 특정 URL이 차단되었을 경우 쉽게 다른 URL로 우회할 수 있다는 장점이 존재한다. 여기서 자바스크립트 실행 코드는 실행될 때마다 리다이렉션 URL에 응답하며, 응답하는 URL에 따라 어떤 다운로드 페이지로 연결될지 결정하는 역할을 수행한다.
[그림 7] 자바스크립트 실행 코드
[그림 8]은 자바스크립트 실행 코드에 의해 실행되는 자바스크립트 코드이다. 동작 방식은 다음과 같다. 공격자는 다운로드 버튼에 리다이렉션 기능의 함수를 인자로 클릭 이벤트 리스너(addEventListener)를 등록한다. 이 과정은 사용자가 다운로드 버튼을 클릭할 경우 리다이렉션 URL로 이동하게 하는 기능을 활성화하는 것이다. 이 스크립트는 게시글에 존재하는 다운로드 버튼의 개수만큼 실행된다.
[그림 8] 자바스크립트 코드
리다이렉션 시에는 현재 페이지의 제목을 인자로 전달해 최종 악성코드 다운로드 페이지에서 해당 제목이 포함된 파일을 다운로드한다. 사용자는 자신이 검색한 키워드가 다운로드된 파일명에 포함되어 있으므로, 아무런 의심없이 파일을 실행할 가능성이 높다.
[그림 9] 리다이렉션 과정
[그림 10] 다운로드 파일 예시
최종 다운로드 페이지는 여러 유형으로 존재한다. 공격자는 일정 시간마다 다운로드 페이지를 돌려가며 사용하고, [그림 8]의 버튼 활성화 과정을 통해 어떤 다운로드 페이지로 리다이렉션 할지 결정한다. 또한 공격자는 계속해서 새로운 유형을 추가하거나 기존 유형을 삭제하는 등 변형을 자주 주는 것을 확인할 수 있다.
[그림 11]은 본 리포트 작성 당시(2022년 3월) 확인된 최종 다운로드 페이지 샘플들이다. 페이지에 명시된 URL에 접속하거나, 다운로드 버튼을 클릭할 경우 악성코드를 다운로드한다. 전자는 원드라이브(OneDrive), 미디어파이어(MediaFire) 등의 파일 호스팅 서비스를 활용하고, 후자는 여러 번의 리다이렉션을 거쳐 연결된 자체적인 서버를 통해 파일을 다운로드한다.
[그림 11] 악성코드 다운로드 페이지 샘플
파일 다운로드 과정
악성코드 유포 페이지로부터 다운로드되는 파일은 RAR 또는 ZIP 압축 형식을 가지고 있다. 파일 형식 및 파일명 등은 주기적으로 변경되지만, 압축 파일 내부에 또 다른 암호화된 압축 파일과 압축 파일의 비밀번호를 명시하는 텍스트 파일이 존재한다는 공통점이 있다. 암호화된 압축 파일 내부에는 악성코드 실행 파일이 담겨있다. 과거에는 보통 4~6 길이의 정수 문자열이 압축 암호로 사용되었으나 최근에는 불규칙한 영문 문자열을 사용하는 샘플군과 암호를 명시한 파일이 그림 파일 형식인 경우도 발견되고 있다.
[그림 12] 압축 파일 구조
불법 소프트웨어로 위장한 만큼 내부 악성코드 이름은 보통 "Setup(설정)", "Install(설치)", "Activate(실행)" 등의 단어를 포함한다. [표 1]은 최근 약 6개월 동안 유포된 악성코드의 파일명 중 상위 수량을 기록하고 있는 파일명이다. 단, 여러 번 중복되는 문장 부호는 한 개로 치환된다. 생성된 파일이 아래 파일명과 유사할 경우 악성코드일 확률이 높음으로 각별한 주의가 요구된다.
[표 1] 최근 6개월동안 탐지된 악성코드 파일명 통계(2022년 3월 기준)
최종적으로 생성된 악성코드는 크게 두 가지 유형으로 나눌 수 있다. 단일(Singular) 악성코드인 경우와 내부에 수많은 악성코드를 포함하고 있는 드로퍼(Dropper) 악성코드인 경우이다. 전자는 패킹 방식에 따라 100K~4MB의 비교적 작은 파일 크기를 가진다. 후자는 다수의 악성코드를 포함하고 있기 때문에 5~10MB의 큰 파일 크기를 가지며 NSIS, 7zSFX 등 인스톨러(Installer)의 형태의 패킹을 사용한다.
간혹 파일 크기를 비정상적으로 늘린 유형이 유포되기도 한다. 실제 파일 데이터는 1~3MB 정도인 단일 악성코드이지만, 큰 크기의 패딩 데이터를 가진 PE 섹션을 삽입해 비정상적으로 크기를 키운다. 유포 시에는 압축 상태로 유포되므로 작은 용량을 가지지만 압축 해제 시 700~800MB의 크기가 된다. 이는 공격자가 안티멀웨어 제품의 대용량 파일에 대한 샘플 수집 제한 및 진단 예외를 우회하기 위해 사용하는 수법으로 추정된다. 바이러스토탈(VirusTotal)에도 대용량 파일 업로드는 불가능하다.
[그림 13] 비정상적인 섹션 구조
최근 약 3개월간 유포된 샘플 중에서 드로퍼 샘플과 단일 악성코드 샘플의 비율은 다음과 같다.
[표 2] 유포되는 악성코드 유형별 샘플 통계
샘플 발생 수량은 드로퍼(Dropper) 유형이 압도적이지만, 이는 잦은 변형으로 인한 수치인 것으로 추정된다. 단일 악성코드 유형은 동일 해시의 샘플이 비교적 오랫동안 유포되는 반면 드로퍼 악성코드는 거의 매시간마다 변형이 발생한다. 변형이 발생하더라도 내부 파일은 동일한 경우도 많다. 동일 기간 드로퍼 악성코드 내부에 담겨 유포된 악성코드 샘플 수량은 로더를 제외하고 3888개이다. 샘플 당 10~15개의 악성코드가 담겨있으므로 대부분 중복된 악성코드를 담은 채로 변형이 발생한다는 것을 알 수 있다. 이러한 이유 때문에 한 샘플당 감염 수량은 단일 악성코드 유형이 훨씬 높다.
또한 드로퍼 악성코드의 경우 안티멀웨어 제품에서 내부 파일들 중 한 개라도 진단 중이라면 악성코드 생성 과정에서 차단되기 때문에 악성 행위가 불가능하다. 사용자의 검사 예외 처리, 실시간 감시 종료 등의 경우는 대응이 불가능하므로, 보안 업체 입장에서는 단일 악성코드 유형을 집중적으로 방어해야 한다. 안랩은 자동화된 샘플 수집 및 체계적인 대응 인프라를 통해 빠르게 변형에 대응한다.
출처 : AhnLab