JBU-CTF 소감
JBU-CTF에 참여하면서 웹, 포너블, 리버싱, 포렌식, 스테가노그래피 등 다양한 분야의 문제를 직접 풀이했습니다. 처음에는 문제마다 요구하는 지식과 접근 방식이 달라 막막하게 느껴졌지만, 하나씩 파일 구조와 실행 흐름을 분석하고 가설을 세워 검증하는 과정을 반복하면서 문제를 바라보는 시야가 넓어졌습니다.
웹 문제
웹 문제에서는 단순히 웹페이지의 기능을 사용하는 것을 넘어, 클라이언트 JavaScript와 API 요청을 분석하는 데 집중했습니다. i hate pickle 문제에서는 처음에는 이름처럼 pickle 역직렬화 취약점이 핵심이라고 생각했지만, 실제로는 서버 기술 스택과 OpenAPI 문서에 노출된 내부 라우트를 확인하는 것이 더 직접적인 해결 방법이었습니다.
처음 떠올린 공격 기법에만 집중하기보다, 서버가 제공하는 정보와 전체적인 공격 표면을 먼저 살펴보는 습관을 기를 수 있었습니다.
또한 SCP 게시판 문제에서는 JWT의 알고리즘 혼동 취약점과 FreeMarker SSTI를 단계적으로 이용했습니다. 공개된 JWK를 바탕으로 권한을 위조하고, 이후 게시글 미리보기 기능에서 템플릿이 실행되는 과정을 확인하면서 각각의 취약점이 독립적으로 존재하는 것이 아니라 하나의 공격 흐름으로 연결될 수 있다는 점을 배웠습니다. 프론트엔드에서 접근을 막고 있더라도 서버에서 권한 검증이 제대로 이루어지는지 확인해야 한다는 점도 직접 체감했습니다.
포너블
포너블 문제를 풀이하면서는 메모리 구조와 바이너리 보호 기법에 대한 이해를 많이 넓혔습니다. Line 2, SCP-804 문제에서는 스택 버퍼 오버플로를 기반으로 주소를 leak하고, stack pivot과 ROP 체인을 구성해 최종적으로 셸을 얻는 과정을 경험했습니다. JBUMON에서는 save/load 과정의 상태 관리 오류를 이용해 숨겨진 스킬을 활성화한 뒤, 정보 유출과 ret2libc를 연결했습니다.
피노키오 문제에서는 커스텀 allocator의 잘못된 coalesce 로직으로 인해 가짜 청크를 만들고 callback 포인터를 덮는 과정을 분석했습니다.
big chunk manager
big chunk manager 문제는 특히 기억에 남습니다. 단순한 힙 문제라고 생각했지만, mmap으로 할당되는 큰 청크들의 배치와 헤더 변조, tcache poisoning, GOT overwrite, format string leak을 차례대로 연결해야 했습니다.
이 문제를 해결하며 취약점 하나만 이해하는 것보다, 메모리 상태가 각 단계에서 어떻게 변화하는지 추적하고 전체 익스플로잇 흐름을 설계하는 능력이 중요하다는 것을 느꼈습니다.
원격 환경에서는 입력 방식과 libc 버전 차이로 인해 로컬에서 동작하던 코드가 실패하기도 했고, 이를 수정하는 과정에서 실제 환경을 고려한 검증과 디버깅의 중요성도 배웠습니다.
포렌식과 리버싱
포렌식과 리버싱 문제에서는 여러 형태의 단서를 조합하는 경험을 했습니다. 선물 문제에서는 APK를 디컴파일해 암호화와 데이터 추출 로직을 파악하고, 사진의 EXIF 정보, PNG의 LSB 데이터, WAV와 MP4에 숨겨진 FSK 신호를 각각 분석했습니다.
각각의 조각을 올바른 순서로 조합한 뒤 PBKDF2와 AES-GCM 복호화를 수행해야 했기 때문에, 단일 도구에 의존하기보다 파일 형식과 애플리케이션의 동작 원리를 함께 이해해야 했습니다. 이 과정에서 겉으로 보이는 문자열이 항상 정답은 아니며, 문제에 포함된 미끼와 실제 단서를 구분하는 분석력이 필요하다는 점을 배웠습니다.
이번 대회를 통해 배운 점
이번 CTF를 통해 가장 크게 성장한 부분은 문제를 대하는 방식입니다. 이전에는 정답에 빠르게 도달하는 것에 집중했다면, 이제는 먼저 주어진 파일과 서비스의 구조를 정리하고, 가능한 공격 지점을 좁힌 뒤, 각 가설을 작은 스크립트와 실험으로 검증하려고 합니다.
풀이 과정에서 작성한 분석 코드와 write-up을 정리하면서, 문제를 해결하는 능력뿐만 아니라 내가 어떤 근거로 결론에 도달했는지를 설명하는 능력도 중요하다는 것을 알게 되었습니다.
JBU-CTF는 다양한 보안 기술을 직접 적용해 보고, 부족한 부분을 구체적으로 확인할 수 있었던 경험이었습니다.
앞으로도 바이너리와 운영체제의 동작 원리, 웹 애플리케이션의 인증 및 템플릿 보안, 파일 포맷과 암호화 구조를 꾸준히 공부하며 단순히 문제를 푸는 사람을 넘어 취약점의 원인과 안전한 대응 방법까지 설명할 수 있는 보안 인재로 성장하고 싶습니다.