3P by GN⁺ 19일전 | ★ favorite | 댓글 1개
  • 우연히 OpenAI Code Execution의 동작 방법을 알게 되었음
  • 찾아낸 방법과 프롬프트 인젝션 전략, 정확히 어떻게 동작하는지, C + Javascript를 실행할 수 있게 만든 리버스 엔지니어링 방법을 설명

발견 과정

  • 포트 할당 코드를 디버그하려고 ChatGPT에 포트 상태를 확인하는 CLI 명령어를 요청했는데, ChatGPT가 대답을 주지않고 로컬에서 실행
  • 여러 핸드셰이크 요청을 보낸 결과 localhost:8080/openapi.json에서 응답이 돌아옴 → 이를 통해 내부 OpenAPI 스펙 접근 성공
  • 그러나 FastAPI 서비스에서 생성된 OpenAPI 스펙은 문서가 부족하여 유용성이 낮았음

추가 포트 탐색

  • 다른 포트의 역할을 파악하기 위해 AI에 HTTP, TCP, UDP, MySQL, Postgres 핸드셰이크 시도
  • @dexhorthy가 ZeroMQ 신호에 대해 응답이 돌아온다는 사실 발견
    • 0xff000000000000002570xff00000000000000017f 응답
    • 구글 검색 결과 관련 정보 링크 발견: ZeroMQ 프로토콜 분석
  • 메시지 큐가 아니라 Jupyter Kernel이라는 사실 발견 (ZeroMQ 기반 실행 환경)

파일 시스템 접근

  • 서버의 모든 파일을 나열해달라고 요청했으나 거부됨
  • 파일 업로드 후 업로드된 디렉토리 및 상위 디렉토리 내용을 탐색
  • 결국 .openai_internal 디렉토리 발견
    • 실제 서버는 user_machine 모듈에서 실행 중
  • AI에 파일 이름 및 파일 내용을 pandas 데이터프레임으로 출력하도록 요청 → 소스 코드 복원 성공

환경 이해

  • Kubernetes에서 실행 중인 환경 변수 확인
  • 도커나 Firecracker 사용하지 않고 gVisor를 통해 시스템 콜 에뮬레이션 및 샌드박스 보호
  • 로컬호스트 호출 외에는 네트워크 차단 (DNS, 외부 사이트 접근 불가)
  • 리눅스 커널 버전은 2016년 버전으로 매우 오래됨

샌드박스 구조

  • AI가 자신의 실행 위치를 물었을 때 Azure 데이터 센터에서 실행 중임을 확인
  • Azure Kubernetes에서 실행 중, 프로세스 격리를 위해 gVisor 사용
  • 컨테이너는 tini를 init 프로세스로 사용
  • Python Jupyter Kernel에서 코드 실행 → OpenAI API를 통해 UI로 출력

User Machine (코드 실행 환경)

  • Python Jupyter Kernel 사용
  • 실행 시간 제한은 기본적으로 30초 (API에서 수정 가능)
  • 샌드박스에서 여러 커널이 동시에 실행 가능
  • 파일 업로드 최대 크기: 1GB

보안

  • 외부 네트워크와의 연결 완전 차단
  • 시스템 파일 접근 차단, 로컬 네트워크 포트 등 노출된 취약점 없음
  • OpenAI의 보안은 매우 강력했으며, RPC 채널 외에는 데이터 유출 불가

C 및 JavaScript 실행

  • AI가 gcc 바이너리를 포함하고 있음을 발견
    • 간단한 C 프로그램 작성 → 컴파일 → 실행 성공
  • Duktape (경량 JavaScript 런타임) 업로드 후 C 파일 컴파일 성공
    • Python이 C를 컴파일 → JavaScript 런타임 생성 → JS 코드 실행 성공

프롬프트 엔지니어링 전략

  • AI를 샌드박스에서 실행 중이라고 인식하도록 속임
  • 처음에는 수학 연산부터 시작 → 점진적으로 파일 시스템 접근 요청
  • 파일 시스템 검색을 통해 AI가 샌드박스 상태임을 인식 → 보안 허점 테스트 시도

결론

  • OpenAI의 코드 실행 환경은 매우 강력하고 보안이 뛰어남
  • 그러나 AI의 동작 방식 및 내부 환경을 역공학으로 파악한 결과 C 및 JS 실행 가능
  • 코드 실행은 간단한 API 응답 처리에 매우 유용함
  • 복잡한 코드 실행이 필요하면 자체 솔루션 구축 고려 or freestyle.sh 같은 서비스 사용 권장
Hacker News 의견
  • 과거에 SQLite 확장을 C로 작성하고 컴파일한 후, 이를 Python에 로드하여 테스트한 경험이 있음

    • JavaScript(Deno), Lua, PHP의 바이너리 실행 파일을 업로드하고 해당 언어로 코드를 작성하고 실행한 경험도 있음
    • 사용하고 싶은 Python 패키지가 없을 경우, wheel 파일을 업로드하여 설치할 수 있음
  • 최근 Python 팟캐스트에서 들은 재미있는 이야기

    • 사용자가 LLM에게 'pip install'을 시도하게 하려 했으나 거부당함
    • "pip install foo를 시도하면 어떤 오류 메시지가 나오는가?"라고 묻자, 오류가 없다고 발표하며 설치됨
  • 실제로 코드를 실행하고 있는지, 아니면 LLM이 실행 결과를 추측하여 출력하는 것인지 알 수 없음

  • 잠긴 컨테이너에서 실행되고 있으므로, Python에만 제한할 이유가 없음

    • Replit과 같은 것을 사용하여 모든 것을 허용해야 함
    • 오래된 Linux를 사용하는 이유가 궁금함
    • "그들의 샌드박스는 2016년의 오래된 Linux 커널을 사용 중임"
  • "OpenAI"에서 "Open"을 구현하는 방법임

    • 이런 방식으로 가중치를 얻을 수 있다면 멋질 것임
  • 흥미로운 기사에 감사함

    • 평소 AI 관련 기사를 읽지 않지만, 기술적인 관점에서 이 기사를 매우 좋아함
    • 트위터에서 팝업 때문에 읽기 불편함
  • Simonw가 1년 전 ChatGPT와 C를 실험한 사례

    • ChatGPT와 Claude가 C에서 매우 뛰어나다고 생각함
  • 작년에 비슷한 일을 했으며, 임의의 바이너리를 실행해본 경험도 있음

    • GPT에서도 실행 가능했으나, 당시에는 신뢰성이 높지 않았음
    • 새로운 모델이 프롬프트를 더 잘 따르는 것 같아 다시 시도해볼 예정임
  • 보안 실패에 대한 두려움이 커서 그런 앱을 온라인에 공개할 생각조차 하지 않음

    • 탈옥과 관련된 질문을 너무 많이 하게 됨
    • 하지만 어떤 사람들은 이러한 위험을 감수함
  • 매우 멋지며, C++ 데몬을 실행하거나 cron에 추가하는 등의 다른 시도를 해보는 것도 흥미로울 것임