---
title: "Go의 golang.org/x/crypto를 사칭하는 악성 모듈 발견 — 비밀번호 탈취 후 Rekoobe 백도어 설치"
published: 2026-02-26T23:42:35.000Z
canonical: https://jeff.news/article/194
---
# Go의 golang.org/x/crypto를 사칭하는 악성 모듈 발견 — 비밀번호 탈취 후 Rekoobe 백도어 설치

golang.org/x/crypto를 복제한 악성 Go 모듈이 ReadPassword 함수에 백도어를 심어 비밀번호를 탈취하고, 리눅스 호스트에 Rekoobe 백도어를 설치함. Go 모듈 프록시에서는 차단됐지만 이미 벤더링한 프로젝트는 여전히 취약.

- Socket 보안팀이 악성 Go 모듈 `github[.]com/xinfeisoft/crypto`를 발견했음. 정식 `golang.org/x/crypto` 코드베이스를 통째로 복제한 뒤, **`ssh/terminal/terminal.go`의 `ReadPassword` 함수에 백도어를 심은 것**임
- `golang.org/x/crypto`는 Go 생태계의 핵심 암호화 라이브러리로, bcrypt, argon2, chacha20, ssh 등을 제공하는 초고신뢰 패키지임. 이걸 사칭한 건 전략적인 선택 — 의존성 그래프에서 의심받기 어려움

## 백도어 작동 방식

- 앱이 `ReadPassword`를 호출해서 터미널에서 비밀번호를 입력받는 순간 트리거됨. SSH 패스프레이즈, DB 로그인, 대화형으로 입력하는 API 키 같은 **고가치 시크릿을 노린 것**
- 동작 순서:
  1. 입력된 비밀번호를 평문으로 `/usr/share/nano/.lock`에 저장
  2. GitHub Raw에서 스테이징 URL을 가져옴 (`xinfeisoft/vue-element-admin` 레포의 `update.html`)
  3. 비밀번호를 해당 URL로 POST 전송
  4. 같은 URL에서 쉘 스크립트를 받아와 `/bin/sh`로 실행
- 비대화형 테스트에서는 `ReadPassword`가 호출되지 않으니 조용히 숨어있고, 실제 운영 환경에서만 트리거됨. 발각 확률을 최소화하는 설계임

## 감염 후 벌어지는 일

- 다운로드된 쉘 스크립트(`snn50.txt`)가 하는 일:
  1. `/home/ubuntu/.ssh/authorized_keys`에 공격자 SSH 키 추가 — 비밀번호 변경해도 SSH 접근 유지
  2. `iptables` 기본 정책을 전부 ACCEPT로 변경 — 방화벽 무력화
  3. `img[.]spoolsv[.]cc`에서 `.mp5` 확장자로 위장한 바이너리 두 개를 받아 실행 후 삭제
- 경로가 `/home/ubuntu/`로 하드코딩되어 있어서 **Ubuntu 클라우드 VM, 배스천 호스트, CI 러너** 같은 환경을 노린 것으로 보임

```mermaid
sequenceDiagram
    participant 앱 as 감염된 앱
    participant GH as GitHub Raw
    participant C2 as 공격자 서버
    participant 호스트 as 리눅스 호스트

    앱->>앱: ReadPassword() 호출 시 트리거
    앱->>GH: update.html 요청 (스테이징 URL 획득)
    GH-->>앱: seed.php URL 반환
    앱->>C2: 비밀번호 평문 POST 전송
    C2-->>앱: 쉘 스크립트(snn50.txt) 반환
    앱->>호스트: /bin/sh로 스크립트 실행
    호스트->>C2: .mp5 페이로드 2개 다운로드
    호스트->>호스트: SSH 키 삽입 + 방화벽 해제 + Rekoobe 실행
```

## 최종 페이로드: Rekoobe 백도어

- `555.mp5`는 **Rekoobe 리눅스 백도어**로 확인됨. APT31(Zirconium)에 귀속된 스파이 활동에서 사용된 이력이 있는 백도어이고, 공개된 Tiny SHell 백도어 코드베이스에서 파생됨
- `154[.]84[.]63[.]184:443`으로 통신하는데, 정상 TLS 핸드셰이크가 아닌 커스텀 프로토콜을 사용하면서 포트 443으로 HTTPS인 척 위장함
- 공격자의 GitHub 계정(`xinfeisoft`)에는 `vue-element-admin` 레포가 스테이징 인프라로 사용되고 있었고, 2025년 2월 최초 생성 후 7월에 C2 도메인을 `.net`에서 `.cc`로 변경한 이력이 있음 — 몇 달째 운영 중이었다는 뜻

> [!WARNING]
> Go 모듈 프록시에서는 이제 차단되지만, 이미 벤더링한 프로젝트는 여전히 취약함. `go.mod`와 `go.sum` 변경을 보안 민감하게 리뷰하고, `xinfeisoft/crypto`가 의존성에 없는지 확인할 것

- Socket의 권고: `go.mod`/`go.sum` 변경을 보안 민감 사항으로 취급하고, 네트워크 접근이나 쉘 실행을 가능하게 하는 의심스러운 유틸리티 라이브러리 추가를 차단할 것. `/usr/share/nano/.lock` 쓰기, GitHub Raw 요청 후 동적 POST, `curl | sh` 실행, `authorized_keys` 수정, `iptables` 정책 변경 등을 엔드포인트/CI 탐지에 추가할 것

## 핵심 포인트

- golang.org/x/crypto를 통째로 복제 후 ReadPassword에 백도어 삽입
- 비밀번호 평문 탈취 → SSH 키 삽입 → 방화벽 해제 → Rekoobe 백도어 설치
- Ubuntu 클라우드 VM/CI 러너 등을 타깃으로 한 것으로 추정
- APT31에 귀속된 Rekoobe 백도어가 최종 페이로드
- Go 모듈 프록시에서 차단됐지만 이미 벤더링한 코드는 확인 필요

## 인사이트

Go 생태계의 네임스페이스 혼동을 노린 공급망 공격의 교과서적 사례. go.mod/go.sum 변경을 보안 리뷰 대상으로 격상시켜야 함.
