
이미지: @NousResearch (X) 영상 갈무리
요약
- 누스리서치는 11월 8일 헤르메스 에이전트가 코드 저장소의 보안 버그를 검토하는 공식 보안 플러그인 hermes-security를 공개했다.
- 코드를 약 4,000줄씩 나눠 최대 10명의 서브에이전트가 동시에 읽고, 공격자 도달 가능성을 추적한 뒤 원하면 임시 사본에서 재현 테스트로 결함을 확인한다.
- 합성 사례 26개 평가에서 정밀도 0.818~0.917, 재현율 0.692~0.846으로 목표치에 못 미쳤고, 문서는 출시 품질 주장이 아니라고 밝혔다.
- 발표
- 2026년 11월 8일(미국 시간) · 누스리서치 X · GitHub hermes-official-plugins/hermes-security
- 제작
- X 계정 @mark_s · 누스리서치 공식 플러그인
- 요구 사항
- 헤르메스 0.21.5 이상 · 파이썬 3.11 이상 · 명령 한 줄 설치
- 실행 경로
- 채팅 · 명령줄(hermes security-review) · 헤르메스 데스크톱 보안 페이지
- 분할 검토
- 폴더 단위 약 4,000줄 청크 · 리뷰어 최대 10명 동시 + 전체 범위 리뷰어 1명 · 최대 여섯 라운드 재배정
- 표준 검사
- 운영 코드만 · 90청크(약 36만 줄) 이내면 전부 · 위험 청크 최대 2개 독립 재검토
- 심층 검사
- 건너뛰기 목록 없음 · 저장소 전체 기본 세 번 독립 검토
- 의존성 검사
- osv-scanner(약 55MB·SHA-256 고정) · api.osv.dev · 런타임 지원 종료 대조 · 개발용 패키지 낮음
- 테스트 확인
- 임시 사본 재현 · 음성 테스트 짝 필수 · 미실행 NOT_RUN · 샌드박스 아님
- 실행 중 앱 시험
- 사용자 허락 · 한 시간 · 지정 주소에만 최대 200번 요청
- 보고서
- 코드 인용 · 봉인 · 기각 후보 보존 · 패치 미적용 · 마크다운·JSON·CSV·SARIF
- 평가 사례
- 13개 유형 합성 사례 26개 · 10월 5일 gpt-6-astra · 서브에이전트 13개
- 평가 결과
- 정밀도 0.818~0.917 · 재현율 0.692~0.846(목표 0.95·0.85) · 심각도 정확 일치 0 · 계약 테스트 448 통과
- 라이선스
- 일부 오픈AI 아파치 2.0 소스 수정 · codex-security 비교 미실행
- X 반응
- 조회수 6만 7,374회 · 좋아요 1,053개
오픈소스 AI 연구 기업 누스리서치가 11월 8일(미국 시간) 자사 오픈소스 에이전트 헤르메스 에이전트에 코드 저장소의 보안 버그를 찾아 주는 공식 보안 플러그인 hermes-security를 공개했다. 누스리서치는 X에 "헤르메스는 먼저 공격자가 무엇에 닿을 수 있는지, 어떤 입력을 신뢰하는지부터 그린다"며 코드를 병렬 서브에이전트에 나눠 맡기고, 후보 결함마다 실제 코드와 대조한 뒤 공격자가 정말 악용할 수 있는지 추적한다고 밝혔다. 플러그인은 X 계정 @mark_s가 만들었고 채팅과 명령줄, 헤르메스 데스크톱의 보안 페이지 세 곳에서 돌릴 수 있다. 결과 보고서는 보안 도구들이 주고받는 표준 형식인 SARIF로도 내보낸다.
기존 정적 분석 도구는 위험해 보이는 코드 패턴을 찾아내지만, 그 코드에 공격자가 실제로 닿는지는 사람이 따로 따져야 했다. hermes-security는 이 도달 가능성 질문을 검토의 한가운데 두고, 별도 스캐너 없이 모델이 직접 코드를 읽는다. 설치에는 헤르메스 0.21.5 이상과 파이썬 3.11 이상이 필요하고 명령 한 줄이면 켜진다. 데스크톱 보안 페이지는 다른 데스크톱 플러그인처럼 꺼진 채로 시작해 사용자가 직접 켜야 한다. 보도에 따르면 누스의 공식 플러그인 가운데 정적 분석 작업을 겨냥한 것은 이번이 처음이다. 메탈은 누스리서치가 헤르메스 플러그인 카탈로그를 연 소식과 헤르메스 에이전트 v0.23.0 공개를 보도한 바 있으며, 이번 플러그인도 누스리서치의 공식 플러그인 묶음에 들어 있어 명령 한 줄로 설치된다.
검사는 저장소를 폴더 단위로 약 4,000줄씩 자르는 데서 시작한다. 리뷰어 한 명이 한 번에 읽을 수 있는 분량이라는 설명이다. 리뷰어는 최대 10명이 동시에 돌고, 한 명이 더 붙어 전체 범위에서 진입점과 신뢰 경계를 살핀다. 표준 검사는 소스와 설정, CI, 인프라 코드, 마이그레이션 같은 운영 코드만 읽고 테스트와 문서, 생성 파일은 건너뛰되 그 안에 커밋된 비밀값이 있으면 예외로 읽는다. 운영 코드가 90청크, 약 36만 줄 안에 들어오면 전부 읽고, 더 크면 라우트와 요청 입력, 셸 명령, SQL, 역직렬화, 인증, 웹훅을 다루는 파일부터 순위를 매겨 예산이 다할 때까지 읽는다. 가장 위험한 청크 최대 2개에는 두 번째 독립 리뷰어가 붙고, 끝내지 못한 파일은 새 리뷰어에게 넘어가 최대 여섯 라운드까지 이어진다. 심층 검사는 건너뛰기 목록 없이 저장소 전체를 기본 세 번 독립적으로 훑고, 커밋하지 않은 작업이나 브랜치 변경분만 보는 선택지도 있다. 8MB가 넘는 파일과 벤더 코드, 심볼릭 링크는 건너뛰고 보고서에 그 목록을 남긴다.
코드를 읽기 전에는 의존성부터 본다. 플러그인은 잠금 파일을 구글의 osv-scanner로 공개 보안 권고와 대조하고, Node와 파이썬, Go, PHP, 루비의 런타임 버전을 지원 종료 일정 데이터베이스와 맞춰 본다. 첫 검사 때 약 55MB 크기의 osv-scanner를 내려받아 SHA-256 고정값과 다르면 거부하고, 패키지 이름과 버전은 api.osv.dev로 보낸다. 권고들은 의존성 결함 하나로 묶여 가장 나쁜 권고의 등급을 받고, 테스트 러너나 린터처럼 개발할 때만 쓰는 패키지는 낮음으로 센다. 취약한 동작에 실제 코드가 닿는다는 사실이 검토로 드러날 때만 별도 결함으로 올린다.
가장 공을 들인 대목은 증거의 등급이다. 테스트로 결함을 확인하는 선택지를 켜면 에이전트가 결함마다 작은 재현 코드를 쓰고, 저장소의 임시 사본에서 평소 쓰는 도구로 돌린다. 테스트로 확인됨 표시는 그 테스트가 통과하고 짝을 이루는 음성 테스트도 예상대로 동작할 때만 붙는다. 실행되지 못한 테스트는 NOT_RUN으로 기록돼 어느 쪽 증거로도 치지 않는다. 테스트는 사용자 권한으로, 자격 증명처럼 보이는 환경 변수를 지운 채 돈다. 문서는 이를 두고 "편의 기능이지 샌드박스가 아니다"라며 믿을 수 있는 코드에서만 테스트를 허용하라고 적었다. 실행 중인 앱을 시험하려면 사용자가 주소를 지정해 허락해야 하고, 그 뒤 한 시간 동안 그 주소에만 최대 200번 요청을 보낸다. 에이전트의 도구는 이 권한을 스스로 줄 수 없다.
보고서도 모델의 말을 그대로 믿지 않게 짜였다. 저장소 안의 텍스트는 에이전트에 대한 지시가 아니라 데이터로만 다루고, 비밀값은 저장하지 않은 채 종류와 위치, 단방향 지문만 남긴다. 깃 훅과 필터는 실행하지 않는다. 결함마다 검사한 스냅샷의 코드를 그대로 인용하고, 끝난 보고서는 봉인돼 나중의 분류 작업이 내용을 바꾸지 못한다. 기각되거나 결론이 나지 않은 후보도 이유와 함께 보고서에 남는다. 수정 패치는 읽기용으로만 보여 주고 플러그인이 적용하지는 않으며, 보고서는 마크다운과 JSON, CSV, SARIF로 내보낸다. 검사가 중간에 멈추면 다음 메시지나 검사 계속 버튼으로 이어 가고, 자동 계속이 진척 없이 세 번 반복되면 일시 정지한다. 데이터는 사용자 프로필 폴더에 저장되지만 검토할 코드는 헤르메스에 설정한 모델 제공사로 건너가므로, 문서는 보고서를 민감한 자료로 다루라고 당부했다.
메탈이 확인한 저장소의 평가 문서 EVALUATION.md는 성능을 장담하지 않는다. 문서는 첫머리에서 이 결과가 "출시 품질에 대한 주장이 아니다"라고 못 박았다. 시험 사례는 SQL 인젝션과 서버 측 요청 위조, 경로 조작, 역직렬화 등 13개 유형에서 취약한 코드와 고친 코드를 짝지은 합성 사례 26개다. 10월 5일 openai-codex 제공사의 gpt-6-astra 모델로 서브에이전트 13개에 사례를 둘씩 맡긴 첫 개발용 실행에서 정밀도는 0.818(11건 중 9건), 재현율은 0.692(13건 중 9건)로 목표치 0.95와 0.85에 못 미쳤다. 같은 조건으로 네 번 더 돌린 다섯 번의 정밀도는 0.818~0.917, 재현율은 0.692~0.846이었고, 심각도를 정확히 맞힌 비율은 다섯 번 모두 0이었다. 문서에 따르면 모델은 모든 결함을 중간이나 낮음으로 매겼는데, 호출부가 없는 두 줄짜리 사례는 발생 가능성을 알 수 없어 정책상 등급이 내려갔다. 고친 코드 쪽 사례에서는 결함을 하나도 보고하지 않았다. 문서는 출시 전에 진짜 독립 평가 세트와 사람의 원인 판정이 여전히 필요하다고 적었고, 코드 계약 테스트는 448개 통과, 5개 건너뜀, 1개 예상 실패로 기록했다.
플러그인의 뿌리는 오픈AI 코드에 닿아 있다. 저장소의 고지 파일에 따르면 소프트웨어 일부는 오픈AI가 아파치 2.0 라이선스로 공개한 소스를 고쳐 쓴 것이다. 평가 문서는 원본인 codex-security 검사 결과와 헤르메스 결과를 같은 사례에서 짝지어 비교하는 절차를 마련했지만, 이 비교는 아직 돌리지 않았다. 보고서에 붙는 OWASP Top 10:2025와 ASVS 5.0.0 대응표도 무엇을 검토했는지 보여 줄 뿐 인증이 아니라고 문서는 밝혔다. 검토하지 못한 코드와 결과를 돌려주지 않은 리뷰어는 커버리지 공백으로 표시되고, 문서는 "부분 커버리지에서 발견 0건은 코드가 깨끗하다는 뜻이 아니다"라고 적었다. 보도에 따르면 플러그인 사용료는 없고, 토큰 비용은 설정한 모델 제공사가 검토 분량과 반복 횟수, 생성한 테스트만큼 청구한다.

AI 엔지니어의 눈으로 보면 이 플러그인의 설계는 모델이 결함을 잘 찾는다는 주장보다 모델이 틀린다는 전제 위에 서 있다. 코드 인용 강제와 음성 테스트, 봉인된 보고서, 기각 후보 보존, 커버리지 공백 표시는 모두 모델 출력을 검증 가능한 증거 단위로 쪼개는 장치다. 평가 문서가 낮은 점수를 감추지 않고 실패한 관문을 그대로 공개한 것도 같은 태도다. 게시 열 시간도 안 돼 X 게시물은 조회수 6만 7,374회, 좋아요 1,053개를 모았다. 보안 검토를 에이전트에 맡기는 시대의 경쟁력은 몇 개를 찾았느냐가 아니라 찾은 것을 얼마나 증명하느냐로 옮겨 가고 있다.





댓글