보안정보
전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.
Command & Control 서버를 이용하는 악성행위 분석
2023.04.05
55,520
01. Command & Control? C2?
악성코드 분석 보고서를 읽다 보면 '외부 C2 또는 C&C를 통해 추가적인 파일이나 스크립트를 다운로드하여 추가 악성코드를 다운로드 받는다'라는 형태의 문장을 자주 접하게 된다. 여기서 드는 의문점은 ‘왜 C2 또는 C&C를 이렇게 많이 사용하는가?’이며 정확하게 C2가 어떤 뜻인지 모호해지는 경우가 존재한다. 국내에 존재하는 C2의 동향은 KISA에서 발간된 '2022년 상반기 악성코드 은닉 사이트 탐지 동향 보고서'에서 확인할 수 있다.
2021년 하반기 대비 악성코드 유포지는 38% 증가하였으며, 경유지 주요 업종은 제조, 건강/의학, 교육/학원 사이트 순으로 나타났다. 또한, IoT 악성코드인 모지(Mozi)가 여전히 기승을 부리고 있고 이모텟(Emotet) 유포지 지속 탐지, 정보 유출 악성코드의 지속적인 유포. 마이크로소프트 지원진단도구(MSDT) 취약점인 Folina(CVE-2022-30190)를 이용한 악성코드 유포가 기승을 부리고 있다. 이를 토대로 악성코드 유포지 및 경유지는 지속적으로 증가하고 있으며 다양한 업종의 사이트를 경유지로 사용하는 것으로 확인된다.
악성코드 유포지는 악성코드를 유포하기 위한 사이트지만 경유지의 경우는 유포지로 연결하기 위한 URL이 포함된 악성 프로그램 또는 스크립트를 통칭하며 우리가 알고 있는 Command & Control 서버와 용도가 일치하게 된다. 하지만 Command & Control (C&C), C2, 경유지 등 명칭이 혼재되어 있다는 점이 존재하여 Command & Control 서버의 정의와 기존에 사용/악용되고 있는 방식과 최근 발생하는 추세까지 알아보고자 한다.
02. Command & Control 서버란?
1) Command & Control 서버의 정의
Command & Control 서버는 명령 및 제어, C2 또는 C&C으로 불리며 공격자가 초기 침투에 성공한 장치와의 통신을 유지하는 데 사용하는 도구 및 기술 집합이다. 일반적으로 피해자 조직의 장치와 공격자가 제어하는 플랫폼 간의 하나 이상의 은밀한 통신 채널로 구성되며, 감염된 대상에 명령 전달, 추가 악성 페이로드를 다운로드, 탈취한 데이터를 공격자에게 전달하는 데 사용된다. 마이터 어택(MITRE ATT&CK) 프레임워크 v12 기준으로 16가지 상위 Command & Control 기술, 23가지 하위 Command & Control 기술이 나열되어 있다. 이번 3월호에서는 Command & Control 서버를 편의상 C2 서버로 작성하였다.
C2 서버를 이야기할 때 등장하는 용어로 좀비(Zombie), 봇넷(Botnet), 비콘(Beacon)이 있다.
① 좀비 (Zombie)
좀비는 악성코드에 감염되어 실제 소유자 모르게 또는 동의 없이 공격자가 원격으로 제어할 수 있는 컴퓨터 또는 기타 유형의 연결된 장치다. 일부 바이러스, 트로이 목마 및 원치 않는 프로그램(PUA)이 장치를 감염시킨 후 정보 탈취 등 특정 작업을 수행하지만, 다수의 악성코드는 주로 공격자의 C2 서버에 연결하기 위한 도구로 사용된다. 연결이 성공된 경우 스팸메일 발송을 위한 이메일 릴레이 서버부터 대규모 분산 서비스 거부 공격 (DDoS)에 가담하는 것까지 다양한 작업을 수행할 수 있다.
② 봇넷 (Botnet)
봇넷은 불법적인 목적을 위한 좀비화된 장비 모음이다. 봇넷을 이용하여 암호화폐 채굴에서부터 분산 서비스 거부 공격 (DDoS) 공격을 통해 웹사이트를 오프라인 상태로 만드는 것까지 가능하다. 봇넷은 일반적으로 공통 C2 인프라를 중심으로 통합된다. 또한, 공격자가 AaaS(Attack as a Service) 유형으로 다른 범죄자에게 봇넷에 대한 액세스 권한을 판매하는 것도 가능하다.
③ 비콘 (Beacon)
비콘은 감염된 장비가 명령이나 추가 페이로드를 전달받기 위해 특정 시간에 공격자의 C2 서버에 연결을 시도하는 클라이언트 악성코드를 지칭한다. 탐지를 피하고자 일부 비콘은 임의의 간격으로 신호를 보내거나 C2 서버에 연결하기 전에 일정 기간 대기 상태로 존재하는 경우도 있다.
2) C2 모델
① 중앙 집중식
중앙 집중식 모델은 기본적으로 알고 있는 클라이언트-서버 관계와 매우 유사하게 동작한다. 감염된 PC에서 동작하는 클라이언트 악성코드는 최초 실행 시 C2 서버에 접속하여 실행 여부를 알린다. 보통 감염된 PC가 속한 인프라는 각종 보안 장비 및 로드 밸런서 등 복잡한 네트워크 구성을 가지게 되는 경우가 일반적이다. 공격자는 합법적인 웹사이트를 침투한 이후 소유자 모르게 C2 서버로 호스팅 하거나 퍼블릭 클라우드 서비스 및 콘텐츠 전송 네트워크(CDN)를 이용하여 C2 활동을 호스팅 또는 마스킹 하는 데 사용된다.
C2로 사용되는 서버는 캠페인과 관련된 경우가 많으며 빠르게 발견되는 경우 도메인 및 서버는 추적을 피하고자 몇 시간 내에 비활성화될 수 있다. 최신 악성코드는 다수의 C2 서버를 이용하여 한쪽의 연결이 불가능한 경우 다른 C2 서버로 연결되도록 하드코딩하는 경우도 있으며, 빠른 발견을 피하고자 C2를 난독화하는 방법을 사용하고 있다. 추가적으로, 사진에 포함된 GPS 좌표와 Instagram의 댓글에서 C2 서버 목록을 가져오는 악성코드도 발견되었다.
② 피어 투 피어 (P2P)
P2P 모델은 명령 및 제어 명령은 봇넷의 구성원이 서로 메시지를 중계하는 분산된 방식으로 전달된다. 일부 봇은 여전히 서버로 작동할 수 있지만 중앙 또는 마스터 노드는 없다. 이에 따라 중앙 집중식 모델보다 비활성화하기 훨씬 더 어려워지지만, 공격자가 전체 봇넷에 명령을 내리기가 더 어려워질 수도 있다. P2P 네트워크는 기본 C2 채널이 중단될 경우 대체 메커니즘으로 사용되기도 한다.
③ 기타
감염된 장비에 지시를 내리기 위한 다양한 기술이 관찰되고 있으며, 일부 공격자는 보통 소셜 미디어 플랫폼(SNS)을 거의 차단하지 않는다는 점을 악용하여 C2 서버로 광범위하게 사용했다. Twittor라는 프로젝트는 Twitter의 다이렉트 메시지만 사용하여 완전한 C2 서버로 악용되는 것을 목표로 한다. 또한, 공격자들은 Gmail, IRC 채팅방, Pinterest를 사용하여 감염된 장비에 지시를 내리기 위한 도구로 활용하고 있다는 것이 확인되었다.
3) C2를 사용하는 이유
① 측면 이동 (Lateral Movement)
공격자가 최초 목표에 공격 성공 시 연결된 C2를 이용하여 다른 호스트로 측면 이동을 시도한다. 최초로 측면 이동에 성공한 장비가 중요한 데이터를 가지고 있지 않을 수 있으나 전체 시스템을 장악하기 위한 발판으로 사용할 수 있다. 파일 서버나 도메인 컨트롤러(DC)와 같은 서버에 엑세스 될 때까지 측면 이동을 지속적으로 수행할 수 있다.
② 다단계 공격 (Multi-stage Attacks)
일반적인 사이버 공격은 공격 방식에서 다양한 단계를 이용하는 경우가 많다. 공격의 초기 단계에서 C2에 접근하여 추가 악성코드를 다운로드 받게 하는 드로퍼(Dropper) 또는 다운로더(Downloader)를 사용하는 경우가 많아지고 있다. 드로퍼를 이용하여 수천 개의 조직을 감염시킨 이후 공격자가 가장 수익성이 높은 대상을 위한 맞춤형 2단계 악성코드를 만들 수 있다. 이를 이용할 경우 은행이나 병원과 같은 주요 대상에 대한 액세스 권한을 랜섬웨어 갱단에 판매하는 것이 가능해진다.
③ 데이터 유출 (Data Exfiltration)
C2와 통신은 일반적으로 양방향 통신으로 공격자는 감염된 대상에 명령을 보내는 것 외에도 민감한 데이터를 다운로드하거나 유출하는 행위가 가능하다. 탈취된 데이터는 피해 대상에 따라 신용 카드 번호 또는 개인 정보부터 군사 기밀문서에 이르기까지 다양한 데이터가 탈취될 가능성이 존재한다. 점점 더 많은 랜섬웨어 조직이 감염된 대상을 협박하기 위한 추가 전술로 데이터 유출을 사용하고 있으며 백업에서 데이터를 복구할 수 있더라도 공격자는 탈취한 정보를 공개하겠다는 추가적인 위협에 직면하게 될 것이다.
03. 공격자가 C2를 제작하는 방식
지금까지 C2의 정의, 모델, 사용하는 이유에 대해 알아보았다. 공격자가 C2를 이용하여 악성코드가 설치된 장비를 이용한 측면 이동, 정보 탈취, 좀비화를 통한 봇넷 가입 등 다수의 공격에 악용이 가능한 점을 확인하였다.
여기서 한 가지 의문점은 공격자가 C2를 만들 때 서버 또는 명령을 전달할 대상이 필요하다는 것이다. 다양한 C2 모델을 사용하더라도 1개 이상의 직접 개입할 수 있는 C2를 공격자가 확보해야 하며, 최대한 C2의 존재를 늦게 알아차려야 한다. 이를 위해 공격자는 C2를 직접 생성부터 정상 서비스를 악용하는 형태까지 다양한 방식을 사용하고 있으며 이번 2023년 3월호에서는 이러한 방식에 대해서 자세하게 알아보고자 한다.
1) 공격자가 C2 생성 또는 정상 서버 탈취
가장 편한 방법은 공격자가 C2를 직접 생성하는 것이다. 물리 또는 가상 PC를 이용하여 C2로 사용될 서버를 직접 제작하는 것으로 명령 및 제어에 필요한 항목 또는 추가 페이로드를 미리 저장한다. 이렇게 생성된 C2의 경우 공격자가 직접 생성하였기 때문에 관리는 쉬울 수 있으나 캠페인 같은 대단위 공격의 경우 공격자의 정체가 발각당할 우려가 있다.
이를 해결하기 위해 공격자 입장에서 선택하기 편한 방법은 정상 서비스 중인 서버를 탈취하는 방법이다. 일반적으로 가장 많이 사용되는 방법으로 정상 서비스 중인 취약한 서버를 노려 탈취한 이후 공격자의 C2로 몰래 사용하는 방법이다. 사용하던 도중 C2를 추적하는 보안 전문가 등 서버를 비활성화해야 하는 상황에 직면할 경우 언제든지 서버 내 자신이 숨겨둔 파일을 삭제하기 용이해지며 일반적인 접근 시 정상 사이트로 보이기 때문에 표면상으로 해당 서버가 C2로 사용 중이라는 점을 바로 알아차리기 힘들다는 장점이 있다.
2) 정상 서비스에 C2 생성 (클라우드 컴퓨팅)
첫 번째 방법인 공격자가 C2 생성 또는 정상 서버를 탈취하여 사용하는 방식에서 확장되는 버전으로 외부에서 서비스 중인 클라우드 컴퓨팅 서버에 C2 서버를 제작하여 사용하는 방식이다. POS(Point-of-Sales) 악성코드인 AlinaPOS와 JackPOS의 변종이 2017년 AWS에서 무료로 제공하는 EC2 t2.micro 인스턴스를 악용하여 수천 개의 C2를 생성/사용한 이력이 있다. 클라우드 컴퓨팅 서비스는 보통 최초 계정 생성 및 결제 정보 입력 시 무료로 인스턴스를 제공하는 프로모션을 악용하여 사용하며 탈취된 이메일 계정 / 결제정보를 이용하는 것으로 보인다. 하지만, 일정 트래픽 이상 발생 시 사용량에 대해 결제해야 정상적으로 사용할 수 있으며 신고 등의 이유로 서비스 운영 주체의 직권으로 인스턴스가 비활성화되는 경우도 있어 C2 서버를 지속적으로 운영하기 어렵다.
3) 클라우드 저장소를 C2로 이용
러시아 추정 공격그룹인 APT29(Cozy Bear, Nobelium)의 경우 2022년 5월~6월까지 외국 대사관을 대상으로 공격하는 캠페인 전개 당시 클라우드 저장소인 Dropbox, Google Drive를 활용하여 자신들의 공격에 악용하였다. 클라우드 저장소 사용 시 장점은 쉬운 가입 절차를 악용하여 탈취된 이메일 계정 / 결제정보만으로 계정 생성이 가능하며 데이터 보관에 큰 용량이 들지 않는다는 점을 이용하고 있다. 하지만 클라우드 서버를 사용하는 것과 동일하게 내부 모니터링, 신고 등의 사유로 파일 다운로드가 막히거나 계정이 정지되는 상황이 발생할 가능성이 존재한다.
4) 텍스트 공유 서비스를 C2로 이용
공격자가 생성한 C2 서버가 악성으로 탐지되어 차단되는 경우가 늘어남에 따라 공격자는 파일을 전송하는 방식에서 악성코드 다운로드 경로나 악성 스크립트를 텍스트로 전달하는 방식으로 눈을 돌리기 시작했다. 공격자들이 많이 사용한 방식으로 텍스트 공유 사이트에 공격자가 원하는 텍스트를 저장한 이후 최초로 설치된 다운로더나 드롭퍼가 업로드된 텍스트를 읽어 들여 2차 C2로 연결, 스크립트 코드 다운로드, 아주 작은 단위의 실행파일을 직접 다운로드하는 등의 방식으로 악용하고 있다.
여기서 살펴볼 샘플 또한 활발하게 활동하고 있는 njRAT의 변종으로 텍스트 공유 서비스인 Pastebin을 1차 C2로 이용하고 있다. 공격에 사용될 텍스트를 Pastebin에 업로드하며 해당 샘플은 실행파일 데이터를 base64로 인코딩한 이후 저장하며 최초 접근 시 해당 텍스트를 다운로드 받아 njRAT를 실행하는 것으로 확인되었다.
최초 실행 시 연결할 Pastebin 주소를 암호화하고 있으며 복호화 이후 Pastebin에 접속하여 텍스트 데이터를 요청한다.
현재 페이지는 존재하지 않으나 전송되는 데이터는 base64로 인코딩된 데이터를 전송받는 것으로 확인되며 복호화 시 PE 구조의 실행파일로 확인된다.
최종 실행되는 파일은 njRAT로 확인되며 키로깅을 비롯한 정보 탈취를 목표로 하는 인포스틸러이다. 2차 C2는 hxxp://ddrrtt[.]ddns[.]net:1177로 탈취된 정보를 전송하는 것으로 확인된다.
5) GitHub Codespaces를 악용하여 C2로 이용
GitHub Codespaces는 클라우드 기반의 개발 환경으로 개발자가 웹 브라우저에서 직접 코드를 생성, 편집 및 실행할 수 있다. JavaScript, Python 및 Ruby 프로젝트에 필요한 모든 도구와 종속성이 포함된 컨테이너 기반의 가상 머신(VM)을 생성한다. 즉, 개발자는 로컬에서 환경설정에 오래 걸리는 통합 개발 환경(IDE)을 설정할 필요 없이 웹에서 실시간으로 동일한 환경에서 작업 가능한 환경을 생성해 준다는 장점이 있다.
GitHub Codespaces 기능 중 내부 특정 포트를 외부로 오픈하여 Private/Public으로 공유할 수 있다. Private 방식은 소속된 조직원만 접근할 수 있으며 쿠키를 사용하여 인증하지만, Public으로 설정될 경우 인증 없는 사용자도 공개된 포트로 접근이 가능하다. 이 방식을 악용할 경우 공격자가 공격에 사용될 스크립트나 악성코드를 아무런 조건 없이 유포하거나 C2로 사용이 가능하다. 특히, GitHub의 경우 다른 클라우드 서비스(AWS, GCP 등)가 요구하는 신용카드를 비롯한 지불수단이 필요 없기 때문에 공격자가 사용하는 진입장벽이 낮아졌다.
Trend Micro에서 2023년 1월에 발견한 GitHub Codespaces 취약점 PoC를 이용하여 실제 악용되는 방법에 대해서 알아보고자 한다.
PoC 테스트에 사용된 컨테이너 이미지는 Microsoft에서 제작한 devcontainers Docker 이미지로 VS Code Remote를 이용하여 GitHub Codespaces를 사용하는 이미지이다. devcontainers 이미지를 이용하여 컨테이너 생성 시 forwardPorts 속성을 사용하여 8000번 포트를 포워딩에 사용하며 postStartCommand 속성을 사용하여 컨테이너가 성공적으로 시작될 때마다 Python 기반 HTTP 서버를 실행하는 코드를 공격자의 GitHub 리포지토리 내 .devcontainer\devcontainer.json으로 저장한다.
공격자는 codespace를 배포하기 위해 액세스 토큰을 사용하여 GitHub CLI으로 접근하게 된다. 이전에 생성한 devcontainer.json 을 이용하여 codespace 인스턴스를 생성하며 이때 설정된 8000번 포트를 Public으로 오픈 및 포워딩, HTTP 서버를 오픈하면서 외부에서 접속할 수 있는 opendir를 생성한다.
공격자는 사용될 악성파일을 codespace 내부에 저장하며 생성된 링크는 PoC 기준 100초간 유지 후 삭제하게 되지만 최대 30일까지 유지할 수 있다.
공격자의 GitHub 토큰 및 이전에 지정한 8000번 포트를 Public으로 오픈하여 codespace를 생성하며 PoC가 정상 동작할 경우 외부에서 접속할 수 있는 링크를 반환한다. 실제 접근 시 페이지에 업로드된 악성코드가 보이며 인증이 필요 없는 접속으로 인해 쿠키를 사용하지 않는 것을 확인할 수 있다. 이 방식을 악용하여 악성코드에 해당 도메인을 삽입하여 C2 역할로 사용 가능하며 GitHub와 사용자 간 통신을 하기 때문에 HTTPS로 통신하게 되어 일반적인 방법으로는 탐지가 어렵다.
04. 맺음말
지금까지 악성코드가 C2 서버를 이용하여 공격자가 원하는 방식으로 사용하는 방법에 대해 알아보았다. 공격자가 C2 서버를 생성/탈취하는 것부터 정상 서비스를 악용하여 탐지를 우회하는 방법을 사용하는 점으로 미루어 보아 C2 서버의 사용은 정보 탈취를 목적이라면 필수 불가결이라 볼 수 있다. 또한, 정보 탈취 이외에도 악성코드 유포 과정에서 중간 기착지 역할 및 서버를 일회용으로 사용한 이후 폐쇄하는 전략을 사용하여 탐지를 더욱 어렵게 하고 있다.
일반적으로 인바운드 통신에 관심을 가지는 경우가 많으나 아웃바운드 통신에 대한 감시는 소홀히 하는 경우가 존재한다. 보통, 악성코드가 감염된 이후 외부 C2가 내부로 접근하는 인바운드 통신이 아닌 감염된 PC가 외부 C2로 통신하는 리버스 커넥션(아웃바운드 통신)이 큰 비중을 차지하기 때문에 아웃바운드 통신에 대한 탐지/대응을 더욱 강화해야 한다.
아웃바운드 DNS 요청을 조직 내부에서 사용하는 DNS 서버로 제한하여 DNS 터널링 공격을 방지하거나 프록시를 사용하여 아웃바운드 통신을 검사하는 방법도 존재한다. 프록시를 사용하여 검사하는 경우 C2와 암호화를 이용한 통신을 고려해야 하므로 SSL/TLS 트래픽 추가 검사 설정에 대한 논의가 필요하며 DNS 필터링 서비스를 사용하여 의심스럽거나 새로 등록된 도메인에 대한 C2 요청을 차단하는 방식으로 대응이 가능할 것으로 보인다.
05. 참고자료
1) What is C2? Command and Control Infrastructure Explained
https://www.varonis.com/blog/what-is-c2
2) Thousands of Amazon AWS Instances Host C&C Servers for POS Malware
https://themerkle.com/thousands-of-amazon-aws-instances-host-cc-servers-for-pos-malware/
3) Russian SVR hackers use Google Drive, Dropbox to evade detection
https://www.bleepingcomputer.com/news/security/russian-svr-hackers-use-google-drive-dropbox-to-evade-detection/
4) njRAT Spreading Through Active Pastebin Command and Control Tunnel
https://unit42.paloaltonetworks.com/njrat-pastebin-command-and-control/
5) 2022년 상반기 악성코드 은닉사이트 탐지 동향 보고서
https://krcert.or.kr/kr/bbs/view.do?searchCnd=1&bbsId=B0000127&searchWrd=%EC%9D%80%EB%8B%89&menuNo=205021&pageIndex=1&categoryCode=&nttId=66905
6) Abusing a GitHub Codespaces Feature For Malware Delivery
https://www.trendmicro.com/en_us/research/23/a/abusing-github-codespaces-for-malware-delivery.html