본문 바로가기

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

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

 

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

개발자의 Security Development Lifecycle 단계별 보호조치 방안을 함께 고민하고 활용할 수 있는 기술을 소개합니다. ​ 코드 변조 위협 모두 잘 아시다시피, 코드 보안은 안드로이드 개발 작업에서 매

nhnappguard.nhncloud.com


3. 릴리스 단계 (Release)

안드로이드 앱은 배포 전에 코드 강화, 난독화 및 기타 기술을 사용하여 APK 파일 내의 코드가 해독되기 어렵게 강화해야 합니다.

공격 임계치 및 역공학에 대한 시간 비용을 늘리는 방안이 필요하며 다음과 같은 코드 강화 기술이 대표적입니다.

주요 기술로는 소스 코드 패킹 (DEX 암호화, SO 강화)과 난독화 (DEX, C/C++) 두 가지가 있습니다.

코드 패킹

1. DEX 암호화

DEX 파일에는 컴파일된 코드가 들어가 있습니다. 해커들이 리버스 엔지니어링을 통해 DEX 파일에서 JAR 파일 또는 Java 클래스

파일을 만들 수 있으므로, 해당 DEX 파일 암호화를 통해서 원본 코드를 보호합니다.

 

2. SO 강화

SO 파일은 Shared Objects library(공유 객체 라이브러리)의 약자로 C/C++ 언어를 사용하여 개발된 동적 라이브러리입니다.

SO 강화는 ELF 파일의 내부 코드 (C.C++) 커스텀 패킹 (실행 압축 + 암호화) 진행하며, 쉽게 분석 가능한 심볼 정보를 난독화하여

역공학에 의해 코드가 분석되지 않도록 방어해야 합니다.

 
코드 난독화

1. DEX 난독화

DEX 난독화는 소스 코드 내 문자열을 암호화하며 Native에서 복호화해야 하며 Proguard와 같은 도구를 활용해서 변수, 메소드,

클래스 이름을 식별하기 어렵게 해야 합니다.

DexGuard 나 ARXAN 등의 상용 솔루션은 함수 호출 관계를 재구성하여 공격자들로 하여금 분석을 방해하여 분석 소요 시간 증가,

분석 난이도 증가, 패턴 탐지/유사도 비교 우회 등의 목적으로 주로 사용됩니다.

 

2. C/C ++ 코드 난독화

C/C++ 난독화는 Obfuscator-LLVM 도구를 사용하여 효율적으로 적용이 가능합니다.

이 도구는 주로 다음과 같은 기능을 포함하고 있습니다.

제어 흐름 위조 및 병합 : if, while, for 및 do와 같은 제어문을 소스 코드 기능을 변경하지 않고 switch 분기 선택문으로 변환

 

 

 

 

인라인 대체 : 여러 위치에서 호출되는 중앙 함수를 대신해서 실제 함수의 본문으로 대체

문자열 암호화 : 문자열 상수를 암호화하고 런타임에 해당 문자열을 네이티브에서 복호화

표현 변환 : +, &, | 연산자를 동일한 결과를 반환하는 함수로 대체되는 기법

4. 운영 단계 (Operation)

운영 단계에서는 변조앱 및 해킹툴이 유통되는 블랙마켓 및 해킹 관련 커뮤니티 모니터링해야 하며,

해킹 징후를 사전에 감지해서 공격 패턴 파악 및 수집된 보안 로그 등을 활용해서 다양한 방식으로 대응해야 합니다.


요약

아래와 같이 앱 서비스 개발 시 시큐어 코딩 요구사항과 배포하기 전 단계에 취약점 점검, 코드 강화 및 네트워크 통신 계층의

무결성 검사 등을 고려하여 사전에 노출될 수 있는 보안 취약점을 최소화하고 릴리스 단계에서는 앱 보호 기술 적용을 통한

코드 보호를 통한 안전한 모바일 서비스를 기대합니다.

Security Development
Lifecycle
개발자
보안지원
개발
시큐어 코딩 적용
개발단계의 보안성 검토,
보안 개발 가이드
테스트
코드 취약점 스캐닝(선택),
코드 취약점 및 보안 위협 요소 제거
코드 취약점 스캐닝,
보안 취약점 검수
릴리스
코드 강화를 위한 패킹 및 난독화 (앱가드) 적용
코드 보호 기술 제공, 가이드
운영
로그 데이터 분석
불법복제 채널 모니터링,
로그 데이터 분석