GhostApproval 공격은 AI 코딩 어시스턴트가 파일 시스템의 심볼릭 링크를 제대로 검증하지 않는 점을 노려, 사용자가 의도하지 않은 민감한 파일에 접근하거나 권한을 상승시키는 공격 방식이다. 공격자는 심볼릭 링크로 AI가 읽거나 수정하려는 대상 파일을 시스템 설정 파일이나 권한 관리 파일로 리다이렉션해 승인 프로세스를 완전히 우회한다.
AI 코딩 어시스턴트의 구조적 허점과 GhostApproval 공격 원리
최근 많은 기업이 도입한 AI 코딩 어시스턴트는 개발 생산성을 높이기 위해 로컬 파일 시스템에 접근해 코드를 분석하고 수정하는 권한을 부여받는다. 하지만 상당수 AI 에이전트가 파일 경로를 처리할 때 해당 경로가 실제 파일인지, 아니면 다른 경로를 가리키는 심볼릭 링크(Symbolic Link)인지를 구분하는 ‘경로 정규화(Path Normalization)’ 과정을 생략하는 치명적인 취약점이 있다.
GhostApproval 공격의 핵심은 AI가 수행하는 ‘승인 요청’과 ‘실제 실행’ 사이의 시간적, 논리적 간극을 이용하는 데 있다. AI가 특정 파일 수정을 제안하고 사용자가 이를 승인하는 순간, 공격자는 해당 파일 경로를 심볼릭 링크로 교체해 시스템 루트 권한 파일이나 인증 설정 파일로 연결한다. 사용자는 단순한 코드 수정안에 동의했다고 생각하지만, 실제로는 시스템 핵심 보안 설정을 변경하는 명령을 승인하게 된다.
이런 공격이 가능한 이유는 AI 어시스턴트가 샌드박스 환경이 아닌 호스트 OS의 파일 시스템 권한을 그대로 상속받아 작동하는 경우가 많기 때문이다. 특히 AI가 파일 쓰기 작업을 수행할 때 follow symlinks 옵션이 활성화되어 있거나 방어 로직이 없다면, 공격자는 매우 손쉽게 권한 상승(Privilege Escalation)을 달성한다.
AI 보안 취약점 분석: GhostApproval 공격이 승인 프로세스를 속이는 3가지 단계
GhostApproval 공격은 정밀하게 설계된 3단계 과정을 통해 AI의 신뢰 모델을 무너뜨린다.
1. 대상 파일 생성 및 유인 단계
공격자는 먼저 AI 코딩 어시스턴트가 분석하기 쉬운 일반적인 소스 코드나 설정 파일을 생성한다. config.json이나 utils.py 같은 무해한 파일을 만든 뒤, AI가 이 파일을 수정하도록 유도하는 프롬프트를 입력하거나 특정 버그를 심어 자동으로 수정을 제안하게 만든다. 이 단계에서 사용자는 AI가 단순히 효율성을 높이거나 버그를 잡으려는 것으로 인식한다.
2. 심볼릭 링크 교체 및 리다이렉션 단계
AI가 수정 제안을 생성하고 사용자의 승인을 기다리는 짧은 순간, 공격자는 ln -s 명령어로 무해한 파일을 시스템 민감 파일로 연결한다. 예를 들어, AI가 수정하려던 config.json 파일을 /etc/shadow나 /etc/sudoers 같은 관리자 권한 파일로 링크시키는 식이다. AI는 대상이 여전히 config.json이라고 믿고 작업을 수행하지만, OS 레벨에서는 심볼릭 링크를 따라 실제 시스템 파일에 접근하게 된다.
3. 승인 우회 및 권한 탈취 실행 단계
사용자가 “설정 파일의 오타를 수정하겠습니다”라는 AI의 제안을 승인하면, AI는 해당 경로에 쓰기 작업을 수행한다. 이때 실제로는 심볼릭 링크로 연결된 /etc/sudoers 파일에 공격자가 원하는 권한 설정(예: NOPASSWD 설정)이 추가된다. 사용자는 단순한 텍스트 수정에 동의했을 뿐이지만, 결과적으로 시스템 최고 권한이 공격자에게 부여되며 완전한 시스템 장악으로 이어진다.
GhostApproval 공격의 기술적 메커니즘 및 대응 방안 비교
AI 코딩 어시스턴트의 취약점을 해결하려면 파일 시스템 접근 방식부터 근본적으로 바꿔야 한다. 일반적인 AI 파일 접근 방식과 GhostApproval 방어 기법을 비교한 분석 데이터는 다음과 같다.
| 구분 | 취약한 접근 방식 (Vulnerable) | 보안 강화 접근 방식 (Secure) |
|---|---|---|
| 경로 처리 방식 | 입력된 경로를 그대로 사용하여 파일 오픈 | realpath() 함수 등을 통한 경로 정규화 수행 |
| 심볼릭 링크 처리 | 심볼릭 링크를 자동으로 따라감 (Follow) | O_NOFOLLOW 플래그를 사용하여 링크 접근 차단 |
| 권한 검증 시점 | 작업 시작 전 1회 검증 | 승인 직전과 실행 직전에 재검증 (TOCTOU 방지) |
| 실행 환경 | 호스트 OS 권한 직접 사용 | 제한된 권한의 컨테이너 또는 샌드박스 환경 |
DevSecOps 엔지니어를 위한 실무 점검 체크리스트
GhostApproval 공격으로부터 시스템을 보호하기 위해 보안 담당자와 엔지니어는 다음과 같은 기술적 조치를 적용해야 한다.
1. 파일 경로 정규화 강제 적용
AI 어시스턴트가 파일에 접근하기 전, 반드시 realpath 또는 abspath 같은 함수로 심볼릭 링크 포함 여부를 확인한다. 최종 도달 경로가 허용된 작업 디렉토리(Working Directory)를 벗어나면 즉시 요청을 차단하고 경고 로그를 남겨야 한다.
2. O_NOFOLLOW 플래그 활용
파일을 여는 시스템 호출(System Call) 단계에서 O_NOFOLLOW 플래그를 설정해, 대상 파일이 심볼릭 링크일 경우 오픈 요청이 실패하도록 만든다. 이는 OS 레벨에서 리다이렉션을 원천 차단하는 가장 확실한 방법이다.
3. 최소 권한 원칙(PoLP) 적용
AI 코딩 어시스턴트 프로세스가 루트 권한이나 과도한 관리자 권한으로 실행되지 않게 설정한다. 전용 서비스 계정을 생성해 프로젝트 소스 코드 디렉토리만 읽고 쓸 수 있게 하며, /etc나 /root 같은 시스템 디렉토리 접근은 완전히 금지한다.
4. TOCTOU(Time-of-Check to Time-of-Use) 방어 로직 구현
파일 상태 확인 시점과 실제 사용 시점 사이에 공격자가 파일을 교체하는 것을 막아야 한다. 이를 위해 파일 서술자(File Descriptor)를 사용해 파일을 고정하고 작업을 수행하는 방식을 도입한다.
AI 코딩 어시스턴트는 개발 효율을 극대화하지만, 파일 시스템의 기본 원리를 간과하면 GhostApproval 같은 심각한 보안 구멍이 생긴다. 특히 심볼릭 링크를 이용한 권한 탈취는 사용자의 승인 절차마저 무력화한다는 점에서 매우 위협적이다. 경로 정규화와 최소 권한 원칙을 즉시 적용해 AI 기반 개발 환경의 보안성을 확보하는 것이 시급하다. 지금 바로 사용 중인 AI 어시스턴트 설정과 파일 접근 권한을 점검하자.