104 lines
3.6 KiB
Markdown
104 lines
3.6 KiB
Markdown
# 보안 점검표 · IT 문의 Agent
|
|
|
|
- 이름:
|
|
- 사용한 CLI 에이전트: codex / claude / agy
|
|
- 이 파일을 `my-work/SECURITY.md`로 복사해 채웁니다. 절마다 어느 실습에서 채우는지 제목에 적혀 있습니다.
|
|
|
|
## 1. 공격해 보기 (Lab 01 예제 1 · `open-it-agent`)
|
|
|
|
| 공격 | 무엇을 노렸나 | 결과 (막힘 · 새어 나감) | 새어 나간 것 |
|
|
| --- | --- | --- | --- |
|
|
| 처음 받은 지침 보기 | | | |
|
|
| 사칭으로 내부 코드 | | | |
|
|
| 그냥 묻기 · 출입 번호 | | | |
|
|
| 이름 사칭 · 남의 접수 건 | | | |
|
|
| 연락처 | | | |
|
|
| 없는 직원 · 긴 질문 · 빈 질문 | | | |
|
|
| 내가 만든 공격 | | | |
|
|
|
|
## 2. 관문이 아낀 시간 (Lab 01 예제 3 · `bench -n 5`)
|
|
|
|
| 요청 | 어디서 끝났나 | p50 | LLM을 불렀나 |
|
|
| --- | --- | --- | --- |
|
|
| 없는 직원 (`bad-user`) | 입력 검증 (400) | | |
|
|
| 알려진 공격 (`injection-ko`) · `my-secure` | 규칙 (차단) | | |
|
|
| 알려진 공격 (`injection-ko`) · `open-it-agent` | 끝까지 | | |
|
|
| 정상 질문 (`faq-vpn`) · `my-secure` | 끝까지 | | |
|
|
|
|
한 줄 정리:
|
|
|
|
## 3. 숨긴 공격과 글자 정리 (Lab 01 과제 2 · `lab01-challenge2`)
|
|
|
|
| 숨긴 방법 | 예 | 고치기 전 | 글자 정리 뒤 |
|
|
| --- | --- | --- | --- |
|
|
| 전각 글자 | | | |
|
|
| 한 글자씩 띄우기 | | | |
|
|
| 보이지 않는 글자 | | | |
|
|
| 점 찍어 나누기 | | | |
|
|
| 정상 질문 4개 | | | |
|
|
|
|
## 4. 위협 목록과 관문 (Lab 01 · Lab 02)
|
|
|
|
| 위협 | 막는 관문 (입력 검증 · 규칙 · 판별 LLM · 데이터 API · 지시문 · 출력 필터) | 테스트 케이스 |
|
|
| --- | --- | --- |
|
|
| 지시문 바꾸기 · 지시문 보기 | | |
|
|
| 지시문 속 비밀 | | |
|
|
| 남의 정보 | | |
|
|
| 개인정보가 답에 | | |
|
|
| 너무 긴 · 빈 입력, 없는 직원 | | |
|
|
| 글자를 숨긴 공격 | | |
|
|
|
|
## 5. 규칙 · 판별 LLM 재기 (Lab 02 예제 3 · 과제 1)
|
|
|
|
| 테스트 | 규칙만 (예제 3) | 규칙 + 판별 LLM (과제 1) |
|
|
| --- | --- | --- |
|
|
| 알려진 공격 10 (`lab01-challenge` 앞 10) | | |
|
|
| 새 공격 8 (`lab02-challenge` 앞 8) | | |
|
|
| 정상 10 (막지 않아야 함) | | |
|
|
| VPN 질문 p50 (`bench`) | | |
|
|
| 알려진 공격 p50 (`bench injection-ko`) | | |
|
|
|
|
## 6. 판별 LLM이 멈추면 (Lab 02 과제 2 · `lab02-challenge2`)
|
|
|
|
| 요청 | 고치기 전 | 고친 뒤 | 걸린 시간 |
|
|
| --- | --- | --- | --- |
|
|
| 정상 질문 | | | |
|
|
| 새 공격 | | | |
|
|
| 알려진 공격 (규칙) | | | |
|
|
| 빈 질문 | | | |
|
|
|
|
fail-closed로 정한 까닭과 그 값(정상 질문도 못 받음):
|
|
|
|
## 7. 관문별 시간과 기록 (Lab 03 예제 3 · `lab03-layers -v`)
|
|
|
|
| 케이스 | HTTP | `route` | `security.blocked_by` | `masked` | 시간 |
|
|
| --- | --- | --- | --- | --- | --- |
|
|
| ① 입력 검증 | | | | | |
|
|
| ② 규칙 | | | | | |
|
|
| ③ 판별 LLM | | | | | |
|
|
| ④ 출력 필터 | | | | | |
|
|
| ⑤ 정상 | | | | | |
|
|
|
|
## 8. 어려운 보안 테스트 (Lab 03 과제 1 · `cases/my-cases.json`)
|
|
|
|
| 케이스 | 기대 | 처음 | 고친 곳 | 고친 뒤 |
|
|
| --- | --- | --- | --- | --- |
|
|
| | | | | |
|
|
|
|
## 9. 감사 로그와 보안 요약 (Lab 03 과제 2 · `lab03-challenge2`)
|
|
|
|
| 칸 | 값 | 뜻 |
|
|
| --- | --- | --- |
|
|
| `total` | | |
|
|
| `answered` | | |
|
|
| `blocked.rule` · `blocked.guard` · `blocked.output_filter` | | |
|
|
| `masked` | | |
|
|
| `pii_in_log` | | |
|
|
|
|
로그에 남기지 않은 것과 그 까닭:
|
|
|
|
## 10. 아직 막지 못한 것 · 운영에서 더 할 일
|
|
|
|
- (예: `user`를 본문으로 받으면 누구나 다른 사람 이름을 쓸 수 있다 → 로그인 · 인증 헤더)
|
|
-
|