제11회 소프트웨어 개발보안 경진대회

운영요강

목     차

Ⅰ. 대회 개요	1

Ⅱ. 대회 운영	2

Ⅲ. 대회 규정	5

Ⅳ. 참고 사항	7

I		대회 개요

□ 추진목적

o 미래 개발자인 대학(원)생을 대상으로 소프트웨어 개발보안 역량 강화 및 제도 홍보를 위해 안전한 소프트웨어 개발 실력을 겨루는 대회의 장 마련

□ 대 회 명 : 제11회 소프트웨어 개발보안 경진대회

□ 대회주제 : 소프트웨어 개발보안으로 만들어가는 안전한 디지털세상

□ 대회운영

①예선접수		②예선발표		③본선 사전설명회		④본선 1차 (온라인)		⑤본선 2차 및 수상작 선정
7.2(화)-8.2(금)		8.5(월)		8.6(화)		8.16(금)		8.23(금)
· 개발기획서 제출		· 15개팀 선발		· SW 개발보안 교육 · 본선 운영방식 안내		· 개발산출물 및 발표자료 제출		· 개발산출물 발표 · 수상작 5점 선정

※ 대상 및 최우수상 시상은 소프트웨어 개발보안 컨퍼런스 당일 시상 예정(2024.11.6.)

※ 운영관련 문의사항 : 2024swsc@gmail.com

구분

예선

본선 1차

본선 2차

대회 방식

· 기한 내 개발 기획서 제출

· 온라인 경진대회 진행

· 개발물 영상 시연 및 발표

대회 규모

· 100팀 내외(팀별 최대 4인)

· 예선 대회를 통과한 15팀 이내

· 예선 대회를 통과한 15팀 이내

심사 내용

· 개발 기획서 심사

· 서비스 개요서, 소스코드

· 개발물 영상 시연 및 발표

심사 기준

· 창의성 30%, 활용성 30%, 완성도 40%

· 보안 부문 40%

· 소스코드 보안약점 발견 수 등 평가

· 구현 부문 60%

· 창의성, 편의성, 완성도 등 평가

공통 사항

Java, Python 언어로 SW보안약점*이 제거된 소프트웨어 개발

* 「소프트웨어 보안약점 진단가이드」 내 구현단계 49개의 기준 참고

시 상

구분	상장	시상수
대상	과학기술정보통신부장관상	1점
최우수상	과학기술정보통신부장관상	1점
우수상	한국인터넷진흥원장상	2점
	한국정보보호학회장상	1점

II		대회 운영

□ 참가 신청(예선)

o 참가대상 : 국내 대학에 소속된 재학 중인 대학(원)생으로 이루어진 팀

※ 일반대학(4년제), 전문대학(2~3년제), 사이버대학 포함, 1인~4인 이내 팀구성

o 신청기간 : 2024. 7. 2.(화) 10:00 ~ 2024. 8. 2.(금), 14:00까지

o 규    모 : 100팀 내외

o 신청방법 : 한국인터넷진흥원 홈페이지에서 개발기획서를 다운로드 → 경진대회 포스터 내 QR코드 또는 링크 접속하여 접수 신청

(www.kisa.or.kr - 알림마당 – 공지사항)

o 제출서류

- 개발기획서 PDF(파일명: 제11회 SW개발보안 경진대회_개발기획서_팀명)

- 팀소속 전원 제출일 기준 3개월 내 발급된 재학증명서 PDF(파일명 : 제11회 SW개발보안 경진대회_재학증명서_팀명)

□ 예선 심사‧발표

o 예선심사 : 개발 기획서를 심사하여 15개팀 선발

o 심사기준 : 창의성 30%, 활용성 30%, 완성도 40%

※ 동점자 발생 시 완성도 점수 > 창의성 점수 > 활용성 점수 순으로 우선순위 부여

o 예선발표 : 2024. 8. 5.(월) 개별 안내 예정

□ 본선 사전 설명회

o 일    정 : 2024. 8. 6.(화)

o 참가대상 : 예선을 통과한 15개 내외 팀

o 장    소 : 온라인

※ 예선통과한 15개팀에게 URL 별도 안내 예정

o 내    용 : 안전한 SW개발을 위한 교육 및 본선 운영방식 안내

□ 본선 1차(온라인 경진대회)

o 참가대상 : 예선을 통과한 15개 내외 팀

o 일    시 : 2024. 8. 16.(금), 09:00~ 18:00

o 장    소 : 온라인 경진대회(예선통과한 15개팀에게 URL 별도 안내 예정)

o 진행방식 : 당일 제공한 보안약점 미션 5개 중 최소 1개 이상을 구현하여 안전한 SW를 개발 후 서비스개요서, PPT 발표자료, 소스코드 제출

※ 개발기획서를 바탕으로 한 SW개발 산출물은 사전에 준비가 가능하며, 미션을 구현한 최종 SW개발물 제출 및 평가 예정

o 준비사항 : 참가자 신원 확인을 위한 본인 신분증

※ 신분증은 참가자 확인이 가능한 주민등록증, 운전면허증 등을 포함

o 참고 자료 : 소프트웨어 개발보안 관련 가이드 참고

※ 한국인터넷진흥원 홈페이지(www.kisa.or.kr – 지식플랫폼 – 법령·가이드라인 – 가이드라인 - 소프트웨어 개발보안 가이드) 파일 참고

□ 본선 1차 심사

o 일    시 : 2024. 8. 20.(화)

o 심사대상 : 예선을 통과한 15개 내외 팀의 소스코드

o 심사기준 : 보안부문 40%(소스코드 보안약점 발견 수 등 평가)

□ 본선 2차(개발물 영상시연 및 발표)

o 참가대상 : 예선을 통과한 15개 내외 팀

o 일    시 : 2024. 8. 23.(금), 13:30~ 17:30

o 장    소 : 판교 제2테크노밸리 기업지원허브 혁신기술존 4F 컨퍼런스룸

(경기도 성남시 수정구 대왕판교로 815(시흥동 285-2) 정보보호 클러스터)

o 진행방식 : 본선1차에서 제출한 PPT 발표자료 발표 및 개발물 영상 시연

o 준비사항 : 참가자 신원확인을 위한 본인 신분증

※ 신분증은 참가자 확인이 가능한 주민등록증, 운전면허증 등을 포함

□ 본선 2차 심사 및 수상자 발표

o 심사대상 : 예선을 통과한 15개 내외 팀의 발표 및 개발물 영상 시연

o 심사기준 : 구현부문 60%(창의성, 편의성, 완성도 등 평가)

o 수상자 발표 : 점수 순위에 따라 대상(1점), 최우수상(1점), 우수상(3점) 선정

□ 주요 일정

일 정	내 용	비고
7.2(화) 10시 ~ 8.2.(금), 14시	예선 접수	· 한국인터넷진흥원 홈페이지에서 개발기획서 다운로드(www.kisa.or.kr-알림마당-공지사항) · 포스터 내 QR 또는 링크 접속하여 제출·접수
8.5(월)	예선 발표	· 본선 진출 15여개팀 선발
8.6.(화)	본선 사전 설명회	· 안전한 SW개발을 위한 교육 및 본선 진행방식 안내 · 개발환경 세팅을 위해 팀별 최소 1인 참여 필수
8.16.(금)	본선 1차	· 온라인 경진대회
8.23(금)	본선 2차	· 개발물 시연 및 발표 · 본선 심사 후 5점 수상작 발표

※ 행사 주요내용은 사정에 따라 변경될 수 있으며, 변경 시 한국인터넷진흥원 홈페이지를 통해 공지

□ 문의처

o 운영관련 문의 : 2024swsc@gmail.com

Ⅲ		대회 규정

□ 대회 결격(탈락) 사유

o 참가신청서 내 일부 내역이 누락된 팀

※ 참가신청서 작성 내역으로 해당 신청인(팀원 포함)을 식별할 수 없을 경우 해당

o 참가신청 서류 목록의 전부 또는 일부가 누락된 팀

o 참가팀 전부 또는 일부 인원이 참가 자격에 해당되지 않는 경우

o 참가신청 서류를 허위로 작성하여 제출하는 경우 참가자격 박탈, 시상회수 등 관련규정에 따라 조치될 수 있음

o 본선 개최 장소 내 고성, 음주, 흡연, 폭행, 절도 등 타인에게 피해를 끼치는 행위를 할 시, 진행요원이 제재할 수 있으며, 대회 본부 의견에 따라 참가자격이 박탈 될 수 있음

□ 대회 심사 기준

o 예선 심사기준 : 창의성(30점) + 활용성(30점) + 완성도(40점)

- 동점자 발생 시 완성도 점수 > 창의성 점수 > 활용성 점수 순으로 우선순위 부여

o 본선 심사기준 : 구현부문 점수(60점) + 보안부문 점수(40점)

- 동점자 발생 시 보안부문 점수 > 구현부문(완성도 > 창의성 > 편의성) 점수 순으로 우선순위 부여

□ 유의 사항

o 여기서 참가자란 참가한 팀, 팀 전원, 팀 內 개별 팀원 등을 포함함

o 참가자가 제안한 아이디어는 타사 또는 타기관에 제안이력이 없어야 하며, 참가자가 직접 창안하거나 전적인 권리를 갖고 있어야 함

o 참가자가 제출한 아이디어 및 수상작에 대한 제3자의 저작권, 특허권, 초상권 등의 지적재산권 및 정보의 무단 사용 등으로 발생할 수 있는 법적문제에 대한 책임은 응모자 및 수상자에게 있으며, 문제 발생 시 수상 취소 조치함

o 본 사업 심사와 관련된 사항은 한국인터넷진흥원의 고유권한이며 심사 세부내용 등 관련 자료는 공개하지 아니함

※ 주요 심사기준만 공개하며, 심사 세부항목 및 평가결과는 공개하지 않음

o 아래의 경우 수상 이후라도 수상취소 조치하며 발생할 수 있는 모든 민‧형사상의 책임은 본인에게 있음

- 자신이 속한 조직 등의 사업 아이디어 및 사업 중이거나 사업화를 위해 준비 중인 아이디어로 공모한 경우

- 타 경진대회, 공모전 등에서 이미 채택된 아이디어인 경우

- 참가신청서 등 제출 서류를 사실과 다르게 허위로 작성한 경우

- 참가자격이 없는 자가 대회에 참가한 경우

- 타 경진대회 수상작, 대리작 및 타인의 저작물을 도용한 경우

o 본선 개최 장소 내 기물을 파손하거나 장비 등의 고장 발생 시 해당 책임은 당사자에 있으며, 이에 대한 손해배상을 해야함

o 경진대회의 창작물에 대한 저작권은 참가자에게 있으며, KISA는 참가자와 협의를 통해 제3자에게 공개하거나 공유가 가능함

※ KISA는 수상작에 한하여 수상자와 협의하여 간행물 및 보도 자료를 배포할 수 있음

o 제출한 경진대회 관련 서류는 선정 여부를 불문하고 반환하지 않음

o 접수 결과 등에 따라 시상 규모는 변경될 수 있음

o 경진대회 운영 중(발표, 시상식 등) 촬영된 사진, 영상은 홍보물로 사용 될 수 있음

- 대회 진행 중에 영상 촬영 및 인터뷰 요청이 있을 수 있으며, 해당 영상은 유튜브 ‘소개딩TV’에 업로드됨

Ⅳ		참고 사항

□ (구현단계) 보안약점 제거 기준(’21년)

1. 입력데이터 검증 및 표현 : 프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정으로 인해 발생할 수 있는 보안약점

번호	보안약점	설 명
1	SQL 삽입	SQL 질의문을 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 질의문이 실행 가능한 보안약점
2	코드 삽입	프로세스가 외부 입력값을 코드(명령어)로 해석·실행할 수 있고 프로세스에 검증되지 않은 외부 입력값을 허용한 경우 악의적인 코드가 실행 가능한 보안 약점
3	경로 조작 및 자원삽입	시스템 자원 접근경로 또는 자원제어 명령어에 검증되지 않은 외부 입력값을 허용하여 시스템 자원에 무단 접근 및 악의적인 행위가 가능한 보안약점
4	크로스사이트 스크립트	사용자 브라우저에 검증되지 않은 외부 입력값을 허용하여 악의적인 명령어가 실행 가능한 보안약점
5	운영체게 명령어 삽입	운영체제 명령어를 생성할 EO 검증되지 않은 외부 입력값을 허용하여 악의적인 명령어가 실행 가능한 보안약점
6	위험한 형식 파일 업로드	파일의 확장자 등 파일형식에 대한 검증없이 파일 업로드를 허용하여 공격이 가능한 보안약점
7	신뢰되지 않은 URL 주소로 자동접속 연결	URL 링크 생성에 검증되지 않은 외부 입력값을 허용하여 악의적인 사이트로 자동 접속 가능한 보안약점
8	부적절한 XML 외부 개체 참조	임의로 조작된 XML 외부개체에 대한 적절한 검증 없이 참조를 허용하여 공격이 가능한 보안약점
9	XML 삽입	XQuery, XPath 질의문을 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 질의문이 실행 가능한 보안약점
10	LDAP 삽입	LDAP 명령문을 생성할 때 검증되지 않은 외부 입력 값을 허용하여 악의적인 명령어가 실행 가능한 보안약점
11	크로스사이트 요청위조	사용자 브라우저에 검증되지 않은 외부 입력 값을 허용하여 사용자 본인의 의지와는 무관하게 공격자가 의도한 행위가 실행 가능한 보안약점
12	서버사이드 요청 위조	서버 간 처리되는 요청에 검증되지 않은 외부 입력값을 허용하여 공격자가 의도한 서버로 전송하거나 변조하는 보안약점
13	HTTP 응답분할	HTTP 응답헤더에 개행문자(CR이나 LF)가 포함된 검증되지 않은 외부 입력값을 허용하여 악의적인 코드가 실행 가능한 보안약점
14	정수형 오버플로우	정수형 변수에 저장된 값이 허용된 정수 값 범위를 벗어나 프로그램이 예기치 않게 동작 가능한 보안약점
15	보안기능 결정에 사용 되는 부적절한 입력값	보안기능(인증, 권한부여 등) 결정에 검증되지 않은 외부 입력값을 허용하여 보안기능을 우회하는 보안약점
16	메모리 버퍼 오버플로우	메모리 버퍼의 경계값을 넘어서 메모리값을 읽거나 저장하여 예기치 않은 결과가 발생하는 보안약점
17	포맷 스트링 삽입	printf 등 포맷 스트링 제어함수에 검증되지 않은 외부 입력값을 허용하여 발생하는 보안약점 * 포맷 스트링: 입·출력에서 형식이나 형태를 지정해주는 문자열

2. 보안기능 : 보안기능(인증, 접근제어, 기밀성, 암호화, 권한 관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점

번호	보안약점	설 명
1	적절한 인증 없는 중요 기능 허용	중요정보(금융정보, 개인정보, 인증정보 등)를 적절한 인증 없이 열람 (또는 변경)가능한 보안약점
2	부적절한 인가	중요자원에 접근할 때 적절한 제어가 없어 비인가 접근이 가능한 보안약점
3	중요한 자원에 대한 잘못된 권한 설정	중요자원에 적절한 접근 권한을 부여하지 않아 중요정보가 노출·수정 가능한 보안약점
4	취약한 암호화 알고리즘 사용	중요정보(금융정보, 개인정보, 인증정보 등)의 기밀성을 보장할 수 없는 취약한 암호화 알고리즘을 사용하여 정보가 노출 가능한 보안약점
5	암호화되지 않은 중요정보	중요정보(금융정보, 개인정보, 인증정보 등) 전송 시 암호화 또는 안전한 통신채널을 이용하지 않거나, 저장 시 암호화하지 않아 정보가 노출 가능한 보안약점
6	하드코드된 중요정보	소스코드에 중요정보(비밀번호, 암호화키 등)를 직접 코딩하여 소스코드 유출 시 중요정보가 노출되고 주기적 변경이 어려운 보안약점
7	충분하지 않은 키 길이 사용	암호화 등에 사용되는 키의 길이가 충분하지 않아 데이터의 기밀성· 무결성을 보장할 수 없는 보안약점
8	적절하지 않은 난수 값 사용	사용한 난수가 예측 가능하여, 공격자가 다음 난수를 예상해서 시스템을 공격 가능한 보안약점
9	취약한 비밀번호 허용	비밀번호 조합규칙(영문, 숫자, 특수문자 등) 미흡 및 길이가 충분하지 않아 비밀번호가 노출 가능한 보안약점
10	부적절한 전자서명 확인	프로그램, 라이브러리, 코드의 전자서명에 대한 유효성 검증이 적절하지 않아 공격자의 악의적인 코드가 실행 가능한 보안약점
11	부적절한 인증서 유효성 검증	인증서에 대한 유효성 검증이 적절하지 않아 발생하는 보안약점
12	사용자 하드디스크에 저당되는 쿠키를 통한 정보노출	쿠키(세션 ID, 사용자 권한정보 등 중요정보)를 사용자 하드디스크에 저장되어 중요정보가 노출 가능한 보안약점
13	주석문 안에 포함된 시스템 주요정보	소스코드 주석문에 인증정보 등 시스템 주요정보가 포함되어 소스코드 노출 시 주요정보도 노출 가능한 보안약점
14	솔트 없이 일방향 해쉬 함수 사용	솔트를 사용하지 않고 생성된 해쉬 값으로부터 공격자가 미리 계산된 레인보우 테이블을 이용하여 해쉬 적용 이전 원본 정보를 복원가능한 보안약점 * 솔트: 해쉬 적용하기 전 평문인 전송정보에 덧붙인 무의미한 데이터
15	무결성 검사 없는 코드 다운로드	소스코드 또는 실행파일을 무결성 검사 없이 다운로드 받아 실행하는 경우, 공격자의 악의적인 코드가 실행 가능한 보안약점
16	반복된 인증시도 제한 기능 부재	인증 시도 수를 제한하지 않아 공격자가 반복적으로 임의 값을 입력하여 계정 권한을 획득 가능한 보안약점

3. 시간 및 상태 : 동시 또는 거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작되는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안약점

번호	보안약점	설 명
1	경쟁조건: 검사 시점과 사용 시점(TOCTOU)	멀티 프로세스 상에서 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안약점
2	종료되지 않는 반복문 또는 재귀 함수	종료조건 없는 제어문 사용으로 반복문 또는 재귀함수가 무한히 반복되어 발생할 수 있는 보안약점

4. 에러처리 : 에러를 처리하지 않거나, 불충분하게 처리하여 에러정보에 중요
정보(시스템 등)가 포함될 때 발생할 수 있는 보안약점

번호	보안약점	설 명
1	오류 메시지를 통한 정보 노출	오류메시지나 스택정보에 시스템 내부구조가 포함되어 민감한 정보, 디버깅 정보가 노출 가능한 보안약점
2	오류상황 대응 부재	시스템 오류상황을 처리하지 않아 프로그램 실행정지 등 의도하지 않은 상황이 발생 가능한 보안약점
3	부적절한 예외 처리	예외사항을 부적절하게 처리하여 의도하지 않은 상황이 발생 가능한 보안약점

5. 코드오류 : 타입변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩오류로 인해 유발되는 보안약점

번호	보안약점	설 명
1	Null Pointer 역참조	변수의 주소 값이 Null인 객체를 참조하는 보안약점
2	부적절한 자원 해제	사용 완료된 자원을 해제하지 않아 자원이 고갈되어 새로운 입력을 처리할 수 없는 보안약점
3	해제된 자원 사용	메모리 등 해제된 자원을 참조하여 예기치 않은 오류가 발생하는 보안약점
4	초기화되지 않은 변수 사용	변수를 초기화하지 않고 사용하여 예기치 않은 오류가 발생하는 보안약점
5	신뢰할 수 없는 데이터의 역직렬화	악의적인 코드가 삽입·수정된 직렬화 데이터를 적절한 검증 없이 역직렬화하여 발생하는 보안약점 * 직렬화: 객체를 전송 가능한 데이터형식으로 변환 * 역직렬화: 직렬화된 데이터를 원래 객체로 복원

6. 캡슐화 : 중요한 데이터 또는 기능성을 불충분하게 캡슐화 하였을 때, 인가되지 않은 사용자에게 데이터 누출이 가능해지는 보안약점

번호	보안약점	설 명
1	잘못된 세션에 의한 데이터 정보 노출	잘못된 세션에 의해 인가되지 않은 사용자에게 중요정보가 노출 가능한 보안약점
2	제거되지 않고 남은 디버그 코드	디버깅을 위한 코드를 제거하지 않아 인가되지 않은 사용자에게 중요정보가 노출 가능한 보안약점
3	Public 메소드부터 반환된 Private 배열	Public으로 선언된 메소드에서 Private로 선언된 배열을 반환(return)하면 Private 배열의 주소 값이 외부에 노출되어 해당 Private 배열값을 외부에서 수정 가능한 보안약점
4	Private 배열에 Public 데이터 할당	Public으로 선언된 데이터 또는 메소드의 인자가 Private으로 선언된 배열에 저장되면 이 Private 배열을 외부에서 접근하여 수정 가능한 보안약점

7. API 오용 : 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안약점

번호	보안약점	설 명
1	DNS lookup에 의존한 보안결정	도메인명 확인(DNS lookup)으로 보안결정을 수행할 때 악의적으로 변조된 DNS 정보로 예기치 않은 보안위협에 노출되는 보안약점
2	취약한 API 사용	취약한 함수를 사용해서 예기치 않은 보안위협에 노출되는 보안약점