포스트

제 9회 소프트웨어 개발보안 시큐어코딩 해커톤 리뷰

소프트웨어 개발보안 경진대회에서 수상한 과정들을 간단하게 담았습니다.
다음은 대회 포스터입니다.

[1] 준비

이유는 모르겠지만 최근에 너무 심심했다.
잔디 자랑 할 만큼의 커밋은 아니지만.. 그렇다고 개발을 소홀히 한것은 아님..

이런 와중에 대학 동기가 다음 과 같은 공고를 보내줬다.
공고

나는 해당 공고를 보자마자 “아 심심했는데 잘됐다. 재밌겠는데??” 하며 팀원을 구하기 시작했다.

평소에 연락도 잘 안하던 다른 대학교 친구들한테도 직접 연락을 돌려가며
결국 나 포함 4명이라는 팀 구성을 끝냈다.

이름소속
문성훈순천향대학교
홍지민순천향대학교
최지헌아주대학교
이예진아주대학교

대회 일정표 이후 팀원 전원이 노션을 통해 대회 정보를 공유해가며 해커톤 개발 기획서를 작성했다.
아래는 우리가 작성한 해커톤 개발 기획서의 일부이다.
해커톤 개발 기획서의 일부 또한 프로젝트의 와이어프레임은 문성훈과 홍지민이 피그마를 통해 구성했다. 피그마 캡쳐본

[2] 대회 접수

접수시 Java언어 혹은 Python 둘 중 하나를 고를 수 있다.
여기서 고른 언어로 예선과 본선이 치뤄진다.

우리팀은 Java를 한참 하고있었기 때문에, Java를 택했다.

[3] 예선

[1] 예선 준비

예선은 온라인을 통해 진행되며, 오지 선다형이며 여러가지 문제가 있었다.
vulnerable한 코드를 접수시 선택한 언어로 제공 받으면, 이를 non-vulnerable한 코드로 패치하는 문제들이다.
vulunerable한 코드는 행정안전부에서 만든 소프트웨어 개발 보안 가이드 범위에서 출제되었다.
행정안전부 제공 소프트웨어 개발 보안 가이드

[2] 예선 당일

예선 당일 사진 아무래도 충남권 학생과 경기권 학생이 팀으로 이뤄져있어 온라인 대회를 치루려면 스터디 카페를 빌려야 했다. 그래서 수원에 랭스터디카페 아주대점 에 스터디룸을 빌려 온라인 대회를 진행했다.

[3] 예선 결과

예선 결과 다들 사전에 정해둔 예선 전략(각자 풀어야할 문제들의 범위를 정해둔다던지 등)을 잘 따라주어서 원할하게 예선을 치룰 수 있었다.
그래서 중상위권으로 본선을 진출 할 수 있었다.

[4] 본선

[1] 과정

본선은 예선과 달리 오프라인(힐튼 서울)에서 진행되었다.

명찰과 제공받은 티셔츠를 입고 찍은 사진

우리팀의 자리우리팀의 자리 사진

웰컴 키트 사진 주최측에서 제공받은 웰컴 키트

시작전 우리는 과업을 다음과 같이 나누었다.

이름과업
문성훈풀스택 개발, 현장미션 개발 구현, 발표자료 만들기
홍지민프론트앤드 개발, 발표자료 만들기
최지헌백엔드 개발, 현장미션 개발 구현
이예진발표자료 만들기, 발표

현장에서 주어진 과제는 다음과 같았다. 요구사항을 정리하면,

  • 알람기능
    • SNS를 사용하고, SMS는 사용하지 말 것
  • 이메일 전송기능
    • 개발하는 프로젝트 내에서 이메일 alert기능을 개발할 것

개발 시간이 빡빡하여 알람기능은 가장 간단한 http request로 가능한 telegram을 사용하기로 하였고, 이메일은 gmail smtp를 사용하기로 하였다.

telegram bot을 이용한 알람기능 시연 사진

gmail을 이용한 PT 일정 공유 기능 시연 사진

이렇게 모든 기능을 구현하였고
파수닷컴의 정적 분석 도구인 스패로우(SPARROW)를 통하여 소스코드의 잠재적 취약점을 확인하고 개선하는 작업을 거쳤다.

Pasted%20Image%2020230107183631.png 낮음 항목이 수백개가 잡히는 것으로 나와있는데,
거의 대부분 코드 컨벤션 관련된 항목들이라 수정하지 않았다. (해커톤 특징상 선택과 집중은 필수이기에…)

벌크업팀 프로젝트 발표 장면Pasted%20Image%2020230107183952.png

Pasted%20Image%2020230107192836.png 최종적으로 제출을 완료하였고, 발표를 마지막으로 대회가 끝이났다.

Pasted%20Image%2020230107192741.png 대회가 끝나고 테라스에서 먹은 석식이 진짜 맛있었다. Pasted%20Image%2020230107192851.png

[2] 프로젝트 요약

  1. 회원가입
    1. 일반회원
      일반 회원 가입
    2. 트레이너
      Pasted%20Image%2020230107184301.png
  2. PT 크루
    1. 검색
      Pasted%20Image%2020230107184356.png
    2. 생성
      Pasted%20Image%2020230107184428.png
  3. 트레이너
    1. 검색
      Pasted%20Image%2020230107184456.png
    2. 후기 작성
  4. 마이페이지
    1. 조회
      Pasted%20Image%2020230107184930.png
    2. 회원정보 수정
      Pasted%20Image%2020230107184952.png
  5. 커뮤니티
    1. 조회
      Pasted%20Image%2020230107184740.png
    2. 작성
      Pasted%20Image%2020230107184759.png
  6. 일정관리
    1. 생성
    2. 조회

[3] 대회 결과

Pasted%20Image%2020230107185722.png 성인이 되고나서 처음나가는 대회라 많이 떨렸다.
그럼에도 좋은 성과를 얻어내고자 대회 기간동안 수없이 고민하고 고민했다.

Pasted%20Image%2020230107193107.png 결국 장려상을 받게되었다. 많이 아쉽긴하지만 이 기간동안 내가 얻은 경험들은 장려상 그 이상의 값어치이다.

  • 타이트한 일정속에서도 최대한 좋은 결과물을 만들 수 있는 방법
    • 요구사항을 최대한 명확히 정의하고, 탑다운 방식을 기용한다.
    • 시간이 임박할 수록 커뮤니케이션을 짧고 굵게 자주한다(개발 예상 시간을 공유 등).
    • 혹여나 내가 제시한 예상 시간이 늦다고 판단되면, 과감하고 빠르게 요구사항을 재정의한다.
    • 단일 브랜치 작업(Trunk-based Development)이 때론 좋구나.
  • 쪼아대는 팀원들에게도 침착, 긍정적으로 말하기
    1. 일부 팀원들이 본인의 과업을 수행하지 못하여 어쩌다가 내가 땜빵하게 되었다.
    2. 땜빵 도중 발표 자료를 만들던 인원 일부가 나를 향해 상당히 쪼아대었다.
    3. 그런 와중에도 긍정적으로 소통 하여 프로젝트 완료에 차질이 생기지 않게 팀을 컨트롤 하였다.
  • 대체 인력이 투입 가능하겠끔 각 과업들의 마지노선을 대략 생각하고 이를 예의주시 하자
    • 모든 팀원들이 잘 한다고 해도 때론 일이 틀어질 수 있다. 그런 상황에서 리스크를 최소화 하기 위해 해당 부분을 예의주시 하자.

Pasted%20Image%2020230107193122.png

다음에는 한단계 진화한 문성훈으로 대회를 나가서 더 좋은 성과를 내봐야겠다 !

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

Comments powered by Disqus.