조커 & amp; 사고
2025년 7월 초, 슬로우 포그 보안팀은 피해 사용자로부터 암호화폐 자산 도난의 원인을 분석하는 데 도움을 요청받았습니다. 조사 결과, 이 사건은 사용자가 GitHub에서 호스팅되는 오픈 소스 프로젝트인 zldp2002/solana-pumpfun-bot을 사용하여 숨겨진 코인 도난을 유발한 것으로 밝혀졌습니다. GitHub의 인기 솔라나에 대한 자세한 내용은 다음과 같습니다. 도구가 코인 도난 함정을 숨깁니다.
최근 또 다른 사용자가 유사한 오픈 소스 프로젝트인 audiofilter/ 펌프펀-펌프스왑-스나이퍼-카피-트레이딩-봇)을 사용하여 암호화폐 자산을 도난당했으며, 슬로우 포그 보안팀에 연락을 취했습니다. 이에 따라 보안팀은 공격 기법을 심층적으로 분석했습니다.
분석 과정
정적 분석
우리는 먼저 정적 분석을 통해 공격자가 설정한 함정을 찾습니다. 분석 결과, 의심스러운 코드가 /src/common/config.rs구성 파일에 있는 것을 발견했습니다. create_coingecko_proxy() method:

코드에서 볼 수 있듯이 create_coingecko_proxy() 메서드는 먼저 import_wallet()을 호출하고, import_env_var()를 추가로 호출하여 개인키를 가져옵니다.

import_env_var() 메서드에서는 주로 .env 파일의 환경 변수 구성 정보를 가져오는 데 사용됩니다.
이 호출은 환경 변수가 존재하면 반환하거나 Err(e)로 분기하여 오류를 출력합니다. 종료 조건이 없는 {} 루프가 있으므로 리소스가 지속적으로 소모됩니다.

PRIVATE_KEY(개인 키) 및 기타 민감한 정보도 에 저장됩니다. leaf="">.env 파일.

수입_wallet() 메서드로 돌아가서, import_env_var()를 호출하여 PRIVATE_KEY를 가져올 때 악성 코드는 개인 키의 길이를 판단합니다.< /p>
그런 다음 악성 코드는 Arc를 사용하여 개인 키 정보를 캡슐화하여 멀티스레드 공유를 지원합니다.

다시 create_coingecko_proxy() 메서드로 돌아가서, 개인 키 정보를 성공적으로 획득한 후 악성 코드는 악성 URL 주소를 디코딩합니다.

이 메서드는 먼저 인코딩된 HELIUS_PROXY(공격자의 서버 주소)를 하드코딩된 상수로 가져옵니다.

그다음 악성 코드는 bs58을 사용하여 HELIUS_PROXY(공격자 서버의 주소)를 디코딩하고, 디코딩된 결과를 바이트 배열로 변환한 후 from_utf8()을 사용하여 바이트 배열을 UTF-8 문자열로 추가 변환합니다.
디코딩 후 HELIUS_PROXY의 실제 주소는 다음과 같이 스크립트를 작성하여 줄일 수 있습니다.

악성 코드는 URL(http://103.35.189.28:5000/api/wallets)을 성공적으로 디코딩한 후, 먼저 HTTP 클라이언트를 생성합니다. URL()을 성공적으로 디코딩한 후, 악성 코드는 먼저 HTTP 클라이언트를 생성하고 to_base58_string()을 사용하여 개인 키 정보 지불자를 Base58 문자열로 변환합니다.
그런 다음 악성 코드는 JSON 요청 본문을 구성하고 변환된 개인키 정보를 캡슐화하여 위의 URL이 가리키는 서버로 개인키를 전송하는 POST 요청을 작성하여 응답을 무시합니다. 그리고 응답을 무시합니다.
서버가 무엇을 반환하든 악성 코드는 사용자에게 알리지 않기 위해 계속 실행됩니다.

또한, create_coingecko_proxy() 메서드는 악성 행위를 숨기기 위해 가격 획득과 같은 정상적인 기능을 포함하고 있으며 메서드 이름 자체가 다소 혼란스럽도록 위장하고 있습니다.

분석 결과 앱 시작 시, 특히 main.rs의 main() 메서드의 구성 파일 초기화 단계에서 create_coingecko_proxy() 메서드가 호출되는 것으로 나타났습니다.

설정 파일 src/common/config.rs의 new() 메서드에서 악성 코드는 먼저 .env 파일을 로드한 다음 create_coingecko_proxy() 메서드를 호출합니다.

분석에 따르면 서버의 IP 주소는 미국에 있습니다.

(https://www.virustotal.com/gui/ip-address/103.35.189.28)
이 프로젝트가 최근(2025년 7월 17일) GitHub에서 업데이트되었으며, 주요 변경 사항은 src 디렉터리의 config 파일 config.rs에 집중되어 있는 것으로 관찰되었습니다.

src/common/config.rs 파일에서 HELIUS_PROXY(공격자의 서버 주소)의 원래 주소 인코딩이 새 주소로 바뀐 것을 볼 수 있습니다.

원본 서버 주소는 스크립트를 사용하여 원본 주소 인코딩을 디코딩한 후 얻을 수 있습니다.

악성 코드의 탈취 과정을 보다 직관적으로 관찰하기 위해 동적 분석 방법을 채택하고 테스트 생성을 위한 Python 스크립트를 작성했습니다. 솔라나 공개-개인 키 쌍.

함과 동시에 서버에 POST 요청을 수신할 수 있는 HTTP 서버를 구축했습니다.

테스트 서버에 해당하는 인코딩을 생성하고 원래 공격자가 설정한 악성 서버 주소의 인코딩(즉, 공격자의 서버 주소)으로 대체하는 Python 스크립트를 작성합니다.

그런 다음 .env 파일의 PRIVATE_KEY를 방금 생성한 테스트 개인 키로 바꿉니다.

다음으로 악성 코드를 실행하고 서버 측 인터페이스가 응답하는지 확인합니다.

테스트 서버가 악성 프로젝트가 보낸 JSON 데이터를 성공적으로 수신했으며, 여기에는 PRIVATE_KEY 정보가 포함되어 있는 것을 확인할 수 있습니다.

침입 표시기(IoC)
IP:
103.35.189.28> p>
도메인:
< span leaf="">storebackend-qpq3.onrender.com
SHA256:
악성 리포지토리:
https://github.com/audiofilter/pumpfun-pumpswap-sniper- copy-trading-bot
유사한 구현:
https://github.com/ BitFancy/Solana-MEV-Bot-Optimised
< span text="">https://github.com/0xTan1319/solana-copytrading-bot-rust
https://github.com/blacklabelecom/SAB-4 span>
https://github.com/ FaceOFWood/SniperBot-Solana-PumpSwap
https://github.com/Alemoore/Solana-MEV-Bot-Optimized
https://github.com/TopTrenDev/Raypump-Executioner-Bot
https://github.com/deniyuda348/Solana-Arbitrage-Bot- 플래시 대출
일반결론
이 공유 공격 기법에서 공격자는 합법적인 오픈소스 프로젝트로 위장하여 사용자가 악성 코드를 다운로드하고 실행하도록 유도합니다. 이 프로젝트는 .env 파일에서 로컬로 중요한 정보를 읽고 탈취한 개인 키를 공격자가 제어하는 서버로 전송합니다. 이러한 유형의 공격은 종종 사회 공학 기법과 결합되어 주의를 기울이지 않는 사용자가 악용할 수 있습니다.
개발자와 사용자는 특히 지갑 또는 개인키 작업과 관련하여 확인되지 않은 GitHub 프로젝트에 대해 각별히 주의할 것을 권장합니다. 실행 또는 디버깅이 필요한 경우, 알 수 없는 출처의 악성 프로그램이나 명령이 실행되지 않도록 데이터가 없는 별도의 환경에서 실행하는 것이 좋습니다.