478일간의 기록: 안랩 vs. 갠드크랩 랜섬웨어
악명 높은 랜섬웨어를 꼽는다면 워너크라이를 비롯해 여러 이름이 떠오르지만 갠드크랩(GandCrab) 랜섬웨어를 빼놓을 수 없다. 갠드크랩 랜섬웨어는 2018년 상반기부터 공격자가 활동 중단을 선언한 2019년 5월 말까지 1년 여에 걸쳐 세계 곳곳에 수많은 변종을 퍼뜨렸다. 그리고 그 과정에는 안랩과의 질긴 악연이 존재한다. 안랩 시큐리티대응센터(AhnLab Security Emergency response Center, 이하 ASEC)는 최근 발표한 ASEC 리포트(ASEC Report Vol.97)를 통해 갠드크랩 랜섬웨어와의 치열했던 공방전을 공개했다. 이제는 말할 수 있는 안랩과 갠드크랩 랜섬웨어의 전쟁, 그 뒷얘기를 소개한다.
2018년 1월 처음 나타난 것으로 알려진 갠드크랩 랜섬웨어(이하 갠드크랩)는 빠르게 공격 기법을 바꿔가며 수많은 변종을 쏟아냈다. 갠드크랩이 주목받은 이유 중 하나는 이례적으로 코드 내부에 ‘안랩(AhnLab)’과 자사 안티바이러스(Anti-virus) 제품인 ‘V3 Lite’를 직접적으로 언급하며 지속적으로 공격을 시도했기 때문이다. 초반에는 단순히 코드 문자열에 안랩과 V3를 언급하는 정도였으나 이후 V3 제품을 삭제하는 기능을 추가하는 등 적극적인 공세를 펼쳤다.
갠드크랩 제작자 입장에서는 안랩이 먼저 싸움을 걸어왔다고 생각했을 수 있다. 갠드크랩 유포 초반부터 변종이 나올 때 마다 안랩이 각 버전별 기능과 암호화 방식을 분석하는 동시에 악의적인 행위를 차단하는 방법을 찾아내 공개하고 신속하게 V3 엔진에 반영하는 등 적극적으로 대응에 나섰기 때문이다.
갠드크랩 제작자와 안랩의 공방전이 계속 이어지자 보안 업계는 물론 국내외 언론에서도 상당한 관심을 보이며 여러 차례 보도하기도 했다. 그러나 당시 공개됐던 내용은 극히 일부분으로, 대부분은 민감한 정보이기 때문에 공개할 수 없었다. 일부 지뢰처럼 남아있는 갠드크랩에 감염되는 피해자가 간혹 확인되는 2019년 12월 현재, 치열했던 갠드크랩과 안랩의 전투를 되짚어본다.
전쟁의 서막: 갠드크랩v2.x
2018년 2월 8일, 안랩은 처음으로 갠드크랩을 언급했다. 자사 블로그(https://asec.ahnlab.com)를 통해 갠드크랩이 국내에 유입된 사례를 전한 것이다.
얼마 후인 2018년 4월 17일, 안랩은 다시 블로그를 통해 갠드크랩(v2.1)의 동작 방식에 대한 상세한 분석 정보와 함께 파일 암호화 과정을 중단시킬 수 있는 차단 방법, 이른바 킬스위치(Kill-Switch)를 공개했다.
그로부터 사흘 뒤인 2018년 4월 20일 또 다른 갠드크랩v2.1 샘플의 뮤텍스(Mutex) 문자열에 안랩에 대한 욕설이 포함된 것이 확인됐다([그림 2]). 해당 변종은 C&C 서버 통신 시 네트워크 필터에 걸리지 않기 위해 호스트 접속 주소를 임의로 조작했는데, 기존에 사용하던 ‘google.com’ 대신 안랩 홈페이지 주소인 ‘ahnlab.com’으로 변경한 것이 확인됐다. 사실상 안랩에 대한 공격을 시작한 것이다.
한편, 공격자는 내부 버전을 3.0.0으로 표기한 갠드크랩v2.1에서 암호화 방식을 변경했는데, 안랩은 곧바로 메
시지창을 이용한 차단 방식을 찾아내 공개했다([그림 3]).
드러나는 공격자의 정체: 갠드크랩v4.1.x
2018년 7월, 갠드크랩은 이메일, 취약한 웹사이트를 이용한 드라이브바이다운로드(drive-by-download) 방식과 실행 파일, 파일리스 등 다양한 기법을 이용해 유포되기 시작했다. 그 가운데 파워쉘을 이용한 파일리스 방식의 갠드크랩 변종에서 ‘ahnlab.txt’라는 파일명을 가진 악성 스크립트가 확인됐다.
당시 안랩 외에도 국내외 주요 보안 업체들이 갠드크랩 랜섬웨어에 적극적으로 대응했다. 그 중 하나인 포티넷(Fortinet)이 2018년 7월 9일, 갠드크랩의 암호화 방식을 상세히 분석하여 특정한 로직의 <8hex-chars>.lock 파일이 있으면 암호화를 차단할 수 있는 방법을 공개했다. 안랩은 포티넷의 정보를 토대로 추가 분석을 진행해 당시 가장 최신 변종이었던 갠드크랩v4.1.1까지 차단할 수 있음을 확인하고, 이를 차단 툴로 제작해 블로그를 통해 배포했다([그림 4]).
이에 대해 갠드크랩 제작자는 즉각 반응을 보였다. 곧바로 갠드크랩v4.1.2을 유포하면서 내부 문자열에 포티넷과 안랩(fortinet & ahnlab)을 도발하는 메시지를 포함한 것. 또한 이들 두 보안 업체가 차단 툴에 이용한 ‘.lock’ 파일의 생성 로직을 변경했다. 하지만 안랩은 곧 갠드크랩v4.1.2의 변경된 로직을 파악하고 차단 툴을 업데이트했으며, 뒤이어 나온 v4.1.3에 대해서도 즉시 차단 툴을 업데이트했다.
한편, 갠드크랩v4.1.2 내부에 포함된 문자열 중 유독 눈길을 끈 것이 있었다. [그림 6]과 같이 안랩(ahnlab)을 포함한 문자들로 구성된 URL 주소가 있었는데, 해당 문구는 러시아어 욕설이었다. 갠드크랩 제작자가 안랩에 대해 상당히 불편한 심기를 갖고 있었음을 짐작할 수 있는 대목이다.
갠드크랩의 역습
2018년 8월 3일, 갠드크랩 제작자는 공식적으로(?) 안랩에 선전포고를 했다. 미국 보안 전문매체 블리핑컴퓨터닷컴(BleepingComputer.com)과의 이메일 인터뷰를 통해 “V3 제품(V3 Lite)의 제로데이 취약점을 공개할 것”이라며 익스플로잇 소스를 전달한 것. 공격자는 직접적으로 안랩을 공격 대상(Target)이라고 명시하고, 안랩의 차단 툴(Kill-Switch)에 대한 보복이라는 점을 분명히 했다([그림 7]). 또한 이후 버전의 갠드크랩에 대해서는 안랩의 차단 툴을 사용할 수 없을 것이라고 덧붙였다.
실제로 블리핑컴퓨터닷컴의 인터뷰 내용 공개 직후 유포된 갠드크랩v4.2.1 내부에서 V3 Lite 공격 코드가 확인됐다. 또한 자신과 안랩의 스코어가 1:1이 되었다며, 공격 코드를 온라인에 공개하겠다는 메시지가 코드 내부에 포함되어 있었다([그림 8]).
갠드크랩v4.2.1에 포함된 익스플로잇 코드는 V3 Lite 제품이 설치된 PC에 블루스크린(BSOD, Blue Screen Of Death)을 유발하는 것으로, 파일 암호화 후 공격이 실행되도록 설정되어 있었다. 안랩은 해당 내용을 확인한 즉시 해당 익스플로잇을 무력화하는 긴급 패치를 배포했고, 결국 갠드크랩 제작자의 공격은 별 다른 소득없이 마무리됐다.
V3 겨냥한 갠드크랩의 파상공세
안랩이 자사 제품에 대한 익스플로잇 코드에 대응하는 패치를 배포하자 갠드크랩 제작자는 V3 제품을 삭제하는데 총력을 기울였다. 갠드크랩 유포 스크립트에 V3 제품의 삭제(Uninstall)을 유도하는 기능을 포함하는 등 다양한 방법을 동원해 지속적인 V3 제품 삭제 시도에 나선 것이다.
처음에는 사용자의 클릭을 유도해 V3 삭제를 시도했다. 난독화된 스크립트 내부에 V3 서비스를 탐색하여 V3 삭제를 유도하는 기능을 가진 자바스크립트(JavaScript, JS) 파일을 드롭하여 실행하는 코드를 포함하는 방식이었다. 스크립트에 의해 드롭된 JS 파일에는 V3 삭제 프로그램의 경로를 찾아 감염 시스템의 윈도우 버전에 따라 해당되는 제거 프로그램(Uninstaller)을 실행한다. 이후 최대 60초 동안 V3가 제거되었는지 확인하는데, 60초 이내에 사용자가 제거 프로그램의 버튼을 클릭하면 갠드크랩 랜섬웨어가 실행된다.
그러나 이 방법은 사용자의 직접적인 행위가 동반되어야 하기 때문에 몰래 수행할 수 없다는 한계가 존재했다. 따라서 공격자는 2018년 9월, V3 삭제 방법을 변경한다. 삭제(Uninstall) 화면을 숨김(hidden) 처리하고 자동으로 삭제 버튼을 클릭하는 방식을 택한 것이다.
2018년 9월 말에 유포된 갠드크랩v5.0에서는 기존의 파워쉘(Powershell.exe) 하위에 Uninst.exe 프로세스가 실행되던 구조에 cmd.exe가 추가되었는데, 직후 cmd.exe 대신 WMIC.exe를 이용해 V3를 삭제하는 방식으로 또다시 프로세스 구조를 변경했다. 이후에도 계속해서 V3 삭제 방법을 바꿨으며 스크립트를 수시로 업데이트했다. 이처럼 계속해서 프로세스와 방식을 변경한 이유는 안랩의 행위기반 탐지를 우회함으로써 V3 삭제라는 목적을 달성하기 위함이다.
이에 안랩은 2018년 11월 6일, 악성코드에 의한 V3 제품의 자동 삭제를 방지하기 위해 V3 Lite 제품의 제거 프로그램(Uninstaller)에 캡챠 코드를 적용했다. 이로 인해 갠드크랩은 더 이상 V3 제품의 삭제를 할 수 없게 됐고, 결국 공격자는 스크립트에서 V3 삭제 기능을 제거했다.
엔드게임(Endgame)
2018년 12월까지 다양한 방식으로 V3 삭제를 시도하던 공격자는 2019년 1월 유포한 갠드크랩v5.0.4에서 삭제 대신 V3의 동작(V3 Service)을 종료하는 것을 택했다. 안랩은 갠드크랩v5.0.4의 V3 서비스 무력화 기능을 확인한 즉시, 신속하게 V3 제품의 업데이트 패치를 배포해 갠드크랩의 무력화 시도를 저지했다. 그러나 공격자는 이후로도 안랩과 V3에 대한 공격을 멈추지 않았다.
갠드크랩v5.2에는 동적 분석을 방해하기 위해 시간 지연 기법(Timer)을 추가했는데, SetTimer 함수를 호출하는 윈도우 프로시저 클래스명에 안랩(AhnLab)의 의도적인 오타로 보이는 ‘AnaLab_sucks’라는 문자열을 사용했다([그림 10]).
2019년 4월 유포된 갠드크랩v5.2에서는 V3 Lite 제품의 지단을 우회하는 기능이 추가됐다. 이전에는 V3 Lite를 강제 종료하는 것으로 무력화를 시도했던 것과 달리 4월에 유포된 갠드크랩v5.2는 V3 제품의 업데이트 프로그램에 악성코드를 삽입(injection)하여 악성 행위를 수행하는 방식이었다. 안랩은 이 또한 신속한 보안 패치로 대응했다.
끝나지 않을 것 같던 안랩과 갠드크랩의 공방전은 2019년 5월 31일, 갠드크랩 제작자가 랜섬웨어 서비스 운영 중단을 선언하면서 갑작스럽게 막을 내렸다. 갠드크랩 제작자는 [그림 11]과 같이 홈페이지를 통해 “갠드크랩으로 충분히 돈을 벌었다”며 중단 이유를 밝혔다. 실제로 중단 선언 직전에 유포된 갠드크랩 v5.3 이후 7개월 여가 지난 현재까지 추가 변종은 발견되지 않았다.
갠드크랩과의 싸움을 통해 얻은 교훈
갠드크랩 랜섬웨어는 단기간에 수많은 변종을 쏟아내며 악의적인 공격자들을 위한 맞춤형 랜섬웨어를 제작, 유포함으로써 대표적인 서비스형 랜섬웨어(RaaS, Ransomware as a Service)로 이름(?)을 남겼다. 또한 공격자와 보안 업체가 사실상 직접적인 싸움을 벌인 사례로 기록됐다. 이 싸움은 안랩이 자사 블로그를 통해 처음 갠드크랩 랜섬웨어를 언급한 2018년 2월 8일부터 갠드크랩 랜섬웨어 제작자가 운영 중단을 선언한 2019년 5월 31일까지, 무려 478일 동안 숨가쁘게 이어졌다.
갠드크랩 사례는 최신 보안 위협, 특히 RaaS 방식의 갠드크랩처럼 서비스형 악성코드에 효과적으로 대응하기 위해서는 지속적인 위협 모니터링은 물론, 보안 업체 및 기관의 공조가 반드시 필요하다는 것을 다시 한 번 확인시켰다. 이에 안랩은 앞으로도 자사 위협 분석 시스템을 통해 보안 위협을 실시간으로 모니터링하는 한편, 다양한 채널을 통해 최신 위협에 관한 정보를 지속적으로 공유할 계획이다.
1년 반에 걸쳐 유포된 갠드크랩 랜섬웨어 변종과 공격 기법에 관한 보다 상세한 분석 결과는 최근 발행된 ASEC 리포트에서 확인할 수 있다.
- AhnLabASEC 분석팀