인기 있는 Android 앱에서 코드 난독화가 얼마나 흔할까요?

지적 재산을 훔치거나, 민감한 사용자 정보에 접근하거나, 백엔드 서버의 거의 모든 것에 접근하는 것이 목표이든, 많은 표적 공격은 클라이언트 측 애플리케이션의 구조를 파악하고 취약점을 파악하기 위해 해당 애플리케이션의 일부를 리버스 엔지니어링하는 것으로 시작됩니다. 최종 공격이 백엔드에서 발생하더라도, 클라이언트 측을 분석하면 해당 애플리케이션의 API 및 인증 메커니즘에 대한 중요한 정보를 얻을 수 있는 경우가 많습니다.

이러한 이유로 우리는 코드 강화가 필요하다고 믿습니다. 원래 알고리즘을 사용하거나 민감한 데이터로 작동하는 모든 앱에 대해 협상 불가.

2023년에 OWASP는 2번째 버전을 정의했습니다. 모바일 Application Security 검증 표준(MASVS)모바일 앱 보안을 강화하려는 앱 개발자와 앱의 취약점을 찾으려는 보안 테스터를 위한 가이드라인을 제공합니다. 또한 Application Security 제품 공급업체는 다음과 같습니다. Digital.ai 오늘날의 앱 보안 환경을 생각하는 방법에 대한 프레임워크. OWASP의 MASVS-회복력 컨트롤이 완벽하게 맞는 방법 Digital.ai (그리고 그 이전의 Arxan도) 코드 강화와 변조 방지에 대해 생각합니다.

  • MASVS-회복력-1: 앱은 플랫폼의 무결성을 검증합니다.
  • MASVS-회복력-2: 앱은 변조 방지 메커니즘을 구현합니다.
  • MASVS-회복력-3: 앱은 정전 방지 분석 메커니즘을 구현합니다.
  • MASVS-회복력-4: 앱은 동적 분석 방지 기술을 구현합니다.

플랫폼의 무결성을 보장하는 한편, 변조 방지 및 동적 분석은 종종 더 효과적이지만, 정적 분석 없이 이러한 기능을 구현하면 고급 공격자가 쉽게 이를 발견하고 무력화할 수 있는 취약성이 있습니다.

이를 염두에 두고 오늘날 앱에서 다음을 구현하는 것이 얼마나 일반적인지 평가해 보겠습니다. MASVS-회복력-3 이를 위해 Google Play에서 가장 인기 있는 무료 앱 40개를 검토하여 코드 난독화의 명확한 징후를 찾았습니다.

우리가 찾은 것

연구 결과를 완전히 이해하려면 먼저 방법론을 설명해야 합니다. Java나 Kotlin과 같은 바이트코드 기반 언어는 클래스와 메서드 이름을 유지하는 경우가 많습니다. 코드가 난독화된 경우에도 이러한 식별자는 리버스 엔지니어에게 앱의 아키텍처를 이해하고 공격을 수행할 수 있는 충분한 단서를 제공할 수 있습니다. 이름 변경 또는 이름 난독화는 코드에서 이러한 식별 정보를 제거합니다. 이름 변경(즉, 읽을 수 있는 식별자가 없음)의 존재는 매우 시각적이고 쉽게 발견할 수 있기 때문에, 본 분석의 기준으로 사용했습니다.

대상 앱을 디컴파일한 후, 적용 범위 이름을 변경하여 3가지 범주로 분류했습니다.

  • 이름 변경 없음: 앱의 아무 것도 이름이 바뀌지 않았는데, 이는 보안이 존재하지 않거나 취약하다는 것을 나타냅니다.
  • 로컬 이름 변경: 앱의 일부 고유한 부분만 이름이 변경되었는데, 이는 보안을 위해 RASP(런타임 애플리케이션 자체 보호) 라이브러리를 사용하거나 손쉬운 구성을 의미할 수 있습니다.
  • 글로벌 이름 변경: 대부분의 코드 이름이 변경되어 포괄적인 보안 솔루션과 사려 깊은 구성을 사용했음을 나타냅니다.

선택된 앱 중 37%는 전혀 보호되지 않았고, 28%는 몇 개의 클래스 이름만 바뀌었으며, 나머지 35%는 대부분의 클래스에 이름 변경이 적용되었습니다.

여기서 주목해야 할 점은 특정 구성 요소(분석된 앱의 28%)만 이름을 변경하면 실제로 해당 부분이 눈에 띄게 될 수 있다는 것입니다. 그렇게 하면 공격자가 집중적으로 공격하여 제거할 수 있는 가장 민감한 로직이나 보안 제어가 강조되기 때문입니다. 반면, 전체 코드베이스(분석된 앱의 35%)에 걸쳐 더 균일하게 이름을 변경하면 이러한 신호가 가려져 중요한 대상을 식별하기가 훨씬 더 어려워집니다. 이로 인해 보호된 코드를 분석하는 작업이 훨씬 더 어려워지고, 앱 리버스 엔지니어링(공격자에게 가장 중요하면서도 제한된 자원)에 소요되는 시간이 크게 늘어납니다. 많은 경우, 이렇게 복잡성이 증가하는 것만으로도 추가 시도를 저지하기에 충분합니다.

이러한 결과는 상당수의 앱 개발자가 앱 보안에 대해 어느 정도 생각을 했다는 것을 보여주지만, 주목받는 앱 중 최소 3분의 1은 여전히 ​​쉽게 검사, 수정, 재패키징할 수 있는 코드로 출시될 예정입니다.

이것은 무엇을 의미 하는가?

이는 보호되지 않거나 보안 수준이 낮은 앱은 리버스 엔지니어링 및 변조의 표적이 되기 훨씬 쉽기 때문에 중요합니다. 대부분의 앱에서 이는 지적 재산권 유출, API 키 노출, 공격자가 악용할 수 있는 비즈니스 로직 노출을 의미합니다. 게임의 경우, 부정행위, 모딩 또는 복제된 버전의 앱이 출시될 가능성이 높아지며, 이는 수익과 브랜드 신뢰도에 직접적인 영향을 미칩니다. 현재 배포 현황을 보면 일부 팀은 보안을 중요하게 생각하지만, 많은 팀은 여전히 ​​코드베이스의 상당 부분을 노출시키고 있음을 알 수 있습니다.

분명한 것은 기본적인 클라이언트 측 보안은 가시성이 높은 앱들 사이에서조차 여전히 보편적인 표준이 아니며, 더 나은 일관성과 인식이 절실히 필요하다는 것입니다. 이 시리즈의 다음 글에서는 보안이 잘 된 앱을 분석하는 것이 보호가 전혀 없거나 구현이 쉽지 않은 앱에 비해 얼마나 어려운지 자세히 살펴보겠습니다.

당신은 또한 좋아할 거라