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. 마무리하며
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] ViewModel 에 대해 알아보자 (0) | 2021.01.21 |
---|---|
[android] LiveData 에 대해 알아볼까 (0) | 2021.01.20 |
#4 앱 자동 분석 시스템 - 안드로이드 모바일 앱 모의해킹 (0) | 2020.11.22 |
#3 취약점 항목별 상세 실습 part 2. - 안드로이드 모바일 앱 모의해킹 (3) | 2020.11.21 |
#3 취약점 항목별 상세 실습 part 1. - 안드로이드 모바일 앱 모의해킹 (0) | 2020.11.20 |
댓글