<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>BlackBerry Developer Blog &#187; Security</title>
	<atom:link href="http://devblog.blackberry.com/tag/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://devblog.blackberry.com</link>
	<description></description>
	<lastBuildDate>Tue, 21 May 2013 15:28:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='devblog.blackberry.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/9ef0a66c09615fa946c4179662398878?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>BlackBerry Developer Blog &#187; Security</title>
		<link>http://devblog.blackberry.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://devblog.blackberry.com/osd.xml" title="BlackBerry Developer Blog" />
	<atom:link rel='hub' href='http://devblog.blackberry.com/?pushpress=hub'/>
		<item>
		<title>Application Security Part II: What Should App Developers Do?</title>
		<link>http://devblog.blackberry.com/2013/02/application-security-part-2/</link>
		<comments>http://devblog.blackberry.com/2013/02/application-security-part-2/#comments</comments>
		<pubDate>Wed, 06 Feb 2013 12:27:44 +0000</pubDate>
		<dc:creator>lmcdunna</dc:creator>
				<category><![CDATA[Adobe AIR Development]]></category>
		<category><![CDATA[Android Development]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[app development]]></category>
		<category><![CDATA[Code Safety]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=13491</guid>
		<description><![CDATA[In my previous blog post on this topic, “Application Security Part I: Whose Responsibility is it?”, I explored the responsibility of security in the mobile app ecosystem. In this post, let’s take a little deeper look at the problem of security and code safety from a mobile app developer’s point of view and explore what [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=13491&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In my previous blog post on this topic, <a href="http://devblog.blackberry.com/2012/12/application-security-part-1/" target="_new">“Application Security Part I: Whose Responsibility is it?”</a>, I explored the responsibility of security in the mobile app ecosystem. In this post, let’s take a little deeper look at the problem of security and code safety from a mobile app developer’s point of view and explore what developers need to think about and how they can avoid potential security problems in their applications.</p>
<p>The majority of security problems in app development are really software quality problems. There’s something wrong with the way the code was written that leaves a door open for someone to exploit. Fortunately, many of these problems can be easily fixed. Some of these can be fixed in the design phase of product development and others in the code phase. We’ll explore a few examples of each type in this post.</p>
<p><span id="more-13491"></span></p>
<h3><strong>The Objective of this Post</strong></h3>
<p>Now, before we jump in, I need to confess that this is a broad and deep subject. My goal here is to present a high-level understanding of code security through discussion and a few examples that will help you understand the kinds of vulnerabilities that can lead to problems. I will also provide references to further reading for those that really want the “Full Monty” on developing secure apps.</p>
<h3><strong>Code Security at Design Time</strong></h3>
<ol>
<li><span style="text-decoration:underline;">Design with security in mind</span>. This is perhaps the most important thing you can do. Think about the following questions before you design your code and have answers for all of them:
<ul>
<li>What Assets does this software need to protect? Credit Card numbers, user data, contact lists, account info, access to paid services, and privileged access to device. To protect sensitive assets, you need to plan how you’re going to deal with the data at design time. If you’re sending sensitive data over a computer network, you should use SSL/TLS protocol to prevent attackers from eavesdropping. Look into OpenSSL for open source libraries and code examples on how to use this protocol. Also, for server-side storage, consider using a 3rd party database such as MySQL. These systems have their own built-in security policies that you can leverage. Also, for secure authentication, leverage trusted services like OAuth and OpenID (See Additional Resources for more info below)</li>
<li>How might an attacker exploit my code? This is often called “Thread Modeling”. Attackers might be eavesdropping on the network ports you use, or providing unexpected inputs that overflow memory buffers and inject attacker-supplied code to be executed. You have to ensure, for example, that you never execute code on behalf of an untrusted user</li>
</ul>
</li>
<li>Follow a Secure Coding Standard &#8211; Select a secure coding standard and make sure your code conforms. A secure coding standard will identify specific issues with a particular programming language that a compiler or analysis tool might fail to diagnose. Secure coding standards also define requirements for producing code level security in your system. Several popular secure coding standards are available from CERT® on their website at <a href="http://www.securecoding.cert.org/" target="_new">www.securecoding.cert.org</a>.</li>
<li>Perform Design Reviews. This is a simple thing teams can do, and it can really pay off in the long run. A few years ago, I managed a couple of engineering teams at Sun and when a new code module was planned. The engineering lead would present the design to a team of Senior Architects with different backgrounds (JVM, networking, platform architecture, etc.). This always uncovered potential problems –and did so early on before they became big problems that were expensive to fix.</li>
<li>Understand Emerging Threats. Pay attention to the type of exploits that are popular, and make sure you’re not helping the bad guys. Designate one person on your team to stay up to date on the current security trends and put her/him in the code review. A great place to start is by visiting the <a href="https://www.cert.org/" target="_new">CERT website</a> frequently and becoming familiar with all the resources they offer. In addition, all major platform and OS providers publish security updates from time to time as issues are uncovered.</li>
<li>Use Static Analysis Tools. Static code analysis can really help locate many kinds of software validation and reliability problems, including many memory problems. Some examples of companies that provide these products include: <a href="http://www.klocwork.com/landing/static-analysis/index-v1.php?gclid=CJjgweHW0LMCFelFMgodXDUA6g" target="_new">Klocwork</a> and <a href="http://www.coverity.com/" target="_new">Coverity</a>, <a href="http://www.parasoft.com/jsp/home.jsp">Parasoft</a>, and <a href="http://vericode.com/" target="_new">Vericode</a>. A more complete list can be found here: <a href="http://www.cert.org/secure-coding/tools.html" target="_new">http://www.cert.org/secure-coding/tools.html</a></li>
</ol>
<p>If you’re doing all these things, you’re actually doing pretty well. You’ve got a solid design, you’re following a secure coding standard, you’ve got someone keeping an eye out for potential security exploits, and you’re conducting design reviews and running static analysis tools on a regular basis. You’ve got the design side covered pretty well. Now let’s look at some specific code issues that can cause problems.</p>
<h3><strong>Code Security at Development Time</strong></h3>
<p>Most of the following examples demonstrate some of common problems found in native C and C++ development. Web developers and Java developers can still benefit as the concepts behind the problems are valid in many languages. In the Additional Resources section below, I provide links to specific Web and Java resources for code security.</p>
<ol>
<li>
<h3><strong>Application Frameworks</strong></h3>
<p>Use application frameworks whenever possible. Frameworks hide a lot of the nasty memory management and secure network connection issues from the developer and reduce the possibility of making simple, but costly, mistakes. Fortunately, the BlackBerry platform supports a lot of great developer frameworks, both from BlackBerry (such as the <a href="https://developer.blackberry.com/devzone/design/bb10/sharing_and_the_invocation_framework.html" target="_new">Invocation and Share Framework</a>, and the <a href="https://developer.blackberry.com/cascades/" target="_new">UI Framework Cascades</a>) and through <a href="https://developer.blackberry.com/devzone/develop/platform_partners/" target="_new">BlackBerry’s Platform Partners</a>.</li>
<li>
<h3><strong>Memory Management</strong></h3>
<p>Aside from the obvious allocation of memory insufficient for the data you’re writing into it, there’s a common issue people new to C and C++ sometimes experience regarding memory management. The problem occurs when you confuse which action you use to release the memory you’ve allocated.</p>
<p>Using Cascades will reduce the likelihood of memory management problems because it hides all the messy details for you within the framework. However, if you must allocate memory yourself for your app, keep the following tip in mind.</p>
<p>There are two main C functions for allocating memory: malloc() and calloc(). Use malloc() when you don’t care about initializing the data in memory. Use calloc() if you want to initialize the memory to 0. The important thing to remember is when using either malloc() or calloc(), you must use the function free() to release the memory and give it back to the system.</p>
<p>In contrast, when using the C++ method new() to create a new object, you must use the corresponding delete() method. Nothing good can happen when you call free() on memory you’ve created using new().</li>
<li>
<h3><strong>Function Safety</strong></h3>
<p>The QNX platform provides a number of preferred C functions that are safer to use than the more commonly known standard functions. A subset of these is shown in the table below. You can find the complete list in the BlackBerry Native SDK online docs (referenced in Additional Resources section below).</p>
<p>As with memory management, using an application framework helps with function safety as well. For instance, the Cascades classes such as QString and QByteArray protect you from many of these problems as well.</p>
<p>As you’ll see in these examples, most of the serious problems occur when buffers you’re reading into or writing out to are not large enough to take the data. These functions below help you from over-writing some of the time. You should always perform bounds checking if you want to be on the safe side.</p>
<table border="2" cellpadding="10">
<tbody>
<tr>
<th>Unsafe Function(s)</th>
<th>Preferred Function(s)</th>
<th>Comments</th>
</tr>
<tr>
<td>
<pre>strcpy() and strncpy()

strcat() and strncat()</pre>
</td>
<td>
<pre>strlcpy() and strlcat()</pre>
</td>
<td>The function strlcpy() copies strings and the function strlcat() concatenates strings. They&#8217;re designed to be safer, more consistent, and less error-prone replacements for strncpy() and strncat().<br />
Unlike those functions, strlcpy() and strlcat() take the full size of the buffer (not just the length) and guarantee to NUL-terminate the result (as long as the size is larger than 0 or, in the case of strlcat(), as long as there&#8217;s at least one byte free in the destination string).<br />
There also exist &#8220;wide&#8221; versions of these functions that are equally dangerous: wcscpy(), but there is no &#8220;l&#8221; safe version to use, only wcsncpy() which does not necessarily NUL-terminate the output. Care must be taken to ensure the output buffer is NUL-terminated.</td>
</tr>
<tr>
<td>
<pre>sprintf() and vsprintf()</pre>
</td>
<td>
<pre>snprintf() and vsnprintf()</pre>
</td>
<td>The snprintf() function is similar to fprintf(), except that snprintf() places the generated output (up to the specified maximum number of characters) into the character array pointed to by buf, instead of writing it to a file. The snprintf() function is similar to sprintf(), but with boundary checking. A null character is placed at the end of the generated character string.</td>
</tr>
<tr>
<td>
<pre>gets()</pre>
</td>
<td>
<pre>fgets(buf, n, fp)</pre>
</td>
<td>The fgets() function reads a string of characters from the stream specified by <i>fp</i>, and stores them in the array specified by <i>buf</i>, limited to size <i>n</i>.</td>
</tr>
<tr>
<td>
<pre>getwd()</pre>
</td>
<td>
<pre>getcwd(buffer, size)</pre>
</td>
<td>The getcwd() function returns the name of the current working directory. buffer is a pointer to a buffer of at least size bytes where the NUL-terminated name of the current working directory will be placed. The maximum size that might be required for buffer is PATH_MAX + 1 bytes</td>
</tr>
</tbody>
</table>
</li>
<li>
<h3><strong>Structures</strong></h3>
<p>Structures in C and C++ are aggregated types that define and contain other data elements within them. The elements of a structure cannot be re-ordered by the compiler. Modern compilers do use a variety of methods to minimize the security risk of stack-buffer overflows such as stack canaries, address-space layout randomization, re-ordering the local variables within a function, among other things. However, since the compiler can’t re-order the elements within your structures, the possibility of a buffer overflow on one of your elements affecting function parameters or local variables remains. Consider the following example:</p>
<pre>struct _JOB {
            char name[64];
                        char title[64];
            DATE startdate;
            DATE enddate;
            WAGE salary;      
        } JOB, *PJOB;</pre>
<p>The buffers name and title can both overrun. Since they’re placed on the stack first, the elements defined after them in the structure and on the stack itself can be affected. For this reason, care should be given when defining the elements in a structure. The next example shows a structure that&#8217;s defensively designed:</p>
<pre>struct _JOB {
            DATE startdate;
            DATE enddate;
            WAGE salary;  
            char name[64];    // Buffers placed at end 
                        char title[64];   // of struct definition

        } JOB, *PJOB;</pre>
<h3><strong>Recommendations for using structures</strong></h3>
<p>When dealing with structures that contain fixed-width buffers or arrays designed to receive data that&#8217;s controlled or influenced by a user:</p>
<ul>
<li>Buffers and arrays in structures should be grouped at the end of the structure</li>
<li>Local variables declared as structures should be declared after local buffers but before any other local variables</li>
<li>Global variables declared as structures should be declared before any global buffers and arrays and after any other global variables</li>
<li>Pointers to structures do not need any special consideration</li>
<li>Where practical, try to minimize the number of local variables cast as structures with buffers and arrays as elements</li>
</ul>
</li>
<li>
<h3><strong>Macros</strong></h3>
<p>Macros are one of my favorite mechanisms in C and C++. I love using them; however, you have to be very careful as they can get you into trouble. Macros are defined through the use of the #define preprocessor directive and when processed, literally expand in your source code prior to compilation. If IDE’s could show you what the processed source code looked like (maybe some do?), then I suspect we’d see fewer problems. Consider the following example that demonstrates the issue:</p>
<pre>#define CUBE (x*x*x)
…
int x = CUBE (5-2)</pre>
<p>In this example, you might expect that you’re going to get the cube of 3 which is 27. However, when the preprocessor expands the macro, normal operator precedence rules apply. So, here’s how that the value of x will be calculated:</p>
<pre>CUBE(5-2) = (5 – 2*5 – 2*5 – 2)
CUBE(5-2) = (5 – 10 -10 -2)
CUBE(5-2) = -17</pre>
<p>Therefore, to protect against this problem, the macro can easily be defined using parentheses as in:</p>
<pre>#define CUBE(x)   (x)*(x)*(x)</pre>
<p>In this example, we’ve seen how operator precedence rules can get you into trouble with macros. There are other problems such as the importance of white space when defining macros, using macros in if statements, and self-referencing macros to name a few. Provided you think about how the macro will expand in your source and you consider how the arguments you pass to macros will be interpreted in that expansion, you should be fine.</li>
<li>
<h3><strong>Integers (signed, unsigned) and Enumerations</strong></h3>
<p>Another common problem that can expose serious threats to your code involves integer overflow or underflow. This can happen when care is not taken with integers. The following code fragment demonstrates how serious this problem can be (recall our discussion about buffer sizes above):</p>
<pre>int buffLen = 0;
printf(“[buf] %d %u\n”, buffLen, buffLen);
buffLen = -1;
printf(“[buf] %d %u\n”, bufflen, bufflen);</pre>
<p>Executing this code gives:</p>
<pre>[buf] 0 0
[buf] -1 4294967295</pre>
<p>In this example, I forced the value of bufLen to be -1 for demonstration purposes. But, it’s easy to imagine a simple arithmetic error in a length calculation to be off by one.</p>
<p>Similar problems arise with the use of Enumerations. Not all compilers use the same kind of “int” for Enumerated types. So, you need to be careful when using Enumerations. Make sure you know how your compiler treats them. If your compiler uses signed integers by default (such as Microsoft Visual C++ and ARMCC), it’s not possible to create an unsigned enumeration as the value will be overflow the signed int (for example, you can’t set the enumerated value to be 0xffffffff).</li>
</ol>
<h3><strong>Summary</strong></h3>
<p>Though we’ve just scratched the surface of this topic, we’ve discussed a number of things developers can do to protect their code from security problems.</p>
<p>We’ve explored good practices developers can adopt at design time, such as:</p>
<ul>
<li>Design with security in mind</li>
<li>Follow a Secure Coding Standard</li>
<li>Perform Design Reviews</li>
<li>Understand Emerging Threats</li>
<li>Use Static Analysis Tools</li>
</ul>
<p>We’ve also looked at some common coding mistakes that can lead to security problems and discussed how the code can be fixed to avoid these problems. We’ve seen how leveraging Application Frameworks (like Cascades) can greatly reduce security problems. As an app developer, you have a responsibility to protect your user’s identity and sensitive data as best you can from attackers seeking to exploit it. The content in this blog post should help you get started with some good practices and links to learn more.</p>
<p>For more information on application security, additional examples, and deeper analysis, please refer to the additional resources below.</p>
<h3><strong>Additional Resources</strong></h3>
<ul>
<li>BlackBerry Native SDK Online Docs. <a href="http://developer.blackberry.com/native/documentation/bb10/com.qnx.doc.native_sdk.security/topic/security_overview.html" target="_new">Security Considerations for Native Application Development</a></li>
<li>QNX Online Docs, <a href="http://www.qnx.com/download/feature.html?programid=20984" target="_new">Neutrino C Library Reference</a></li>
<li>Chad Tetreault, <a href="http://devblog.blackberry.com/2012/10/say-it-aint-soauth/" target="_new">Say It Aint S’OAuth</a>, in BlackBerry Dev</li>
</ul>
<p><strong>Blogs</strong></p>
<ul>
<li>Software Engineering Institute | Carnegie Mellon <a href="http://www.sei.cmu.edu/" target="_new">http://www.sei.cmu.edu/</a></li>
<li>Seacord, Robert. The CERT C Secure Coding Standard, Addison Wesley, 2008</li>
<li>Seacord, Robert. Secure Coding in C and C++, 2nd Edition, Addison Wesley, 2013.</li>
<li>Mark Dowd, John McDonald, Justin Schuh, The Art of Software Security Assessment</li>
</ul>
<h3><strong>Acknowledgements</strong></h3>
<p>I’d like to thank Robert Seacord for taking the time to read an early draft of my blog and provide helpful feedback. Robert is a senior analyst in the CERT Program at the Software Engineering Institute (SEI) in Pittsburgh, PA where he leads the Secure Coding Initiative and is author of a number of books on Secure Programming. I’d also like to thank the BlackBerry Security team for their insightful comments and suggestions.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/13491/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/13491/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=13491&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2013/02/application-security-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/649c096f0b8996184db6d0509771ecfb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lmcdunna</media:title>
		</media:content>
	</item>
		<item>
		<title>Application Security Part I: Whose Responsibility Is It?</title>
		<link>http://devblog.blackberry.com/2012/12/application-security-part-1/</link>
		<comments>http://devblog.blackberry.com/2012/12/application-security-part-1/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 19:05:24 +0000</pubDate>
		<dc:creator>lmcdunna</dc:creator>
				<category><![CDATA[Adobe AIR Development]]></category>
		<category><![CDATA[Android Development]]></category>
		<category><![CDATA[BlackBerry World]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Java Development]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Platform Services]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Assets]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Authorization]]></category>
		<category><![CDATA[MDM]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=12486</guid>
		<description><![CDATA[This is the first post in a two part series about security. In this post, I tackle the issue of responsibility. In Part II, we’ll explore some things that developers need to know to help them write secure apps. I sat on a panel recently at Sprint’s Open Solutions Conference in San Jose titled “Consumer [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12486&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-12575" alt="TITLE_IMAGE" src="http://rimdevblog.files.wordpress.com/2012/12/bbjamasia2012_hands-on_labs_img_2856-e1354820632548.jpg?w=600&#038;h=400" height="400" width="600" /></p>
<p>This is the first post in a two part series about security. In this post, I tackle the issue of responsibility. In Part II, we’ll explore some things that developers need to know to help them write secure apps.</p>
<p>I sat on a panel recently at Sprint’s Open Solutions Conference in San Jose titled “<a href="http://developer.sprint.com/dynamicContent/devcon2012/overview/6?sliderId=0&amp;sortOrderId=1" target="_new">Consumer Application Security for Developers</a>”. Sexy topics like application security rarely pack a session hall at any conference and this was no exception. However, the attendance was much higher than I expected (about 30 people) and the discussion was very lively and interactive. It was immediately clear to me that developers &#8211; perhaps as consumers themselves &#8211; are thinking more about security than they had in the past. This is a good thing.</p>
<h3><strong>Whose Problem is Security?</strong></h3>
<p>One of the first questions that came up in the panel was: “Whose problem is security?” Our moderator suggested a number of potential “owners” for this problem and posed the question to his panel. Is it the carrier’s problem? How about the Handset OEM? The OS? Your employer’s IT admin? The app developer? The consumer? As you can see, there are a lot of parties to point fingers at when something goes awry.</p>
<p>I couldn’t help but jump on this one first. The answer is obvious: Security is everyone’s responsibility. Each player in the mobile device value chain is responsible for providing a secure environment over the part they control. At its most fundamental level, security is about protecting valuable assets from those who seek to steal or exploit them. You wouldn’t leave your house in the morning without locking the door, right? Even greater diligence is required in the digital world because the value can be greater, and the thieves are invisible.</p>
<p><span id="more-12486"></span></p>
<h3><strong>Security is everyone’s responsibility</strong></h3>
<p><strong>The Carrier:</strong> The carrier is responsible for providing a network that is secure from being attacked, snooped, or otherwise compromised. As carriers reduce their investments in their own app catalogs, their responsibility with app security lessens but responsibility for cellular and data network integrity remains.</p>
<p><strong>The Device:</strong> The device’s operating system (OS) is at the center of security. The OS’s responsibility is to provide a secure environment for all applications, services, data storage, and network connectivity. The OS is responsible for handling permissions and defending against viruses and malware. Attackers primarily seek to exploit weaknesses in the OS or in its core applications such as web browsers. This is why it’s so important to design security into the OS when it’s being architected and built. Platform providers that offer App Stores have an additional responsibility to ensure that the apps it stocks in its store are safe from malware and abuse like piracy. It should be no surprise to anyone that RIM takes the issues of security very seriously.</p>
<p><strong>The IT Administrator:</strong> The number one responsibility of IT at any high-tech company is protecting the company’s Intellectual Property (IP) –it’s like the crown jewels of the company’s value. In a world where IT administrators directly managed the mobile devices that had access to the company’s jewels, their ability to protect them was pretty clear. However, with today’s BYOD trend, their ability to protect the company’s assets and IP has become less clear. Only RIM has addressed this uncertainty and given control back to IT administrators and CIOs with its <a href="http://us.blackberry.com/business/software/blackberry-mobile-fusion.html#tab-1" target="_new">BlackBerry Mobile Fusion</a> (IT’s MDM Portal) and <a href="http://us.blackberry.com/business/software/blackberry-balance.html#tab-1" target="_new">BlackBerry Balance</a> (the client side partitioning; controlled by a simple gesture). With these products and services, IT administrators can enforce corporate security policies and manage remote devices with confidence.</p>
<p><strong>The App Developer:</strong> App developers have a responsibility too. It’s their job to build an application that can’t be exploited by attackers and protects sensitive information that the user provides. Strong operating systems provide many mechanisms for app developers to ensure their app isn’t the “unlocked window” that gains access to someone’s identity or bank account. App developers need to think about security as an end-to-end problem. This includes making secure network connections, encrypting local data on the device, and ensuring servers with sensitive customer data are adequately protected from attack.</p>
<p><strong>The Consumer:</strong> Consumers need to be mindful as well. Use device passwords (and not “1234”) and, perhaps most important of all, be suspicious of applications asking for permissions to access files, social networks, and your contact list. RIM offers a great product for consumers called <a href="http://us.blackberry.com/apps/blackberry-apps/protect.html" target="_new">BlackBerry Protect</a> that helps keep the information on your device backed up and secure should your device get lost or stolen. BlackBerry Protect also allows you to wipe all the data off your device remotely as well as display an alert message on the home screen should you lose your BlackBerry device.</p>
<h3><strong>Why is BlackBerry 10 so secure?</strong></h3>
<p>BlackBerry 10, RIM’s upcoming mobile computing platform, is built on QNX’s Real-Time Operating System. Sebastien Marineau, VP of OS Platforms at RIM, wrote a great article recently titled “<a href="http://www.techradar.com/news/phone-and-communications/mobile-phones/how-blackberry-10-avoids-androids-security-issues-1103381" target="_new">How BlackBerry 10 avoids Android’s Security Issues</a>”. In the article, Sebastien notes that the QNX RTOS has approximately 100,000 lines of code whereas a standard Linux implementation is around 14 million lines of code. QNX is 1% the size of Linux. When it comes to security, the fewer places where bugs and security exploits can hide, the better! Because QNX is so tight, and because it’s been designed with security in mind from day 1, it’s extremely hard to break in.</p>
<p>In addition, BlackBerry 10 includes BlackBerry Balance: a new, unique, and innovative capability that allows consumers to enjoy the full range of both a personal mobile device and a secure, encrypted work device without compromising on either one. No other mobile device can do this. With one simple gesture, the user can switch the device from “Personal” mode (wide open with all their apps, music, media, etc.) to “Work” mode (fully secure as if on your work’s VPN). Using BlackBerry Mobile Fusion, IT administrators can manage their company’s devices remotely and securely (including Android and iOS devices!).</p>
<p>In this blog post, we explored the responsibility of security &#8212; who owns what piece and why it’s so important. My next post on this topic, titled “Application Security Part II: What Should App Developers Do?” will explore different things developers can do to make sure they’re writing solid, high quality, secure mobile applications.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/12486/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/12486/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=12486&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/12/application-security-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/649c096f0b8996184db6d0509771ecfb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lmcdunna</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2012/12/bbjamasia2012_hands-on_labs_img_2856-e1354820632548.jpg" medium="image">
			<media:title type="html">TITLE_IMAGE</media:title>
		</media:content>
	</item>
		<item>
		<title>Code Signing: Past, Present and Future</title>
		<link>http://devblog.blackberry.com/2012/01/code-signing/</link>
		<comments>http://devblog.blackberry.com/2012/01/code-signing/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 20:02:12 +0000</pubDate>
		<dc:creator>Alex Kinsella</dc:creator>
				<category><![CDATA[Adobe AIR Development]]></category>
		<category><![CDATA[Android Development]]></category>
		<category><![CDATA[Java Development]]></category>
		<category><![CDATA[Native SDK Development]]></category>
		<category><![CDATA[BlackBerry 7]]></category>
		<category><![CDATA[blackberry tablet os]]></category>
		<category><![CDATA[code signing]]></category>
		<category><![CDATA[debug tokens]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://devblog.blackberry.com/?p=8292</guid>
		<description><![CDATA[Learn more about code signing, why we do it and what benefits it has for developers.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=8292&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>Hey BlackBerry® devs! Got another guest post for you today &#8211; this one from Mark, who&#8217;s got some useful info about code signing (what it is and why we do it). Enjoy! &#8211; Ed.</em></p>
<p>There are many great things about developing for the BlackBerry platform – including our commitment and support of open source technologies and multiple development languages (Native, HTML5 with BlackBerry® WebWorks™, Adobe® AIR®, Java®). One thing we’ve really invested in over the last year is to respond to developer feedback and requests, in order to enable you to build the way that’s best for you. One of the areas we’ve been focusing on especially is code signing.</p>
<p><strong>What is Code Signing anyway, and why does BlackBerry code sign?</strong></p>
<p>Code signing has been designed to provide security for consumers. They can feel confident that the application they are installing has not been modified after it was signed by the application developer. Code signing is also a means for applications to protect their data.</p>
<p>Code signing has many benefits for both developers and consumers. Developers can distribute an unsigned version of their application along with a debug token to a limited set of beta testers. The debug token helps to ensure that only those beta testers that a developer has issued a token to can run the application. I’ll walk through this process in more detail in a future blog post.</p>
<p>Debug tokens also allow for central key management, allowing for a single code signing key to be used by a team of developers testing an application. Debug tokens can be issued to each developer, allowing them to test builds on their BlackBerry® PlayBook™ tablet. The code signing key can be deployed to a secure build server, protecting it and ensuring that only official builds of the application are signed for public distribution.</p>
<p><span id="more-8292"></span></p>
<p>BlackBerry® Tablet OS applications each have their own sandboxed private data area that only the application itself can access, which is protected in part by the code signing key. This can prevent a malicious application from impersonating another application. If a malicious application &#8211; signed with a different code signing key &#8211; were to attempt to masquerade as an upgrade to an existing application the user has installed, it would install it as a new, unique application and it would not have access to the private data area of the original application. This makes it important to back up your code signing key because if you lose it, you’ll be <a href="http://supportforums.blackberry.com/t5/Testing-and-Deployment/Application-Upgrade-Appears-as-a-New-Separate-Application/ta-p/1122645" target="_new">unable to provide upgrades</a> to your application.</p>
<p>Data protection isn’t just limited to BlackBerry Tablet OS applications. BlackBerry® 7 OS (and lower) support similar data access control through the use of a custom code signing key. You can read all about that <a href="http://supportforums.blackberry.com/t5/Java-Development/Protect-persistent-objects-from-access-by-unauthorized/ta-p/524282" target="_new">here</a>.</p>
<p><strong>What We’ve Been Doing over the Last Year</strong></p>
<p>We’ve made a number of improvements to code signing over the last year and we will continue to build on this in 2012. Here is a rundown of what we’ve done so far:</p>
<ul>
<li>Made code signing keys easier to obtain by removing the credit card requirement for ordering them</li>
<li>Reduced the order time for code signing keys from 7-10 days to approximately 1-2 hours so you can start building right away!</li>
<li>Created <a href="https://bdsc.webapps.blackberry.com/native/beta/documentation/com.qnx.doc.native_sdk.devguide/com.qnx.doc.native_sdk.devguide/topic/configure_app_signing_from_ide.html" target="_new">Configuration Wizards</a> to walk you through configuring and backing up your keys</li>
<li>Automated many previously manual steps by integrating Debug Tokens into the SDKs</li>
<li>Updated the hardware for our code signing servers</li>
<li>Created the Code Signing Supportsite to walk through the ordering, configuration and signing process</li>
</ul>
<p>This is by no means the end of the road when it comes to improvements. The golden age of code signing will arrive when you can request keys instantly from the SDKs themselves and have the tools take care of all the dirty work for you. We’re actively re-writing the code signing infrastructure to accommodate this in the future.</p>
<p><strong>The Future Is Secure AND Easy</strong></p>
<p>These are just some of the major benefits that code signing provides. Of course, in any situation, the benefits have to outweigh the effort. We hope to achieve a near zero effort for code signing for both developers and consumers.</p>
<p>Got questions about the code signing process? Let us know in the comments!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/8292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/8292/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=8292&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2012/01/code-signing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7d0e94a7e96e80d5911732d43f31a39c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Alex K.</media:title>
		</media:content>
	</item>
		<item>
		<title>Explaining BlackBerry Security for Developers: Application Control</title>
		<link>http://devblog.blackberry.com/2009/09/explaining-blackberry-security-for-developers-application-control/</link>
		<comments>http://devblog.blackberry.com/2009/09/explaining-blackberry-security-for-developers-application-control/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 17:39:01 +0000</pubDate>
		<dc:creator>Brian Z.</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[Interviews/Thought Leadership]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[application-control]]></category>
		<category><![CDATA[BES]]></category>
		<category><![CDATA[it-policy]]></category>
		<category><![CDATA[ReasonProvider]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blackberrydev.edstaging.com/?p=380</guid>
		<description><![CDATA[In part one of our three-part series on BlackBerry® security, we discussed the nuances of enterprise IT policy. Today, we&#8217;ll discuss application control. In contrast to IT policy, which IT administrators use to manage and control employee use of BlackBerry smartphones, application control refers to a security setting that can be managed by the end-user and/or the [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=380&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img src="http://rimdevblog.files.wordpress.com/2009/09/original-317.jpg?w=480&#038;h=320" alt="" title="Explaining BlackBerry Security for Developers: Application Control" width="480" height="320" class="aligncenter size-full wp-image-5866" /></p>
<p style="text-align:left;">In part one of our three-part series on BlackBerry® security, we discussed the nuances of <a title="enterprise IT policy" href="http://supportforums.blackberry.com/t5/BlackBerry-Developer-s-Blog/Explaining-BlackBerry-Security-for-Developers-IT-Policy/ba-p/338714#A142" target="_blank">enterprise IT policy</a>. Today, we&#8217;ll discuss application control.</p>
<p style="text-align:left;">In contrast to IT policy, which IT administrators use to manage and control employee use of BlackBerry smartphones, <strong>application control refers to a security setting that can be managed by the end-user and/or the IT administrator (if the user is connected to a BlackBerry Enterprise Server) that defines application behavior on BlackBerry® smartphones.</strong>Specifically, application control allows IT administrators to define whether or not applications can make network connections, play media, access the BlackBerry® Calendar… etc.<span id="more-380"></span></p>
<p style="text-align:left;">These settings are configurable by either the end user or the BlackBerry Enterprise Server admin. It’s important to note this subtle difference: because application control can be configured by the user, the BlackBerry smartphone does not need to be connected to a BlackBerry Enterprise Server to use them (whereas for IT policy to be applied the BlackBerry smartphone has to be connected to a BlackBerry Enterprise Server).</p>
<p style="text-align:left;">BlackBerry smartphone users with experience installing applications are likely familiar with application control. In BlackBerry® Device Software 4.6 (first introduced with the BlackBerry® Bold™ smartphone) and above, users encounter application control as soon as the installed application is first executed:</p>
<p style="text-align:left;"><em><strong>&#8220;Would you like to grant [Application Name] Trusted Application status?&#8221;</strong></em></p>
<p style="text-align:left;">If the user selects &#8220;Yes&#8221;, then your application will be given all the permissions commonly needed for normal execution, i.e. all permissions will be set to “Allow” with the exception of:</p>
<ul>
<li>Prompt &#8211; Recording, Security Timer Reset</li>
<li>Deny &#8211; Input Simulation, Browser Filtering, Display Information While Locked</li>
</ul>
<p>Alternatively, if the user selects &#8220;No&#8221;, it&#8217;s not the end of the world; it just means that your application will be given the default set of permissions. For BlackBerry smartphones that are connected to a BlackBerry Enterprise Server, all permissions are set to “Allow” with the exception of:</p>
<ul>
<li>Prompt &#8211; Recording, Phone, Location Data, Server Network, Internet</li>
<li>Deny &#8211; Browser Filtering, Input Simulation, Security Timer Reset, Display Information While Locked</li>
</ul>
<p>For smartphones that are not connected to a BlackBerry Enterprise Server, all permissions are set to “Allow” with the exception of:</p>
<ul>
<li>Prompt &#8211; Recording, Phone, Location Data</li>
<li>Deny &#8211; Browser Filtering, Input Simulation, Security Timer Reset, Display Information While Locked</li>
</ul>
<p>Regardless of what the user selects, on first run of your application, it&#8217;s a good idea to check what permissions are assigned to your application, using ApplicationPermissionsManager.getApplicationPermissions(). All application permissions have a setting of “Allow” and “Deny”, and some have a tertiary setting:  “Prompt”. If a permission is set to “Prompt”, the user will receive a dialog like the one below when you use an API that triggers it:</p>
<p><em><strong>&#8220;The application [Application Name] has requested a http connection to [domain X]&#8220;</strong></em></p>
<p>At this point, the user is given the choice to “Allow” or “Deny” the request. If they select “Allow” (and check the box to not be asked again), the value of the permission will be changed from “Prompt” to “Allow” and your API call will succeed.  However, if the user selects “Deny”, then your application will receive either a ControlledAccessException or a SecurityException, depending on the method definition.</p>
<p>It is probably best to avoid these prompts in the first place. Since there&#8217;s no magic formula that will allow you to eliminate all these prompts, your best bet is to group them into a single request, using ApplicationPermissionsManager.invokePermissionRequest (ApplicationPermissions requestedPermissions) for the permission values your application will require. Calling this method will first present the user with a dialog indicating to the user that your application is attempting to change permissions, and then display a screen with all requested permissions, which requires the user to save the settings presented to them. Since developers don&#8217;t have the ability to control the user interface for either of these screens, it&#8217;s recommended that you inform the user what your application is about to do before blindly launching into the permission request.</p>
<p>Lastly, if despite all your best efforts, the user still hasn&#8217;t granted you permission access beyond “Prompt”, you do have the ability to provide more information to the user explaining your reasoning for leveraging a certain function. To explain, let&#8217;s return to the http message we got:</p>
<p><em><strong>&#8220;Would you like to grant [Application Name] Trusted Application status?&#8221;</strong></em></p>
<p>Using the ReasonProvider API, you can attach your own message to this dialog prompt, contained within a link for &#8220;Details&#8230;&#8221;. If the user clicks this link, your message will be displayed to the user, allowing you to explain why your application needs this permission:</p>
<p><strong><em>&#8220;My application needs to open a network connection so that it can download pictures from your favorite website.&#8221;</em></strong></p>
<p><img src="http://rimdevblog.files.wordpress.com/2009/09/original-417.jpg?w=435&#038;h=159" alt="" title="Explaining BlackBerry Security for Developers: Application Control" width="435" height="159" class="aligncenter size-full wp-image-5868" /></p>
<p style="text-align:left;">This approach eases the minds of your users by providing them all the information they need to make confident decisions about your application.</p>
<p style="text-align:left;">For more information on the various application control settings that can be applied to your application, see the Javadoc for the ApplicationPermissions class, which defines constants for each permission.</p>
<p style="text-align:left;">In part three of this series, we&#8217;ll address the topic of code signing. Stay tuned!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/380/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/380/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=380&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2009/09/explaining-blackberry-security-for-developers-application-control/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/93c01acd537bfb61a304b73eef4fce76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brianzub1</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2009/09/original-317.jpg" medium="image">
			<media:title type="html">Explaining BlackBerry Security for Developers: Application Control</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2009/09/original-417.jpg" medium="image">
			<media:title type="html">Explaining BlackBerry Security for Developers: Application Control</media:title>
		</media:content>
	</item>
		<item>
		<title>Explaining BlackBerry Security for Developers: IT Policy</title>
		<link>http://devblog.blackberry.com/2009/09/explaining-blackberry-security-for-developers-it-policy/</link>
		<comments>http://devblog.blackberry.com/2009/09/explaining-blackberry-security-for-developers-it-policy/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 15:38:38 +0000</pubDate>
		<dc:creator>Brian Z.</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[Interviews/Thought Leadership]]></category>
		<category><![CDATA[application-control]]></category>
		<category><![CDATA[BES]]></category>
		<category><![CDATA[it-policy]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blackberrydev.edstaging.com/?p=391</guid>
		<description><![CDATA[So you’ve had your stroke of genius, you’ve developed the BlackBerry® smartphone application that’s going to sell a million copies on BlackBerry App World™, and you’re ready for your final end-to-end testing on a live device.  You put the application up on your web server, enter the URL into the BlackBerry® Browser, choose the option to [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=391&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img src="http://rimdevblog.files.wordpress.com/2009/09/original-651.png?w=410&#038;h=410" alt="" title="Explaining BlackBerry Security for Developers: IT Policy" width="410" height="410" class="aligncenter size-full wp-image-5869" /></p>
<p style="text-align:left;">So you’ve had your stroke of genius, you’ve developed the BlackBerry® smartphone application that’s going to sell a million copies on <a title="BlackBerry App World" href="http://appworld.blackberry.com/webstore/" target="_blank">BlackBerry App World</a>™, and you’re ready for your final end-to-end testing on a live device.  You put the application up on your web server, enter the URL into the BlackBerry® Browser, choose the option to download, and then half way through, the download comes to a halt with this message:</p>
<p style="text-align:left;"><em><strong>“This application does not contain a signature. It might not be from a trusted source. Do you want to proceed?”<span id="more-391"></span><br />
</strong></em></p>
<p style="text-align:left;">Your mind starts racing.  “How are my users going to react?  How do I make this message go away?”</p>
<p style="text-align:left;">This is the first of a three-part series of blog posts that will outline how consumer applications are handled from a security perspective in the enterprise with BlackBerry Enterprise® Server.  <strong>First and foremost, it is important to understand that there are two categories of security to consider: IT policy and application control.</strong> In part one of this series, we’ll cover IT policy; in part two, we’ll cover application control; in part three, we’ll talk about code signing and how that affects application development regarding these two categories.</p>
<p style="text-align:left;">IT policy is a security setting in BlackBerry Enterprise Server that IT administrators in medium-to-large sized organizations use to manage and control employee use of BlackBerry smartphones.  For example, an IT administrator could set an IT policy that allows or prevents use of the camera, phone service, the browser, etc.  IT policy only applies to users who are connected to a BlackBerry® Enterprise Server.</p>
<p style="text-align:left;">When are you most likely to encounter IT policy? Typically only in organizations that require some level of security.  As an application developer, if you don’t have the time to learn about all of the various IT policy settings that can affect the use of your applicaton within these organizations, then at least <strong>take note of the big one: Disallow Third Party Application Download</strong>.  How will you know if you’ve run into this setting?  When downloading an application via over-the-air download, users will get the following error:</p>
<p style="text-align:left;"><em><strong>“Download Failed: 910 Application authorization failure.”</strong></em></p>
<p style="text-align:left;">In order to get your application on this user’s BlackBerry smartphone, you’ll need to convince the BES administrator to either relax this setting or white list your application.  The good news is that smartphone users are not likely to encounter this setting very often at all; most administrators will use the default IT policy settings that are set in BlackBerry Enterprise Server, and these settings are application friendly.</p>
<p style="text-align:left;">For more information on IT policy settings for BlackBerry smartphones connected to a BlackBerry Enterprise Server, please see the Bl<a title="ackBerry Enterprise Server Policy Reference Guide" href="http://na.blackberry.com/eng/deliverables/4222/index.jsp?name=BlackBerry+Enterprise+Solution+Security+-+Policy+Reference+Guide4.1.6&amp;language=English&amp;userType=2&amp;category=BlackBerry+Enterprise+Solution+Security&amp;subCategory=" target="_blank">ackBerry Enterprise Server Policy Reference Guide</a>.  Note:  Should you wish to query any IT policy values from within your application, see the javadoc for the ITPolicy class.</p>
<p style="text-align:left;">Stay tuned for part two of this series!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rimdevblog.wordpress.com/391/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rimdevblog.wordpress.com/391/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devblog.blackberry.com&#038;blog=17235680&#038;post=391&#038;subd=rimdevblog&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devblog.blackberry.com/2009/09/explaining-blackberry-security-for-developers-it-policy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/93c01acd537bfb61a304b73eef4fce76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">brianzub1</media:title>
		</media:content>

		<media:content url="http://rimdevblog.files.wordpress.com/2009/09/original-651.png" medium="image">
			<media:title type="html">Explaining BlackBerry Security for Developers: IT Policy</media:title>
		</media:content>
	</item>
	</channel>
</rss>
