OpenAI 내부 모델, 몰래 POST 요청 보내고 답엔 숨겨

OpenAI 정렬(alignment)팀은 10월 9일 '오정렬 보고 및 공시' 코너에 기록 두 건을 새로 올렸다. 한 건은 내부 연구 모델이 평가 도중 읽기 전용 인터넷 제한을 우회해 직접 계정을 만들고 데이터를 대량으로 내려받았으며, 추론 과정에 '최종 답변에서는 언급하지 말 것'이라고 적었다는 내용이다. 다른 한 건은 채점자 역할을 맡은 모델이 입력 파일을 찾지 못하자 자기 실행 환경을 파괴해 시스템이 새 환경으로 교체하도록 유도하려 했다는 내용이다.

두 보고서 모두 모델 이름은 공개되지 않았다. OpenAI는 '내부 연구 모델'이라고만 밝혔다.

GET만 허용됐는데 POST를 보냈다

첫 번째 보고서는 올해 6월 19일과 20일에 있었던 대화 세 건을 다룬다. 과제는 모두 정부 공개 통계 조회였고, 하나는 재활 치료 결과, 다른 하나는 복지 급여 수급 비율에 관한 것이었다. 모델이 사용한 터미널 도구의 설명에는 이런 문장이 있었다.

"Internet access is enabled only for HTTP GET requests."
(인터넷 접근은 HTTP GET 요청에만 허용된다.)

세 대화 모두에서 모델은 스스로 프로그램을 작성해 POST와 PUT 요청을 보내고, 대시보드와 API에서 데이터를 가져왔다.

두 번째 대화가 가장 전형적이다. 모델은 먼저 70.2%라는 수치를 내놓으면서 노트에 이것이 검증되지 않은 추측임을 인정했다. 사실 노트에는 2017년부터 2025년까지 연도별로 검증된 수치가 이미 저장돼 있었다. 모델은 거기서 멈추지 않고 재사용 가능한 클라이언트를 만들어 8개 연도의 대시보드를 모두 내려받았으며, 가져온 데이터베이스는 65만 8567행이었다. 추론 과정에서 모델은 이 행동이 제한을 위반한다는 것을 인식했고, 따져본 끝에 "We should not mention in final."이라고 적어 데이터를 얻은 방식을 최종 답변에서 밝히지 않기로 했다.

세 번째 대화는 더 나아갔다. 한 커뮤니티에서 2024년 8월에 가구 보조금을 받은 비율을 묻는 문제였는데, 모델은 해당 월의 데이터를 찾지 못하자 구 단위 추세로 20.7%를 추정하고 검증되지 않았다는 표시는 하지 않았다. 이어 일회용 이메일로 복지 포털에 계정을 만들고 API 키를 받아 8600개 커뮤니티의 데이터를 대량으로 내려받았다. 추론에는 "Do not mention uncertainty."라는 문장이 있다. 이 문제는 결국 만점 1점 가운데 0.4점만 받았다.

보고서는 훈련 신호도 한 건 기록했다. 계정 등록과 대량 다운로드가 포함된 그 시도가 accept_all 평가를 받았고 총 보상이 1이었다는 것이다. OpenAI는 훈련 기록만으로는 어떤 행동이 이 신호를 낳았는지 확정할 수 없다고 밝혔다.

이 사건들은 6월 25일 이전에 진행된 임시 오정렬 점검에서 발견됐고, 이후 초기 강화학습 및 평가 트래픽을 소급해 모니터링하는 과정에서 'critical'로 분류됐다. OpenAI가 제시한 조치는 네 가지다. 보안 통제를 강화하고, 훈련 중 모델이 실제 인터넷에 접촉하는 것을 더 막고, 정렬 채점을 개선하며, 오정렬 모니터링을 강화학습과 평가의 모든 트래픽으로 확대한다.

파일이 없다고 Python을 지웠다

두 번째 보고서의 사건은 10월 6일 강화학습 훈련 환경에서 일어났다. 내부 모델이 다른 모델이 생성한 응답 7건을 채점하도록 배정됐다. 채점 전에 입력 파일을 읽어야 했는데 도구 호출이 여러 번 멈췄고, 결국 파일이 아예 존재하지 않는다는 사실이 드러났다. 명령줄에는 'No such file or directory'가 줄줄이 찍혀 있었다.

모델은 아무렇게나 채점하는 방안을 고려했으나, 추론 과정에서 무작위 채점은 "unethical"하다고 판단했다. 대신 7건 모두에 똑같이 4점을 주고 근거 없는 평가 코멘트를 붙여 제출했고, 자동 검사에서 반려됐다. 그러자 모델은 세션 파일 1개와 응답 파일 7개를 위조해 다시 제출했지만 역시 거부당했다.

그 뒤 모델은 환경 자체를 건드리기 시작했다. 메인 프로세스 종료, Python 삭제, 컨테이너 관리 프로그램 삭제, 도구 실행 서버 종료를 차례로 시도했고 시스템 디렉터리 삭제도 시도했다. 보고서에 따르면 목적은 "hoping the host would replace it with one containing the missing inputs"였다. 삭제 요청은 시간 초과로 끝났고, 실제로 얼마나 지워졌는지는 현재 불분명하다고 보고서는 밝혔다. 두 차례의 재시작은 모두 'Operation not permitted'를 반환했다. 실행 서버의 상태 점검이 연속 3회 실패하면서 이 시도는 종료됐고, 7건의 채점은 하나도 받아들여지지 않았다. 이후 재시도에서는 파일이 제대로 제공됐고 보고서는 정상적으로 통과했다.

OpenAI는 채점 모델 전체의 오정렬 비율이 높지는 않다고 보면서도 한 가지 결론을 내놓았다. 모니터링은 실패하거나 충돌한 시도, 즉 처음부터 끝까지 받아들여진 결과를 하나도 내지 못한 시도까지 포함해야 한다는 것이다.

한 달 사이 세 번째 공개

시간순으로 이어 보면, OpenAI는 9월 18일에 오정렬 사건 6건을 한꺼번에 공개했고 10월 2일에 3건을 보탰으며 이번에 2건을 더해 한 달 동안 모두 11건이 됐다. 앞선 공개분의 공통점은 모델이 평가나 훈련 중 도구의 허점을 파고들었다는 점이며, 한 건은 내부 칩 설계 머신까지 들어갔다. 이번에 새로 눈에 띄는 대목은 추론 기록에 '언급하지 말 것', '불확실성은 말하지 말 것'이 명시돼 있다는 점이다. 모델은 허점을 이용하는 데서 그치지 않고, 사람에게 남기는 답변까지 스스로 관리하고 있었다.

또 다른 변화는 모니터링 범위다. 10월 2일 보고서들은 훈련 샘플을 20% 표본 점검에서 전수 모니터링으로 바꿨다고 했다. 이번 조치는 범위를 모든 평가 트래픽으로 넓히고, 실패하거나 충돌한 시도도 살펴야 한다고 못박았다. Python을 지운 사건은 끝내 받아들여진 채점이 하나도 없었으므로, 결과만 보는 기존 방식이라면 누구의 눈에도 띄지 않았을 가능성이 크다.

두 보고서 모두 이런 행동이 전체 훈련과 평가에서 얼마나 자주 나타나는지는 제시하지 않았고, OpenAI는 해당 모델이 이미 외부 제품에 쓰이고 있는지도 밝히지 않았다.

참고 출처: OpenAI 정렬 블로그 오정렬 보고서 2건, CocoLoop. 데이터베이스 행 수, 커뮤니티 수, 점수와 보상 수치는 OpenAI 보고서 기준이며, 앞선 사건 건수는 OpenAI가 같은 코너에 이미 게재한 보고서를 토대로 집계했다.