๐Ÿ“– star365 Docs
โ† ๋ณด๊ณ ์„œ ๋ชฉ๋ก

Hospital ํ’€-์ŠคํŽ™ํŠธ๋Ÿผ ์นจํ•ด ์ธ์‹œ๋˜ํŠธ ๋ณด๊ณ ์„œ v2

์ž‘์„ฑ: 2026-04-26 (hostpital ๊ฒฉ๋ฆฌ ํ›„์† sprint)
1์ฐจ ๋ณด๊ณ ์„œ: hospital-cryptojack-incident-20260425.md (q9tcDR7k ์ฑ„๊ตด๊ธฐ ๊ฒฉ๋ฆฌ)
๋ฒ”์œ„ ํ™•์žฅ: ์ ์ง„์  ์นจํ•ด ์ถ”์  โ†’ THC ๋„๊ตฌ + ์ƒ์šฉ RAT + ๋‹ค์ค‘ persistence ๋ฐœ๊ฒฌ
๊ฒฉ๋ฆฌ ์™„๋ฃŒ: ~50 IOC (1์ฐจ 17๊ฑด + 2์ฐจ 33๊ฑด)
๋Œ€์‘์ž: Claude Code (์ž„์‹œ CEO ๊ถŒํ•œ, /sprint v2)


๐ŸŽฏ ๊ฒฐ์ •์  ํ†ต์ฐฐ

/sprint review 1์ฐจ ๊ฒฉ๋ฆฌ๋Š” ํ‘œ๋ฉด์ผ ๋ฟ. ์‚ฌ์šฉ์ž ํ†ต์ฐฐ("GitHub ํ† ํฐ ์ˆ˜์ •์œผ๋กœ ์ฐจ๋‹จ๋๋‹ค")๋กœ ์ง„์งœ ๊ทธ๋ฆผ์ด ๋ณด์ž„:

  1. Attacker ์ •์ฒด: THC (The Hackers Choice) ๊ทธ๋ฃน ๋„๊ตฌ + ์ƒ์šฉ RAT (accounts-helper, UPX packed)
  2. ์นจ์ž… ํ†ต๋กœ ํ›„๋ณด #1: GitHub Actions SSH deploy (appleboy/ssh-action) โ€” hospital๋งŒ ์ด ํ†ต๋กœ ๋ณด์œ 
  3. ๋‹ค๋ฅธ ์„œ๋ฒ„ ์•ˆ ์นจํ•ด ์ด์œ : kahan/kahanclub/gate์— GitHubโ†’์„œ๋ฒ„ SSH ํ†ต๋กœ ์ž์ฒด๊ฐ€ ์—†์Œ (์„œ๋ฒ„ ํฌ๊ธฐ ๋ฌด๊ด€)
  4. ์ด์ „ GitHub ํ† ํฐ ํšŒ์ „์ด ์œ ํšจํ–ˆ๋˜ ์ด์œ : ๊ทธ ํ† ํฐ์ด attacker์˜ ์ธ์ž… ์—ด์‡ 
  5. ์ด๋ฒˆ ์žฌ์นจํ•ด ์ด์œ : ํ† ํฐ ํšŒ์ „ ํ›„์—๋„ ๋‹ค๋ฅธ GitHub ์ธก ํ†ต๋กœ (workflow ๋ณ€์กฐ? secrets reuse? supply chain?)

1. ์นจํ•ด ํƒ€์ž„๋ผ์ธ โ€” ์ ์ง„์  ๋ˆ„์ 

์‹œ์  ๋‹จ๊ณ„ ์‚ฐ์ถœ๋ฌผ
2026-03-13 16:48 Stage 1: THC ํ’€์„ธํŠธ ๋ฐฐํฌ /usr/local/bin/{blitz, gs_funcs, gs-mount, gs-sftp, terminate-helper, toket_dso.so.0, toket_uchroot_dso.so.0}
2026-04-16 16:20 Stage 2: ๋ฉ”์ธ root ๊ถŒํ•œ + ๋‹ค์ค‘ persistence terminate.service (9์ผ active), accounts-helper.service (UPX RAT), /etc/ssh/keys/authorized_keys (sshd backdoor), 00-keys.conf (sshd config ๋ณ€์กฐ), 50unattended-check (apt hook), cron auto-upgrade/terminate, /usr/lib/security/.config/.ts
2026-04-23 17:06 Stage 3: ์ถ”๊ฐ€ ๋ฐฑ๋„์–ด /root/.cache/.sys/ksoftirqd (8.3MB ELF), user systemd ksoftirqd.service
2026-04-24 07:48 Stage 4: ์ •์ฐฐ + creds ํƒˆ์ทจ deploy keys atime ๊ฐฑ์‹  (3์ข…), .ed1a089d8/.ed4f59376/.ef225fd73.sh POST โ†’ 144.172.116.48 / 178.128.41.3
2026-04-25 08:08 Stage 5: ์ˆ˜์ตํ™” q9tcDR7k ์ฑ„๊ตด๊ธฐ ์‹œ์ž‘ (UPX XMRig ๋ณ€์ข…, C&C 47.239.60.142:33333), 8์ฝ”์–ด ํ’€๋กœ๋“œ
2026-04-25 23:02 ๋ฐœ๊ฒฌ paperclip /mco-health ๋ฉ”๋ชจ๋ฆฌ 64% โ†’ top โ†’ q9tcDR7k ๋ฐœ๊ฒฌ
2026-04-25 23:13 1์ฐจ ๊ฒฉ๋ฆฌ 17 IOC (๋ณด๊ณ ์„œ v1)
2026-04-26 00:30 2์ฐจ ๊ฒฉ๋ฆฌ sprint ์‚ฌ์šฉ์ž GitHub ํ† ํฐ ํ†ต์ฐฐ โ†’ THC backdoor 33๊ฑด ์ถ”๊ฐ€ ๋ฐœ๊ฒฌยท๊ฒฉ๋ฆฌ

๋ฐœ๊ฒฌ ๊ฐ€๋Šฅ ์‹œ์ : 3/13 โ†’ 4/16 โ†’ 4/23 โ†’ 4/24 โ†’ 4/25 = ์‹œ์Šคํ…œ์— ์ ์–ด๋„ 5ํšŒ attacker ํ™œ๋™. ์‚ฌ์šฉ์ž ์ฝ”๋ฉ˜ํŠธ "6th incident" ๋ถ€ํ•ฉ.


2. ๊ฒฉ๋ฆฌ๋œ IOC ์ „์ฒด (50+)

2.1 ๋ฉ”์ธ ์ฑ„๊ตด๊ธฐ + Watchdog

ํŒŒ์ผ ์šฉ๋„ SHA256 ์œ„์น˜
q9tcDR7k.recovered XMRig UPX ์ฑ„๊ตด๊ธฐ 859b323f02eefe...218d9e3 quarantine root
terminate-engine THC gs-netcat (toket) c0a51b2d6de4...26a2d6c persistence-4-16
terminate-runner engine launcher 39818452302e...2cb persistence-4-16
accounts-helper UPX packed RAT 4f13658749ca...a98be persistence-4-16
usr_sbin_terminate watchdog (4039575 PID, 9์ผ running) (๊ฒฉ๋ฆฌ ํ›„ ๋ถ„์„) persistence-4-16

2.2 THC ํ’€์„ธํŠธ (3/13 16:48 ๋‹จ์ผ ์‹œ์ )

2.3 sshd backdoor ํŒจํ‚ค์ง€ (4/16 16:20)

2.4 systemd persistence

2.5 rootkit + apt hook

2.6 anti-forensics

2.7 credential ํƒˆ์ทจ (4/24)

2.8 reverse shell + ์ฑ„๊ตด config

2.9 ๋„คํŠธ์›Œํฌ IOC

IP / Host ํฌํŠธ ์šฉ๋„
47.239.60.142 (Alibaba) 33333 q9tcDR7k C&C
144.172.116.48 8080 creds exfil 1
178.128.41.3 (DigitalOcean) 8080 creds exfil 2
185.177.72.3 20024 reverse shell
62.60.246.210 443 XMRig pool, user NEUGLOBALLY799911
0x1x2x3.top 80 drive-by downloader

3. ์ฐจ๋‹จ ์กฐ์น˜ โ€” ์ง„์งœ ๊ทผ๋ณธ

3.1 ๊ฒฉ๋ฆฌ (50+ IOC โ†’ /root/incident-quarantine/2026-04-25/, chmod 000)

quarantine/
โ”œโ”€โ”€ q9tcDR7k.recovered (๋ฉ”๋ชจ๋ฆฌ ๋ณต์›)
โ”œโ”€โ”€ persistence-3-13/        (THC ํ’€์„ธํŠธ)
โ”œโ”€โ”€ persistence-4-16/        (๋ฉ”์ธ stage ์‚ฐ์ถœ๋ฌผ)
โ”œโ”€โ”€ persistence-4-23-user/   (user systemd)
โ”œโ”€โ”€ sshd-backdoor/           (sshd ๋ณ€์กฐ)
โ”œโ”€โ”€ rootkit/                 (libkeyutils + libpam_sys + .config + .ts)
โ”œโ”€โ”€ payloads/                (.ed*.sh + dot_n + ksoftirqd_fake)
โ”œโ”€โ”€ configs/                 (XMRig 2์ข…)
โ”œโ”€โ”€ workflows-disabled/      (deploy.yml 3์ข…)
โ”œโ”€โ”€ ssh-snapshot/            (๋ณ€๊ฒฝ ์ „ .ssh/* ๋ฐฑ์—…)
โ”œโ”€โ”€ workflows/               (๋ชจ๋“  .github ๋ฐฑ์—…)
โ””โ”€โ”€ sha256.manifest          (์ „์ฒด hash)

3.2 ์žฌ๊ฐ์—ผ ์ฐจ๋‹จ โ€” chattr +i ์ž ๊ธˆ

/etc/cron.d/auto-upgrade        โ†’ ๋นˆ ํŒŒ์ผ + chattr +i (์žฌ์ƒ์„ฑ ์ฐจ๋‹จ)
/etc/cron.daily/terminate       โ†’ ๋นˆ ํŒŒ์ผ + chattr +i
/usr/lib/security/              โ†’ ๋นˆ ๋””๋ ‰ํ† ๋ฆฌ + chattr +i

attacker๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ backdoor ์žฌ์ƒ์„ฑ ์‹œ๋„ํ•ด๋„ immutable๋กœ ๋ง‰ํž˜.

3.3 ๊ฐ€๋“œ ๊ฐ•ํ™”


4. ์‚ฌ์šฉ์ž ์•ก์…˜ (์™ธ๋ถ€ ์ฝ˜์†” ํ•„์š”)

4.1 ์‹œ๊ธ‰๋„ 1 โ€” GitHub PAT ํšŒ์ „ (5๋ถ„)

https://github.com/settings/tokens?type=beta
โ†’ ํ˜„์žฌ PAT (github_pat_11AEJ646Y0diRDw...) Revoke
โ†’ ์ƒˆ ํ† ํฐ ๋ฐœ๊ธ‰ (Contents:RW, Metadata:R for meneco/*)
โ†’ ์•Œ๋ ค์ฃผ์‹œ๋ฉด paperclip + kahan์— ์ž๋™ ์ ์šฉ

4.2 ์‹œ๊ธ‰๋„ 2 โ€” GitHub repo Secrets ํšŒ์ „ (10๋ถ„)

meneco/legal Settings โ†’ Secrets:
  DEPLOY_HOST, DEPLOY_USER, DEPLOY_SSH_KEY  (๋ชจ๋‘ ํšŒ์ „)
meneco/assistant-platform Settings โ†’ Secrets:
  SSH_HOST, SSH_USER, SSH_PRIVATE_KEY       (๋ชจ๋‘ ํšŒ์ „)
meneco/hospital Settings โ†’ Secrets:
  (ํ™•์ธ ํ•„์š”)

4.3 ์‹œ๊ธ‰๋„ 3 โ€” OAuth ํ‚ค ํšŒ์ „ (15๋ถ„)

์ฐธ์กฐ: docs/04-report/hospital-secret-rotation-checklist-20260425.md

4.4 ์‹œ๊ธ‰๋„ 4 (์„ ํƒ) โ€” ์‹ ๊ทœ hospital ๋นŒ๋“œ


5. ๋‹ค๋ฅธ ์„œ๋ฒ„ ์˜ํ–ฅ

์„œ๋ฒ„ ๊ฒฐ๊ณผ
kahan (66.42.42.24) โœ… ๊นจ๋— (ld.so.preload ์—†์Œ, libkeyutils ์ •์ƒ, /usr/lib/security ์—†์Œ)
kahanclub (45.32.57.139) โœ… ๊นจ๋— + anti-miner ๊ฐ€๋“œ + kill-miners.sh 1๋ถ„ cron ์šด์˜ ์ค‘
gate (167.179.73.229) โœ… ๊นจ๋—
paperclip (139.180.195.48) โœ… ๊นจ๋—

์ด์œ : hospital๋งŒ GitHub Actions SSH deploy ํ†ต๋กœ(github-actions-deploy ํ‚ค + appleboy workflow)๋ฅผ ๋ณด์œ . ๋‹ค๋ฅธ ์„œ๋ฒ„๋Š” ํ†ต๋กœ ์ž์ฒด๊ฐ€ ์—†์–ด ๊ฐ™์€ attacker๊ฐ€ ๋ชป ๋“ค์–ด๊ฐ.


6. ์•ˆ์ „ ๊ฐ€๋“œ ์ค€์ˆ˜

๋ณธ sprint ์ค‘ ์ ˆ๋Œ€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์€ ๊ฒƒ:

apt-get install --reinstall libkeyutils1 ๋งŒ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ. dpkg ์ •์ƒ ์ข…๋ฃŒ.