From ce4c8c29064a8836372c1c68985c345e2c14ed51 Mon Sep 17 00:00:00 2001 From: Carlos Holguera Date: Mon, 5 Sep 2022 15:21:44 +0200 Subject: [PATCH] Add Common Test Case Column to Checklist and Other Pre-release Fixes (#2208) * more naming fixes, added links, upgraded images and logos * fix citation * enhance project and MASTG description and fix app vs application word * format first page * move misplaced clipboard text * add test case diff script * add common column to excel * fix excel --- CHANGELOG.md | 216 +----------------- CITATION.cff | 6 +- CODE_OF_CONDUCT.md | 2 +- CONTRIBUTING.md | 2 +- Crackmes/README.md | 2 +- Document/0x01-Foreword.md | 4 +- Document/0x02a-Frontispiece.md | 64 +++--- Document/0x02b-MASVS-MASTG-Adoption.md | 4 +- Document/0x02c-Acknowledgements.md | 17 +- Document/0x03-Overview.md | 42 ++-- Document/0x04a-Mobile-App-Taxonomy.md | 10 +- Document/0x04b-Mobile-App-Security-Testing.md | 53 ++--- .../0x06h-Testing-Platform-Interaction.md | 7 + Document/0x08a-Testing-Tools.md | 2 +- Document/CHANGELOG.md | 216 +----------------- .../Chapters/0x03/mstg-detailed-summary.png | Bin 108002 -> 0 bytes .../Images/Chapters/0x03/mstg-preparation.png | Bin 79828 -> 0 bytes .../Images/Chapters/0x03/mstg-spiderchart.png | Bin 110305 -> 0 bytes .../Images/Chapters/0x03/mstg-test-cases.png | Bin 119739 -> 0 bytes .../Chapters/0x03/owasp-mobile-overview.jpg | Bin 96822 -> 0 bytes .../Chapters/0x03/owasp-mobile-overview.png | Bin 0 -> 383616 bytes Document/Images/OWASP_logo.png | Bin 60250 -> 0 bytes Document/Images/OWASP_logo_white.png | Bin 67564 -> 37943 bytes Document/Images/owasp_mas_header.png | Bin 0 -> 235202 bytes Document/SUMMARY.md | 7 +- OWASP_logo.png | Bin 0 -> 11091 bytes PULL_REQUEST_TEMPLATE.md | 2 +- README.md | 6 +- docs/contributing/5_Style_Guide.md | 2 +- docs/news.md | 4 +- tools/docker/first_page.tex | 22 +- tools/docker/pandoc_makedocs.sh | 2 +- tools/scripts/excel_styles_and_validation.py | 6 +- tools/scripts/gen_all_excel.sh | 2 +- tools/scripts/testcase_diff.py | 46 ++++ tools/scripts/yaml_to_excel.py | 69 +++--- 36 files changed, 214 insertions(+), 601 deletions(-) delete mode 100644 Document/Images/Chapters/0x03/mstg-detailed-summary.png delete mode 100644 Document/Images/Chapters/0x03/mstg-preparation.png delete mode 100644 Document/Images/Chapters/0x03/mstg-spiderchart.png delete mode 100644 Document/Images/Chapters/0x03/mstg-test-cases.png delete mode 100644 Document/Images/Chapters/0x03/owasp-mobile-overview.jpg create mode 100644 Document/Images/Chapters/0x03/owasp-mobile-overview.png delete mode 100644 Document/Images/OWASP_logo.png create mode 100644 Document/Images/owasp_mas_header.png create mode 100644 OWASP_logo.png create mode 100644 tools/scripts/testcase_diff.py diff --git a/CHANGELOG.md b/CHANGELOG.md index ce80290414..8f6ebc731a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,217 +1,5 @@ # Changelog -## V1.2.1 and newer +All our Changelogs are available online at the OWASP MASTG GitHub repository, see the Releases page: -All our Changelogs are available online at the OWASP MSTG GitHub repository, see the [Releases page](https://github.com/OWASP/owasp-mastg/releases). - -## v1.2 - 25th July 2021 - -167 issues were closed since the last release. A full overview can be seen in Github Issues . - -326 pull requests were merged since the last release. A full overview can be seen in Github Pull Requests - -Major changes include: - -- Migrating the new document build pipeline from MASVS to MSTG. This allows us to build consistently the whole OWASP MSTG documents (PDF, docx etc.) in minutes, without any manual work. -- Besides numerous changes for the test cases we have a new Crackme - Android Level 4 and also new write-ups for the Crackmes. -- We removed all references to Needle and IDB tool, as both tools are outdated. -- References of OWASP Mobile Top 10 and MSTG-IDs are completely moved to MASVS -- Reworking of information gathering (static analysis) for Android Apps -- Update of Biometric Authentication for Android Apps -- New content and updates in the Android and iOS Reverse Engineering and Tampering chapters -- 3 new iOS Reverse Engineering test cases -- Translations of the MSTG are linked to the respective forks but are not part of the MSTG anymore -- Updated English, Japanese, French, Korean and Spanish checklists to be compatible with MSTG 1.2 -- Updated Acknowledgments, with 1 new co-author and contributor -- Added JNI Tracing for Android -- Added dsdump for dumping Objective-C and Swift content -- Added the procedure to sign the debugserver for iOS 12 and higher -- Added dependency-check to verify for vulnerabilities in libraries added by iOS package managers -- Added getppid as debugger detection (iOS) -- Added Domain/URL Enumeration in APKs -- Added introduction into Network.framework (iOS) -- Added UnSAFE Bank iOS Application -- Added information on SECCOMP (Android) -- Added native and java method tracing (Android) -- Added Android library injection -- Added Android 10 TLS and cryptography updates -- Updated code obfuscation for Android and iOS -- Added test case for Reverse Engineering Tools Detection - MSTG-RESILIENCE-4 (iOS) -- Added test case for Emulator Detection - MSTG-RESILIENCE-5 (iOS) -- Added an example with truststore to bypass cert pinning (Android) -- Added content to information gathering using frida (Android) -- Added Sec Consult, RandoriSec and OWASP Bay area as donators -- Added basic information gathering for Android and iOS -- Added Simulating a Man-in-the-Middle Attack with an Access Point -- Added gender neutrality to the MSTG -- Extended section about dealing with Xamarin Apps -- Updated all picture links (img tags) to be in markdown syntax -- Updated iTunes limitations and usage since macOS Catalina -- Added Emulation-based Analysis (iOS and Android) -- Added Debugging iOS release applications using lldb -- Added Korean translation of the checklist -- Updated symbolic execution content (Android) -- Added Ghidra for Android Reverse Engineering -- Added section on Manual (Reversed) Code Review for iOS -- Added explanation of more Frida APIs (iOS and Android) -- Added Apple CryptoKit -- Updated and simplified Frida detection methods -- Added introduction to setup and disassembling for iOS Apps -- Updated section about frida-ios-dump -- Added gplaycli (Android) -- Extended section on how to retrieve UDI (iOS) -- Added new companies in the Users.md list with companies applying the MSTG/MASVS -- Updated partially code samples to Swift 5 -- Adding Process Exploration (Android and iOS) -- Updated best practices for passwords, added "Have I Been Pwned" -- Updated SSL Pinning fallback methods -- Updated app identifier (Android and iOS) -- Updated permission changes for Android O, P and Q -- Updated Broadcast Receiver section (Android) - -Several other minor updates include fixing typos and markdown lint errors and updating outdated links. - -We thank you all contributors for the hard work and continuously improving the document and the OWASP MSTG project! - -## v1.1.3 - 2 August 2019 - -- Updated Acknowledgments, with 2 new co-authors. -- Translated various parts into Japanese. -- A large restructuring of the general testing, platform specific testing and reverse-engineering chapters. -- Updated description of many tools: Adb, Angr, APK axtractor, Apkx, Burp Suite, Drozer, ClassDump(Z/etc), Clutch, Drozer, Frida, Hopper, Ghidra, IDB, Ipa Installer, iFunBox, iOS-deploy, KeychainDumper, Mobile-Security-Framework, Nathan, Needle, Objection, Magisk, PassionFruit, Radare 2, Tableplus, SOcket CAT, Xposed, and others. -- Updated most of the iOS hacking/verification techniques using iOS 12 or 11 as a base instead of iOS 9/10. -- Removed tools which were no longer updated, such as introspy-Android and AndBug. -- Added missing MASVS references from version 1.1.4: v1.X, V3.5, V5.6, V6.2-V6.5, V8.2-V8.6. -- Rewrote device-binding explanation and testcases for Android. -- Added parts on testing unmanaged code in Objective-C, Java, and C/C++. -- Applied many spelling, punctuation and style-related fixes. -- Updated many cryptography related parts. -- Added testaces for upgrade-mechanism verification for apps. -- Updated Readme, Code of Conduct, Contribution guidelines, verification, funding link, and generation scripts. -- Added ISBN as the book is now available at Lulu. -- Added various fixes for the .epub format. -- Added testcases on Android and iOS backup verification. -- Improved key-attestation related explanation for Android. -- Restructured OWASP Mobile Wiki. -- Removed Yahoo Weather app and simplified reference on using SQL injection. -- Improve explanation for iOS app sideloading to include various available methods. -- Added explanation on using ADB and device shell for Android. -- Added explanation on using device shell for iOS. -- Provided comparison for using emulators/simulators and real devices for iOS/Android. -- Fixed Uncrackable Level 3 for Android. -- Improved explanation on how to exfiltrate data and apps on iOS 12 and Android 8. -- Improved/updated explanation on SSL-pinning. -- Added list of adopters of the MASVS/MSTG. -- Updated English, Japanese, French and Spanish checklists to be compatible with MSTG 1.1.2. -- Added a small write-up on Adiantum for Google. -- Added MSTG-ID to the paragraphs to create a link between MSTG paragraphs and MASVS requirements. -- Added review criteria for Android instant apps and guidance for app-bundle evaluation. -- Clarified the differences between various methods of dynamic analysis. - -## v1.1.2 - 12 May 2019 - -- Added missing mappings for MASVS V1.X. -- Updated markdown throughout the English MSTG to be consistent. -- Replaces some dead links. -- Improvements for rendering as a book, including the ISBN number. -- Updated the Excel: it is now available in Japanese as well! -- Many punctuation corrections, spelling and grammar issues resolved. -- Added missing iOS test case regarding memory corruption issues. -- Added contributing, code of conduct, markdown linting and dead link detection. - -## v1.1.1 - 7 May 2019 - -- Improvements on various tool related parts, such as how to use on-device console, adb, nscurl, Frida and Needle. -- Updated 0x4e regarding SMS communication. -- Many grammar/style updates. -- Added Android description regarding MASVS requirement 7.8. -- Updated contributor list. -- Various updates on instructions regarding TLS and encryption. -- Removed some erroneous information. -- Fixed parts of the alignment of the MASVS requirements with the MSTG. -- Updated information on various topics such as jailbreaking and network interception on both iOS and Android. -- Added some steps for Frida detection. -- Added write-ups on Android changes, regarding permissions, application signing, device identifiers, key attestation and more. -- Extended guidance on SafetyNet attestation. -- Added information on Magisk. -- Added Firebase misconfiguration information. -- Added references to more testing tools. -- Updated contributor list. -- Added a lot of information to iOS platform testing. -- Added a lot of fixes for our book-release. - -## v1.1.0 - 30 Nov 2018 - -- Added more samples in Kotlin. -- Simplified leanpub and gitbook publishing. -- A lot of QA improvements. -- Added deserialization test cases for iOS, including input sanitization. -- Added test cases regarding device-access-security policies and data storage on iOS. -- Added test cases regarding session invalidation. -- Improved cryptography and key management test cases on both Android and iOS. -- Started adding various updates in the test cases introduced by Android Oreo and Android Pie. -- Refreshed the Testing Tools section: removed some of the lesser maintained tools, added new tools. -- Fixed some of the markdown issues. -- Updated license to CC 4.0. -- Started Japanese translation. -- Updated references to OWASP Mobile Top 10. -- Updated Android Crackmes. -- Fixed some of the anti-reverse-engineering test cases. -- Added debugging test case for iOS. - -## v1.0.2 - 13 Oct 2018 - -- Updated guiding documentation (README). -- Improved automated build of the pdf, epub and mobi. -- Updated Frontispiece (given new contributor stats). -- Added attack surface sections for Android and various. -- Added vulnerable apps for testing skills. -- Improved sections for testing App permissions for Android (given android Oreo/Pie), added section for testing permissions on iOS. -- Added fix for Fragment Injection on older Android versions. -- Improved sections on iOS WebView related testing. - -## v1.0.1 - 17 Sept 2018 - -- Updated guiding documentation (README, PR templates, improved style guide, issue templates). -- Added automated build of the pdf and DocX. -- Updated Frontispiece (given new contributor stats). -- Updated Crackmes and guiding documentation. -- Updated tooling commands (adb, ABE, iMazing, Needle, IPAinstaller, etc.). -- Added first Russian translations of the 1.0 documents for iOS. -- Improved URLs for GitBook using goo.gl in case of URLs with odd syntax. -- Updated Frontispiece to give credit to all that have helped out for this version. -- Clarified the app taxonomy & security testing sections by a rewrite. -- Added sections for network testing, certificate verification & SSL pinning for Cordova, WebView, Xamarin, React-Native and updated the public key pinning sections. -- Removed no longer working guides (e.g. using iTunes to install apps). -- Updated a lot of URLs (using TLS wherever possible). -- Updated tests regarding WebViews. -- Added new testing tool suites in the tools section, such as the mobile hack tools and various dependency checkers. -- Updated test cases regarding protocol handlers (added missing MASVS 6.6 for iOS). -- Many small updates in terms of wording, spelling/typos, updated code segments and grammar. -- Added missing test cases for MASVS 2.11, 4.7, 7.5 and 4.11. -- Updated the XLS Checklist given MASVS 1.1.0. -- Removed the clipboard test from iOS and Android. -- Removed duplicates on local storage testing and updated data storage test cases. -- Added write-ups from the mobile security sessions at the OWASP summit. -- Added anti-debugging bypass section for iOS. -- Added SQL injection & XML injection samples and improved mitigation documentation. -- Added Needle documentation for iOS. -- Added fragment injection documentation. -- Updated IPA installation process guidance. -- Added XSS sample for Android. -- Added improved documentation for certificate installation on Android devices. -- Updated Frida & Fridump related documentation. -- Added sections about in-memory data analysis in iOS. -- Updated software development and related supporting documentation. -- Updated (anti) reverse-engineering sections for Android and iOS. -- Updated data storage chapters given newer tooling. -- Merged SDLC and security testing chapters. -- Updated cryptography and key-management testing sections for both Android and iOS (up to Android Nougat/iOS 11). -- Updated general overview chapters for Android and iOS. -- Updated Android and iOS IPC testing. -- Added missing overviews, references, etc. to various sections such as 0x6i. -- Updated local authentication chapters and the authentication & session management chapters. -- Updated test cases for sensitive data in memory. -- Added code quality sections. - -## v1.0 - 15 Jun 2018 (First release) + diff --git a/CITATION.cff b/CITATION.cff index d3161e9c5f..000d9e569b 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,6 +1,6 @@ # YAML 1.2 --- -abstract: "The MASTG is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the controls listed in the OWASP Mobile Application Verification Standard (MASVS)." +abstract: "The OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the controls listed in the OWASP Mobile Application Verification Standard (MASVS)." authors: - family-names: Holguera @@ -15,7 +15,7 @@ authors: family-names: Willemsen given-names: Jeroen cff-version: "1.1.0" -date-released: 2021-07-25 +date-released: 2022-09-05 identifiers: - type: isbn @@ -29,5 +29,5 @@ license: "CC-BY-SA-4.0" message: "If you use the MASTG, please cite it using these metadata." repository-code: "https://github.com/OWASP/owasp-mastg/" title: "OWASP Mobile Application Security Testing Guide" -version: "1.2" +version: "1.5.0" ... \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index ff11608280..bbcb8dc339 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -20,7 +20,7 @@ Examples of unacceptable behavior by participants include: - Trolling, insulting/derogatory comments, and personal or political attacks - Public or private harassment - Publishing others' private information, such as a physical or electronic address, without explicit permission -- Misusing the context of the Mobile Security Testing Guide project for commercial goals (e.g. adding sales pitches to the guide or to communication channels used by the project, such as Slack). +- Misusing the context of the Mobile Application Security project for commercial goals (e.g. adding sales pitches to the guide or to communication channels used by the project, such as Slack). - Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 86ea53b8cb..d6a8ca1cb0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing -Learn how you can contribute to the OWASP Mobile Security Project [here](docs/contributing/1_How_Can_You_Contribute.md). +Learn how you can contribute to the OWASP Application Mobile Security Project [here](docs/contributing/1_How_Can_You_Contribute.md). diff --git a/Crackmes/README.md b/Crackmes/README.md index 3a7984310f..4f1a502054 100644 --- a/Crackmes/README.md +++ b/Crackmes/README.md @@ -2,7 +2,7 @@ -Welcome to the UnCrackable Apps for Android and iOS, a collection of mobile reverse engineering challenges. These challenges are used as examples throughout the Mobile Security Testing Guide. Of course, you can also solve them for fun. +Welcome to the UnCrackable Apps for Android and iOS, a collection of mobile reverse engineering challenges. These challenges are used as examples throughout the OWASP MASTG. Of course, you can also solve them for fun. ## Android diff --git a/Document/0x01-Foreword.md b/Document/0x01-Foreword.md index aae10d3d43..9e325e4bb8 100644 --- a/Document/0x01-Foreword.md +++ b/Document/0x01-Foreword.md @@ -1,6 +1,6 @@ # Foreword -Welcome to the OWASP Mobile Security Testing Guide. Feel free to explore the existing content, but do note that it may change at any time. New APIs and best practices are introduced in iOS and Android with every major (and minor) release and also vulnerabilities are found every day. +Welcome to the OWASP Mobile Application Security Testing Guide. Feel free to explore the existing content, but do note that it may change at any time. New APIs and best practices are introduced in iOS and Android with every major (and minor) release and also vulnerabilities are found every day. If you have feedback or suggestions, or want to contribute, create an issue on GitHub or ping us on Slack. See the README for instructions: @@ -14,6 +14,6 @@ Or maybe that's going too far. But at least, they produced a proof-of-concept fo Because this isn't a normal security book, the introduction doesn't list impressive facts and data proving importance of mobile devices in this day and age. It also doesn't explain how mobile application security is broken, and why a book like this was sorely needed, and the authors don't thank their beloved ones without whom the book wouldn't have been possible. -We do have a message to our readers however! The first rule of the OWASP Mobile Security Testing Guide is: Don't just follow the OWASP Mobile Security Testing Guide. True excellence at mobile application security requires a deep understanding of mobile operating systems, coding, network security, cryptography, and a whole lot of other things, many of which we can only touch on briefly in this book. Don't stop at security testing. Write your own apps, compile your own kernels, dissect mobile malware, learn how things tick. And as you keep learning new things, consider contributing to the MASTG yourself! Or, as they say: "Do a pull request". +We do have a message to our readers however! The first rule of the OWASP Mobile Application Security Testing Guide is: Don't just follow the OWASP Mobile Application Security Testing Guide. True excellence at mobile application security requires a deep understanding of mobile operating systems, coding, network security, cryptography, and a whole lot of other things, many of which we can only touch on briefly in this book. Don't stop at security testing. Write your own apps, compile your own kernels, dissect mobile malware, learn how things tick. And as you keep learning new things, consider contributing to the MASTG yourself! Or, as they say: "Do a pull request". diff --git a/Document/0x02a-Frontispiece.md b/Document/0x02a-Frontispiece.md index 8dcd452e8d..18b2b2ee7b 100644 --- a/Document/0x02a-Frontispiece.md +++ b/Document/0x02a-Frontispiece.md @@ -1,16 +1,10 @@ # Frontispiece - + -## About the OWASP Mobile Application Security Testing Guide +## About the OWASP MASTG -The OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for testing the security of mobile apps. It describes processes and techniques for verifying the requirements listed in the [Mobile Application Security Verification Standard (MASVS)](https://github.com/OWASP/owasp-masvs), and provides a baseline for complete and consistent security tests. - -OWASP thanks the many authors, reviewers, and editors for their hard work in developing this guide. If you have any comments or suggestions on the Mobile Security Testing Guide, please join the discussion around MASVS and MASTG in the [OWASP Mobile Security Project Slack Channel](https://owasp.slack.com/messages/project-mobile_omtg/details/ "OWASP Mobile Security Project Slack Channel"). You can sign up for the Slack channel yourself using [this URL](https://owasp.slack.com/join/shared_invite/zt-g398htpy-AZ40HOM1WUOZguJKbblqkw# "Slack channel sign up"). - -> Please open an issue in our Github Repo if the invite has expired. - -## OWASP MASVS and MASTG Adoption +The [OWASP Mobile Application Security Testing Guide (MASTG)](https://mas.owasp.org/MASTG/0x01-Foreword), which is part of the [OWASP Mobile Application Security (MAS)](https://mas.owasp.org/) flagship project, is a comprehensive manual covering the processes, techniques, and tools used during mobile application security analysis, as well as an exhaustive set of test cases for verifying the requirements listed in the [OWASP Mobile Application Security Verification Standard (MASVS)](https://mas.owasp.org/MASVS/0x01-Foreword), providing a baseline for complete and consistent security tests. The OWASP MASVS and MASTG are trusted by the following platform providers and standardization, governmental and educational institutions. [Learn more](0x02b-MASVS-MASTG-Adoption.md). @@ -18,34 +12,6 @@ The OWASP MASVS and MASTG are trusted by the following platform providers and st -
- -## šŸ„‡ MAS Advocates - -MAS Advocates are industry adopters of the OWASP MASVS and MASTG who have invested a significant and consistent amount of resources to push the project forward by providing consistent high-impact contributions and continuously spreading the word. [Learn more](0x02c-Acknowledgements.md#our-mastg-advocates). - - - - - -
- -## Disclaimer - -Please consult the laws in your country before executing any tests against mobile apps by utilizing the MASTG materials. Refrain from violating the laws with anything described in the MASTG. - -Our [Code of Conduct](https://github.com/OWASP/owasp-mastg/blob/master/CODE_OF_CONDUCT.md) has further details. - -## Copyright and License - -Copyright Ā© The OWASP Foundation. This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/ "Creative Commons Attribution-ShareAlike 4.0 International License"). For any reuse or distribution, you must make clear to others the license terms of this work. - - - -## ISBN - -Our ISBN Number is 978-1-257-96636-3 and a hard copy of the MASTG can be ordered at [lulu.com](https://www.lulu.com/shop/jeroen-willemsen-and-sven-schleier-and-bernhard-mĆ¼ller-and-carlos-holguera/owasp-mobile-security-testing-guide/paperback/product-1kw4dp4k.html). - ## Authors ### Bernhard Mueller @@ -95,3 +61,27 @@ The Mobile Security Testing Guide was initiated by Milan Singh Thakur in 2015. T | Authors | Reviewers | Top Contributors | | --- | --- | --- | | Milan Singh Thakur, Abhinav Sejpal, Pragati Singh, Mohammad Hamed Dadpour, David Fern, Mirza Ali, Rahil Parikh | Andrew Muller, Jonathan Carter | Jim Manico, Paco Hope, Yair Amit, Amin Lalji, OWASP Mobile Team | + + + +## Changelog + +All our Changelogs are available online at the OWASP MASTG GitHub repository, see the Releases page: + + + +## Disclaimer + +Please consult the laws in your country before executing any tests against mobile apps by utilizing the MASTG materials. Refrain from violating the laws with anything described in the MASTG. + +Our [Code of Conduct](https://github.com/OWASP/owasp-mastg/blob/master/CODE_OF_CONDUCT.md) has further details. + +OWASP thanks the many authors, reviewers, and editors for their hard work in developing this guide. If you have any comments or suggestions, please connect with us at . + +If you find any inconsistencies or typos please open an issue in [the OWASP MASTG Github Repo]: . + +## Copyright and License + +Copyright Ā© The OWASP Foundation. This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/ "Creative Commons Attribution-ShareAlike 4.0 International License"). For any reuse or distribution, you must make clear to others the license terms of this work. + + diff --git a/Document/0x02b-MASVS-MASTG-Adoption.md b/Document/0x02b-MASVS-MASTG-Adoption.md index 2712f62d0c..c2d38c30d7 100644 --- a/Document/0x02b-MASVS-MASTG-Adoption.md +++ b/Document/0x02b-MASVS-MASTG-Adoption.md @@ -67,7 +67,7 @@ In 2021, ioXt has [extended its security principles through the Mobile Applicati | European Payments Council | [Payment Threats and Fraud Trends Report](https://www.europeanpaymentscouncil.eu/sites/default/files/kb/file/2021-12/EPC193-21%20v1.0%202021%20Payments%20Threats%20and%20Fraud%20Trends%20Report.pdf) | 2021 | | European Payments Council | [Mobile Initiated SEPA Credit Transfer Interoperability Implementation Guidelines, including SCT Instant (MSCT IIGs)](https://www.europeanpaymentscouncil.eu/document-library/guidance-documents/mobile-initiated-sepa-instant-credit-transfer-interoperability) | 2019 | | ENISA (European Union Agency for Cybersecurity) | [Good Practices for Security of SMART CARS](https://www.enisa.europa.eu/publications/smart-cars) | 2019 | -| Government of India, Ministry of Electronics & Information Technology | [Adoption of Mobile AppSec Verification Standard (MASVS) Version 1.0 of OWASP](http://egovstandards.gov.in/sites/default/files/Adoption%20of%20Mobile%20AppSec%20Verification%20Standard%20%28MASVS%29%20Version%201.0%20of%20OWASP_0.pdf) | 2019 | +| Government of India, Ministry of Electronics & Information Technology | [Adoption of Mobile AppSec Verification Standard (MASVS) Version 1.0 of OWASP](http://egovstandards.gov.in/notified-standards-1) | 2019 | | Finish Transport and Communication Agency (TRAFICOM) | [Assessment guideline for electronic identification services (Draft)](https://www.traficom.fi/sites/default/files/media/file/DRAFT%20Traficom%20guideline%20211%202019%20conformity%20assessment%20of%20eID%20service.pdf) | 2019 | | Gobierno de EspaƱa INCIBE | [Ciberseguridad en Smart Toys](https://www.incibe.es/sites/default/files/contenidos/guias/doc/guia_smarttoys_final.pdf) | 2019 | @@ -79,7 +79,7 @@ In 2021, ioXt has [extended its security principles through the Mobile Applicati | University of Adelaide, Australia and Queen Mary University of London, United Kingdom | [An Empirical Assessment of Global COVID-19 Contact Tracing Applications](https://arxiv.org/pdf/2006.10933.pdf) | 2021 | | School of Information Technology, MapĆŗa University, Philippines | [A Vulnerability Assessment on the Parental Control Mobile Applications Security: Status based on the OWASP Security Requirements](http://www.ieomsociety.org/singapore2021/papers/1104.pdf) | 2021 | -## Application in scientific research +## Application in Scientific Research - [STAMBA: Security Testing for Android Mobile Banking Apps](https://link.springer.com/chapter/10.1007/978-3-319-28658-7_57 "Advances in Signal Processing and Intelligent Recognition Systems pp 671-683") diff --git a/Document/0x02c-Acknowledgements.md b/Document/0x02c-Acknowledgements.md index 3a324dad46..85d6fcb00a 100644 --- a/Document/0x02c-Acknowledgements.md +++ b/Document/0x02c-Acknowledgements.md @@ -1,6 +1,6 @@ # Acknowledgments -## MAS Advocates +## šŸ„‡ MAS Advocates MAS Advocates are industry adopters of the OWASP MASVS and MASTG who have invested a significant and consistent amount of resources to push the project forward by providing consistent high-impact contributions and continuously spreading the word. @@ -40,12 +40,12 @@ If you'd like to apply please contact the project leaders by sending an email to ### ā— Important Disclaimers - If the "MAS Advocate" status is granted and you'd like to maintain it, the aforementioned contributions must remain consistent after the initial period as well. You should keep collecting this evidence and send us a _contribution report_ yearly. -- [Financial donations](https://owasp.org/www-project-mobile-security-testing-guide/#div-donate) are not part of the eligibility criteria but will be listed for completion. +- [Financial donations](https://mas.owasp.org/donate/) are not part of the eligibility criteria but will be listed for completion. - Re-shared publications and blog posts linked in MASTG text must be **educational** and focus on mobile security or MASVS/MASTG and **not endorse company products/services**. - Advocate Companies may use the logo and links to MASVS/MASTG resources as part of their communication but cannot use them as an endorsement by OWASP as a preferred provider of software and services. - Example of what's ok: list MAS Advocateā€ status on website home page, in about company slides in sales presentations, on sales collateral. - Example of what's not ok: an MAS Advocateā€ cannot claim they are OWASP certified. -- The quality of the application of the MASVS/MASTG by these companies [has not been vetted by the MAS team](https://github.com/OWASP/owasp-masvs/blob/master/Document/0x04-Assessment_and_Certification.md#owasps-stance-on-masvs-certifications-and-trust-marks). +- The quality of the application of the MASVS/MASTG by these companies [has not been vetted by the MAS team](https://mas.owasp.org/MASVS/0x04-Assessment_and_Certification/#owasps-stance-on-masvs-certifications-and-trust-marks). > The OWASP Foundation is very grateful for the support by the individuals and organizations listed. However please note, the OWASP Foundation is strictly vendor neutral and does not endorse any of its supporters. MAS Advocates do not influence the content of the MASVS or MASTG in any way. @@ -53,17 +53,14 @@ If you'd like to apply please contact the project leaders by sending an email to
- - - - +
[NowSecure](https://www.nowsecure.com) has provided consistent high-impact contributions to the project and has successfully helped spread the word. **We'd like to thank NowSecure for its exemplary contribution which sets a blueprint for other potential contributors wanting to push the project forward.** -### MASVS/MASTG Adopter +### NowSecure as a MASVS/MASTG Adopter - Services / Products: - [NowSecure Debuts New OWASP MASVS Mobile Pen Tests](https://www.nowsecure.com/blog/2022/03/22/nowsecure-debuts-new-owasp-masvs-mobile-pen-tests/) @@ -75,7 +72,7 @@ If you'd like to apply please contact the project leaders by sending an email to - [OWASP MASVS & MASTG Updates](https://academy.nowsecure.com/owasp-masvs-mstg-updates) - [Intro to Mobile App Security](https://academy.nowsecure.com/intro-to-mobile-app-security) -### MASVS/MASTG Contributions +### NowSecure's Contributions to the MAS Project **High-impact Contributions (time/dedicated resources):** @@ -165,6 +162,6 @@ Reviewers have consistently provided useful feedback through GitHub issues and p ### Donators -While both the MASVS and the MASTG are created and maintained by the community on a voluntary basis, sometimes a little bit of outside help is required. We therefore thank our donators for providing the funds to be able to hire technical editors. Note that their donation does not influence the content of the MASVS or MASTG in any way. The Donation Packages are described on our [OWASP Project page](https://owasp.org/www-project-mobile-security-testing-guide/#div-donate "OWASP Mobile Security Testing Guide Donation Packages"). +While both the MASVS and the MASTG are created and maintained by the community on a voluntary basis, sometimes a little bit of outside help is required. We therefore thank our donators for providing the funds to be able to hire technical editors. Note that their donation does not influence the content of the MASVS or MASTG in any way. The Donation Packages are described on our [OWASP Project page](https://mas.owasp.org/donate/ "OWASP MAS Donation Packages"). diff --git a/Document/0x03-Overview.md b/Document/0x03-Overview.md index 2564412a1e..507d02c47c 100644 --- a/Document/0x03-Overview.md +++ b/Document/0x03-Overview.md @@ -1,16 +1,20 @@ -# Overview - -## Introduction to the OWASP Mobile Security Testing Guide +# Introduction to the OWASP Mobile Application Security Project New technology always introduces new security risks, and mobile computing is no exception. Security concerns for mobile apps differ from traditional desktop software in some important ways. Modern mobile operating systems are arguably more secure than traditional desktop operating systems, but problems can still appear when we don't carefully consider security during mobile app development. Data storage, inter-app communication, proper usage of cryptographic APIs, and secure network communication are only some of these considerations. -### Key Areas in Mobile Application Security +The [OWASP Mobile Application Security _Verification Standard_ (MASVS)](https://mas.owasp.org/MASVS/0x01-Foreword) defines a mobile app security model and lists generic security requirements for mobile apps. It can be used by architects, developers, testers, security professionals, and consumers to define and understand the qualities of a secure mobile app. The [OWASP Mobile Application Security _Testing Guide_ (MASTG)](https://mas.owasp.org/MASTG/0x01-Foreword) maps to the same basic set of security requirements offered by the MASVS and depending on the context they can be used individually or combined to achieve different objectives. + + + +For example, the MASVS requirements can be used in an app's planning and architecture design stages while the checklist and testing guide may serve as a baseline for manual security testing or as a template for automated security tests during or after development. In the "[Mobile App Security Testing](0x04b-Mobile-App-Security-Testing.md)" chapter we'll describe how you can apply the checklist and MASTG to a mobile app penetration test. + +## Key Areas in Mobile Application Security Many mobile app penetration testers have a background in network and web app penetration testing, a quality that is valuable for mobile app testing. Almost every mobile app talks to a backend service, and those services are prone to the same types of attacks we are familiar with in web apps on desktop machines. Mobile apps differ in that there is a smaller attack surface and therefore more security against injection and similar attacks. Instead, we must prioritize data protection on the device and the network to increase mobile security. Let's discuss the key areas in mobile app security. -#### Local Data Storage +### Data Storage and Privacy (MASVS-STORAGE) The protection of sensitive data, such as user credentials and private information, is crucial to mobile security. If an app uses operating system APIs such as local storage or inter-process communication (IPC) improperly, the app might expose sensitive data to other apps running on the same device. It may also unintentionally leak data to cloud storage, backups, or the keyboard cache. Additionally, mobile devices can be lost or stolen more easily compared to other types of devices, so it's more likely an individual can gain physical access to the device, making it easier to retrieve the data. @@ -18,39 +22,35 @@ When developing mobile apps, we must take extra care when storing user data. For Fragmentation is a problem we deal with especially on Android devices. Not every Android device offers hardware-backed secure storage, and many devices are running outdated versions of Android. For an app to be supported on these out-of-date devices, it would have to be created using an older version of Android's API which may lack important security features. For maximum security, the best choice is to create apps with the current API version even though that excludes some users. -#### Communication with Trusted Endpoints +### Cryptography (MASVS-CRYPTO) -Mobile devices regularly connect to a variety of networks, including public Wi-Fi networks shared with other (potentially malicious) clients. This creates opportunities for a wide variety of network-based attacks ranging from simple to complicated and old to new. It's crucial to maintain the confidentiality and integrity of information exchanged between the mobile app and remote service endpoints. As a basic requirement, mobile apps must set up a secure, encrypted channel for network communication using the TLS protocol with appropriate settings. +Cryptography is an essential ingredient when it comes to protecting data stored on a mobile device. It is also an area where things can go horribly wrong, especially when standard conventions are not followed. It is essential to ensure that the application uses cryptography according to industry best practices, including the use of proven cryptographic libraries, a proper choice and configuration of cryptographic primitives as well as a suitable random number generator wherever randomness is required. -#### Authentication and Authorization +### Authentication and Authorization (MASVS-AUTH) In most cases, sending users to log in to a remote service is an integral part of the overall mobile app architecture. Even though most of the authentication and authorization logic happens at the endpoint, there are also some implementation challenges on the mobile app side. Unlike web apps, mobile apps often store long-time session tokens that are unlocked with user-to-device authentication features such as fingerprint scanning. While this allows for a quicker login and better user experience (nobody likes to enter complex passwords), it also introduces additional complexity and room for error. Mobile app architectures also increasingly incorporate authorization frameworks (such as OAuth2) that delegate authentication to a separate service or outsource the authentication process to an authentication provider. Using OAuth2 allows the client-side authentication logic to be outsourced to other apps on the same device (e.g. the system browser). Security testers must know the advantages and disadvantages of different possible authorization frameworks and architectures. -#### Interaction with the Mobile Platform +### Network Communication (MASVS-NETWORK) + +Mobile devices regularly connect to a variety of networks, including public Wi-Fi networks shared with other (potentially malicious) clients. This creates opportunities for a wide variety of network-based attacks ranging from simple to complicated and old to new. It's crucial to maintain the confidentiality and integrity of information exchanged between the mobile app and remote service endpoints. As a basic requirement, mobile apps must set up a secure, encrypted channel for network communication using the TLS protocol with appropriate settings. + +### Interaction with the Mobile Platform (MASVS-PLATFORM) Mobile operating system architectures differ from classical desktop architectures in important ways. For example, all mobile operating systems implement app permission systems that regulate access to specific APIs. They also offer more (Android) or less rich (iOS) inter-process communication (IPC) facilities that enable apps to exchange signals and data. These platform-specific features come with their own set of pitfalls. For example, if IPC APIs are misused, sensitive data or functionality might be unintentionally exposed to other apps running on the device. -#### Code Quality and Exploit Mitigation +### Code Quality and Exploit Mitigation (MASVS-CODE) -Traditional injection and memory management issues aren't often seen in mobile apps due to the smaller attack surface. Mobile apps mostly interact with the trusted backend service and the UI, so even if many buffer overflow vulnerabilities exist in the app, those vulnerabilities usually don't open up any useful attack vectors. The same applies to browser exploits such as cross-site scripting (XSS allows attackers to inject scripts into web pages) that are very prevalent in web apps. However, there are always exceptions. XSS is theoretically possible on mobile in some cases, but it's very rare to see XSS issues that an individual can exploit. For more information about XSS, see the "[Cross-Site Scripting Flaws](0x04h-Testing-Code-Quality.md#cross-site-scripting-flaws-mstg-arch-2-and-mstg-platform-2)" section in the chapter "Testing Code Quality". +Traditional injection and memory management issues aren't often seen in mobile apps due to the smaller attack surface. Mobile apps mostly interact with the trusted backend service and the UI, so even if many buffer overflow vulnerabilities exist in the app, those vulnerabilities usually don't open up any useful attack vectors. The same applies to browser exploits such as cross-site scripting (XSS allows attackers to inject scripts into web pages) that are very prevalent in web apps. However, there are always exceptions. XSS is theoretically possible on mobile in some cases, but it's very rare to see XSS issues that an individual can exploit. This protection from injection and memory management issues doesn't mean that app developers can get away with writing sloppy code. Following security best practices results in hardened (secure) release builds that are resilient against tampering. Free security features offered by compilers and mobile SDKs help increase security and mitigate attacks. -#### Anti-Tampering and Anti-Reversing +### Anti-Tampering and Anti-Reversing (MASVS-RESILIENCE) There are three things you should never bring up in polite conversations: religion, politics, and code obfuscation. Many security experts dismiss client-side protections outright. However, software protection controls are widely used in the mobile app world, so security testers need ways to deal with these protections. We believe there's a benefit to client-side protections if they are employed with a clear purpose and realistic expectations in mind and aren't used to replace security controls. -## The OWASP Mobile AppSec Verification Standard - -This guide is closely related to the OWASP Mobile Application Security Verification Standard (MASVS). The MASVS defines a mobile app security model and lists generic security requirements for mobile apps. It can be used by architects, developers, testers, security professionals, and consumers to define and understand the qualities of a secure mobile app. The MASTG maps to the same basic set of security requirements offered by the MASVS and depending on the context they can be used individually or combined to achieve different objectives. - - - -For example, the MASVS requirements can be used in an app's planning and architecture design stages while the checklist and testing guide may serve as a baseline for manual security testing or as a template for automated security tests during or after development. In the "[Mobile App Security Testing](0x04b-Mobile-App-Security-Testing.md)" chapter we'll describe how you can apply the checklist and MASTG to a mobile app penetration test. - -## Navigating the Mobile Security Testing Guide +## Navigating the OWASP MASTG The MASTG contains descriptions of all requirements specified in the MASVS. The MASTG contains the following main sections: diff --git a/Document/0x04a-Mobile-App-Taxonomy.md b/Document/0x04a-Mobile-App-Taxonomy.md index 8e9ebb163d..83324bf464 100644 --- a/Document/0x04a-Mobile-App-Taxonomy.md +++ b/Document/0x04a-Mobile-App-Taxonomy.md @@ -1,6 +1,6 @@ -# Mobile App Taxonomy +# Mobile Application Taxonomy -The term "mobile app" refers to a self-contained computer program designed to execute on a mobile device. Today, the Android and iOS operating systems cumulatively comprise [more than 99% of the mobile OS market share](https://www.idc.com/promo/smartphone-market-share/os). Additionally, mobile Internet usage has surpassed desktop usage for the first time in history, making mobile browsing and apps the [most widespread kind of Internet-capable applications](https://www.idc.com/promo/smartphone-market-share/os). +The term "mobile application" or "mobile app" refers to a self-contained computer program designed to execute on a mobile device. Today, the Android and iOS operating systems cumulatively comprise [more than 99% of the mobile OS market share](https://www.idc.com/promo/smartphone-market-share/os). Additionally, mobile Internet usage has surpassed desktop usage for the first time in history, making mobile browsing and apps the [most widespread kind of Internet-capable apps](https://www.idc.com/promo/smartphone-market-share/os). > In this guide, we'll use the term "app" as a general term for referring to any kind of application running on popular mobile OSes. @@ -8,7 +8,7 @@ In a basic sense, apps are designed to run either directly on the platform for w ## Native App -Mobile operating systems, including Android and iOS, come with a Software Development Kit (SDK) for developing applications specific to the OS. Such applications are referred to as _native_ to the system for which they have been developed. When discussing an app, the general assumption is that it is a native app implemented in a standard programming language for the respective operating system - Objective-C or Swift for iOS, and Java or Kotlin for Android. +Mobile operating systems, including Android and iOS, come with a Software Development Kit (SDK) for developing apps specific to the OS. Such apps are referred to as _native_ to the system for which they have been developed. When discussing an app, the general assumption is that it is a native app implemented in a standard programming language for the respective operating system - Objective-C or Swift for iOS, and Java or Kotlin for Android. Native apps inherently have the capability to provide the fastest performance with the highest degree of reliability. They usually adhere to platform-specific design principles (e.g. the [Android Design Principles](https://developer.android.com/design "Android Design Principles")), which tends to result in a more consistent user interface (UI) compared to _hybrid_ or _web_ apps. Due to their close integration with the operating system, native apps can directly access almost every component of the device (camera, sensors, hardware-backed key stores, etc.). @@ -20,7 +20,7 @@ The most obvious downside of _native apps_ is that they target only one specific - [Google Flutter](https://flutter.dev/ "Google Flutter") - [React Native](https://reactnative.dev/ "React Native") -Applications developed using these frameworks internally use the APIs native to the system and offer performance equivalent to native applications. Also, these apps can make use of all device capabilities, including the GPS, accelerometer, camera, the notification system, etc. Since the final output is very similar to previously discussed _native apps_, apps developed using these frameworks can also be considered as _native apps_. +Apps developed using these frameworks internally use the APIs native to the system and offer performance equivalent to native apps. Also, these apps can make use of all device capabilities, including the GPS, accelerometer, camera, the notification system, etc. Since the final output is very similar to previously discussed _native apps_, apps developed using these frameworks can also be considered as _native apps_. ## Web App @@ -32,7 +32,7 @@ Web apps have limited integration with the general components of the device as t Hybrid apps attempt to fill the gap between _native_ and _web apps_. A _hybrid app_ executes like a _native app_, but a majority of the processes rely on web technologies, meaning a portion of the app runs in an embedded web browser (commonly called "WebView"). As such, hybrid apps inherit both pros and cons of _native_ and _web apps_. -A web-to-native abstraction layer enables access to device capabilities for _hybrid apps_ not accessible to a pure _web app_. Depending on the framework used for development, one code base can result in multiple applications that target different platforms, with a UI closely resembling that of the original platform for which the app was developed. +A web-to-native abstraction layer enables access to device capabilities for _hybrid apps_ not accessible to a pure _web app_. Depending on the framework used for development, one code base can result in multiple apps that target different platforms, with a UI closely resembling that of the original platform for which the app was developed. Following is a non-exhaustive list of more popular frameworks for developing _hybrid apps_: diff --git a/Document/0x04b-Mobile-App-Security-Testing.md b/Document/0x04b-Mobile-App-Security-Testing.md index 41b91b2662..f83e85e1eb 100644 --- a/Document/0x04b-Mobile-App-Security-Testing.md +++ b/Document/0x04b-Mobile-App-Security-Testing.md @@ -1,4 +1,4 @@ -# Mobile App Security Testing +# Mobile Application Security Testing In the following sections we'll provide a brief overview of general security testing principles and key terminology. The concepts introduced are largely identical to those found in other types of penetration testing, so if you are an experienced tester you may be familiar with some of the content. @@ -26,7 +26,7 @@ Vulnerability analysis is usually the process of looking for vulnerabilities in ### Static versus Dynamic Analysis -Static Application Security Testing (SAST) involves examining an application's components without executing them, by analyzing the source code either manually or automatically. +Static Application Security Testing (SAST) involves examining an app's components without executing them, by analyzing the source code either manually or automatically. OWASP provides information about [Static Code Analysis](https://owasp.org/www-community/controls/Static_Code_Analysis "OWASP Static Code Analysis") that may help you understand techniques, strengths, weaknesses, and limitations. Dynamic Application Security Testing (DAST) involves examining the app during runtime. This type of analysis can be manual or automatic. It usually doesn't provide the information that static analysis provides, but it is a good way to detect interesting elements (assets, features, entry points, etc.) from a user's point of view. @@ -39,13 +39,13 @@ During static analysis, the mobile app's source code is reviewed to ensure appro #### Manual Code Review -A tester performs manual code review by manually analyzing the mobile application's source code for security vulnerabilities. Methods range from a basic keyword search via the 'grep' command to a line-by-line examination of the source code. IDEs (Integrated Development Environments) often provide basic code review functions and can be extended with various tools. +A tester performs manual code review by manually analyzing the mobile app's source code for security vulnerabilities. Methods range from a basic keyword search via the 'grep' command to a line-by-line examination of the source code. IDEs (Integrated Development Environments) often provide basic code review functions and can be extended with various tools. A common approach to manual code analysis entails identifying key security vulnerability indicators by searching for certain APIs and keywords, such as database-related method calls like "executeStatement" or "executeQuery". Code containing these strings is a good starting point for manual analysis. In contrast to automatic code analysis, manual code review is very good for identifying vulnerabilities in the business logic, standards violations, and design flaws, especially when the code is technically secure but logically flawed. Such scenarios are unlikely to be detected by any automatic code analysis tool. -A manual code review requires an expert code reviewer who is proficient in both the language and the frameworks used for the mobile application. Full code review can be a slow, tedious, time-consuming process for the reviewer, especially given large code bases with many dependencies. +A manual code review requires an expert code reviewer who is proficient in both the language and the frameworks used for the mobile app. Full code review can be a slow, tedious, time-consuming process for the reviewer, especially given large code bases with many dependencies. #### Automated Source Code Analysis @@ -70,7 +70,7 @@ Dynamic analysis is usually used to check for security mechanisms that provide s Automated testing tools' lack of sensitivity to app context is a challenge. These tools may identify a potential issue that's irrelevant. Such results are called "false positives". -For example, security testers commonly report vulnerabilities that are exploitable in a web browser but aren't relevant to the mobile app. This false positive occurs because automated tools used to scan the backend service are based on regular browser-based web applications. Issues such as CSRF (Cross-site Request Forgery) and Cross-Site Scripting (XSS) are reported accordingly. +For example, security testers commonly report vulnerabilities that are exploitable in a web browser but aren't relevant to the mobile app. This false positive occurs because automated tools used to scan the backend service are based on regular browser-based web apps. Issues such as CSRF (Cross-site Request Forgery) and Cross-Site Scripting (XSS) are reported accordingly. Let's take CSRF as an example. A successful CSRF attack requires the following: @@ -83,19 +83,6 @@ Stored Cross-Site Scripting (XSS) can be an issue if the app includes WebViews, > In any case, consider exploit scenarios when you perform the risk assessment; don't blindly trust your scanning tool's output. -#### Clipboard - -When typing data into input fields, the clipboard can be used to copy in data. The clipboard is accessible system-wide and is therefore shared by apps. This sharing can be misused by malicious apps to get sensitive data that has been stored in the clipboard. - -Before iOS 9, a malicious app might monitor the pasteboard in the background while periodically retrieving `[UIPasteboard generalPasteboard].string`. As of iOS 9, pasteboard content is accessible to apps in the foreground only, which reduces the attack surface of password sniffing from the clipboard dramatically. - -For [Android there was a PoC exploit released](https://arstechnica.com/information-technology/2014/11/using-a-password-manager-on-android-it-may-be-wide-open-to-sniffing-attacks/ "Password Sniffing") in order to demonstrate the attack vector if passwords are stored within the clipboard. [Disabling pasting in passwords input fields](https://github.com/OWASP/owasp-masvs/issues/106 "Disabling Pasting for Password Input Fields") was a requirement in the MASVS 1.0, but was removed due to several reasons: - -- Preventing pasting into input fields of an app, does not prevent that a user will copy sensitive information anyway. Since the information has already been copied before the user notices that it's not possible to paste it in, a malicious app has already sniffed the clipboard. -- If pasting is disabled on password fields users might even choose weaker passwords that they can remember and they cannot use password managers anymore, which would contradict the original intention of making the app more secure. - -When using an app you should still be aware that other apps are reading the clipboard continuously, as the [Facebook app](https://www.thedailybeast.com/facebook-is-spying-on-your-clipboard "Facebook Is Spying On Your Clipboard") did. Still, copy-pasting passwords is a security risk you should be aware of, but also cannot be solved by an app. - ### Penetration Testing (a.k.a. Pentesting) The classic approach involves all-around security testing of the app's final or near-final build, e.g., the build that's available at the end of the development process. For testing at the end of the development process, we recommend the [Mobile App Security Verification Standard (MASVS)](https://github.com/OWASP/owasp-masvs "OWASP MASVS") and the associated checklist as baseline for testing. A typical security test is structured as follows: @@ -112,9 +99,7 @@ The security level at which the app will be tested must be decided before testin Organizations may have different regulatory and legal obligations in certain territories. Even if an app doesn't handle sensitive data, some L2 requirements may be relevant (because of industry regulations or local laws). For example, two-factor authentication (2FA) may be obligatory for a financial app and enforced by a country's central bank and/or financial regulatory authorities. -Security goals/controls defined earlier in the development process may also be reviewed during the discussion with stakeholders. Some controls may conform to MASVS controls, but others may be specific to the organization or application. - - +Security goals/controls defined earlier in the development process may also be reviewed during the discussion with stakeholders. Some controls may conform to MASVS controls, but others may be specific to the organization or app. All involved parties must agree on the decisions and the scope in the checklist because these will define the baseline for all security testing. @@ -137,10 +122,10 @@ Classifications of sensitive information differ by industry and country. In addi There are three general states from which data may be accessible: - **At rest** - the data is sitting in a file or data store -- **In use** - an application has loaded the data into its address space +- **In use** - an app has loaded the data into its address space - **In transit** - data has been exchanged between mobile app and endpoint or consuming processes on the device, e.g., during IPC (Inter-Process Communication) -The degree of scrutiny that's appropriate for each state may depend on the data's importance and likelihood of being accessed. For example, data held in application memory may be more vulnerable than data on web servers to access via core dumps because attackers are more likely to gain physical access to mobile devices than to web servers. +The degree of scrutiny that's appropriate for each state may depend on the data's importance and likelihood of being accessed. For example, data held in app memory may be more vulnerable than data on web servers to access via core dumps because attackers are more likely to gain physical access to mobile devices than to web servers. When no data classification policy is available, use the following list of information that's generally considered sensitive: @@ -149,7 +134,7 @@ When no data classification policy is available, use the following list of infor - device identifiers that may identify a person - highly sensitive data whose compromise would lead to reputational harm and/or financial costs - any data whose protection is a legal obligation -- any technical data generated by the application (or its related systems) and used to protect other data or the system itself (e.g., encryption keys). +- any technical data generated by the app (or its related systems) and used to protect other data or the system itself (e.g., encryption keys). A definition of "sensitive data" must be decided before testing begins because detecting sensitive data leakage without a definition may be impossible. @@ -236,9 +221,9 @@ Security wasn't originally an integral part of software development. It was an a SDLCs always consist of the same steps (the overall process is sequential in the Waterfall paradigm and iterative in the Agile paradigm): -- Perform a **risk assessment** for the application and its components to identify their risk profiles. These risk profiles typically depend on the organization's risk appetite and applicable regulatory requirements. The risk assessment is also based on factors, including whether the application is accessible via the Internet and the kind of data the application processes and stores. All kinds of risks must be taken into account: financial, marketing, industrial, etc. Data classification policies specify which data is sensitive and how it must be secured. +- Perform a **risk assessment** for the app and its components to identify their risk profiles. These risk profiles typically depend on the organization's risk appetite and applicable regulatory requirements. The risk assessment is also based on factors, including whether the app is accessible via the Internet and the kind of data the app processes and stores. All kinds of risks must be taken into account: financial, marketing, industrial, etc. Data classification policies specify which data is sensitive and how it must be secured. - **Security Requirements** are determined at the beginning of a project or development cycle, when functional requirements are being gathered. **Abuse Cases** are added as use cases are created. Teams (including development teams) may be given security training (such as Secure Coding) if they need it. -You can use the [OWASP MASVS](https://mobile-security.gitbook.io/masvs/ "OWASP MASVS") to determine the security requirements of mobile applications on the basis of the risk assessment phase. Iteratively reviewing requirements when features and data classes are added is common, especially with Agile projects. +You can use the [OWASP MASVS](https://mas.owasp.org/MASVS/0x01-Foreword "OWASP MASVS") to determine the security requirements of mobile apps on the basis of the risk assessment phase. Iteratively reviewing requirements when features and data classes are added is common, especially with Agile projects. - **Threat Modeling**, which is basically the identification, enumeration, prioritization, and initial handling of threats, is a foundational artifact that must be performed as architecture development and design progress. **Security Architecture**, a Threat Model factor, can be refined (for both software and hardware aspects) after the Threat Modeling phase. **Secure Coding rules** are established and the list of **Security tools** that will be used is created. The strategy for **Security testing** is clarified. - All security requirements and design considerations should be stored in the Application Life Cycle Management (ALM) system (also known as the issue tracker) that the development/ops team uses to ensure tight integration of security requirements into the development workflow. The security requirements should contain relevant source code snippets so that developers can quickly reference the snippets. Creating a dedicated repository that's under version control and contains only these code snippets is a secure coding strategy that's more beneficial than the traditional approach (storing the guidelines in word documents or PDFs). - **Securely develop the software**. To increase code security, you must complete activities such as **Security Code Reviews**, **Static Application Security Testing**, and **Security Unit Testing**. Although quality analogues of these security activities exist, the same logic must be applied to security, e.g., reviewing, analyzing, and testing code for security defects (for example, missing input validation, failing to free all resources, etc.). @@ -295,7 +280,7 @@ People may assume that the term "DevOps" represents collaboration between develo In other words, DevOps collaboration includes quality teams, security teams, and many other teams related to the project. When you hear "DevOps" today, you should probably be thinking of something like [DevOpsQATestInfoSec](https://techbeacon.com/evolution-devops-new-thinking-gene-kim "The evolution of DevOps: Gene Kim on getting to continuous delivery"). Indeed, DevOps values pertain to increasing not only speed but also quality, security, reliability, stability, and resilience. -Security is just as critical to business success as the overall quality, performance, and usability of an application. As development cycles are shortened and delivery frequencies increased, making sure that quality and security are built in from the very beginning becomes essential. **DevSecOps** is all about adding security to DevOps processes. Most defects are identified during production. DevOps specifies best practices for identifying as many defects as possible early in the life cycle and for minimizing the number of defects in the released application. +Security is just as critical to business success as the overall quality, performance, and usability of an app. As development cycles are shortened and delivery frequencies increased, making sure that quality and security are built in from the very beginning becomes essential. **DevSecOps** is all about adding security to DevOps processes. Most defects are identified during production. DevOps specifies best practices for identifying as many defects as possible early in the life cycle and for minimizing the number of defects in the released app. However, DevSecOps is not just a linear process oriented towards delivering the best possible software to operations; it is also a mandate that operations closely monitor software that's in production to identify issues and fix them by forming a quick and efficient feedback loop with development. DevSecOps is a process through which Continuous Improvement is heavily emphasized. @@ -321,8 +306,8 @@ Instead of manually provisioning computing resources (physical servers, virtual Infrastructure as Code practices facilitate collaboration between development and operations teams, with the following results: -- Devs better understand infrastructure from a familiar point of view and can prepare resources that the running application will require. -- Ops operate an environment that better suits the application, and they share a language with Devs. +- Devs better understand infrastructure from a familiar point of view and can prepare resources that the running app will require. +- Ops operate an environment that better suits the app, and they share a language with Devs. Infrastructure as Code also facilitates the construction of the environments required by classical software creation projects, for **development** ("DEV"), **integration** ("INT"), **testing** ("PPR" for Pre-Production. Some tests are usually performed in earlier environments, and PPR tests mostly pertain to non-regression and performance with data that's similar to data used in production), and **production** ("PRD"). The value of infrastructure as code lies in the possible similarity between environments (they should be the same). @@ -332,7 +317,7 @@ The main tools in this domain are [Puppet](https://puppet.com/ "Puppet"), [Terra ##### Deployment -The deployment pipeline's sophistication depends on the maturity of the project organization or development team. In its simplest form, the deployment pipeline consists of a commit phase. The commit phase usually involves running simple compiler checks and the unit test suite as well as creating a deployable artifact of the application. A release candidate is the latest version that has been checked into the trunk of the version control system. Release candidates are evaluated by the deployment pipeline for conformity to standards they must fulfill for deployment to production. +The deployment pipeline's sophistication depends on the maturity of the project organization or development team. In its simplest form, the deployment pipeline consists of a commit phase. The commit phase usually involves running simple compiler checks and the unit test suite as well as creating a deployable artifact of the app. A release candidate is the latest version that has been checked into the trunk of the version control system. Release candidates are evaluated by the deployment pipeline for conformity to standards they must fulfill for deployment to production. The commit phase is designed to provide instant feedback to developers and is therefore run on every commit to the trunk. Time constraints exist because of this frequency. The commit phase should usually be complete within five minutes, and it shouldn't take longer than ten. Adhering to this time constraint is quite challenging when it comes to security because many security tools can't be run quickly enough (#paul, #mcgraw). @@ -342,7 +327,7 @@ CI/CD means "Continuous Integration/Continuous Delivery" in some contexts and "C - Continuous Delivery candidate releases can proceed to the pre-production environment. If the release can then be validated (either manually or automatically), deployment can continue. If not, the project team will be notified and proper action(s) must be taken. - Continuous Deployment releases are directly transitioned from integration to production, e.g., they become accessible to the user. However, no release should go to production if significant defects have been identified during previous activities. -The delivery and deployment of applications with low or medium sensitivity may be merged into a single step, and validation may be performed after delivery. However, keeping these two actions separate and using strong validation are strongly advised for sensitive applications. +The delivery and deployment of apps with low or medium sensitivity may be merged into a single step, and validation may be performed after delivery. However, keeping these two actions separate and using strong validation are strongly advised for sensitive apps. ##### Security @@ -351,13 +336,13 @@ At this point, the big question is: now that other activities required for deliv Once again, the answer is automation and tooling: by implementing these two concepts throughout the project life cycle, you can maintain and improve security. The higher the expected level of security, the more controls, checkpoints, and emphasis will take place. The following are examples: - Static Application Security Testing can take place during the development phase, and it can be integrated into the Continuous Integration process with more or less emphasis on scan results. You can establish more or less demanding Secure Coding Rules and use SAST tools to check the effectiveness of their implementation. -- Dynamic Application Security Testing may be automatically performed after the application has been built (e.g., after Continuous Integration has taken place) and before delivery, again, with more or less emphasis on results. +- Dynamic Application Security Testing may be automatically performed after the app has been built (e.g., after Continuous Integration has taken place) and before delivery, again, with more or less emphasis on results. - You can add manual validation checkpoints between consecutive phases, for example, between delivery and deployment. -The security of an application developed with DevOps must be considered during operations. The following are examples: +The security of an app developed with DevOps must be considered during operations. The following are examples: - Scanning should take place regularly (at both the infrastructure and application level). -- Pentesting may take place regularly. (The version of the application used in production is the version that should be pentested, and the testing should take place in a dedicated environment and include data that's similar to the production version data. See the section on Penetration Testing for more details.) +- Pentesting may take place regularly. (The version of the app used in production is the version that should be pentested, and the testing should take place in a dedicated environment and include data that's similar to the production version data. See the section on Penetration Testing for more details.) - Active monitoring should be performed to identify issues and remediate them as soon as possible via the feedback loop. diff --git a/Document/0x06h-Testing-Platform-Interaction.md b/Document/0x06h-Testing-Platform-Interaction.md index d7e4707a2d..34d065b0d5 100644 --- a/Document/0x06h-Testing-Platform-Interaction.md +++ b/Document/0x06h-Testing-Platform-Interaction.md @@ -1417,6 +1417,13 @@ If you want to learn more about what's happening under-the-hood in terms of XPC, #### Overview +When typing data into input fields, the clipboard can be used to copy in data. The clipboard is accessible system-wide and is therefore shared by apps. This sharing can be misused by malicious apps to get sensitive data that has been stored in the clipboard. + +When using an app you should be aware that other apps might be reading the clipboard continuously, as the [Facebook app](https://www.thedailybeast.com/facebook-is-spying-on-your-clipboard "Facebook Is Spying On Your Clipboard") did. Before iOS 9, a malicious app might monitor the pasteboard in the background while periodically retrieving `[UIPasteboard generalPasteboard].string`. As of iOS 9, pasteboard content is accessible to apps in the foreground only, which reduces the attack surface of password sniffing from the clipboard dramatically. Still, copy-pasting passwords is a security risk you should be aware of, but also cannot be solved by an app. + +- Preventing pasting into input fields of an app, does not prevent that a user will copy sensitive information anyway. Since the information has already been copied before the user notices that it's not possible to paste it in, a malicious app has already sniffed the clipboard. +- If pasting is disabled on password fields users might even choose weaker passwords that they can remember and they cannot use password managers anymore, which would contradict the original intention of making the app more secure. + The [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard "UIPasteboard") enables sharing data within an app, and from an app to other apps. There are two kinds of pasteboards: - **systemwide general pasteboard**: for sharing data with any app. Persistent by default across device restarts and app uninstalls (since iOS 10). diff --git a/Document/0x08a-Testing-Tools.md b/Document/0x08a-Testing-Tools.md index c60d6231ad..50f0c51241 100644 --- a/Document/0x08a-Testing-Tools.md +++ b/Document/0x08a-Testing-Tools.md @@ -1421,7 +1421,7 @@ cy# [alertView show] cy# [alertView release] ``` - + Find the app's document directory with Cycript: diff --git a/Document/CHANGELOG.md b/Document/CHANGELOG.md index ce80290414..8f6ebc731a 100644 --- a/Document/CHANGELOG.md +++ b/Document/CHANGELOG.md @@ -1,217 +1,5 @@ # Changelog -## V1.2.1 and newer +All our Changelogs are available online at the OWASP MASTG GitHub repository, see the Releases page: -All our Changelogs are available online at the OWASP MSTG GitHub repository, see the [Releases page](https://github.com/OWASP/owasp-mastg/releases). - -## v1.2 - 25th July 2021 - -167 issues were closed since the last release. A full overview can be seen in Github Issues . - -326 pull requests were merged since the last release. A full overview can be seen in Github Pull Requests - -Major changes include: - -- Migrating the new document build pipeline from MASVS to MSTG. This allows us to build consistently the whole OWASP MSTG documents (PDF, docx etc.) in minutes, without any manual work. -- Besides numerous changes for the test cases we have a new Crackme - Android Level 4 and also new write-ups for the Crackmes. -- We removed all references to Needle and IDB tool, as both tools are outdated. -- References of OWASP Mobile Top 10 and MSTG-IDs are completely moved to MASVS -- Reworking of information gathering (static analysis) for Android Apps -- Update of Biometric Authentication for Android Apps -- New content and updates in the Android and iOS Reverse Engineering and Tampering chapters -- 3 new iOS Reverse Engineering test cases -- Translations of the MSTG are linked to the respective forks but are not part of the MSTG anymore -- Updated English, Japanese, French, Korean and Spanish checklists to be compatible with MSTG 1.2 -- Updated Acknowledgments, with 1 new co-author and contributor -- Added JNI Tracing for Android -- Added dsdump for dumping Objective-C and Swift content -- Added the procedure to sign the debugserver for iOS 12 and higher -- Added dependency-check to verify for vulnerabilities in libraries added by iOS package managers -- Added getppid as debugger detection (iOS) -- Added Domain/URL Enumeration in APKs -- Added introduction into Network.framework (iOS) -- Added UnSAFE Bank iOS Application -- Added information on SECCOMP (Android) -- Added native and java method tracing (Android) -- Added Android library injection -- Added Android 10 TLS and cryptography updates -- Updated code obfuscation for Android and iOS -- Added test case for Reverse Engineering Tools Detection - MSTG-RESILIENCE-4 (iOS) -- Added test case for Emulator Detection - MSTG-RESILIENCE-5 (iOS) -- Added an example with truststore to bypass cert pinning (Android) -- Added content to information gathering using frida (Android) -- Added Sec Consult, RandoriSec and OWASP Bay area as donators -- Added basic information gathering for Android and iOS -- Added Simulating a Man-in-the-Middle Attack with an Access Point -- Added gender neutrality to the MSTG -- Extended section about dealing with Xamarin Apps -- Updated all picture links (img tags) to be in markdown syntax -- Updated iTunes limitations and usage since macOS Catalina -- Added Emulation-based Analysis (iOS and Android) -- Added Debugging iOS release applications using lldb -- Added Korean translation of the checklist -- Updated symbolic execution content (Android) -- Added Ghidra for Android Reverse Engineering -- Added section on Manual (Reversed) Code Review for iOS -- Added explanation of more Frida APIs (iOS and Android) -- Added Apple CryptoKit -- Updated and simplified Frida detection methods -- Added introduction to setup and disassembling for iOS Apps -- Updated section about frida-ios-dump -- Added gplaycli (Android) -- Extended section on how to retrieve UDI (iOS) -- Added new companies in the Users.md list with companies applying the MSTG/MASVS -- Updated partially code samples to Swift 5 -- Adding Process Exploration (Android and iOS) -- Updated best practices for passwords, added "Have I Been Pwned" -- Updated SSL Pinning fallback methods -- Updated app identifier (Android and iOS) -- Updated permission changes for Android O, P and Q -- Updated Broadcast Receiver section (Android) - -Several other minor updates include fixing typos and markdown lint errors and updating outdated links. - -We thank you all contributors for the hard work and continuously improving the document and the OWASP MSTG project! - -## v1.1.3 - 2 August 2019 - -- Updated Acknowledgments, with 2 new co-authors. -- Translated various parts into Japanese. -- A large restructuring of the general testing, platform specific testing and reverse-engineering chapters. -- Updated description of many tools: Adb, Angr, APK axtractor, Apkx, Burp Suite, Drozer, ClassDump(Z/etc), Clutch, Drozer, Frida, Hopper, Ghidra, IDB, Ipa Installer, iFunBox, iOS-deploy, KeychainDumper, Mobile-Security-Framework, Nathan, Needle, Objection, Magisk, PassionFruit, Radare 2, Tableplus, SOcket CAT, Xposed, and others. -- Updated most of the iOS hacking/verification techniques using iOS 12 or 11 as a base instead of iOS 9/10. -- Removed tools which were no longer updated, such as introspy-Android and AndBug. -- Added missing MASVS references from version 1.1.4: v1.X, V3.5, V5.6, V6.2-V6.5, V8.2-V8.6. -- Rewrote device-binding explanation and testcases for Android. -- Added parts on testing unmanaged code in Objective-C, Java, and C/C++. -- Applied many spelling, punctuation and style-related fixes. -- Updated many cryptography related parts. -- Added testaces for upgrade-mechanism verification for apps. -- Updated Readme, Code of Conduct, Contribution guidelines, verification, funding link, and generation scripts. -- Added ISBN as the book is now available at Lulu. -- Added various fixes for the .epub format. -- Added testcases on Android and iOS backup verification. -- Improved key-attestation related explanation for Android. -- Restructured OWASP Mobile Wiki. -- Removed Yahoo Weather app and simplified reference on using SQL injection. -- Improve explanation for iOS app sideloading to include various available methods. -- Added explanation on using ADB and device shell for Android. -- Added explanation on using device shell for iOS. -- Provided comparison for using emulators/simulators and real devices for iOS/Android. -- Fixed Uncrackable Level 3 for Android. -- Improved explanation on how to exfiltrate data and apps on iOS 12 and Android 8. -- Improved/updated explanation on SSL-pinning. -- Added list of adopters of the MASVS/MSTG. -- Updated English, Japanese, French and Spanish checklists to be compatible with MSTG 1.1.2. -- Added a small write-up on Adiantum for Google. -- Added MSTG-ID to the paragraphs to create a link between MSTG paragraphs and MASVS requirements. -- Added review criteria for Android instant apps and guidance for app-bundle evaluation. -- Clarified the differences between various methods of dynamic analysis. - -## v1.1.2 - 12 May 2019 - -- Added missing mappings for MASVS V1.X. -- Updated markdown throughout the English MSTG to be consistent. -- Replaces some dead links. -- Improvements for rendering as a book, including the ISBN number. -- Updated the Excel: it is now available in Japanese as well! -- Many punctuation corrections, spelling and grammar issues resolved. -- Added missing iOS test case regarding memory corruption issues. -- Added contributing, code of conduct, markdown linting and dead link detection. - -## v1.1.1 - 7 May 2019 - -- Improvements on various tool related parts, such as how to use on-device console, adb, nscurl, Frida and Needle. -- Updated 0x4e regarding SMS communication. -- Many grammar/style updates. -- Added Android description regarding MASVS requirement 7.8. -- Updated contributor list. -- Various updates on instructions regarding TLS and encryption. -- Removed some erroneous information. -- Fixed parts of the alignment of the MASVS requirements with the MSTG. -- Updated information on various topics such as jailbreaking and network interception on both iOS and Android. -- Added some steps for Frida detection. -- Added write-ups on Android changes, regarding permissions, application signing, device identifiers, key attestation and more. -- Extended guidance on SafetyNet attestation. -- Added information on Magisk. -- Added Firebase misconfiguration information. -- Added references to more testing tools. -- Updated contributor list. -- Added a lot of information to iOS platform testing. -- Added a lot of fixes for our book-release. - -## v1.1.0 - 30 Nov 2018 - -- Added more samples in Kotlin. -- Simplified leanpub and gitbook publishing. -- A lot of QA improvements. -- Added deserialization test cases for iOS, including input sanitization. -- Added test cases regarding device-access-security policies and data storage on iOS. -- Added test cases regarding session invalidation. -- Improved cryptography and key management test cases on both Android and iOS. -- Started adding various updates in the test cases introduced by Android Oreo and Android Pie. -- Refreshed the Testing Tools section: removed some of the lesser maintained tools, added new tools. -- Fixed some of the markdown issues. -- Updated license to CC 4.0. -- Started Japanese translation. -- Updated references to OWASP Mobile Top 10. -- Updated Android Crackmes. -- Fixed some of the anti-reverse-engineering test cases. -- Added debugging test case for iOS. - -## v1.0.2 - 13 Oct 2018 - -- Updated guiding documentation (README). -- Improved automated build of the pdf, epub and mobi. -- Updated Frontispiece (given new contributor stats). -- Added attack surface sections for Android and various. -- Added vulnerable apps for testing skills. -- Improved sections for testing App permissions for Android (given android Oreo/Pie), added section for testing permissions on iOS. -- Added fix for Fragment Injection on older Android versions. -- Improved sections on iOS WebView related testing. - -## v1.0.1 - 17 Sept 2018 - -- Updated guiding documentation (README, PR templates, improved style guide, issue templates). -- Added automated build of the pdf and DocX. -- Updated Frontispiece (given new contributor stats). -- Updated Crackmes and guiding documentation. -- Updated tooling commands (adb, ABE, iMazing, Needle, IPAinstaller, etc.). -- Added first Russian translations of the 1.0 documents for iOS. -- Improved URLs for GitBook using goo.gl in case of URLs with odd syntax. -- Updated Frontispiece to give credit to all that have helped out for this version. -- Clarified the app taxonomy & security testing sections by a rewrite. -- Added sections for network testing, certificate verification & SSL pinning for Cordova, WebView, Xamarin, React-Native and updated the public key pinning sections. -- Removed no longer working guides (e.g. using iTunes to install apps). -- Updated a lot of URLs (using TLS wherever possible). -- Updated tests regarding WebViews. -- Added new testing tool suites in the tools section, such as the mobile hack tools and various dependency checkers. -- Updated test cases regarding protocol handlers (added missing MASVS 6.6 for iOS). -- Many small updates in terms of wording, spelling/typos, updated code segments and grammar. -- Added missing test cases for MASVS 2.11, 4.7, 7.5 and 4.11. -- Updated the XLS Checklist given MASVS 1.1.0. -- Removed the clipboard test from iOS and Android. -- Removed duplicates on local storage testing and updated data storage test cases. -- Added write-ups from the mobile security sessions at the OWASP summit. -- Added anti-debugging bypass section for iOS. -- Added SQL injection & XML injection samples and improved mitigation documentation. -- Added Needle documentation for iOS. -- Added fragment injection documentation. -- Updated IPA installation process guidance. -- Added XSS sample for Android. -- Added improved documentation for certificate installation on Android devices. -- Updated Frida & Fridump related documentation. -- Added sections about in-memory data analysis in iOS. -- Updated software development and related supporting documentation. -- Updated (anti) reverse-engineering sections for Android and iOS. -- Updated data storage chapters given newer tooling. -- Merged SDLC and security testing chapters. -- Updated cryptography and key-management testing sections for both Android and iOS (up to Android Nougat/iOS 11). -- Updated general overview chapters for Android and iOS. -- Updated Android and iOS IPC testing. -- Added missing overviews, references, etc. to various sections such as 0x6i. -- Updated local authentication chapters and the authentication & session management chapters. -- Updated test cases for sensitive data in memory. -- Added code quality sections. - -## v1.0 - 15 Jun 2018 (First release) + diff --git a/Document/Images/Chapters/0x03/mstg-detailed-summary.png b/Document/Images/Chapters/0x03/mstg-detailed-summary.png deleted file mode 100644 index ae14ce37214d762761f4a582b81d89a4be88fad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108002 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%0Dd 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