본문 바로가기

[칼럼] NHN AppGuard와 안드로이드 코드 보안의 효과적인 개선 방법 (1)

개발자의 Security Development Lifecycle 단계별 보호조치 방안을 함께 고민하고 활용할 수 있는 기술을 소개합니다.

코드 변조 위협

모두 잘 아시다시피, 코드 보안은 안드로이드 개발 작업에서 매우 중요한 요소입니다. 하지만 앱 초기 개발 단계부터 코드 보안에

대해서 많이 고려되고 있지 않은 것도 사실입니다. 이런 부분을 효과적으로 개선할 수 있는 다양한 방법에 대해서 이야기하려고

합니다. 안드로이드 모바일 앱은 다음과 같이 소스 코드 노출 및 변조 보안 위협을 가지고 있습니다.

1. 디컴파일 (Decompile)

컴파일된 안드로이드 코드(DEX)는 간단한 디컴파일 관련 도구(apktool, jadx..) 들로 원본과 비슷한 Java 소스 코드 형태로 아주

쉽게 되돌릴수 있습니다.

디컴파일 된 소스코드를 활용하여 프로그램 로직을 쉽게 검색하고 분석 가능하며 중요한 데이터를 얻기가 용이합니다.

예를 들면 인증에 사용된 키값이나 노출되어서는 안 되는 백그라운드 관리 서버 주소 등과 같은 중요한 데이터 유출이 가능합니다.

2. 디버깅 (Debugging)

GDB, IDA, JDB 동적 디버깅 도구를 활용해서 런타임에 앱 데이터와 로직을 동적으로 추출하고 수정이 가능합니다.

중요 함수의 매개 변수 및 리턴값을 쉽게 획득하여 로그 정보를 바탕으로 고정된 하드 코드된 대칭 암호화, CBC 모드의 고정 IV 얻어

암호화된 중요한 데이터 (인증, 결제, 개인정보등)의 복호화가 가능합니다.

3. 리패키징 (Repackaging)

APK 파일은 디컴파일하여 앱 내 중요 로직을 수정해서 변조된 APK 파일로 재포장 및 배포가 쉽습니다.

보안 네트워크 통신 (HTTPS, SSH)으로 서버과 암호화 통신을 하더라도 원본 코드를 변경해서 여전히 해독이 용이합니다.

멀리 보지 않더라도 자사 서비스인 운수도원 안드로이드 앱에 불법광고 SDK를 삽입해서 변조된 앱으로 마켓에 유통된 대표적인

사례가 있습니다.

 

 

보안 개발 (Security Development Lifecycle)

코드 보안을 효과적으로 개선하려면 아래과 같이 앱 개발 라이프 사이클 전반에 걸쳐 다양한 방식으로 보안 위험을 줄임으로써

소프트웨어적인 보안 결함을 최소화해야 합니다. 또한 위와 같은 코드 변조 위협에 대비하기 위해 NHN AppGuard (NHN 앱가드)를 앱 빌드시 자동 적용될 수 있도록 개발 프로세스 내의 릴리스 단계에 통합하는 것이 필요합니다.

 

1. 개발 단계 (Development)

개발자는 안드로이드 앱 개발 단계에 아래와 같은 보안 항목에 대해서 이해해야 하며 구현하면서 적용을 함께 검토해야 합니다.

  • 보안 키보드 : 중요한 입력에 대해서는 악성코드에 의한 키로깅을 방지하기 위해서 보안 키보드를 활성화해야합니다.
  • 암복호화 : 코드에서 하드 코딩된 키, 로컬 세그멘테이션 암호화 저장을 피하고 화이트 박스 키 사용을 고려해야 합니다.
  • 통신 보안 : 중간자 공격 (man-in-the-middle attack), 인증서 약점 확인 (weak check) 등으로 인해 통신 프로토콜 분석 후 크랙되므로 통신 데이터 암호화 및 체크섬 등의 인증 유효성 검사가 필요합니다
  • 데이터 검증: 서명 확인, 검증된 JNI 로딩, 네트워크 단계에서 APK의 파일이 변조되었는지 체크해야 합니다.
  • 로그 누설 방지 : 디버깅 로그를 남기지 않고 로그 메세지는 자바 난독화 적용을 검토해야 합니다.
  • 민감한 데이터 유출 : 일반 텍스트로 민감한 데이터 저장을 피하고 로컬 저장 장치 (sharedPreferences, sqlite등) 암호화를 고려해야 합니다.
  • 중요한 로직 개발 : 중요 로직은 jni 레이어 구현을 권장하며 코드 난독화와 결합된다면 분석 난이도를 향상할 수 있습니다.

개발 및 테스트 단계에서는 보안 위험 비용이 낮고 배포 및 운영 단계의 보안 문제에 대한 비용이 높으므로 개발자는 개발 단계부터 코드 보안성 확보에 대한 중요성을 인식해야 합니다.

2. 테스트 단계 (Test)

테스트 단계에서는 소프트웨어 결함뿐만 아니라 자동화된 취약점 스캔도구를 활용해서 보안 결함에 대해서도 지속적으로 코드 수정 및 보완을 해야 합니다.

취약점 스캐닝 (Vulnerability Scan)

취약점 스캐닝에서 블랙 박스 테스트는 일반적인 방법 중 하나이며 기존 테스트 프로세스에서도 쉽게 통합할 수 있습니다. 자동화된 취약점 스캔닝 도구를 통해 취약점 세부 정보, 취약한 코드 라인, 위험 수준, 수정 제안 등을 쉽게 얻을 수 있습니다.안드로이드 APK만 업로드하면 자동으로 취약점 스캔을 해주는 모바일 앱 보안 테스트 프레임워크인 Mobile Security Framework 은 훌륭한 도구입니다.


3. 릴리즈 단계(Realease)와 4. 운영 단계(Operation)는 NHN AppGuard와 안드로이드 코드 보안의 효과적인 개선 방법 (2)편에서 확인해주세요 :)

 

NHN AppGuard와 안드로이드 코드 보안의 효과적인 개선 방법 (2)

NHN AppGuard와 안드로이드 코드 보안의 효과적인 개선 방법 (1)편에 이어 작성 된 글입니다. NHN AppGuard와 안드로이드 코드 보안의 효과적인 개선 방법 (1) 개발자의 Security Development Lifecycle 단계별 보

nhnappguard.nhncloud.com