2019 Christmas CTF Platform

재작년 초에 만들어서 얼마 전 Christmas CTF까지 수정해서 잘 사용했던 CTF 플랫폼이다.
Apache2, PHP7, MariaDB(or MySQL) 조합으로 만들었으며 PHP는 Laravel 같은 타 프레임워크 안쓰고
예전에 만들어뒀던 MVC 프레임워크 사용해서 순수 PHP로 제작했다. 나머지는 아래 README.md 참고.
Github Repository : github.com/munsiwoo/christmas-ctf-platform

다이나믹 랭킹 구현 이슈

Christmas CTF 당시 랭킹 구현에서 이슈가 하나 있었는데, 지금은 쿼리 한방으로 구현하고 있지만
이전 구현 방식은 임시 테이블을 생성하고, PHP에서 팀당 점수를 계산한 뒤 일일이 다 INSERT 해주는 방식이었다.
오버헤드가 매우 컸고, 랭킹 페이지로 DDoS가 들어오면 답도 없는 상황이었는데 마침 운영 도중 실제로 들어왔다.

당시에 초당 들어오는 요청도 어마어마했지만 내 생각엔 랭킹 구현 방식도 서버 터지는데 한몫한 거 같다.
들어오는 패킷 분석해서 fail2ban, iptables로 다 차단 박고 랭킹 페이지를 로그인해야 볼 수 있는 방식으로
바꾸고 나서야 서버가 터지는 걸 방지할 수 있었다는 그런 이야기..

물론 지금은 구현 방식을 아예 바꿨다. → /src/classes/Render.class.php

앞으로의 방향

- 만약 취약점이 나온다면 빠르게 패치
(취약점 발견하시고 알려주시는 분께는 감사의 표시로 소정의 선물을 드리고 있습니다!)

- 구현 최적화, 구현 오류(로직 버그) 수정

- 추가 구현 (단순 희망 사항)
1. 파일 업로드 기능 추가
2. 지정해놓은 문제만 원하는 시간에 자동으로 오픈되는 기능
3. PHP 라우팅 엔진 직접 만들어서 적용

후기

개발자도 아닌 것이 설계부터 프론트, 백엔드까지 혼자 완성해낸게 기특하다.
다음엔 모던 스택 잔뜩 넣은 워게임 하나 만들어봐야겠다.

Timeline

2020.01.16 : github에 오픈소스로 공개
2020.01.20 : docker-compose 적용