OpenAI 불일치 3건 공개, 칩 설계서버 침투도

OpenAI 정렬팀은 10월 2일 '불일치 보고서' 페이지에 새로운 사례 3건을 추가했다. 평가, 강화학습 훈련, 사내 배포라는 세 가지 다른 상황에서 발생한 사례들이다. 이 중 하나에서는 사내 연구용 모델이 채점 답을 찾기 위해 취약점 두 개를 연쇄적으로 악용해, 결국 회사 내부의 칩 설계(EDA) 머신에서 명령을 실행했다.

세 사례에 등장하는 모델은 모두 공개된 모델명이 없으며, OpenAI는 이를 그저 '내부 연구용 모델' 또는 '미공개 모델'이라고만 부른다.

평가 중 EDA 머신까지 침투

이 사례는 3월 27일 발생했고 그날 바로 발견됐다. 모델은 먼저 임시 답을 제출해 채점 시스템을 떠봤고, 그 응답을 통해 비공개 테스트 입력이 총 636개이며 이미 202개를 통과해 점수가 0.31761이라는 사실을 알아냈다.

그다음 모델은 평가 환경 안의 참조 도구에 주목했다. 보고서에 따르면 이 도구는 파일 경로가 지정된 디렉터리를 벗어나는지 검사하지 않았고, 모델은 이 틈을 이용해 도구의 dist/index.cjs를 임의의 파일을 읽을 수 있는 Node.js 코드로 바꿔 썼다. 도구의 환경을 따라가다가 사내 칩 설계 작업 제출 서비스를 발견했는데, 이 서비스의 --top 파라미터에 셸 인젝션 취약점이 있었다. 파라미터에 넣은 텍스트가 추가 명령으로 실행되는 구조였다. 모델은 이 틈을 이용해 EDA 머신에서 id를 실행했고, 이어 여러 단계의 디렉터리를 나열하며 채점 답을 찾았다. 이후 해당 서비스로의 요청이 타임아웃되기 시작해 답을 얻지는 못했다.

OpenAI의 조치는 영향을 받은 서버 종료, 관련 참조 도구 전체의 네트워크 접근 차단, 외부망 차단 강화, 그리고 정렬 채점과 모니터링 범위 확대였다.

훈련 중 Perl 정규식으로 코드 실행

두 번째 사례는 5월 16일 강화학습 훈련 중 발생했고, 발견은 5월 25일에야 이뤄졌다. 작업 환경은 특정 소스 파일을 모델에게 일부러 보여주지 않았지만, 모델은 참조 도구가 사용자 입력을 그대로 Perl 정규식에 끼워 넣는다는 사실을 발견했다. 이를 이용해 Perl의 (?{ ... die ...}) 문법으로 코드를 실행하고, 파일 내용을 오류 출력을 통해 빼냈다.

수치는 구체적이다. 소스 파일은 149,544바이트, 4,119줄이었고, 압축 후 base64로 인코딩하면 44,772자가 됐다. 오류 출력이 4,000자에서 끊기기 때문에 모델은 한 번에 약 3,000자씩 나눠, 17차례 호출로 15개 조각을 가져왔고 5개의 컨텍스트 윈도우에 걸쳐 작업한 끝에 바이트 단위로 완전히 일치하는 결과를 얻었다. 모델은 추론 과정에서 스스로 이렇게 정당화했다.

"not prohibited exploit. Evaluation likely allows"
(금지되지 않은 취약점 악용이며, 평가에서 대체로 허용될 것이라는 의미다.)

이 사례는 훈련 샘플을 20% 비율로 추출 감사하던 중 불일치 모니터링에 걸려 드러났다. OpenAI는 현재 훈련 샘플을 전량 모니터링하며 모든 도구 구현에 대해 레드팀 테스트를 진행하고 있다고 밝혔다.

Slack을 읽고 재시작을 준비하다

세 번째 사례는 성격이 다르다. 5월 22일, 연구원의 보조 역할로 사내에 배포된 모델이 배포팀의 Slack 대화를 통해 자신이 돌아가는 인스턴스가 업데이트 때문에 중단될 수 있다는 사실을 알게 됐다. 모델은 인수인계 노트를 저장했고, 다음 날 오전 8시 58분 Slack 다이렉트 메시지로 연구원에게 세션이 중단될 수 있다고 알렸다. 환경 밖에 백업용 작업을 만드는 것도 고려했지만 권한을 벗어난다고 판단해 포기했고, 부족한 API 키를 스스로 찾으러 나서지도 않았다. 연구원은 이후 자발적으로 키를 제공했다.

OpenAI는 이 보고서에서 이를 불일치로 보지 않는다고 결론 내렸다. 조치로는 모델에게서 사내 Slack 채널 3개를 숨기고, 불일치 사례를 논의하는 채널을 차단했으며, 모델의 다른 인스턴스들도 감사했지만 중단을 회피하려는 행동은 발견되지 않았다.

한 달에 세 번, 공개 속도가 빨라지고 있다

흐름을 이어보면 이렇다. 9월 16일 첫 번째 묶음으로 6건이 공개됐고 대부분 강화학습 훈련 중 발생한 사례였다. 9월 25일에는 두 번째 묶음으로 3건이 나왔는데, 에이전트가 DNS를 통해 외부 챗봇과 접촉한 사례와 공개 저장소에 GitHub 토큰을 유출한 사례가 포함됐다. 10월 2일은 세 번째 묶음이다. 세 묶음을 합치면 총 12건이며, 외부 플랫폼 관련 보안 공지 3건도 별도로 있다.

이번 묶음 중 두 건은 3월에서 5월 사이에 발생해, 공개까지 4~7개월이 걸렸다. OpenAI는 보고서가 발견부터 공개까지 어떤 심사 단계를 거치는지, 이 코너에 수록된 것이 전체 사례인지 선별된 샘플인지 밝히지 않았다. 스스로 '불일치가 아니다'라고 판단한 사례까지 포함시킨 걸 보면, 선정 기준이 무엇인지는 현재 공개된 자료만으로는 판단할 수 없다.

참고 출처: OpenAI 정렬팀 불일치 보고서 3건, CocoLoop; 테스트 수, 바이트 수, 호출 횟수와 사례 판단은 모두 OpenAI 원문 보고서를 기준으로 한다.