Basic Knowledge of Secure Design and Secure Coding ================================================== Although the Guidebook is a collection of security advice concerning Android application development, this chapter will deal with the basic knowledge on general secure design and secure coding of Android smartphones and tablets. Since we will be referring to secure design and coding concepts in the later chapters we recommend that you familiarize yourself with the content contained in this chapter first. Android Application Security ---------------------------- There is a commonly accepted way of thinking when examining security issues concerning systems or applications. First, we need to have a grasp over the objects we want to protect. We will call these assets. Next, we want to gain an understanding over the possible attacks that can take place on an asset. We will call these threats. Finally, we will examine and implement measures to protect assets from the various threats. We will call these countermeasures. What we mean by countermeasures here is secure design and secure coding, and will deal with these subjects after Chapter 4. In this section, we will focus on explaining assets and threats. ### Asset: Object of Protection There are two types of objects of protection within a system or an application: information and functions. We will call these information assets and function assets. An information asset refers to the type of information that can be referred to or changed only by people who have permission. It is a type of information that cannot be referred to or changed by anyone who does not have the permission. A function asset refers to a function that can be used only by people who have permission and no one else. Below, we will introduce types of information assets and functional assets that exist in Android smartphones and tablets. We would like you to use the following as a point of reference to deliberate on matters with regard to assets when developing a system that utilizes Android applications or Android smartphones/tablets. For the sake of simplicity, we will collectively call Android smartphones/tablets as Android smartphones. #### Information Asset of an Android Smartphone Table 3.1‑1 and Table 3.1‑2 represent examples of information contained on an Android smartphone. Appropriate protection is necessary since this information is equivalent to personal information, confidential information or information that belongs to both. Table 3.1‑1 Examples of Information Managed by an Android Smartphone ```eval_rst =========================== ===================================================================== Information Remarks =========================== ===================================================================== Phone number Telephone number of the smartphone itself Call history Time and date of incoming and outgoing calls as well as phone numbers IMEI Device ID of the smartphone IMSI Subscriber ID Sensor information GPS, geomagnetic, rate of acceleration, etc. Various setup information Wi-Fi setting value, etc\... Account information Various account information, authentication information, etc. Media data Pictures, videos, music, recording, etc... ... =========================== ===================================================================== ``` Table 3.1‑2 Examples of Information Managed by an Application ```eval_rst ====================== ========================================================== Information Remarks ====================== ========================================================== Contacts Contacts of acquaintances E-mail address User\'s e-mail address E-mail mail box Content of incoming and outgoing e-mail, attachments, etc. Web bookmarks Bookmarks Web browsing history Browsing history Calendar Plans, to-do list, events, etc. Facebook SNS content, etc. Twitter SNS content, etc. ... ====================== ========================================================== ``` The type of information seen in Table 3.1‑1 is mainly the type of information that is stored on the Android smartphone itself or on an SD card. Similarly, the type of information seen in Table 3.1‑2 is primarily managed by an application. In particular, the type of information seen in Table 3.1‑2 grows in proportion to the number of applications installed on the device. > Table 3.1‑3 is the amount of information contained in one entry case of contacts. The information here is not of the smartphone user\'s, but of the smartphone user\'s friends. In other words, we must be aware that a smartphone not only contains information on the user, but of other people too. Table 3.1‑3 Examples of Information Contained in One Contact Entry ```eval_rst ================== ======================================================================================== Information Content ================== ======================================================================================== Phone number Home phone number, mobile phone number, FAX, MMS, etc. E-mail address Home e-mail, work e-mail, mobile phone e-mail, etc. Photo Thumbnail image, large image, etc. IM address AIM, MSN, Yahoo, Skype, QQ, Google Talk, ICQ, Jabber, Net meeting, etc. Nicknames Acronyms, initials, maiden names, nicknames, etc. Address Country, postal code, region, area, town, street name, etc. Group membership Favorites, family, friends, coworkers, etc. Website Blogs, profile site, homepage, FTP server, home, office, etc. Events Birthdays, anniversaries, others, etc. Relation Spouse, children, father, mother, manager, assistants, domestic partner, partners, etc. SIP address Home, work, other, etc. ... ... ================== ======================================================================================== ``` Until now, we have primarily focused on information about smartphone users, however, application possesses other important information as well. Figure 3.1‑1 displays a typical view of the information inside an application divided into the program portion and data portion. The program portion mainly consists of information about the application developer, and the data portion mostly pertains to user information. Since there could be information that an application developer may not want a user to have access to, it is important to provide protective countermeasures to prohibit a user from referring to or making changes to such information. ![](media/image25.png) ```eval_rst .. {width="7.26875in" height="3.3047561242344705in"} ``` Figure 3.1‑1 Information Contained in an Application When creating an Android application, it is important to employ appropriate protective countermeasures for information that an application manages itself, such as shown in Figure 3.1‑1. However, it is equally important to have robust security measure in place for information contained in the Android smartphone itself as well as for information that has been gained from other applications such as shown in Table 3.1‑1, Table 3.1‑2, and Table 3.1‑3. #### Function Assets of an Android Smartphone Table 3.1‑4 shows examples of features that an Android OS provides to an application. When these features are exploited by a malware, etc., damages in the form of unexpected charges or loss of privacy may be incurred by a user. Therefore, appropriate protective counter-measures that are equal the one extended to information asset should be set in place. Table 3.1‑4 Examples of Features an Android OS Provides to an Application ```eval_rst ======================================= ========================================================= Function Function ======================================= ========================================================= Sending and receiving SMS messages Camera Calling Volume Network communication Reading the Contract List and Status of the Mobile Phone GPS SD card Bluetooth communication Change system setup NFC communication Reading Log Data Internet communication (SIP) Obtaining Information of a Running Application ... ... ======================================= ========================================================= ``` In addition to the functions that the Android OS provides to an application, the inter-application communication components of Android applications are included as part of the function assets as well. Android applications can allow other applications to utilize features by accessing their internal components. We call this inter-application communication. This is a convenient feature, however, there have been instances where access to functions that should only be used inside a particular application are mistakenly given to other applications due the lack of knowledge regarding secure coding on the part of the developer. There are functions provided by the application that could be exploited by malware that resides locally on the device. Therefore, it is necessary to have appropriate protective countermeasures to only allow legitimate applications to access these functions. ### Threats: Attacks that Threaten Assets In the previous section, we talked about the assets of an Android smartphone. In this section, we will explain about attacks that can threaten an asset. Put simply, a threat to an asset is when a third party who should not have permission, accesses, changes, deletes or creates an information asset or illicitly uses a function asset. The act of directly or indirectly attacking such assets is called a \"threat.\" Furthermore, the malicious person or applications that commit these acts are referred to as the source of the threats. Malicious attackers and malware are the sources of threats but are not the threats themselves. The relationship between our definitions of assets, threats, threat sources, vulnerabilities, and damage are shown below in Figure 3.1‑2. ![](media/image26.png) ```eval_rst .. {width="5.854166666666667in" .. height="3.1041666666666665in"} ``` Figure 3.1‑2 Relation between Asset, Threat, Threat Source, Vulnerability, and Damage Figure 3.1‑3 shows a typical environment that an Android application behaves in. From now on, in order to expand on the explanation concerning the type of threats an Android application faces by using this figure as a base, we will first learn how to view this figure. ![](media/image27.png) ```eval_rst .. {width="7.020833333333333in" height="3.46875in"} ``` Figure 3.1‑3 Typical Environment an Android Application Behaves in The figure above depicts the smartphone on the left and server on the right. The smartphone and server communicate through the Internet over 3G/4G/Wi-Fi. Although multiple applications exist within a smartphone, we are only showing a single application in the figure in order to explain the threats clearly. Smartphone-based applications mainly handle user information, but the server-based web services collectively manage information of all of its users. Consequently, there is no change the importance of server security as usual. We will not touch upon issues relating to server security as it falls outside of the scope of the Guidebook. We will use the following figure to describe the type of threats that exist towards Android applications. #### Network-based Third-Party ![](media/image28.png) ```eval_rst .. {width="7.020833333333333in" height="3.46875in"} ``` Figure 3.1‑4 Network-Based Malicious Third Party Attacking an Application Generally, a smartphone application manages user information on a server so the information assets will move between the networks connecting them. As indicated in Figure 3.1‑4, a network-based malicious third party may access (sniff) any information during this communication or try to change information (data manipulation). The malicious attacker in the middle (also referred to as \"Man in The Middle\") can also pretend to be the real server tricking the application. Without saying, network-based malicious third parties will usually try to attack the server as well. #### Threat Due to User-Installed Malware ![](media/image29.png) ```eval_rst .. {width="7.020833333333333in" height="3.46875in"} ``` Figure 3.1‑5 Malware Installed by a User Attacks an Application The biggest selling point of a smartphone is in its ability to acquire numerous applications from the market in order to expand on its features. The downside to users being able to freely install many applications is that they will sometimes mistakenly install malware. As shown in Figure 3.1‑5, malware may exploit the inter-application communication functions or a vulnerability in the application in order to gain access to information or function assets. #### Threat of an Malicious File that Exploits a Vulnerability in an Application ![](media/image30.png) ```eval_rst .. {width="7.020833333333333in" height="3.46875in"} ``` Figure 3.1‑6 Attack from Malicious Files that Exploit a Vulnerability in an Application Various types of files such as music, images, videos and documents are widely available on the Internet and typically users will download many files to their SD card in order to use them on their smartphone. Furthermore, it is also common to download attached files sent in an e-mail. These files are later opened by a viewing or editing application. If there is any vulnerability in the function of an application that processes these files, an attacker can use a malicious file to exploit it and gain access to information or function assets of the application. In particular, vulnerabilities are often present in processing a file format with a complex data structure. The attacker can fulfill many different goals when exploiting an application in this way. As shown in Figure 3.1‑6, an attack file stays dormant until it is opened by a vulnerable application. Once it is opened, it will start causing havoc by taking advantage of an application\'s vulnerability. In comparison to an active attack, we call this attack method a \"Passive Attack.\" #### Threats from a Malicious Smartphone User ![](media/image31.png) ```eval_rst .. {width="7.020833333333333in" height="3.46875in"} ``` Figure 3.1‑7 Attacks from a Malicious Smartphone User With regard to application development for an Android smartphone, the environment as well as features that help to develop and analyze an application are openly provided to the general user. Among the features that are provided, the useful ADB debugging feature can be accessed by anyone without registration or screening. This feature allows an Android smartphone user to easily perform OS or application analysis. As it is shown in Figure 3.1‑7, a smartphone user with malicious intent can analyze an application by taking advantage of the debugging feature of ADB and try to gain access to information or function assets of an application. If the actual asset contained in the application belongs to the user, it poses no problem, but if the asset belongs to someone other than the user, such as the application developer, then it will become a concern. Accordingly, we need to be aware that the legitimate smartphone user can maliciously target the assets within an application. #### Threats from Third Party in the Proximity of a Smartphone ![](media/image32.png) ```eval_rst .. {width="7.020833333333333in" height="3.46875in"} ``` Figure 3.1‑8 Attacks from a Malicious Third Party in the Proximity of a Smartphone Due to face that most smartphones possess a variety of near-field communication mechanisms, such as NFC, Bluetooth and Wi-Fi, we must not forget that attacks can occur from a malicious attacker who is in physical proximity of a smartphone. An attacker can shoulder surf a password while peeping over a user who is inputting it in. Or, as indicated in Figure 3.1‑8, an attacker can be more sophisticated and attack the Bluetooth functionality of an application from a remote distance. There is also the threat that a malicious person could steal the smartphone creating a risk of data leakage or even destroy the smartphone causing a loss of critical information. Developers need to take these risks into consideration as well as early as the design stage. #### Summary of Threats ![](media/image33.png) ```eval_rst .. {width="7.020833333333333in" height="3.46875in"} ``` Figure 3.1‑9 Summary of the Various Attacks on Smartphone Applications Figure 3.1‑9 summarizes the main types of threats explained in the previous sections. Smartphones are surrounded by a wide variety of threats and the figure above does not include all of them. Through our daily information gathering, we need to spread the awareness concerning the various threats that surround an Android application and be aware of them during the application\'s secure design and coding. The following literature that was created by Japan\'s Smartphone Security Association (JSSEC) contains other valuable information on the threats to smartphone security. - Security Guidebook for Using Smartphones and Tablets
[http://www.jssec.org/dl/guidelines_v2.pdf [Version 2]](http://www.jssec.org/dl/guidelines_v2.pdf) (Japanese)
[http://www.jssec.org/dl/guidelines2012Enew_v1.0.pdf [Version 1]](http://www.jssec.org/dl/guidelines2012Enew_v1.0.pdf) (English) - Implementation Guidebook for Smartphone Network Security [Version 1]
[http://www.jssec.org/dl/NetworkSecurityGuide1.pdf](http://www.jssec.org/dl/NetworkSecurityGuide1.pdf) (Japanese) - Cloud Usage Guidebook for Business Purposes of Smartphones [Beta Version]
[http://www.jssec.org/dl/cloudguide2012_beta.pdf](http://www.jssec.org/dl/cloudguide2012_beta.pdf) (Japanese) - Guidebook for Reviewing the Implementation/Operation of MDM [Version 1]
[http://www.jssec.org/dl/MDMGuideV1.pdf](http://www.jssec.org/dl/MDMGuideV1.pdf) (Japanese) ### Asset Classification and Protective Countermeasures As was discussed in the previous sections, Android smartphones are surrounded by a variety of threats. Protecting every asset in an application from such threats could prove to be very difficult given the time it takes for development and due to technical limitations. Consequently, Android application developers should examine feasible countermeasures for their assets. This should be done according to priority level based on the developer\'s judgement criteria. This is a subjective matter that is based on how the importance of an asset is viewed and what the accepted level of damage is. In order to help decide on the protective countermeasures for each asset, we will classify them and stipulate the level of protective countermeasures for each group. This will be achieved by examining the legal basis, pertaining to the level of importance regarding the impact of any damages that can occur and the social responsibility of the developer (or organization). These will prove to be the judgement criteria when deciding on how to handle each asset and the implementation of the type of countermeasures. Since this will become a standard for application developers and organizations on determining how to handle an asset and provide protective countermeasures, it is necessary to specify the classification methods and pertaining countermeasures in accordance the application developer\'s (or organization\'s) circumstances. Asset classification and protective countermeasure levels that are adopted in the Guidebook are shown below for reference: Table ‑5 Asset Classification and Protective Countermeasure Levels ```eval_rst ===================== ======================= ========================= Asset Classification | Asset Level | Level of Protective | | Counter-Measures ===================== ======================= ========================= High | The amount of damage | Provide protection | the asset causes is | against sophisticated | fatal and | attacks that break | catastrophic to the | through the Android OS | organization or an | security model and | individual\'s | prevent root privilege | activity. | compromises and attacks | | that alter the dex | i.e.) When an asset | portion of an APK. | at this level is | | damaged, the | Ensure security takes | organization will not | priority over other | be able to continue | elements such as user | its business. | experience, etc. Medium | The amount of damage | Utilize the Android OS | the asset causes has | security model. It will | a substantial impact | provide protection | the organization or | covered under its scope. | an individual\'s | | activity. | Ensure security takes | | priority over other | i.e.) When an asset | elements such as user | at this level is | experience, etc. | damaged, the | | organization\'s | | profit level | | deteriorates, | | adversely affecting | | its business. | Low | The amount of damage | Utilize the Android OS | the asset causes has | security model. It will | a limited impact on | provide protection | the organization or | covered under its scope. | an individual\'s | | activity. | Compare security | | countermeasures with | I.e.) When an asset | other elements such as | at this level is | user experience, etc. | damaged, the | At this level, it is | organization\'s | possible for | profit level will be | non-security issues | affected but is able | to take precedence | to compensate its | over security issues. | losses from other | | resources. | ===================== ======================= ========================= Asset classification and protective countermeasures described in the Guidebook are proposed under the premise of a secure Android device where root privilege has not been compromised. Furthermore, it is based on the security measures that utilize the security model of Android OS. Specifically, we are hypothetically devising protective countermeasures by utilizing the Android OS security model on the premise of a functioning Android OS security model against assets that are classified lower than or equal to the medium level asset. On the other hand, we also believe in the necessity of protecting high level assets from attacks that are caused due the breaching of the Android OS security model. Such attacks include the compromise of root privileges and attacks that analyze or alter the APK binary. To protect these types of assets, we need to design sophisticated defensive countermeasures against such threats through the combination of multiple methods such as encryption, obfuscation, hardware support and server support. As the collection of know-how regarding these defenses cannot be easily written in this guidebook, and since appropriate defensive design differ in accordance to individual circumstances, we have deemed them to be outside of the Guidebook\'s scope. We recommend that you consult with a security specialist who is well versed in tamper resistant designs of Android if your device requires protection from sophisticated attacks that include attacks resulting from the compromise of root privileges or attacks caused by the analysis or alteration of an APK file. ``` ### Sensitive Information The term \"sensitive information\", instead of information asset, will be used from now on in the Guidebook. As it has been aforementioned in the previous section, we have to determine the asset level and the level of protective countermeasures for each information asset that an application handles. Handling Input Data Carefully and Securely ------------------------------------------ Validating input data is the easiest and yet most effective secure coding method. All data that is inputted into the application either directly or indirectly by an outside source needs to be properly validated. To illustrate best practices of input data validation, the following is an example of an Activity as used in a program that receives data from Intent. It is possible that an Activity can receive data from an Intent that was tampered by an attacker. By sending data with a format or a value that a programmer is not expecting, the attacker can induce a malfunction in the application that leads to some sort of security incident. We must not forget that a user can become an attacker as well. Intents are configured by action, data and extras, and we must be careful when accepting all forms of data that can be controlled by an attacker. We always need to validate the following items in any code that handles data from an untrusted source. (a) Does the received data match the format that was expected by the programmer and does the value fall in the expected scope? (b) Even if you have received the expected format and value, can you guarantee that the code which handles that data will not behave unexpectedly? The next example is a simple sample where HTML is acquired from a remote web page in a designated URL and the code is displayed in TextView. However, there is a bug. Sample Code that Displays HTML of a Remote Web page in TextView ```java TextView tv = (TextView) findViewById(R.id.textview); InputStreamReader isr = null; char[] text = new char[1024]; int read; try { String urlstr = getIntent().getStringExtra("WEBPAGE_URL"); URL url = new URL(urlstr); isr = new InputStreamReader(url.openConnection().getInputStream()); while ((read=isr.read(text)) != -1) { tv.append(new String(text, 0, read)); } } catch (MalformedURLException e) { //... ``` From the viewpoint of (a), \"urlstr is the correct URL\", verified through the non-occurrence of a MalformedURLException by a new URL(). However, this is not sufficient. Furthermore, when a \"file://\...\" formatted URL is designated by urlstr, the file of the internal file system is opened and is displayed in TextView rather than the remote web page. This does not fulfill the viewpoint of (b), since it does not guarantee the behavior which was expected by the programmer. The next example shows a revision to fix the security bugs. Through the viewpoint of (a), the input data is validated by checking that \"urlstr is a legitimate URL and the protocol is limited to http or https.\" As a result, even by the viewpoint of (b), the acquisition of an Internet-routed InputStream is guaranteed through url.openConnection().getInputStream(). Revised sample code that displays HTML of Internet-based Web page in TextView ```java TextView tv = (TextView) findViewById(R.id.textview); InputStreamReader isr = null; char[] text = new char[1024]; int read; try { String urlstr = getIntent().getStringExtra("WEBPAGE_URL"); URL url = new URL(urlstr); String prot = url.getProtocol(); if (!"http".equals(prot) && !"https".equals(prot)) { throw new MalformedURLException("invalid protocol"); } isr = new InputStreamReader(url.openConnection().getInputStream()); while ((read=isr.read(text)) != -1) { tv.append(new String(text, 0, read)); } } catch (MalformedURLException e) { //... ``` Validating the safety of input data is called \"Input Validation\" and it is a fundamental secure coding method. Surmising from the sense of the word of Input Validation, it is quite often the case where the viewpoint of (a) is heeded but the viewpoint of (b) is forgotten. It is important to remember that damage does not take place when data enters the program but when the program uses that data in an incorrect way. We hope that you will refer the URLs listed below. - The CERT Oracle Secure Coding Standard for Java [https://www.securecoding.cert.org/confluence/x/Ux](https://www.securecoding.cert.org/confluence/x/Ux) (English) - Application of CERT Oracle Secure Coding Standard for Android Application Development [https://www.securecoding.cert.org/confluence/x/C4AiBw](https://www.securecoding.cert.org/confluence/x/C4AiBw) (English) - Rules Applicable Only to the Android Platform (DRD) [https://www.securecoding.cert.org/confluence/x/H4ClBg](https://www.securecoding.cert.org/confluence/x/H4ClBg) (English) - IPA \"Secure Programming Course\" [http://www.ipa.go.jp/security/awareness/vendor/programmingv2/clanguage.html](http://www.ipa.go.jp/security/awareness/vendor/programmingv2/clanguage.html) (Japanese)