AI가 판을 치는 시대에 CTF를 하는 일개 고등학생의 생각들
시작하기 전에
저는 2024년 말부터 포너블을 공부하기 시작했고, 2025년부터 여러 CTF에 본격적으로 참가했습니다. 지금도 고등학교 1학년 신분으로 CTF를 뛰고 있습니다.
거창하게 보안 업계의 미래를 분석하려고 쓰는 글은 아닙니다. 저는 실무 경험이 있는 보안 전문가도 아니고, 지금까지 쌓은 경험 대부분도 CTF 안에서 얻었습니다. AI가 빠르게 발전하던 시기에 CTF를 시작한 한 고등학생이 최근 CTF를 뛰면서 느낀 점 정도로 읽어주시면 좋겠습니다.
그리고 이 글은 CTF에서 AI를 쓰지 말자는 이야기도 아닙니다. 저부터 대회에서 AI를 아주 적극적으로 사용합니다. 오히려 너무 적극적으로 사용하고 있기에 이런 생각을 하게 되었습니다.
가장 결정적인 CTF에 대한 현타: CODEGATE 2026 Quals
저는 이번년도 3월달에 진행된 CODEGATE 2026 Quals Junior에 참가해 본선 진출이 가능한 순위권까지 올라갔고, 실제로 본선현장까지 다녀왔습니다. 결과만 보면 기뻐해야 맞았습니다. 대회 중에도 문제가 풀리고 순위가 오를 때마다 당연히 좋았습니다.
그런데 대회가 끝난 뒤에는 성취감보다 허무함이 더 크게 남았습니다.
제가 대회 내내 한 일을 돌이켜보니 거의 이 다섯 줄을 채우는 일이었습니다.
문제 제목:
문제 설명:
접속 정보:
플래그 형식:
첨부 파일:
미리 만들어둔 Codex용 프롬프트에 위 내용을 넣고 파일을 올렸습니다. 한 문제가 끝나면 다음 문제에서도 똑같이 했습니다. Codex가 파일을 열고 분석 도구를 실행하고, 코드를 짜고, 실패하면 고치고, 마지막에는 원격 서버에서 플래그까지 가져왔습니다. 저는 중간에 추가정보를 넣고 나온 플래그를 제출했습니다.
이 대회에서 제가 해결한 문제는 사실상 거의 전부 이런 식이었습니다. 대회 중에는 플래그가 나오는 것만 보고 좋아했는데, 끝나고 나니 한 가지 질문이 계속 남았습니다.
그럼 이 문제는 누가 푼 걸까요?
제 계정으로 제출했고 제 팀 점수로 들어갔으니 기록상으로는 제가 푼 문제가 맞습니다. 하지만 누군가 저에게 그 문제의 핵심 아이디어가 무엇이었는지, 취약점이 왜 생겼는지, 풀이 코드가 어떤 원리로 동작하는지 묻는다면 제대로 답하기 어려운 문제가 많았습니다.
그 상태에서 정말 제가 풀었다고 말해도 되는지는 잘 모르겠습니다. 제가 그동안 해오던 CTF와는 확실히 달랐습니다.
포너블을 몰라도 포너블을 푸는 시대
저는 포너블을 주 분야로 공부해왔습니다.
처음에는 checksec 결과가 무엇을 뜻하는지도 몰랐습니다. 프로그램이 왜 죽었는지 확인하려고 GDB를 켰다가, 레지스터와 스택 화면만 한참 쳐다본 적도 많았습니다. 문제 하나를 풀려면 ELF 구조, 메모리 보호 기법, 어셈블리, glibc 구조 같은 것을 그때그때 공부해야 했습니다.
그런데 codegate 예선에서는 포너블이 주 분야가 아니거나, 포너블을 거의 해보지 않은 참가자도 AI를 이용해 포너블 문제를 해결하는 모습을 볼 수 있었습니다.
그 결과를 깎아내리려는 뜻은 전혀 없습니다. 저도 똑같이 AI를 사용했고, 대회에서 허용된 도구를 최대한 활용하는 것은 당연한 전략이라고 생각합니다.
그래도 포너블을 공부하며 오랫동안 삽질했던 입장에서는 솔직히 현타가 왔습니다. 예전에는 특정 분야의 문제를 풀려면 최소한 그 분야의 기본 지식은 있어야 했습니다. 지금은 분야를 거의 몰라도 AI 에이전트에게 파일을 넘기고, 나온 코드를 실행하는 것만으로 플래그가 뜨는 경우가 생겼습니다.
전문성이 쓸모없어진 것은 아닙니다. 다만 전문성이 필요한 순간이 예전보다 훨씬 뒤로 밀렸습니다. 쉬운 문제나 중간 난도의 문제는 지식이 부족해도 AI가 상당 부분을 넘겨주고, 정말 어려운 지점에 도착한 뒤에야 사람의 실력이 드러나는 식입니다.
플래그와 해킹공부의 관계
제가 CTF를 좋아했던 가장 큰 이유 중 하나는 플래그를 얻고 싶은 욕심이 자연스럽게 공부로 이어진다는 점이었습니다.
문제를 풀고 싶은데 아는 것이 없으면 공부해야 했습니다. 공부한 내용을 써서 문제를 풀고, 더 어려운 문제에 막히면 또 새로운 것을 배웠습니다. 그렇게 반복하다 보면 실력이 조금씩 늘었습니다.
저 역시 처음부터 포너블 자체가 너무 좋아서 공부한 것은 아닙니다. 플래그가 떴을 때 기분이 좋았고, 그 기분을 다시 느끼고 싶어서 다음 문제를 잡았습니다. 그런데 플래그를 얻으려면 취약점을 알아야 했고, 디버거도 쓸 줄 알아야 했고, 메모리가 어떻게 동작하는지도 이해해야 했습니다.
저에게 플래그는 공부를 계속하게 만드는 미끼 같은 것이었습니다.
지금은 AI가 그 사이의 가장 힘든 부분을 건너뛰게 해줍니다. 문제를 완전히 이해하지 못해도 플래그를 얻을 수 있고, 취약점 원리를 몰라도 에이전트가 익스플로잇을 작성합니다. 코드가 실패하면 에러 로그를 다시 넣고 계속 돌리면 됩니다.
예전에는 모르면 멈췄고, 멈추면 공부해야 했습니다. 이제는 모르는 상태로도 다음 단계로 넘어갈 수 있습니다.
플래그가 주는 도파민은 그대로인데, 그 도파민을 얻기 위해 거쳐야 했던 공부 과정은 선택 사항이 되어버린 것입니다. 예전에는 더 잘 풀고 싶어서 새로운 기술을 찾았다면, 이제는 더 좋은 모델이나 더 많은 에이전트를 먼저 찾게 될 수도 있습니다.
플래그를 얻기 쉬워졌다는 것 자체가 나쁘다는 뜻은 아닙니다. 다만 플래그 수가 예전만큼 실력의 증가량을 보여주지는 않게 되었다고 느낍니다.
이제 스코어보드는 무엇을 나타낼까요?
원래도 CTF 성적과 실제 보안 실력이 완전히 같은 것은 아니었습니다. 정해진 환경의 문제를 빨리 푸는 능력과 실제 서비스에서 취약점을 찾고 안전한 시스템을 만드는 능력은 분명 다릅니다.
그래도 예전에는 높은 순위를 얻으려면 여러 분야의 지식이 필요했고, 적어도 팀 안의 누군가는 해당 문제를 제대로 이해하고 있어야 했습니다. 그래서 CTF 성적과 보안 지식 사이에 꽤 강한 관계가 있다고 생각했습니다.
지금의 성적에는 다른 요소도 많이 섞입니다. 어떤 모델을 쓰는지, 사용량 제한이 얼마나 남았는지, 에이전트를 몇 개까지 동시에 돌릴 수 있는지, 실패한 세션의 결과를 다음 세션에 어떻게 넘기는지, 문제별 컨텍스트를 어떻게 관리하는지가 실제 점수에 영향을 줍니다.
이제 “CTF를 잘한다”는 말도 여러 뜻을 가질 수 있습니다. 보안 지식이 깊어서 잘 풀 수도 있고, AI를 잘 다뤄서 잘 풀 수도 있습니다. 여러 에이전트를 자동으로 분배하고 관리하는 시스템을 잘 만든 사람일 수도 있습니다.
이 중 어느 능력이 가치 없다는 말은 아닙니다. 다만 스코어보드에 찍힌 숫자가 이전과는 조금 다른 능력까지 함께 측정하기 시작했다는 뜻입니다.
제가 체감하기로 2025년까지만 해도 AI는 보조 도구에 가까웠습니다. 분석 방향을 물어보거나 코드 초안을 받는 데에는 유용했지만, 없는 취약점을 있다고 우기거나 실행되지 않는 코드를 자신 있게 내놓는 경우도 많았습니다. 결국 마지막에는 사람이 직접 분석하고 고쳐야 했습니다.
2026년에 들어서는 분위기가 달라졌습니다. AI 에이전트가 직접 파일을 열고, 필요한 도구를 실행하고, 코드를 수정하고, 결과까지 검증합니다. 사람은 모든 분석 과정을 직접 수행하기보다 문제와 목표를 던져준 뒤 중간중간 방향을 조정하는 역할을 맡기도 합니다.
그래서 예전의 CTF 실력 ≈ 보안 실력이라는 생각은 앞으로 점점 설명하기 어려워질 것 같습니다.
새로운 참가 준비물: 비싼 AI 플랜
비용 이야기도 빼기 어렵습니다.
예전에는 CTF를 시작할 때 컴퓨터와 Linux 환경 정도만 있으면 됐습니다. GDB, pwntools, Ghidra, IDA Free처럼 자주 쓰는 도구도 대부분 무료였습니다. 학생이라도 컴퓨터와 공부할 의지만 있다면 비교적 적은 비용으로 시작할 수 있었습니다.
지금은 상위권 경쟁을 생각할 때 좋은 AI 모델과 넉넉한 사용량도 사실상 준비물에 들어갑니다.
ChatGPT Pro에는 월 100달러의 5x 플랜과 월 200달러의 20x 플랜이 있습니다. 200달러는 환율과 세금까지 생각하면 국내 결제액이 30만 원 안팎이 될 수 있습니다. 학생이 CTF를 하기 위해 매달 내기에는 절대 가벼운 돈이 아닙니다.
무료 모델이나 더 저렴한 플랜으로도 문제를 풀 수는 있습니다. 하지만 제한된 시간 안에 경쟁하는 대회에서는 모델 성능과 사용량 제한이 생각보다 직접적으로 작용합니다. 사용량이 넉넉하면 한 세션이 틀린 방향으로 갔을 때 미련 없이 새 세션을 열 수 있습니다. 여러 문제에 에이전트를 동시에 붙이거나, 같은 문제를 서로 다른 가설로 병렬 분석할 수도 있습니다.
다른 회사의 서비스나 API 크레딧까지 같이 사용하면 비용은 더 커집니다.
물론 돈을 많이 쓴다고 어려운 문제가 자동으로 풀리지는 않습니다. 그래도 시도 횟수가 늘어나는 것 자체가 큰 장점입니다. 한쪽은 사용량을 아끼느라 에이전트 하나를 조심스럽게 돌리는데, 다른 쪽은 강한 모델 여러 개를 동시에 실행하고 실패한 세션을 계속 갈아치울 수 있다면 결과에 차이가 생길 수밖에 없습니다.
그래서 요즘 CTF가 가끔은 꽤 노골적인 pay-to-win처럼 느껴집니다. 정확히는 정답을 돈으로 사는 것보다는, 정답에 도달할 기회를 더 많이 사는 pay-to-try-more에 가깝습니다.
다만 비싼 모델을 많이 돌리는 것만으로는 부족합니다. 돈은 시도 횟수를 늘려주지만, 그 시도 중 무엇을 살리고 무엇을 버릴지는 아직 사람이 결정해야 합니다.
같은 AI를 써도 결과가 다른 이유
모두가 비슷하게 좋은 모델을 사용한다고 해서 결과까지 같아지지는 않습니다. 같은 문제 파일을 같은 모델에 넣어도 누군가는 플래그를 얻고, 누군가는 대회가 끝날 때까지 잘못된 방향만 반복합니다.
저도 예전에는 그 차이가 거의 프롬프트에서 나온다고 생각했습니다. 역할을 길게 지정하고, 분석 단계를 나누고, 출력 형식을 정하고, CTF용 프롬프트를 계속 고쳤습니다.
그런데 최근 모델은 기본 성능이 많이 좋아졌습니다. 복잡한 기법을 넣지 않고 “이 문제를 분석해서 플래그를 얻어주세요”라고만 해도 꽤 많은 일을 알아서 처리합니다. 그래서 요즘은 프롬프트 문장 자체보다, 에이전트가 틀렸을 때 그것을 알아차리는 능력이 더 중요하다고 느낍니다.
아무리 좋은 모델도 어려운 문제에서는 틀린 가설을 세웁니다. 한 번 틀리는 것보다 더 큰 문제는, 그 가설을 전제로 다음 분석을 계속 쌓는다는 점입니다. 세션이 오래 이어질수록 처음의 잘못된 추측이 사실처럼 굳어질 때가 있습니다.
실제로 존재하지 않는 취약점을 발견했다고 단정한 뒤 익스플로잇 코드만 계속 고치거나, 도달할 수 없는 코드 경로를 핵심이라고 판단하기도 합니다. 아직 주소 릭을 얻지 못했는데 이미 릭이 있다고 가정한 채 다음 공격 단계를 작성할 때도 있습니다. 실행 결과가 가설과 맞지 않아도 가설부터 의심하지 않고 주변 코드만 수정하는 경우도 자주 봤습니다.
이럴 때 사용자가 그냥 결과를 기다리기만 하면 세션 전체가 망가질 수 있습니다. 디버깅 결과가 가설과 모순되지 않는지, 공격에 필요한 전제 조건이 실제로 충족됐는지, 취약점이라고 주장한 부분에 코드상 근거가 있는지를 확인해야 합니다.
가설이 틀렸다면 방향을 확실히 끊어주는 능력이 필요합니다.
잘못된 가설이 컨텍스트 전체에 너무 깊게 들어갔다면 세션을 버리고 새로 시작하는 편이 나을 때도 있습니다. 기존 대화를 계속 이어가면 모델이 앞에서 한 주장을 정당화하려고 같은 방향을 반복하는 경우가 있기 때문입니다.
결국 에이전트를 많이 띄우는 것보다 중요한 것은 각 세션이 어디까지 검증된 가설을 따라가고 있는지 판단하는 일입니다. 어떤 로그와 파일을 먼저 줄지, 분석 결과 중 무엇을 사실로 볼지, 언제 가설을 버릴지, 세션을 계속 살릴지 끊을지를 사람이 결정해야 합니다.
이 판단은 프롬프트 요령만으로 생기지 않습니다. 해당 분야를 알아야 로그에서 이상한 점을 찾을 수 있고, AI가 세운 가설이 기술적으로 말이 안 된다는 것도 알아차릴 수 있습니다.
쉬운 문제에서는 파일과 에러 로그를 계속 넣는 이른바 slopping만으로도 플래그가 뜰 수 있습니다. 하지만 어려운 문제에서는 AI가 틀린 방향으로 달릴 때 멈춰 세우고, 다른 가설로 옮기는 능력이 필요합니다.
보안 지식이 없어도 AI에게 질문은 할 수 있습니다. 그러나 AI가 틀렸다는 사실을 알아차리고 다음 방향까지 제시하려면 결국 보안 지식이 필요합니다.
팀에서 각자의 주분야가 가지던 의미
예전에는 CTF 팀을 꾸릴 때 각자의 주 분야가 중요했습니다. 웹, 포너블, 리버싱, 크립토등 각각 분야를 잘하는 사람을 모으고, 대회가 시작되면 각자 자기 분야의 문제를 맡았습니다.
지금은 한 사람이 여러 분야의 에이전트를 동시에 돌릴 수 있습니다. 포너블을 모르는 사람이 포너블 에이전트를 띄울 수 있고, 웹을 잘 모르는 사람이 웹 문제를 맡길 수도 있습니다. AI가 웹 해커, 포너, 리버서 등 다양한 역할을 해주는 셈입니다.
분야가 완전히 사라진 것은 아닙니다. 쉬운 문제와 중간 난도까지는 경계가 많이 흐려졌지만, 어려운 문제의 마지막 벽에서는 여전히 그 분야를 오래 공부한 사람의 판단이 중요합니다.
여기서 특히 고민되는 부분은 청소년부입니다.
청소년 참가자는 대부분 아직 지식을 쌓아가는 중입니다. 분야별 경험이 충분하지 않은 상태에서 이미 많은 자료와 도구 사용법을 알고 있는 AI와 경쟁하면, 팀에서 가장 문제를 잘 푸는 존재가 사람이 아니라 AI가 되기 쉽습니다.
대회를 통해 사람이 성장해야 하는데, 정작 사람은 문제 정보를 옮기고 AI가 핵심 풀이를 담당하는 상황이 생길 수 있습니다. 저도 요즘 많은 ctf를 나가면서 그 모습을 직접 겪고있습니다.
이제 CTF 문제들은 누가 출제할까요?
입문자들이 처음부터 모든 문제를 AI로만 풀기 시작하면 장기적으로는 다른 문제도 생길 수 있다고 생각합니다.
앞으로 좋은 CTF 문제는 누가 만들게 될까요?
기존에는 CTF를 하며 실력을 키운 사람이 더 어려운 문제에 도전하고, 나중에는 자기 아이디어로 문제를 출제하는 흐름이 있었습니다. 수많은 문제를 직접 풀다 보면 어느 부분이 재미있는지, 참가자가 어디에서 막히는지, 어떤 풀이가 의도하지 않은 풀이인지에 대한 감각이 생깁니다.
출제자도 AI를 사용하면 됩니다. 문제 코드나 Docker 환경을 만드는 수고는 오히려 줄어들 수 있습니다. 하지만 좋은 문제는 코드만 생성한다고 나오는 것이 아닙니다.
새로운 취약점 아이디어를 떠올리고, 의도한 풀이를 설계하고, 난도를 조절하고, 예상하지 못한 우회 풀이를 막는 일은 별개의 문제입니다. 무엇보다 참가자가 풀었을 때 “재미있었다”는 느낌을 받게 만드는 감각이 필요합니다.
그 감각은 직접 문제를 풀고, 오래 막히고, 실패하고, 다른 사람의 라이트업을 읽는 과정에서 생긴다고 생각합니다. 입문자들이 플래그만 받아서 제출하고 곧바로 다음 문제로 넘어가는 데 익숙해진다면, 다음 세대의 출제자가 자라는 과정도 약해질 수 있습니다.
AI가 당장의 문제는 풀어주지만, 나중에 새로운 문제를 만들 사람의 성장 기회까지 줄일 수 있다는 점은 조금 걱정됩니다.
AI를 쓰지 말자는 이야기는 아닙니다
그렇다고 CTF에서 AI를 금지해야 한다거나, AI를 사용하지 않는 사람이 더 올바르다고 말하고 싶지는 않습니다.
AI는 이미 개발과 보안 업무에서 중요한 도구가 되었고, 앞으로는 AI를 잘 사용하는 능력도 분명 실력의 일부가 될 것입니다. CTF 역시 예외는 아니라고 생각합니다.
다만 AI + Human에서 사람의 역할이 실행 버튼을 누르는 데서 끝나서는 안 됩니다. 사람은 문제를 정의하고, 분석 방향을 정하고, AI가 세운 가설을 검증하고, 잘못된 결과에 책임질 수 있어야 합니다.
CTF에서는 코드가 우연히 동작해 플래그만 나오면 일단 성공입니다. 실무에는 그렇게 명확한 정답이 없을것이라고 생각합니다. 발견한 현상이 정말 취약점인지, 재현 가능한지, 영향은 어느 정도인지, 실제 환경에서 악용 가능한지를 판단해야 합니다.
AI의 잘못된 분석을 그대로 믿으면 다른 사람의 시간을 낭비할 수도 있고, 실제 시스템에 문제를 만들 수도 있습니다. CTF에서는 분야 지식 없이 slopping만 해도 좋은 점수를 얻을 때가 있지만, 실무에서는 어느 정도 내용을 이해한 상태에서 AI를 사용해야 할 가능성이 큽니다.
AI를 많이 사용하는 능력과 AI의 출력에 책임질 수 있는 능력은 서로 다릅니다.
대회 모드와 공부 모드를 나눠야 합니다
저도 아직 이 문장에 대해 정답을 안다고 생각하지는 않습니다. 그래도 대회 모드와 학습 모드는 구분할 필요가 있다고 느꼈습니다.
대회에서는 사용할 수 있는 도구를 최대한 써도 됩니다. 좋은 모델을 사용하고, 여러 에이전트를 병렬로 돌리고, 문제를 자동으로 분배하고, 실패한 분석을 다른 에이전트에 넘기는 시스템을 만드는 것도 이제 CTF 실력의 일부입니다. 저도 앞으로 그렇게 할 것입니다.
하지만 공부할 때 마저 같은 방식으로 플래그만 받고 넘어가면 결국 남는 것은 점수뿐입니다.
AI가 문제를 풀었다면 대회가 끝난 뒤에는 적어도 취약점이 무엇이었는지 제 말로 설명해볼 필요가 있습니다. 에이전트가 작성한 풀이 코드의 핵심 부분을 직접 다시 써보고, 대화 기록을 보지 않은 상태에서 풀이를 재현해보는 것도 도움이 될 것 같습니다.
제가 많은 ctf들을 나가며 가장 크게 느끼고 있는 부분도 이것이었습니다. 높은 순위를 하는것은 기쁜 일입니다. 하지만 그때 푼 문제들을 제가 제대로 설명하지 못한다면, 그 순위가 제 실력을 그대로 보여준다고 말하기는 어려웠습니다.
AI가 없던 때에는 문제에 막히는 과정이 강제로 공부를 시켰습니다. 이제는 그런 불편함을 스스로 만들어야 할지도 모릅니다.
AI를 쓰지 않는다고 무조건 실력이 좋은 것은 아닙니다. 반대로 AI가 내놓은 답을 이해하지도, 검증하지도 못하면서 제출만 하는 것 역시 실력이라고 하기는 어렵습니다.
마치며
AI가 CTF를 망쳤다고 단순하게 결론 내리고 싶지는 않습니다.
AI 덕분에 예전에는 시작조차 어려웠던 문제를 분석해볼 수 있고, 자기 주 분야가 아닌 문제에도 손을 댈 수 있게 되었습니다. 반복 작업을 줄이고 더 어려운 아이디어에 집중할 수도 있습니다. 저 역시 이런 장점을 많이 누리고 있습니다.
반대로 지식의 장벽이 낮아진 자리에는 비용이라는 새로운 장벽이 생겼습니다. CTF 성적이 무엇을 의미하는지도 전보다 복잡해졌습니다.
저는 앞으로도 ctf에서 AI를 사용할 것입니다. 더 좋은 모델이 나오면 써볼 것이고, 에이전트를 효율적으로 관리하는 방법도 계속 공부할 생각입니다.
대신 플래그가 나온 뒤에는 스스로에게 다음 질문 정도는 해보려고 합니다.
나는 이 문제의 취약점을 설명할 수 있을까?
AI와의 대화 없이도 핵심 과정을 다시 재현할 수 있을까?
이 풀이에서 내가 직접 제공한 판단이나 아이디어는 무엇이었을까?
플래그를 얻은 것과 그 문제를 제 것으로 만든 것은 다릅니다.
예전에는 플래그를 향한 욕심이 자연스럽게 해킹 공부로 이어졌습니다. 지금은 AI가 그 중간 과정을 건너뛰게 해줍니다. 그래서 앞으로 더 중요한 것은 AI를 쓰느냐 마느냐가 아니라, AI를 쓰고 난 뒤 무엇을 제 것으로 남기느냐라고 생각합니다.