「전자정부 모바일 앱 소스코드 보안성 검증」

2014년 행정·공공기관 수요조사 계획

< ’14.1.17(금), 정보기반보호과장 장영환 ☎ 3960, 정보기반보호과 팀장 도경화 ☎ 3968 >

전자정부 SW보안강화의 일환으로 추진 중인 모바일 앱 보안성 검증의 업무계획성 확보 및 행정·공공기관의 효율적 지원을 위해 ‘14년 검증규모를 파악하고 대상을 선정하고자 함

※(‘13년)주관기관 → KISA 수시신청/검증 ⇒ (’14년) 연초 조사·대상선정 후 검증방식으로 전환

수요조사 개요

❍ 검증목적 : 모바일 앱의 SW개발단계 취약점 사전진단/조치로 보안성 강화

❍ 조사대상 : 중앙·지자체·공공기관에서 개발하는 전자정부 모바일 앱

※ 기 개발 또는 ‘14. 11까지 개발 완료 예정인 모바일 앱 서비스

❍ 조사목적 : 전자정부 모바일 앱의 보안성 검증 사전수요 파악, 효과적 지원

추진 방향

❍ 지원내용 : 모바일 앱 보안약점(소스코드 등) 진단 및 조치 지원 ․ 이행점검 등

※ 검증내용 : 모바일 앱 소스코드 47개 보안약점 기준 및 위치, 인증 등의 기능보안성

※ 평균 검증 소요시간 : 15.8일(사전검토 및 검증 5일, 기관보완 10.8일)

❍ 지원절차 : 사전수요서 제출‧선정(1~2월, 안행부/KISA)→신청서 및 소스코드 제출(기관, 개발완료 시)→검증(KISA)→보안약점 제거(기관)→조치확인(KISA/안행부)→완료

❍ 선정기준 : 사전신청 기관 중심, 우선순위 선정기준으로 선정(180개 예정)

	< 우선순위 선정기준 >
① 대국민서비스, ② 전자정부 대민서비스 정보보호 등급, ③ 개인정보 등 민감정보 사용여부 ④ 웹DB 연동여부 ⑤ 예상 일일사용유저(User)수

기관 협조사항 및 추진 일정

❍ 사전수요서(붙임1) 제출 : 소관기관별 [붙임1]의 양식만 작성하여 1.29까지 공문제출

- 이번 사전 수요조사 시 제출되지 않은 검증신청은 원칙적으로 불가

※ 중앙부처 : 소속·산하기관 취합, 광역시도 : 시·군·구 및 소속·산하기관 취합

❍ 검증 대상선정 결과통보(2.21) 및 검증 수행(3월~12월)

참고1		전자정부 모바일 앱 검증체계 및 절차

	< 모바일 앱 보안성 검증 개요 >
○ 검증내용 : 모바일 앱 소스코드 47개 보안약점 기준 준수 여부 및 위치, 인증 등의 기능보안성 ※ 평균 검증 소요시간 : 15.8일(사전검토 및 검증 5일, 기관보완 10.8일) ○ 관련근거 - 모바일 전자정부 서비스 관리지침 제8조(검증) - 모바일 전자정부 공통기반 및 지원센터 활용 가이드라인(4.3.3 모바일 서비스 검증 관리 ※ ‘13년 검증 개수 : 109개 기관, 179개 모바일 앱(예. 소방방재청 “119신고”, 서울시 “주차정보제공”)

※ 앱 검증관련 문의 : 한국인터넷진흥원(KISA) 김현철 선임연구원(☎02-405-5384)

□ 검증체계 및 절차

□ 검증단계

참고2		전자정부 모바일 앱 검증환경

구분

현 황

비고

인력

o 검증인력 6명 확보(내부 3명, 외부 3명)

※ SW 보안약점 진단원 3명 확보

- iOS, 안드로이드, MS기반의 앱 검증 가능

※ 검증 : 기능 오동작 검증, 기능 보안취약점(동적), 검증, 소스코드 보안약점(정적) 검증

- 소스코드 보안약점 검증 소요기간 6일 소요

※기관 보완(수정)기간 제외

검증

기준

o 기능 오동작 진단 : 제공 서비스에 대한 기능 점검

- 검증항목 : 오타, UI깨짐 현상 등

o 기능 보안취약점 진단(동적) : 제공 서비스에 대한 보안취약점 점검

- 검증항목 : 개인정보 평문 전송, 위치정보 평문 저장 등

※ Android : 59항목, iOS : 49항목

o 소스코드 보안약점 진단(정적) : 소스코드 상에 보안약점 진단

- 검증항목 : 에러처리, 코드오류, API오용

※ 행정기관 및 공공기관의 정보시스템 구축 운영 지침 47개 항목을 기준 및 모바일 전용 보안약점 점검

진단

방법

o 기능 오동작 진단

- 검증자가 직접 기능을 사용해 가면서 오동작 진단

o 기능 보안취약점 진단(동적)

- IDA, Proxy-Tool, dex2jar 등 취약점 진단 도구를 이용하여 진단

o 소스코드 보안약점 진단(정적)

- KISA 자체 개발한 정적 진단도구(SSEn)를 이용하여 진단

< 소스코드 보안약점 진단항목수 >

구분		SSEn
		매우 높음	높음	중간 이하
구글	Android Java	8	44	58
애플	Object-C	7	38	58

안내서

o 모바일 대국민 전자정부서비스 앱 소스코드 검증 가이드라인 v.30 참조(2013.10)

※ 모바일 전자정부서비스 관리 지침 개정에 따른 개정 예정(‘14.02)

참고3		모바일 앱 점검항목(소스코드 보안약점 기준)

1. 입력데이터 검증 및 표현

번호	보안약점	설 명
1	SQL 삽입	검증되지 않은 외부 입력값이 SQL 쿼리문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안약점
2	경로 조작 및 자원 삽입	검증되지 않은 외부 입력값이 시스템 자원 접근경로 또는 자원제어에 사용되어 공격자가 입력값을 조작해 공격할 수 있는 보안약점
3	크로스사이트 스크립트	검증되지 않은 외부 입력값에 의해 사용자 브라우저에서 악의적인 스크립트가 실행될 수 있는 보안약점
4	운영체제 명령어 삽입	검증되지 않은 외부 입력값이 운영체제 명령문 생성에 사용되어 악의적인 명령어가 실행될 수 있는 보안약점
5	위험한 형식 파일 업로드	파일의 확장자 등 파일형식에 대한 검증없이 업로드를 허용하여 발생할 수 있는 보안약점
6	신뢰되지 않는 URL 주소로 자동접속 연결	검증되지 않은 외부 입력값이 URL 링크 생성에 사용되어 악의적인 사이트로 자동접속될 수 있는 보안약점
7	XQuery 삽입	검증되지 않은 외부 입력값이 XQuery 쿼리문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안약점
8	XPath 삽입	검증되지 않은 외부 입력값이 XPath 쿼리문 생성에 사용되어 악의적인 쿼리가 실행될 수 있는 보안약점
9	LDAP 삽입	검증되지 않은 입력값이 LDAP 명령문 생성에 사용되어 악의적인 명령어가 실행될 수 있는 보안약점
10	크로스사이트 요청 위조	검증되지 않은 외부 입력값에 의해 브라우저에서 악의적인 스크립트가 실행되어 공격자가 원하는 요청(Request)이 다른 사용자(관리자 등)의 권한으로 서버로 전송되는 보안약점
11	HTTP 응답분할	검증되지 않은 외부 입력값이 HTTP 응답헤더에 삽입되어 악의적인 코드가 실행될 수 있는 보안약점
12	정수형 오버플로우	정수를 사용한 연산의 결과가 정수값의 범위를 넘어서는 경우, 프로그램이 예기치 않게 동작될 수 있는 보안약점
13	보안기능 결정에 사용 되는 부적절한 입력값	검증되지 않은 입력값이 보안결정(인증, 인가, 권한부여 등)에 사용되어 보안 메커니즘 우회 등을 야기할 수 있는 보안약점
14	메모리 버퍼 오버플로우	메모리 버퍼의 경계값을 넘어서 메모리값을 읽거나 저장 하여 예기치 않은 결과를 발생시킬 수 있는 보안약점
15	포맷 스트링 삽입	printf 등 외부 입력값으로 포맷스트링을 제어할 수 있는 함수를 사용하여 발생할 수 있는 보안약점

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

2. 보안기능

3. 시간 및 상태

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

4. 에러처리

번호	보안약점	설 명
1	오류 메시지를 통한 정보 노출	개발자가 생성한 오류메시지에 시스템 내부구조 등이 포함되어 민감한 정보가 노출될 수 있는 보안약점
2	오류 상황 대응 부재	시스템에서 발생하는 오류상황을 처리하지 않아 프로그램 실행정지 등 의도하지 않은 상황이 발생할 수 있는 보안약점
3	부적절한 예외 처리	예외에 대한 부적절한 처리로 인해 의도하지 않은 상황이 발생될 수 있는 보안약점

5. 코드오류

번호	보안약점	설 명
1	Null Pointer 역참조	Null로 설정된 변수의 주소값을 참조했을 때 발생하는 보안약점
2	부적절한 자원 해제	사용된 자원을 적절히 해제 하지 않으면 자원 누수 등이 발생하고, 자원이 부족하여 새로운 입력을 처리할 수 없게 되는 보안약점
3	해제된 자원 사용	메모리 등 해제된 자원을 참조하여 예기치 않은 오류가 발생될 수 있는 보안약점
4	초기화되지 않은 변수 사용	변수를 초기화하지 않고 사용하여 예기치 않은 오류가 발생될 수 있는 보안약점

6. 캡슐화

번호	보안약점	설 명
1	잘못된 세션에 의한 데이터 정보 노출	잘못된 세션에 의해 인가되지 않은 사용자에게 중요정보가 노출될 수 있는 보안약점
2	제거되지 않고 남은 디버그 코드	디버깅을 위해 작성된 코드를 통해 인가되지 않은 사용자에게 중요정보가 노출될 수 있는 보안약점
3	시스템 데이터 정보노출	사용자가 볼 수 있는 오류 메시지나 스택 정보에 시스템 내부 데이터나 디버깅 관련 정보가 공개되는 보안약점
4	Public 메소드부터 반환된 Private 배열	Private로 선언된 배열을 Public으로 선언된 메소드를 통해 반환(return)하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열이 수정될 수 있는 보안약점
5	Private 배열에 Public 데이터 할당	Public으로 선언된 데이터 또는 메소드의 인자가 Private로 선언된 배열에 저장되면, Private 배열을 외부에서 접근할 수 있게 되는 보안약점

7. API 오용

번호	보안약점	설 명
1	DNS lookup에 의존한 보안결정	DNS는 공격자에 의해 DNS 스푸핑 공격 등이 가능함으로 보안결정을 DNS 이름에 의존할 경우, 보안결정 등이 노출되는 보안약점
2	취약한 API 사용	취약하다고 알려진 함수를 사용함으로써 예기치 않은 보안위협에 노출될 수 있는 보안약점

참고4		모바일 앱 점검항목(기능 보안취약점 기준 )

항목		세부 점검내용
FV-1	임의기능	FV-1.1	명세되지 않은 기능 존재 여부
		FV-1.2	악성행위 기능 존재 여부 (불법 녹음, 임의 데이터 전송, 임의로 위치정보 수집‧전송 등)
FV-2	최소권한	FV-2.1	관리자 권한으로 동작되는 기능(권한상승 포함) 존재 여부(공통)
		FV-2.2	인가되지 않은 API 사용(공통)
		FV-2.3	동일한 개인키로 서명된 다른 앱과 UID 공유 여부(Android)
		FV-2.4	기능사용 요청 권한과 기능사용 여부 적절성 여부(Android)
		FV-2.5	인텐트 권한의 올바른 설정 여부(Android)
FV-3	입력값 유효성	FV-3.1	외부 입력값의 유효성 (지정된 길이 초과, 악성코드 포함 등) 검증 기능 존재 여부
FV-4	중요정보 관리	FV-4.1	주민등록번호, 여권번호, 면허번호, 외국인등록번호, 금융정보(계좌정보 등)에 대한 암호화 저장 여부
		FV-4.2	주민등록번호, 여권번호, 면허번호, 외국인등록번호, 금융정보(계좌정보 등)에 대한 암호화 전송 여부
		FV-4.3	비밀번호 및 바이오정보에 대한 일방향 암호화 저장 여부
		FV-4.4	개인위치정보의 안전한 저장을 위한 암호화 적용 여부
		FV-4.5	개인위치정보의 안전한 전송을 위한 암호화 적용 여부
		FV-4.6	사용자 인증 방법의 적절성 유무
		FV-4.7	비밀번호 조합규칙(영문‧숫자‧특수문자 등 조합 9자리 이상 등)
		FV-4.8	앱과 관련된 앱(또는 웹) 서버의 기능, 중요정보 관리기능 등 점검(필요시 점검 수행)
FV-5	플랫폼 보안모델	FV-5.1	루팅, 탈옥 등과 같은 플랫폼 변조 기능 존재 여부
		FV-5.2	플랫폼에서 제공하는 보안기능 사용의 적절성 여부
FV-6	상용/공개용 모듈	FV-6.1	상용 또는 공개모듈 사용 목적 및 기능의 적절성 여부
		FV-6.2	해당 모듈에 대한 개발업체의 안전성 확인 방법 및 결과의 적절성 여부
FV-7	공개영역 취약점	FV-7.1	모바일 플랫폼(예, 안드로이드, iOS, 윈도우모바일 등) 등에 대해 알려진(및 신규) 취약점 존재 여부
FV-8	모바일 대국민서비스 보안공통기반 적용의 적절성	FV-8.1	모바일 공통기반 기능 구현의 적절성 여부
FV-9	기타	FV-9.1	신청제품의 서비스 특성에 따른 추가적인 보안취약점 존재 여부

참고5		신청서식(신청기관 작성) * 검증대상으로 선정된 후 제출

접 수 번 호 제 호	모바일 대국민 전자정부서비스 앱 소스코드 검증신청서
신청기관	①신청기관명
	②담당자 (직책)		부서명
			전화
			이메일
개발기관	③개발업체명
	④개발자 (직책)		부서명
			전화
			이메일
모바일앱 정보	⑤서비스 명칭
	⑥서비스분야	□행정 □대민(세부분야 : )
	⑦구현유형	□앱 □하이브리드앱(앱+웹) □기타( )
	⑧개발플랫폼	□구글 □애플 □MS □기타( )
	⑨운영체제
	⑩개발언어
	⑪앱식별자
	⑫소스코드 라인수
	⑬공통기반	□사용 □사용안함
		사용인 경우: □행정 □대민(항목 : )
상기와 같이 모바일 대국민 전자정부서비스 앱 소스코드 등에 대한 보안성 검증을 신청하며, 기재사항에 허위사실이 없음을 확인합니다. 년 월 일 신청기관장 (서명 또는 인) 한국인터넷진흥원장 귀하

검증신청서 작성요령

1. 해당하는 빈칸에 ☑ 와 같이 표기한다.

2. 각 항목의 작성요령은 다음과 같다.

① 신청기관의 기관명을 기재한다.

② 검증신청 업무 담당자 성명, 직책, 부서명, 전화번호, 이메일주소 등을 기재한다.

③ 개발기관(업체)의 상호 또는 명칭을 기재한다.

④ 개발업무 담당자 성명, 직책, 부서명, 전화번호, 이메일주소 등을 기재한다.

⑤ 모바일 앱 명칭을 기재한다.

⑥ 서비스 분야(행정/민원)을 선택하고 민원인 경우 세부분야를 기재한다.

※분야 : (1)정보조회 (2)제증명 발급신청 (3)납부‧결제 (4)사례신고 (5)의견수렴 (6)예약 (7)공공정보제공 (8)위치정보/증강현실 (9)재난안전알림

⑦ 앱 구현 유형에 따라 해당 항목에 표기한다.

⑧ 앱 개발플랫폼 유형에 따라 해당 항목에 표기한다.

⑨ 앱 설치․운영 대상 운영체제 명칭과 버전번호를 기재한다.

⑩ 앱 개발언어를 기재한다.

⑪ 식별자(예, kr.or.kisa.app)를 기재한다.

⑫ 소스코드 라인수를 기재한다.

⑬ 해당 앱이 모바일 보안공통기반에서 동작하는지 여부를 기재한다.