SlideShare a Scribd company logo
1 of 36
Android Task hijacking
Evgeny Blashko
Yury Shabalin
Отдел Тестирования Информационной Безопасности приложений
«Сбербанк Технологии»
whoami
• Evgeny Blashko
VTB24, 2A-SOFT
- Developing Mobile Applications
- Mobile application security analysis
• Yury Shabalin
Positive Technologies, Alfa-Bank
– SSDL integration, source code analysis
– Mobile application security analysis
– Developing
History
• USENIX Security Symposium 2015,
Towards Discovering and Understanding Task Hijacking in Android
In our research we find more interesting features…
Some Theory
Some Theory
Standard Behavior
Standard Behavior
Standard Behavior
What is "taskAffinity“ means
How "taskAffinity" works
Task hijacking
Magic
How to spread?
Transition #1 Demo example
Press Intro Press Back
Hijacking state transition #1
Возврат к “исходному” приложению
Useful advance to solve the problem
• Transition #1
– Don’t specify launchMode = “singleTask”
– Don’t set FLAG_ACTIVITY_NEW_TASK
If it necessary, use it with:
FLAG_ACTIVITY_CLEAR_TASK
Transition #2 Demo example
Press Фото
Hijacking state transition #2
Заменяем любое приложение малварью
Transition #3 Demo example
Press Фото
Hijacking state transition #3
Весьма вероятный случай
Useful advance to solve the problem
• Transition #2 and #3
– May be it’s good idea to create service, that would
check another task with “taskAffinity” of your
application
– Or create service that will compare certificate of
application that run with taskAffinity of your
application
Hijacking state transition #4
Редкий случай
Useful advance to solve the problem
• Transition #4
– Don’t specify allowReparenting
– Don’t specify taskAffinity
Transition #5 Demo example
Hijacking state transition #5
Развитие Activity Hijacking
Useful advance to solve the problem
• Transition #5
– Use explicit Intents if the destination Activity is
predetermined
– Verify the destination Activity if linking with another
application
Hijacking state transition #6
Prevent App uninstallation
- Is my application vulnerable?
- Yes.
Vulnerability % of apps*
Run malware from Launcher instead of legitim App 100
Send implicit intent for exported activities 93,9
Send implicit intent for exported activities and use intent
FLAG_ACTIVITY_NEW_TASK
65,5
Contains public exported activity and
launchMode=“singleTask”
14,2
Contains public exported activity and
allowTaskReparenting=“true”
1,4
* Statistics from research in 2015
Android versions & devices vulnerable to spoof from launcher
Android version Vulnerable
Android 5.x Yes
Android 6.x Yes
Android 7.x Yes
CyanogenMod 12.1 No
MIUI Yes
Device Vulnerable
Nexus x.x Yes
Xiaomi Yes
Samsung Yes
LG Yes
* No permission needed
* System Apps also vulnerable
Android Security Team
90 days left, so we can publish results
Useful advance to solve the problem
• Transition #1
– Don’t specify launchMode = “singleTask”
– Don’t set FLAG_ACTIVITY_NEW_TASK
If it necessary, use it with:
FLAG_ACTIVITY_CLEAR_TASK
• Transition #4
– Don’t specify allowReparenting
– Don’t specify taskAffinity
Useful advance to solve the problem
• Transition #5
– Use explicit Intents if the destination Activity is
predetermined
– Verify the destination Activity if linking with another
application
• Transition #2 , #3 and #6
– May be it’s good idea to create service, that would
check another task with “taskAffinity” of your
application
And you installed "calculator for an accountant"?
Questions?
AppSec Need You!
iOS Android Java developer Pentest
Telegram:
@R1p4eg
Mail:
Yury.shabalin@gmail.com
Mail:
30russian@gmail.com
Telegram:
@jd7drw

More Related Content

What's hot

Security Testing Mobile Applications
Security Testing Mobile ApplicationsSecurity Testing Mobile Applications
Security Testing Mobile Applications
Denim Group
 

What's hot (20)

Design Patterns: From STUPID to SOLID code
Design Patterns: From STUPID to SOLID codeDesign Patterns: From STUPID to SOLID code
Design Patterns: From STUPID to SOLID code
 
A story of the passive aggressive sysadmin of AEM
A story of the passive aggressive sysadmin of AEMA story of the passive aggressive sysadmin of AEM
A story of the passive aggressive sysadmin of AEM
 
OWASP Top 10 2021 Presentation (Jul 2022)
OWASP Top 10 2021 Presentation (Jul 2022)OWASP Top 10 2021 Presentation (Jul 2022)
OWASP Top 10 2021 Presentation (Jul 2022)
 
Metaploit
MetaploitMetaploit
Metaploit
 
Introduction To Exploitation & Metasploit
Introduction To Exploitation & MetasploitIntroduction To Exploitation & Metasploit
Introduction To Exploitation & Metasploit
 
DESIGN PATTERNS: Strategy Patterns
DESIGN PATTERNS: Strategy PatternsDESIGN PATTERNS: Strategy Patterns
DESIGN PATTERNS: Strategy Patterns
 
Security Testing Mobile Applications
Security Testing Mobile ApplicationsSecurity Testing Mobile Applications
Security Testing Mobile Applications
 
Spring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & MicrometerSpring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & Micrometer
 
SonarQube et la Sécurité
SonarQube et la SécuritéSonarQube et la Sécurité
SonarQube et la Sécurité
 
Threat Modelling
Threat ModellingThreat Modelling
Threat Modelling
 
Android Security & Penetration Testing
Android Security & Penetration TestingAndroid Security & Penetration Testing
Android Security & Penetration Testing
 
Pentest with Metasploit
Pentest with MetasploitPentest with Metasploit
Pentest with Metasploit
 
OWASP API Security Top 10 - API World
OWASP API Security Top 10 - API WorldOWASP API Security Top 10 - API World
OWASP API Security Top 10 - API World
 
External to DA, the OS X Way
External to DA, the OS X WayExternal to DA, the OS X Way
External to DA, the OS X Way
 
Secure coding practices
Secure coding practicesSecure coding practices
Secure coding practices
 
Pentesting Modern Web Apps: A Primer
Pentesting Modern Web Apps: A PrimerPentesting Modern Web Apps: A Primer
Pentesting Modern Web Apps: A Primer
 
Taking Hunting to the Next Level: Hunting in Memory
Taking Hunting to the Next Level: Hunting in MemoryTaking Hunting to the Next Level: Hunting in Memory
Taking Hunting to the Next Level: Hunting in Memory
 
Struts2
Struts2Struts2
Struts2
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design Patterns
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 

Similar to Android Task Hijacking

Building an AppSec Team Extended Cut
Building an AppSec Team Extended CutBuilding an AppSec Team Extended Cut
Building an AppSec Team Extended Cut
Mike Spaulding
 

Similar to Android Task Hijacking (20)

The Future of Software Security Assurance
The Future of Software Security AssuranceThe Future of Software Security Assurance
The Future of Software Security Assurance
 
Mobile App Security Testing -2
Mobile App Security Testing -2Mobile App Security Testing -2
Mobile App Security Testing -2
 
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
 
Essentials of Web Application Security: what it is, why it matters and how to...
Essentials of Web Application Security: what it is, why it matters and how to...Essentials of Web Application Security: what it is, why it matters and how to...
Essentials of Web Application Security: what it is, why it matters and how to...
 
Building an AppSec Team Extended Cut
Building an AppSec Team Extended CutBuilding an AppSec Team Extended Cut
Building an AppSec Team Extended Cut
 
Mike Spaulding - Building an Application Security Program
Mike Spaulding - Building an Application Security ProgramMike Spaulding - Building an Application Security Program
Mike Spaulding - Building an Application Security Program
 
Best Effort Security Testing for Mobile Applications - 2015 #ISC2CONGRESS
Best Effort Security Testing for Mobile Applications -  2015 #ISC2CONGRESSBest Effort Security Testing for Mobile Applications -  2015 #ISC2CONGRESS
Best Effort Security Testing for Mobile Applications - 2015 #ISC2CONGRESS
 
Navigating agile automotive software development
Navigating agile automotive software development Navigating agile automotive software development
Navigating agile automotive software development
 
BsidesMCR_2016-what-can-infosec-learn-from-devops
BsidesMCR_2016-what-can-infosec-learn-from-devopsBsidesMCR_2016-what-can-infosec-learn-from-devops
BsidesMCR_2016-what-can-infosec-learn-from-devops
 
Applicaiton Security - Building The Audit Program
Applicaiton Security - Building The Audit ProgramApplicaiton Security - Building The Audit Program
Applicaiton Security - Building The Audit Program
 
Applying formal methods to existing software by B.Monate
Applying formal methods to existing software by B.MonateApplying formal methods to existing software by B.Monate
Applying formal methods to existing software by B.Monate
 
Mitigating data theft_in_android
Mitigating data theft_in_androidMitigating data theft_in_android
Mitigating data theft_in_android
 
Are We Secure? Answering the Unanswerable
Are We Secure? Answering the UnanswerableAre We Secure? Answering the Unanswerable
Are We Secure? Answering the Unanswerable
 
How to Perform Continuous Vulnerability Management
How to Perform Continuous Vulnerability ManagementHow to Perform Continuous Vulnerability Management
How to Perform Continuous Vulnerability Management
 
The Dynamic Application Security Testing Process: A Step-by-Step Guide
The Dynamic Application Security Testing Process: A Step-by-Step GuideThe Dynamic Application Security Testing Process: A Step-by-Step Guide
The Dynamic Application Security Testing Process: A Step-by-Step Guide
 
Security Testing.pptx
Security Testing.pptxSecurity Testing.pptx
Security Testing.pptx
 
Introduction To Mobile-Automation
Introduction To Mobile-AutomationIntroduction To Mobile-Automation
Introduction To Mobile-Automation
 
Software Engineering-Part 1
Software Engineering-Part 1Software Engineering-Part 1
Software Engineering-Part 1
 
Ownux global March 2023.pdf
Ownux global March 2023.pdfOwnux global March 2023.pdf
Ownux global March 2023.pdf
 
Software testing career
Software testing careerSoftware testing career
Software testing career
 

More from Positive Hack Days

Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»
Positive Hack Days
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложений
Positive Hack Days
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Positive Hack Days
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET Core
Positive Hack Days
 

More from Positive Hack Days (20)

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + Qlik
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps Community
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложений
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложений
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application Security
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПО
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET Core
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опыт
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атаки
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Android Task Hijacking

Editor's Notes

  1. Когда мы начали развивать инициативу анализа мобильных приложений, искали гайды, изучали чеклисты и наткнулись на уязвимость, назваемую Activity Hijacking. Начали копать дальше и нашли доклад, представленный на одной из конференций. К сожалению, широкой огласки он не получил, и упоминаний о Task Hijacking больше нигде не встречалось. Прочитав, нам стало интересно и мы провели своё исследование на основе этого доклада. При этом выяснились интересные подробности и новые уязвимости, о которых мы расскажем сегодня. В рамках доклада расскажем частично материалы, которые мы почерпнули и адаптировали из доклада, а так же результаты своего исследования.
  2. Немного теории для дальнейшего понимания происходящего и того, как устроены приложения и процессы в Андроид. Основные компоненты, о которых пойдет речь в дальнейшей презентации: Активити – один из возможных компонентов приложения. Каждая активити – это отдельный графический экран со своими элементами, то, что пользователь видит на экране устройства. Каждое приложение имеет несколько активити для различных действий пользователя, то есть каждый новый экран – это Активити. Все Активити описаны в файле манифеста приложения. Таск – это коллекция активити, с которыми взаимодействовал пользователь во время работы приложения.
  3. Activity в task хранятся в виде стека, называемого back stack. Каждая новая Activity, запускаемая пользователем, располагается системой на верхушке этого стека. Таким образом, при нажатии на кнопку back – Activity, которая была на верху стека закрывается (уничтожается) и отображается Activity, которая была под ней. Отсюда и название – Back Stack.
  4. В дальнейшем будем использовать несколько понятий: Foreground Activity - Activity отображаемая на экране, т.е. находящаяся на верхушке стэка. Foreground Task – это task, в котором располагается foreground Activity. В системе может быть только одна foreground task, все остальные background. При переключении на задачу, находящуюся в background, все активити в таске останавливаются и остаются нетронутыми до тех пор, пока пользователь не вернется в приложение. Таким образом они попадают именно в то место и с тем backstack, на котором остановились в прошлый раз.
  5. Activity внутри back stack могут относится не только к запущенному приложению, но и к другим приложениям. Таким образом в Android построена бесшовная интеграция между различными приложениями. Рассмотрим ситуацию, когда в приложении осуществлена возможность просмотра видео Имеем следующее: На устройстве установлено приложение, которое позволяет просматривать видео. В другом приложении, с которым работает пользователь, есть видео-ролик При нажатии на кнопку просмотра видео, приложение запускает Activity, но не свою (зачем разрабатывать и тратить силы, когда уже всё готово), а Activity стороннего приложения, которое умеет воспроизводить видео. Запускается Activity видео-плеера, и эта Активити запускается в back stack`е нашего приложения, оказавшись на его верхушке. При нажатии на кнопку «Назад», Activity видео-плеера закрывается и мы возвращаемся экран нашего приложения. Это сделано для того, чтобы для пользователя создавалось ощущение работы с единым приложением и не было необходимости переключаться между приложениями для выполнения разовой функции.
  6. Каждая task в системе характеризуется таким атрибутом как taskAffinity. Он объявляет, к какому task`у должна присоединиться Activity при запуске. Это строка, которая либо определяется в манифесте приложения свойством android:taskAffinity=“application_1", либо по умолчанию равна ID приложения в системе (applicationId). Affinity task`а определяется значением taskAffinity его root-Activity (нижней в стэке). Если явно указывать значение taskAffinity, то можно заставить запускаться Activity в рамках произвольного таска.
  7. Итак, Android API при определении Activity позволяет задать произвольное значение для taskAffinity, таким образом указав task, к которой будет относиться эта Activity. Таким образом, каждое приложение в Android может породить несколько task.
  8. В т.ч. task, с taskAffinity стороннего приложения.
  9. А теперь немножко магии, чтобы стало понятно, о чем мы будем рассказывать и как это вообще работает
  10. Когда мы только опубликовали приложение, возник резонный вопрос, а кто же его будет скачивать, оно же находится черти-где и как его вообще найти.. Но тут на помощь пришёл незнакомец и предложил воспользоваться его услугами)
  11. Итак, давайте я попробую объяснить каким образом произошло то, что вы сейчас видели. Для начала, разберемся, как происходит запуск Activity в Android вообще: За загрузку Activity в Android отвечает Activity Manager Service. Покопавшись немного в исходниках, стало понятно, что при определенном launchMode=“singleTask” или интенте с FLAG_ACTIVITY_NEW_TASK сервис действует следующим образом: Для начала, если instance Activity уже существует, то Андроид выводит его на передний план, а не запускает новый Если же всё-таки требуется создание Activity, то AMS выбирает task в который необходимо «положить» созданную Activity при помощи поиска «совпадения» со всеми имеющимися task. Activity «совпадает» c task, если у них указано одинаковое taskaffinity. После найденного совпадения сервис кладет новый Activity на верхушку в «совпавший» task. Если же совпадений не найдено, сервис создаёт task и созданная Activity становится root-Activity Итак, попробуем теперь разобраться, что же происходило на самом деле: Первое. На нашем устройстве запущено вредоносное приложение, которое находится в background и исключено из списка недавних приложений (то есть пользователь никак его не видит) Второе, мы запускаем наше банковское приложение, в котором есть кнопка Intro, по нажатию на которую происходит проигрывание видео. При этом запуск Activity с проигрывателем видео осуществляется с помощью Intent с флагом FLAG_ACTIVITY_NEW_TASK или в Activity Player указан launchMode=“singleTask”. А у вредоносного приложения указан taskAffinity плеера. Таким образом, исходя из работы AMS – он нашёл «совпадающий» task, и положил плеер на верхушку его стека. В результате, вместо того, чтобы присоединиться к банковскому таску или запуститься в новом таске, приложение видеоплеера помещается на верхушку стэка вредоносного Task. После просмотра видео при нажатии на кнопку Back пользователь попадет уже в банковское приложение, во вредосное Mal-Activity 2.
  12. Для предотвращения уязвимостей, связанных с TaskHijacking, можно придерживаться следующих правил: Случай 1: Не указывать для activity launchMode = singleTask Не использовать FLAG_ACTIVITY_NEW_TASK. Если же его использование необходимо, то использовать его вместе с флагом FLAG_ACTIVITY_CLEAR_TOP Случай 4: Желательно не использовать allowReparenting и указания taskAffinity
  13. Рассмотрим самый интересный из приведенных примеров, подмена приложения из Launcher, которому подвержено любое приложение
  14. А вот тут самое интересное. Как мы помним из предыдущего примера, если в системе существует task с taskAffinity = taskAffinity запускаемого Activity, то сервис по управлению Activity должен положить вновь запускаемую активити на верхушку стека существующего приложения. То есть, в нормальном случае, согласно документации, должна запускаться Activity вызываемого приложения, AMS проверяет, если task с таким affinity и кладёт на верхушку стека этогого task. Пользователь видит нормальную активити, под которой лежит вредоносная. Но из-за бага в Android этого не происходит, а вместо этого восстанавливается уже запущенная ранее вредоносная Activity.
  15. Существует ещё один способ подменить приложение при запуске из Launcher. По умолчанию, как только Activity запускается и ассоциируется с Task, эта связь сохраняется на всём протяжении жизненного цикла Activity. Однако Android API позволяет указать такое свойство активити при её определении в манифесте как allowTaskReparenting, который работает следующим образом. Одновременно с этим свойством для активити указывается taskAffinity той задачи, на которую нужно пересадить эту активити при появлении указанной task. Пока в системе не будет этой task activity будет запускаться в таске своего приложения, т.е. с taskAffinity=applicationId. Как только в системе появится tasks с указанной affinity, activity тут же будет пересажена на верхушку её бэкстека. Таким образом для проведения атаки вредоносное приложение должно объявить для той активити, которую нужно отобразить пользователю вместо целевого приложения, соотв. св-ва – allowTaskReparenting и taskAffinity целевого приложения. Когда пользователь запустить целевое приложение, система тут же пересадит вредоносную активити на верхушку бекстека целевого приложения и отобразит её. ----- Однако, в Android существует флаг с названием allowTaskReparenting, который позволяет уже существующей Activity «перемещаться\пересаживаться» на созданный в системе task с таким же taskAffinity Как это происходит. В системе создаётся background task, который имеет 2 Activity (root Activity Mal-Activity 1) и Activity с настройкой allowTaskReparenting и taskAffinity необходимого приложения. Пользователь запускает приложение, создаётся новый task с taskAffinity, указанной в Mal-Activity 2 Во время запуска Mal-Activity 2 «пересаживается» на верхушку нового task и пользователь уже видит вредоносную Activity вместо обычной
  16. Случай 5: Использовать явные интенты, если известна конечная Activity Проверять, какая из Activity запущена при привязке к другому приложению Во всех остальных случаях, ждем исправления от AndroidTeam, но наша идея на данный момент заключается в том, что можно сделать сервис, который бы мониторил список task в системе и определял в нем наличие task с taskaffinity = id вашего приложения. Или сделать сервис, который бы проверял цифровую подпись приложения, от имени которого запущена root-Activity и куда «пересаживаются» созданные вашим приложением Activity
  17. В обратном случае, если необходимо поддержать бесшовную интеграцию между двумя приложениями, разработчики могут указать в валидном приложении allowTaskReparenting и указать taskAffinity другого легитимного приложения. Что произойдет в случае, если на устройстве есть malware: В background запущен вредоносный task с taskAffinity = taskAffinity, указанным в одной из Activity легитимного приложения Пользователь работает с приложением, запускает Activity, например чат, который по задумке разработчиков должен пересаживаться на другой таск AMS проверяет, что уже есть task с таким taskAffinity и пересаживает легитимную Activity на верхушку стека вредоносного task. Теперь, если пользователь захочет вернуться назад, то при нажатии на кнопку back попадёт во вредоносную Activity
  18. Для предотвращения уязвимостей, связанных с TaskHijacking, можно придерживаться следующих правил: Случай 1: Не указывать для activity launchMode = singleTask Не использовать FLAG_ACTIVITY_NEW_TASK. Если же его использование необходимо, то использовать его вместе с флагом FLAG_ACTIVITY_CLEAR_TOP Случай 4: Желательно не использовать allowReparenting и указания taskAffinity
  19. Возможен ещё один путь перенаправления пользователя на свою вредоносную Activity. Предположим следующее: В системе есть вредоносное приложение, одно из Activity которого выполняет вполне легитимную функцию, к примеру просмотр видео. При этом оно маскируется (имеет иконку) похожую на иконку искомого приложения. К примеру, у нас есть банковское приложение BankApp и мы делаем видео плеер с такойже иконкой и названием – BankApp Player Пользователь из легитимного приложения выбирает опцию просмотра видео, при этом это реализовано неявным интентом (то есть ему представляется выбор), каким приложением открыть данный файл. Пользователь видит, что среди программ есть приложение с аналогичной иконкой и похожим названием и выбирает его Вредоносная Activity запускается, оказывается на верхушке стека легитимного приложения и проигрывает файл Во вредоносной Activity переопределен метод onBackPressed, то есть переопределено поведение при нажатии кнопки Back. Его функция – перенаправлять пользователя во вредоносное приложение Пользователь посмотрел видео, нажимает на кнопку back, и попадает во вредоносное приложение. ???? Profit!
  20. Случай 5: Использовать явные интенты, если известна конечная Activity Проверять, какая из Activity запущена при привязке к другому приложению Во всех остальных случаях, ждем исправления от AndroidTeam, но наша идея на данный момент заключается в том, что можно сделать сервис, который бы мониторил список task в системе и определял в нем наличие task с taskaffinity = id вашего приложения. На данный момент эту уязвимость нельзя закрыть.
  21. Системные приложения по сути, не отличаются от устанавливаемых пользователем. Попробуем защититься от удаления нашего приложения. Что мы имеем: В системе запущена background task с affinity = com.android.settings (то есть, с приложением настроек) Пользователь хочет зайти в настройки и удалить приложение. Запускает из Launcher приложение настроек. AMS ищет в системе task с affinity=com.settings.android, находит и кладёт на верхушку стека Malware task Пользователь ходит по меню, заходит в удаление приложений, выбирает зловред и нажимает «Удалить». После этого ему выпадает диалоговое окно с просьбой подтвердить удаление. Это диалоговое окно является ничем иным, как еще одной Activity («Uninstaller» на слайде). В это время вредонос запускает свою Activity, с таким же taskAffinity и она попадает на верхушку стека, перекрывая собой диалоговое окно (Mal-Activity 2 на слайде) При этом у вредоносной Activity переопределен метод OnBackPressed, который снова запускает “Mal-Activity 1” в background и очищает stack, что приводит нас к состоянию 1 А как же удаление через adb? Всё очень просто, чтобы подлючить adb нужно сначала включить usb-debugging в настройках. Дальнейшее развитие вполне понятно =)
  22. В приведенной статье было проанализировано достаточно большое количество приложений из разных магазинов, на слайде приведен дополненный нами результат. Стоит добавить, что вредоносному приложению для реализации подобного вида атак не требуется каких-либо повышенных привилегий и не нужно запрашивать какие-либо permissions. Из-за того, что приложение использует только стандартные разрешенные способы взаимодействия с приложениями, Google без каких либо проблем и ограничений пропускает такие приложения в Play Market. Время проверки нашего приложения перед его публикацией составило 3 часа. 
  23. После выкладывания приложения в google play энтузиасты стали присылать информацию о версиях ОС и устройствах на которых это всё работает. За что им огромный респект. Но одновременно стало ясно что всё плохо и работает это практически везде. Единственным исключением на данный момент стал cyanogenmod, на котором не заработала подмена приложения из лаунчера. Стоит добавить, что вредоносному приложению для реализации подобного вида атак не требуется каких-либо повышенных привилегий и не нужно запрашивать какие-либо permissions. Кроме того, как ранее сказал Юрий уязвимы все приложения, в том числе системные.
  24. По итогам нашего исследования, был заведен баг в команду Android, он подтвержден, сейчас находится в работе. Но, прошло уже 90 дней с момента публикации уязвимости и в соответствии с политикой google можем рассказать про найденную уязвимость. Кстати, Anfroid определил эту уязвимость, как уязвимость среднего уровня. Ну что же, конечно, возможность подменить любое приложение, в том числе и системное – это конечно не серьёзная уязвимость.
  25. Для предотвращения уязвимостей, связанных с TaskHijacking, можно придерживаться следующих правил: Случай 1: Не указывать для activity launchMode = singleTask Не использовать FLAG_ACTIVITY_NEW_TASK. Если же его использование необходимо, то использовать его вместе с флагом FLAG_ACTIVITY_CLEAR_TOP Случай 4: Желательно не использовать allowReparenting и указания taskAffinity
  26. Случай 5: Использовать явные интенты, если известна конечная Activity Проверять, какая из Activity запущена при привязке к другому приложению Во всех остальных случаях, ждем исправления от AndroidTeam, но наша идея на данный момент заключается в том, что можно сделать сервис, который бы мониторил список task в системе и определял в нем наличие task с taskaffinity = id вашего приложения. На данный момент эту уязвимость нельзя закрыть.