’22년 디지털정부서비스 SW 보안약점 진단 대상기관 안내서
2022. 2.

□ 디지털정부 SW보안약점 진단 개요

□ 지원 대상

ㅇ 중앙, 지자체, 공공기관 등에서 개발·운영하고 있는 디지털정부 서비스

- 홈페이지와 모바일앱 수요조사를 통해 대상을 선정하여 보안약점 진단 서비스 제공

□ 지원 내용

ㅇ 홈페이지, 모바일앱 등에 대한 SW보안약점 진단 및 조치방안 제시

- 설계단계는 설계 산출물, 구현·운영단계는 소스코드 등을 점검

ㅇ 기관에서 조치한 SW보안약점에 대한 적절성 검토 및 개선 지원

- 최초에 검출된 보안약점을 대상으로 적절히 조치되었는지 확인

□ 진단 기준

ㅇ (홈페이지) 행정기관 및 공공기관 정보시스템 구축 운영 지침 별표 3

- 설계단계 보안약점 기준 20개 항목, 구현단계 보안약점 기준 49개 항목

ㅇ (모바일앱) 모바일 전자정부 서비스 관리 지침 별표 1, 3

- 모바일 보안약점 기준 26개 항목, 모바일 취약점 기준 20개 항목

□ 지원 절차

ㅇ (홈페이지) 기초조사서 작성·제출, 보안약점 진단 대상 산출물 제출

- 설계단계 진단은 기초조사서만 제출. 그 외 「□ 제출물 안내」참고

ㅇ (모바일앱) 검증신청서 및 보안명세서 작성·제출, 진단 대상 산출물 제출

- 「□ 제출물 안내」참고

① 수요조사		② 진단대상 선정·통보		③ 신청서·소스 코드 제출		④ 진단·조치 지원 (2회이상)		⑤ 결과통보
(행안부↔기관)		(행안부↔기관)		(기관→KISA)		(KISA↔기관)		(KISA→기관)

□ 보안약점 진단 순서도

ㅇ 설계단계 보안약점 진단 순서도

ㅇ 구현단계 보안약점 진단 순서도

- 모바일앱은 아래 구조와 유사하게 진행되며, 취약점 진단은 별도 안내

□ 제출물 안내

□ 디지털정부 SW보안약점 진단 시 제출물

ㅇ 공통 : 『□ 디지털정부 SW 진단 기초조사서』를 e-Mail로 제출

※ (홈페이지) securecoding@kisa.or.kr (모바일앱) kisaappverify@kisa.or.kr

ㅇ 보안약점 진단 분야별 제출 항목

- 설계단계 진단 : 신청기관과 협의 후 진행

※ 진단일정은 요구사항 분석과 설계문서 작성 완료 이전 시점으로 진행 예정

- 구현단계 진단 : 정보시스템의 소스코드(모바일앱은 실행파일 포함)

※ 소스코드는 『□ 소스코드 수집 방법』 참고하여 CD 상태로 제작한 후 등기우편 또는 방문제출

※ 소스코드 제출 시 보안상 e-Mail을 통한 제출은 허용하지 않습니다.

□ 제 출 처

ㅇ 주소 : (우편번호 : 58324) 전라남도 나주시 진흥길 9 (빛가람동) 한국인터넷진흥원 6층 전자정부보호팀

ㅇ 담당자 : 강홍구 책임(☎ 061-820-1258), 이아현 주임(☎ 061-820-1675)

ㅇ Helpdesk : (홈페이지) ☎ 061-820-2747, ✉ securecoding@kisa.or.kr(모바일앱) ☎ 061-820-2748, ✉ kisaappverify@kisa.or.kr

ㅇ 찾아오시는 길

□ (구현단계) 진단 시 소스코드 제출 방법

□ 소스코드 제출 방법

ㅇ 소스코드는 현재 운영 중인 홈페이지(또는 모바일앱)와 동일한 개발 환경의 소스코드 및 참조하는 라이브러리 암호화 압축(.zip)하여 제출

※ 모바일앱은 소스코드와 실행파일(apk, ipa 등)을 모두 제출해야 함

※ 암호화한 비밀번호(10자리 이상)는 이메일 또는 유선으로 KISA에게 전달

ㅇ 개발언어(홈페이지 등) 별 소스코드 파일 제출 방법

- (Java/JSP) 확장자가 java, jsp, xml, html 등의 파일 제출

- (PHP) 확장자가 php, xml, html 등의 파일 제출

- (ASP) 확장자가 asp, aspx, xml, html 등의 파일 제출

- (Eclipse등의 IDE) Workspace를 압축하여 파일 제출

IDE를 사용하여 개발하는 경우 - Eclipse등 에서 사용하는 해당 workspace를 압축하여 저장(*.java / *.jsp / *.xml 등) - Eclipse내에서 외부라이브러리를 참조하는 경우 해당 라이브러리는 따로 압축하여 저장 - maven을 사용하는 경우 maven을 통해 다운로드 받아 사용하는 라이브러리는 따로 압축하여 저장
IDE를 사용하지 않는 경우 - 소스 폴더 : 주로 src폴더로 되어 있으며 웹 환경에 따라 java, php, asp등의 소스코드 파일이 포함해야함 - 웹 폴더 : 주로 WEB-INF폴더로 되어 있으며, jsp, classes, lib, tld 및 web.xml, struts-config.xml과 같은 구성 파일이 포함해야 함 (그외 별도의 .class파일 및 jar 모두 필요)

□ SW 보안약점 진단환경 보안관리

□ 진단환경 보안

ㅇ 전자정부 SW·IoT 보안센터(한국인터넷진흥원)의 보안관리는 내부 보안관리매뉴얼(취약성분석실 보안관리 절차서)을 통하여 관리

ㅇ 참여인원(분석전문가)에 대한 보안유지 및 정보누출 방지에 대한 보안서약서 작성 및 신원조사 확인

ㅇ 다중 출입통제(출입증, 지문인식, CCTV) 시스템 구축 및 로그관리

ㅇ 분석가 PC의 매체(USB, CD 등) 제어 시스템 사용으로 파일 반출불가

ㅇ 소스코드는 서버에만 보관하며, 분석가 PC는 결과만 출력하여 소스통제

ㅇ 내부망 PC, 외부망 PC 분리를 통한 물리적 네트워크 통제(망분리)

※ 분석실 내부는 외부 네트워크(인터넷망) 사용 불가

ㅇ 소프트웨어 보안약점 분석 후 소스코드 완전삭제

□ 소스코드 반·출입 관리

ㅇ 오프라인으로 KISA에 방문 또는 등기로 소스코드 접수

※ 소스코드의 안전한 전달을 위하여 CD 등의 형태로 접수하며, 접수증 발부

※ 접수받은 소스코드는 S/W 분석센터의 서버실 내의 내화금고 안에 보관하며 서버실 및 금고에 접근가능한 사람은 보안관리자(KISA)로 제한

□ 디지털정부 SW 진단 기초조사서(또는 신청서)

□ 홈페이지 진단

SW보안약점 진단 지원 기초조사서
신청기관	기관명
	담당자 (직책)		부서명
			전화
			이메일
수행업체	업체명
	개발자 (직책)		전화
			이메일
개발환경	서비스명
	서비스 유형	대민 행정 기타( )
	개발언어	Java/JSP PHP ASP 기타( )
	최초 구축비용	1억 미만 1억~5억 5억 이상
	유지보수 비용	1천만원 미만 5천만원 미만 5천만원 이상 ※’22년 기준
	통합개발환경	이클립스 넷빈즈 비쥬얼스튜디오 기타( )
	전자정부 프레임워크	사용 (Version : ) 미사용
	JDK Version	JDK1.5 JDK1.6 JDK1.7 기타( )
	인코딩(Encoding)	UTF-8 EUC-KR 기타( )
	웹루트 경로 (WebRoot)	(예시) /home/tomcat/web/WEB-INF
	홈페이지 주소	(예시) http://www.kisa.or.kr
보안약점 진단 (필수)	진단희망일	(예시) 2022년 4월 1주 ※ 4월 ~ 8월 사이 신청. 단, 홈페이지 개편 일정 등을 고려 예외 가능 ※ 설계단계 진단 대상기관은 설계단계 진단 희망일도 별도 표시
	홈페이지 개편 계획 여부	있음 ( 월 일 ~ 월 일) 없음
상기와 같이 디지털정부 운영시스템 대상 SW보안약점 진단을 신청하며, 기재사항에 허위사실이 없음을 확인합니다. 년 월 일 신청기관 담당자 (서명 또는 인) 한국인터넷진흥원장 귀하

□ 모바일앱 진단

접 수 번 호 제 호	모바일 디지털정부서비스 앱 소스코드 검증신청서
신청기관	① 신청기관명
	② 담당자(직책)		부서명
			전화
			이메일
개발기관	③ 개발사명
	④ 개발자(직책)		부서명
			전화
			이메일
검증신청 대상정보	⑤ 서비스명
	⑥ 서비스유형	모바일 대민서비스 모바일 행정서비스 기타( )
	⑦ 구현유형	모바일 앱 하이브리드 앱 기타( )
	⑧ 개발언어	Android-Java Object-C 기타( )
	⑨ 프레임워크	전자정부 프레임워크 기타( )
	⑩ 운영체제	Android( ) iOS( ) 기타( )
	⑪ 앱 식별자
	⑫ 공통기반	사용( ) 사용안함
상기와 같이 모바일 디지털정부서비스 앱 소스코드 등에 대한 검증을 신청하며, 기재사항에 허위사실이 없음을 확인합니다. 년 월 일 신청기관 담당자 (서명 또는 인) 한국인터넷진흥원장 귀하

□ 디지털정부 SW보안약점 진단 FAQ

◎ 자료 제출 등에 관한 내용

***********************************

ㅇ 기초조사서는 3월 18일(금)까지 제출(e-Mail)해야 하며,
소스코드 등은 기초조사서 내 진단희망일 2주 전까지 오프라인 제출

※ 진단희망일은 4월~8월 이내로 작성 가능

*************************

ㅇ 이메일로 제출 시 온라인 상 유출될 수 있는 위험이 존재하여, 대면 제출 또는 그에 준하는 방법(우체국 등기우편)으로 제출 안내

*************************

ㅇ 기본적으로 CD 내 소스코드를 저장하여 제출하기를 안내하고 있으나, USB 등 다른 이동식저장매체를 통해 제출 가능

*********************************

ㅇ SW보안약점 진단서비스를 제공할 수 없으며 기관에서 취소신청

※ 아래 취소 방법 등에 관한 내용을 참고

***********************

ㅇ 조치된 소스코드 등을 CD로 제출 시 함께 압축(.zip)하여 제출

***********************************

ㅇ 상용솔루션 등은 SW 보안약점 진단서비스 대상에서 제외되어 제출 불필요

※ 참고 : 행정기관 및 공공기관 정보시스템 구축 운영 지침 제50조(개발보안 원칙)

◎ 지원 방법 등에 관한 내용

①******************

ㅇ SW 보안약점 진단서비스는 최초진단의 경우 4~8월에 지원하며, 이행진단은 11월까지 지원함. 기간이 지날 경우 지원 불가

②******************

ㅇ 디지털정부 서비스별 최초진단, 이행진단 등 최소 2회를 지원하고 있으나, 보안약점이 잔존해 있을 경우 2회 이내 추가 지원하고 있음

③***********************

ㅇ 보안약점에 따른 소스코드 수정기간은 최초 1달(4주)이 주어지며, 기간이 초과될 경우 제출 독려 후 미제출시 자동 종료될 수 있음

※ 수정기간의 시작은 보완요청 이메일이 전달된 날(예, 4.1)로부터 시작되어 4주차 마감(예, 5.1)

④********************************

ㅇ SW보안약점을 모두 조치하지 못하여도 별도의 불이익은 없으나, 해당 정보시스템의 보안성 강화를 위해 계획 수립 및 조치 권고

◎ 취소 방법 등에 관한 내용

①*************************

ㅇ SW보안약점 진단서비스를 지원받는 것은 의무사항이 아니며,

기관의 판단에 따라 취소 가능

②***************************

ㅇ SW보안약점 진단 취소사유를 명시하여 한국인터넷진흥원으로 공문 송부

③*******************************

ㅇ SW보안약점 진단을 취소할 경우 별도의 불이익은 없으나,

차년도 SW보안약점 진단서비스 대상 선정 시 후순위로 배정

◎ 자동 종료에 관한 내용

①***********************

ㅇ SW보안약점 진단서비스 지원 중 특정 사유에 따라 지원이 종료되는 것을 의미하며 대상기관에 공문으로 종료 사유를 송부

※ 특정 사유란 기관에서 종료 요청(취소신청)하거나, 제출 기한 및 독려 2회가 초과한 경우

②*****************************

ㅇ 홈페이지 SW보안약점 진단서비스는 수요기관이 많아 후보(차순위) 대상이 우선 지원되므로 해당년도 재신청이 불가능함

※ 차년도 SW보안약점 진단서비스 수요조사 시 신청 가능

ㅇ 모바일앱은 상시접수를 허용하므로 해당년도 재신청이 가능함

◎ 기타

①*************************

ㅇ 모바일앱의 경우 홈페이지 진단에 비해 진단 일정 변경 등이 유연하며, 제출 시점에 맞춰 진단이 가능하므로 진단 희망일 작성 제외

※ 다만, 진단 대기 건수가 많을 경우 진단 착수 대기일 발생 가능

③****************************

ㅇ SW보안약점 진단서비스에 따른 비용(보안약점 진단, 조치방안 수립 등)은 행정안전부에서 지원하고 있으므로 기관에서는 별도 비용을 지불하지 않음

③******************************************

ㅇ KISA의 SW보안약점 진단서비스로 도출된 보안약점 등에 대해 조치를 수행할 수 있는 개발 또는 유지보수 업체를 의미함.

《 그 외 궁금한 사항에 대해서는 061-820-1258, 1675 으로 문의 》

□ 홈페이지 보안약점 진단 기준

□ 설계단계(설계문서) 진단

번호	보안약점 항목	설 명	비고
1	DBMS 조회 및 결과 검증	DBMS 조회시 질의문(SQL) 내 입력값과 그 조회결과에 대한 유효성 검증방법(필터링 등) 설계 및 유효하지 않은 값에 대한 처리방법 설계	입출력 검증
2	XML 조회 및 결과 검증	XML 조회시 질의문(XPath, XQuery 등) 내 입력값과 그 조회결과에 대한 유효성 검증방법(필터링 등) 설계 및 유효하지 않은 값에 대한 처리방법 설계
3	디렉토리 서비스 조회 및 결과 검증	디렉토리 서비스(LDAP 등)를 조회할 때 입력값과 그 조회결과에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계
4	시스템 자원 접근 및 명령어 수행 입력값 검증	시스템 자원접근 및 명령어를 수행할 때 입력값에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계
5	웹 서비스 요청 및 결과 검증	웹 서비스(게시판 등) 요청(스크립트 게시 등)과 응답결과(스크립트를 포함한 웹 페이지)에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계
6	웹 기반 중요 기능 수행 요청 유효성 검증	비밀번호 변경, 결제 등 사용자 권한 확인이 필요한 중요기능을 수행할 때 웹 서비스 요청에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계
7	HTTP 프로토콜 유효성 검증	비정상적인 HTTP 헤더, 자동연결 URL 링크 등 사용자가 원하지 않은 결과를 생성하는 HTTP 헤더·응답결과에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계
8	허용된 범위내 메모리 접근	해당 프로세스에 허용된 범위의 메모리 버퍼에만 접근하여 읽기 또는 쓰기 기능을 하도록 검증방법 설계 및 메모리 접근요청이 허용범위를 벗어났을 때 처리방법 설계
9	보안기능 입력값 검증	보안기능(인증, 권한부여 등) 입력 값과 함수(또는 메소드)의 외부입력 값 및 수행결과에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계
10	업로드·다운로드 파일 검증	업로드·다운로드 파일의 무결성, 실행권한 등에 관한 유효성 검증방법 설계 및 부적합한 파일에 대한 처리방법 설계	파일 검증
11	인증 대상 및 방식	중요정보·기능의 특성에 따라 인증방식을 정의하고 정의된 인증방식을 우회하지 못하게 설계	인증 관리
12	인증 수행 제한	반복된 인증 시도를 제한하고 인증 실패한 이력을 추적하도록 설계
13	비밀번호 관리	생성규칙, 저장방법, 변경주기 등 비밀번호 관리정책별 안전한 적용방법 설계
14	중요자원 접근통제	중요자원(프로그램 설정, 민감한 사용자 데이터 등)을 정의하고, 정의된 중요자원에 대한 신뢰할 수 있는 접근통제 방법(권한관리 포함) 설계 및 접근통제 실패 시 처리방법 설계	접근 권한 관리
15	암호키 관리	암호키 생성, 분배, 접근, 파기 등 암호키 생명주기별 암호키 관리방법을 안전하게 설계	암호 관리
16	암호연산	국제표준 또는 검증필 암호모듈로 등재된 안전한 암호 알고리즘을 선정하고 충분한 암호키 길이, 솔트, 충분한 난수 값을 적용한 안전한 암호연산 수행방법 설계
17	중요정보 저장	중요정보(비밀번호, 개인정보 등)를 저장·보관하는 방법이 안전하도록 설계	중요 정보 관리
18	중요정보 전송	중요정보(비밀번호, 개인정보, 쿠키 등)를 전송하는 방법이 안전하도록 설계
19	예외처리	오류메시지에 중요정보(개인정보, 시스템 정보, 민감 정보 등)가 노출되거나, 부적절한 에러·오류 처리로 의도치 않은 상황이 발생하지 않도록 설계	에러 처리
20	세션통제	다른 세션 간 데이터 공유금지, 세션ID 노출금지, (재)로그인시 기존 세션ID 재사용금지 등 안전한 세션 관리방안 설계	세션 통제

□ 구현단계(소스코드) 진단

번호	보안약점 항목	설 명	비고
1	SQL 삽입	SQL 질의문을 생성할 때 검증되지 않은 외부 입력 값을 허용하여 악의적인 질의문이 실행가능한 보안약점	입력 데이터 검증 및 표현
2	코드 삽입	프로세스가 외부 입력 값을 코드(명령어)로 해석·실행할 수 있고 프로세스에 검증되지 않은 외부 입력 값을 허용한 경우 악의적인 코드가 실행 가능한 보안약점
3	경로 조작 및 자원 삽입	시스템 자원 접근경로 또는 자원제어 명령어에 검증되지 않은 외부 입력값을 허용하여 시스템 자원에 무단 접근 및 악의적인 행위가 가능한 보안약점
4	크로스사이트 스크립트	사용자 브라우저에 검증되지 않은 외부 입력값을 허용하여 악의적인 스크립트가 실행 가능한 보안약점
5	운영체제 명령어 삽입	운영체제 명령어를 생성할 때 검증되지 않은 외부 입력값을 허용하여 악의적인 명령어가 실행 가능한 보안약점
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 등 포맷 스트링* 제어함수에 검증되지 않은 외부 입력값을 허용하여 발생하는 보안약점 * 입·출력에서 형식이나 형태를 지정해주는 문자열
18	적절한 인증 없는 중요기능 허용	중요정보(금융정보, 개인정보, 인증정보 등)를 적절한 인증없이 열람(또는 변경) 가능한 보안약점	보안기능
19	부적절한 인가	중요자원에 접근할 때 적절한 제어가 없어 비인가자의 접근이 가능한 보안약점
20	중요한 자원에 대한 잘못된 권한 설정	중요자원에 적절한 접근 권한을 부여하지 않아 중요정보가 노출·수정 가능한 보안약점
21	취약한 암호화 알고리즘 사용	중요정보(금융정보, 개인정보, 인증정보 등)의 기밀성을 보장할 수 없는 취약한 암호화 알고리즘을 사용하여 정보가 노출 가능한 보안약점
22	암호화되지 않은 중요정보	중요정보(비밀번호, 개인정보 등) 전송 시 암호화 또는 안전한 통신채널을 이용하지 않거나, 저장 시 암호화하지 않아 정보가 노출 가능한 보안약점
23	하드코드된 중요정보	소스코드에 중요정보(비밀번호, 암호화키 등)를 직접 코딩하여 소스코드 유출 시 중요정보가 노출되고 주기적 변경이 어려운 보안약점
24	충분하지 않은 키 길이 사용	암호화 등에 사용되는 키의 길이가 충분하지 않아 데이터의 기밀성·무결성을 보장할 수 없는 보안약점
25	적절하지 않은 난수 값 사용	사용한 난수가 예측 가능하여, 공격자가 다음 난수를 예상해서 시스템을 공격 가능한 보안약점
26	취약한 비밀번호 허용	비밀번호 조합규칙(영문, 숫자, 특수문자 등) 미흡 및 길이가 충분하지 않아 비밀번호가 노출 가능한 보안약점
27	부적절한 전자서명 확인	프로그램, 라이브러리, 코드의 전자서명에 대한 유효성 검증이 적절하지 않아 공격자의 악의적인 코드가 실행 가능한 보안약점
28	부적절한 인증서 유효성 검증	인증서에 대한 유효성 검증이 적절하지 않아 발생하는 보안약점
29	사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출	쿠키(세션 ID, 사용자 권한정보 등 중요정보)를 사용자 하드디스크에 저장되어 중요정보가 노출 가능한 보안약점
30	주석문 안에 포함된 시스템 주요정보	소스코드 주석문에 인증정보 등 시스템 주요정보가 포함되어 소스코드 노출 시 주요정보도 노출 가능한 보안약점
31	솔트 없이 일방향 해쉬 함수 사용	솔트*를 사용하지 않고 생성된 해쉬 값으로부터 공격자가 미리 계산된 레인보우 테이블을 이용하여 해쉬 적용 이전 원본 정보를 복원가능한 보안약점 * 해쉬 적용하기 전 평문인 전송정보에 덧붙인 무의미한 데이터
32	무결성 검사 없는 코드 다운로드	소스코드 또는 실행파일을 무결성 검사 없이 다운로드 받아 실행하는 경우, 공격자의 악의적인 코드가 실행 가능한 보안약점
33	반복된 인증시도 제한 기능 부재	인증 시도 수를 제한하지 않아 공격자가 반복적으로 임의 값을 입력하여 계정 권한을 획득 가능한 보안약점
34	경쟁조건: 검사 시점과 사용 시점(TOCTOU)	멀티 프로세스 상에서 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안약점	시간 및 상태
35	종료되지 않는 반복문 또는 재귀 함수	종료조건 없는 제어문 사용으로 반복문 또는 재귀함수가 무한히 반복되어 발생할 수 있는 보안약점
36	오류 메시지 정보노출	오류메시지나 스택정보에 시스템 내부구조가 포함되어 민감한 정보, 디버깅 정보가 노출 가능한 보안약점	에러처리
37	오류상황 대응 부재	시스템 오류상황을 처리하지 않아 프로그램 실행정지 등 의도하지 않은 상황이 발생 가능한 보안약점
38	부적절한 예외 처리	예외사항을 부적절하게 처리하여 의도하지 않은 상황이 발생 가능한 보안약점
39	Null Pointer 역참조	변수의 주소 값이 Null인 객체를 참조하는 보안약점	코드오류
40	부적절한 자원 해제	사용 완료된 자원을 해제하지 않아 자원이 고갈되어 새로운 입력을 처리할 수 없는 보안약점
41	해제된 자원 사용	메모리 등 해제된 자원을 참조하여 예기치 않은 오류가 발생하는 보안약점
42	초기화되지 않은 변수 사용	변수를 초기화하지 않고 사용하여 예기치 않은 오류가 발생하는 보안약점
43	신뢰할 수 없는 데이터의 역직렬화	악의적인 코드가 삽입·수정된 직렬화 데이터를 적절한 검증 없이 역질렬화하여 발생하는 보안약점 * 직렬화 : 객체를 전송 가능한 데이터형식으로 변환 * 역직렬화 : 직렬화된 데이터를 원래 객체로 복원
44	잘못된 세션에 의한 데이터 정보 노출	잘못된 세션에 의해 인가되지 않은 사용자에게 중요정보가 노출 가능한 보안약점	캡슐화
45	제거되지 않고 남은 디버그 코드	디버깅을 위한 코드를 제거하지 않아 인가되지 않은 사용자에게 중요정보가 노출 가능한 보안약점
46	Public 메소드부터 반환된 Private 배열	Public으로 선언된 메소드에서 Private로 선언된 배열을 반환(return)하면 Private 배열의 주소 값이 외부에 노출되어 해당 Private 배열값을 외부에서 수정 가능한 보안약점
47	Private 배열에 Public 데이터 할당	Public으로 선언된 데이터 또는 메소드의 인자가 Private으로 선언된 배열에 저장되면 이 Private 배열을 외부에서 접근하여 수정 가능한 보안약점
48	DNS lookup에 의존한 보안결정	도메인명 확인(DNS lookup)으로 보안결정을 수행할 때 악의적으로 변조된 DNS 정보로 예기치 않은 보안위협에 노출되는 보안약점	API 오용
49	취약한 API 사용	취약한 함수를 사용해서 예기치 않은 보안위협에 노출되는 보안약점

□ 모바일앱 보안약점 진단 기준

□ 모바일 보안약점 기준(26개)

번호	보안약점명	설명
1	SQL 삽입	검증되지 않은 외부 입력값이 SQL 쿼리문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안약점
2	경로조작 및 자원삽입	검증되지 않은 외부 입력값이 시스템 자원 접근경로 또는 자원제어에 사용되어 공격자가 입력값을 조작해 공격할 수 있는 보안약점
3	크로스사이트 스크립트	검증되지 않은 외부 입력값에 의해 사용자 브라우저에서 악의적인 스크립트가 실행될 수 있는 보안약점
4	운영체제 명령어 삽입	검증되지 않은 외부 입력값이 운영체제 명령어 생성에 사용되어 악의적인 명령어가 실행될 수 있는 보안약점
5	오버플로우(정수형, 메모리 버퍼)	정수값 및 메모리 버퍼의 경계값이 범위를 넘어서는 경우, 프로그램이 예기치 않게 동작될 수 있는 보안약점
6	취약한 암호화 알고리즘 사용	중요정보(금융정보, 개인정보, 인증정보 등)를 열람(또는 변경) 할 수 있게 하는 보안약점
7	중요정보 평문 저장	중요정보(비밀번호, 개인정보 등)를 암호화하여 저장하지 않아 정보가 노출될 수 있는 보안약점
8	중요정보 평문 전송	중요정보(비밀번호, 개인정보 등) 전송시 암호화하지 않거나 안전한 통신채널을 이용하지 않아 정보가 노출될 수 있는 보안약점
9	하드코드된 비밀번호	소스코드 내에 비밀번호가 하드코딩 되어 소스코드 유출시 노출 우려 및 키 변경이 용이하지 않는 보안약점
10	충분하지 않은 키 길이 사용	데이터의 기밀성, 무결성 보장을 위해 사용되는 키의 길이가 충분하지 않아 기밀정보 누출, 무결성이 깨지는 보안약점
11	적절하지 않은 난수값 사용	예측 가능한 난수사용으로 공격자로 하여금 다음 숫자 등을 예상하여 시스템 공격이 가능한 보안약점
12	하드코드된 암호화 키	소스코드 내에 암호화키가 하드코딩 되어 소스코드 유출시 노출 우려 및 키 변경이 용이하지 않는 보안약점
13	주석문안에 포함된 시스템 주요정보	소스코드내의 주석문에 인증정보 등 시스템 주요정보가 포함되어 소스코드 유출시 노출될 수 있는 보안약점
14	경쟁조건: 검사시점과 사용시점(TOCTOU)	멀티 프로세스 상에서 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안약점
15	오류메시지 및 시스템 데이터 정보노출	사용자가 볼 수 있는 오류 메시지나 스택 정보에 시스템 내부 데이터나 디버깅 관련 정보가 공개되는 보안약점
16	오류상황 대응 부재	시스템에서 발생하는 오류 상황을 처리하지 않아 프로그램 실행정지 등 의도하지 않은 상황이 발생할 수 있는 보안약점
17	부적절한 예외 처리	예외에 대한 부적절한 처리로 인해 의도하지 않은 상황이 발생될 수 있는 보안약점
18	Null Pointer 역참조	Null로 설정된 변수의 주소값을 참조했을 때 발생하는 보안약점
19	부적절한 자원 해제	사용된 자원을 적절히 해제하지 않으면 자원 누수 등이 발생하고, 자원이 부족하여 새로운 입력을 처리할 수 없게 되는 보안약점
20	취약한 API 사용	취약하다고 알려진 함수를 사용함으로써 예기치 않는 보안위협에 노출될 수 있는 보안약점
21	안드로이드 애플리케이션 컴포넌트의 부적절한 접근 허용	안드로이드 애플리케이션 컴포넌트 설정으로 부적절한 접근이 허용되어 외부의 애플리케이션에 의해 의도치 않게 실행될 수 있는 보안약점
22	민감한 정보 전송을 위한 암시적 intent 사용	암시적 intent를 사용하여 민감한 정보가 전송시 도청 및 악성행위 삽입이 가능한 보안약점
23	접근제어 없이 내·외부저장소 사용	내・외부저장소(SD카드 등)에 중요한 정보를 암호화하여 저장하지 않아 정보가 노출되거나 수정이 가능한 보안약점
24	안드로이드의 권한 검사 우회	권한이 전혀 없는 호출 프로그램이 응용 프로그램의 권한을 사용하게 되어 권한 검사를 우회할 수 있는 보안약점
25	클래스 로딩 하이재킹	프로그램의 클래스 로드시 검색되는 디렉토리의 이름이 변경되어 클래스 경로를 공격자가 명시적으로 제어할 수 있는 보안약점
26	소스코드 난독화 미적용	역공학 기술에 의한 소스코드 유출 및 보안메커니즘 우회 등이 발생할 수 있는 보안약점

번호	보안약점명	설명
1	반복 설치 시 오류 발생	앱 반복 설치 시 주요 설정 파일 변경 등의 문제가 발생할 수 있는 취약점
2	앱 설치 전후 비정상적인 파일 및 디렉토리 설치	앱 설치 전후로 비정상적인 파일 및 디렉토리가 생성될 수 있는 취약점
3	불필요하거나 과도한 권한 설정	불필요하거나 과도한 설정으로 앱 서비스 목적과 상이한 임의 기능 동작이 가능한 취약점
4	앱 삭제 후 안전성	앱 삭제 시 관련(설치된) 디렉토리 및 파일 이외 파일이 삭제될 수 있는 취약점
5	기능의 정상동작	각 기능이 오동작할 수 있는 취약점 * 단, 인터페이스 관련 사항은 “모바일 애플리케이션 접근성 지침” 준수여부 등을 고려하여 판단할 수 있음
6	임의기능 등 악성행위 기능 존재	앱 서비스 목적과 상이한 임의기능, 백그라운드에서 구동되는 악성행위 기능(프로세스 등)이 존재할 수 있는 취약점
7	정보 외부 유출	허가된 주소 이외의 주소로 정보 전송이 가능한 취약점
8	자원고갈	정상기능 오동작 또는 취약점을 통해 과도한 트래픽 사용 및 배터리를 고갈 시키는 취약점
9	루팅 및 탈옥 기기에서의 정상 동작	루팅 및 탈옥된 기기에서 앱 설치·동작되어 보안메커니즘 우회 등이 발생할 수 있는 취약점
10	ID 값의 변경	안드로이드 플랫폼에 설치되는 앱에 부여되는 app_### 과 같은 일반 권한의 UID, GID 등 ID가 임의로 변경될 수 있는 취약점
11	동일키로 서명된 서로 다른 앱 간의 UID 공유	안드로이드 플랫폼에서 동일한 제작자가 개발한 앱의 경우 동일한 서명키(Key Sign)를 통해 서로 다른 앱 간의 UID를 공유할 수 있는 취약점 * SharedUserID가 설정되지 않아야 함
12	인텐트 권한의 올바른 설정	기능 사용 요청 및 권한이 부적절한 취약점 * Androidmanifest.xml내에 intent-filter라는 항목에 요청 권한 이외에 과도한 권한을 부여해서는 안됨
13	인증 정보 생성 강도 적절성	사용자 ID, 패스워드 등의 인증 정보의 생성강도가 낮아 쉽게 추측할 수 있는 취약점
14	중요정보의 평문 저장 및 전송	중요정보(사용자 인증 정보, 사용자 개인 정보, 사용자 위치 정보)는 모바일기기에 평문으로 저장하거나 평문으로 전송되어 외부에 유출될 수 있는 취약점
15	중요정보 저장 및 전송 시 취약한 암호알고리즘 적용	모바일기기 내 중요정보(사용자 인증 정보, 사용자 개인 정보, 사용자 위치 정보) 저장 또는 서버로 전송시 취약한 암호 알고리즘 사용으로 중요정보가 유출될 수 있는 취약점 ※ “국가정보원 국가사이버안전센터” 의 검증암호알고리즘 참조
16	기타 중요 정보의 평문 저장 및 전송	IMEI 정보 등 기타 중요 정보가 모바일기기에 평문으로 저장되거나 평문으로 전송되어 외부에 유출될 수 있는 취약점
17	기타 중요 정보 저장 및 전송 시 취약한 암호 알고리즘 적용	모바일기기에 IMEI 정보 등 중요정보를 저장 및 전송시 취약한 암호알고리즘 사용으로 중요정보가 유출될 수 있는 취약점
18	파일 다운로드 시 외부주소 변조 및 파일 무결성 우회	설정 파일 또는 업데이트 다운로드 시 외부주소 변조 및 파일 무결성 우회 가능 취약점
19	개인정보 및 개인위치정보 수집 및 활용에 대한 동의	사용자의 동의없이 임의로 개인정보 및 개인위치정보를 수집하고 활용하여 법적문제 등이 발생할 수 있는 취약점
20	난독화	역공학 기술에 의한 모바일 앱 소스코드 유출 및 보안메커니즘 우회 등이 발생할 수 있는 취약점

□ 모바일 보안취약점 기준(20개)

[참고] 자주 실수하는 소프트웨어 보안약점 예시

보안약점	코드 예시
크로스사이트 스크립트
부적절한 예외 처리
오류메시지를 통한 정보 노출
오류 상황 대응 부재
Null Pointer 역참조
SQL 삽입