[TECH] React Native는 안전할까?
React Native는 Facebook에서 앱 개발을 위해 만든 프레임워크로 진화된 hybrid application ( web 적인 요소와 디바이스의 리소스에 접근할 수 있는 권한을 동시에 가진 형태 ) 을 쉽게 개발할 수 있도록 지원하는 프레임워크입니다.
이번 포스트에서는 최근 많이 출시되고 있는 React Native로 개발된 모바일 앱의 보안성과 보호해야 할 요소에 대하여 설명합니다.
이번 포스트에서는 최근 많이 출시되고 있는 React Native로 개발된 모바일 앱의 보안성과 보호해야 할 요소에 대하여 설명합니다.
이전까지의 mobile hybrid application은 webview를 이용하여 web을 표현할 수 있었지만, 서비스에 필요한 사용자의 모바일 디바이스 리소스 ( 기기 정보, 카메라, 저장소, 전화,…)에 접근하려면 다소 복잡한 단계를 거쳐야 하는 한계를 가지고 있었습니다.
이러한 이유로 초기 많이 출시되었던 hybrid application이 Native application으로 전환하게 되었습니다.
하지만 React Native가 출시되면서 web을 통한 표현뿐 아니라 Java script를 이용하여 디바이스 리소스의 사용 및 접근도 가능해짐으로써 서비스 운영사는 하나의 web 화면으로 앱(APP)적인 요소까지 동시에 쓸 수 있어 서비스 운영 측면과 빠른 앱 개발속도 면에서 각광을 받고 있습니다.
하지만 보안적인 측면에서 보자면 React Native는 서비스를 구현하고 운영하기에 용이한 장점을 가지고 있지만, 앱의 동작을 위한 핵심로직이 Script 언어인 Java script를 이용하여 앱을 구동시키기 때문에 일반 Native application보다 핵심로직 탈취와 소스 코드 해킹면에서 취약한 요소를 가지고 있습니다.
모바일 앱에서 주로 사용되는 언어별 보안성은 아래와 같습니다.
( 아래에서 표현된 보안성은 3가지 언어별 카테고리의 상대적인 등급이므로 절대적인 평가가 아님을 참고하여 주십시오. )
※ 여기서 표현한 보안성은 위 3개의 카테고리 중 상대적인 평가이므로 Binary code로 제작된 앱(APP)은 해킹할 수 없다거나 보호를 하지 않아도 된다는 의미는 아닙니다.
위와 같이 Java script는 모바일 앱을 제작하는 언어 중 소스 코드 보호 면에서 가장 낮은 보안성을 가지고 있음을 알 수 있으며 Java script로 개발된 앱의 핵심 코드 ( 사용자 로그인, 상품 구매,...)는 React Native로 제작된 앱(APP) Package(.apk or aab) 내 Bundle 파일로 존재하게 되므로 해당 파일은 쉽게 해킹의 타켓이 될 수 있습니다.
이러한 이유로 초기 많이 출시되었던 hybrid application이 Native application으로 전환하게 되었습니다.
하지만 React Native가 출시되면서 web을 통한 표현뿐 아니라 Java script를 이용하여 디바이스 리소스의 사용 및 접근도 가능해짐으로써 서비스 운영사는 하나의 web 화면으로 앱(APP)적인 요소까지 동시에 쓸 수 있어 서비스 운영 측면과 빠른 앱 개발속도 면에서 각광을 받고 있습니다.
하지만 보안적인 측면에서 보자면 React Native는 서비스를 구현하고 운영하기에 용이한 장점을 가지고 있지만, 앱의 동작을 위한 핵심로직이 Script 언어인 Java script를 이용하여 앱을 구동시키기 때문에 일반 Native application보다 핵심로직 탈취와 소스 코드 해킹면에서 취약한 요소를 가지고 있습니다.
React Native로 제작된 앱(APP)은 Native application보다 핵심로직 탈취와 소스 코드 해킹에 취약한 요소를 가지고 있습니다
모바일 앱에서 주로 사용되는 언어별 보안성은 아래와 같습니다.
( 아래에서 표현된 보안성은 3가지 언어별 카테고리의 상대적인 등급이므로 절대적인 평가가 아님을 참고하여 주십시오. )
1. Script Language
· 종류 : Java script, Python, Ruby,...
· 구성 : 컴파일 되어진 소스 코드의 형태가 아니라 개발자가 개발한 원시 소스 코드의 형태
· 설명 : 스크립트 언어는 개발자가 개발한 원시 소스 코드의 형태로 노출되기 때문에 공격자는 어떠한 노력 없이 앱의 핵심로직을 쉽게 파악하고 수정이 가능
· 보안성 : 하
2. BYTE CODE
· 종류 : Java
· 구성 : Multi OS에서 동작할 수 있도록 만들어진 언어로써 기계어와 소스 코드의 중간 형태로 컴파일
· 설명 : Byte Code는 Java에서 하나의 소스 코드로 다양한 OS에서 사용할 수 있도록 고안된 형태의 결과물이므로 Decompiler를 통하여 소스 코드화가 가능
· 보안성 : 중
3. BINARY CODE
· 종류 : C or C++과 같은 언어로 개발된 실행 파일 및 라이브러리
· 구성 : 각 OS 및 CPU에 맞게 기계어로 변환된 실행 파일
· 설명 : Binary code는 기계어로 구성된 실행 파일로 구성되며, 해당 코드를 이해하기 위해서는 reverse engineering에 대한 이해도가 필요
· 보안성 : 상
※ 여기서 표현한 보안성은 위 3개의 카테고리 중 상대적인 평가이므로 Binary code로 제작된 앱(APP)은 해킹할 수 없다거나 보호를 하지 않아도 된다는 의미는 아닙니다.
위와 같이 Java script는 모바일 앱을 제작하는 언어 중 소스 코드 보호 면에서 가장 낮은 보안성을 가지고 있음을 알 수 있으며 Java script로 개발된 앱의 핵심 코드 ( 사용자 로그인, 상품 구매,...)는 React Native로 제작된 앱(APP) Package(.apk or aab) 내 Bundle 파일로 존재하게 되므로 해당 파일은 쉽게 해킹의 타켓이 될 수 있습니다.
» React Native Bundle file in App Package
» Inside the React Native Bundle
React Native로 앱이 제작될 경우 핵심 로직이 위와 같은 Bundle 파일로 존재하기 때문에 해당 Bundle file의 소스코드가 노출되지 않도록 보호하는 것이 가장 중요합니다.
또한, 해당 파일이 변경되거나 앱의 다른 관련 파일이 변경되어 서비스에 피해를 주는 것을 방지하기 위해서는 앱의 불법적인 위변조를 방지할 수 있는 위변조 방지에 대한 기능도 필요합니다.
만약 여러분의 앱이 결제 기능 및 사용자의 민감한 정보를 처리할 수 있는 앱이라면 Bundle file의 보호 및 위변조 방지에 대한 대비가 반드시 선행되어야 안전한 서비스가 가능하여질 것입니다.
LIAPP, 최상의 서비스만을 제공하겠습니다.
#android_application_security #android_application_security #ios_application_security #mobile_hybrid_application #React_Native #index.android.bundle