2014/06/18

Smartphone app 개발시 보안 checklist

요즘 시간적인 여유가 생기면서, 기존에 머리속으로 해 왔던 일들을 일부 정리하는 시간을 가지고 있는데,
그 중 하나로 스마트폰 앱 개발 시 보안성심의 체크리스트를 작성해 보았다.

스마트폰 앱 개발 시 체크해야 하는 체크리스트들은 사실, 그 앱이 어떤 앱이냐에 따라 많이 달라질 수 밖에 없다.
금융권 앱의 경우는 금융감독규정을 비롯한 여러가지 법률과 규정, 가이드라인 준수 여부를 추가로 cross check해야 할 뿐 아니라, 당장 사용자들의 돈 거래가 달려있기 때문에 사용자가 좀 더 불편하더라도 보안 적용을 감내하도록 만들곤 한다.
하지만 반대로 게임 앱의 경우는 입력값 위변조(메모리 해킹)나 앱의 위변조로 인한 게임 데이터 조작(치팅 등)이 큰 문제가 되지만, 만약 스마트폰 기기에서 사용자가 불편함 없이 그 앱을 실행시킬 수 없으면 당장 고객을 잃기 때문에 앱의 퍼포먼스도 많이 중요하다.
또한, 일부의 보안이 중요하지 않은 편의성 앱이나 사용자의 조작이 어려운 static한 앱들의 경우는 보안의 수준을 높여서 불편하게 만들 필요가 없을 것이다.

또한 스마트폰 앱의 검증은, 또한 기존의 native app의 경우와... 웹앱, 그리고 그 중간인 하이브리드 앱의 경우도 점검해야 하는 항목이 달라질 수 있다.
따라서 아래 내가 임의로 작성한 체크리스트의 경우는 전체 내용을 다 포괄할 수는 없겠지만, 최소한 앱의 점검을 위해서 고려해야 하는 항목들이 무엇이 있을지 고려하여 작성해 보았다.

다만, 앱스토어에서의 앱의 점검과 같이, 해당 앱 내에 악성기능을 숨겨놓았는지에 대한 확인 여부는 고려하지 않았고...
일반 기업에서, 신뢰할만한 개발자가 개발한 스마트폰 앱의 보안성 심의를 할 때 필요한 사항들에 대해 적어 보았다.

해킹 기술이 발전하여 관련 해킹 방법이나 툴들이 증가되게 되면, 추가적으로 체크해야 하는 항목들이 늘어날 수는 있겠지만,
기본적으로 필요하다고 생각되는 보안성 심의 점검 내용을 리스트업 해 보자.

1. 서비스 기획 점검

1) 해당 신규 서비스의 내용에 법률, 규정, 사회적 영향도에 문제가 없는가?

- 만약 문제가 될 소지가 있는 경우 관련 법률, 규정 검토 및 비슷한 사례 연구
- 특히 사용자 신규 가입 등의 개인정보 취급 시 개인정보보호법을 고려해야 하며, 정통망법, 신용정보법, 금융감독규정을 비롯 해당 서비스에서 취급하는 서비스에 따라 다양한 법률 및 규정, 가이드라인에 대해 문제가 없는지 모두(!!) 체크해야 하고, 법률에 내용이 상이할 경우 어떤 것을 우선시로 적용받는지 역시 확인해야 한다.
-클라우드컴퓨팅이 적용된 서비스의 경우, 인프라 관리자와 서비스 관리자가 상이할 경우 처럼 다양한 환경에서의 장애, 해킹, 정보 유출에 대한 법적 책임을 포함한 Risk 관리 등에 대해서도 사전에 고려 되어야 한다.

2) 해당 신규 서비스의 인프라가 기존에 있는 인프라를 이용하는 경우, 보안상 문제가 없는가?
- 물리적으로 같은 서버나 네트워크를 이용하는 경우, 가능한 비슷한 보안 수준인지 확인.
(취약한 서비스와 같은 서버에서 돌리는 경우, 이 서비스와 상관없이 취약 서비스로 인한 피해가 있을 수 있음)

3) 해당 서비스에서 사용하고 있는 기술에 보안 상 문제가 없는가?
 - 새로 개발된 신규 기술을 도입하는 경우, 해당 기술에 대한 취약점 여부 확인.

4) 서비스 가입, 로그인, 로그아웃, 비밀번호 변경, 탈퇴 등의 일련의 과정에 대해 문제가 없는가?
 - 사용자의 인증이 중요한 서비스의 경우는 해당 인증/인가시 충분한 보안을 고려하였고, 타인에 의해 도용될 소지가 없는지 확인해야 함.

5) 중요 서비스의 경우, 단말을 지정하여 이용하도록 하거나, 단말 분실 등의 문제가 생겼을 경우 고객센터를 통해 바로 서비스 중지가 될 수 있도록 하였는가?

6) 사용자 가입 전, 이용 고객에게 보안 유의사항에 대한 안내를 하였는가?

7) 모바일과 PC에서 동시에 사용 가능한 서비스인 경우, PC에서의 보안 수준 만큼 모바일에서도 준용하였는가? (비밀번호 등의 인증 강도 포함)

8) 내부적인 서비스에 대한 정책, 지침, 대응 절차, 약관 등에 대한 검토 및 담당자 확인.

9) 서비스 오픈 전 취약점 진단을 통한 취약점 수정 여부.

10) 보안사고 발생 시 사고 대응 절차 점검.

11) 피싱 공격에 대비해 온라인이나 마켓에서 주기적으로 점검하는지 여부.

12) 민감한 앱의 경우 배포 방법에 대한 고민 (앱스토어, 내부 사이트)
 -  제한된 사용자에 대해 서비스 되는 앱의 경우 어떤 방법이 더 안전한가?

13) 어플리케이션 취약점, 버그 발견 시 자동 업데이트 가능 여부


2. 기본 단말 영역 보안

1) 운영체제 위변조(루팅, 탈옥) 여부 확인


2) 키 로깅 여부 확인 (키보드 보안 무력화)

3) 안티바이러스 무력화, 또는 최신 패치 적용 여부 확인

4) 이 프로그램 실행 도중 다른 프로그램의 임의 실행/중지 여부 확인

5) 중요 정보(인증 정보, 금융정보, 개인 정보 등) 단말 내 저장 여부 확인

6) 중요 서비스인 경우 단말 내의 기본 보안 설정 적용 여부
 - 예. 스마트 오피스 앱의 경우 MDM 적용, 기본 단말 화면 잠금, 백신 설치 등.
 - 중요 서비스의 경우 화면캡쳐 및 화면 출력, 프로그램 통제, 문서보안 적용 여부.

7) 정해진 단말에서만 접근 가능해야 하는 서비스 인지 여부.
 - 단말의 고유 값을 이용해 미리 선 지정한 폰에서만 접근 가능해야 하는 서비스.



3. 클라이언트(앱) 서비스 보안

1) 서버에 임의의 조작된 명령어 실행 여부 

- 스니핑 등으로 패킷 확인 후 HTTP Proxy 등을 이용하여

2) SQL injection 
 - 서버, 클라이언트 모두 DB 사용 시

3) 프로그램 무결성 확인, 메모리 해킹 확인
 - 소스 코드 내 중요 정보 제거, 무결성 확인을 통한 변조된 어플리케이션 실행 방지,
  난독화 적용, 디버깅 탐지 등의 역공학 기술 적용 여부

4) 중요 데이터 전송 시 인증 여부
 - 파라미터 값 변조, 캐쉬 파일 변조, 바이너리 변조 등으로 타인의 정보 확인 가능 여부
 - 중요 데이터에 대해서는 비밀번호를 추가로 서버에서 확인 (비밀번호 위변조 여부)
 - 중요 비밀번호 전송 시 비밀번호의 복잡도 설정

5) 인증 세션 미비
 - 스니핑, 메모리 덤프 등으로 획득한 정보의 재사용 가능 여부
 - 인증정보의 노출 및 위변조 여부
 - 만료된 인증 세션에 대해 서버에서 체크. (세션 종료 처리 시간)
 - 다중 로그인 정책 여부
 - 중요 정보에 접근 시, 추가적인 인증을 수행하는지 여부
 - 일정회수 이상 비밀번호 오류 시 접근 통제 적용 여부
 - 일정 기간 입력이 없을 시 자동 잠금/로그오프 적용 여부

6) 디컴파일을 통한 프로그램 분석 (프로가드 등으로 난독화 여부)

7) 개발 단계에서 적용한  출력정보에 대한 제거 미비 여부
 - 디버깅 코드, 디버깅 로그 등 확인

8) 개인정보(중요 정보) 표시 제한 여부
 - 중요한 개인정보/중요정보의 경우 일부 * 등으로 마스킹 처리
 - 전체 공개 금지 등을 통해 열람 범위 최소화 적용

9) 메모리 덤프를 통한 중요 정보 노출 여부
 - 패스워드 등을 포함 일부 원하는 중요 데이터가 쉽게 평문으로 노출되는지 여부.

10) 암호화 강도 확인
- 중요 데이터의 경우 E2E 암호화를 적용하는데, 이때 안전한 암호 알고리즘, 안전한 키 길이, 안전한 키 주기를 사용하고 있는지. 암호화 정보를 통해 전송 중 위변조, 오류 체크.

11) 중요한 입력 정보에 대해 유출되거나 변조되지 않도록 보호
 - (특히 금융서비스) 가상 키보드, 키보드 후킹 방지 등

12) 중요 거래 시 부인방지 기능 적용

13) 중요한 정보 저장 시 관리 방안
 - 예) 공인인증서 파일의 경우 이동, 비번 변경 등에 대한 정책.

14) 중요한 정보 입력 시, 서버에서 확인 여부
- 예) 금융 데이터 전송 시 거래 데이터와 전자서명데이터 여부로 무결성 검증.

15) 테스트 데이터, 로깅, 파일 등의 존재 여부



4. 서버 서비스 보안

1) 서비스에 대한 비정상 행위에 대한 auditing 적용 여부(로깅)
 - 비정상 접속 종료, 강제 세션 종료, 비정상적인 접속 시도, 공격 시도 등.

2) 서비스 개시 전, 서버에 대한 보안 점검 여부

3) 서버 접근 시 담당 업무, 직급에 따른 접근 권한 부여 여부

4) 로깅에 대한 위변조 방지 조치, 작업내역에 대한 감사 여부

5) 타 서비스들과 동일 수준의 서버 보안 적용 여부, 취약점 진단 여부.

6) 클라이언트, 혹은 타 서버와의 통신에 사용되는 암호화 키 보관, 암호 알고리즘의 적정성 여부

7) 서버 폐기 시 정보 유출 방지를 위한 조치 여부

8) 서버가 위치한 장소에 대한 보안 대책 마련
  - 물리적 보안 적용 여부, 자연적 재해에 대비한 연속성 계획(장애 대응 프로세스)
  - 백업 시스템 적용 여부, 주기적인 검증 여부

9) DMZ 존에 서버가 있는 경우, 개인정보등이 포함된 중요 데이터를 로깅을 하는지 여부
  - 개인정보보호법에 의거, 개인정보가 포함된 평문 데이터 저장 금지.

10) 비밀번호는 hash로 조회되지만 복호화 할 수 없도록.

11) 인증이 중요한 스마트 오피스 등의 서비스인 경우, 퇴사자 등 임직원 정보에 대해 실시간 관리하는지 여부.

12) 서비스 접속 사용자에 대한 행위 로깅 (주기적 감사)

13) 서비스 관리를 위한 접속 사용자에 대한 행위 로깅 (주기적 감사)

14) 테스트 데이터,로깅 정보 및 디폴트 세팅 등에 대한 존재 여부

15) 오류/에러/예외 처리



5. 인프라 및 네트워크 보안

1) WIFI 등 공개(스니핑 가능한)된 곳에서 사용시 문제 될만한 패킷이 없는지

 - 중요 데이터들의 경우 암호화 적용, 안전하지 않은 WIFI 사용 금지 정책 적용 등 다양한 고려.

2) 서비스 인프라 구성이 보안상 적합한지 
 - 특히 내부 서버, 혹은 외부의 서버와의 연동이 있는 경우 연동 방법이나 연동 접점에 문제가 없는지 확인.

3) 서비스 구성에 따른 보안 적용이 적절한지 (보안 장비 적용 등)

4) 네트워크에 대한 침입탐지, 패턴 등에 대해 주기적 모니터링 및 최신 패턴 적용 여부

5) 정보보호 솔루션들에 대한 로그 기록 보관 및 유출 여부 확인

6) 특정 네트워크 대역에서만 접근해야 하는 서비스인지.
  - 기업 내부에서만 접근 가능한 서비스 기획 시 관련 정책 확인.

7) 장애 시 가용성 확보 방안(이중화)



일단 생각 나는 것들을 적어 보았는데,
실제 하이브리드 앱이나 웹앱의 경우는 웹 서버의 보안 점검 체크리스트가 추가되어야 하며,
요즘 스마트폰용 앱들의 경우도 PC에서 진행되는 각종 위협 요소들이 거의 그대로 답습되고 있는 만큼 비슷한 점검이 추가로 더 필요하다.



..