본문 바로가기
프로그래밍 놀이터/안드로이드, Java

#5 모바일 앱 보안 강화 - 안드로이드 모바일 앱 모의해킹

by 돼지왕왕돼지 2020. 11. 23.


모바일 앱 보안 강화


5.1. 시큐어 코딩 개요


-

시큐어 코딩이란 개발 단계에서 보안 취약점을 사전에 제거하여 안전한 소프트웨어를 개발하는 코딩 기법으로, CENT 에서 처음 제안되어 현재는 국내외에서 다양한 표준 코딩 기법들이 발표되고 있다.



-

대부분의 보안 취약점은 개발자의 미숙한 코딩에서 비롯되어 발생하는 것으로, 개발 단계에서 안전하게 개발할 경우, 대부분의 보안 취약점을 예방할 수 있다.

물론 프로그램 언어나, Platform적 문제나, 소프트웨어 설계상의 문제점으로 발생하는 취약점들도 있다.

투자 비용 대비 가장 안전하게 소프트웨어를 개발할 수 있는 방법은 개발 단계에서 제거하는 것이다.



-

한국인터넷진흥원에서 발행하고 있는 시큐어 코딩 가이드는 다음과 같다.

    소프트웨어 개발 보안 가이드

    JAVA 시큐어 코딩 가이드

    C 시큐어 코딩 가이드

    Android-JAVA 시큐어 코딩 가이드



-

안드로이드 관련 시큐어 코딩 기법은 JSSEC(Japan Smartphone Security Association)에서 발표된 Android Application Secure Design/Secure Coding Guidebook” 이 가장 대표적이다.





5.2. PMD 활용


5.2.1. PMD 란?


-

PMD(Programming Mistake Detector)는 정적 분석 도구로, 개발 과정에서 소프트웨어의 잠재적인 위협을 찾아주는 오픈소스 도구다.

다양한 개발도구에서 플러그인 형태로 지원되고 있다.




5.2.2. PMD 설치


-

안드로이드 스튜디오에 플러그인 형태로 지원된다.



-

Tools > QAPlug > Analyze Code 를 통해 분석할 수 있다.




5.2.3. 인시큐어뱅크 소스 코드 PMD 활용





5.3. FindBugs / FindSecurityBugs


5.3.1. FindBugs 란?


-

FindBugs 는 자바 코드에서 버그를 찾기 위한 정적 분석 도구로, 매릴랜드 대학교에서 개발하여 GNU 라이센스 하에 무료로 배포되는 오픈소스 프로그램이다.

FindBugs 는 윈도우, 리눅스, 맥 OS 를 지원하며 GUI 기반의 실행 환경과 다양한 개발 도구의 플러그인으로 지원된다.




5.3.2. FindSecurityBugs 란?


-

FindBugs 에서 보안 취약점에 좀 더 중점적인 검사를 해주는 정적 분석기로, 오픈소스로 제공되고 있다.




5.3.3. FindBugs/FindSecurityBugs 활용





5.4. 코드 난독화 적용


-

C언어의 경우 EXE 나 DLL 형태로 개발되기 때문에 앱에 대한 역공학이 어렵지만,

자바로 개발된 앱은 자바라는 언어의 특성상 클래스 파일로부터 바이트코드를 추출해 원본 코드로 디컴파일이 가능하다.


이 문제를 해결하기 위한 앱 위변조 방지 기술 중 하나가 코드 난독화(Code Obfuscation)기술이다.

코드 난독화는 역공학 시 프로그램 로직을 쉽게 판단하기 어렵게 코드를 꼬아 놓는 기술로, 앱에 대한 역공학을 수행하는 공격자가 역공학을 통해 원본 소스 코드를 유추하기 어렵게 만든다.



-

자바에서 주로 사용하는 난독화 기술로는 식별자 변환, 제어 흐름 변환, 문자열 암호화, API 은닉, 클래스 암호화 등이 있다.



-

식별자 변환 기법은 클래스 필드 혹은 메서드 이름을 의미 없는 값으로 치환하여 코드 분석을 어렵게 하는 기법이다.



-

흐름 제어는 클래스나 메서드의 실행 순서를 변환하여 역공학 시 쉽게 코드 흐름을 따라가지 못하게 방해하는 기법이다.



-

문자열 암호화 기술과 클래스 암호화는 이름 그대로 개발 시 사용된 문자열과 클래스를 암호화하여 치환하고, 앱 내부에 복호화하는 영역을 추가하여 쉽게 노출될 수 있는 민감한 데이터나 클래스 파일을 보호한다.



-

API 은닉 기법은 앱 개발 시 사용된 라이브러리를 감추는 기술로, 개발된 자바의 버전이나 안드로이드 API 버전 등을 쉽게 노출되지 않게 보호하는 기법이다.




5.4.1. 프로가드 난독화 적용 방법


-

DashOPro, Allatori, DexGuard 등과 각티 많이 알려진 상용 난독화 도구도 있다.

Proguard 는 식별자 변환만을 지원하지만,

DashOPro 와 Allatori 는 는 제어 흐름 변환, 문자열 암호화도 지원하고,

DexGuard 는 API 은닉과 클래스 암호화까지도 지원한다.




5.4.2. 프로가드 난독화 활용 방법




5.4.3. 인시큐어뱅크에 적용한 사례





5.5. 마무리하며




댓글0