StrandHogg 2.0 공격 설명

click fraud protection

StrandHogg 2.0은 위험한 새로운 Android 취약점입니다. 이것이 사용자에게 미치는 영향과 개발자가 이로부터 앱을 보호할 수 있는 방법은 다음과 같습니다.

오후 10시입니다. 당신의 활동이 어디에 있는지 알고 있나요? 수백만 대의 Android 기기에서 악용될 수 있는 새로운 취약점이 있으며, 이 취약점 역시 매우 불쾌합니다. 간단히 말해서, 이 설계 결함으로 인해 공격자는 자신의 활동(페이지)을 다른 앱 위에 표시할 수 있으며 잠재적으로 사용자가 개인 데이터를 제공하도록 혼란을 줄 수 있습니다. 이 취약점은 StrandHogg 2.0으로 명명되었으며 최근에 의해 공개되었습니다. 프로몬, 노르웨이 보안 회사.

StrandHogg 2.0 취약점은 이론적으로 Honeycomb(3.0)부터 Android 9 Pie(9.0)까지의 Android 버전을 실행하는 모든 Android 기기에 영향을 미칩니다. 를 기반으로 최신 Android 버전 분포 통계, 그 말은 모든 Android 장치의 약 91.8%가 StrandHogg 2.0에 취약합니다.. 취약점이 할당되었습니다. CVE-2020-0096 그리고 주어진 심각도 수준은 "심각"입니다. 작동하는 데 특별한 권한이 필요하지 않으며 사용자 상호 작용 없이 거의 완전히 작동할 수 있습니다. 사용자가 해야 할 일은 악성 코드가 숨겨져 있는 앱을 여는 것뿐입니다. 그러면 악용에 취약해집니다.

Promon은 친절하게도 개념 증명 앱과 소스 코드를 보내주어 우리가 최선을 다할 수 있도록 했습니다. 익스플로잇이 작동하는 방식, 이것이 사용자에게 중요한 이유, 개발자가 앱을 보호할 수 있는 방법을 설명합니다. 그것에 반대합니다.


작동 방식

Gmail을 사용하고 있고 웹 링크를 클릭했다고 가정해 보겠습니다. 최근 앱 화면으로 이동하면 웹페이지가 Gmail '내부'에 있는 것처럼 보일 수 있습니다. 미리보기에는 웹사이트가 표시되지만 앱 아이콘과 이름은 여전히 ​​Gmail에서 가져온 것입니다. 이는 앱/활동이 동일한 작업에서 다른 앱/활동을 시작할 때 발생하는 일입니다. 이제 의도적으로 해당 링크를 열지 않았다고 상상해 보세요. 여러분에게는 이것이 Gmail 앱의 일부인 것처럼 보입니다. 이는 StrandHogg 2.0이 악용하는 동작입니다.

여기서는 몇 가지 세부 사항을 생략해야 하지만 이 공격이 작동하는 방식은 대략 다음과 같습니다. 다음에서는 공격자가 사용자의 Gmail 로그인 정보를 얻으려고 한다고 가정해 보겠습니다.

  1. 사용자는 악성 앱을 다운로드하고(물론 악성 앱인지도 모른 채) 엽니다.
  2. 백그라운드에서 앱은 Gmail을 열고 그 위에 유사한 로그인 활동을 배치한 다음 다른 활동을 시작합니다.
  3. 사용자가 Gmail을 열고 Gmail의 로그인 화면처럼 보이지만 실제로는 공격자의 피싱 활동입니다.

2단계에서 시작된 최종 활동은 의심을 피할 수 있는 모든 활동이 될 수 있습니다. 앱은 충돌을 가장하고 홈 화면으로 돌아갈 수도 있고, 아무 일도 일어나지 않은 것처럼 기본 활동으로 열릴 수도 있습니다. 사용자가 볼 수 있는 유일한 의심스러운 점은 모든 활동이 시작될 때 여러 개의 오프닝 애니메이션이 나타나는 것입니다. 최악의 부분은 Gmail이 열린 것처럼 보이지도 않는다는 것입니다.

출처: 프로몬

물론 공격자는 가짜 로그인 화면을 보여주는 것 이상의 일을 할 수 있습니다. 대신 악성 앱이 권한 메시지를 표시하여 사용자를 속여 원치 않는 권한을 부여하도록 할 수 있습니다. 접근성과 같은 특별한 권한을 요청하면 사용자가 의심스러울 수 있지만 저장소 액세스와 같은 것으로는 많은 피해를 입힐 수 있습니다.


기술적인 부분

다음 섹션은 StrandHogg 2.0의 작동 방식에 대한 높은 수준의 개요입니다. Promon은 향후 몇 달간 전체 세부 정보를 공개하지 않을 예정이므로 이 익스플로잇이 어떻게 구현되는지 정확히 공유할 수 없습니다. 하지만 우리가 이야기할 수 있는 몇 가지 기술적 세부 사항이 있습니다.

간단히 말해서 StrandHogg 2.0은 Android를 탈취합니다. Context.startActivities() 세 가지 인텐트를 사용하는 API 메서드입니다.

  • 첫 번째 인텐트는 이 예의 경우 Gmail을 시작하는 인텐트입니다. 다음과 같이 표시되어 있습니다. Intent.FLAG_ACTIVITY_NEW_TASK.
  • 두 번째 의도는 악의적인 의도입니다. 이 예에서는 유사 로그인 활동에 대한 것입니다. 이 인텐트에는 플래그가 없습니다.
  • 세 번째 의도는 주의를 산만하게 하는 것입니다. 이를 통해 사용자는 자신이 탭한 앱(예: 공격을 시작한 앱) 대신 Gmail이 무작위로 열리는 것을 의심하지 않게 됩니다. 다음과 같이 표시되어 있습니다. Intent.FLAG_ACTIVITY_NEW_TASK.

그런 다음 이러한 모든 의도는 배열로 전달됩니다. startActivities() 방법.

두 번째 인텐트의 플래그 부족이 여기서 핵심입니다. 그렇게 함으로써 우리는 기본적으로 위의 Gmail 예제를 복제했습니다. 작업은 기술적으로 Gmail의 작업이지만 최상위 활동은 공격자의 활동입니다. 그런 다음 사용자가 Gmail의 홈 화면 아이콘을 클릭하면 Gmail 대신 공격자의 활동이 표시됩니다.


개념의 증거

Promon이 우리에게 보낸 정보를 통해 우리는 그들의 개념 증명을 복제할 수 있었습니다. 다음은 Android 9 Pie를 실행하는 Samsung Galaxy Note8에서 실제로 작동하는 모습을 보여주는 화면 녹화입니다.


완화 기술 및 문제

이제 위의 내용을 코드로 복제하는 것만으로는 실제로 작동하지 않습니다. 이는 완전한 예가 아니며, 이를 작동시키기 위해 공격자가 수행해야 하는 몇 가지 다른 작업이 있는데, 이를 공유할 수 없습니다. 하지만 스스로 추측하기가 특별히 어렵지 않으며 이것이 이 공격을 매우 위험하게 만드는 이유 중 하나입니다. StrandHogg 2.0은 구현하기가 상대적으로 쉽지만 완화하기는 어렵습니다.

완화에는 다음을 사용하는 모든 앱을 블랙리스트에 올리는 것만으로는 충분하지 않습니다. startActivities(), 합법적인 용도가 많이 있기 때문입니다. 이에 대한 탐지 알고리즘을 자동화하는 것도 정말 어렵습니다. 악의적인 개발자는 모든 종류의 트릭을 사용하여 StrandHogg 2.0 구현을 Google Play Protect와 같은 서비스에 효과적으로 보이지 않게 할 수 있습니다. StrandHogg 1.0에서는 공격자가 악성 앱의 AndroidManifest.xml에 속성을 추가하도록 요구했는데, 이는 상대적으로 감지하기 쉽습니다. 반면 StrandHogg 2.0은 전적으로 Java/Kotlin에서 작동합니다.

난독화, 반사 및 다양한 코딩 스타일을 고려하면 이 익스플로잇을 사용하는 앱을 자동으로 적절하게 탐지하는 것은 비현실적입니다. 게다가 사용자가 StrandHogg 2.0 공격의 대상이 된다면 사용자는 이를 알지 못할 수도 있습니다. Gmail을 열고 로그인 화면이 나타나면 세션이 만료되었다고 생각하고 아무 생각 없이 로그인 세부정보를 입력할 수 있습니다.

응답을 위해 Google에 연락했을 때 대변인은 다음과 같은 진술을 제공했습니다.

"우리는 연구원들의 노고에 감사하며 그들이 확인한 문제에 대한 수정 사항을 발표했습니다. 또한 Google Play 프로텍트는 이 기술을 사용하는 앱을 포함한 악성 앱을 감지하고 차단합니다."

이는 좋은 것으로 보이며 StrandHogg 2.0 공격에 대해 최소한 어느 정도 효과가 있기를 바랍니다. 하지만 Google Play 프로텍트는 주목할 가치가 있습니다. 하지 않았다 수동 검사를 수행한 후에도 개념 증명 앱을 악성으로 감지합니다.

프로몬은 "StrandHogg 2.0 취약점을 활용하는 실제 악성 코드는 관찰되지 않았습니다.," 그러나 익스플로잇이 처음으로 발견되었다는 보장은 없습니다. 이러한 이유로 Promon은 개발자가 런처 활동을 설정하여 앱을 보호할 것을 권장합니다. launchMode 둘 중 하나에 플래그 지정 singleTask 또는 singleInstance. 이러한 플래그 중 하나는 StrandHogg 2.0이 의존하는 작업 주입을 방지합니다. 그러나 활동에서 이러한 플래그 중 하나를 사용하면 특정 앱 흐름에 문제가 발생할 수 있으므로 항상 바람직하지는 않습니다.

Promon은 또한 도서관처럼 들리는 자체 "Promon SHIELD의 인앱 보호" 제품을 홍보하고 있습니다. 앱 개발자가 앱 프로세스의 작업을 모니터링하여 불규칙성을 확인하기 위해 구현할 수 있는 것입니다. 삽입. 실제로 효과적인 개발자 또는 사용자 완화 전략이 없기 때문에 제조업체가 이 문제를 최대한 빨리 해결하기 위해 패치를 구현하는 것이 매우 중요합니다.

고맙게도 Promon은 이 공격을 공개하기 전에 책임 있는 공개 지침을 따랐습니다. 아직 완전히 공개되지 않았습니다. Promon은 StrandHogg 2.0이 어떻게 작동하는지 완전히 공개하기까지 90일을 기다리고 있습니다. 공장). 이후 Google은 이 공격에 대한 패치를 Android 8.0 Oreo, Android 8.1 Oreo 및 Android 9 Pie에 백포트했습니다. 2020년 5월 Android 보안 패치 수준(SPL). Android 10 이상의 사용자는 취약하지 않지만 그 이유는 확실하지 않습니다. 이는 활동 시작 및 Google이 이를 작업 스택에 통합하는 방식과 관련된 Android 10의 새로운 제한 사항과 관련이 있을 수 있습니다. Promon은 "Android 10에서는 공격이 완전히 효과가 없으며 활동은 다음과 같이 여러 작업과 별도의 작업 스택으로 분할됩니다. adb shell dumpsys activity activities."

장치 제조업체가 여전히 보안 업데이트를 제공하는 경우(자세한 내용은 여기서 보안 패치 프로세스가 어떻게 작동하는지), 가능한 한 빨리 업데이트를 요청해야 합니다. 그렇지 않은 경우에는 어떤 앱을 다운로드하고 실행하는지 주의해야 합니다(어차피 그렇게 해야 하지만).

StrandHogg 2.0에 대한 자세한 내용과 사용 사례는 다음을 확인하세요. 프로몬 홈페이지 공식 발표. 맞춤형 ROM 개발자의 경우 StrandHogg 2.0 공격을 방지하기 위한 관련 AOSP 커밋을 찾을 수 있습니다. 여기 그리고 여기.


공개 일정

Promon이 StandHogg 2.0 문서에서 공유한 공개 타임라인은 다음과 같습니다.

  • 2019년 12월 4일 – Google에 문제를 보고했습니다.
  • 2019년 12월 4일 – PoC «악성 앱» 및 동영상을 Google과 공유
  • 2019년 12월 4일 – Google은 보고서 수신을 확인했습니다.
  • 2019년 12월 9일 – Google은 발견 항목의 심각도를 «중요»로 설정했습니다.
  • 2019년 12월 9일 – Google에서 문제를 재현할 수 있음을 확인합니다.
  • 2020년 2월 14일 – 3월 초에 90일 공개가 가까워진다는 사실을 Google에 알리고 Google 측에 상태를 요청합니다.
  • 2020년 2월 14일 – Google은 4월이 수정 사항을 출시할 수 있는 가장 빠른 시기라고 응답합니다.
  • 2020년 2월 14일 – 완화를 위해 노력하고 있음을 Google에 알립니다.
  • 2020년 2월 14일 – 구글이 응답합니다. 그들은 해결 방법을 연구 중이며 우리가 권장하는 완화 방법을 공유할 수 있는지 묻습니다.
  • 2020년 2월 17일 – 4월까지 공개를 유보할 수 있음을 Google에 알립니다. CVE 번호를 요청합니다
  • 2020년 2월 17일 – 우리는 완화 전략과 플랫폼 완화를 구상하는 방법을 공유합니다.
  • 2020년 3월 23일 – Google은 CVE ID(CVE-2020-0096)로 응답합니다.
  • 2020년 3월 23일 – Google은 Android용 수정 사항이 5월에 일반 공급될 것이라고 응답했습니다.
  • 2020년 3월 23일 – Google은 공개를 5월로 연기하는 것을 고려할 것인지 묻습니다.
  • 2020년 3월 27일 – 공개를 5월까지 연기하겠다고 답변
  • 2020년 4월 22일 – Google은 5월 보안 게시판에 취약점에 대한 패치가 포함될 예정이라고 알려줍니다.