<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Giles+Hogben</id>
		<title>OWASP - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Giles+Hogben"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Giles_Hogben"/>
		<updated>2026-04-21T16:52:08Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=118682</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=118682"/>
				<updated>2011-10-07T08:07:15Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure: Mobile devices (being mobile) have a higher risk of loss or theft. Adequate protection should be built in to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
*1.1 In the design phase classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, personal data, location, error logs etc.). Process, store and use data according to its classification. Validate the security of methods applied to sensitive data.&lt;br /&gt;
*1.2 Store sensitive data on the server instead of client-end device. This is based on the assumption that secure network connectivity is always available and that protection mechanisms available to server side storage are superior. The relative security of client vs server-side security also needs to be assessed on a case-by-case basis (see ENISA cloud risk assessment or OWASP Cloud top 10 for decision support). All data transfer should use only secure channels.&lt;br /&gt;
*1.3 If server-side storage and encryption is not a possibility, use file encryption APIs provided by the OS or other trusted source (check first for well-known vulnerabilities). Some platforms provide file encryption API’s which use a private key protected by the device unlock code and deleted on remote kill. If this is available, it should be used as it increases the security of the encryption without creating extra burden for the end-user. It also makes stored data safer in the case of loss or theft. However, it should be born in mind that even when protected by the device unlock key, if data is stored on the device, its security is dependent on the security of the device unlock code if remote deletion of the key is for any reason not possible.&lt;br /&gt;
*1.4 Do not store/cache sensitive data (including keys) unless they are encrypted and if possible stored in a tamper-proof area (see 2).&lt;br /&gt;
*1.5 Consider restricting access to sensitive data based on contextual information such as location (e.g. wallet App not usable outside Europe, car key not usable unless within 100m of car etc...).&lt;br /&gt;
*1.6 Do not store historical GPS/tracking or other sensitive information on the device beyond the period required by the application (see 1.8).&lt;br /&gt;
*1.7 Assume that shared storage is untrusted - information may easily leak in unexpected ways through any shared storage. In particular:&lt;br /&gt;
**Be aware of caches and temporary storage as a possible leakage channel when shared with other apps.&lt;br /&gt;
**Be aware of public shared storage such as address book, media gallery, audio files, as a possible leakage channel. For example storing images with location metadata in the media-gallery allows that information to be shared in unintended ways.&lt;br /&gt;
**Do not store temp/cached data in a world readable directory.&lt;br /&gt;
*1.8 Applications on managed devices should leverage remote wipe and kill switch APIs (OS-level or purpose-built) to remove sensitive information from the device in the event of theft or loss.&lt;br /&gt;
*1.9 Data deletion should be scheduled according to a maximum retention period, (to prevent e.g. data remaining in caches indefinitely).&lt;br /&gt;
*1.10 Bear in mind that there is no known secure deletion procedure for flash memory (unless wiping the entire media). Therefore data encryption is especially important.&lt;br /&gt;
*1.11 Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
*1.12 Apply the principle of minimal disclosure - only collect and disclose data which is required for business use of the application. Identify in the design phase what data is needed, its sensitivity and whether it is appropriate to collect, store and use each data type.&lt;br /&gt;
*1.13 Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so (e.g. use a randomly generated number). Apply the same principles to app sessions as to http sessions/cookies etc....&lt;br /&gt;
*1.14 Application developers may want to incorporate an application-specific &amp;quot;data kill switch&amp;quot; into their products, to allow the per-app deletion of their application's sensitive data when needed (strong authentication is required to protect misuse of such a feature).&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Spyware, Surveillance, Financial malware, UI impersonation User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users reuse their passwords.&lt;br /&gt;
&lt;br /&gt;
*2.1 Instead of passwords consider using authorization tokens that can be securely stored on the device. Encrypt the tokens while stored on the device and in transit (using https). Tokens can be issued by the backend service after verifying the user credentials initially. The tokens could be time bounded  to the specific service as well as revokable (if possible server side), thereby minimizing the damage in loss scenarios. Use the latest versions of the authorization standards (such as OAuth 2.0). Make sure that these tokens expire after an appropriate (not too long) delay. For sensitive applications, tokens should have shorter lifetimes.&lt;br /&gt;
*2.2 In case passwords need to be stored on the device, leverage the encryption and key-store mechanisms provided by the mobile OS to securely store passwords, password equivalents and authorization tokens. Never store passwords in clear text. Do not store passwords or long term session IDs without appropriate encryption or hashing.&lt;br /&gt;
*2.3 Some devices allow developers to use a Secure Element - sometimes via an SD card module (e.g. http://www.blackberry.com/developers/docs/7.0.0api/net/rim/device/api/io/nfc/se/SecureElement.html ,  http://code.google.com/p/seek-for-android/) - the number of devices offering this functionality is likely to increase. Developers should use such capability to store keys, credentials and other sensitive data.&lt;br /&gt;
*2.4 Provide the ability for the mobile user to change/remove passwords on the device. &lt;br /&gt;
*2.5 Password credentials should not be copied to backups.&lt;br /&gt;
*2.6 Consider using visual/pattern based passwords to aid usability.&lt;br /&gt;
*2.7 Check the entropy (i.e. randomness) of all passwords.&lt;br /&gt;
*2.8 Ensure passwords and keys are not visible in caches or logs.&lt;br /&gt;
*2.9 SMS is not a secure channel and cannot be relied upon to send sensitive information.&lt;br /&gt;
*2.10 Do not store any passwords or secrets in the application binary. Do not use a generic shared secret for integration to backend (like embedded password in code). Mobile application binaries can be easily downloaded and reverse engineered.&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Network spoofing attacks, Surveillance. The majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network (3G, GSM, CDMA and others), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
*3.1 Assume that the network layer is not private. Modern network layer attacks can decrypt provider many network encryption protocols at low cost, and there is no guarantee that the wifi network will be appropriately encrypted.&lt;br /&gt;
*3.2 Applications should enforce the use of an end-to-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. This includes passing user credentials, or other authentication equivalents. In some cases this may mean encrypting all communication.&lt;br /&gt;
*3.3 Enforce strong encryption algorithms and key lengths. Do not allow unsigned certificates and allow only reputable certificate authorities. Do not disable or ignore the SSL chain validation. &lt;br /&gt;
*3.4 For sensitive data, to reduce the risk of man-in-middle attacks (like SSL proxy, SSL strip), a secure connection should only be established after verifying the identity of the remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in the key chain.&lt;br /&gt;
*3.5 The user interface should make it as easy as possible for the user to find out if a certificate is valid.&lt;br /&gt;
*3.6 SMS, MMS or notifications should not be used to send sensitive data to or from mobile end points.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google vulnerability of Client Login account credentials on unprotected wifi - [http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''4. Implement user authentication/authorization and session management correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unauthorized individuals may obtain access to sensitive data or systems. This can be done by circumventing authentication systems (logins) or by reusing valid tokens or cookies.&lt;br /&gt;
&lt;br /&gt;
*4.1 Require appropriate strength user authentication to the application. It may be useful to provide feedback on the strength of the password when it is being entered for the first time. The strength of the authentication mechanism used depends on the data being processed by the application and its access to valuable resources (e.g. costing money).&lt;br /&gt;
*4.2 It is important to ensure that the session management is done correctly after the initial authentication. Require authentication credentials or tokens to be passed with any subsequent request (especially those granting privileged access or modification). &lt;br /&gt;
*4.3 Use high entropy (unpredictable) session identifiers with .&lt;br /&gt;
*4.4 Use context to add security to authentication - e.g. device ID, IP location, etc...&lt;br /&gt;
*4.5 Consider using additional authentication factors for applications giving access to sensitive data or interfaces where possible - e.g. voice, fingerprint (if available), who-you-know, behavioural etc...&lt;br /&gt;
*4.6 Use authentication that ties back to the end user identity (rather than the device identity).&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google's ClientLogin implementation &lt;br /&gt;
[http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''5. Keep the backend APIs (services) and the platform (server) secure''' &lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Attacks on backend systems, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
*5.1 Carry out a specific check of all data transferred betwen the mobile device and web-server backends and other external interfaces - (e.g. is location or other information transferred within file metadata)&lt;br /&gt;
*5.2 All back-end services (WebServices/REST) for mobile apps should be tested for vulnerabilities periodically e.g. using static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
*5.3 Ensure that the back-end platform (server) is running with a hardened configuration with the latest security patches applied to the OS, Web Server and other application components.&lt;br /&gt;
*5.4 Ensure adequate logs are retained on the back-end in order to detect and respond to incidents and perform forensics (within the limits of data protection law).&lt;br /&gt;
*5.6 Employ rate limiting and throttling on a per-user/IP basis (if user identification is available) to reduce the risk from DDoS attack.&lt;br /&gt;
*5.7 Test for DoS vulnerabilities where the server may become overwhelmed by certain resource intensive application calls.&lt;br /&gt;
*5.8 Web Services, REST and APIs can have similar vulnerabilities to Web Applications. Perform testing of the backend Web Service, REST or API to determine vulnerabilities may exist. Perform abuse case testing, in addition to use case testing.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' [https://www.owasp.org/index.php/Web_Services]&lt;br /&gt;
[http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Perform data integration with third party services/applications securely'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Data Leakage&lt;br /&gt;
&lt;br /&gt;
*6.1 Vet the security/authenticity of any third party code/libraries used in your mobile application (reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
*6.2 Track all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile applications using these third party APIs/frameworks.&lt;br /&gt;
*6.3 Pay particular attention to validating all data received from and sent to  non-trusted third party apps (e.g. check ad network software) before processing in the application. &lt;br /&gt;
&lt;br /&gt;
'''7. Pay specific attention to the collection and storage of consent for the collection and use of the user’s data'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unintentional disclosure of personal or private information. In the European Union, it is mandatory to obtain user consent for the collection of personally identifiable information (PII).&lt;br /&gt;
&lt;br /&gt;
*7.1 Create a privacy policy covering the usage of personal data and make it available to the user especially when making consent choices.&lt;br /&gt;
*7.2 Consent may be collected in 3 main ways:&lt;br /&gt;
**At install time&lt;br /&gt;
**At run-time when data is sent&lt;br /&gt;
**Via “opt-out” mechanisms where a default setting is implemented and the user has to turn it off.&lt;br /&gt;
*7.3 Check whether your application is collecting PII - it may not always be obvious - for example do you use persistent identifiers linked to central data stores containing personal information?&lt;br /&gt;
*7.4 Audit communication mechanisms to check for unintended leaks (e.g. image metadata).&lt;br /&gt;
*7.5 Keep a record of consent to the transfer of PII available to the user (consider also the value of keeping server-side records attached to any user data stored).&lt;br /&gt;
*7.6 Check whether your consent collection-mechanism overlaps or conflicts with any other consent-collection within the same stack (e.g. APP-native + webkit HTML)&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' EU Law [http://democrats.energycommerce.house.gov/sites/default/files/image_uploads/Testimony_05.04.11_Spafford.pdf]&lt;br /&gt;
&lt;br /&gt;
'''8. Implement controls to prevent unauthorised access to paid-for resources (wallet, SMS, phone calls etc...)'''&lt;br /&gt;
'''Risks:''' Smartphone apps give programmatic access to premium rate phone calls, SMS, roaming data, NFC payments etc. Apps with privileged access to such API’s should take particular care to prevent abuse given the financial impact of vulnerabilities giving attackers access to the user’s financial resources.&lt;br /&gt;
&lt;br /&gt;
*8.1 Maintain logs of access to paid resources in a non-repudiable format and make them available to the end-user for monitoring (e.g. signed receipt sent to server back-end). Logs should be protected from unauthorised access.&lt;br /&gt;
*8.2 Check for anomalous usage patterns in paid resource usage and require reauthentication. E.g. when significant change in location occurs, user-language changes etc.&lt;br /&gt;
*8.3 Consider using a white-list model by default for paid resource addressing - e.g. address book only unless specifically authorised for phone calls.&lt;br /&gt;
*8.4 Authenticate all API calls to paid resources (e.g. using an app developer certificate).&lt;br /&gt;
*8.5 Ensure that wallet API callbacks do not pass cleartext account/pricing/ billing/item information.&lt;br /&gt;
*8.6 Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
*8.7 Minimise data transfers using techniques such as fast dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google Wallet Security [http://www.google.com/wallet/how-it-works-security.html]&lt;br /&gt;
&lt;br /&gt;
'''9. Ensure secure distribution/provisioning of mobile applications'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' &lt;br /&gt;
*9.1 Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores and the extra delay this may imply.&lt;br /&gt;
*9.2 Provide remote kill functionality &lt;br /&gt;
*9.3 Feedback channels&lt;br /&gt;
*9.4 Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors '''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
*10.1 Minimise runtime interpretation and capabilities offered to runtime interpreters.&lt;br /&gt;
*10.2 Run interpreters at minimal privilege levels.&lt;br /&gt;
*10.3 Fuzz test interpreters.&lt;br /&gt;
*10.4 Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data and use of third party API’s - e.g. javascript interpreters.&lt;br /&gt;
*10.5 Define a comprehensive escape syntax as appropriate.&lt;br /&gt;
&lt;br /&gt;
=== Candidates (for consideration) ===&lt;br /&gt;
&lt;br /&gt;
'''A: Some general coding best practices are particularly relevant to mobile coding too'''&lt;br /&gt;
*Input Validation and Output Encoding&lt;br /&gt;
*Minimise lines of code.&lt;br /&gt;
*Use safe languages (e.g. from buffer-overflow).&lt;br /&gt;
*Implement a security report handling point (address) security@example.com &lt;br /&gt;
*Use static and binary code analyzers to find security flaws.&lt;br /&gt;
*Use safe string functions, avoid buffer and Integer overflow.&lt;br /&gt;
*Run with the minimum privilege required for the application on the operating system. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
*Don't authorize code/app to execute with root/sa privilege&lt;br /&gt;
*Always perform testing as a standard as well as a privileged user&lt;br /&gt;
*Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS.&lt;br /&gt;
*Context aware security: may be able to decrease/increase access based on the context (e.g. location, network) - &lt;br /&gt;
*Remove all test code before releasing the application&lt;br /&gt;
*Ensure logging is done appropriately but do not record excessive logs, especially including sensitive user information.&lt;br /&gt;
*//What sort of information should be recorded in the logs. (Keep audit data on the server, no user specific data - link to the Apple Issue - Signed Timestamps) &lt;br /&gt;
&lt;br /&gt;
'''B. Enforce higher security posture on the device for sensitive apps used in an enterprise context:''' // Vinay to check&lt;br /&gt;
*If a sensitive application needs to be provisioned on a device, application can employ enforcement of the certain security posture on the device (such as PIN, remote management/wipe) // Vinay - Still needs to be clarified&lt;br /&gt;
*Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive applications&lt;br /&gt;
*Banking Apps&lt;br /&gt;
*//(Remote Management, PIN enforcement, encryption, application monitoring)&lt;br /&gt;
**Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance? Is this a common feature - device-cert - I have not come across it.&lt;br /&gt;
&lt;br /&gt;
'''C. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
Risk: User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
*(?? What guidelines could be provided to developers)&lt;br /&gt;
U*ser education on using due diligence while installing third party applications on mobile devices&lt;br /&gt;
&lt;br /&gt;
'''D. Provide or use an existing reporting channel for phishing from apps '''&lt;br /&gt;
&lt;br /&gt;
(e.g. if you are a browser plugin developer). //APWG? Can we recommend one?&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=118440</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=118440"/>
				<updated>2011-10-03T09:17:41Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure: Mobile devices (being mobile) have a higher risk of loss or theft. Adequate protection should be built in to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
*1.1 In the design phase classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, personal data, location, error logs etc.). Process, store and use data according to its classification. Validate the security of methods applied to sensitive data.&lt;br /&gt;
*1.2 Store sensitive data on the server instead of client-end device. This is based on the assumption that secure network connectivity is always available and that protection mechanisms available to server side storage are superior. The relative security of client vs server-side security also needs to be assessed on a case-by-case basis (see ENISA cloud risk assessment or OWASP Cloud top 10 for decision support). All data transfer should use only secure channels.&lt;br /&gt;
*1.3 If server-side storage and encryption is not a possibility, use file encryption APIs provided by the OS or other trusted source (check first for well-known vulnerabilities). Some platforms provide file encryption API’s which use a private key protected by the device unlock code and deleted on remote kill. If this is available, it should be used as it increases the security of the encryption without creating extra burden for the end-user. It also makes stored data safer in the case of loss or theft.&lt;br /&gt;
*1.4 Do not store/cache sensitive data (including keys) unless they are encrypted and if possible stored in a tamper-proof area (see 2).&lt;br /&gt;
*1.5 Consider restricting access to sensitive data based on contextual information such as location (e.g. wallet App not usable outside Europe, car key not usable unless within 100m of car etc...).&lt;br /&gt;
*1.6 Do not store historical GPS/tracking or other sensitive information on the device beyond the period required by the application (see 1.8).&lt;br /&gt;
*1.7 Assume that shared storage is untrusted - information may easily leak in unexpected ways through any shared storage. In particular:&lt;br /&gt;
**Be aware of caches and temporary storage as a possible leakage channel when shared with other apps.&lt;br /&gt;
**Be aware of public shared storage such as address book, media gallery, audio files, as a possible leakage channel. For example storing images with location metadata in the media-gallery allows that information to be shared in unintended ways.&lt;br /&gt;
**Do not store temp/cached data in a world readable directory.&lt;br /&gt;
*1.8 Applications on managed devices should leverage remote wipe and kill switch APIs (OS-level or purpose-built) to remove sensitive information from the device in the event of theft or loss.&lt;br /&gt;
*1.9 Data deletion should be scheduled according to a maximum retention period, (to prevent e.g. data remaining in caches indefinitely).&lt;br /&gt;
*1.10 Bear in mind that there is no known secure deletion procedure for flash memory (unless wiping the entire media). Therefore data encryption is especially important.&lt;br /&gt;
*1.11 Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
*1.12 Apply the principle of minimal disclosure - only collect and disclose data which is required for business use of the application. Identify in the design phase what data is needed, its sensitivity and whether it is appropriate to collect, store and use each data type.&lt;br /&gt;
*1.13 Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so (e.g. use a randomly generated number). Apply the same principles to app sessions as to http sessions/cookies etc....&lt;br /&gt;
*1.14 Application developers may want to incorporate an application-specific &amp;quot;data kill switch&amp;quot; into their products, to allow the per-app deletion of their application's sensitive data when needed (strong authentication is required to protect misuse of such a feature).&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Spyware, Surveillance, Financial malware, UI impersonation User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users reuse their passwords.&lt;br /&gt;
&lt;br /&gt;
*2.1 Instead of passwords consider using authorization tokens that can be securely stored on the device. Encrypt the tokens while stored on the device and in transit (using https). Tokens can be issued by the backend service after verifying the user credentials initially. The tokens could be time bounded  to the specific service as well as revokable (if possible server side), thereby minimizing the damage in loss scenarios. Use the latest versions of the authorization standards (such as OAuth 2.0). Make sure that these tokens expire after an appropriate (not too long) delay. For sensitive applications, tokens should have shorter lifetimes.&lt;br /&gt;
*2.2 In case passwords need to be stored on the device, leverage the encryption and key-store mechanisms provided by the mobile OS to securely store passwords, password equivalents and authorization tokens. Never store passwords in clear text. Do not store passwords or long term session IDs without appropriate encryption or hashing.&lt;br /&gt;
*2.3 Some devices allow developers to use a Secure Element - sometimes via an SD card module (e.g. http://www.blackberry.com/developers/docs/7.0.0api/net/rim/device/api/io/nfc/se/SecureElement.html ,  http://code.google.com/p/seek-for-android/) - the number of devices offering this functionality is likely to increase. Developers should use such capability to store keys, credentials and other sensitive data.&lt;br /&gt;
*2.4 Provide the ability for the mobile user to change/remove passwords on the device. &lt;br /&gt;
*2.5 Password credentials should not be copied to backups.&lt;br /&gt;
*2.6 Consider using visual/pattern based passwords to aid usability.&lt;br /&gt;
*2.7 Check the entropy (i.e. randomness) of all passwords.&lt;br /&gt;
*2.8 Ensure passwords and keys are not visible in caches or logs.&lt;br /&gt;
*2.9 SMS is not a secure channel and cannot be relied upon to send sensitive information.&lt;br /&gt;
*2.10 Do not store any passwords or secrets in the application binary. Do not use a generic shared secret for integration to backend (like embedded password in code). Mobile application binaries can be easily downloaded and reverse engineered.&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Network spoofing attacks, Surveillance. The majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network (3G, GSM, CDMA and others), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
*3.1 Assume that the network layer is not private. Modern network layer attacks can decrypt provider many network encryption protocols at low cost, and there is no guarantee that the wifi network will be appropriately encrypted.&lt;br /&gt;
*3.2 Applications should enforce the use of an end-to-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. This includes passing user credentials, or other authentication equivalents. In some cases this may mean encrypting all communication.&lt;br /&gt;
*3.3 Enforce strong encryption algorithms and key lengths. Do not allow unsigned certificates and allow only reputable certificate authorities. Do not disable or ignore the SSL chain validation. &lt;br /&gt;
*3.4 For sensitive data, to reduce the risk of man-in-middle attacks (like SSL proxy, SSL strip), a secure connection should only be established after verifying the identity of the remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in the key chain.&lt;br /&gt;
*3.5 The user interface should make it as easy as possible for the user to find out if a certificate is valid.&lt;br /&gt;
*3.6 SMS, MMS or notifications should not be used to send sensitive data to or from mobile end points.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google vulnerability of Client Login account credentials on unprotected wifi - [http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''4. Implement user authentication/authorization and session management correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unauthorized individuals may obtain access to sensitive data or systems. This can be done by circumventing authentication systems (logins) or by reusing valid tokens or cookies.&lt;br /&gt;
&lt;br /&gt;
*4.1 Require appropriate strength user authentication to the application. It may be useful to provide feedback on the strength of the password when it is being entered for the first time. The strength of the authentication mechanism used depends on the data being processed by the application and its access to valuable resources (e.g. costing money).&lt;br /&gt;
*4.2 It is important to ensure that the session management is done correctly after the initial authentication. Require authentication credentials or tokens to be passed with any subsequent request (especially those granting privileged access or modification). &lt;br /&gt;
*4.3 Use high entropy (unpredictable) session identifiers with .&lt;br /&gt;
*4.4 Use context to add security to authentication - e.g. device ID, IP location, etc...&lt;br /&gt;
*4.5 Consider using additional authentication factors for applications giving access to sensitive data or interfaces where possible - e.g. voice, fingerprint (if available), who-you-know, behavioural etc...&lt;br /&gt;
*4.6 Use authentication that ties back to the end user identity (rather than the device identity).&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google's ClientLogin implementation &lt;br /&gt;
[http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''5. Keep the backend APIs (services) and the platform (server) secure''' &lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Attacks on backend systems, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
*5.1 Carry out a specific check of all data transferred betwen the mobile device and web-server backends and other external interfaces - (e.g. is location or other information transferred within file metadata)&lt;br /&gt;
*5.2 All back-end services (WebServices/REST) for mobile apps should be tested for vulnerabilities periodically e.g. using static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
*5.3 Ensure that the back-end platform (server) is running with a hardened configuration with the latest security patches applied to the OS, Web Server and other application components.&lt;br /&gt;
*5.4 Ensure adequate logs are retained on the back-end in order to detect and respond to incidents and perform forensics (within the limits of data protection law).&lt;br /&gt;
*5.6 Employ rate limiting and throttling on a per-user/IP basis (if user identification is available) to reduce the risk from DDoS attack.&lt;br /&gt;
*5.7 Test for DoS vulnerabilities where the server may become overwhelmed by certain resource intensive application calls.&lt;br /&gt;
*5.8 Web Services, REST and APIs can have similar vulnerabilities to Web Applications. Perform testing of the backend Web Service, REST or API to determine vulnerabilities may exist. Perform abuse case testing, in addition to use case testing.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' [https://www.owasp.org/index.php/Web_Services]&lt;br /&gt;
[http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Perform data integration with third party services/applications securely'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Data Leakage&lt;br /&gt;
&lt;br /&gt;
*6.1 Vet the security/authenticity of any third party code/libraries used in your mobile application (reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
*6.2 Track all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile applications using these third party APIs/frameworks.&lt;br /&gt;
*6.3 Pay particular attention to validating all data received from and sent to  non-trusted third party apps (e.g. check ad network software) before processing in the application. &lt;br /&gt;
&lt;br /&gt;
'''7. Pay specific attention to the collection and storage of consent for the collection and use of the user’s data'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unintentional disclosure of personal or private information. In the European Union, it is mandatory to obtain user consent for the collection of personally identifiable information (PII).&lt;br /&gt;
&lt;br /&gt;
*7.1 Create a privacy policy covering the usage of personal data and make it available to the user especially when making consent choices.&lt;br /&gt;
*7.2 Consent may be collected in 3 main ways:&lt;br /&gt;
**At install time&lt;br /&gt;
**At run-time when data is sent&lt;br /&gt;
**Via “opt-out” mechanisms where a default setting is implemented and the user has to turn it off.&lt;br /&gt;
*7.3 Check whether your application is collecting PII - it may not always be obvious - for example do you use persistent identifiers linked to central data stores containing personal information?&lt;br /&gt;
*7.4 Audit communication mechanisms to check for unintended leaks (e.g. image metadata).&lt;br /&gt;
*7.5 Keep a record of consent to the transfer of PII available to the user (consider also the value of keeping server-side records attached to any user data stored).&lt;br /&gt;
*7.6 Check whether your consent collection-mechanism overlaps or conflicts with any other consent-collection within the same stack (e.g. APP-native + webkit HTML)&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' EU Law [http://democrats.energycommerce.house.gov/sites/default/files/image_uploads/Testimony_05.04.11_Spafford.pdf]&lt;br /&gt;
&lt;br /&gt;
'''8. Implement controls to prevent unauthorised access to paid-for resources (wallet, SMS, phone calls etc...)'''&lt;br /&gt;
'''Risks:''' Smartphone apps give programmatic access to premium rate phone calls, SMS, roaming data, NFC payments etc. Apps with privileged access to such API’s should take particular care to prevent abuse given the financial impact of vulnerabilities giving attackers access to the user’s financial resources.&lt;br /&gt;
&lt;br /&gt;
*8.1 Maintain logs of access to paid resources in a non-repudiable format and make them available to the end-user for monitoring (e.g. signed receipt sent to server back-end). Logs should be protected from unauthorised access.&lt;br /&gt;
*8.2 Check for anomalous usage patterns in paid resource usage and require reauthentication. E.g. when significant change in location occurs, user-language changes etc.&lt;br /&gt;
*8.3 Consider using a white-list model by default for paid resource addressing - e.g. address book only unless specifically authorised for phone calls.&lt;br /&gt;
*8.4 Authenticate all API calls to paid resources (e.g. using an app developer certificate).&lt;br /&gt;
*8.5 Ensure that wallet API callbacks do not pass cleartext account/pricing/ billing/item information.&lt;br /&gt;
*8.6 Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
*8.7 Minimise data transfers using techniques such as fast dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google Wallet Security [http://www.google.com/wallet/how-it-works-security.html]&lt;br /&gt;
&lt;br /&gt;
'''9. Ensure secure distribution/provisioning of mobile applications'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' &lt;br /&gt;
*9.1 Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores and the extra delay this may imply.&lt;br /&gt;
*9.2 Provide remote kill functionality &lt;br /&gt;
*9.3 Feedback channels&lt;br /&gt;
*9.4 Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors '''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
*10.1 Minimise runtime interpretation and capabilities offered to runtime interpreters.&lt;br /&gt;
*10.2 Run interpreters at minimal privilege levels.&lt;br /&gt;
*10.3 Fuzz test interpreters.&lt;br /&gt;
*10.4 Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data and use of third party API’s - e.g. javascript interpreters.&lt;br /&gt;
*10.5 Define a comprehensive escape syntax as appropriate.&lt;br /&gt;
&lt;br /&gt;
=== Candidates (for consideration) ===&lt;br /&gt;
&lt;br /&gt;
'''A: Some general coding best practices are particularly relevant to mobile coding too'''&lt;br /&gt;
*Input Validation and Output Encoding&lt;br /&gt;
*Minimise lines of code.&lt;br /&gt;
*Use safe languages (e.g. from buffer-overflow).&lt;br /&gt;
*Implement a security report handling point (address) security@example.com &lt;br /&gt;
*Use static and binary code analyzers to find security flaws.&lt;br /&gt;
*Use safe string functions, avoid buffer and Integer overflow.&lt;br /&gt;
*Run with the minimum privilege required for the application on the operating system. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
*Don't authorize code/app to execute with root/sa privilege&lt;br /&gt;
*Always perform testing as a standard as well as a privileged user&lt;br /&gt;
*Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS.&lt;br /&gt;
*Context aware security: may be able to decrease/increase access based on the context (e.g. location, network) - &lt;br /&gt;
*Remove all test code before releasing the application&lt;br /&gt;
*Ensure logging is done appropriately but do not record excessive logs, especially including sensitive user information.&lt;br /&gt;
*//What sort of information should be recorded in the logs. (Keep audit data on the server, no user specific data - link to the Apple Issue - Signed Timestamps) &lt;br /&gt;
&lt;br /&gt;
'''B. Enforce higher security posture on the device for sensitive apps used in an enterprise context:''' // Vinay to check&lt;br /&gt;
*If a sensitive application needs to be provisioned on a device, application can employ enforcement of the certain security posture on the device (such as PIN, remote management/wipe) // Vinay - Still needs to be clarified&lt;br /&gt;
*Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive applications&lt;br /&gt;
*Banking Apps&lt;br /&gt;
*//(Remote Management, PIN enforcement, encryption, application monitoring)&lt;br /&gt;
**Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance? Is this a common feature - device-cert - I have not come across it.&lt;br /&gt;
&lt;br /&gt;
'''C. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
Risk: User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
*(?? What guidelines could be provided to developers)&lt;br /&gt;
U*ser education on using due diligence while installing third party applications on mobile devices&lt;br /&gt;
&lt;br /&gt;
'''D. Provide or use an existing reporting channel for phishing from apps '''&lt;br /&gt;
&lt;br /&gt;
(e.g. if you are a browser plugin developer). //APWG? Can we recommend one?&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=115410</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=115410"/>
				<updated>2011-08-10T12:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure: Mobile devices (being mobile) have a higher risk of loss or theft. Adequate protection should be built in to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
*1.1 In the design phase classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, personal data, location, error logs etc.). Process, store and use data according to its classification. Validate the security of methods applied to sensitive data.&lt;br /&gt;
*1.2 Store sensitive data on the server instead of client-end device. This is based on the assumption that secure network connectivity is always available and that protection mechanisms available to server side storage are superior. The relative security of client vs server-side security also needs to be assessed on a case-by-case basis (see ENISA cloud risk assessment or OWASP Cloud top 10 for decision support). All data transfer should use only secure channels.&lt;br /&gt;
*1.3 If server-side storage and encryption is not a possibility, use file encryption APIs provided by the OS or other trusted source (check first for well-known vulnerabilities). Some platforms provide file encryption API’s which use a private key protected by the device unlock code and deleted on remote kill. If this is available, it should be used as it increases the security of the encryption without creating extra burden for the end-user. It also makes stored data safer in the case of loss or theft.&lt;br /&gt;
*1.4 Do not store/cache sensitive data (including keys) unless they are encrypted and if possible stored in a tamper-proof area (see 2).&lt;br /&gt;
*1.5 Consider restricting access to sensitive data based on contextual information such as location (e.g. wallet App not usable outside Europe, car key not usable unless within 100m of car etc...).&lt;br /&gt;
*1.6 Do not store historical GPS/tracking or other sensitive information on the device beyond the period required by the application (see 1.8).&lt;br /&gt;
*1.7 Assume that shared storage is untrusted - information may easily leak in unexpected ways through any shared storage. In particular:&lt;br /&gt;
**Be aware of caches and temporary storage as a possible leakage channel when shared with other apps.&lt;br /&gt;
**Be aware of public shared storage such as address book, media gallery, audio files, as a possible leakage channel. For example storing images with location metadata in the media-gallery allows that information to be shared in unintended ways.&lt;br /&gt;
**Do not store temp/cached data in a world readable directory.&lt;br /&gt;
*1.8 Applications on managed devices should leverage remote wipe and kill switch APIs (OS-level or purpose-built) to remove sensitive information from the device in the event of theft or loss.&lt;br /&gt;
*1.9 Data deletion should be scheduled according to a maximum retention period, (to prevent e.g. data remaining in caches indefinitely).&lt;br /&gt;
*1.10 Bear in mind that there is no known secure deletion procedure for flash memory (unless wiping the entire media). Therefore data encryption is especially important.&lt;br /&gt;
*1.11 Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
*1.12 Apply the principle of minimal disclosure - only collect and disclose data which is required for business use of the application. Identify in the design phase what data is needed, its sensitivity and whether it is appropriate to collect, store and use each data type.&lt;br /&gt;
*1.13 Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so (e.g. use a randomly generated number). Apply the same principles to app sessions as to http sessions/cookies etc....&lt;br /&gt;
*1.14 Application developers may want to incorporate an application-specific &amp;quot;data kill switch&amp;quot; into their products, to allow the per-app deletion of their application's sensitive data when needed (strong authentication is required to protect misuse of such a feature).&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Spyware, Surveillance, Financial malware, UI impersonation User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users reuse their passwords.&lt;br /&gt;
&lt;br /&gt;
*2.1 Instead of passwords consider using authorization tokens that can be securely stored on the device. Encrypt the tokens while stored on the device and in transit (using https). Tokens can be issued by the backend service after verifying the user credentials initially. The tokens could be time bounded  to the specific service as well as revokable (if possible server side), thereby minimizing the damage in loss scenarios. Use the latest versions of the authorization standards (such as OAuth 2.0). Make sure that these tokens expire after an appropriate (not too long) delay. For sensitive applications, tokens should have shorter lifetimes.&lt;br /&gt;
*2.2 In case passwords need to be stored on the device, leverage the encryption and key-store mechanisms provided by the mobile OS to securely store passwords, password equivalents and authorization tokens. Never store passwords in clear text. Do not store passwords or long term session IDs without appropriate encryption or hashing.&lt;br /&gt;
*2.3 Some devices allow developers to use a Secure Element (e.g. http://www.blackberry.com/developers/docs/7.0.0api/net/rim/device/api/io/nfc/se/SecureElement.html ,  http://code.google.com/p/seek-for-android/) - the number of devices offering this functionality is likely to increase. Developers should use such capability to store keys, credentials and other sensitive data.&lt;br /&gt;
*2.4 Provide the ability for the mobile user to change/remove passwords on the device. &lt;br /&gt;
*2.5 Password credentials should not be copied to backups.&lt;br /&gt;
*2.6 Consider using visual/pattern based passwords to aid usability.&lt;br /&gt;
*2.7 Check the entropy (i.e. randomness) of all passwords.&lt;br /&gt;
*2.8 Ensure passwords and keys are not visible in caches or logs.&lt;br /&gt;
*2.9 SMS is not a secure channel and cannot be relied upon to send sensitive information.&lt;br /&gt;
*2.10 Do not store any passwords or secrets in the application binary. Do not use a generic shared secret for integration to backend (like embedded password in code). Mobile application binaries can be easily downloaded and reverse engineered.&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Network spoofing attacks, Surveillance. The majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network (3G, GSM, CDMA and others), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
*3.1 Assume that the network layer is not private. Modern network layer attacks can decrypt provider many network encryption protocols at low cost, and there is no guarantee that the wifi network will be appropriately encrypted.&lt;br /&gt;
*3.2 Applications should enforce the use of an end-to-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. This includes passing user credentials, or other authentication equivalents. In some cases this may mean encrypting all communication.&lt;br /&gt;
*3.3 Enforce strong encryption algorithms and key lengths. Do not allow unsigned certificates and allow only reputable certificate authorities. Do not disable or ignore the SSL chain validation. &lt;br /&gt;
*3.4 For sensitive data, to reduce the risk of man-in-middle attacks (like SSL proxy, SSL strip), a secure connection should only be established after verifying the identity of the remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in the key chain.&lt;br /&gt;
*3.5 The user interface should make it as easy as possible for the user to find out if a certificate is valid.&lt;br /&gt;
*3.6 SMS, MMS or notifications should not be used to send sensitive data to or from mobile end points.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google vulnerability of Client Login account credentials on unprotected wifi - [http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''4. Implement user authentication/authorization and session management correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unauthorized individuals may obtain access to sensitive data or systems. This can be done by circumventing authentication systems (logins) or by reusing valid tokens or cookies.&lt;br /&gt;
&lt;br /&gt;
*4.1 Require appropriate strength user authentication to the application. It may be useful to provide feedback on the strength of the password when it is being entered for the first time. The strength of the authentication mechanism used depends on the data being processed by the application and its access to valuable resources (e.g. costing money).&lt;br /&gt;
*4.2 It is important to ensure that the session management is done correctly after the initial authentication. Require authentication credentials or tokens to be passed with any subsequent request (especially those granting privileged access or modification). &lt;br /&gt;
*4.3 Use high entropy (unpredictable) session identifiers with .&lt;br /&gt;
*4.4 Use context to add security to authentication - e.g. device ID, IP location, etc...&lt;br /&gt;
*4.5 Consider using additional authentication factors for applications giving access to sensitive data or interfaces where possible - e.g. voice, fingerprint (if available), who-you-know, behavioural etc...&lt;br /&gt;
*4.6 Use authentication that ties back to the end user identity (rather than the device identity).&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google's ClientLogin implementation &lt;br /&gt;
[http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''5. Keep the backend APIs (services) and the platform (server) secure''' &lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Attacks on backend systems, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
*5.1 Carry out a specific check of all data transferred betwen the mobile device and web-server backends and other external interfaces - (e.g. is location or other information transferred within file metadata)&lt;br /&gt;
*5.2 All back-end services (WebServices/REST) for mobile apps should be tested for vulnerabilities periodically e.g. using static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
*5.3 Ensure that the back-end platform (server) is running with a hardened configuration with the latest security patches applied to the OS, Web Server and other application components.&lt;br /&gt;
*5.4 Ensure adequate logs are retained on the back-end in order to detect and respond to incidents and perform forensics (within the limits of data protection law).&lt;br /&gt;
*5.6 Employ rate limiting and throttling on a per-user/IP basis (if user identification is available) to reduce the risk from DDoS attack.&lt;br /&gt;
*5.7 Test for DoS vulnerabilities where the server may become overwhelmed by certain resource intensive application calls.&lt;br /&gt;
*5.8 Web Services, REST and APIs can have similar vulnerabilities to Web Applications. Perform testing of the backend Web Service, REST or API to determine vulnerabilities may exist. Perform abuse case testing, in addition to use case testing.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' [https://www.owasp.org/index.php/Web_Services]&lt;br /&gt;
[http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Perform data integration with third party services/applications securely'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Data Leakage&lt;br /&gt;
&lt;br /&gt;
*6.1 Vet the security/authenticity of any third party code/libraries used in your mobile application (reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
*6.2 Track all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile applications using these third party APIs/frameworks.&lt;br /&gt;
*6.3 Pay particular attention to validating all data received from and sent to  non-trusted third party apps (e.g. check ad network software) before processing in the application. &lt;br /&gt;
&lt;br /&gt;
'''7. Pay specific attention to the collection and storage of consent for the collection and use of the user’s data'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unintentional disclosure of personal or private information. In the European Union, it is mandatory to obtain user consent for the collection of personally identifiable information (PII).&lt;br /&gt;
&lt;br /&gt;
*7.1 Create a privacy policy covering the usage of personal data and make it available to the user especially when making consent choices.&lt;br /&gt;
*7.2 Consent may be collected in 3 main ways:&lt;br /&gt;
**At install time&lt;br /&gt;
**At run-time when data is sent&lt;br /&gt;
**Via “opt-out” mechanisms where a default setting is implemented and the user has to turn it off.&lt;br /&gt;
*7.3 Check whether your application is collecting PII - it may not always be obvious - for example do you use persistent identifiers linked to central data stores containing personal information?&lt;br /&gt;
*7.4 Audit communication mechanisms to check for unintended leaks (e.g. image metadata).&lt;br /&gt;
*7.5 Keep a record of consent to the transfer of PII available to the user (consider also the value of keeping server-side records attached to any user data stored).&lt;br /&gt;
*7.6 Check whether your consent collection-mechanism overlaps or conflicts with any other consent-collection within the same stack (e.g. APP-native + webkit HTML)&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' EU Law [http://democrats.energycommerce.house.gov/sites/default/files/image_uploads/Testimony_05.04.11_Spafford.pdf]&lt;br /&gt;
&lt;br /&gt;
'''8. Implement controls to prevent unauthorised access to paid-for resources (wallet, SMS, phone calls etc...)'''&lt;br /&gt;
'''Risks:''' Smartphone apps give programmatic access to premium rate phone calls, SMS, roaming data, NFC payments etc. Apps with privileged access to such API’s should take particular care to prevent abuse given the financial impact of vulnerabilities giving attackers access to the user’s financial resources.&lt;br /&gt;
&lt;br /&gt;
*8.1 Maintain logs of access to paid resources in a non-repudiable format and make them available to the end-user for monitoring (e.g. signed receipt sent to server back-end). Logs should be protected from unauthorised access.&lt;br /&gt;
*8.2 Check for anomalous usage patterns in paid resource usage and require reauthentication. E.g. when significant change in location occurs, user-language changes etc.&lt;br /&gt;
*8.3 Consider using a white-list model by default for paid resource addressing - e.g. address book only unless specifically authorised for phone calls.&lt;br /&gt;
*8.4 Authenticate all API calls to paid resources (e.g. using an app developer certificate).&lt;br /&gt;
*8.5 Ensure that wallet API callbacks do not pass cleartext account/pricing/ billing/item information.&lt;br /&gt;
*8.6 Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
*8.7 Minimise data transfers using techniques such as fast dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google Wallet Security [http://www.google.com/wallet/how-it-works-security.html]&lt;br /&gt;
&lt;br /&gt;
'''9. Ensure secure distribution/provisioning of mobile applications'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' &lt;br /&gt;
*9.1 Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores and the extra delay this may imply.&lt;br /&gt;
*9.2 Provide remote kill functionality &lt;br /&gt;
*9.3 Feedback channels&lt;br /&gt;
*9.4 Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors '''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
*10.1 Minimise runtime interpretation and capabilities offered to runtime interpreters.&lt;br /&gt;
*10.2 Run interpreters at minimal privilege levels.&lt;br /&gt;
*10.3 Fuzz test interpreters.&lt;br /&gt;
*10.4 Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data and use of third party API’s - e.g. javascript interpreters.&lt;br /&gt;
*10.5 Define a comprehensive escape syntax as appropriate.&lt;br /&gt;
&lt;br /&gt;
=== Candidates (for consideration) ===&lt;br /&gt;
&lt;br /&gt;
'''A: Some general coding best practices are particularly relevant to mobile coding too'''&lt;br /&gt;
*Input Validation and Output Encoding&lt;br /&gt;
*Minimise lines of code.&lt;br /&gt;
*Use safe languages (e.g. from buffer-overflow).&lt;br /&gt;
*Implement a security report handling point (address) security@example.com &lt;br /&gt;
*Use static and binary code analyzers to find security flaws.&lt;br /&gt;
*Use safe string functions, avoid buffer and Integer overflow.&lt;br /&gt;
*Run with the minimum privilege required for the application on the operating system. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
*Don't authorize code/app to execute with root/sa privilege&lt;br /&gt;
*Always perform testing as a standard as well as a privileged user&lt;br /&gt;
*Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS.&lt;br /&gt;
*Context aware security: may be able to decrease/increase access based on the context (e.g. location, network) - &lt;br /&gt;
*Remove all test code before releasing the application&lt;br /&gt;
*Ensure logging is done appropriately but do not record excessive logs, especially including sensitive user information.&lt;br /&gt;
*//What sort of information should be recorded in the logs. (Keep audit data on the server, no user specific data - link to the Apple Issue - Signed Timestamps) &lt;br /&gt;
&lt;br /&gt;
'''B. Enforce higher security posture on the device for sensitive apps used in an enterprise context:''' // Vinay to check&lt;br /&gt;
*If a sensitive application needs to be provisioned on a device, application can employ enforcement of the certain security posture on the device (such as PIN, remote management/wipe) // Vinay - Still needs to be clarified&lt;br /&gt;
*Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive applications&lt;br /&gt;
*Banking Apps&lt;br /&gt;
*//(Remote Management, PIN enforcement, encryption, application monitoring)&lt;br /&gt;
**Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance? Is this a common feature - device-cert - I have not come across it.&lt;br /&gt;
&lt;br /&gt;
'''C. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
Risk: User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
*(?? What guidelines could be provided to developers)&lt;br /&gt;
U*ser education on using due diligence while installing third party applications on mobile devices&lt;br /&gt;
&lt;br /&gt;
'''D. Provide or use an existing reporting channel for phishing from apps '''&lt;br /&gt;
&lt;br /&gt;
(e.g. if you are a browser plugin developer). //APWG? Can we recommend one?&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=115381</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=115381"/>
				<updated>2011-08-10T07:53:43Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure: Mobile devices (being mobile) have a higher risk of loss or theft. Adequate protection should be built in to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
*1.1 In the design phase classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, personal data, location, error logs etc.). Process, store and use data according to its classification. Validate the security of methods applied to sensitive data.&lt;br /&gt;
*1.2 Store sensitive data on the server instead of client-end device. This is based on the assumption that secure network connectivity is always available and that protection mechanisms available to server side storage are superior. The relative security of client vs server-side security also needs to be assessed on a case-by-case basis (see ENISA cloud risk assessment or OWASP Cloud top 10 for decision support).&lt;br /&gt;
*1.3 If server-side storage and encryption is not a possibility, use file encryption APIs provided by the OS or other trusted source (check first for well-known vulnerabilities). Some platforms provide file encryption API’s which use a private key protected by the device unlock code and deleted on remote kill. If this is available, it should be used as it increases the security of the encryption without creating extra burden for the end-user. It also makes stored data safer in the case of loss or theft.&lt;br /&gt;
*1.4 Do not store/cache sensitive data (including keys) unless they are encrypted and if possible stored in a tamper-proof area (see 2).&lt;br /&gt;
*1.5 Consider restricting access to sensitive data based on contextual information such as location (e.g. wallet App not usable outside Europe, car key not usable unless within 100m of car etc...).&lt;br /&gt;
*1.6 Do not store historical GPS/tracking or other sensitive information on the device beyond the period required by the application (see 1.8).&lt;br /&gt;
*1.7 Assume that shared storage is untrusted - information may easily leak in unexpected ways through any shared storage. In particular:&lt;br /&gt;
**Be aware of caches and temporary storage as a possible leakage channel when shared with other apps.&lt;br /&gt;
**Be aware of public shared storage such as address book, media gallery, audio files, as a possible leakage channel. For example storing images with location metadata in the media-gallery allows that information to be shared in unintended ways.&lt;br /&gt;
**Do not store temp/cached data in a world readable directory.&lt;br /&gt;
*1.8 Applications on managed devices should leverage remote wipe and kill switch APIs (OS-level or purpose-built) to remove sensitive information from the device in the event of theft or loss.&lt;br /&gt;
*1.9 Data deletion should be scheduled according to a maximum retention period, (to prevent e.g. data remaining in caches indefinitely).&lt;br /&gt;
*1.10 Bear in mind that there is no known secure deletion procedure for flash memory (unless wiping the entire media). Therefore data encryption is especially important.&lt;br /&gt;
*1.11 Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
*1.12 Apply the principle of minimal disclosure - only collect and disclose data which is required for business use of the application. Identify in the design phase what data is needed, its sensitivity and whether it is appropriate to collect, store and use each data type.&lt;br /&gt;
*1.13 Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so (e.g. use a randomly generated number). Apply the same principles to app sessions as to http sessions/cookies etc....&lt;br /&gt;
*1.14 Application developers may want to incorporate an application-specific &amp;quot;data kill switch&amp;quot; into their products, to allow the per-app deletion of their application's sensitive data when needed (strong authentication is required to protect misuse of such a feature).&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Spyware, Surveillance, Financial malware, UI impersonation User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users reuse their passwords.&lt;br /&gt;
&lt;br /&gt;
*2.1 Instead of passwords consider using authorization tokens that can be securely stored on the device. Encrypt the tokens while stored on the device and in transit (using https). Tokens can be issued by the backend service after verifying the user credentials initially. The tokens could be time bounded  to the specific service as well as revokable (if possible server side), thereby minimizing the damage in loss scenarios. Use the latest versions of the authorization standards (such as OAuth 2.0). Make sure that these tokens expire after an appropriate (not too long) delay. For sensitive applications, tokens should have shorter lifetimes.&lt;br /&gt;
*2.2 In case passwords need to be stored on the device, leverage the encryption and key-store mechanisms provided by the mobile OS to securely store passwords, password equivalents and authorization tokens. Never store passwords in clear text. Do not store passwords or long term session IDs without appropriate encryption or hashing.&lt;br /&gt;
*2.3 Some devices allow developers to use a Secure Element (e.g. http://www.blackberry.com/developers/docs/7.0.0api/net/rim/device/api/io/nfc/se/SecureElement.html ,  http://code.google.com/p/seek-for-android/) - the number of devices offering this functionality is likely to increase. Developers should use such capability to store keys, credentials and other sensitive data.&lt;br /&gt;
*2.4 Provide the ability for the mobile user to change/remove passwords on the device. &lt;br /&gt;
*2.5 Password credentials should not be copied to backups.&lt;br /&gt;
*2.6 Consider using visual/pattern based passwords to aid usability.&lt;br /&gt;
*2.7 Check the entropy (i.e. randomness) of all passwords.&lt;br /&gt;
*2.8 Ensure passwords and keys are not visible in caches or logs.&lt;br /&gt;
*2.9 SMS is not a secure channel and cannot be relied upon to send sensitive information.&lt;br /&gt;
*2.10 Do not store any passwords or secrets in the application binary. Do not use a generic shared secret for integration to backend (like embedded password in code). Mobile application binaries can be easily downloaded and reverse engineered.&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Network spoofing attacks, Surveillance. The majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network (3G, GSM, CDMA and others), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
*3.1 Assume that the network layer is not private. Modern network layer attacks can decrypt provider many network encryption protocols at low cost, and there is no guarantee that the wifi network will be appropriately encrypted.&lt;br /&gt;
*3.2 Applications should enforce the use of an end-to-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. This includes passing user credentials, or other authentication equivalents. In some cases this may mean encrypting all communication.&lt;br /&gt;
*3.3 Enforce strong encryption algorithms and key lengths. Do not allow unsigned certificates and allow only reputable certificate authorities. Do not disable or ignore the SSL chain validation. &lt;br /&gt;
*3.4 For sensitive data, to reduce the risk of man-in-middle attacks (like SSL proxy, SSL strip), a secure connection should only be established after verifying the identity of the remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in the key chain.&lt;br /&gt;
*3.5 The user interface should make it as easy as possible for the user to find out if a certificate is valid.&lt;br /&gt;
*3.6 SMS, MMS or notifications should not be used to send sensitive data to or from mobile end points.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google vulnerability of Client Login account credentials on unprotected wifi - [http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''4. Implement user authentication/authorization and session management correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unauthorized individuals may obtain access to sensitive data or systems. This can be done by circumventing authentication systems (logins) or by reusing valid tokens or cookies.&lt;br /&gt;
&lt;br /&gt;
*4.1 Require appropriate strength user authentication to the application. It may be useful to provide feedback on the strength of the password when it is being entered for the first time. The strength of the authentication mechanism used depends on the data being processed by the application and its access to valuable resources (e.g. costing money).&lt;br /&gt;
*4.2 It is important to ensure that the session management is done correctly after the initial authentication. Require authentication credentials or tokens to be passed with any subsequent request (especially those granting privileged access or modification). &lt;br /&gt;
*4.3 Use high entropy (unpredictable) session identifiers with .&lt;br /&gt;
*4.4 Use context to add security to authentication - e.g. device ID, IP location, etc...&lt;br /&gt;
*4.5 Consider using additional authentication factors for applications giving access to sensitive data or interfaces where possible - e.g. voice, fingerprint (if available), who-you-know, behavioural etc...&lt;br /&gt;
*4.6 Use authentication that ties back to the end user identity (rather than the device identity).&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google's ClientLogin implementation &lt;br /&gt;
[http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''5. Keep the backend APIs (services) and the platform (server) secure''' &lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Attacks on backend systems, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
*5.1 Carry out a specific check of all data transferred betwen the mobile device and web-server backends and other external interfaces - (e.g. is location or other information transferred within file metadata)&lt;br /&gt;
*5.2 All back-end services (WebServices/REST) for mobile apps should be tested for vulnerabilities periodically e.g. using static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
*5.3 Ensure that the back-end platform (server) is running with a hardened configuration with the latest security patches applied to the OS, Web Server and other application components.&lt;br /&gt;
*5.4 Ensure adequate logs are retained on the back-end in order to detect and respond to incidents and perform forensics (within the limits of data protection law).&lt;br /&gt;
*5.6 Employ rate limiting and throttling on a per-user/IP basis (if user identification is available) to reduce the risk from DDoS attack.&lt;br /&gt;
*5.7 Test for DoS vulnerabilities where the server may become overwhelmed by certain resource intensive application calls.&lt;br /&gt;
*5.8 Web Services, REST and APIs can have similar vulnerabilities to Web Applications. Perform testing of the backend Web Service, REST or API to determine vulnerabilities may exist. Perform abuse case testing, in addition to use case testing.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' [https://www.owasp.org/index.php/Web_Services]&lt;br /&gt;
[http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Perform data integration with third party services/applications securely'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Data Leakage&lt;br /&gt;
&lt;br /&gt;
*6.1 Vet the security/authenticity of any third party code/libraries used in your mobile application (reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
*6.2 Track all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile applications using these third party APIs/frameworks.&lt;br /&gt;
*6.3 Pay particular attention to validating all data received from and sent to  non-trusted third party apps (e.g. check ad network software) before processing in the application. &lt;br /&gt;
&lt;br /&gt;
'''7. Pay specific attention to the collection and storage of consent for the collection and use of the user’s data'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unintentional disclosure of personal or private information. In the European Union, it is mandatory to obtain user consent for the collection of personally identifiable information (PII).&lt;br /&gt;
&lt;br /&gt;
*7.1 Create a privacy policy covering the usage of personal data and make it available to the user especially when making consent choices.&lt;br /&gt;
*7.2 Consent may be collected in 3 main ways:&lt;br /&gt;
**At install time&lt;br /&gt;
**At run-time when data is sent&lt;br /&gt;
**Via “opt-out” mechanisms where a default setting is implemented and the user has to turn it off.&lt;br /&gt;
*7.3 Check whether your application is collecting PII - it may not always be obvious - for example do you use persistent identifiers linked to central data stores containing personal information?&lt;br /&gt;
*7.4 Audit communication mechanisms to check for unintended leaks (e.g. image metadata).&lt;br /&gt;
*7.5 Keep a record of consent to the transfer of PII available to the user (consider also the value of keeping server-side records attached to any user data stored).&lt;br /&gt;
*7.6 Check whether your consent collection-mechanism overlaps or conflicts with any other consent-collection within the same stack (e.g. APP-native + webkit HTML)&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' EU Law [http://democrats.energycommerce.house.gov/sites/default/files/image_uploads/Testimony_05.04.11_Spafford.pdf]&lt;br /&gt;
&lt;br /&gt;
'''8. Implement controls to prevent unauthorised access to paid-for resources (wallet, SMS, phone calls etc...)'''&lt;br /&gt;
'''Risks:''' Smartphone apps give programmatic access to premium rate phone calls, SMS, roaming data, NFC payments etc. Apps with privileged access to such API’s should take particular care to prevent abuse given the financial impact of vulnerabilities giving attackers access to the user’s financial resources.&lt;br /&gt;
&lt;br /&gt;
*8.1 Maintain logs of access to paid resources in a non-repudiable format and make them available to the end-user for monitoring (e.g. signed receipt sent to server back-end). Logs should be protected from unauthorised access.&lt;br /&gt;
*8.2 Check for anomalous usage patterns in paid resource usage and require reauthentication. E.g. when significant change in location occurs, user-language changes etc.&lt;br /&gt;
*8.3 Consider using a white-list model by default for paid resource addressing - e.g. address book only unless specifically authorised for phone calls.&lt;br /&gt;
*8.4 Authenticate all API calls to paid resources (e.g. using an app developer certificate).&lt;br /&gt;
*8.5 Ensure that wallet API callbacks do not pass cleartext account/pricing/ billing/item information.&lt;br /&gt;
*8.6 Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
*8.7 Minimise data transfers using techniques such as fast dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google Wallet Security [http://www.google.com/wallet/how-it-works-security.html]&lt;br /&gt;
&lt;br /&gt;
'''9. Ensure secure distribution/provisioning of mobile applications'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' &lt;br /&gt;
*9.1 Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores and the extra delay this may imply.&lt;br /&gt;
*9.2 Provide remote kill functionality &lt;br /&gt;
*9.3 Feedback channels&lt;br /&gt;
*9.4 Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors '''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
*10.1 Minimise runtime interpretation and capabilities offered to runtime interpreters.&lt;br /&gt;
*10.2 Run interpreters at minimal privilege levels.&lt;br /&gt;
*10.3 Fuzz test interpreters.&lt;br /&gt;
*10.4 Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data and use of third party API’s - e.g. javascript interpreters.&lt;br /&gt;
*10.5 Define a comprehensive escape syntax as appropriate.&lt;br /&gt;
&lt;br /&gt;
=== Candidates (for consideration) ===&lt;br /&gt;
&lt;br /&gt;
'''A: Some general coding best practices are particularly relevant to mobile coding too'''&lt;br /&gt;
*Input Validation and Output Encoding&lt;br /&gt;
*Minimise lines of code.&lt;br /&gt;
*Use safe languages (e.g. from buffer-overflow).&lt;br /&gt;
*Implement a security report handling point (address) security@example.com &lt;br /&gt;
*Use static and binary code analyzers to find security flaws.&lt;br /&gt;
*Use safe string functions, avoid buffer and Integer overflow.&lt;br /&gt;
*Run with the minimum privilege required for the application on the operating system. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
*Don't authorize code/app to execute with root/sa privilege&lt;br /&gt;
*Always perform testing as a standard as well as a privileged user&lt;br /&gt;
*Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS.&lt;br /&gt;
*Context aware security: may be able to decrease/increase access based on the context (e.g. location, network) - &lt;br /&gt;
*Remove all test code before releasing the application&lt;br /&gt;
*Ensure logging is done appropriately but do not record excessive logs, especially including sensitive user information.&lt;br /&gt;
*//What sort of information should be recorded in the logs. (Keep audit data on the server, no user specific data - link to the Apple Issue - Signed Timestamps) &lt;br /&gt;
&lt;br /&gt;
'''B. Enforce higher security posture on the device for sensitive apps used in an enterprise context:''' // Vinay to check&lt;br /&gt;
*If a sensitive application needs to be provisioned on a device, application can employ enforcement of the certain security posture on the device (such as PIN, remote management/wipe) // Vinay - Still needs to be clarified&lt;br /&gt;
*Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive applications&lt;br /&gt;
*Banking Apps&lt;br /&gt;
*//(Remote Management, PIN enforcement, encryption, application monitoring)&lt;br /&gt;
**Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance? Is this a common feature - device-cert - I have not come across it.&lt;br /&gt;
&lt;br /&gt;
'''C. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
Risk: User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
*(?? What guidelines could be provided to developers)&lt;br /&gt;
U*ser education on using due diligence while installing third party applications on mobile devices&lt;br /&gt;
&lt;br /&gt;
'''D. Provide or use an existing reporting channel for phishing from apps '''&lt;br /&gt;
&lt;br /&gt;
(e.g. if you are a browser plugin developer). //APWG? Can we recommend one?&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=115380</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=115380"/>
				<updated>2011-08-10T07:47:58Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure: Mobile devices (being mobile) have a higher risk of loss or theft. Adequate protection should be built in to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
*1.1 In the design phase classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, personal data, location, error logs etc.). Process, store and use data according to its classification. Validate the security of methods applied to sensitive data.&lt;br /&gt;
*1.2 Store sensitive data on the server instead of client-end device. This is based on the assumption that secure network connectivity is always available and that protection mechanisms available to server side storage are superior. The relative security of client vs server-side security also needs to be assessed on a case-by-case basis (see ENISA cloud risk assessment or OWASP Cloud top 10 for decision support).&lt;br /&gt;
*1.3 If server-side storage and encryption is not a possibility, use file encryption APIs provided by the OS or other trusted source (check first for well-known vulnerabilities). Some platforms provide file encryption API’s which use a private key protected by the device unlock code and deleted on remote kill. If this is available, it should be used as it increases the security of the encryption without creating extra burden for the end-user. It also makes stored data safer in the case of loss or theft.&lt;br /&gt;
*1.4 Do not store/cache sensitive data (including keys) unless they are encrypted and if possible stored in a tamper-proof area (see 2).&lt;br /&gt;
*1.5 Consider restricting access to sensitive data based on contextual information such as location (e.g. wallet App not usable outside Europe, car key not usable unless within 100m of car etc...).&lt;br /&gt;
*1.6 Do not store historical GPS/tracking or other sensitive information on the device beyond the period required by the application (see 1.8).&lt;br /&gt;
*1.7 Assume that shared storage is untrusted - information may easily leak in unexpected ways through any shared storage. In particular:&lt;br /&gt;
**Be aware of caches and temporary storage as a possible leakage channel when shared with other apps.&lt;br /&gt;
**Be aware of public shared storage such as address book, media gallery, audio files, as a possible leakage channel. For example storing images with location metadata in the media-gallery allows that information to be shared in unintended ways.&lt;br /&gt;
**Do not store temp/cached data in a world readable directory.&lt;br /&gt;
*1.8 Applications on managed devices should leverage remote wipe and kill switch APIs (OS-level or purpose-built) to remove sensitive information from the device in the event of theft or loss.&lt;br /&gt;
*1.9 Data deletion should be scheduled according to a maximum retention period, (to prevent e.g. data remaining in caches indefinitely).&lt;br /&gt;
*1.10 Bear in mind that there is no known secure deletion procedure for flash memory (unless wiping the entire media). Therefore data encryption is especially important.&lt;br /&gt;
*1.11 Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
*1.12 Apply the principle of minimal disclosure - only collect and disclose data which is required for business use of the application. Identify in the design phase what data is needed, its sensitivity and whether it is appropriate to collect, store and use each data type.&lt;br /&gt;
*1.13 Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so (e.g. use a randomly generated number). Apply the same principles to app sessions as to http sessions/cookies etc....&lt;br /&gt;
*1.14 Application developers may want to incorporate an application-specific &amp;quot;data kill switch&amp;quot; into their products, to allow the per-app deletion of their application's sensitive data when needed (strong authentication is required to protect misuse of such a feature).&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Spyware, Surveillance, Financial malware, UI impersonation User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users reuse their passwords.&lt;br /&gt;
&lt;br /&gt;
*2.1 Instead of passwords consider using authorization tokens that can be securely stored on the device. Encrypt the tokens while stored on the device and in transit (using https). Tokens can be issued by the backend service after verifying the user credentials initially. The tokens could be time bounded  to the specific service as well as revokable (if possible server side), thereby minimizing the damage in loss scenarios. Use the latest versions of the authorization standards (such as OAuth 2.0). Make sure that these tokens expire after an appropriate (not too long) delay. For sensitive applications, tokens should have shorter lifetimes.&lt;br /&gt;
*2.2 In case passwords need to be stored on the device, leverage the encryption and key-store mechanisms provided by the mobile OS to securely store passwords, password equivalents and authorization tokens. Never store passwords in clear text. Do not store passwords or long term session IDs without appropriate encryption or hashing.&lt;br /&gt;
*2.3 Some devices allow developers to use a Secure Element (e.g. http://www.blackberry.com/developers/docs/7.0.0api/net/rim/device/api/io/nfc/se/SecureElement.html ,  http://code.google.com/p/seek-for-android/) - the number of devices offering this functionality is likely to increase. Developers should use such capability to store keys, credentials and other sensitive data.&lt;br /&gt;
*2.4 Provide the ability for the mobile user to change/remove passwords on the device. &lt;br /&gt;
*2.5 Password credentials should not be copied to backups.&lt;br /&gt;
*2.6 Consider using visual/pattern based passwords to aid usability.&lt;br /&gt;
*2.7 Check the entropy of all passwords.&lt;br /&gt;
*2.8 Ensure passwords and keys are not visible in cache or logs.&lt;br /&gt;
*2.9 SMS is not a secure channel and cannot be relied upon to send sensitive information.&lt;br /&gt;
*2.10 Do not store any passwords or secrets in the application binary. Do not use a generic shared secret for integration to backend (like embedded password in code). Mobile application binaries can be easily downloaded and reverse engineered.&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Network spoofing attacks, Surveillance. The majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network (3G, GSM, CDMA and others), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
*3.1 Assume that the network layer is not private. Modern network layer attacks can decrypt provider network encryption, and there is no guarantee that the wifi network will be appropriately encrypted.&lt;br /&gt;
*3.2 Applications should enforce the use of an end-to-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. This includes passing user credentials, or other authentication equivalents. In some cases this may mean encrypting all communication.&lt;br /&gt;
*3.3 Enforce strong encryption algorithms and key lengths. Do not allow unsigned certificates and allow only reputable certificate authorities. Do not disable or ignore the SSL chain validation. &lt;br /&gt;
*3.4 For sensitive data, to reduce the risk of man-in-middle attacks (like SSL proxy, SSL strip), a secure connection should only be established after verifying the identity of the remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in the key chain.&lt;br /&gt;
*3.5 The user interface should make it as easy as possible for the user to find out if a certificate is valid.&lt;br /&gt;
*3.6 SMS, MMS or notifications should not be used to send sensitive data to or from mobile end points.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google vulnerability of Client Login account credentials on unprotected wifi - [http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''4. Implement user authentication/authorization and session management correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unauthorized individuals may obtain access to sensitive data or systems. This can be done by circumventing authentication systems (logins) or by reusing valid tokens or cookies.&lt;br /&gt;
&lt;br /&gt;
*4.1 Require appropriate strength user authentication to the application. It may be useful to provide feedback on the strength of the password when it is being entered for the first time. The strength of the authentication mechanism used depends on the data being processed by the application and its access to valuable resources (e.g. costing money).&lt;br /&gt;
*4.2 It is important to ensure that the session management is done correctly after the initial authentication. Require authentication credentials or tokens to be passed with any subsequent request (especially those granting privileged access or modification). &lt;br /&gt;
*4.3 Use unpredictable session identifiers with high entropy.&lt;br /&gt;
*4.4 Use context to add security to authentication - e.g. device ID, IP location, etc...&lt;br /&gt;
*4.5 Consider using additional authentication factors for applications giving access to sensitive data or interfaces where possible - e.g. voice, fingerprint (if available), who-you-know, behavioural etc...&lt;br /&gt;
*4.6 Use authentication that ties back to the end user identity (rather than the device identity).&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google's ClientLogin implementation &lt;br /&gt;
[http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''5. Keep the backend APIs (services) and the platform (server) secure''' &lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Attacks on backend systems, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
*5.1 Carry out a specific check of all data transferred betwen the mobile device and web-server backends and other external interfaces - (e.g. is location or other information transferred within file metadata)&lt;br /&gt;
*5.2 All back-end services (WebServices/REST) for mobile apps should be tested for vulnerabilities periodically e.g. using static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
*5.3 Ensure that the back-end platform (server) is running with a hardened configuration with the latest security patches applied to the OS, Web Server and other application components.&lt;br /&gt;
*5.4 Ensure adequate logs are retained on the back-end in order to detect and respond to incidents and perform forensics (within the limits of data protection law).&lt;br /&gt;
*5.6 Employ rate limiting and throttling on a per-user/IP basis (if user identification is available) to reduce the risk from DDoS attack.&lt;br /&gt;
*5.7 Test for DoS vulnerabilities where the server may become overwhelmed by certain resource intensive application calls.&lt;br /&gt;
*5.8 Web Services, REST and APIs can have similar vulnerabilities to Web Applications. Perform testing of the backend Web Service, REST or API to determine vulnerabilities may exist. Perform abuse case testing, in addition to use case testing.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' [https://www.owasp.org/index.php/Web_Services]&lt;br /&gt;
[http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Perform data integration with third party services/applications securely'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Data Leakage&lt;br /&gt;
&lt;br /&gt;
*6.1 Vet the security/authenticity of any third party code/libraries used in your mobile application (reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
*6.2 Track all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile applications using these third party APIs/frameworks.&lt;br /&gt;
*6.3 Pay particular attention to validating all data received from and sent to  non-trusted third party apps (e.g. ad network software) before processing in the application. &lt;br /&gt;
&lt;br /&gt;
'''7. Pay specific attention to the collection and storage of consent for the collection and use of the user’s data'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unintentional disclosure of personal or private information. In the European Union, it is mandatory to obtain user consent for the collection of personally identifiable information (PII).&lt;br /&gt;
&lt;br /&gt;
*7.1 Create a privacy policy covering the usage of personal data and make it available to the user especially when making consent choices.&lt;br /&gt;
*7.2 Consent may be collected in 3 main ways:&lt;br /&gt;
**At install time&lt;br /&gt;
**At run-time when data is sent&lt;br /&gt;
**Via “opt-out” mechanisms where a default setting is implemented and the user has to turn it off.&lt;br /&gt;
*7.3 Check whether your application is collecting PII - it may not always be obvious - for example do you use persistent identifiers linked to central data stores containing personal information?&lt;br /&gt;
*7.4 Audit communication mechanisms to check for unintended leaks (e.g. image metadata).&lt;br /&gt;
*7.5 Keep a record of consent to the transfer of PII available to the user (consider also the value of keeping server-side records attached to any user data stored).&lt;br /&gt;
*7.6 Check whether your consent collection-mechanism overlaps or conflicts with any other consent-collection within the same stack (e.g. APP-native + webkit HTML)&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' EU Law [http://democrats.energycommerce.house.gov/sites/default/files/image_uploads/Testimony_05.04.11_Spafford.pdf]&lt;br /&gt;
&lt;br /&gt;
'''8. Implement controls to prevent unauthorised access to paid-for resources (wallet, SMS, phone calls etc...)'''&lt;br /&gt;
'''Risks:''' Smartphone apps give programmatic access to premium rate phone calls, SMS, roaming data, NFC payments etc. Apps with privileged access to such API’s should take particular care to prevent abuse given the financial impact of vulnerabilities giving attackers access to the user’s financial resources.&lt;br /&gt;
&lt;br /&gt;
*8.1 Maintain logs of access to paid resources in a non-repudiable format and make them available to the end-user for monitoring (e.g. signed receipt sent to server back-end). Logs should be protected from unauthorised access.&lt;br /&gt;
*8.2 Check for anomalous usage patterns in paid resource usage and require reauthentication. E.g. when significant change in location occurs, user-language changes etc.&lt;br /&gt;
*8.3 Consider using a white-list model by default for paid resource addressing - e.g. address book only unless specifically authorised for phone calls.&lt;br /&gt;
*8.4 Authenticate all API calls to paid resources (e.g. using an app developer certificate).&lt;br /&gt;
*8.5 Ensure that wallet API callbacks do not pass cleartext account/pricing/ billing/item information.&lt;br /&gt;
*8.6 Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
*8.7 Implement best practices such as fast dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google Wallet Security [http://www.google.com/wallet/how-it-works-security.html]&lt;br /&gt;
&lt;br /&gt;
'''9. Ensure Secure distribution/provisioning of mobile applications'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' &lt;br /&gt;
*9.1 Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores and the extra delay this may imply.&lt;br /&gt;
*9.2 Provide remote kill functionality &lt;br /&gt;
*9.3 Feedback channels&lt;br /&gt;
*9.4 Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors '''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
*10.1 Minimise runtime interpretation and capabilities offered to runtime interpreters.&lt;br /&gt;
*10.2 Run interpreters at minimal privilege levels.&lt;br /&gt;
*10.3 Fuzz test interpreters.&lt;br /&gt;
*10.4 Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data and use of third party API’s - e.g. javascript interpreters.&lt;br /&gt;
*10.5 Define a comprehensive escape syntax as appropriate.&lt;br /&gt;
//Giles look for an example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (for consideration) ===&lt;br /&gt;
&lt;br /&gt;
'''A: Some general coding best practices are particularly relevant to mobile coding too'''&lt;br /&gt;
*Input Validation and Output Encoding&lt;br /&gt;
*Minimise lines of code.&lt;br /&gt;
*Use safe languages (e.g. from buffer-overflow).&lt;br /&gt;
*Implement a security report handling point (address) security@example.com &lt;br /&gt;
*Use static and binary code analyzers to find security flaws.&lt;br /&gt;
*Use safe string functions, avoid buffer and Integer overflow.&lt;br /&gt;
*Run with the minimum privilege required for the application on the operating system. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
*Don't authorize code/app to execute with root/sa privilege&lt;br /&gt;
*Always perform testing as a standard as well as a privileged user&lt;br /&gt;
*Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS.&lt;br /&gt;
*Context aware security: may be able to decrease/increase access based on the context (e.g. location, network) - &lt;br /&gt;
*Remove all test code before releasing the application&lt;br /&gt;
*Ensure logging is done appropriately but do not record excessive logs, especially including sensitive user information.&lt;br /&gt;
*//What sort of information should be recorded in the logs. (Keep audit data on the server, no user specific data - link to the Apple Issue - Signed Timestamps) &lt;br /&gt;
&lt;br /&gt;
'''B. Enforce higher security posture on the device for sensitive apps used in an enterprise context:''' // Vinay to check&lt;br /&gt;
*If a sensitive application needs to be provisioned on a device, application can employ enforcement of the certain security posture on the device (such as PIN, remote management/wipe) // Vinay - Still needs to be clarified&lt;br /&gt;
*Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive applications&lt;br /&gt;
*Banking Apps&lt;br /&gt;
*//(Remote Management, PIN enforcement, encryption, application monitoring)&lt;br /&gt;
**Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance? Is this a common feature - device-cert - I have not come across it.&lt;br /&gt;
&lt;br /&gt;
'''C. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
Risk: User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
*(?? What guidelines could be provided to developers)&lt;br /&gt;
U*ser education on using due diligence while installing third party applications on mobile devices&lt;br /&gt;
&lt;br /&gt;
'''D. Provide or use an existing reporting channel for phishing from apps '''&lt;br /&gt;
&lt;br /&gt;
(e.g. if you are a browser plugin developer). //APWG? Can we recommend one?&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=115379</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=115379"/>
				<updated>2011-08-10T07:46:37Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure: Mobile devices (being mobile) have a higher risk of loss or theft. Adequate protection should be built in to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
*1.1 In the design phase classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, personal data, location, error logs etc.). Process, store and use data according to its classification. Validate the security of methods applied to sensitive data.&lt;br /&gt;
*1.2 Store sensitive data on the server instead of client-end device. This is based on the assumption that secure network connectivity is always available and that protection mechanisms available to server side storage are superior. The relative security of client vs server-side security also needs to be assessed on a case-by-case basis (see ENISA cloud risk assessment or OWASP Cloud top 10 for decision support).&lt;br /&gt;
*1.3 If server-side storage and encryption is not a possibility, use file encryption APIs provided by the OS or other trusted source (check first for well-known vulnerabilities). Some platforms provide file encryption API’s which use a private key protected by the device unlock code and deleted on remote kill. If this is available, it should be used as it increases the security of the encryption without creating extra burden for the end-user. It also makes stored data safer in the case of loss or theft.&lt;br /&gt;
*1.4 Do not store/cache sensitive data (including keys) unless they are encrypted and if possible stored in a tamper-proof area (see 2).&lt;br /&gt;
*1.5 Consider restricting access to sensitive data based on contextual information such as location (e.g. wallet App not usable outside Europe, car key not usable unless within 100m of car etc...).&lt;br /&gt;
*1.6 Do not store historical GPS/tracking or other sensitive information on the device beyond the period required by the application (see 1.8).&lt;br /&gt;
*1.7 Assume that shared storage is untrusted - information may easily leak in unexpected ways through any shared storage. In particular:&lt;br /&gt;
**Be aware of caches and temporary storage as a possible leakage channel when shared with other apps.&lt;br /&gt;
**Be aware of public shared storage such as address book, media gallery, audio files, as a possible leakage channel. For example storing images with location metadata in the media-gallery allows that information to be shared in unintended ways.&lt;br /&gt;
**Do not store temp/cached data in a world readable directory.&lt;br /&gt;
*1.8 Applications on managed devices should leverage remote wipe and kill switch APIs (OS-level or purpose-built) to remove sensitive information from the device in the event of theft or loss.&lt;br /&gt;
*1.9 Data deletion should be scheduled according to a maximum retention period, (to prevent e.g. data remaining in caches indefinitely).&lt;br /&gt;
*1.10 Bear in mind that there is no known secure deletion procedure for flash memory (unless wiping the entire media). Therefore data encryption is especially important.&lt;br /&gt;
*1.11 Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
*1.12 Apply the principle of minimal disclosure - only collect and disclose data which is required for business use of the application. Identify in the design phase what data is needed, its sensitivity and whether it is appropriate to collect, store and use each data type.&lt;br /&gt;
*1.13 Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so (e.g. use a randomly generated number). Apply the same principles to app sessions as to http sessions/cookies etc....&lt;br /&gt;
*1.14 Application developers may want to incorporate an application-specific &amp;quot;data kill switch&amp;quot; into their products, to allow the per-app deletion of their application's sensitive data when needed (strong authentication is required to protect misuse of such a feature).&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Spyware, Surveillance, Financial malware, UI impersonation User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users reuse their passwords.&lt;br /&gt;
&lt;br /&gt;
*2.1 Instead of passwords consider using authorization tokens that can be securely stored on the device. Encrypt the tokens while stored on the device and in transit (using https). Tokens can be issued by the backend service after verifying the user credentials initially. The tokens could be time bounded  to the specific service as well as revokable (if possible server side), thereby minimizing the damage in loss scenarios. Use the latest versions of the authorization standards (such as OAuth 2.0). Make sure that these tokens expire after an appropriate (not too long) delay. For sensitive applications, tokens should have shorter lifetimes.&lt;br /&gt;
*2.2 In case passwords need to be stored on the device, leverage the encryption and key-store mechanisms provided by the mobile OS to securely store passwords, password equivalents and authorization tokens. Never store passwords in clear text. Do not store passwords or long term session IDs without appropriate encryption or hashing.&lt;br /&gt;
*2.3 Some devices allow developers to use a Secure Element (e.g. http://www.blackberry.com/developers/docs/7.0.0api/net/rim/device/api/io/nfc/se/SecureElement.html ,  http://code.google.com/p/seek-for-android/  //Check whether NFC only) - the number of devices offering this functionality is likely to increase. Developers should use such capability to store keys, credentials and other sensitive data.&lt;br /&gt;
*2.4 Provide the ability for the mobile user to change/remove passwords on the device. &lt;br /&gt;
*2.5 Password credentials should not be copied to backups.&lt;br /&gt;
*2.6 Consider using visual/pattern based passwords to aid usability.&lt;br /&gt;
*2.7 Check the entropy of all passwords.&lt;br /&gt;
*2.8 Ensure passwords and keys are not visible in cache or logs.&lt;br /&gt;
*2.9 SMS is not a secure channel and cannot be relied upon to send sensitive information.&lt;br /&gt;
*2.10 Do not store any passwords or secrets in the application binary. Do not use a generic shared secret for integration to backend (like embedded password in code). Mobile application binaries can be easily downloaded and reverse engineered.&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Network spoofing attacks, Surveillance. The majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network (3G, GSM, CDMA and others), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
*3.1 Assume that the network layer is not private. Modern network layer attacks can decrypt provider network encryption, and there is no guarantee that the wifi network will be appropriately encrypted.&lt;br /&gt;
*3.2 Applications should enforce the use of an end-to-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. This includes passing user credentials, or other authentication equivalents. In some cases this may mean encrypting all communication.&lt;br /&gt;
*3.3 Enforce strong encryption algorithms and key lengths. Do not allow unsigned certificates and allow only reputable certificate authorities. Do not disable or ignore the SSL chain validation. &lt;br /&gt;
*3.4 For sensitive data, to reduce the risk of man-in-middle attacks (like SSL proxy, SSL strip), a secure connection should only be established after verifying the identity of the remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in the key chain.&lt;br /&gt;
*3.5 The user interface should make it as easy as possible for the user to find out if a certificate is valid.&lt;br /&gt;
*3.6 SMS, MMS or notifications should not be used to send sensitive data to or from mobile end points.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google vulnerability of Client Login account credentials on unprotected wifi - [http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''4. Implement user authentication/authorization and session management correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unauthorized individuals may obtain access to sensitive data or systems. This can be done by circumventing authentication systems (logins) or by reusing valid tokens or cookies.&lt;br /&gt;
&lt;br /&gt;
*4.1 Require appropriate strength user authentication to the application. It may be useful to provide feedback on the strength of the password when it is being entered for the first time. The strength of the authentication mechanism used depends on the data being processed by the application and its access to valuable resources (e.g. costing money).&lt;br /&gt;
*4.2 It is important to ensure that the session management is done correctly after the initial authentication. Require authentication credentials or tokens to be passed with any subsequent request (especially those granting privileged access or modification). &lt;br /&gt;
*4.3 Use unpredictable session identifiers with high entropy.&lt;br /&gt;
*4.4 Use context to add security to authentication - e.g. device ID, IP location, etc...&lt;br /&gt;
*4.5 Consider using additional authentication factors for applications giving access to sensitive data or interfaces where possible - e.g. voice, fingerprint (if available), who-you-know, behavioural etc...&lt;br /&gt;
*4.6 Use authentication that ties back to the end user identity (rather than the device identity).&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google's ClientLogin implementation &lt;br /&gt;
[http://www.google.com/url?q=http%3A%2F%2Fwww.uni-ulm.de%2Fin%2Fmi%2Fmitarbeiter%2Fkoenings%2Fcatching-authtokens.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGO-Yp1KHqO8USuL0zxL1Lpwq1Usw]&lt;br /&gt;
&lt;br /&gt;
'''5. Keep the backend APIs (services) and the platform (server) secure''' &lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Attacks on backend systems, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
*5.1 Carry out a specific check of all data transferred betwen the mobile device and web-server backends and other external interfaces - (e.g. is location or other information transferred within file metadata)&lt;br /&gt;
*5.2 All back-end services (WebServices/REST) for mobile apps should be tested for vulnerabilities periodically e.g. using static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
*5.3 Ensure that the back-end platform (server) is running with a hardened configuration with the latest security patches applied to the OS, Web Server and other application components.&lt;br /&gt;
*5.4 Ensure adequate logs are retained on the back-end in order to detect and respond to incidents and perform forensics (within the limits of data protection law).&lt;br /&gt;
*5.6 Employ rate limiting and throttling on a per-user/IP basis (if user identification is available) to reduce the risk from DDoS attack.&lt;br /&gt;
*5.7 Test for DoS vulnerabilities where the server may become overwhelmed by certain resource intensive application calls.&lt;br /&gt;
*5.8 Web Services, REST and APIs can have similar vulnerabilities to Web Applications. Perform testing of the backend Web Service, REST or API to determine vulnerabilities may exist. Perform abuse case testing, in addition to use case testing.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' [https://www.owasp.org/index.php/Web_Services]&lt;br /&gt;
[http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Perform data integration with third party services/applications securely'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Data Leakage&lt;br /&gt;
&lt;br /&gt;
*6.1 Vet the security/authenticity of any third party code/libraries used in your mobile application (reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
*6.2 Track all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile applications using these third party APIs/frameworks.&lt;br /&gt;
*6.3 Pay particular attention to validating all data received from and sent to  non-trusted third party apps (e.g. ad network software) before processing in the application. &lt;br /&gt;
&lt;br /&gt;
'''7. Pay specific attention to the collection and storage of consent for the collection and use of the user’s data'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Unintentional disclosure of personal or private information. In the European Union, it is mandatory to obtain user consent for the collection of personally identifiable information (PII).&lt;br /&gt;
&lt;br /&gt;
*7.1 Create a privacy policy covering the usage of personal data and make it available to the user especially when making consent choices.&lt;br /&gt;
*7.2 Consent may be collected in 3 main ways:&lt;br /&gt;
**At install time&lt;br /&gt;
**At run-time when data is sent&lt;br /&gt;
**Via “opt-out” mechanisms where a default setting is implemented and the user has to turn it off.&lt;br /&gt;
*7.3 Check whether your application is collecting PII - it may not always be obvious - for example do you use persistent identifiers linked to central data stores containing personal information?&lt;br /&gt;
*7.4 Audit communication mechanisms to check for unintended leaks (e.g. image metadata).&lt;br /&gt;
*7.5 Keep a record of consent to the transfer of PII available to the user (consider also the value of keeping server-side records attached to any user data stored).&lt;br /&gt;
*7.6 Check whether your consent collection-mechanism overlaps or conflicts with any other consent-collection within the same stack (e.g. APP-native + webkit HTML)&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' EU Law [http://democrats.energycommerce.house.gov/sites/default/files/image_uploads/Testimony_05.04.11_Spafford.pdf]&lt;br /&gt;
&lt;br /&gt;
'''8. Implement controls to prevent unauthorised access to paid-for resources (wallet, SMS, phone calls etc...)'''&lt;br /&gt;
'''Risks:''' Smartphone apps give programmatic access to premium rate phone calls, SMS, roaming data, NFC payments etc. Apps with privileged access to such API’s should take particular care to prevent abuse given the financial impact of vulnerabilities giving attackers access to the user’s financial resources.&lt;br /&gt;
&lt;br /&gt;
*8.1 Maintain logs of access to paid resources in a non-repudiable format and make them available to the end-user for monitoring (e.g. signed receipt sent to server back-end). Logs should be protected from unauthorised access.&lt;br /&gt;
*8.2 Check for anomalous usage patterns in paid resource usage and require reauthentication. E.g. when significant change in location occurs, user-language changes etc.&lt;br /&gt;
*8.3 Consider using a white-list model by default for paid resource addressing - e.g. address book only unless specifically authorised for phone calls.&lt;br /&gt;
*8.4 Authenticate all API calls to paid resources (e.g. using an app developer certificate).&lt;br /&gt;
*8.5 Ensure that wallet API callbacks do not pass cleartext account/pricing/ billing/item information.&lt;br /&gt;
*8.6 Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
*8.7 Implement best practices such as fast dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
&lt;br /&gt;
'''Reference:''' Google Wallet Security [http://www.google.com/wallet/how-it-works-security.html]&lt;br /&gt;
&lt;br /&gt;
'''9. Ensure Secure distribution/provisioning of mobile applications'''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' &lt;br /&gt;
*9.1 Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores and the extra delay this may imply.&lt;br /&gt;
*9.2 Provide remote kill functionality &lt;br /&gt;
*9.3 Feedback channels&lt;br /&gt;
*9.4 Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors '''&lt;br /&gt;
&lt;br /&gt;
'''Risks:''' Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
*10.1 Minimise runtime interpretation and capabilities offered to runtime interpreters.&lt;br /&gt;
*10.2 Run interpreters at minimal privilege levels.&lt;br /&gt;
*10.3 Fuzz test interpreters.&lt;br /&gt;
*10.4 Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data and use of third party API’s - e.g. javascript interpreters.&lt;br /&gt;
*10.5 Define a comprehensive escape syntax as appropriate.&lt;br /&gt;
//Giles look for an example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (for consideration) ===&lt;br /&gt;
&lt;br /&gt;
'''A: Some general coding best practices are particularly relevant to mobile coding too'''&lt;br /&gt;
*Input Validation and Output Encoding&lt;br /&gt;
*Minimise lines of code.&lt;br /&gt;
*Use safe languages (e.g. from buffer-overflow).&lt;br /&gt;
*Implement a security report handling point (address) security@example.com &lt;br /&gt;
*Use static and binary code analyzers to find security flaws.&lt;br /&gt;
*Use safe string functions, avoid buffer and Integer overflow.&lt;br /&gt;
*Run with the minimum privilege required for the application on the operating system. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
*Don't authorize code/app to execute with root/sa privilege&lt;br /&gt;
*Always perform testing as a standard as well as a privileged user&lt;br /&gt;
*Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS.&lt;br /&gt;
*Context aware security: may be able to decrease/increase access based on the context (e.g. location, network) - &lt;br /&gt;
*Remove all test code before releasing the application&lt;br /&gt;
*Ensure logging is done appropriately but do not record excessive logs, especially including sensitive user information.&lt;br /&gt;
*//What sort of information should be recorded in the logs. (Keep audit data on the server, no user specific data - link to the Apple Issue - Signed Timestamps) &lt;br /&gt;
&lt;br /&gt;
'''B. Enforce higher security posture on the device for sensitive apps used in an enterprise context:''' // Vinay to check&lt;br /&gt;
*If a sensitive application needs to be provisioned on a device, application can employ enforcement of the certain security posture on the device (such as PIN, remote management/wipe) // Vinay - Still needs to be clarified&lt;br /&gt;
*Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive applications&lt;br /&gt;
*Banking Apps&lt;br /&gt;
*//(Remote Management, PIN enforcement, encryption, application monitoring)&lt;br /&gt;
**Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance? Is this a common feature - device-cert - I have not come across it.&lt;br /&gt;
&lt;br /&gt;
'''C. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
Risk: User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
*(?? What guidelines could be provided to developers)&lt;br /&gt;
U*ser education on using due diligence while installing third party applications on mobile devices&lt;br /&gt;
&lt;br /&gt;
'''D. Provide or use an existing reporting channel for phishing from apps '''&lt;br /&gt;
&lt;br /&gt;
(e.g. if you are a browser plugin developer). //APWG? Can we recommend one?&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=111820</id>
		<title>Projects/OWASP Mobile Security Project - Secure Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=111820"/>
				<updated>2011-06-06T06:49:17Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objective==&lt;br /&gt;
The OWASP/ENISA Mobile Secure Development Guidelines will be living, open source documents, that provide knowledge and guidance for developers for creating secure mobile&lt;br /&gt;
applications.&lt;br /&gt;
&lt;br /&gt;
==Target audience==&lt;br /&gt;
The output will be:&lt;br /&gt;
* A main document aimed at developers and software architects&lt;br /&gt;
* A CIO/CSO/CEO/CTO-level [[document motivating the use of the guidlines]].&lt;br /&gt;
&lt;br /&gt;
==Main document skeleton==&lt;br /&gt;
Who we are, who wrote it, where an online version can be found, how people can contribute.&lt;br /&gt;
&lt;br /&gt;
===Executive summary===&lt;br /&gt;
Why this document. A convincing argument to c-level for why they should give priority to security in mobile dev projects. FUD goes here.&lt;br /&gt;
&lt;br /&gt;
===Architecture and design principles===&lt;br /&gt;
Starting from a risk-based approach; Starting from ENISA/OWASP/Veracode top ten risks (extended, modified) (for example see the Veracode top ten risks and eventual OWASP top 10 risks), we state architecture and design principles, that address these risks.&lt;br /&gt;
&lt;br /&gt;
* [[https://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls Mobile controls and design principles]] and examples of what they mean for secure&lt;br /&gt;
mobile/smartphone applications,- e.g. minimal disclosure, minimal on-device storage,&lt;br /&gt;
don’t allow untrusted update of add-ons, do not allow access to sensor data from other&lt;br /&gt;
applications, authenticate backend.&lt;br /&gt;
(Target date - End-of-June)&lt;br /&gt;
&lt;br /&gt;
===Coding techniques===&lt;br /&gt;
* [[Code level controls]] (based on the principles) - What to look for in the code. E.g. checklist&lt;br /&gt;
for persistent storage code, identifier schemes, authentication mechanisms, etc...&lt;br /&gt;
(Target date for first draft - Mid-Sept)&lt;br /&gt;
* [[Platform-specific how-to’s]] and how not to’s, common errors and vulnerabilities, sample&lt;br /&gt;
code (on how to implement common control), how not-to app (mobile version of&lt;br /&gt;
WebGoat).&lt;br /&gt;
(Target date for first draft - End of October)&lt;br /&gt;
* Optionally (stage 2) - open source libraries - mobile version of ESAPI&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=111819</id>
		<title>Projects/OWASP Mobile Security Project - Secure Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=111819"/>
				<updated>2011-06-06T06:48:17Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objective==&lt;br /&gt;
The OWASP/ENISA Mobile Secure Development Guidelines will be living, open source documents, that provide knowledge and guidance for developers for creating secure mobile&lt;br /&gt;
applications.&lt;br /&gt;
&lt;br /&gt;
==Target audience==&lt;br /&gt;
The output will be:&lt;br /&gt;
* A main document aimed at developers and software architects&lt;br /&gt;
* A CIO/CSO/CEO/CTO-level [[document motivating the use of the guidlines]].&lt;br /&gt;
&lt;br /&gt;
==Main document skeleton==&lt;br /&gt;
Who we are, who wrote it, where an online version can be found, how people can contribute.&lt;br /&gt;
&lt;br /&gt;
===Executive summary===&lt;br /&gt;
Why this document. A convincing argument to c-level for why they should give priority to security in mobile dev projects. FUD goes here.&lt;br /&gt;
&lt;br /&gt;
===Architecture and design principles===&lt;br /&gt;
Starting from a risk-based approach; Starting from ENISA/OWASP/Veracode top ten risks (extended, modified) (for example see the Veracode top ten risks and eventual OWASP top 10 risks), we state architecture and design principles, that address these risks.&lt;br /&gt;
&lt;br /&gt;
* [[Top 10 mobile controls and design principles]] and examples of what they mean for secure&lt;br /&gt;
mobile/smartphone applications,- e.g. minimal disclosure, minimal on-device storage,&lt;br /&gt;
don’t allow untrusted update of add-ons, do not allow access to sensor data from other&lt;br /&gt;
applications, authenticate backend.&lt;br /&gt;
(Target date - End-of-June)&lt;br /&gt;
&lt;br /&gt;
===Coding techniques===&lt;br /&gt;
* [[Code level controls]] (based on the principles) - What to look for in the code. E.g. checklist&lt;br /&gt;
for persistent storage code, identifier schemes, authentication mechanisms, etc...&lt;br /&gt;
(Target date for first draft - Mid-Sept)&lt;br /&gt;
* [[Platform-specific how-to’s]] and how not to’s, common errors and vulnerabilities, sample&lt;br /&gt;
code (on how to implement common control), how not-to app (mobile version of&lt;br /&gt;
WebGoat).&lt;br /&gt;
(Target date for first draft - End of October)&lt;br /&gt;
* Optionally (stage 2) - open source libraries - mobile version of ESAPI&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project&amp;diff=111563</id>
		<title>Projects/OWASP Mobile Security Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project&amp;diff=111563"/>
				<updated>2011-06-02T16:38:41Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP Mobile Security Project&lt;br /&gt;
| project_home_page = OWASP_Mobile_Security_Project&lt;br /&gt;
| project_description = &lt;br /&gt;
The rapid growth of mobile computing has made the need for secure mobile development absolutely essential.  The OWASP Mobile Security Project will help the community better understand the risks present in mobile applications, and learn to defend against them. This project will be forked into each of the following platforms:&lt;br /&gt;
* iOS Project&lt;br /&gt;
* Android Project&lt;br /&gt;
* webOS Project&lt;br /&gt;
* Windows Mobile Project&lt;br /&gt;
* Blackberry Project&lt;br /&gt;
   &lt;br /&gt;
| project_license =&lt;br /&gt;
&lt;br /&gt;
| leader_name1 = Jack Mannino &lt;br /&gt;
| leader_email1 = Jack@nvisiumsecurity.com&lt;br /&gt;
| leader_username1 = Jack Mannino&lt;br /&gt;
&lt;br /&gt;
| leader_name2 = Mike Zusman&lt;br /&gt;
| leader_email2 = mike.zusman@owasp.org&lt;br /&gt;
| leader_username2 = schmoilito&lt;br /&gt;
&lt;br /&gt;
| leader_name3 = Zach Lanier&lt;br /&gt;
| leader_email3 = zach.lanier@n0where.org&lt;br /&gt;
| leader_username3 = Zach_Lanier&lt;br /&gt;
&lt;br /&gt;
| leader_name4 = Giles Hogben&lt;br /&gt;
| leader_email4 = giles.hogben@enisa.europa.eu&lt;br /&gt;
| leader_username4 =  Giles Hogben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| contributor_name2 = Jim Manico&lt;br /&gt;
| contributor_email2 = jim.manico@owasp.org&lt;br /&gt;
| contributor_username2= jmanico&lt;br /&gt;
&lt;br /&gt;
| contributor_name1 = David Lindner&lt;br /&gt;
| contributor_email1 = david.lindner@aspectsecurity.com&lt;br /&gt;
| contributor_username1 = David Lindner&lt;br /&gt;
&lt;br /&gt;
| contributor_name3 = Tom Neaves&lt;br /&gt;
| contributor_email3 = tom.neaves@verizonbusiness.com&lt;br /&gt;
| contributor_username3 = Tom Neaves&lt;br /&gt;
&lt;br /&gt;
| contributor_name4 = Kuai Hinojosa&lt;br /&gt;
| contributor_email4 = Kuai.Hinojosa@owasp.org&lt;br /&gt;
| contributor_username4 = Webappsecguy&lt;br /&gt;
&lt;br /&gt;
| contributor_name5 = Vinay Bansal&lt;br /&gt;
| contributor_email5 = vinay.bansal@cisco.com&lt;br /&gt;
| contributor_username5 =  Vinaykbansal&lt;br /&gt;
&lt;br /&gt;
| contributor_name6 = Zach Lanier&lt;br /&gt;
| contributor_email6 = zach.lanier@intrepidusgroup.com&lt;br /&gt;
| contributor_username6 =  Zach_Lanier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| contributor_name7 = Ludovic Petit&lt;br /&gt;
| contributor_email7 = ludovic.petit@owasp.org&lt;br /&gt;
| contributor_username7 =  Ludovic Petit&lt;br /&gt;
&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
&lt;br /&gt;
| presentation_link =&lt;br /&gt;
&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/owasp-mobile-security-project&lt;br /&gt;
&lt;br /&gt;
| project_road_map = http://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project/Roadmap&lt;br /&gt;
&lt;br /&gt;
| links_url[1-10] = &lt;br /&gt;
&lt;br /&gt;
| links_name[1-10] = &lt;br /&gt;
&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP Mobile Security Project&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111356</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111356"/>
				<updated>2011-06-01T09:56:10Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
** Leverage the encryption and key-store mechanism provided by the mobile OS/hardware (e.g. SIM card) to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
** Do not store/cache sensitive data on removable media unless they are tamper-proof and password protected.&lt;br /&gt;
** Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory) //define protected&lt;br /&gt;
** Automatically delete data which is no longer required from device &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
** Be aware of shared data storage (e.g. address book, media gallery) as a possible leakage channel.&lt;br /&gt;
** Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
** Schedule deletion according to time, rather than on a push-pop basis (to prevent e.g. data remaining in caches indefinitely)&lt;br /&gt;
** Use secure deletion procedures e.g. conforming to NIST 800-88 .&lt;br /&gt;
** Be careful when sharing cache data with other applications (check for covert channels leaking sensitive data)&lt;br /&gt;
** Carry out a specific check of all communication with web-server backends and other interfaces with trust boundaries - (e.g. is location or other information transferred within file metadata) &lt;br /&gt;
** Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Where possible classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, contact data, location vs error logs).&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** For cryptographic keys, implement key management best practice including exploiting SIM card capabilities where possible //todo research mor and hook to best practice.&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation&lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorization tokens that can be securely stored on the device . Encrypt the tokens while stored on the device and in transit. Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. Consider using the latest versions of the authorization standards (such as OAuth 2.0).&lt;br /&gt;
**In case passwords need to be stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device (renew tokens)&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups&lt;br /&gt;
** Access to highly sensitive data (e.g. access to wallet) should be protected by a PIN.&lt;br /&gt;
** Consider using visual/pattern based passwords to aid usability.&lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
**We recommend that one-time codes or any kind of password (OTP) should not be forwarded via SMS where (as on most smartphones) an alternative, more secure channel is available. Consider using HTTPS with client authentication (see 3.) to prevent Zeus-in-the-mobile style attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, Surveillance&lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should enforce the use of the end-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**For sensitive data, to reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain.&lt;br /&gt;
** Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
** SMS, MMS or notifications should not be used to send sensitive data to mobile end points.&lt;br /&gt;
** For one-time-password values, rather than SMS, consider using https with client authentication (i.e. OTP is sent to smartphone over https and smartphone is authenticated to prevent interception).&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths (e.g. accept invalid certificates).&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer). &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
//Downgrade this control&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials. //??&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as a session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data.&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains).  //This sentence not clear&lt;br /&gt;
** Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance? Is this a common feature - device-cert - I have not come across it...&lt;br /&gt;
** Implement best practices for dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
** Warn user and obtain consent for any cost implications for app behaviour. // and other consent best practices.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
//Downgrade and mix with #4&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores and the extra delay this may imply.&lt;br /&gt;
** Understand and test your patching process and its the interaction with the app-store - what is a typical time-frame are any updates possible (e.g. config files) without the approval of the app-store?&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
Risks: Unintended disclosure&lt;br /&gt;
** User informed if any personal data is collected or sent //This needs to be detailed - how to inform - one-time, on install, depending on the type of data etc...?&lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user. Link to 1. audit communication mechanisms to check for unintended leaks (e.g. image metadata). // ditto&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
** Do not send data which is not required for the functioning of the application unless you have obtained the explicit consent of the user.&lt;br /&gt;
&lt;br /&gt;
'''8. Run the mobile client using minimal permission''' &lt;br /&gt;
Risks: Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root/sa privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''9. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
//Reword&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // Still needs to be clarified&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors''' &lt;br /&gt;
Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. &lt;br /&gt;
Risks: Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
//Please check and add advice here.&lt;br /&gt;
** Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data. &lt;br /&gt;
** Run interpreters at minimal privilege levels&lt;br /&gt;
** Fuzz test interpreters&lt;br /&gt;
** Define comprehensive and complete escape syntax (not sure if this is theortically possible).&lt;br /&gt;
&lt;br /&gt;
'''11. Employ the secure coding/development practices'''&lt;br /&gt;
// Let's try to get rid of it and move the recommendation &lt;br /&gt;
//Risk? Isn't this circular? I don't understand the principle here.&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. &lt;br /&gt;
//(Add least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
** Follow security best practice for implementation of runtime interpreters (be careful when implementing anything which turns user input into executable code). //Hook...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
** Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111355</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111355"/>
				<updated>2011-06-01T09:44:12Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
** Leverage the encryption and key-store mechanism provided by the mobile OS/hardware (e.g. SIM card) to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
** Do not store/cache sensitive data on removable media unless they are tamper-proof and password protected.&lt;br /&gt;
** Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory) //define protected&lt;br /&gt;
** Automatically delete data which is no longer required from device &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
** Be aware of shared data storage (e.g. address book, media gallery) as a possible leakage channel.&lt;br /&gt;
** Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
** Schedule deletion according to time, rather than on a push-pop basis (to prevent e.g. data remaining in caches indefinitely)&lt;br /&gt;
** Use secure deletion procedures e.g. conforming to NIST 800-88 .&lt;br /&gt;
** Be careful when sharing cache data with other applications (check for covert channels leaking sensitive data)&lt;br /&gt;
** Carry out a specific check of all communication with web-server backends and other interfaces with trust boundaries - (e.g. is location or other information transferred within file metadata) &lt;br /&gt;
** Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Where possible classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, contact data, location vs error logs).&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** For cryptographic keys, implement key management best practice including exploiting SIM card capabilities where possible //todo research mor and hook to best practice.&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation&lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorization tokens that can be securely stored on the device . Encrypt the tokens while stored on the device and in transit. Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. Consider using the latest versions of the authorization standards (such as OAuth 2.0).&lt;br /&gt;
**In case passwords need to be stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device (renew tokens)&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups&lt;br /&gt;
** Access to highly sensitive data (e.g. access to wallet) should be protected by a PIN.&lt;br /&gt;
** Consider using visual/pattern based passwords to aid usability.&lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
**We recommend that one-time codes or any kind of password (OTP) should not be forwarded via SMS where (as on most smartphones) an alternative, more secure channel is available. Consider using HTTPS with client authentication (see 3.) to prevent Zeus-in-the-mobile style attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, Surveillance&lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should enforce the use of the end-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**For sensitive data, to reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain.&lt;br /&gt;
** Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
** SMS, MMS or notifications should not be used to send sensitive data to mobile end points.&lt;br /&gt;
** For one-time-password values, rather than SMS, consider using https with client authentication (i.e. OTP is sent to smartphone over https and smartphone is authenticated to prevent interception).&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths (e.g. accept invalid certificates).&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer). &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
//Downgrade this control&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as a session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data. &lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance?&lt;br /&gt;
** Implement best practices for dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
** Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
//Downgrade and mix with #4&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
Risks: Unintended disclosure&lt;br /&gt;
** User informed if any personal data is collected or sent //This needs to be detailed - how to inform - one-time, on install, depending on the type of data etc...?&lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user. // ditto&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
** Do not send data which is not required for the functioning of the application unless you have obtained the explicit consent of the user.&lt;br /&gt;
&lt;br /&gt;
'''8. Run the mobile client using minimal permission''' &lt;br /&gt;
Risks: Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''9. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
//Reword&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors''' &lt;br /&gt;
Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. &lt;br /&gt;
Risks: Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
//Please add advice here.&lt;br /&gt;
** Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data. &lt;br /&gt;
** Run interpreters at minimal privilege levels&lt;br /&gt;
** Fuzz test interpreters&lt;br /&gt;
** Define comprehensive escape syntax&lt;br /&gt;
&lt;br /&gt;
'''11. Employ the secure coding/development practices'''&lt;br /&gt;
// Let's try to get rid of it and move the recommendation &lt;br /&gt;
//Risk? Isn't this circular? I don't understand the principle here.&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. &lt;br /&gt;
//(Add least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
** Follow security best practice for implementation of runtime interpreters (be careful when implementing anything which turns user input into executable code). //Hook...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
** Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111242</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111242"/>
				<updated>2011-05-31T14:23:50Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
** Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
** Do not store/cache sensitive data on the removable media&lt;br /&gt;
** Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
** Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
** Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
** Use secure deletion procedures.&lt;br /&gt;
** Be careful when sharing cache data with other applications (check for covert channels leaking sensitive data)&lt;br /&gt;
** Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Where possible classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, contact data, location vs error logs).&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control what data which is stored in public stores such as address book, media gallery etc... including metadata. &lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys. //To be researched more&lt;br /&gt;
** For cryptographic keys, implement key management best practice including exploiting SIM card capabilities where possible //hook to best practice.&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation&lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorization tokens that can be securely stored on the device . Encrypt the tokens while stored on the device and in transit. Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. Consider using the latest versions of the authorization standards (such as OAuth 2.0).&lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device (renew tokens)&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
**We recommend that one-time codes or any kind of password (OTP) should not be forwarded via SMS. Consider using HTTPS with client authentication (see 3.) to prevent Zeus-in-the-mobile style attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, Surveillance&lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should enforce the use of the end-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**For sensitive data, to reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain.&lt;br /&gt;
** Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
** SMS, MMS or notifications should not be used to send sensitive data to mobile end points.&lt;br /&gt;
** For one-time-password values, rather than SMS, consider using https with client authentication (i.e. OTP is sent to smartphone over https and smartphone is authenticated to prevent interception).&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths (e.g. accept invalid certificates).&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer). &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
//Downgrade this control&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as a session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data. &lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity. // How to make sure that this does not provide linkability between transactions (i.e. using the same cert across different service providers leaks data). I guess zero-knowledge certificates are too far-out for this guidance?&lt;br /&gt;
** Implement best practices for dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
** Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
//Downgrade and mix with #4&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
Risks: Unintended disclosure&lt;br /&gt;
** User informed if any personal data is collected or sent //This needs to be detailed - how to inform - one-time, on install, depending on the type of data etc...?&lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user. // ditto&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
** Do not send data which is not required for the functioning of the application unless you have obtained the explicit consent of the user.&lt;br /&gt;
&lt;br /&gt;
'''8. Run the mobile client using minimal permission''' &lt;br /&gt;
Risks: Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''9. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
//Reword&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
'''10. Carefully check any runtime interpretation of code for errors''' &lt;br /&gt;
Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls. &lt;br /&gt;
Risks: Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
//Please add advice here.&lt;br /&gt;
** Note that it is not always obvious that your code is interpreting text. Look for any capabilities accessible via user-input data. &lt;br /&gt;
** Run interpreters at minimal privilege levels&lt;br /&gt;
** Fuzz test interpreters&lt;br /&gt;
** Define comprehensive escape syntax&lt;br /&gt;
&lt;br /&gt;
'''11. Employ the secure coding/development practices'''&lt;br /&gt;
// Let's try to get rid of it and move the recommendation &lt;br /&gt;
//Risk? Isn't this circular? I don't understand the principle here.&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. &lt;br /&gt;
//(Add least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
** Follow security best practice for implementation of runtime interpreters (be careful when implementing anything which turns user input into executable code). //Hook...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
** Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111241</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111241"/>
				<updated>2011-05-31T14:11:56Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
** Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
** Do not store/cache sensitive data on the removable media&lt;br /&gt;
** Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
** Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
** Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
** Use secure deletion procedures.&lt;br /&gt;
** Be careful when sharing cache data with other applications (check for covert channels leaking sensitive data)&lt;br /&gt;
** Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Where possible classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, contact data, location vs error logs).&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control what data which is stored in public stores such as address book, media gallery etc... including metadata. &lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys. //To be researched more&lt;br /&gt;
** For cryptographic keys, implement key management best practice including exploiting SIM card capabilities where possible //hook to best practice.&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation&lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorization tokens that can be securely stored on the device . Encrypt the tokens while stored on the device and in transit. Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. Consider using the latest versions of the authorization standards (such as OAuth 2.0).&lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device (renew tokens)&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
**We recommend that one-time codes or any kind of password (OTP) should not be forwarded via SMS. Consider using HTTPS with client authentication (see 3.) to prevent Zeus-in-the-mobile style attacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, Surveillance&lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should enforce the use of the end-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**For sensitive data, to reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain.&lt;br /&gt;
** Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
** SMS, MMS or notifications should not be used to send sensitive data to mobile end points.&lt;br /&gt;
** For one-time-password values, rather than SMS, consider using https with client authentication (i.e. OTP is sent to smartphone over https and smartphone is authenticated to prevent interception).&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths (e.g. accept invalid certificates).&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer). &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
//Downgrade this control&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data.  (Device Id could in some cases be used as an additional check that the request is originating from the known device) // Giles:I would NOT make the last recommendation because Device ID can be used for cross-site tracking since it is shared between apps.&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
** Implement best practices for dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
** Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
//Downgrade and mix with #4&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
// Let's try to get rid of it and move the recommendation &lt;br /&gt;
//Risk? Isn't this circular? I don't understand the principle here.&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. &lt;br /&gt;
//(Add least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
** Follow security best practice for implementation of runtime interpreters (be careful when implementing anything which turns user input into executable code). //Hook...&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
Risks: Unintended disclosure&lt;br /&gt;
** User informed if any personal data is collected or sent //This needs to be detailed - how to inform - one-time, on install, depending on the type of data etc...?&lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user. // ditto&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
** Do not send data which is not required for the functioning of the application unless you have obtained the explicit consent of the user.&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
Risks: Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
//Reword&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
'''11. Carefully check any runtime interpretation of code for errors''' &lt;br /&gt;
Runtime interpretation of code covers any opportunity an app gives for untrusted parties to provide unverified text or binary which is interpreted as code. For example, extra levels in a game, scripts, interpreted SMS headers. This gives an opportunity for malware to circumvent walled garden controls.&lt;br /&gt;
Risks: Injection attacks leading to Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
//Please add advice here.&lt;br /&gt;
** Run interpreters at minimal privilege levels&lt;br /&gt;
** Fuzz test interpreters&lt;br /&gt;
** Define comprehensive escape syntax&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
** Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111239</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=111239"/>
				<updated>2011-05-31T13:47:17Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
** Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
** Do not store/cache sensitive data on the removable media&lt;br /&gt;
** Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
** Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
** Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
** Use secure deletion procedures.&lt;br /&gt;
** Be careful when sharing cache data with other applications (check for covert channels leaking sensitive data)&lt;br /&gt;
** Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Where possible classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, contact data, location vs error logs).&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control what data which is stored in public stores such as address book, media gallery etc... including metadata. &lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys. //To be researched more&lt;br /&gt;
** For cryptographic keys, implement key management best practice including exploiting SIM card capabilities where possible //hook to best practice.&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation&lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorization tokens that can be securely stored on the device . Encrypt the tokens while stored on the device and in transit. Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. Consider using the latest versions of the authorization standards (such as OAuth 2.0).&lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device (renew tokens)&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
**We recommend that one-time codes (OTP) should not be forwarded via SMS. Consider using HTTPS and protect it on the device (Zitmo)... //or can we make a better rec on this?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, Surveillance&lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should enforce the use of the end-end secure channel (such as SSL/TLS) when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**For sensitive data, to reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain.&lt;br /&gt;
** Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
** SMS, MMS or notifications should not be used to send sensitive data to mobile end points.&lt;br /&gt;
** For one-time-password values, rather than SMS, consider using https with client authentication (i.e. OTP is sent to smartphone over https and smartphone is authenticated to prevent interception).&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths (e.g. accept invalid certificates).&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer). &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
//Downgrade this control&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data.  (Device Id could in some cases be used as an additional check that the request is originating from the known device) // Giles:I would NOT make the last recommendation because Device ID can be used for cross-site tracking since it is shared between apps.&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
** Implement best practices for dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
** Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
//Downgrade and mix with #4&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
// Let's try to get rid of it and move the recommendation &lt;br /&gt;
//Risk? Isn't this circular? I don't understand the principle here.&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. &lt;br /&gt;
//(Add least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
** Follow security best practice for implementation of runtime interpreters (be careful when implementing anything which turns user input into executable code). //Hook...&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
Risks: Unintended disclosure&lt;br /&gt;
** User informed if any personal data is collected or sent //This needs to be detailed - how to inform - one-time, on install, depending on the type of data etc...?&lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user. // ditto&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
** Do not send data which is not required for the functioning of the application unless you have obtained the explicit consent of the user.&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
Risks: Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
//Reword&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
** Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//What about runtime interpreters - some guidelines on these?&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110841</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110841"/>
				<updated>2011-05-20T09:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
** Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
** Do not store/cache sensitive data on the removable media&lt;br /&gt;
** Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
** Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
** Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
** Use secure deletion procedures.&lt;br /&gt;
** Be careful when sharing cache data with other applications (check for covert channels leaking sensitive data)&lt;br /&gt;
** Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Where possible classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, contact data, location vs error logs).&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control what data which is stored in public stores such as address book, media gallery etc... including metadata. &lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys.&lt;br /&gt;
** For cryptographic keys, implement key management best practice including exploiting SIM card capabilities where possible //hook to best practice.&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation&lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorisation tokens that can be securely stored on the device (OAuth). Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. &lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device (renew tokens)&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
**Ensure that one-time codes cannot be forwarded via SMS (Zitmo)... //or can we make a better rec on this?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, Surveillance&lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should ensure that a secure channel (such as SSL/TLS) is established end-end when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**To reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain. //This carries a high usability cost as advice...&lt;br /&gt;
** Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
** SMS, MMS or notifications should not be used to send sensitive data to mobile end points // What about banking OTP's?&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths (e.g. accept invalid certificates).&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer). &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage. Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data.  (Device Id could in some cases be used as an additional check that the request is originating from the known device) // Giles:I would NOT make the last recommendation because Device ID can be used for cross-site tracking since it is shared between apps.&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
** Implement best practices for dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
** Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
&lt;br /&gt;
//Risk? Isn't this circular? I don't understand the principle here.&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. &lt;br /&gt;
//(Add least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
** Follow security best practice for implementation of runtime interpreters (be careful when implementing anything which turns user input into executable code). //Hook...&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
Risks: Unintended disclosure&lt;br /&gt;
** User informed if any personal data is collected or sent //This needs to be detailed - how to inform - one-time, on install, depending on the type of data etc...?&lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user. // ditto&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
** Do not send data which is not required for the functioning of the application unless you have obtained the explicit consent of the user.&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
Risks: Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
** Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//What about runtime interpreters - some guidelines on these?&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110840</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110840"/>
				<updated>2011-05-20T09:14:26Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
** Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
** Do not store/cache sensitive data on the removable media&lt;br /&gt;
** Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
** Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
** Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
** Use secure deletion procedures.&lt;br /&gt;
** Be careful when sharing cache data with other applications (check for covert channels leaking sensitive data)&lt;br /&gt;
** Consider the security of the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Where possible classify data storage according to sensitivity and apply controls accordingly (e.g. passwords, contact data, location vs error logs).&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers which are not shared with other apps wherever possible - e.g. do not use the device ID number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control what data which is stored in public stores such as address book, media gallery etc... including metadata. &lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys.&lt;br /&gt;
** For cryptographic keys, implement key management best practice including exploiting SIM card capabilities where possible //hook to best practice.&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation&lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorisation tokens that can be securely stored on the device (OAuth). Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. &lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device (renew tokens)&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
**Ensure that one-time codes cannot be forwarded via SMS (Zitmo)... //or can we make a better rec on this?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, Surveillance&lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should ensure that a secure channel (such as SSL/TLS) is established end-end when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**To reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain. //This carries a high usability cost as advice...&lt;br /&gt;
** Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
** SMS, MMS or notifications should not be used to send sensitive data to mobile end points // What about banking OTP's?&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths (e.g. accept invalid certificates).&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer). &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage.&lt;br /&gt;
 Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data.  (Device Id could in some cases be used as an additional check that the request is originating from the known device) // Giles:I would NOT make the last recommendation because Device ID can be used for cross-site tracking since it is shared between apps.&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
** Implement best practices for dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
** Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
&lt;br /&gt;
//Risk? Isn't this circular? I don't understand the principle here.&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. &lt;br /&gt;
//(Add least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
** Follow security best practice for implementation of runtime interpreters (be careful when implementing anything which turns user input into executable code). //Hook...&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
Risks: Unintended disclosure&lt;br /&gt;
** User informed if any personal data is collected or sent //This needs to be detailed - how to inform - one-time, on install, depending on the type of data etc...?&lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user. // ditto&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
** Do not send data which is not required for the functioning of the application unless you have obtained the explicit consent of the user.&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
Risks: Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
** Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//What about runtime interpreters - some guidelines on these?&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110839</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110839"/>
				<updated>2011-05-20T09:03:45Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
**Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
**Do not store/cache sensitive data on the removable media&lt;br /&gt;
**Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
**Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
**Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation&lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorisation tokens that can be securely stored on the device (OAuth). Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. &lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device (renew tokens)&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, Surveillance&lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should ensure that a secure channel (such as SSL/TLS) is established end-end when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**To reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain. //This carries a high usability cost as advice...&lt;br /&gt;
**Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
**SMS, MMS or notifications should not be used to send sensitive data to mobile end points&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage.&lt;br /&gt;
 Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data.  (Device Id could in some cases be used as an additional check that the request is originating from the known device) // Giles:I would NOT make the last recommendation because Device ID can be used for cross-site tracking since it is shared between apps.&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
** Implement best practices for dormancy (3GPP), caching etc... to minimise signalling load on base stations.&lt;br /&gt;
** Warn user and obtain consent for any cost implications for app behaviour.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
&lt;br /&gt;
//Risk? Isn't this circular? I don't understand the principle here.&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. &lt;br /&gt;
//(Add least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
Risks: Unintended disclosure&lt;br /&gt;
** User informed if any personal data is collected or sent //This needs to be detailed - how to inform - one-time, on install, depending on the type of data etc...?&lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user. // ditto&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
** Do not send data which is not required for the functioning of the application unless you have obtained the explicit consent of the user.&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
Risks: Data leakage, Surveillance, Spyware, Diallerware&lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
** Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//What about runtime interpreters - some guidelines on these?&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110838</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110838"/>
				<updated>2011-05-20T08:11:50Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Unsafe sensitive data storage, attacks on decommissioned phones unintentional disclosure:&lt;br /&gt;
Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
**Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
**Do not store/cache sensitive data on the removable media&lt;br /&gt;
**Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
**Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
**Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Spyware, Surveillance, Financial malware, UI impersonation, &lt;br /&gt;
User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorisation tokens that can be securely stored on the device (OAuth). Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. &lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risks''': Network spoofing attacks, &lt;br /&gt;
Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should ensure that a secure channel (such as SSL/TLS) is established end-end when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**To reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain. //This carries a high usability cost as advice...&lt;br /&gt;
**Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
**SMS, MMS or notifications should not be used to send sensitive data to mobile end points&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google vulnerability of Client Login account credentials on unprotected wifi [http://www.uni-ulm.de/in/mi/mitarbeiter/koenings/catching-authtokens.html]&lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': Attacks on back-ends through mobile device, loss of data via cloud storage.&lt;br /&gt;
 Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risks''': &lt;br /&gt;
Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof and potentially leaks private information when linked to other data.  (Device Id could in some cases be used as an additional check that the request is originating from the known device) // Giles:I would NOT make the last recommendation because Device ID can be used for cross-site tracking since it is shared between apps.&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
//Cover also excessive resource use.&lt;br /&gt;
&lt;br /&gt;
'''Reference''': Google's ClientLogin implementation [http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html]&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
&lt;br /&gt;
//Risk? Isn't this circular?&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. //(least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
&lt;br /&gt;
** User informed if any personal data is collected or sent &lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user.&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
**Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//What about runtime interpreters&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project&amp;diff=110837</id>
		<title>Projects/OWASP Mobile Security Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project&amp;diff=110837"/>
				<updated>2011-05-20T07:55:00Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP Mobile Security Project&lt;br /&gt;
| project_home_page = OWASP_Mobile_Security_Project&lt;br /&gt;
| project_description = &lt;br /&gt;
The rapid growth of mobile computing has made the need for secure mobile development absolutely essential.  The OWASP Mobile Security Project will help the community better understand the risks present in mobile applications, and learn to defend against them. This project will be forked into each of the following platforms:&lt;br /&gt;
* iOS Project&lt;br /&gt;
* Android Project&lt;br /&gt;
* webOS Project&lt;br /&gt;
* Windows Mobile Project&lt;br /&gt;
* Blackberry Project&lt;br /&gt;
   &lt;br /&gt;
| project_license =&lt;br /&gt;
&lt;br /&gt;
| leader_name1 = Jack Mannino &lt;br /&gt;
| leader_email1 = Jack@nvisiumsecurity.com&lt;br /&gt;
| leader_username1 = Jack Mannino&lt;br /&gt;
&lt;br /&gt;
| leader_name2 = Mike Zusman&lt;br /&gt;
| leader_email2 = mike.zusman@intrepidusgroup.com&lt;br /&gt;
| leader_username2 = schmoilito&lt;br /&gt;
&lt;br /&gt;
| contributor_name2 = Jim Manico&lt;br /&gt;
| contributor_email2 = jim.manico@owasp.org&lt;br /&gt;
| contributor_username2= jmanico&lt;br /&gt;
&lt;br /&gt;
| contributor_name1 = David Lindner&lt;br /&gt;
| contributor_email1 = david.lindner@aspectsecurity.com&lt;br /&gt;
| contributor_username1 = David Lindner&lt;br /&gt;
&lt;br /&gt;
| contributor_name3 = Tom Neaves&lt;br /&gt;
| contributor_email3 = tom.neaves@verizonbusiness.com&lt;br /&gt;
| contributor_username3 = Tom Neaves&lt;br /&gt;
&lt;br /&gt;
| contributor_name4 = Kuai Hinojosa&lt;br /&gt;
| contributor_email4 = Kuai.Hinojosa@owasp.org&lt;br /&gt;
| contributor_username4 = Webappsecguy&lt;br /&gt;
&lt;br /&gt;
| contributor_name5 = Vinay Bansal&lt;br /&gt;
| contributor_email5 = vinay.bansal@cisco.com&lt;br /&gt;
| contributor_username5 =  Vinaykbansal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| contributor_name6 = Zach Lanier&lt;br /&gt;
| contributor_email6 = zach.lanier@intrepidusgroup.com&lt;br /&gt;
| contributor_username6 =  Zach_Lanier&lt;br /&gt;
&lt;br /&gt;
| contributor_name7 = Giles Hogben&lt;br /&gt;
| contributor_email7 = giles.hogben@enisa.europa.eu&lt;br /&gt;
| contributor_username7 =  Giles Hogben&lt;br /&gt;
&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
&lt;br /&gt;
| presentation_link =&lt;br /&gt;
&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/owasp-mobile-security-project&lt;br /&gt;
&lt;br /&gt;
| project_road_map = http://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project/Roadmap&lt;br /&gt;
&lt;br /&gt;
| links_url[1-10] = &lt;br /&gt;
&lt;br /&gt;
| links_name[1-10] = &lt;br /&gt;
&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP Mobile Security Project&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project&amp;diff=110836</id>
		<title>Projects/OWASP Mobile Security Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project&amp;diff=110836"/>
				<updated>2011-05-20T07:54:13Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:&amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP Mobile Security Project&lt;br /&gt;
| project_home_page = OWASP_Mobile_Security_Project&lt;br /&gt;
| project_description = &lt;br /&gt;
The rapid growth of mobile computing has made the need for secure mobile development absolutely essential.  The OWASP Mobile Security Project will help the community better understand the risks present in mobile applications, and learn to defend against them. This project will be forked into each of the following platforms:&lt;br /&gt;
* iOS Project&lt;br /&gt;
* Android Project&lt;br /&gt;
* webOS Project&lt;br /&gt;
* Windows Mobile Project&lt;br /&gt;
* Blackberry Project&lt;br /&gt;
   &lt;br /&gt;
| project_license =&lt;br /&gt;
&lt;br /&gt;
| leader_name1 = Jack Mannino &lt;br /&gt;
| leader_email1 = Jack@nvisiumsecurity.com&lt;br /&gt;
| leader_username1 = Jack Mannino&lt;br /&gt;
&lt;br /&gt;
| leader_name2 = Mike Zusman&lt;br /&gt;
| leader_email2 = mike.zusman@intrepidusgroup.com&lt;br /&gt;
| leader_username2 = schmoilito&lt;br /&gt;
&lt;br /&gt;
| contributor_name2 = Jim Manico&lt;br /&gt;
| contributor_email2 = jim.manico@owasp.org&lt;br /&gt;
| contributor_username2= jmanico&lt;br /&gt;
&lt;br /&gt;
| contributor_name1 = David Lindner&lt;br /&gt;
| contributor_email1 = david.lindner@aspectsecurity.com&lt;br /&gt;
| contributor_username1 = David Lindner&lt;br /&gt;
&lt;br /&gt;
| contributor_name3 = Tom Neaves&lt;br /&gt;
| contributor_email3 = tom.neaves@verizonbusiness.com&lt;br /&gt;
| contributor_username3 = Tom Neaves&lt;br /&gt;
&lt;br /&gt;
| contributor_name4 = Kuai Hinojosa&lt;br /&gt;
| contributor_email4 = Kuai.Hinojosa@owasp.org&lt;br /&gt;
| contributor_username4 = Webappsecguy&lt;br /&gt;
&lt;br /&gt;
| contributor_name5 = Vinay Bansal&lt;br /&gt;
| contributor_email5 = vinay.bansal@cisco.com&lt;br /&gt;
| contributor_username5 =  Vinaykbansal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| contributor_name6 = Giles Hogben&lt;br /&gt;
| contributor_email6 = giles.hogben@enisa.europa.eu&lt;br /&gt;
| contributor_username6 =  Giles Hogben&lt;br /&gt;
&lt;br /&gt;
| contributor_name6 = Zach Lanier&lt;br /&gt;
| contributor_email6 = zach.lanier@intrepidusgroup.com&lt;br /&gt;
| contributor_username6 =  Zach_Lanier&lt;br /&gt;
&lt;br /&gt;
| pamphlet_link = &lt;br /&gt;
&lt;br /&gt;
| presentation_link =&lt;br /&gt;
&lt;br /&gt;
| mailing_list_name = https://lists.owasp.org/mailman/listinfo/owasp-mobile-security-project&lt;br /&gt;
&lt;br /&gt;
| project_road_map = http://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project/Roadmap&lt;br /&gt;
&lt;br /&gt;
| links_url[1-10] = &lt;br /&gt;
&lt;br /&gt;
| links_name[1-10] = &lt;br /&gt;
&lt;br /&gt;
| release_1 = &lt;br /&gt;
| release_2 = &lt;br /&gt;
| release_3 =&lt;br /&gt;
| release_4 =&lt;br /&gt;
&amp;lt;!--- The line below is for GPC usage only. Please do not edit it ---&amp;gt;&lt;br /&gt;
| project_about_page = Projects/OWASP Mobile Security Project&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110560</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110560"/>
				<updated>2011-05-17T11:30:23Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
**Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
**Do not store/cache sensitive data on the removable media&lt;br /&gt;
**Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
**Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
**Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorisation tokens that can be securely stored on the device (OAuth). Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. &lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should ensure that a secure channel (such as SSL/TLS) is established end-end when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**To reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain. //This carries a high usability cost as advice...&lt;br /&gt;
**Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
**SMS, MMS or notifications should not be used to send sensitive data to mobile end points&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof.  (Device Id could be used as an additional check or stronger validation that the request is originating from the known device)&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
//Cover also excessive resource use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
&lt;br /&gt;
//Risk? Isn't this circular?&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. //(least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly. //Needs elaboration.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
**Use safe string function, avoid buffer and Integer overflow //Is this mobile specific?&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
//What sort of information should be recorded in the logs.&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
&lt;br /&gt;
** User informed if any personal data is collected or sent &lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user.&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application. //What should be validated. Is this mobile-speciifc?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe) // I don't follow this point.&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
**Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//What about runtime interpreters&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110545</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110545"/>
				<updated>2011-05-17T11:01:40Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
**Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
**Do not store/cache sensitive data on the removable media&lt;br /&gt;
**Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
**Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
**Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term authorisation tokens that can be securely stored on the device (OAuth). Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. &lt;br /&gt;
**In case passwords need to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanisms to the mobile user to change/remove passwords on the device&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords and keys are not visible in cache or logs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should ensure that a secure channel (such as SSL/TLS) is established end-end when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**To reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain. //This carries a high usability cost as advice...&lt;br /&gt;
**Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
**SMS, MMS or notifications should not be used to send sensitive data to mobile end points&lt;br /&gt;
** Consider use of GSM encryption-on flags to verify that GSM encryption is on.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof.  (Device Id could be used as an additional check or stronger validation that the request is originating from the known device)&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
//Cover also excessive resource use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches, taking into account the requirements for approval by app-stores.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
&lt;br /&gt;
//Risk? Isn't this circular?&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS. //(least privilege)&lt;br /&gt;
**Code signing for some mobile platforms implies inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
** Use safe string function, avoid buffer and Integer overflow&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
&lt;br /&gt;
** User informed if any personal data is collected or sent &lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user.&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe)&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
**Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110544</id>
		<title>Projects/OWASP Mobile Security Project - Top Ten Mobile Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Controls&amp;diff=110544"/>
				<updated>2011-05-17T10:54:10Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Top 10 mobile controls and design principles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Identify and protect sensitive data on the mobile device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile devices (being mobile) have a higher risk of getting lost, stolen. And it is trivial to Jailbreak or root the device once someone has physical possession of the device. Adequate protection be built to minimize the loss of sensitive data on device.&lt;br /&gt;
&lt;br /&gt;
** In the design phase analyze what data is sensitive and needs to be protected and apply appropriate controls (user personal/privacy data, password credentials etc.).&lt;br /&gt;
** Store sensitive data on the server instead of client-end  device, if possible.&lt;br /&gt;
**Leverage the encryption and key-store mechanism provided by the mobile OS/hardware to secure sensitive data. In case no good key management is available on the client-end, storing keys on the server side could be considered.&lt;br /&gt;
**Do not store/cache sensitive data on the removable media&lt;br /&gt;
**Use only protected temp/cache directories (Do not store temp/cached data in a world readable directory)&lt;br /&gt;
** Automatically delete data from device which is no longer required &lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel&lt;br /&gt;
**Managed devices should leverage remote wipe and kill switch to remove sensitive information from the device&lt;br /&gt;
**Schedule deletion according to time, rather than on a push-pop basis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Handle password credentials securely  on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's password credentials if stolen not only provides unauthorized access to the mobile backend service but potentially many other services/accounts used by the user. Since a majority of the users  reuse their passwords (http://www.pcworld.com/article/188763/too_many_people_reuse_logins_study_finds.html )&lt;br /&gt;
&lt;br /&gt;
**Instead of passwords consider using longer term tokens that can be securely stored on the device (OAuth). Tokens can be issued by the backend service after verifying the user credentials initially. And the tokens could be time bound to the specific service, minimizing the damage in loss scenarios. &lt;br /&gt;
**In case passwords needs to stored on the device leverage the encryption and key-store mechanism provided by the mobile OS/hardware to securely store password credentials&lt;br /&gt;
**Provide mechanism to the mobile user to change/remove passwords on the device&lt;br /&gt;
**Password credentials should be marked to avoid being copied to backups &lt;br /&gt;
**Ensure passwords are not visible in cache or logs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Ensure sensitive data is protected in transit''' &lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the smartphones are capable of using multiple transport carriers including Wifi, provider network(3G, GSM,..), bluetooth. Sensitive data passing through insecure channels could be intercepted.&lt;br /&gt;
&lt;br /&gt;
**Protecting Data in transit (assume the worst case, user sitting in a public unprotected wifi )&lt;br /&gt;
**Applications should ensure that a secure channel (such as SSL/TLS) is established end-end when sending sensitive information on wire/air. (Do not assume transport encryption)&lt;br /&gt;
**To reduce the risk of man-in-middle (like SSL proxy), secure connection should only be established  after verifying the credentials of remote end-point (server). This can be achieved by ensuring that SSL is only established with the end points having the trusted certificates in key chain. &lt;br /&gt;
**Do not disable or ignore the SSL chain validation.  &lt;br /&gt;
**SMS, MMS or notifications should not be used to send sensitive data to mobile end points&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''4. Keep the back-end API and mobile platform secure'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. Insecure implementation of backend APIs or services, and not keeping the back-end platform hardened/patched will allow bad guys to directly attack/compromise the back-ends.&lt;br /&gt;
&lt;br /&gt;
**Web Services/ SOAP/ REST , security best practices (placeholder)&lt;br /&gt;
** Input validation&lt;br /&gt;
** Do not use a generic  shared secret for integration to backend (like embedded password in code)&lt;br /&gt;
**Use authentication that ties back to the end user identity (rather than the device identity)&lt;br /&gt;
**Ensure authorization controls are done correctly in the backend APIs.&lt;br /&gt;
**Ensure that the backend platform is running on a hardened configuration with latest security patches&lt;br /&gt;
**Employ rate limiting and throttling, test for DDoS vulnerabilities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Implement user authentication/authorization and session management  correctly'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Majority of the mobile applications interact with the backend APIs using REST/Web Services or other proprietary protocols. It is important to ensure that the session management is done correctly after the initial authentication.&lt;br /&gt;
&lt;br /&gt;
**User authentication must be based on user's credentials.&lt;br /&gt;
**Use unpredictable session identifier with high entropy&lt;br /&gt;
**Do not use device id (UDID or IMEI) as the only session identifier. Device Id is easy to spoof.  (Device Id could be used as an additional check or stronger validation that the request is originating from the known device)&lt;br /&gt;
**Session tokens can be cached using the operating system features to encrypt while in storage on device (e.g. Keychains). &lt;br /&gt;
** Device cert can be used for stronger device identity&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''6. Ensure strong vulnerability and patch management in place'''&lt;br /&gt;
&lt;br /&gt;
**All the back-end APIs (WebServices/REST) for mobile apps must be tested for vulnerabilities periodically.&lt;br /&gt;
** Developers should use static code analyzer tools and fuzzing tools for testing and finding security flaws.&lt;br /&gt;
**Applications must be designed and provisioned to allow updates for security patches.&lt;br /&gt;
**Application team is responsible for tracking all third party frameworks/APIs used in the mobile application for security patches. A corresponding security update must be done for the mobile application using these third party APIs/frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''7. Employ the secure coding/development practices'''&lt;br /&gt;
&lt;br /&gt;
** Input Validation and Output Encoding&lt;br /&gt;
**Vet the security/authenticity of any third party code/libraries used in your mobile application ( reliable source, supported, no backend Trojans, licensing)&lt;br /&gt;
**Avoid opening application specific server sockets (listener ports) on the client device. Use the communication mechanisms provided by the OS.&lt;br /&gt;
**Code signing for some mobile platforms allows inherent trust between applications (with same code signatures), installed on the same mobile device. Plan code signing mechanisms properly.&lt;br /&gt;
**Leverage static and binary code analyzers to find security flaws.&lt;br /&gt;
** Use safe string function, avoid buffer and Integer overflow&lt;br /&gt;
**Context aware security: may be able to decrease/increase access based on the context (e.g. location, network)&lt;br /&gt;
**For applications using JNI (Android) using a third party validation to ensure no vulnerabilities.&lt;br /&gt;
**Remove all test code before releasing the application&lt;br /&gt;
**Ensure logging is done appropriately in the released application. No excessive logging, no sensitive user information in log files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''8. Perform data integration with third party backend applications correctly'''&lt;br /&gt;
&lt;br /&gt;
** User informed if any personal data is collected or sent &lt;br /&gt;
**No sensitive or user personal data is sent or shared with a third party/social site without prior approval and knowledge of the user.&lt;br /&gt;
**Validate all data received from the non-trusted third party before processing in the application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''9. Run the mobile client using minimal permission''' &lt;br /&gt;
&lt;br /&gt;
**Run with the minimum privilege required for the application on the operating system. &lt;br /&gt;
**Don't authorize code/app to execute with root privilege&lt;br /&gt;
**Always perform testing as a standard user (rather than a privileged user)&lt;br /&gt;
**Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''10. Enforce higher  security posture on the device for sensitive apps''' &lt;br /&gt;
&lt;br /&gt;
**If a sensitive application needs to be provisioned on a device, application can employ enforcement of the  certain security posture on the device (such as PIN, remote management/wipe)&lt;br /&gt;
** Enterprise applications can employ this principle of doing a security posture check before deployment of sensitive enterprise applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Candidates (to be merged if needed) ===&lt;br /&gt;
&lt;br /&gt;
'''11. No secrets in code/binary'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': Mobile application binaries can be easily reverse engineered.&lt;br /&gt;
&lt;br /&gt;
**Do not store any passwords or secrets in the application binary &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''12. Protect your application from other malicious applications on the device'''&lt;br /&gt;
&lt;br /&gt;
'''Risk''': User's are prone to install applications that look cool (may be malicious) and can transmit data about user (or stored data) for malicious purpose.&lt;br /&gt;
&lt;br /&gt;
**(?? What guidelines could be provided to developers)&lt;br /&gt;
**User education on using due diligence while installing third party applications on mobile devices &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Original list (kept for review) ===&lt;br /&gt;
# Protect data at rest&lt;br /&gt;
# Protect data in transport&lt;br /&gt;
# Multi-factor authentication&lt;br /&gt;
# Session management&lt;br /&gt;
# Least privilege access control&lt;br /&gt;
# Untrusted data validation&lt;br /&gt;
# Output encoding&lt;br /&gt;
# Enterprise device management&lt;br /&gt;
# Keep business logic on the server&lt;br /&gt;
# Platform security&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110189</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110189"/>
				<updated>2011-05-10T14:26:17Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz... (feel free to restructure)&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
* Unsafe sensitive data storage&lt;br /&gt;
** Consider the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
** Securely delete data using standard shredding techniques.&lt;br /&gt;
** Store a minimum of data on the client side device.&lt;br /&gt;
** Securely wipe removable media.&lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
** Implement key and password storage best practice.&lt;br /&gt;
** In the design phase analyse what data needs to be protected most and what doesn't and apply controls at appropriate places.&lt;br /&gt;
&lt;br /&gt;
* Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers wherever possible - e.g. do not use the EMEI number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control what data which is stored in public stores such as address book, media gallery etc... including metadata.&lt;br /&gt;
** Obtain user explicit user consent according to best practice (see implementation guidelines) for collection of personal data.&lt;br /&gt;
&lt;br /&gt;
* Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
** See first risk&lt;br /&gt;
** Provide a convenient way of resetting access credentials which does not require the device (consider an automated timeout on access credentials).&lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys.&lt;br /&gt;
&lt;br /&gt;
* Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths.&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer).&lt;br /&gt;
&lt;br /&gt;
* Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
&lt;br /&gt;
* Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
** Use the GSM encryption-on indicator to detect and signal downgrade attacks.&lt;br /&gt;
&lt;br /&gt;
* Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
**  Don't use 3rd party code without carefully verifying&lt;br /&gt;
* Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
* Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
* Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
** Note that this relies a lot on smart developers because a lot of the congestion is due to signalling overload. Could we make some recommendations on detecting idle/focus so that the app knows when it really needs to be connected to the network?&lt;br /&gt;
* Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
* UI Impersonation&lt;br /&gt;
* System modification (rootkit, APN proxy config)&lt;br /&gt;
** Validate updates and input data from untrusted sources.&lt;br /&gt;
* Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
** Define clearly who should be responsible for updating the application Extensions or plugins e.g. Angry birds Add-ons and installations &lt;br /&gt;
* Unsafe sensitive data transmission&lt;br /&gt;
* Hardcoded password/keys&lt;br /&gt;
* Lack of data protection in transit&lt;br /&gt;
** Don't allow SSL downgrade.&lt;br /&gt;
** Don't trust network infrastructure&lt;br /&gt;
** See Network Spoofing.&lt;br /&gt;
* Client-side injection&lt;br /&gt;
* Client-side DOS&lt;br /&gt;
* Malicious third-party code&lt;br /&gt;
** Follow security best practice for implementation of runtime interpreters (be careful when implementing anything which turns user input into executable code).&lt;br /&gt;
* Client-side buffer overflow&lt;br /&gt;
* Failure to properly handle inbound SMS messages&lt;br /&gt;
** Remove test code from software&lt;br /&gt;
* Failure to properly handle outbound SMS messages&lt;br /&gt;
* Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;br /&gt;
** Least privilege. Be aware of privileges granted by default by API's and disable them.&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110187</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110187"/>
				<updated>2011-05-10T12:54:42Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz... (feel free to restructure)&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
* Unsafe sensitive data storage&lt;br /&gt;
** Consider the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
** Securely delete data using standard shredding techniques.&lt;br /&gt;
** Store a minimum of data on the client side device.&lt;br /&gt;
** Securely wipe removable media.&lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
** Implement key and password storage best practice.&lt;br /&gt;
** In the design phase analyse what data needs to be protected most and what doesn't and apply controls at appropriate places.&lt;br /&gt;
&lt;br /&gt;
* Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers wherever possible - e.g. do not use the EMEI number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control what data which is stored in public stores such as address book, media gallery etc... including metadata.&lt;br /&gt;
** Obtain user explicit user consent according to best practice (see implementation guidelines) for collection of personal data.&lt;br /&gt;
&lt;br /&gt;
* Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
** See first risk&lt;br /&gt;
** Provide a convenient way of resetting access credentials which does not require the device (consider an automated timeout on access credentials).&lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys.&lt;br /&gt;
&lt;br /&gt;
* Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths.&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer).&lt;br /&gt;
&lt;br /&gt;
* Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
&lt;br /&gt;
* Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
** Use the GSM encryption-on indicator to detect and signal downgrade attacks.&lt;br /&gt;
&lt;br /&gt;
* Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
**  Don't use 3rd party code without carefully verifying&lt;br /&gt;
* Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
* Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
* Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
* Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
* UI Impersonation&lt;br /&gt;
* System modification (rootkit, APN proxy config)&lt;br /&gt;
** Validate updates and input data from untrusted sources.&lt;br /&gt;
* Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
** Define clearly who should be responsible for updating the application Extensions or plugins e.g. Angry birds Add-ons and installations &lt;br /&gt;
* Unsafe sensitive data transmission&lt;br /&gt;
* Hardcoded password/keys&lt;br /&gt;
* Lack of data protection in transit&lt;br /&gt;
** Don't allow SSL downgrade.&lt;br /&gt;
** Don't trust network infrastructure&lt;br /&gt;
* Client-side injection&lt;br /&gt;
* Client-side DOS&lt;br /&gt;
* Malicious third-party code&lt;br /&gt;
* Client-side buffer overflow&lt;br /&gt;
* Failure to properly handle inbound SMS messages&lt;br /&gt;
** Remove test code from software&lt;br /&gt;
* Failure to properly handle outbound SMS messages&lt;br /&gt;
* Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110186</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110186"/>
				<updated>2011-05-10T12:49:32Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz... (feel free to restructure)&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
* Unsafe sensitive data storage&lt;br /&gt;
** Consider the whole data lifecycle in writing your application (collection over the wire, temporary storage, caching, backup, deletion etc...)&lt;br /&gt;
** Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
** Securely delete data using standard shredding techniques.&lt;br /&gt;
** Store a minimum of data on the client side device.&lt;br /&gt;
** Securely wipe removable media.&lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
** Implement key and password storage best practice.&lt;br /&gt;
** In the design phase analyse what data needs to be protected most and what doesn't and apply controls at appropriate places.&lt;br /&gt;
&lt;br /&gt;
* Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers wherever possible - e.g. do not use the EMEI number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control what data which is stored in public stores such as address book, media gallery etc... including metadata.&lt;br /&gt;
** Obtain user explicit user consent according to best practice (see implementation guidelines) for collection of personal data.&lt;br /&gt;
&lt;br /&gt;
* Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
** See first risk&lt;br /&gt;
** Provide a convenient way of resetting access credentials which does not require the device (consider an automated timeout on access credentials).&lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys.&lt;br /&gt;
&lt;br /&gt;
* Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths.&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer).&lt;br /&gt;
&lt;br /&gt;
* Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
&lt;br /&gt;
* Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
** Use the GSM encryption-on indicator to detect and signal downgrade attacks.&lt;br /&gt;
&lt;br /&gt;
* Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
* Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
* Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
* Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
* Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
* UI Impersonation&lt;br /&gt;
* System modification (rootkit, APN proxy config)&lt;br /&gt;
* Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
* Unsafe sensitive data transmission&lt;br /&gt;
* Hardcoded password/keys&lt;br /&gt;
* Lack of data protection in transit&lt;br /&gt;
* Client-side injection&lt;br /&gt;
* Client-side DOS&lt;br /&gt;
* Malicious third-party code&lt;br /&gt;
* Client-side buffer overflow&lt;br /&gt;
* Failure to properly handle inbound SMS messages&lt;br /&gt;
* Failure to properly handle outbound SMS messages&lt;br /&gt;
* Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110185</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110185"/>
				<updated>2011-05-10T12:42:27Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz... (feel free to restructure)&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
* Unsafe sensitive data storage&lt;br /&gt;
** Consider the whole data lifecycle in writing your application&lt;br /&gt;
** Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
** Securely delete data using standard shredding techniques.&lt;br /&gt;
** Store a minimum of data on the client side device.&lt;br /&gt;
** Securely wipe removable media&lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
** Implement key and password storage best practice.&lt;br /&gt;
** Figure out what data needs to be protected most and what doesn't.&lt;br /&gt;
&lt;br /&gt;
* Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Use non-persistent identifiers wherever possible - e.g. do not use the EMEI number as an identifier unless there is a good reason to do so.&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
** Carefully control any data which is stored in public stores such as address book, media gallery etc...&lt;br /&gt;
** Obtain user explicit user consent according to best practice (see implementation guidelines) for collection of personal data.&lt;br /&gt;
&lt;br /&gt;
* Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
** See first risk&lt;br /&gt;
** Provide a convenient way of resetting access credentials which does not require the device (consider an automated timeout on access credentials).&lt;br /&gt;
** Consider using SIM card as default storage for small but sensitive data such as keys.&lt;br /&gt;
&lt;br /&gt;
* Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
** Provide appropriate trust cues for linking to unknown third party applications.&lt;br /&gt;
** Do not train users to follow untrusted paths.&lt;br /&gt;
** Provide a reporting channel for phishing from apps (e.g. if you are a browser plugin developer).&lt;br /&gt;
&lt;br /&gt;
* Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
&lt;br /&gt;
* Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
** Use the GSM encryption flags to detect and signal downgrade attacks.&lt;br /&gt;
&lt;br /&gt;
* Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
* Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
* Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
* Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
* Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
* UI Impersonation&lt;br /&gt;
* System modification (rootkit, APN proxy config)&lt;br /&gt;
* Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
* Unsafe sensitive data transmission&lt;br /&gt;
* Hardcoded password/keys&lt;br /&gt;
* Lack of data protection in transit&lt;br /&gt;
* Client-side injection&lt;br /&gt;
* Client-side DOS&lt;br /&gt;
* Malicious third-party code&lt;br /&gt;
* Client-side buffer overflow&lt;br /&gt;
* Failure to properly handle inbound SMS messages&lt;br /&gt;
* Failure to properly handle outbound SMS messages&lt;br /&gt;
* Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110168</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110168"/>
				<updated>2011-05-10T12:33:45Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz...&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
* Unsafe sensitive data storage&lt;br /&gt;
** Consider the whole data lifecycle in writing your application&lt;br /&gt;
** Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
** Securely delete data using standard shredding techniques.&lt;br /&gt;
** Store a minimum of data on the client side device.&lt;br /&gt;
** Securely wipe removable media&lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
** Implement key and password storage best practice.&lt;br /&gt;
** Figure out what data needs to be protected most and what doesn't.&lt;br /&gt;
&lt;br /&gt;
* Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
** Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
** Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
* Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
* Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
* Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
* Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
* Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
* Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
* Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
* Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
* UI Impersonation&lt;br /&gt;
* System modification (rootkit, APN proxy config)&lt;br /&gt;
* Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
* Unsafe sensitive data transmission&lt;br /&gt;
* Hardcoded password/keys&lt;br /&gt;
* Lack of data protection in transit&lt;br /&gt;
* Client-side injection&lt;br /&gt;
* Client-side DOS&lt;br /&gt;
* Malicious third-party code&lt;br /&gt;
* Client-side buffer overflow&lt;br /&gt;
* Failure to properly handle inbound SMS messages&lt;br /&gt;
* Failure to properly handle outbound SMS messages&lt;br /&gt;
* Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110167</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110167"/>
				<updated>2011-05-10T12:32:38Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz...&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
# Unsafe sensitive data storage&lt;br /&gt;
** Consider the whole data lifecycle in writing your application&lt;br /&gt;
** Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
** Securely delete data using standard shredding techniques.&lt;br /&gt;
** Store a minimum of data on the client side device.&lt;br /&gt;
** Securely wipe removable media&lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
** Implement key and password storage best practice.&lt;br /&gt;
** Figure out what data needs to be protected most and what doesn't.&lt;br /&gt;
&lt;br /&gt;
# Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
## Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
## Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
# Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
# Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
# Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
# Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
# Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
# Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
# Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
# Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
# UI Impersonation&lt;br /&gt;
# System modification (rootkit, APN proxy config)&lt;br /&gt;
# Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
# Unsafe sensitive data transmission&lt;br /&gt;
# Hardcoded password/keys&lt;br /&gt;
# Lack of data protection in transit&lt;br /&gt;
# Client-side injection&lt;br /&gt;
# Client-side DOS&lt;br /&gt;
# Malicious third-party code&lt;br /&gt;
# Client-side buffer overflow&lt;br /&gt;
# Failure to properly handle inbound SMS messages&lt;br /&gt;
# Failure to properly handle outbound SMS messages&lt;br /&gt;
# Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110166</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110166"/>
				<updated>2011-05-10T12:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz...&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
# Unsafe sensitive data storage&lt;br /&gt;
**Consider the whole data lifecycle in writing your application&lt;br /&gt;
** Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
** Securely delete data using standard shredding techniques.&lt;br /&gt;
** Store a minimum of data on the client side device.&lt;br /&gt;
** Securely wipe removable media&lt;br /&gt;
** Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
** Implement key and password storage best practice.&lt;br /&gt;
** Figure out what data needs to be protected most and what doesn't.&lt;br /&gt;
&lt;br /&gt;
# Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
## Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
## Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
# Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
# Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
# Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
# Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
# Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
# Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
# Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
# Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
# UI Impersonation&lt;br /&gt;
# System modification (rootkit, APN proxy config)&lt;br /&gt;
# Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
# Unsafe sensitive data transmission&lt;br /&gt;
# Hardcoded password/keys&lt;br /&gt;
# Lack of data protection in transit&lt;br /&gt;
# Client-side injection&lt;br /&gt;
# Client-side DOS&lt;br /&gt;
# Malicious third-party code&lt;br /&gt;
# Client-side buffer overflow&lt;br /&gt;
# Failure to properly handle inbound SMS messages&lt;br /&gt;
# Failure to properly handle outbound SMS messages&lt;br /&gt;
# Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110165</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110165"/>
				<updated>2011-05-10T12:31:51Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz...&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
# Unsafe sensitive data storage&lt;br /&gt;
## Consider the whole data lifecycle in writing your application&lt;br /&gt;
## Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
## Securely delete data using standard shredding techniques.&lt;br /&gt;
## Store a minimum of data on the client side device.&lt;br /&gt;
## Securely wipe removable media&lt;br /&gt;
## Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
## Implement key and password storage best practice.&lt;br /&gt;
## Figure out what data needs to be protected most and what doesn't.&lt;br /&gt;
&lt;br /&gt;
# Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
## Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
## Apply techniques for the detection of covert channels - e.g. covert flow trees to discover information which may flow through shared resources such as file systems, resource use etc...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
# Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
# Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
# Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
# Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
# Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
# Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
# Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
# Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
# UI Impersonation&lt;br /&gt;
# System modification (rootkit, APN proxy config)&lt;br /&gt;
# Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
# Unsafe sensitive data transmission&lt;br /&gt;
# Hardcoded password/keys&lt;br /&gt;
# Lack of data protection in transit&lt;br /&gt;
# Client-side injection&lt;br /&gt;
# Client-side DOS&lt;br /&gt;
# Malicious third-party code&lt;br /&gt;
# Client-side buffer overflow&lt;br /&gt;
# Failure to properly handle inbound SMS messages&lt;br /&gt;
# Failure to properly handle outbound SMS messages&lt;br /&gt;
# Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110164</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110164"/>
				<updated>2011-05-10T12:26:21Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz...&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
# Unsafe sensitive data storage&lt;br /&gt;
* Consider the whole data lifecycle in writing your application&lt;br /&gt;
* Automatically delete data which is not required (how to know when it's not required?).&lt;br /&gt;
* Securely delete data using standard shredding techniques.&lt;br /&gt;
* Store a minimum of data on the client side device.&lt;br /&gt;
* Securely wipe removable media&lt;br /&gt;
* Be aware of caches and temporary storage as a possible leakage channel.&lt;br /&gt;
* Implement key and password storage best practice.&lt;br /&gt;
* Figure out what data needs to be protected most and what doesn't.&lt;br /&gt;
&lt;br /&gt;
# Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
* Apply the principle of minimal disclosure - only collect and disclose data which is required for the application (how to know what this is?)&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
# Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
# Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
# Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
# Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
# Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
# Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
# Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
# Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
# Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
# UI Impersonation&lt;br /&gt;
# System modification (rootkit, APN proxy config)&lt;br /&gt;
# Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
# Unsafe sensitive data transmission&lt;br /&gt;
# Hardcoded password/keys&lt;br /&gt;
# Lack of data protection in transit&lt;br /&gt;
# Client-side injection&lt;br /&gt;
# Client-side DOS&lt;br /&gt;
# Malicious third-party code&lt;br /&gt;
# Client-side buffer overflow&lt;br /&gt;
# Failure to properly handle inbound SMS messages&lt;br /&gt;
# Failure to properly handle outbound SMS messages&lt;br /&gt;
# Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=110163</id>
		<title>Projects/OWASP Mobile Security Project - Secure Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=110163"/>
				<updated>2011-05-10T12:20:23Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objective==&lt;br /&gt;
The OWASP/ENISA Mobile Secure Development Guidelines will be living, open source documents, that provide knowledge and guidance for developers for creating secure mobile&lt;br /&gt;
applications.&lt;br /&gt;
&lt;br /&gt;
==Target audience==&lt;br /&gt;
The output will be:&lt;br /&gt;
* A main document aimed at developers and software architects&lt;br /&gt;
* A CIO/CSO/CEO/CTO-level [[document motivating the use of the guidlines]].&lt;br /&gt;
&lt;br /&gt;
==Main document skeleton==&lt;br /&gt;
Who we are, who wrote it, where an online version can be found, how people can contribute.&lt;br /&gt;
&lt;br /&gt;
===Executive summary===&lt;br /&gt;
Why this document. A convincing argument to c-level for why they should give priority to security in mobile dev projects. FUD goes here.&lt;br /&gt;
&lt;br /&gt;
===Architecture and design principles===&lt;br /&gt;
Starting from a risk-based approach; Starting from ENISA/OWASP/Veracode top ten risks (extended, modified) (for example see the Veracode top ten risks and eventual OWASP top 10 risks), we state architecture and design principles, that address these risks.&lt;br /&gt;
&lt;br /&gt;
* [[Architecture and design principles]] and examples of what they mean for secure&lt;br /&gt;
mobile/smartphone applications,- e.g. minimal disclosure, minimal on-device storage,&lt;br /&gt;
don’t allow untrusted update of add-ons, do not allow access to sensor data from other&lt;br /&gt;
applications, authenticate backend.&lt;br /&gt;
&lt;br /&gt;
===Coding techniques===&lt;br /&gt;
* [[Code level controls]] (based on the principles) - What to look for in the code. E.g. checklist&lt;br /&gt;
for persistent storage code, identifier schemes, authentication mechanisms, etc...&lt;br /&gt;
* [[Platform-specific how-to’s]] and how not to’s, common errors and vulnerabilities, sample&lt;br /&gt;
code (on how to implement common control), how not-to app (mobile version of&lt;br /&gt;
WebGoat).&lt;br /&gt;
* Optionally (stage 2) - open source libraries - mobile version of ESAPI&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=110162</id>
		<title>Projects/OWASP Mobile Security Project - Secure Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=110162"/>
				<updated>2011-05-10T12:19:47Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objective==&lt;br /&gt;
The OWASP/ENISA Mobile Secure Development Guidelines will be living, open source documents, that provide knowledge and guidance for developers for creating secure mobile&lt;br /&gt;
applications.&lt;br /&gt;
&lt;br /&gt;
==Target audience==&lt;br /&gt;
The output will be:&lt;br /&gt;
* A main document aimed at developers and software architects&lt;br /&gt;
* A CIO/CSO/CEO/CTO-level document motivating the use of the guidlines.&lt;br /&gt;
&lt;br /&gt;
==Main document skeleton==&lt;br /&gt;
Who we are, who wrote it, where an online version can be found, how people can contribute.&lt;br /&gt;
&lt;br /&gt;
===Executive summary===&lt;br /&gt;
Why this document. A convincing argument to c-level for why they should give priority to security in mobile dev projects. FUD goes here.&lt;br /&gt;
&lt;br /&gt;
===Architecture and design principles===&lt;br /&gt;
Starting from a risk-based approach; Starting from ENISA/OWASP/Veracode top ten risks (extended, modified) (for example see the Veracode top ten risks and eventual OWASP top 10 risks), we state architecture and design principles, that address these risks.&lt;br /&gt;
&lt;br /&gt;
* [[Architecture and design principles]] and examples of what they mean for secure&lt;br /&gt;
mobile/smartphone applications,- e.g. minimal disclosure, minimal on-device storage,&lt;br /&gt;
don’t allow untrusted update of add-ons, do not allow access to sensor data from other&lt;br /&gt;
applications, authenticate backend.&lt;br /&gt;
&lt;br /&gt;
===Coding techniques===&lt;br /&gt;
* [[Code level controls]] (based on the principles) - What to look for in the code. E.g. checklist&lt;br /&gt;
for persistent storage code, identifier schemes, authentication mechanisms, etc...&lt;br /&gt;
* [[Platform-specific how-to’s]] and how not to’s, common errors and vulnerabilities, sample&lt;br /&gt;
code (on how to implement common control), how not-to app (mobile version of&lt;br /&gt;
WebGoat).&lt;br /&gt;
* Optionally (stage 2) - open source libraries - mobile version of ESAPI&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110161</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110161"/>
				<updated>2011-05-10T12:15:27Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz...&lt;br /&gt;
&lt;br /&gt;
==Top Risks/Vulnerabilities==&lt;br /&gt;
&lt;br /&gt;
# Unsafe sensitive data storage&lt;br /&gt;
# Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
# Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
# Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
# Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
# Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
# Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
# Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
# Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
# Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
# Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
# UI Impersonation&lt;br /&gt;
# System modification (rootkit, APN proxy config)&lt;br /&gt;
# Logic or Time bomb (including runtime interpreter)&lt;br /&gt;
# Unsafe sensitive data transmission&lt;br /&gt;
# Hardcoded password/keys&lt;br /&gt;
# Lack of data protection in transit&lt;br /&gt;
# Client-side injection&lt;br /&gt;
# Client-side DOS&lt;br /&gt;
# Malicious third-party code&lt;br /&gt;
# Client-side buffer overflow&lt;br /&gt;
# Failure to properly handle inbound SMS messages&lt;br /&gt;
# Failure to properly handle outbound SMS messages&lt;br /&gt;
# Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110160</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110160"/>
				<updated>2011-05-10T12:10:01Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. Note that there is a mixture of threats and vulnerabilities here - we should decide whether to use risks (threats with impact on assets which occur with probability) and vulnerabilities (system flaws which increase the probability of a threat occurring). I have cut those risks/vulnerabilities which cannot be addressed in any way by developers.  We should decide whether to include recommendations in the style of &amp;quot;code of practice&amp;quot;- e.g. activity monitoring should only be used in circumstances xyz...&lt;br /&gt;
&lt;br /&gt;
==ENISA top 10==&lt;br /&gt;
# Data leakage resulting from device loss or theft: The smartphone is stolen or lost and its memory or removable media are unprotected, allowing an attacker access to the data stored on it.&lt;br /&gt;
# Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
# Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
# Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
# Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
# Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
# Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
# Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
# Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
# Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
&lt;br /&gt;
==Veracode top 10==&lt;br /&gt;
# Activity monitoring and data retrieval&lt;br /&gt;
# Unauthorized dialing, SMS, and payments&lt;br /&gt;
# Unauthorized network connectivity (exfiltration or command &amp;amp; control)&lt;br /&gt;
# UI Impersonation&lt;br /&gt;
# System modification (rootkit, APN proxy config)&lt;br /&gt;
# Logic or Time bomb&lt;br /&gt;
&lt;br /&gt;
The category of Vulnerabilities are errors in design or implementation that expose the mobile device data to interception and retrieval by attackers. Vulnerabilities can also expose the mobile device or the cloud applications used from the device to unauthorized access.&lt;br /&gt;
&lt;br /&gt;
B. Vulnerabilities&lt;br /&gt;
&lt;br /&gt;
# Sensitive data leakage (inadvertent or side channel)&lt;br /&gt;
# Unsafe sensitive data storage&lt;br /&gt;
# Unsafe sensitive data transmission&lt;br /&gt;
# Hardcoded password/keys&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OWASP Top 10 Mobile Risks ==&lt;br /&gt;
&lt;br /&gt;
# Insecure or unnecessary client-side data storage&lt;br /&gt;
# Lack of data protection in transit&lt;br /&gt;
# Personal data leakage&lt;br /&gt;
# Client-side injection&lt;br /&gt;
# Client-side DOS&lt;br /&gt;
# Malicious third-party code&lt;br /&gt;
# Client-side buffer overflow&lt;br /&gt;
&lt;br /&gt;
=== Additional Considerations ===&lt;br /&gt;
&lt;br /&gt;
# Failure to properly handle inbound SMS messages&lt;br /&gt;
# Failure to properly handle outbound SMS messages&lt;br /&gt;
# Malicious / Fake applications from appstore&lt;br /&gt;
# Ability of one application to view data or communicate with other applications&lt;br /&gt;
# Switching networks during a transaction&lt;br /&gt;
# Failure to Protect Sensitive Data at rest&lt;br /&gt;
# Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110159</id>
		<title>Architecture and design principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Architecture_and_design_principles&amp;diff=110159"/>
				<updated>2011-05-10T11:57:49Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: Created page with &amp;quot;The following is a merge of ENISA, OWASP and Veracode top 10. I have cut those risks which cannot be addressed by developers. Note some of the OWASP top ten are in the category o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a merge of ENISA, OWASP and Veracode top 10. I have cut those risks which cannot be addressed by developers. Note some of the OWASP top ten are in the category of vulnerabilities so I have cut these.&lt;br /&gt;
&lt;br /&gt;
==ENISA top 10==&lt;br /&gt;
# Data leakage resulting from device loss or theft: The smartphone is stolen or lost and its memory or removable media are unprotected, allowing an attacker access to the data stored on it.&lt;br /&gt;
# Unintentional disclosure of data: The smartphone user unintentionally discloses data on the smartphone.&lt;br /&gt;
# Attacks on decommissioned smartphones: The smartphone is decommissioned improperly allowing an attacker access to the data on the device.&lt;br /&gt;
# Phishing attacks: An attacker collects user credentials (such as passwords and credit card numbers) by means of fake apps or (SMS, email) messages that seem genuine.&lt;br /&gt;
# Spyware:  Spyware covers untargeted collection of personal information as opposed to targeted surveillance.&lt;br /&gt;
# Network Spoofing Attacks: An attacker deploys a rogue network access point (WiFi or GSM) and users connect to it. The attacker subsequently intercepts (or tampers with) the user communication to carry out further attacks such as phishing.&lt;br /&gt;
# Surveillance attacks: An attacker keeps a specific user under surveillance through the target user’s smartphone.&lt;br /&gt;
# Diallerware attacks: An attacker steals money from the user by means of malware that makes hidden use of premium SMS services or numbers.&lt;br /&gt;
# Financial malware attacks The smartphone is infected with malware specifically designed for stealing credit card numbers, online banking credentials or subverting online banking or ecommerce transactions.&lt;br /&gt;
# Network congestion 	Network resource overload due to smartphone usage leading to network unavailability for the end-user.&lt;br /&gt;
&lt;br /&gt;
== OWASP Top 10 Mobile Risks ==&lt;br /&gt;
&lt;br /&gt;
# Insecure or unnecessary client-side data storage&lt;br /&gt;
# Lack of data protection in transit&lt;br /&gt;
# Personal data leakage&lt;br /&gt;
# Client-side injection&lt;br /&gt;
# Client-side DOS&lt;br /&gt;
# Malicious third-party code&lt;br /&gt;
# Client-side buffer overflow&lt;br /&gt;
&lt;br /&gt;
=== Additional Considerations ===&lt;br /&gt;
&lt;br /&gt;
# Failure to properly handle inbound SMS messages&lt;br /&gt;
# Failure to properly handle outbound SMS messages&lt;br /&gt;
# Malicious / Fake applications from appstore&lt;br /&gt;
# Ability of one application to view data or communicate with other applications&lt;br /&gt;
# Switching networks during a transaction&lt;br /&gt;
# Failure to Protect Sensitive Data at rest&lt;br /&gt;
# Failure to disable insecure platform features in application (caching of keystrokes, screen data)&lt;br /&gt;
&lt;br /&gt;
==Veracode top 10==&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=110158</id>
		<title>Projects/OWASP Mobile Security Project - Secure Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=110158"/>
				<updated>2011-05-10T11:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objective==&lt;br /&gt;
The OWASP/ENISA Mobile Secure Development Guidelines will be living, open source documents, that provide knowledge and guidance for developers for creating secure mobile&lt;br /&gt;
applications.&lt;br /&gt;
&lt;br /&gt;
==Target audience==&lt;br /&gt;
The output will be:&lt;br /&gt;
* A main document aimed at developers and software architects&lt;br /&gt;
* A CIO/CSO/CEO/CTO-level document motivating the use of the guidlines.&lt;br /&gt;
&lt;br /&gt;
==Main document skeleton==&lt;br /&gt;
===Executive summary===&lt;br /&gt;
Why this document. A convincing argument to c-level for why they should give priority to security in mobile dev projects. FUD goes here.&lt;br /&gt;
&lt;br /&gt;
===Colofon===&lt;br /&gt;
Who we are, who wrote it, where an online version can be found, how people can contribute.&lt;br /&gt;
&lt;br /&gt;
===Architecture and design principles===&lt;br /&gt;
Starting from a risk-based approach; Starting from ENISA/OWASP/Veracode top ten risks (extended, modified) (for example see the Veracode top ten risks and eventual OWASP top 10 risks), we state architecture and design principles, that address these risks.&lt;br /&gt;
&lt;br /&gt;
* [[Architecture and design principles]] and examples of what they mean for secure&lt;br /&gt;
mobile/smartphone applications,- e.g. minimal disclosure, minimal on-device storage,&lt;br /&gt;
don’t allow untrusted update of add-ons, do not allow access to sensor data from other&lt;br /&gt;
applications, authenticate backend.&lt;br /&gt;
&lt;br /&gt;
===Coding techniques===&lt;br /&gt;
* Code level controls (based on the principles) - What to look for in the code. E.g. checklist&lt;br /&gt;
for persistent storage code, identifier schemes, authentication mechanisms, etc...&lt;br /&gt;
* Platform-specific how-to’s and how not to’s, common errors and vulnerabilities, sample&lt;br /&gt;
code (on how to implement common control), how not-to app (mobile version of&lt;br /&gt;
WebGoat).&lt;br /&gt;
* Optionally (stage 2) - open source libraries - mobile version of ESAPI&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=110157</id>
		<title>Projects/OWASP Mobile Security Project - Secure Development Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Mobile_Security_Project_-_Secure_Development_Guidelines&amp;diff=110157"/>
				<updated>2011-05-10T11:42:32Z</updated>
		
		<summary type="html">&lt;p&gt;Giles Hogben: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Objective==&lt;br /&gt;
The OWASP/ENISA Mobile Secure Development Guidelines will be partly living, open source&lt;br /&gt;
documents, that provide knowledge and guidance for developers for creating secure mobile&lt;br /&gt;
applications.&lt;br /&gt;
&lt;br /&gt;
==Target audience==&lt;br /&gt;
The output will be:&lt;br /&gt;
● A main document aimed at developers and software architects&lt;br /&gt;
● A CIO/CSO/CEO/CTO-level document motivating the use of the guidlines.&lt;br /&gt;
&lt;br /&gt;
==Main document skeleton==&lt;br /&gt;
===Executive summary===&lt;br /&gt;
Why this document. A convincing argument to c-level for why they should give priority to&lt;br /&gt;
security in mobile dev projects. FUD goes here.&lt;br /&gt;
&lt;br /&gt;
===Colofon===&lt;br /&gt;
Who we are, who wrote it, where an online version can be found, how people can contribute.&lt;br /&gt;
&lt;br /&gt;
===Architecture and design principles===&lt;br /&gt;
Starting from a risk-based approach; Starting from ENISA/OWASP/Veracode top ten risks (extended, modified) (for example see&lt;br /&gt;
the Veracode top ten risks and eventual OWASP top 10 risks), we state architecture and design&lt;br /&gt;
principles, that address these risks.&lt;br /&gt;
&lt;br /&gt;
* Architecture and design principles and examples of what they mean for secure&lt;br /&gt;
mobile/smartphone applications,- e.g. minimal disclosure, minimal on-device storage,&lt;br /&gt;
don’t allow untrusted update of add-ons, do not allow access to sensor data from other&lt;br /&gt;
applications, authenticate backend.&lt;br /&gt;
&lt;br /&gt;
===Coding techniques===&lt;br /&gt;
* Code level controls (based on the principles) - What to look for in the code. E.g. checklist&lt;br /&gt;
for persistent storage code, identifier schemes, authentication mechanisms, etc...&lt;br /&gt;
* Platform-specific how-to’s and how not to’s, common errors and vulnerabilities, sample&lt;br /&gt;
code (on how to implement common control), how not-to app (mobile version of&lt;br /&gt;
WebGoat).&lt;br /&gt;
* Optionally (stage 2) - open source libraries - mobile version of ESAPI&lt;/div&gt;</summary>
		<author><name>Giles Hogben</name></author>	</entry>

	</feed>