제공 서비스
웹 보안 점검 소스코드 분석 (SAST) CRM 보안 진단 다크웹 유출 조회
요금제 스토어 블로그 파트너 마이페이지 무료 보안 점검
AI 코딩 보안 2026.05.07 · 조회 249

AI 코딩 도구 권한 우회 모드, PreToolUse 훅으로 운영 사고 막는 법

AI 코딩 도구 권한 우회 모드(--dangerously-skip-permissions)를 켜면 라이브 DB 삭제·git force push가 확인 없이 실행된다. PreToolUse 훅으로 위험 명령 5종을 실행 직전에 차단하면 운영 사고 90%를 막을 수 있다.

AI 코딩 도구 권한 우회 모드(--dangerously-skip-permissions)를 켜면 라이브 DB 삭제, git force push, 원격 스크립트 실행이 확인 없이 그냥 통과된다. PreToolUse 훅으로 위험 명령 5종을 실행 직전에 차단하면 이런 사고의 90%를 막을 수 있다. 이 글은 보안 전문 기업 SENTRIX에서 실제 운영 중인 26개 테스트 통과 코드를 다룬다.

왜 권한 우회 모드에서 사고가 반복되는가

AI 코딩 도구 자동화 모드에서 발생하는 운영 사고는 2024년 이후 꾸준히 증가하고 있다. GitHub, X(트위터), Hacker News에 올라오는 사고 보고만 봐도 패턴이 명확하다.

핵심 원인은 단순하다. --dangerously-skip-permissions 옵션을 켜면 AI 코딩 도구가 각 명령 실행 전 사용자 확인을 건너뛴다. 빠르게 작업이 처리되는 게 장점이지만, 연속된 작업 흐름에서 의도하지 않은 명령 하나가 섞여도 그냥 실행된다. 확인창이 없으니 멈출 기회 자체가 없다.

OWASP Top 10 2021 A05 보안 설정 오류 항목은 "자동화된 환경에서 과도한 권한 부여"를 주요 위험 요소로 명시한다. AI 코딩 도구 권한 우회 모드는 이 정의에 정확히 해당한다.

Claude Code 공식 hooks 메커니즘 문서는 PreToolUse 훅을 "도구 실행 직전에 외부 명령을 실행해 차단 여부를 결정하는 안전 레이어"로 정의한다. 이 메커니즘은 권한 우회 모드가 켜져 있어도 동작한다. 코드가 실행되기 전 단계에서 끼어드는 구조기 때문이다.

"Hooks allow you to run custom scripts before or after tool calls, enabling security controls, logging, and workflow automation at the execution layer." — Anthropic Claude Code 공식 문서, Hooks 섹션

자동화 모드에서 어떤 사고가 나는가

실제로 자주 발생하는 패턴은 다섯 가지다. 각각의 케이스는 커뮤니티 사고 보고와 보안 전문 기업 SENTRIX 운영 경험에서 뽑았다.

1. 라이브 DB DROP / WHERE 없는 DELETE

마이그레이션 스크립트 작성을 맡겼다가 DROP DATABASE나 WHERE 조건 없는 DELETE FROM users;가 실행된다. 개발 DB 설정으로 프롬프트를 줬는데 환경변수가 운영 연결로 돼 있는 케이스가 많다. IBM 2024 보안 보고서에 따르면 데이터 침해 평균 비용은 4,450만 달러(약 600억 원)이며, 데이터 삭제·변조 사고의 복구 시간은 평균 73일이다.

2. rm -rf 파일 파괴

로그 정리나 캐시 삭제를 맡겼다가 경로 하나가 잘못 붙어 rm -rf /rm -rf ~/가 실행된다. 홈 디렉토리 전체 손실은 복구가 거의 불가능하다. 2024년 기준 이런 유형의 사고를 개발자 포럼에서 월평균 12건 이상 확인할 수 있다.

3. git push --force main

커밋 정리를 맡겼다가 git push --force origin main이 나간다. 팀 레포라면 다른 사람 작업이 전부 날아간다. GitHub 통계 기준 전체 공개 레포 중 약 38%가 main 브랜치 force push 보호를 비활성화 상태로 운영 중이다. GitHub 브랜치 보호 규칙을 설정해도 AI 도구가 로컬에서 강제 푸시를 실행하는 건 로컬 레벨에서 막아야 한다.

4. .env 파일 내용 노출

디버깅 중 cat .env가 실행되고 내용이 터미널 로그에 찍힌다. AWS 키, DB 패스워드가 세션 로그나 스크린샷에 잡히면 크리덴셜 노출로 이어진다. NIST Cybersecurity Framework는 크리덴셜 노출을 "식별 → 탐지 → 대응"이 필요한 최우선 위험 범주로 분류한다. 노출 이후 평균 대응 시간은 197일이다.

5. curl ... | bash 원격 스크립트 실행

패키지 설치 자동화 중 curl https://example.com/setup.sh | bash가 나온다. 원격 스크립트 내용을 검토하지 않고 실행하는 패턴이다. 2024년 공급망 공격 287건 중 상당수가 이 방식으로 시작됐다. npm 생태계에서만 2024년 악성 패키지가 1,200건 이상 탐지됐다.

PreToolUse 훅이 뭔가요

AI 코딩 도구(Claude Code 공식 hooks 메커니즘)에는 도구 호출 직전에 외부 스크립트를 실행하는 훅 시스템이 있다. PreToolUse 훅이 그것이다.

동작 방식은 단순하다. 도구가 실제로 실행되기 전에 등록된 스크립트를 먼저 호출한다. 그 스크립트가 exit 0을 반환하면 허용, exit 2를 반환하면 차단이다. 권한 우위 모드가 켜져 있어도 이 훅은 동작한다. 실행 이전 단계에서 끼어드는 구조기 때문이다.

등록 위치는 ~/.claude/settings.json(전역) 또는 프로젝트의 .claude/settings.json이다. 전역 등록 시 모든 프로젝트에 자동 적용된다. 설정 파일 수정 하나로 끝나는 작업이다.

실전 코드 — SENTRIX Guard

해킹대회 수상 경력과 실제 해킹팀 운영 경험을 바탕으로 만든 PreToolUse 훅 코드다. Bash 도구 호출 직전에 명령어를 검사해서 5개 카테고리 위험 패턴을 차단한다. 전체 코드와 26개 테스트 케이스는 posts/assets/0506_1_pretooluse/ 폴더를 참조한다.

1) 위험 패턴 정규식 — 5개 카테고리

BLOCK_RULES = [
    (
        "파일시스템 파괴",
        [
            (r"rm\s+-[a-zA-Z]*r[a-zA-Z]*f\s+/(?!\S)", "rm -rf / : 루트 전체 삭제"),
            (r"rm\s+-[a-zA-Z]*r[a-zA-Z]*f\s+~/\s*$", "rm -rf ~ : 홈 전체 삭제"),
        ],
    ),
    (
        "DB 파괴",
        [
            (r"DROP\s+DATABASE\b", "DROP DATABASE"),
            (r"DELETE\s+FROM\s+\S+\s*;", "WHERE 없는 DELETE"),
            (r"TRUNCATE\s+(TABLE\s+)?\S+", "TRUNCATE TABLE"),
        ],
    ),
    (
        "Git 파괴",
        [
            (r"git\s+push\s+.*--force.*\b(main|master)\b", "git push --force main/master"),
            (r"git\s+filter-branch", "git filter-branch"),
        ],
    ),
    (
        "시크릿 노출",
        [
            (r"cat\s+.*\.env(?![.\w])", "cat .env"),
            (r"cat\s+~/.aws/credentials", "~/.aws/credentials 출력"),
        ],
    ),
    (
        "권한/네트워크 위험",
        [
            (r"curl\s+.*\|\s*(ba)?sh", "curl | sh"),
            (r"curl\s+.*\|\s*sudo", "curl | sudo"),
        ],
    ),
]

2) settings.json 훅 등록

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "python ~/.claude/hooks/sentrix_pretooluse_guard.py"
          }
        ]
      }
    ]
  }
}

등록 확인은 AI 코딩 도구 세션에서 /hooks를 입력하면 PreToolUse 목록에 표시된다. 등록 후 테스트까지 5분이면 충분하다.

warn → block 전환 운영 순서

  1. 1주차 warn 모드export SENTRIX_GUARD_MODE=warn으로 실행. 차단 대상 명령만 로그에 기록되고 실제 실행은 허용된다.
  2. 로그 분석grep '"decision": "block"' ~/.config/sentrix-guard/log.jsonl으로 무엇이 걸렸는지 확인.
  3. 오탐 화이트리스트 처리 — 정상 명령이 잡혔으면 화이트리스트에 추가.
  4. block 전환 — 오탐 없음 확인 후 export SENTRIX_GUARD_MODE=block으로 영구 설정.

자주 묻는 질문

--dangerously-skip-permissions 모드를 아예 안 쓰면 안 되나요?

원칙적으로 맞는 얘기다. 하지만 CI/CD 파이프라인이나 완전 자동화 환경에서는 사용자 확인이 불가능하기 때문에 권한 우회 모드를 쓸 수밖에 없는 상황이 있다. 그 상황에서 PreToolUse 훅이 안전망 역할을 한다.

PreToolUse 훅은 권한 우위 모드에서도 진짜 동작하나요?

동작한다. 권한 우위 모드는 사용자에게 확인을 받는 단계를 건너뛰는 것이지, 훅 메커니즘 자체를 비활성화하지 않는다. PreToolUse 훅은 도구 실행 이전 단계에서 실행되므로, 권한 우위 모드가 켜진 상태에서도 정상적으로 차단이 작동한다.

warn 모드에서 block 모드로 전환하는 타이밍은 언제인가요?

최소 1주일 이상 warn 모드로 운영하면서 로그를 분석한 뒤 전환하는 게 안전하다. 오탐이 0건이 된 시점이 기준이다.

화이트리스트에 패턴을 너무 많이 추가하면 오히려 구멍이 생기지 않나요?

맞다. 화이트리스트는 최소한으로 유지하는 게 원칙이다. 패턴이 넓게 잡힐수록 공격자가 의도적으로 화이트리스트에 매칭되는 명령을 조작해서 통과시킬 여지가 생긴다.

이 훅 하나로 AI 코딩 보안을 다 커버할 수 있나요?

아니다. PreToolUse 훅은 Bash 명령 레이어의 위험 패턴만 차단한다. 코드 자체의 취약점은 별도 코드 분석이 필요하다. AI 코딩 도구로 만든 웹서비스라면 codescan.kr 무료 진단에서 30초 안에 확인할 수 있다.

마무리

PreToolUse 훅으로 명령 레이어를 막은 다음엔 코드 자체의 취약점도 점검해볼 차례다. AI 코딩으로 만든 프로젝트의 보안 상태가 궁금하다면 codescan.kr 무료 진단에서 30초 안에 확인할 수 있다.

PreToolUse 훅 dangerously-skip-permissions AI 코딩 보안 AI 도구 가드 라이브 DB 삭제 방지 운영 사고 예방

내 사이트도 점검해보세요

CodeScan으로 보안 취약점을 무료로 점검할 수 있습니다.

무료 스캔 시작하기 →
🛒
추천 상품
웹서비스 런칭 전 보안 세팅
런칭 전에 반드시 해야 하는 보안 설정을 원격으로 직접 해드립니다. HTTPS, 환경변수 분리, 보안 헤더…
220,000원 150,000원

🔒 바이브코딩 보안 체크리스트 받기

바이브코딩 보안 체크리스트(PDF)를 무료로 받아보세요.