일상

SW 개발보안 경진대회(소개딩) 2020 참가 후기

융서융서 2021. 4. 25. 18:55

작년 여름에 소프트웨어 개발보안 경진대회(소개딩)에 참여해서 최우수상을 수상했다.

첫 해커톤이고 경험도 없던 때라 지원 때부터 기대도 안 하고 나가본 대회였는데, 우당탕탕 결과물도 올려보고 생각지도 못한 상까지 받아 서 정말 뜻깊은 경험이었다. 지원할 때 '보안 약점이 제거된 소프트웨어를 만드는 대회'라는 것 외에 아무런 정보가 없어서 시작하기 어려웠었는데 어떻게 준비하고 수상했는지 참가기를 기록해보려고 한다.

 

 

1. 예선 지원서 작성

사이버보안전공이지만 막 2학년 1학기를 마쳤던 우리 팀은 아무도 웹/서버 개발을 해본 적도 없던 상태였다. 전공 수업에서 보안개론을 배우긴 했지만 서비스 개발이나 보안에 대해서 아는 게 많이 없었어서 지원서를 쓰는 동시에 공부를 많이 했다. 
참가할 때부터 수상이 아니라 본선 진출이 목표다! 하는 마음으로 예선 지원서를 엄청 간절히 열심히 작성했다. 

각자 항목 하나씩을 맡아서 쓰고 피드백하고 하면서 총 20장 정도 썼던 것 같다. 

 

지원서 항목은 아래와 같았다. 

1. 소프트웨어의 목적

2. 주요 기능

3. 보안 요소

4. 대회 참가 목적

 

 

우리는 지원서 항목 중에서도 특히 3. 보안 요소 항목에 집중했다.
지난 대회 수상작을 봤을 때 '보안을 얼마나 고려했느냐'가 많이 중요한 대회인 것 같았다.

그래서 우리는 지원서에 블랙리스트 필터링, 입력값 암호화, 웹 XSS 공격, CSRF 토큰, SQL Injection, 해시함수, 난독화 등등 여러가지 보안 요소를 집어넣었고, 대회 중에도 예선 지원서를 보면서 이들을 서비스에 구현하려고 노력했다.

 

그리고 예선에 통과했다!!

 

우리는 ECB 😎

 

2. 대회 전 준비

 

작년에는 이 대회가 호텔 컨퍼런스룸에서 진행되고 대회 기간동안 참여자들에게 식사도 호화롭게 제공해줬다는 얘길 들어서 우리는 기대를 많이 하고 있었다. 그런데 사회적 거리두기 2단계 격상으로 대회 하루 전 날 급하게 온라인으로 대회가 변경됐다.. ㅠㅠㅠ...

의욕이 많이 떨어졌었지만 기왕 붙은 거 우리끼리 나가는 첫 해커톤인데 열심히 해보자~! 하면서 대회 준비를 시작했다. 

 

대회 전에는 본격적인 개발 빼고 우리가 할 수 있는 공부, RnR 나누기와 미리 구해둘 수 있는 데이터를 얻는 작업을 했다.

우리 팀 주제는 '가로등, 경찰서 위치 등 길거리 안전 요소가 있는 길을 안내하는 안심 귀가 지도 서비스' (밝은 길 안내 서비스) 였다. Python, Django를 이용해서 웹에 지도를 구현하고, 웹서비스 이용 중에 해킹이 발생하지 않도록 보안 취약점을 예방하여 서비스를 만드는 게 목적이었다. 

 

우리는 먼저 다같이 장고걸스 튜토리얼을 보고 웹개발 스터디를 했다. 그리고 대회에 가서 시간 분배를 잘 할 수 있도록 각자 개발할 파트를 나눠두고, 그 부분에 대해서는 각자 공부를 조금씩 더 했다.
나는 SQLite3 데이터베이스에 데이터를 넣고 조건에 맞게 SELECT 해오는 부분이랑, 웹사이트 뷰를 개발하는 걸 맡아서 남는 시간에 DB랑 프론트엔드에 대한 공부를 조금씩 더 했다. 한 팀원은 지도에 가로등 위치를 표시하기 위해 라이브러리를 알아봤고, 한 명은 길찾기 API 를 사용하기 위해 네이버지도, 카카오맵 API를 사용하는 법을 조사하고. 다들 처음이었지만 파트를 잘 나누고 맡은 부분을 잘 조사해왔던 게 짧은 대회 기간동안 많이 도움이 됐던 것 같다.

보안 부분은 대회 측에서 제공해준 시큐어코딩 가이드를 읽으면서 준비했다. 대회 일주일 전에 KISA에서 진행한 온라인 사전 교육도 보안 공부하는 데 도움이 되었던 것 같다.

 

그리고 가로등, 경찰서 위치 좌표가 있는 데이터를 미리 얻어두는 일도 미리 했다. 서대문구청에 전화해서 공공데이터를 받을 수 있는지 물어봤더니 어디서 얻을 수 있는지 알려주셔서 공공데이터를 얻어둘 수 있었다!

P.S. 의도한 건 아니었지만 이런 대회들에선 공공데이터를 쓰는 걸 좋아하는 것 같다. 어디서 얻어왔는지 모르는 데이터가 아니라 국가에서 인증하는 공공데이터를 써서 서비스를 구현했다고 하면 가산점이 있을지도..? (이 대회에서는 있었다)

 

3. 대회 시작

무박 3일 개발 시작-!
팀원 한 명 집에 가서 3일동안 다같이 먹고자고 하면서 개발했다.

 

 

대회 전에 나눠둔 역할(?)대로 프론트 개발, DB에서 데이터 받아오는 API 짜기, 외부 API 가져와서 쓰기, 지도 구현 등을 따로따로 시작했다. 그리고 보안 요소를 적용하는 건 따로 RnR을 나누진 않고 개발이 다 끝나고 서비스가 제대로 돌아가는 걸 확인하면 그 후에 하나하나 추가해갔다.

예를 들면 입력 데이터를 제대로 받아오는 게 확인되면 그 후에 암호화하는 로직을 추가한다든지. 처음에 지원서에 보안 요소를 작성한대로 계획했던 대로 전부 구현한 건 아니었기 때문에 계속 회의하면서 추가/삭제해나갔다.

개발은 그냥 헤매기도 하고 오류 나면 다같이 회의하고 공부하고 하면서 진행했어서 적을 말이 딱히 없다.. ㅎㅎ

 

잠도 돌아가면서 잤는데, 거의 다들 두시간씩밖에 안 잤던 것 같다. 마지막 날에는 다들 잠도 못 자고 지쳤는지 말이 없어졌다. ㅋㅋㅋ

그리고 좋았던 점은 온라인 대회였는데도 끼니 때마다 피자/치킨 기프티콘을 주최측에서 보내주기도 하고 저렇게 귀여운 티셔츠도 보내주고, 대회 중간중간 자잘한 사진찍기 미션도 있어서 재밌었다 ㅋㅋㅋㅋ
새벽에도 온라인으로 퀴즈 게임을 했는데 거의 모든 팀이 다 들어와 있어서 다들 비슷하구나.. 했었다. ㅋㅋㅋㅋ

덕분에 먹기도 엄청 잘 먹고 3일 내내 쪽잠 자 가면서 개발하다가 코드 제출을 하고 바로 다같이 자다가 최종 발표를 했다. 

 

4. 대회가 끝나고

그래서 나는 다른 팀이 발표하는 건 아예 듣지 못했는데, 다른 팀 발표까지 들은 친구가 다른 팀들 진짜진짜 x1000000 잘했다고,
심지어 우리 주제를 하나의 기능으로 포함시킨 팀도 있었다고 말해줬다.

그래서 우리는 이번에 상 받긴 어려울 것 같다, 나중에 더 실력 키워서 또 나오자! 라고 얘기를 끝내고 아침밥을 먹고 다들 헤어졌었다.

그렇게 우리는 다 마음을 접고 있었는데....?

 

최우수상 ㅇㅁㅇ

네..?

최우수상을 수상했다... !!!

난 마음을 아예 비우고 소개딩 대회 자체를 잊고 있었어서 최우수상이라는 얘기 들었을 때도 "??? 뭐가 최우수상이지?"라는 생각을 했다.
아예 소개딩의 존재를 까먹고 있었고 그날이 결과 발표날인 줄도 몰랐을 정도로... ㅋㅋㅋㅋㅋㅋ

나뿐만 아니라 우리 팀원들 다 얼떨떨해 했던 기억이 난다.

 

 

시상식은 11월에 코엑스에서 열렸다. 

가서 다른 수상 팀들이랑 점심도 먹고 , 발표도 하고, 우리가 발표하는 내용은 유튜브에 생중계 돼서 1,100명이 우리 발표를 봐주셨다. 

 

5. 느낀 점 & TIPS

채점 기준

이 해커톤은 한정된 시간동안 개발과 보안을 동시에 신경써야 하는 대회이다.

그래서 개발을 먼저 하고 그 다음에 보안약점을 처리했더라면, 시간이 매우 부족했을 것 같다.

우리 팀은 개발과 동시에, 처리할 수 있는 보안 약점들을 제거하면서 코딩을 했다. 예를 들면 CSRF 토큰을 View 화면 구성하면서 바로바로 넣어준다든지 말이다. 따로 시간을 들여서 보안 파트를 신경썼더라면 시간이 많이 부족했을 것 같다. (물론 예정한 건 더 많았지만 시간이 없어서 기획한 보안 이슈를 다 넣지는 못했다)

그렇게 그때그때 처리할 수 있는 걸 모두 넣어 개발을 했었다. 그래서 시간 안에 완성할 수 있었던 것 같다.

 

그리고 대회 시작할 때 발표 자료 템플릿과 함께 주어지는 체크리스트가 있다. 이 체크리스트 위주로 코딩하는 게 정말 중요한 것 같다. 

내용이 정확히 기억은 안 나지만, admin 페이지 개발 시 가산점, 공공데이터 사용 시 가산점 등등 13개 정도의 가산점 항목이 명시되어 있었다. 체크리스트에 있는 항목 구현 시 가산점을 주는 방식으로 평가가 진행됐다.

 

기술 가점 요소

 

 

우리는 개발을 진행할 때 이 체크리스트를 계속 확인하면서 가산점을 노렸다.
이런 건 대회 전에 사전 공지가 되지 않았던 부분이라서, 우리는 대회 당일 계획에 없던 Admin 페이지를 추가하고, 회원 관리랑 로그인 기능도 가산점을 위해서 바로 추가해버리기도 했다. 

 

위에도 썼지만 공공데이터를 사용한 것도 평가에 좋은 영향이 되었던 것 같다. 우리는 서대문구 주민센터에서 공공데이터를 제공받아 데이터베이스를 구축했다. 공공데이터라는 게 믿을 수 있는 데이터다보니 이 점을 어필했던 게 플러스요인이 됐던 것 같다. 가산점 요소에도 공공데이터 항목이 있었다. 정부에서 진행하는 대회라서 그런지 공공데이터를 사용한 걸 어필하니 좋은 영향이 있었던 것 같다.

 

마지막으로, 지원서를 열심히 쓰자. 서비스 퀄리티도 물론 보겠지만, 이 서비스가 왜 필요한지, 보안을 위해 어떤 고민과 노력을 했는지를 지원서와 최종 발표에서 잘 어필하는 것이 개발만큼이나 중요했던 것 같다. 

대회가 종료되고 반 년 후에야 제대로 백엔드 공부를 한 우리 팀원들은 모두가 그 코드를 부끄러워 한다. ㅋㅋㅋㅋㅋ 거의 기적으로 돌아갔던 코드라고....
그런데도 우리가 상을 받았다는 건 코드 완성도 외에도 보안과 관련해 고민한 흔적, 서비스의 필요성 등이 좋게 보였던 것 아닐까 하고 짐작해본다. 

 

이 대회 이후에 이런저런 해커톤을 몇 번 더 나가봤었는데 결국 해커톤에서 중요한 건 "이 서비스가 왜 필요한가" 라고 생각한다. 
해커톤 전에 주제를 정하는 것부터가 대회의 시작이고 중요한 평가 요소이니 지원서를 쓸 때부터 어떤 점을 어필할 것인지 먼저 생각해보는 게 좋은 것 같다. 

 

그치만 사실 아직도 왜 받았는지 모르겠다...
근데 대상 위드유팀이랑 공동 최우수상 감자팀도 다 같은 이야기를 해서 ㅋㅋㅋㅋ 내 눈엔 대단해보이는데..
그래서 그냥 우리 팀도 잘했으니 받았겠지~! 하고 자신있게 인정해보려 한다. 

 

 

마지막으로, 대회가 끝나고 학교에서 인터뷰를 요청해주셔서 공식 블로그에 우리 얘기가 실렸다. 😊

보안뉴스를 비롯해서 이곳저곳에서 이 행사에 대해 실어주셔서 우리 팀을 기사에서도 찾아볼 수 있다. 

 

 

 

이화학보 인터뷰 🌲

m.blog.naver.com/the_ewha/222115143862

 

[이화여대] 보안 전문가를 꿈꾸다, 사이버보안전공 ECB팀을 만나다

<제7회 소프트웨어 개발보안 경진대회>에서밝은 길 안내 서비스로 최우수상을 수상한 ECB 팀을 만...

blog.naver.com

 

관련 기사 📰

www.boannews.com/media/view.asp?idx=90842

 

제7회 소프트웨어 개발보안 경진대회, ‘위드유’팀 대상

행정안전부와 한국인터넷진흥원은 ‘제7회 소프트웨어 개발보안 경진대회’에서 수상한 12팀을 공개했다. 소프트웨어 경진대회는 미래 소프트웨어 개발인력으로 활약할 대학생들에게 안전한

www.boannews.com

https://www.korea.kr/news/pressReleaseView.do?newsId=156408357 

 

제7회 소프트웨어 개발보안 경진대회에서‘위드유’팀 대상

행정안전부(장관 진영)와 한국인터넷진흥원(원장 김석환) 은 ‘제7회 소프트웨어 개발보안 경진대회’에서 수상한 12팀을 공개했다.자세한 내용은 첨부를 참고하시기 바랍니다.* 담당자 : 디지

www.korea.kr

https://www.etnews.com/20200831000037

 

행안부 SW개발보안 경진대회 대상에 인하공대 '위드유팀' 영예

#교통카드 태크 등에 쓰이는 생활기술인 근거리이동통신(NFC)을 이용해 어린이들의 위치와 동선을 보호자에게 실시간으로 알려줌으로써 미아 또는 납치 등 범죄피해를 막을 수 있는 어린이 위치

www.etnews.com

 

처음에는 할까말까 고민했던 대회였는데, 도전해본 덕분에 이렇게 좋은 경험과 인연들을 만날 수 있었다. 

개발이 처음이라, 혹은 보안을 잘 몰라서 지원할까말까 고민하는 분들이 계시다면 바로 도전해보시길!

후기 끝-

 

'일상' 카테고리의 다른 글

개발자들의 영어 발표 스터디를 마치며  (0) 2023.12.10
쿠알라룸푸르 한달살이 노마드 후기  (2) 2023.07.19
2022년 회고  (10) 2023.01.08
Junior Software Engineer Resume  (0) 2022.12.04