목록으로
교육·학습을 위한 AI 활용
AI의 틀린 안내를 바로잡으며 Docker로 Django SQL Injection(CVE-2022-34265)을 재현한 보안 실습 기록
👤 똑똑한부엉이479 📅 2026-10-31 👁 조회 54
AI의 안내를 그대로 따르지 않고 과제 원문과 오류 로그로 검증하며, Docker 환경에서 Django SQL Injection(CVE-2022-34265)을 재현해 Pull Request로 제출한 보안 학습 사례
1. 어떤 상황에서 AI를 활용했나요?
화이트햇스쿨 과제로 CVE 1건을 골라 Docker로 취약 환경을 구축하고 PoC를 실습한 뒤, 보고서(README)를 작성해야 했습니다. 제출 방법은 kr-vulhub 저장소를 Fork해 본인 환경을 추가하고 Pull Request를 올린 뒤 README를 PDF로 내는 것이었고, 평가는 재현성과 위험도로 나뉘었습니다.
Docker는 docker run -it ubuntu bash를 배운 정도였는데, Windows PowerShell에서 Docker Compose 환경을 올리고 오류를 해석하고 Pull Request까지 올리는 일은 처음이었습니다. 과제 조건(docker compose 하나로 환경 완성, 수정 없이 그대로 재현)도 함께 맞춰야 했습니다.
오류 로그와 화면을 그대로 보여 주면 의미를 바로 풀어 주고, 과제 조건에 맞는 CVE 선택과 진행 순서를 한 단계씩 짚어 줄 수 있어 ChatGPT를 활용했습니다. 다만 AI의 안내도 틀릴 수 있어 과제 원문과 실제 실행 결과로 확인했습니다.

2. 어떤 AI를 어떻게 활용했나요?
ChatGPT에 과제 원문을 붙여 넣고 대화하며 진행했습니다. 대화방에서 확인된 활용 내용은 다음과 같습니다.
1) CVE 선정: 제가 먼저 고른 CVE-2026-31431이 어떤지 묻자, AI는 커널 취약점이라 Docker 컨테이너만으로 독립 재현이 어렵고 과제 조건에 불리하다며 비추천했습니다. 이후 제가 과제 저장소 안에서 골라 달라고 요청해 CVE-2022-34265(Django SQL Injection)로 정했습니다.
2) Docker 개념 질문: 이미지와 컨테이너, 내 PC의 작업 폴더와 컨테이너의 관계를 이유까지 천천히 설명해 달라고 요청했습니다.
3) 단계별 진행: Fork, clone, CVE 폴더 이동, docker-compose.yml 읽기까지 한 단계씩 안내를 받으며 직접 PowerShell에서 실행했고, 스크린샷을 찍을 시점도 물어 가며 진행했습니다.
4) 오류 진단: docker compose up 뒤 web 컨테이너가 종료되자 실행 결과와 로그를 붙여 넣었고, AI가 로그의 오류 문장을 근거로 Windows 줄바꿈(CRLF) 문제라고 진단했습니다.
5) PoC 확인: PowerShell에서 curl이 별칭이라 생긴 오류를 해결하고(curl.exe 사용), 브라우저와 curl.exe 두 방법으로 같은 결과를 확인했습니다.
6) 증빙·README: 찍은 스크린샷 중 어떤 것을 보고서에 쓸지 평가받고 01~04 번호로 정리했습니다.
7) Git·Pull Request: 브랜치 이름 변경, Author identity unknown 커밋 오류 해결, PR 제출 확인을 대화로 진행했습니다.
대화방에서 실제로 쓴 질문 예시: “이게 과제고 CVE-2026-31431로 해보려고 하는데 어때” / “저 저장소에 있는걸로 네가 골라줘” / “이제 뭐부터 하면 되는지 순서대로 천천히 그리고 왜 해야 하는지도 알려줘. 스크린샷도 찍어야 하니까 언제쯤 찍어야 하는지도 알려주고.”

3. 활용 결과 어떤 변화가 있었나요?
- 환경 구축: docker compose up 뒤 web 컨테이너가 Exited (1)로 종료됐습니다. 로그의 $'\r': command not found는 셸 스크립트의 CRLF 줄바꿈 때문이었고, docker-entrypoint.sh와 wait-for-it.sh를 LF로 바꾸고 .gitattributes(*.sh text eol=lf)를 추가하자 web과 db가 모두 실행되어 Django 4.0.5, PostgreSQL 13 환경이 올라왔습니다.
- 재현 결과: 정상 요청(?date=minute)에서는 JSON이 나왔고, ?date=xxxx%27xxxx 요청에서는 HTTP 500과 ProgrammingError가 발생했으며 입력한 작은따옴표가 SQL 쿼리에 그대로 들어간 것을 확인했습니다. curl.exe로도 같은 500 응답을 확인했습니다.
- 제출: 스크린샷 01~04.png와 README를 포함해 Pull Request #476을 올렸습니다(변경 파일 11개, .gitattributes 추가).
- PR 병합 여부와 과제 채점 결과는 아직 확인하지 못해 적지 않습니다.

4. 나만의 방식 또는 개선 포인트는 무엇인가요?
AI의 답을 그대로 받아들이지 않고 과제 원문, 내 환경의 로그와 대조해 틀린 점을 지적했습니다. 대화방에서 확인된 사례는 다음과 같습니다.
1) 과제 오해: AI가 ‘kr-vulhub에 없는 CVE를 추가’하는 것으로 해석하자, 제가 과제 원문을 다시 붙여 “그런 말 없는데?”라고 지적했고, AI가 자신이 잘못 해석했다고 인정하며 정정했습니다.
2) 과한 구성: AI가 Dockerfile과 requirements.txt를 새로 만들자고 하자, 제가 “그냥 기존 폴더에 있는 파일들 끌어 쓰면 되는 거 아니야? 왜 다 새로 만드냐”라고 물었고, AI가 재현성을 너무 엄격하게 잡았다며 기존 파일을 그대로 쓰도록 정정해 불필요한 파일을 지우게 했습니다.
3) README 작성자 이름: AI가 쓴 README 초안의 작성자 이름이 제 이름과 달라, 제가 이효관(@LH-GWAN) 형식이 맞는지 물어 확인했습니다.
기존 방식과의 관계: 환경 자체(Django CVE-2022-34265 Docker Compose 환경)는 과제 저장소 kr-vulhub가 제공한 것을 Fork해 쓴 것이고, 제가 한 일은 Windows에서 재현이 되도록 줄바꿈 문제를 잡고 실행 결과를 증빙으로 정리해 PR로 제출한 것입니다. AI에게 오류를 묻는 일반적인 학습 활용에 가깝기 때문에 최초라고 주장하지 않으며, 차별점은 AI의 오류를 기록하고 정정한 과정을 남긴 점입니다.

5. 다른 사람도 따라 할 수 있나요?
- 필요한 것: Docker Desktop이 설치된 PC, Git·GitHub 계정, 과제 저장소의 공개 실습 환경, 대화형 AI 1종. 별도 유료 결제는 필수가 아닙니다.
- 순서: 과제 원문을 AI에 붙여 넣고 조건에 맞는 CVE 묻기 → 저장소 Fork·clone → docker compose로 환경 실행 → 오류가 나면 로그를 그대로 붙여 넣어 원인 진단 받기 → 정상 요청과 PoC 요청 결과를 스크린샷으로 저장 → README 작성 → AI 설명이 과제 원문이나 내 환경과 다르면 지적해 정정 → PR 제출.
- 한계: AI의 안내도 틀릴 수 있어(이 사례에서도 과제 오해, 과한 구성이 있었습니다) 과제 원문과 실제 실행 결과로 확인해야 합니다. 한 가지 CVE 사례이므로 다른 보안 실습에서의 효과는 별도 검증이 필요합니다.

[윤리·책임성 및 출처]
- 안전·악용 방지: 실습은 내 PC의 로컬 Docker 환경(localhost:8000)에서만 했고 외부 서비스는 대상으로 삼지 않았습니다. 본문에는 작은따옴표로 오류를 확인한 범위만 쓰고 공격을 확장하는 방법은 싣지 않습니다. 대응 방안은 패치된 Django 버전으로 업데이트하는 것입니다.
- 개인정보 보호: 첨부하는 AI 대화 캡처에서 좌측 목록의 프로젝트·대화 이름, 이메일, 비밀번호는 가립니다. 타인의 정보는 사용하지 않습니다.
- 저작권·자료 활용: 취약 환경은 공개 저장소 gunh0/kr-vulhub(Vulhub 한글판)에서 제공된 것을 Fork해 썼습니다. 저장소와 원 프로젝트를 밝힙니다. 타인의 사례를 복제하지 않습니다.
- 정확성·편향: AI의 설명을 그대로 믿지 않고 과제 원문과 로그로 확인했고, 틀린 내용은 사실대로 기록했습니다.
- 책임: AI는 학습을 도운 도구이고, 환경 실행과 증빙 확보, PR 제출은 제가 직접 했습니다. 사람의 검토나 수업의 평가를 대체한다고 주장하지 않습니다.
- 참고 출처
1. kr-vulhub(Vulhub 한글판): https://github.com/gunh0/kr-vulhub
2. Django security releases: https://www.djangoproject.com/weblog/2022/jul/04/security-releases/
3. NVD CVE-2022-34265: https://nvd.nist.gov/vuln/detail/CVE-2022-34265
← 목록