FritzFrog: 돌아온 P2P 봇넷

Executive Summary
2020년 8월 Guardicore Labs(현 Akamai Threat Labs)는 FritzFrog이라는 피어투피어 봇넷 캠페인을 발견했습니다
이 분산형 봇넷은 클라우드 인스턴스, 데이터센터 서버, 라우터 등 SSH 서버를 노출하는 모든 디바이스를 표적으로 삼으며 감염된 노드에서 모든 악성 페이로드를 실행할 수 있습니다
이 봇넷의 피어투피어 아키텍처와 독점 코드는 높은 수준의 정교함을 보여줍니다
이 봇넷은 최근 다시 등장해 한 달 만에 감염률이 10배 증가했으며 헬스케어, 교육, 정부 부문의 서버를 감염시켰습니다
이 봇넷이 다시 등장한 이후 1500개의 호스트가 감염되었으며, 이 중 대부분은 중국에 있습니다
유포되고 있는 Golang 멀웨어는 프록시 네트워크 사용과 WordPress 서버 표적화 등 새로운 기능을 봇넷에 추가합니다
최근의 공격은 FritzFrog의 오리진에 대한 더 많은 증거를 제공하며, 중국에서 활동하는 공격자 또는 중국인을 가장한 공격자와의 연결 가능성을 시사합니다
Akamai Threat Labs는 최신 버전의 멀웨어를 처리할 수 있도록 FritzFrog 탐지 툴을 업데이트했습니다

FritzFrog v1 - 간략한 요약
FritzFrog는 피어투피어 봇넷으로, 명령 및 제어 서버가 중앙 집중식 단일 머신에 국한되지 않고 분산 네트워크의 모든 머신에서 수행될 수 있다는 것을 의미합니다. 즉, 멀웨어 프로세스를 실행하는 모든 호스트가 네트워크의 일부가 되어 네트워크에 있는 머신을 제어하기 위한 명령을 주고받고 실행할 수 있습니다.
FritzFrog는 SSH를 통해 전파됩니다. 간단한(그러나 공격적인) 무차별 대입 기법을 사용해 서버의 인증정보를 찾으면 새로운 피해자와 SSH 세션을 설정하고 멀웨어 실행 파일을 호스트에 다운로드합니다. 그런 다음 멀웨어는 명령을 수신하고 대기하기 시작합니다. 이러한 명령에는 표적 교환, 감염된 머신의 세부 정보 공유, 파일 전송, 스크립트 및 바이너리 페이로드 실행 등이 포함됩니다. 명령의 전체 목록은 이전 블로그 게시물을 참고하시기 바랍니다.
Akamai는 FritzFrog를 “차세대” 봇넷으로 간주하는데, 그 이유는 위협 환경에서 독보적인 여러 가지 특성을 가지고 있기 때문입니다.
지속적인 업데이트 - 표적과 유출된 머신의 데이터베이스가 원활하게 교환됩니다
공격적 - 무차별 대입은 광범위한 사전을 기반으로 합니다. 이에 비해 최근에 발견된 또 다른 P2P 봇넷인 DDG는 “root”라는 사용자 이름만 사용했습니다
효율적 - 표적이 노드에 고르게 분산되어 있습니다
독점적 - P2P 프로토콜은 완전히 독점적이며 μTP와 같은 알려진 P2P 프로토콜에 의존하지 않습니다
FritzFrog v2 - 재등장
2020년 8월 FritzFrog에 대한 세부 정보를 공개한 직후 Guardicore Labs 팀(현 Akamai Threat Labs)은 공격 인시던트 수가 감소하는 것을 발견했습니다. 하지만 2021년 12월 초부터 글로벌 센서 네트워크를 향한 공격이 증가하기 시작했습니다.
FritzFrog 공격은 SSH 무차별 대입 공격으로 시작해 파일을 다운로드하고 실행하는 방식으로 진행됩니다. 이 파일은 즉시 포트 1234에서 수신 대기하고 포트 22와 2222를 통해 수천 개의 인터넷 IP 주소를 스캔하기 시작합니다.
기존 FritzFrog 공격과 새로운 공격의 한 가지 차이점은 악성 프로세스의 이름입니다. 첫 번째 공격에서는 악성 프로세스의 이름이 ifconfig 또는 nginx였지만, 이번에는 FritzFrog 운영자들이 apache2라는 이름을 선택했습니다.
새로운 변종에 대한 모니터링을 시작한 결과, FritzFrog 공격 건수가 놀라울 정도로 증가해 하루에 500건으로 정점을 찍었습니다.

피해자 분석
FritzFrog의 첫 번째 캠페인에 대한 조사의 일환으로 Akamai는 Frogger라는 툴을 개발했습니다. Frogger를 사용하면 암호화폐 채굴기가 실행 중인 경우 가동 시간, 해시레이트, 피어, 해즈레이트 등 감염된 호스트에 대한 정보를 수집할 수 있습니다. 이 프로그램은 감염된 노드의 IP 주소를 가져와 암호화된 통신 채널을 통해 호스트에 쿼리해 호스트의 상태에 대한 정보를 수신합니다. 이를 통해 해당 노드와 연결된 다른 노드에 대해 자세히 알아볼 수 있습니다. 이 과정에서 봇넷의 인프라를 활용합니다.
피해자 분석은 센서를 공격한 머신의 IP 주소와 Frogger가 확보한 정보라는 두 가지 소스를 기반으로 이루어졌습니다. 즉, 센서에서 확인된 공격자 IP 목록으로 시작한 다음 Frogger를 사용해 각 공격자의 피어를 재귀적으로 쿼리해 목록을 확장했습니다.
아래 그래프는 센서를 공격한 IP 주소의 일일 수와 연속된 날 사이의 공격자 수 차이를 보여줍니다. 공격 노드(멀웨어를 실행하는 피해자 머신)의 수가 증가하는 것이 매우 우려됩니다.


두 번째 캠페인 기간 동안 FritzFrog는 1500개 이상의 서로 다른 호스트를 감염시켰습니다. 이 호스트들은 헬스케어, 고등 교육, 정부 등 다양한 규모와 부문의 기업에 속한 서버 머신이었습니다. 유럽의 텔레비전 채널 네트워크, 러시아의 헬스케어 장비 제조업체, 동아시아의 여러 대학에서 감염된 머신을 발견했습니다. 지도에서 볼 수 있듯이 중국에서 피해 머신이 집중적으로 발견되었습니다.

새로운 멀웨어 기능
FritzFrog 바이너리는 Golang으로 작성되었으며 다양한 아키텍처에서 실행되도록 컴파일할 수 있습니다. UPX를 사용해 패키징되며 일반적으로 ifconfig, nginx, apache2 또는 php-fpm의 네 가지 프로세스 이름 중 하나로 실행됩니다. 이미 이전 게시글에서 멀웨어에 대한 철저한 분석을 제공했으므로, 이번 글에서는 새로운 샘플과 추가된 내용을 중점적으로 다루겠습니다.
FritzFrog는 매일, 때로는 하루에 여러 번 업데이트됩니다. 대부분의 새 릴리스에는 버그 수정이 포함되지만 일부 버전에서는 멀웨어에 새로운 기능이 추가되기도 합니다.
WordPress 표적화 준비
FritzFrog는 WordPress 서버 추적을 위한 인프라를 구축하는 새 버전을 출시했습니다. 이 버전에는 WordPress 및 WordpressTargetsTTL이라는 목록에서 항목을 추가하고 제거하는 기능이 포함되어 있습니다. 아래의 분해된 코드 스니펫은 WordPress 표적 목록에 새 항목을 추가하는 새로운 P2P 명령인 put wordpress의 구축을 보여줍니다. 이 보고서가 작성된 시점에 감염된 모든 노드에 저장된 이 목록은 아직 비어 있습니다.

이 멀웨어에는 WordPress 표적을 크래킹하거나 표적을 식별할 수 있는 모듈이 포함되어 있지 않습니다. 이를 근거로 볼 때, 이 코드는 해당 표적을 감염시켜 정보 유출, 랜섬웨어 등과 같은 채굴 이외의 목적으로 사용할 수 있는 새로운 버전을 위한 준비 작업으로 추정됩니다.
Tor 프록시 체인
FritzFrog은 SSH 연결 프록시를 로컬 포트 9050으로 설정해 Tor 프록시 체인을 사용하고 발신 SSH 연결을 프록시할 수 있습니다. Tor 프록시 체인은 소스에서 목적지까지 캡슐화 기반 경로를 생성해 사용자에게 더 나은 개인 정보 보호 및 마스킹을 제공하는 노드 네트워크로, 각 노드는 직접 인접한 노드만 인식합니다.
FritzFrog는 로컬 포트 9050으로 요청을 프록시함으로써 Tor 프록시 체인을 사용해 소유한 SSH 디바이스에 연결합니다. 소유한 디바이스는 프록시 체인의 마지막 노드에서 들어오는 요청을 수신하는 것으로 인식합니다. 이는 현재 감염된 노드의 주소를 숨기는 데 사용될 수 있습니다. 현재 이 기능은 존재하지만, 아직 멀웨어가 이 기능을 사용하는 사례는 발견되지 않았습니다.
SCP
FritzFrog는 이제 SCP를 사용해 자신을 원격의 감염된 서버로 복사합니다. 이는 기존 SSH 세션을 통해 cat 명령을 사용해 새로운 피해자에게 멀웨어 실행 파일을 드롭했던 첫 번째 버전과는 다릅니다. 새로운 구축은 GitHub의 Golang으로 작성된 공개 SCP 라이브러리를 사용합니다. 두 방법 중 어느 것이 다른 방법보다 의미 있는 장점이 있는지 확인할 수 없었습니다. 그러나 SCP 라이브러리의 작성자가 중국에 있다는 점은 주목할 만합니다.
차단 목록
FritzFrog의 초기 버전은 특정 머신에 크래커(무차별 대입) 모듈이 침입하지 못하도록 차단 목록을 구축했습니다. 특수 P2P 명령인 putblentry를 사용하면 이 목록에 항목을 동적으로 삽입할 수 있지만, 새 버전에서는 여러 항목을 미리 하드코딩합니다.
이러한 항목 중 일부는 Unix 이름을 지정하고 일부는 IP 주소를 지정하지만, 둘 다 지정하지는 않습니다.
새로운 FritzFrog 샘플에 하드코딩된 차단 목록 항목
[ {"Address": "",
"Uname_match": "[redacted]dddz.me 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017"},
{"Address": "",
"Uname_match": "[redacted]-1 4.4.0-151-generic #178-Ubuntu SMP Tue Jun 11 08: 30: 22 UTC 2019"},
{"Address": "",
"Uname_match": "[redacted].amzn2.x86_64 #1 SMP Mon Jun 18 22: 33: 07 UTC 2018 x86_64 GNU/Linux"},
{"Address": "",
"Uname_match": "[redacted]-generic #113-Ubuntu SMP Thu Jul 9 23: 41: 39 UTC 2020"},
{"Address": "",
"Uname_match": "[redacted] raspberrypi 4.4.32-v7+ #924 SMP Tue Nov 15 18: 11: 28 GMT 2016 armv7l GNU/Linux"},
{"Address": "",
"Uname_match": [redacted] 3.10.0-123.4.4.el7.x86_64 #1 SMP Fri Jul 25 05: 07: 12 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux"},
{"Address": "",
"Uname_match": [redacted] 4.18.0-193.28.1.el8_2.x86_64 #1 SMP Thu Oct 22 00: 20: 22 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux"},
{"Address": "[redacted].24: 22",
"Uname_match": ""},
{"Address": "[redacted].88: 22",
"Uname_match": ""},
{"Address": "[redacted].26: 22",
"Uname_match": ""}]
이 항목은 운영자가 Raspberry Pi 디바이스나 AWS의 저리소스 EC2 이미지와 같이 리소스가 적은 저사양 시스템을 감염시키지 않으려는 의도를 나타냅니다.
차단 목록에 있는 IP 중 하나는 러시아에서 왔습니다. 여러 개의 열린 포트와 패치되지 않은 취약점이 많기 때문에 허니팟이 될 수 있습니다. 또한 두 번째 항목은 오픈 소스 봇넷 싱크홀을 가리킵니다. 이 두 항목은 운영자가 탐지 및 분석을 회피하려고 시도하고 있음을 시사합니다.
IP 주소 중 두 개는 미국을 기반으로 합니다. 한 항목은 명확하지 않은 이유로 메릴랜드 대학교를 차단하고, 다른 항목은 멀웨어에 대한 잠재적 조사를 의식한 듯 장난 또는 경고를 표시합니다.

오리진 및 어트리뷰션
이 캠페인의 최근 변경 및 추가 사항을 통해 이 멀웨어의 오리진을 조사할 수 있었습니다. 이 멀웨어의 실제 오리진을 확신할 수는 없지만, 이러한 정보를 공유하는 것이 도움이 될 수 있다고 생각합니다.
첫 번째 증거는 FritzFrog 멀웨어에 컴파일되어 새로 추가된 라이브러리 중 하나인 scp에서 발견되었는데, 이 라이브러리는 SSH를 통한 파일 전송을 위한 보안 복사 프로토콜을 구축합니다. 이 라이브러리는 Go로 작성되었으며, 그 코드는 상하이에 위치한 사용자가 리포지토리 에서 GitHub에 공유하고 있습니다. 이 리포지토리에는 상하이의 두 번째 개인이 만든 하나의 포크가 존재합니다.
중국과 연관된 또 다른 증거는 FritzFrog의 암호화폐 채굴 활동에서 찾을 수 있습니다. Akamai 리서치팀은 새로운 지갑 주소와 암호화폐 채굴 과정에 사용된 새로운 채굴 풀을 발견했습니다. 새로 관찰된 지갑 주소 중 하나(아래 제공)는 최근 중국에서 작성자가 체포된 Mozi 봇넷 캠페인의 일부로 사용되기도 했습니다.
Mozi에 연결된 FritzFrog Monero 지갑 주소
47BD6QNfkWf8ZMQSdqp2tY1AdG8ofsEPf4mcDp1YB4AX32hUjoLjuDaNrYzXk7cQcoPBzAuQrmQTgNgpo6XPqSBLCnfsjaV
이러한 증거는 확실한 증거는 아니지만 Akamai는 중국에서 활동하는 공격자 또는 중국인을 가장한 공격자와의 연결 가능성이 있다고 생각합니다. 마지막으로, 모니터링 공격 데이터는 캠페인 기간 내내 중국과 그 주변에서 높은 수준의 활동을 보여주었습니다. 현재 감염된 노드의 약 37%가 중국에 위치한 것으로 보입니다.
예방 및 방어
FritzFrog 탐지 툴
Akamai는 SSH 서버에서 실행할 수 있는 FritzFrog 탐지 스크립트 를 제공합니다. 이 툴은 다음과 같은 FritzFrog 지표를 찾습니다.
실행 파일이 파일 시스템에 더 이상 존재하지 않는 nginx, ifconfig, php-fpm, apache2 또는 libexec이라는 이름의 실행 중인 프로세스(아래 참조)
수신 포트 1234

또한 포트 5555를 통한 TCP 트래픽은 Monero 풀에 대한 네트워크 트래픽을 나타낼 수 있습니다.
권장 사항
항상 시스템 업데이트 및 패치 유지
강력한 키 관리 및 로테이션 시스템을 사용해 비밀번호 없는 로그인 구축
알림을 통해 시스템 로그인 감사 활성화
Linux에서 authorized_hosts 파일 모니터링
SSH 로그인에 대한 명시적 허용 목록 설정
루트 SSH 접속 비활성화
코인 채굴과 같은 위협 및 관련 없는 비즈니스 애플리케이션을 차단하도록 설정해 Akamai 클라우드 기반 DNS 보호 활성화