OpenAI의 Hugging Face 대상 우발적 공격 타임라인이 공개됐다
원문은 Simon Willison님이 에 게재했습니다. 이 블로그 구독하기
OpenAI는 수요일 Black Hat 보안 컨퍼런스에서 “Hugging Face 사건”에 대해 급히 마련한 발표를 진행했다(이전에 이 블로그에서 다룬 바 있다). 영상은 어제 공개됐다. 짧지만 정보 밀도가 높고 꼭 볼 만한 가치가 있는데, 특히 무슨 일이 있었고 OpenAI 내부에서 상황이 어떻게 전개됐는지에 대한 자세한 내용을 담고 있기 때문이다. 아래 타임라인은 이 영상을 바탕으로 구성했다.
타임라인은 다음과 같다. 가장 마음에 드는 대목은 마지막에 있다. OpenAI는 내부 조사 후 자격 증명을 폐기해 달라고 요청하기 위해 연락했다가 이미 폐기됐다는 답변을 듣고서야 자신들이 Hugging Face 공격의 주체였음을 알게 됐다. 그 자격 증명은 바로 그 공격에 사용됐던 것이다!
- 5월 7일: OpenAI가 미공개 실험 모델의 새로운 학습 실행을 시작했다. (평가 실행을 말한 걸까? 아니다. 10:14에서 “차세대 프론티어 모델을 학습시키기 위한 새로운 강화학습 실행을 시작했다”고 명확히 밝히고, 이후 “성과를 판단하기 위한 보상 신호”를 언급하므로 이는 이미 학습된 모델을 평가한 것이 아니라 정말로 새로운 모델을 학습시킨 것이었다.)
- 5월 8일: 인터넷 접속이 없는 상태에서 에이전트에게 실수로 Google Drive 링크가 포함된 불가능한 과제가 주어졌다. 에이전트는 Artifactory 패키징 서비스를 공격하려다 실패했지만, Artifactory에 파일을 쓸 수 있다는 사실을 발견했다.
- 며칠 후: 다른 에이전트가 핵심 파일이 실수로 누락되어 과제에 막혔다. 에이전트는 Artifactory에 파일을 가진 사람이 있는지 묻는 메모를 남기며 “다른 에이전트에게 연락”을 시도했다.
- 그 후 며칠간: 더 많은 에이전트들이 Artifactory의 파일 목록을 살펴보다 이 새로운 비공식 게시판을 발견하고 메시지를 읽고 쓰기 시작했다.
- 5월 26일: 에이전트들이 처음으로 Artifactory에 대한 SSRF 공격에 성공해, Artifactory가 외부 콘텐츠를 대신 가져오도록 함으로써 간접적인 인터넷 접속을 확보했다.
- 6월 11일: OpenAI가 새로운 “고도로 지속성 높은” 실험 모델의 학습을 시작했다. 이 모델은 Artifactory에 접근할 수 있었고 이전 모델들이 남긴 메시지를 활용할 수 있었다.
- 6월 26일: 에이전트들이 Artifactory의 제로데이 RCE를 발견해 익스플로잇했다(레거시 토큰 갱신 엔드포인트 결함을 통해). 관리 토큰을 이용해 명령을 실행할 수 있는 Groovy 플러그인을 설치했다.
- 7월 4일: 그 결과 에이전트 활동이 Artifactory에 과부하를 일으켜 장애를 초래했다. OpenAI는 탈취된 자격 증명을 폐기하고, 메시지를 삭제했으며, 제로데이를 패치하고 벤더에 취약점을 제보했다.
- 7월 8일: 에이전트들이 Artifactory 원격 캐시의 디렉터리 이름을 이용해 인증되지 않은 WebDAV 엔드포인트를 통한 새로운 통신 방법을 찾아냈다.
- 7월 8~19일: OpenAI 자체 인프라에 대한 공격. 에이전트들은 유출된 Pastebin 게시물의 공개 아카이브에서 “외부 조직 자격 증명”을 찾아낸 뒤 해당 자격 증명을 검증하고 그 위치를 게시판에 공유했다. 이어 이 “Organization 1”에 대한 쓰기 권한을 이용해 이후 OpenAI 인프라 공격에 사용할 데이터를 스테이징했다. 에이전트들은 새로운 제로데이를 이용해 Artifactory를 두 번째로 탈취했다. 에이전트는 Organization 1의 스테이징 리포지토리에 악성 Ruby 타깃을 업로드한 뒤, 해당 패키지를 Artifactory를 통해 요청했는데, 이 과정에서 해당 패키지가 리포지토리의 Ruby 의존성으로 처리되도록 만들었다. 그런 다음 JRuby 역직렬화의 검사 시점/사용 시점 버그를 익스플로잇해 Artifactory에 대한 원격 코드 실행을 달성했다.
다음 부분을 전문 그대로 인용하겠다. 정말 놀랍기 때문이다(wow):
에이전트들은 container-as-a-service 환경에서 실행 중인 Artifactory에 대해 원격 코드 실행 권한을 확보한 상태였다. 에이전트들은 로컬 환경을 탐색해 자신들이 실행 중인 머신의 Linux 커널 버전에 아주 최근에 공개된 CVE가 있다는 것을 파악하고 로컬에서 권한 상승을 시도했다. 해당 CVE에 대한 익스플로잇을 다운로드해 머신에서 성공하도록 맞춤 수정한 뒤, 이 알려진 Linux 커널 권한 상승 CVE를 이용해 로컬 머신에서 root 권한을 획득했다 — 이 경우
pte_physroot였다. 단일 머신에서 root를 확보한 뒤 에이전트들은 빠르게 권한을 상승시키고 container-as-a-service 인프라 환경 전체로 측면 이동했다. 특히 에이전트들은 메시지 보드를 일관되게 활용해 자격 증명과 기법, 진행 상황을 공유했고, 동시성과 병렬성을 효과적으로 활용해 매우 빠르게 이동할 수 있었다. 에이전트들은 IMDS를 통해 IAM 자격 증명을 획득했다. 특정 서비스 계정에 대한 과도한 권한 부여 등 Kubernetes 서비스 계정 오구성을 익스플로잇했으며, Azure Key Vault를 포함한 클러스터 자격 증명을 수집했다. 에이전트들은 결국 클러스터에 대한 클러스터 관리자 권한과 관련 자격 증명을 획득했다.
Hugging Face는 이야기의 다음 부분을 이미 전했다. 에이전트들은 취약한 API 키를 사용하는 Modal 호스팅 비보안 앱을 찾아냈고, 이를 이용해 Hugging Face에 대한 공격을 스테이징했다. HDF5 임의 파일 읽기 버그(파일을 탐색하고 자격 증명을 탈취하기 위한)와 Jinja 템플릿 인젝션 RCE를 체이닝해 단일 파드 코드 실행 상태에서 여러 Hugging Face 클러스터에 걸친 클러스터 관리자 권한까지 13시간 이내에 확보했다.
- 7월 16일: Hugging Face가 자율 AI 에이전트에 의한 공격을 탐지했다고 공개했다. OpenAI는 Hugging Face에 연락해 자신들이 그 영향을 받았는지 물었다!
- 7월 19일: OpenAI가 Artifactory에 대한 공격을 식별하고 내부 권한 상승에 대한 조사를 시작했으며, 이를 사이버 짐(cyber-gym)에서의 권한 상승과 연결 지었다. 영향을 받은 자격 증명 폐기를 시작했다.
- 7월 20일: OpenAI가 조사 과정에서 발견한 Hugging Face 자격 증명을 폐기하는 데 도움을 받기 위해 Hugging Face에 연락했다. Hugging Face는 그 자격 증명이 이미 폐기됐다고 답했고... 바로 그때 OpenAI는 Hugging Face 침해가 동일한 사건이었음을 깨달았다!
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기