In 앱실링 블로그

why code obfuscation is not enough for application security

우리 일상 깊숙이 자리 잡은 모바일 앱은 은행업무부터 쇼핑, 소셜 네트워킹, 건강 관리까지 다양한 앱이 우리의 삶을 편리하게 만들어주고 있습니다. 하지만 이러한 편리함의 이면에는 보안 위협이 도사리고 있습니다. 리버스 엔지니어링은 해커들이 대표적으로 사용하는 해킹 수법으로 앱 위변조, 데이터 유출과 같은 피해가 발생할 수 있습니다. 많은 기업이 이에 대응하기 위해 코드 난독화를 사용하고 있지만, 이것만으로 보안이 충분할까요? 이번 블로그는 앱 보안에 있어 난독화만으로 충분하지 않은 이유와 보안을 강화할 수 있는 방법에 대해 알아보겠습니다. 

1. 코드 난독화란?

코드 난독화는 소스코드의 구조와 동작 방식을 숨기기 위해 변형하여 사람이 이해하기 어렵게 만드는 보안 기술입니다. 난독화를 적용하면 변수명, 함수명, 클래스명 등을 의미 없는 문자열로 변경하고 코드 흐름을 복잡하게 만들어 의도를 파악하기 어렵게 만듭니다.

예를들어 다음과 같이 데이터를 전송하는 코드를 작성했다고 가정해 봅시다.

public void sendData(String userData) {
ServerConnection connection = new ServerConnection();
connection.send(userData);
}

난독화를 적용한 코드는 다음과 같이 변환될 수 있습니다

public void a(String b) {
c d = new c();
d.e(b);
}

이렇듯 코드를 난독화하면 해커는 코드의 기능과 로직을 확인할 수 있는  변수명, 함수명, 클래스명 등을 읽을 수 없어 파악하기 어려워집니다.

 

2. 코드 난독화만으로 보안이 부족한 이유

코드 난독화는 소스코드를 읽기 어렵게 하여 해킹의 난이도를 높이지만 완전히 보호할 수 없습니다. 코드 난독화만으로 보안이 부족한 이유는 다음과 같습니다.

1. 고도화된 리버스 엔지니어링

해커들의 리버스 엔지니어링 기법은 날로 진화하고 있습니다. 발전된 디컴파일러와 리버스 엔지니어링 툴은 난독화된 코드도 분석하여 원래의 코드로 복원하거나 코드의 로직을 파악하는 데 사용되어 난독화를 우회하여 해킹을 할 수 있게 해줍니다.

2. 동적 분석에 취약

코드 난독화는 앱의 작동 방식을 분석하는 동적 분석에 취약합니다.해커는 앱 실행할 때 앱의 동작 방법을 분석하여 데이터 추출, 앱 작동방식 조작 등의 공격을 가할 수 있습니다. 

3. 코드 외 취약점

모바일 앱의 취약점은 코드에서만 발생하지 않습니다. 라이브러리, 네트워크, 서버 등 다양한 취약점이 존재하며 코드 수준의 보안만 제공하는 난독화는 이러한 취약점을 보호해주지 못합니다.

이렇듯 코드 난독화는 코드를 분석하기 어렵게 하지만, 코드의 로직은 변하지 않기 때문에 분석을 시도한다면 여전히 접근이 가능합니다. 또한, 코드 이외의 취약점에 대한 보안을 제공하지 않기 때문에, 난독화만으로는 앱을 완전히 보호할 수 없습니다.

 

3. 추가적인 보안 대책

앞서 언급한 것과 같이 코드 난독화는 복잡해지는 보안 위협 환경에 모두 대응하기 어렵습니다, 이 때문에 추가적인 보안이 필요합니다. 다음은 보안을 강화할 수 있는 보안 대책입니다.

1. 코드 무결성 검증

코드가 난독화되어 있다 하더라도 해커는 앱을 변조하거나 악의적인 코드를 삽입할 수 있습니다. 코드 무결성 검증은 앱이 실행될 때마다 코드의 변조 여부를 검사하여 무결성을 확인해 변조된 앱의 실행을 차단합니다.

2. 런타임 애플리케이션 자가 보호(RASP)적용

RASP는 앱이 동작하는 동안 실시간으로 모바일 앱을 보호하는 보안 기능입니다. RASP는 앱의 컨텍스트를 이해하고, 정상적인 동작과 비정상적인 동작을 구별하여 해킹 시도를 탐지합니다. 공격이 감지되면 자동으로 앱의 작동을 중지하거나 해당 동작을 차단하여 앱 실행 중 발생하는 해킹으로부터 강력한 보안을 제공합니다.

3. 코드 암호화

코드 암호화는 난독화의 부족한 보안성을 강화하는 데 사용할 수 있는 대안입니다. 코드 난독화는 코드를 읽기 어렵게 만드는 데 반해, 코드 암호화는 코드를 읽을 수 없게 만듭니다. 암호화된 코드는 암호화 키 없이는 복호화할 수 없기 때문에 DEX, SO, DLL 등의 소스코드를 분석할 수 없게 되어 리버스 엔지니어링 공격에 강력합니다.

4. 안전한 네트워크

모바일 앱 해킹 중에는 네트워크 전송 중에 발생하는 중간자 공격의 가능성이 있습니다. SSL/TLS 적용, 인증서 고정(Certificate Pinning) 등을 통해 안전한 통신 프로토콜을 사용하여 이러한 공격을 방지해야 합니다.

해킹으로부터 안전한 모바일 앱 서비스를 제공하기 위해 위와 같이 다계층(multi-layer) 보안을 도입해야 합니다. 하지만 이러한 보안을 모두 도입하고 지속적으로 업데이트 하는 것은 매우 어려우며 많은 리소스를 투입해야 합니다. AppSealing은 이를 해결하기 위해 강력한 보안을 제공하는 모바일 앱 솔루션을 제공하고 있습니다.

 

4. AppSealing  모바일 앱 보안 솔루션

AppSealing은 강력한 보안 기능을 제공하는 통합 모바일 앱 보안 솔루션입니다. 별도의 코드 수정 없이도 다양한 보안 기능을 손쉽게 적용할 수 있어 개발 시간과 비용을 절약할 수 있습니다.

AppSealing의 주요 기능

    • 코드 암호화: 소스 코드를 암호화하여 리버스 엔지니어링 공격을 방지합니다.
    • RASP 적용: 실시간 해킹 공격을 감지하고 차단하여 앱을 보호합니다.
    • 코드 무결성 검증: 앱의 변조 여부를 확인하여 안전한 실행을 보장합니다.
    • 손쉬운 적용: 별도의 코드 수정 없이도 보안 기능을 빠르게 적용할 수 있습니다.

결론

모바일 앱 해킹 위협은 날이 갈수록 증가하고 있으며, 기업은 저작권 보호, 고객 데이터 보호, 기업의 평판 보호 등을 위해 강력한 보안을 적용해야 합니다. AppSealing은 이러한 보안 요구 사항을 손쉽게 충족시킬 수 있는 모바일 앱 보안 솔루션을 제공합니다. 적은 리소스로 쉽고 빠르게 적용할 수 있는 강력한 보안 AppSealing으로 서비스를 안전하게 보호하세요.


앱실링-문의하기-appsealing-contact-us

앱 개발자가 꼭 알아야 할 취약점 진단 5단계mobile app security misunderstandings