PolinRider 침해 사건 — 개인 분석 보고서
대상: 본인(CheolheeLee0 / iamhuman-cheolheelee) GitHub 활동 + FINGU-GRINDA 조직 영향 · 작성: 2026-05-17 KST
🚨 핵심 결론
- 본인 책임
- 가해자 아님 — 본인 명의로 push 된 악성 commits 는 모두 PolinRider RAT 의 자동 변조 또는 외부 공격자의 자격증명 도용 위장
- 공격 그룹
- Void Dokkaebi (Famous Chollima / DPRK Lazarus subgroup) — PolinRider RAT 보유
- 침해 머신
- 본인의 이전 Windows 머신 추정 (현재 macOS 는 검사 결과 깨끗)
- 잔존 위험
- ① CheolheeLee0 시절 PAT/SSH 잔존본 ② Tokyo VPS 로그인 의심 (2026-05-13) ③ GitHub 객체로 영구 잔존하는 변조 commits
- 즉시 조치
- 모든 PAT/SSH revoke + 새 PAT 최소 권한 발급 + force-push 차단 + Action 이력 cancel
1. PolinRider RAT 정체
| 개발 | Void Dokkaebi (a.k.a. Famous Chollima / Lazarus subgroup) — 북한(DPRK) 국가후원 APT |
|---|---|
| 분류 | Information Stealer + RAT + Commit Tampering 도구 |
| OS 타깃 | Windows native (`.bat` 스크립트 사용) |
| 핵심 IOC | temp_auto_push.bat, temp_interactive_push.bat 파일명 — .gitignore 에 자동 추가됨 |
| 작동 방식 | ① 머신에 RAT 상주 → ② 사용자의 `git commit` 가로채기 → ③ build config 끝줄에 obfuscated payload 자동 inject → ④ `.gitignore` 에 자기 흔적 .bat 추가 → ⑤ `git commit --amend` + 시계 조작 + `git push --force` |
| 진입 vector | 가짜 채용 인터뷰 / 코딩 챌린지 (LinkedIn 등), OpenClaw 미끼 도구, typosquat npm 패키지, IDE extension 사칭 |
| 알려진 규모 | 최소 101 레포 (Trend Micro 2026 보고) |
2. 본인이 가해자가 아닌 증거
의도 vs 결과 모순
- commit message = 보안 작업 의도 (
"security: fix CVE-2025-55182","fix(security): replace hardcoded secrets") - 그러나 결과물에 페이로드 +
.gitignore의 PolinRider IOC 포함 - 가해자라면 보안 fix 메시지로 페이로드 숨길 이유 없음
cleanup 시도 흔적
vite-hana-lang-connect-2 / 46b1200f(2026-03-09): 본인이eslint.config.js의createRequire삭제 — 실제로 페이로드 제거- 가해자라면 자기 페이로드를 제거할 이유 없음
계정 갈아타기 (2026-04-08)
- 침해 인지 후
iamhuman-cheolheelee신 계정 생성 - 가해자라면 도주가 아닌 흔적 지우기 패턴이 보였어야 함
현재 macOS 깨끗
- PolinRider 운반체 0건, 페이로드 시그니처 0건
~/.gitconfig,~/.ssh,launchd, npm settings 모두 정상- 침해 머신은 본 머신이 아님 (이전 머신 추정)
3. 위장 가능성 — 5 layer 분석
| Layer | 위장 가능? | 본 사건 정합성 |
|---|---|---|
| commit author / committer 이름·이메일 | ✅ git config user.email 한 줄로 가능 | 모든 의심 commits 가 unsigned → 위장 가능 |
| commit timestamp | ✅ GIT_AUTHOR_DATE env / 시스템 시계 조작 | saydo 7a0091d4 가 3개월 amend (사후 변조 흔적) |
| commit message | ✅ 자연어 위장 | 본인이 작성할 법한 메시지 (fix:, Merge:, docs:) |
| 코드 변경 내용 | ✅ 정상 변경 + 페이로드 한 줄 슬쩍 추가 | eslint.config.js 본문 정상, 끝줄에만 페이로드 |
| GitHub push actor | ❌ 자격증명 owner | 그러나 PAT/SSH 탈취 시 owner 명의 push 가능 |
5 layer 중 4 layer 가 단독 위장 가능, 마지막 1 layer 도 자격증명 탈취 시 우회 가능. 본 사건의 모든 패턴이 위장과 정확히 일치.
4. 자격증명 침해 정황 (시나리오 B 의 강한 증거)
| 증거 | 의미 |
|---|---|
2026-05-13 일본 Tokyo VPS 로그인180.149.230.241 (Host Universal Pty Ltd, 호주 호스팅) | 🚨 본인 IP 가 아닌 VPS 에서 GitHub 인증 통과. 자격증명 침해의 강한 시그널 |
iamhuman-cheolheelee 의 GitHub spam flag (검색 API 차단) | GitHub 시스템이 비정상 활동 패턴 감지 |
2 일 전 stale PAT 자동 revoke (Qk1mPPDM 끝자리) | 본인이 만든 적 없는 PAT 였다면 침해 후 흔적 |
| 본인 macOS 머신은 깨끗 → 침해 머신 = 외부 | 외부 공격자가 본인 자격증명으로 작업한 패턴과 일치 |
5. 영향 받은 레포 (본인 명의 IOC 도입)
| 레포 | IOC 도입 commit | 날짜 (KST) | commit message | 현재 main 상태 |
|---|---|---|---|---|
| ai-show-agent | e27ff997 | 2026-02-19 | fix: use explicit build targets... | cleanup 됨 |
| vite-hana-lang-connect-2 | 895b2f62 | 2026-03-27 | fix: todos/posts 더미 API + 프롭스 경로 수정 | cleanup 됨 |
| yt-download-api | 6560181b | 2026-04-01 | docs: 인증 필수화 반영 — 에러 응답 상세 문서화 | cleanup 됨 |
| grinda-mcp | fc7e118c | 2026-04-23 | Merge: refactor to modular file structure | cleanup 됨 |
모든 4 레포는 security-patch-bot 이 2026-05-17 일제히 정리. main 의 현재 .gitignore 깨끗.
단 commit object 는 git history 에 영구 잔존.
6. 진행 중 위험 — sim 의 queued Action
| Action run | 25988293272 (sim CI, push event) |
|---|---|
| head_sha | cc7c946d — v10 페이로드 포함 commit (iyeaaa force-push 결과) |
| actor | iyeaaa (자동화 도구 통제 하) |
| status | queued (4시간 대기 중) |
| runner | blacksmith-4vcpu-ubuntu-2404 (Blacksmith.sh self-hosted, 4 vCPU) |
| 위험 | runner 가 pickup 하면 빌드 중 페이로드(Tgw(2509)) 실행 → 채굴 또는 secret exfil 가능 |
| 조치 | 즉시 cancel: gh api -X POST 'repos/FINGU-GRINDA/sim/actions/runs/25988293272/cancel' |
7. 시점 정리 (개인 관점)
- 2025-12본인 머신 (Windows 추정) PolinRider 감염. 보안 작업 commits 가 페이로드 포함되어 push
- 2026-02-19ai-show-agent IOC 도입 commit (본인 명의)
- 2026-03-09본인의 cleanup 시도 (vite-hana-lang-connect-2 의 createRequire 제거)
- 2026-03-27RAT 가 vite-hana-lang-connect-2 에 재주입
- 2026-04-01yt-download-api IOC 도입
- 2026-04-08침해 인지 → 신 계정
iamhuman-cheolheelee생성 ✅ 대응 - 2026-04-23그러나 머신/자격증명은 침해 상태 → grinda-mcp IOC 도입
- 2026-05-13🚨 Tokyo VPS 의심 로그인 — 자격증명이 외부에서 사용된 증거
- 2026-05-17 09:00security-patch-bot 이 다수 레포 일제 정리
- 2026-05-17 19:21iyeaaa 토큰 사용 자동화 도구의 PR #880 force-push (신규 인젝션)
- 2026-05-17 19:25~27iyeaaa 토큰 사용 8 레포 일제 force-push (과거 감염 SHA 복원, watchdog 패턴)
- 2026-05-17 21:00현재 macOS 머신 종합 점검 → 깨끗 확인
8. 즉시 조치 (개인 관점, 우선순위)
| P | 조치 | 이유 |
|---|---|---|
| P0 | 현재 gh CLI 의 모든 PAT 즉시 revoke + 새 PAT 최소 권한 발급 (repo, read:org 만) | 현재 active PAT 가 광범위 scope. Tokyo VPS 의심 시 추가 침해 차단 |
| P0 | 모든 SSH key 삭제 + 재발급 (id_ed25519, id_ed25519_grinda, 특히 id_rsa) | passphrase 없는 키는 머신/탈취 시 그대로 사용 가능. id_rsa 가 어디 등록됐는지 점검 |
| P0 | GitHub Settings → 모든 OAuth 앱 권한 검토 → 본인 인지 못한 앱 revoke | OAuth token 도 자격증명. 외부 앱이 권한 보유 시 우회 가능 |
| P0 | GitHub Settings → Sessions → 본인 외 모든 디바이스 강제 로그아웃 | Tokyo VPS 등 잔존 세션 제거 |
| P0 | sim Action 25988293272 즉시 cancel | queued 상태에서 실행되면 채굴/exfil 위험 |
| P1 | 모든 FINGU-GRINDA 레포 main 에 force-push 차단 branch protection + PR review 필수 | PolinRider 의 핵심 attack vector 봉쇄 |
| P1 | GitHub Support 에 자격증명 침해 신고 (Audit log 시점 + Tokyo VPS IP 첨부) | 공식 incident response 트리거 |
| P1 | 이전 Windows 머신 forensic (보존 중이면) — %TEMP% 의 잔존 .bat + npm/IDE 로그 점검 | 최초 감염 vector 확인 (가짜 채용 / OpenClaw / typosquat) |
| P2 | 4 개 IOC 도입 commit 의 실제 작업 기억 확인 (본인 vs 해커 위장 시나리오 구분) | 책임 범위 명확화 + 추가 forensic 방향 결정 |
| P2 | npm/AWS/Cloudflare/Infisical 등 외부 서비스 자격증명도 회전 | RAT 가 머신 침해 시 모든 secret 노출 가능성 |
9. 본인이 확인해야 할 질문
| 2025-12 ~ 2026-04 사이 Windows 머신 사용 여부? | (WSL 포함, 회사/개인 데스크탑) |
| 2025년 후반 ~ 2026년 초 LinkedIn 등에서 의심 채용 인터뷰 / 코딩 챌린지 응답 여부? | (DPRK Famous Chollima 의 주력 vector) |
| OpenClaw 또는 의심 dev tool / IDE extension 설치 여부? | |
| 4 개 IOC 도입 commit 시각 (2026-02-19, 03-27, 04-01, 04-23) 작업 기억? | 본인 vs 외부 위장 구분 |
| 2026-05-13 (4일 전) 일본 출장 또는 VPN 사용 여부? | Tokyo VPS 로그인 정합성 |
id_rsa (2025-07-12 생성) 가 등록된 위치? | GitHub, AWS, EC2 등 잔존 여부 |