티스토리 뷰

[서론]

시스코 탈로스 및 안랩을 비롯해 트위터에서 많은 보안 연구자들이 bisonal 악성코드에 대한 포스팅을 업로드한 것을 확인했다. 보고서에 포함된 bisonal 악성코드의 변천사를 요약하여 유포된 시간 순서로 진행된다.

※ 개인의 의견이 조금 반영되긴 했지만, 직접 분석한 악성코드 분석 글이 아닌, 보안 벤더 보고서들의 자료를 대상으로 작성되는 survey 형태의 글이다.

[Cisco Talos 및 Ahnlab 요약][1][2]

3월 5일 시스코 탈로스 보안 연구원들은 지난 10년간 Bisonal 악성코드를 탐지 및 외부에 공개했다. 그러나 그 뒤에 있는 위협 행위자(Tonto team)는 멈추지 않았다.
공격자들의 타겟은 한국, 일본, 러시아 조직이었으며, 해당 악성코드는 탐지율을 낮추고 initial vector 성공률을 향상시키기 위해 발전했다. 또한, Bisonal은 수년에 걸쳐, RAT의 코어를 동일하게 유지하면서 탐지를 회피하기 위해 메커니즘을 발전시키고 조정했다. 탈로스는 10년간 50개 이상의 서로 다른 Bisonal 악성코드를 분석하고 사용 기간 동안 나타나는 변환에 중점을 두었다.

2009년 ~ 2019년까지의 분석된 Bisonal 자료를 공개한 Cisco Talos와 2020년 한국을 대상으로 유포된 Bisonal 자료를 공개한 Ahnlab의 자료를 요약한 Bisonal의 특징은 아래와 같다.
1. Tonto team arsenal의 일부인 RAT(Remote Access Trojan)이며, 10년 이상 사용됨(보통 악성 프로그램에서는 흔하지 않은 특징)
2. 스피어피싱을 사용하여 lure document를 사용
3. 지난 10년간의 Bisonal 활동에 대한 분석과 커뮤니티의 정보 공유를 통해 얻은 자료를 토대로 조사된 결과로, 목표 대상은 러시아와 중국어에 중점을 둔 동남아시아 지역(한국, 일본)의 공공 및 민간 부문을 겨냥

4. Bisonal의 역사 (시간 순서대로 나열)

2009년~2012년에는 한글 워드 프로세서(HWP)를 이용해 미끼 문서(한국 군대, 정부, 중소 기업 조직 대상)를 만들어 스피어피싱에 이용

 

2018년에는 팔로알토의 Unit 42팀이 러시아에서 PDF를 사용해 미끼 문서(모스크바에 본사를 둔 러시아 국영 지주 회사인 Rostec)를 만들어 스피어피싱에 이용하는 정황을 담은 paper를 발표

[그림 1] 당시 Rostec 사칭 화면 [출처 : talos] 

2018년 Ahnlab은 한국, 일본을 타겟으로 Bisonal이 사용된 "Operation Bitter Biscuit" paper를 발표

=> 이후에도 러시아를 타겟으로 CIPR Digital 회의에 대한 미끼 문서를 작성하기도 했다.

[그림 2] 2014년 9월 사용된 미끼 문서 내용

2019년 Cisco Talos는 유사한 RTF 익스플로잇을 사용하여 Bisonal을 유포하는 여러 한국 미끼 문서를 식별함.

- ☆2020년도 예산안 운영위 서면질의 답변서_발간(1).doc

- 국무위원후보자(법무부장관 추미애) 인사청문회 실시계획서(1).doc

 

5. Bisonal의 첫 번째 변종은 "HeartBeat"라는 이름으로 공개되었으며, 2019년 말 공격자는 TTP를 변경하고 Bisonal 페이로드를 실행하기 위해 MS extension(.will)을 사용하기 시작함. 

 

6. 탈로스가 2010년부터 2020년까지 유포된 Bisonal 악성코드(50종 가까이)를 분석하고 요약

2010: the birth(sha256 : ba0bcf05aaefa17fbf99b1b2fa924edbd761a20329c59fb73adbaae2a68d2307)

=> 2010년 12월 24일 컴파일된 가장 간단한 버전으로, 공격자는 Windows 서비스로 설계된 dll을 만들어 SCM(Service Control Manager)과 통신하고 스레드를 실행하도록 한다. 첫 번째 C2 서버는 young03[.]myfw[.]us:8888 이며, 동적 DNS 서비스의 사용을 알 수 있었다. C2가 다운됐을 경우 롤백으로 작동하지만, localhost로 구성되었으므로 사용되지 않았으며, C2 서버와의 통신은 raw socket을 사용하여 수행된다.

=> 감염된 시스템의 호스트 이름과 식별자로 추정되는 "kris0315" 문자열을 C2 서버로 보내며, 암호화 및 난독화 처리를 하진 않음.

=> 3가지 명령으로, {ShellExecuteW() API를 이용해 명령 실행, 실행중인 프로세스 리스팅, 멀웨어 흔적 정리(서비스, 레지스트리 키 및 라이브러리 제거)}와 같은 행위를 수행

=> .text 영역에 bisonal이 발견되었지만, 이를 이용해 다른 기능이 사용되진 않음.(영역 표시??)

 

2011 MARCH: COMMECT(sha256:bb61cc261508d36d97d589d8eb48aaba10f5707d223ab5d5e34d98947c2f72af)

=> 2011년 3월 18일에 식별된 샘플로, 2010년 변형과 매우 유사하다. 2010년과 다르게 난독화를 수행했다. 예로는, COMMECT 문자열에서 "M"을 "N"으로 치환해 CONNECT API를 사용하는 방식으로 API를 기반으로 탐지하는 AV를 교묘하게 회피할 수 있었다.  CONNECT와 같이 사용된 API(CreateThread, CreatePipe, WriteFile 등..)들도 똑같은 트릭을 사용했다. 

=> 파이프를 사용하여 다른 프로세스의 출력을 얻는 새로운 순서를 구현했으며, 문자열 세트(CHCP 1251)을 적용하기도 했다. 이 문자 집합은 러시아어, 불가리아어 및 세르비아어와 같은 키릴 문자를 사용하는 언어를 포함하도록 설계했다.

=> C2 서버 : kissyou01[.]myfw[.]us

 

2011 SEPTEMBER: THE BIG CHANGES(sha256:43606116e03672d5c2bca7d072caa573d3fc2463795427d6f5abfa25403bd280)

=> C2 서버의 도메인 이름을 xor 알고리즘(key:0x1f)을 이용해 인코딩하며, 네트워크 통신 또한 xor(0x28)로 난독화 되었다. 탐지 우회 목적으로 많이 공을 들인 느낌이다. 또한, 프록시 서버를 지원하며, 레지스트리에서 프록시 구성을 검색한다. 

=> Wininet 라이브러리 사용해 InternetOpenA(), InternetOpenURLA()를 통해 {호스트 이름, IP 주소, OS 버전, 프록시 서버 및 시스템이 VMware에서 실행중인 경우} 서버로 전송 

=> Thread 내부에 메시지를 보내는 PostThreadMessageW()를 추가해 멀웨어를 종료할 수 있도록 진행하며, 파이프를 통해 Writefile() API를 이용하여 "exit\r\b" 문자열을 실행된 명령에 추가함으로써 확실한 종료를 할 수 있게끔 만듬

=> 2011 COMMECT와 같이 CHCP 명령을 사용하지 않고, 코드 페이지를 직접 실행(0x4E3{1251- 키릴 러시아어}, 0x362{866 - DOS 키릴 러시아어})

=> C2 서버 : hxxp://fund.cmc.or[.]kr/UploadFile/fame/x/o0.asp

 

2011 SEPTEMBER: THE BIG COCTOBER: OOPS WHERE IS MY CLEANING FUNCTION?

(sha256:43459f5117bee7b49f2cee7ce934471e01fb2aa2856f230943460e14e19183a6)

C2 for the orders : jennifer998[.]lookin[.]at

C2 for rollback : 196[.]44[.]49[.]154

C2 URL for reconnaissance : hxxp://fund.cmc.or[.]kr/UploadFile/fame/x/o0.asp

 

2011 DECEMBER: NOT A SERVICE ANYMORE 

더 이상 서비스 형태로 존재하는 것이 아닌, DLL로 변경됐으며 레지스트리 키 값(CurrentVersion\\Run\\task)을 이용하여 지속성 메커니즘을 이용. 이전 버전들 보다 파일 유출, 파일 목록, 드라이버 목록, 프로세스 종료, 파일 제거와 같은 더 많은 스파이 기능이 포함

C2 for the orders : jennifer998[.]lookin[.]at

C2 for rollback : 196[.]44[.]49[.]154

C2 URL for reconnaissance : hxxp://fund.cmc.or[.]kr/UploadFile/fame/x/o0.asp

 

2012 5~10월

정상 라이브러리를 사칭하여 악성 export 함수 하나를 교묘하게 넣는 방법을 사용했으며, DLL을 수정하여 Windows 서비스를 사용하기도 하다가 EXE 형식의 파일을 만들기도 했음

 

Sha256: 6f8bbea18965b21dc8b9163a5d5205e2c5e84d6a4f8629b06abe73b11a809cca
C2 for the orders: since[.]qpoe[.]com
C2 for rollback: applejp[.]myfw[.]us
C2 URL for reconnaissance: hxxp://fund[.]cmc[.]or[.]kr/UploadFile/fame/x/o0.asp

Sha256: b75c986cf63e0b5c201da228675da4eff53c701746853dfba6747bd287bdbb1d
C2 for the orders: since[.]qpoe[.]com
C2 for rollback: 69[.]197[.]149[.]98
C2 URL for reconnaissance: hxxp://fund[.]cmc[.]or[.]kr/UploadFile/fame/x/o0.asp

Sha256: 979d4e6665ddd4c515f916ad9e9efd9eca7550290507848c52cf824dfbd72a7e
C2 for the orders: usababa[.]myfw[.]us
C2 for rollback: indbaba[.]myfw[.]us
C2 URL for reconnaissance: hxxp://indbabababa[.]dns94[.]com/o.asp

 

2013 

이때는 현저히 줄어들었음. 트렌드 마이크로에서 공개한 paper[4]로 대체

 

2014 (2011년 샘플의 워크플로우가 일부 상수가 유사함 + 최초로 패커 사용)

=> Bisonal 개발자는 MPRESS라는 패커를 사용함. 패커만 적용됐으며, 해제한 코드는 이전과 동일함. 도메인과 포트번호도 단순한 XOR이 아닌 자체 알고리즘을 구현해 난독화를 수행함. 단순 스트링 탐지를 회피하기 위해 특정 문자열을 "Char" 형태가 아닌 "Byte" 형태로 변경

=> MFC로 컴파일 됐으며, 하드코딩된 User-Agent {"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322"}를 사용해 InternetOpenA() API 함수로 연결 수행하며, 더이상 raw socket을 사용하지 않음.

=> C2 주소에 접근할 때, 3가지 식별자를 파라미터로 사용해 접근하는 것이 특징

[그림 3] URL Pattern

SHA256: c6baef8fe63e673f1bd509a0f695c3b5b02ff7cfe897900e7167ebab66f304ca
C2 URL: hxxp://www[.]hosting[.]tempors[.]com:443/av9d0.0.0.0akspbv.txt

 

2016 (2014년보다 다양한 패커 사용)

=> 새로운 패커는 garbage jump와 call을 많이 가지기 때문에 디버거의 코드 추적이 매우 어려워지게 된다. 언패킹 후 코드에는 anti-analysis 기능을 계속 사용하고 있었으며, 함수에 대한 직접 CALL 호출이 아닌 JMP 및 레지스터 값 증가와 같이 garbage 코드를 찾는 것이 일반적이었다. 언패킹 루틴 특징으로는 마지막 단계에서 메모리를 할당하고 코드를 압축 해제할 때, 원래의 .textbss라는 빈 섹션으로 코드를 압축해제한다.

=> 모든 API 호출은 dispatcher 기능을 통해 이루어진다. CALL 호출을 하지 않고, JMP를 이용해 정해진 파라미터를 가지고 공격자가 지정해둔 특정 영역으로 가서 모든 범용 레지스터를 스택에 넣고 API 함수 주소와 파라미터 주소들을 일련 배치한 후 실행한다. 또한, dispatcher 기능에는 API를 호출할 때마다 GetTickCount()를 사용하여 디버깅되고 있는지 확인하는 안티 디버깅 기법을 사용하는 트릭 또한 존재했다. 

=> C2 접근 URL 형식은 2014년과 동일

SHA256: 15d5c84db1fc7e13c03ff1c103f652fbced5d1831c4d98aad8694c08817044cc
C2 URL: hxxp://emsit[.]serveirc[.]com/ks8d0.0.0.0akspbu.txt

 

2018 (2014년보다 다양한 패커 사용)

=> 2018년에는 MFC와 VC 라이브러리를 사용한 여러 샘플이 발견됐으며, 지속성에 사용되는 레지스트리의 키 이름은 "mismyou"였다.

=> 개발자의 실수로 인코딩되지 않은 C2-IP 주소(21kmg[.]my-homeip.net)를 디코딩 함수의 인자로 사용했다. 이를 실제로 실행하면, Non ascii 문자열(硟满v鐿緲赥e ?r雀溝1kdi簽)이 되면서 실제로 C2-IP 주소에 연결할 때는 엉뚱한 곳에 연결할 수 있으므로 실패작이라고 생각됨

[그림 4] 인코딩 되지 않은 문자열을 디코딩하는 과정 

 

SHA256: 92be1bc11d7403a5e9ad029ef48de36bcff9c6a069eb44b88b12f1efc773c504
C2: kted56erhg[.]dynssl[.]com

SHA256: d83fbe8a15d318b64b4e7713a32912f8cbc7efbfae84449916a0cbc5682a7516
C2 fail: hxxp://硟满v鐿緲赥e ?r雀溝1kdi簽:70/ks8d0.0.0.0akspbu.txt

 

2019 (Office Extension and a new packer)

=> dispatcher 기능을 사용하는 대신 평소와 같이 멀웨어가 스택에 인수를 push 하지만, .text 섹션 메모리 영역에서 압축을 풀 때 빌드된 점프 테이블을 호출한다. 점프 테이블로 이동해서 코드를 보면 2016년 패커와 동일하지만, 메커니즘이 보다 간단해졌다.  

[그림 5] jump 테이블 호출

=> TLS(thread-local storage) Callback을 사용해 일부 코드의 압축을 풀며, 이 단계에서는 메모리 할당을 피하면서 적절한 언패킹을 사용함. 

대체로 2016 버전과 매우 유사하며, C2 beaconing 기능을 비교할 때 일부 오프셋을 공유한다. 

=> Bisonal 악성코드 개발자는 CVE-2018-0798(Microsoft's Equation Editor vulnerability, 수식편집기 취약점)을 이용해 악용된 RTF 문서를 심어 배포했으며, 내부 쉘코드의 목적은 멀웨어를 실행하는 것이 아닌 확장자가 ".wll"인 % %APPDATA%\microsoft\word\startup\ 저장소에 드롭하는 것이다. 이 특정 확장자를 가진 디렉토리의 라이브러리는 Microsoft Office 확장자로 로드된다. 다음에 사용자가 Office 문서를 열면 멀웨어가 로드되어 실행될 수 있다. 이 멀웨어의 목적은 감염된 시스템($tmp$\tmplogon.exe)에 Bisonal을 배포하고 지속성을 위해 Run 레지스트리 키를 생성하는 것으로 나타났다.

=> 탈로스 연구원에 따르면 이 multistage 실행의 목적(.wll 사용)은 샌드박스 방지 기술이라고 생각이 든다고 전했다. 이유로는 샌드박스에 해당 멀웨어를 돌리면 .wll 파일 생성 작업만 나타나고 그 외 나머지 악성 행위는 발현되지 않기 때문이다. 샌드박스(ex: 조 샌드박스 등)에도 몇 년 전부터 user-interaction simulation 기능이 존재하기도 하고, 특정 매크로를 통해 문서파일과 같은 것들은 재실행 및 재부팅이 될 수 있도록 하는 옵션이 있다고 뉴스에서 본 것 같기도 하다..

=> 또한, 악성 페이로드를 설치하는 동안 Office extension을 이용하여 Bisonal 버전을 확인했으며, 드롭퍼는 Bisonal Binary offet 끝에 80MB의 이진 데이터(그림 6)를 추가한다. 탈로스는 이 데이터가 생성된 목적을 확신할 수 없다면서 안티 분석 기술일 수도 있다고 추정을 했다. 추정의 근거로는 일부 분석 도구들은 인풋 파일로 들어오는 바이너리의 크기를 제한한다는 것이라고 전했으며, VT API 같은 경우도 32MB보다 큰 파일을 업로드를 할 수 없다고 한다. 또한, 큰 파일을 올바르게 처리할 수 없는 샌드박스도 존재했다고 첨언했다. (크기가 중요하다는 것을 강조함) 

[그림 6] 추가된 바이너리

=> 추가된 데이터를 제외한 악성코드 코어를 확인해보면, 2012년과 같이 간단한 XOR(0x1d)을 수행했다. C2 통신의 경우에도 GET 메소드와 함께 전송되므로 ASCII 형태의 데이터를 보내야 하기 때문에 HTTP 쿼리에서 지원되는 문자를 얻기 위해 base64 인코딩을 추가했다. (개발자는 처음으로 POST에서 GET 요청으로 전환했음)

 

[그림 7] 2019년 샘플에서 발견된 C2 통신 URL 패턴

SHA256:37d1bd82527d50df3246f12b931c69c2b9e978b593a64e89d16bfe0eb54645b0
C2 URL:hxxp://www[.]amanser951[.]otzo[.]com/uiho0.0.0.0edrftg.txt

 

BISONAL 타임라인 요약은 아래와 같다.

[그림 8] BISONAL 2010~2019 타임라인

2020 (Ref: ASEC of Ahnlab)[2]

=> "신천지" 관련 악성코드가 유포되었는데, 파일 명은 xlsx, ppt 처럼 보이지만, 유니코드 RLO(Right to Left Override) 방식을 통해 파일 확장자를 다른 형태로 보이도록 트릭을 사용했다. 실제 악성 파일은 "*.scr" 파일이다. 

RLO : 유니코드를 이용한 확장자 변조 기법으로, 대부분 국가에서는 왼쪽에서 오른쪽으로 글자를 적지만 몇 국가는 우측에서 좌측으로 글자를 쓰는 경우도 있다. 유니코드는 이와 같은 표현 방식도 사용할 수 있어 이를 이용하면 "Rcs.xlsx"로 작성할 수 있고, 실행 시 xlsx.scR 형태로 scr로 실행될 수 있다. 참고로 scr은 pe 형태로 exe와 똑같이 실행됨!

=> 파일의 속성 - 파일 형식을 통해 RLO를 적용했는지 확인할 수 있음

 

[미끼로 사용된 파일명 및 내용]

신천지예수교회비상연락처(1).Rcs.xlsx

[그림 9] 신천지예수교회비상연락처 내용

신천지예수교 증거장막성전 총회본부 홍보부 언론홍보과 보좌 조직RCS.ppt

[그림 10] 신천지예수교 증거장막성전 총회본부 홍보부 언론홍보과 보좌 조직 내용  

안랩에 따르면 파일을 실행하면, [그림 9~10] 내용이 포함된 정상 파일들이 실행되면서, %TEMP% 경로에 2개의 vbs파일과 exe 파일이 드롭 및 실행한다고 한다.

- %TEMP%\[랜덤1].vbs : 정상 xlsx 파일을 실행
- %TEMP%\[랜덤2].vbs : *.scr 파일을 삭제
- %TEMP%\services.exe : 백도어 악성코드

 

지속성을 위해 레지스트리키에 services.exe를 등록

HKCU\Software\Microsoft\Windows\CurrentVersion\Run\mismyou "C:\Users\vmuser\AppData\Local\Temp\services.exe"

 

레지스트리 명은 mismyou로 탈로스에서 작성한 2018년도 샘플에서 발견된 문자와 동일하다. 완전하다고는 볼 수 없지만, 의심이 들 수 있다.

[그림 11] 지속성을 위한 레지스트리키 등록 및 mismyou 발견

MD5 : bc0024a58abce00564801f12774a68c8

         d64b9d67743584dbcd4f4d81c863ef8a

C2 URL: http[:]//imbc[.]onthewifi[.]com/ks8d[IP주소]akspbu.txt 

=> C2 주소를 보면 위에서 분석된 C2의 파라미터 값(akspbu.txt) 유사한 것을 확인할 수 있다.

 

백도어 기능으로 프로세스, 컴퓨터 등 정보를 보내기도 하고 추가 파일을 다운로드하는 명령이 존재하며, (그림 12)는 안랩에서 공개한 2018년 Bisonal과 비교 화면이다. 위에서 언급한 것과 같이 2019년도에는 GET 방식을 사용했다고 했는데, 2018년도에는 다시 POST 방식을 수행한 것을 확인할 수 있었으며, 2018년도의 악성코드 내 문자열이 유사한 점이 있다.

 

[그림 12] 2018년과 2020년 Bisonal 비교화면

[결론]

본 서베이에서는 Cisco talos와 Ahnlab에서 공개한 paper를 바탕으로 Bisonal에 대해 2009년부터 2020년까지 유포된 정황과 기능에 대해 간략하게 알아보았으며, 나름 정리를 해봤다. 개인적으로 생각했을 때, 단순한 기능을 가진 정보유출형 악성코드라고 생각하지만, 타겟을 국내 정부와 공공기관 및 민간 부문을 대상으로 하고 있어 주의가 필요할 것이다. 코드를 재사용하는 것이 많다보니 벤더사에 탐지가 잘 될 것으로 보이지만, 꾸준히 만들어지는 것으로 보아 미래에는 어떤 새로운 기법이나 패치가 제대로 되지 않은 원데이 및 제로데이와 결합할 가능성도 있을 것으로 보인다.

 

Reference

[1] https://blog.talosintelligence.com/2020/03/bisonal-10-years-of-play.html

 

Bisonal: 10 years of play

A blog from the world class Intelligence Group, Talos, Cisco's Intelligence Group

blog.talosintelligence.com

[2] https://asec.ahnlab.com/1298

 

신천지 비상연락처 위장한 Bisonal 악성코드 유포 중 (2020.03.05)

ASEC분석팀은 현재 우리나라에서 이슈가 되고있는 신천지 관련 악성코드가 유포된 것을 확인하였다. 유포 파일명은 xlsx 엑셀 또는 ppt 파워포인트 문서 파일로 보이지만, 유니코드 RLO(Right to Left Override)..

asec.ahnlab.com

[3] https://www.boannews.com/media/view.asp?idx=86816

 

코로나19 사태의 중심 ‘신천지’ 비상연락처? 알고 보니 ‘비소날’ 악성코드

최근 코로나19 사태에서 가장 큰 주목을 받고 있는 신천지예수교 증거장막성전(이하 신천지)의 비상연락처와 언론홍보 관련 조직도 파일로 위장한 악성코드가 유포되고 있는 것으로 드러났다.

www.boannews.com

[4] https://blog.trendmicro.com/trendlabs-security-intelligence/pulsing-the-heartbeat-apt/

 

Pulsing the HeartBeat APT - TrendLabs Security Intelligence Blog

Last November 12-14th, I had this great opportunity to attend AVAR 2012 Conference in Hangzhou, China. There were a lot of great presentations; I must say I feel very privileged to have presented our paper, The HeartBeat APT Campaign, along with these talk

blog.trendmicro.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함