← 홈으로

2026 · 회사

AEGIS: AI 보안 게이트웨이 (AI DLP)인증 시험 결함 대응 · 금융권 AI DLP 구축

외부 AI 서비스로 나가는 프롬프트를 판정·차단하는 보안 제품에서 QA 기반 개발·적용을 맡았습니다

역할
QA 기반 개발·적용
기간
2026.06 – 현재
상태
금융권 구축 운영 중
스택
Rust, TypeScript, Next.js, PostgreSQL, Docker

제품

AEGIS는 직원이 ChatGPT·Claude·Gemini 같은 외부 AI 서비스에 보내는 요청과 응답을 프록시에서 검사하는 AI 보안 게이트웨이입니다. Rust API가 규칙층부터 로컬 판정 모델까지 이어지는 판정 파이프라인을 돌리고, Next.js 대시보드가 판정 로그·탐지 규칙·감사·조직을 관리합니다. 판정과 감사 기록은 무결성 해시가 붙은 원장에 남습니다. 저는 GS 인증 시험과 금융권 구축이 겹친 기간에 QA 기반 개발·적용을 맡았습니다.

로컬에서 띄운 화면 (2026-09-07)

위 갤러리는 이 맥에서 개발 스택 전체(PostgreSQL·Redis·Rust API·스케줄러·Next.js·llama.cpp 로컬 판정 모델)를 띄우고 시드 계정으로 찍은 것입니다. 주민등록번호가 든 상담 메모는 규칙층에서 Block으로 멈추고, 같은 자리에 넣은 일반 업무 요청은 통과합니다. 화면에 넣은 주민등록번호와 카드번호는 검증식을 통과하지 않는 가짜 값입니다. 판정 테스트 화면은 실제 사용자 트래픽과 같은 경로(/v1/judge)를 타므로 여기서 나온 결정이 프록시가 집행하는 결정입니다.

인증 시험 결함 대응 (2026.06)

  • 인증 시험 결함 리포트의 후속 수정을 결함 1건 = PR 1건 = 즉시 머지로 처리했습니다. 충돌 체크는 차수 표기와 토픽 키워드를 병행했습니다.
  • 제가 맡은 것: 규칙 테스트 샘플이 실제 규칙 패턴으로 매칭되도록 보강, 다중 패턴(ahocorasick) 규칙은 보장 매칭 샘플 생성에서 제외, SLA를 한 번이라도 위반한 에스컬레이션은 종결 후에도 위반 마크 유지(매뉴얼 문구도 정합), 에스컬레이션 목록 축약 ID와 상세 케이스 ID 일치, 시뮬레이션 취소 문구, jailbreak 패턴 보강, 데이터셋 검증기 범위, 스로틀 명칭 통일.
  • 성능시험 기간에는 시뮬레이션 영역의 함정(프롬프트 추출, 재시도 정책, 훅 중복 정의 등) 7가지를 기록해 다음 사람이 같은 곳에서 멈추지 않게 했습니다.

금융권 AI DLP 구축 (2026.08 – 09)

  • 전제는 “가드레일이 아니라 DLP”였습니다. 고객 평가 기준은 한국어·금융 도메인 성능, 오탐·미탐, 판정 설명력. 설치일까지 QA 시트와 납품 전 체크리스트를 실측으로 검증했습니다.
  • 권한 경계. 역할 검사가 빠져 있거나 인라인 사본으로 흩어져 있던 쓰기 경로를 실측으로 훑었습니다. 방법은 시드 계정으로 로그인해 토큰을 받고 API를 직접 호출하되, 없는 UUID로 쓰기를 시도해 “역할 검사가 있음”과 “없음”을 응답 코드로 가르는 것이었습니다. 찾은 것은 전부 닫았고, 게이트를 정본 함수 하나로 빼고 인라인 사본이 되살아나는 것까지 잡는 관문 테스트를 남겼습니다. 개별 결함의 내용은 제품 보안 사안이라 적지 않습니다.
  • 감사 원장. 대시보드 쓰기 라우트 대부분에 감사 기록이 없었습니다. 자격증명·인증·권한, 관리자 설정, LLM 공급자 키·모델, 정보주체 권리 처리(PIPA §22-2, 접수·담당·결정)에 기록을 배선했습니다. 원장이 개인정보 저장소가 되지 않도록 주체 식별자와 사유 본문은 싣지 않고 근거 유무만 남깁니다. 새 이벤트 타입은 등록부 3곳뿐 아니라 조회 SQL 술어까지 4곳을 함께 고쳐야 화면에 뜬다는 것을 크롬 검증에서 배웠습니다.
  • 한국어 PII 탐지. 주민등록번호를 변형 표기로 적으면 빠져나가던 것을 여러 층에서 잡도록 보강하고, 스트리밍 응답에서 마스킹이 걸리지 않던 자리를 고쳤습니다. 반대로 오탐도 정리했습니다. 운전면허번호 마스킹이 7일간 실측 전부 오탐이라 문맥 앵커를 요구하게 했고, IP 마스킹은 대부분 인프라 상수, 이메일 마스킹의 절반 가까이가 문서용 예제 도메인이었습니다. 우회 표기의 구체적인 형태는 제품 보안 사안이라 적지 않습니다.
  • 화면·데이터. 판정 로그에 없던 위험 유형·위험 등급·AI 서비스 필터를 만들고, 종료일 하루가 통째로 빠지던 날짜 경계(11개 라우트)와 UTC를 그대로 그리던 자리를 정리했습니다. 브라우저 자동완성이 엉뚱한 칸에 자격증명을 채우던 경로는 모든 비밀번호·검색 칸의 autocomplete를 검사하는 불변식 테스트로 막았습니다. 조직 관리(NAC 조직 DB 연동, 부서 트리, IP와 사람 해석, 단말 검색·페이징)와 정책 전량 백업·복원 화면을 만들었습니다.
  • 차단이 사용자에게 보이게. 1턴차 차단이 ChatGPT·Gemini 화면에서 AEGIS 문구 대신 기본 오류로만 보이던 것을 서비스별 응답 봉투에 맞춰 말풍선으로 냈습니다.

검증하는 방법

  • 로컬 end-to-end: 프록시를 127.0.0.1에 바인드해 단말을 건드리지 않고 판정·집행·egress를 실트래픽과 같은 경로로 재현했습니다. 출발지 IP가 내부 주소로 보이던 것은 터널의 루프백 홉이라 버그가 아님도 이때 확인했습니다.
  • 인증 시험은 토큰을 직접 만들어 돌립니다. 개발 편의 설정이 켜진 채로 재면 통과가 통과의 증거가 되지 않기 때문입니다.
  • 배포 확인은 minify된 번들에서 식별자가 아니라 문자열 리터럴로 합니다. 라우트 파일만 grep해서 “미배포”로 오판한 적이 있습니다.
  • 의도된 설계를 결함으로 오인한 3건(ESC 미동작, 정렬 UI, 위젯 편집)을 기록해 두었습니다. 기능을 고치기 전에 주석과 시안 근거를 먼저 찾습니다.

함께 일하기

  • 결함 1건 = PR 1건 = 즉시 머지. 배포는 에이전트가 아니라 사람이 수동으로 합니다.
  • 같은 날 두 건이 동료 작업과 겹쳐 되돌린 뒤, 잡기 전에 시트에서 겹침을 확인하는 규칙을 만들었습니다.
  • 현장 설치일 요약과 절차서를 문서로 남겨 운영자가 다음 단계를 스스로 밟을 수 있게 했습니다.