<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8811452281277089336</id><updated>2012-01-24T12:40:29.263-05:00</updated><title type='text'>Jack Mannino</title><subtitle type='html'>Security, Food, Fun!!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-6884727941065980072</id><published>2011-09-05T22:29:00.002-04:00</published><updated>2011-09-05T22:40:01.755-04:00</updated><title type='text'>AthleTechz- Getting the Industry Back In Shape</title><content type='html'>&lt;!--?xml version="1.0" encoding="UTF-8"?--&gt;  &lt;span class="Apple-style-span"   style="  ;font-family:Arial;font-size:medium;"&gt;First blog post in a while.  It's been an insanely busy year, which is a GOOD thing.  &lt;a href="https://www.nvisiumsecurity.com/"&gt;Business is good&lt;/a&gt;, the &lt;a href="https://www.owasp.org/index.php/OWASP_Mobile_Security_Project"&gt;OWASP Mobile Security Project&lt;/a&gt; is finally progressing at a healthy pace, and the &lt;a href="http://en.wikipedia.org/wiki/2011_end_times_prediction"&gt;world didn't end as predicted.&lt;/a&gt;&lt;/span&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;The majority of us that work in the IT field sit at a desk for extended periods of time every day.  Whether it's security, development, or network administration, we generally spend a lot of time at a desk or sitting during meetings. As a result of being so sedentary and combined with the long stressful hours many of us work, there's a higher likelihood that we will pack on the pounds as the years progress.    &lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;As for myself, I left the military in the earlier part of the previous decade at a lean 6', 190 pounds.  When I got married in 2007.  I climbed to about 220 pounds.  By 2010, I hit 245.  Like many other guys that get married and add a few pounds, I started to make excuses.  "I work a lot"...."It's because I eat at night"...."I can't eat healthy on the road"....and the list goes on.  Since we moved to the DC area not too long before getting married, I didn't know many people outside of the IT industry.  Most of the people I met through work were also techies, and also spent lots of time doing more of the same.  While I once had people to play a pickup basketball game with, or head out for a run with, I no longer had the same network of active friends.&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;Anyone in the security consulting industry knows that work can be brutal.  Long hours, tight deadlines for deliverables, crazy swing shift hours (can't test in production during working hours!), and "get it done now" requests by customers can make it challenging to live a normal and predictable lifestyle.  As a result, we are sometimes forced to take shortcuts.  On the road and juggling multiple tasks? Grab something quick to eat and head back to the hotel to do MORE work.  Have to squeeze out an unexpected incident response task because a client was breached?  You have to skip that Saturday morning hike you were looking forward to.   &lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;I lived this lifestyle for a few years.  However, a few things changed in 2011.  First, I made friends with some locals in the techie community that are into fitness and healthy living, just like I once was.  My best friend from the military days moved to the area, giving me even more of a kick in the ass.  It awoke "the old me" and got me back into working out consistently.  By working out consistently, other things fell into place.  I started eating better.  I started sleeping more.  And oddly enough, my time management skills improved.  Not only do I think clearly these days, I feel better than I have in years and get more done every day.  I'm still about 30 pounds from where I once was, but this is certainly a step in the right direction.  Before the Spring of 2012, I should be back to where I was while in the military, in the best shape of my life.&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;The latest numbers suggest that nearly half of America will be obese by 2030.  &lt;a href="http://www.huffingtonpost.com/2011/08/28/half-america-obese-2030_n_937906.html"&gt;http://www.huffingtonpost.com/2011/08/28/half-america-obese-2030_n_937906.html&lt;/a&gt; .  If this study was only targeted towards the IT field, my instincts tell me that this number would be much higher.  Visit a security conference or look around your own office, and I guarantee you that we are probably already there in terms of 50% obesity.  Combined with the long hours we work, this is shaving years off of our lives.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;After considering my own personal situation and the factors that contributed to me getting out of shape, I thought it would be a great idea to create a group for techies to motivate each other to stay fit.  You don't have to be a world-class athlete, just a techie that understands the pains of our field and wants to exercise more.  &lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;a href="http://www.meetup.com/AthleTechz/"&gt;http://www.meetup.com/AthleTechz/&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;The long-term vision is for this group to spawn off leagues for playing sports like softball, football, or even volleyball.  Maybe even some running groups that meet 2-3 times a week.  I want people to be selfish and suggest the things THEY enjoy, with the goal of finding someone else that also shares that same desire to partake in the same activity.  Post a meetup for bowling, golfing, ultimate frisbee, skiing, or whatever YOU enjoy.  If you find a few others that also enjoy it and it encourages you to get away from the keyboard for a few hours to burn some calories, then this group has fulfilled its purpose.&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;Our first meetup is a hike on September 17.  I chose a trail that isn't extremely brutal, but scenic and long enough to be both enjoyable and mildly challenging.  I'm also trying to organize a flag football game at the beginning of October. &lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;A few other friends have suggested ideas that they'll post as meetups in October and beyond. Hopefully people use this as not only a chance to get fit, but for a great way to do professional networking across niches and outside of our comfort zones.  Network administrators and Java developers don't always get together, but within this group they would have an opportunity to co-exist in harmony!&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;I really hope this group gets some momentum behind it.  This is something the industry needs...much more than new certifications and acronyms next to our names =)&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;-Jack&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;   &lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;script type="text/javascript"&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;/script&gt;&lt;script type="text/javascript"&gt;try {var pageTracker = _gat._getTracker("UA-12332480-2");pageTracker._trackPageview();} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-6884727941065980072?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/6884727941065980072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=6884727941065980072' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6884727941065980072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6884727941065980072'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2011/09/athletechz-getting-industry-back-in.html' title='AthleTechz- Getting the Industry Back In Shape'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-5217616107070825289</id><published>2011-02-04T05:59:00.002-05:00</published><updated>2011-02-04T06:22:41.802-05:00</updated><title type='text'>OWASP Summit Mobile Security Working Session</title><content type='html'>While I unfortunately won't be in attendance next week in Portugal, I highly encourage anyone with an interest in mobile application security (or application security in general) to participate in the Summit remotely.  More information on registering to participate is available on the &lt;a href="http://www.owasp.org/index.php/Summit_2011_Remote_Registration"&gt;OWASP wiki here.&lt;/a&gt;  Believe me, I'd LOVE to be in Portugal vice stuck on the east coast right now, but our current workload simply won't allow me to escape next week.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are plenty of other tracks to check out as well.  Naturally, as I'm the co-lead of the &lt;a href="http://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Project_About"&gt;OWASP Mobile Security Project&lt;/a&gt; this session is of extreme interest to me.  The session is being chaired by Mike Zusman (the other co-lead of the &lt;a href="http://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Project_About"&gt;OWASP Mobile Security Project&lt;/a&gt;) and David Campbell.  &lt;script type="text/javascript"&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;/script&gt;&lt;script type="text/javascript"&gt;try {var pageTracker = _gat._getTracker("UA-12332480-2");pageTracker._trackPageview();} catch(err) {}&lt;/script&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As for me, I will definitely be participating remotely.  Some of the sharpest guys (and gals) in the industry will be locked away for nearly a week to drive initiatives that will shape the future of how we approach mobile application security going forward.  We threw together a &lt;i&gt;VERY &lt;/i&gt;rough draft of what a &lt;a href="http://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Top_Ten_Mobile_Risks"&gt;Top 10 Mobile Risks&lt;/a&gt;  and &lt;a href="http://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Top_Ten_Mobile_Controls"&gt;Top 10 Mobile Controls&lt;/a&gt; list might look like, but in reality we aren't there yet.  This was the product of a few brainstorming sessions between a few of us.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested in contributing to the project going forward, please get in touch with either myself or Mike.  Our contact information is listed on the wiki page.  There is a TON of work to be done at this point, so we really need as much help as possible to tackle our initiatives.  I'd also recommend joining the &lt;a href="https://lists.owasp.org/mailman/listinfo/owasp-mobile-security-project"&gt;mailing list&lt;/a&gt; as well to stay current on mobile application security trends and to exchange ideas with the experts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-Jack&lt;/div&gt;&lt;div&gt;  &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-5217616107070825289?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/5217616107070825289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=5217616107070825289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/5217616107070825289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/5217616107070825289'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2011/02/owasp-summit-mobile-security-working.html' title='OWASP Summit Mobile Security Working Session'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-7148400556764065957</id><published>2011-02-01T21:41:00.005-05:00</published><updated>2011-02-01T22:17:20.778-05:00</updated><title type='text'>Scary, Scary Mobile Banking</title><content type='html'>&lt;span class="Apple-style-span"   style="  ;font-family:Arial;font-size:medium;"&gt;Short post to demonstrate really bad mobile payment sample code provided by Mastercard. &lt;/span&gt;&lt;div&gt;&lt;div face="Arial" size="medium" style="  ;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div face="Arial" size="medium" style="  ;"&gt;For a great tutorial on how to N-O-T develop a mobile payment application, take a look at the sample code provided by Mastercard &lt;a href="https://developer.mastercard.com/portal/display/blogs/2010/09/19/Creating+an+Android+Payment+Application"&gt;here&lt;/a&gt;.  For more Mastercard Open API goodness, check these examples out &lt;a href="https://developer.mastercard.com/portal/display/openapi/2010/09/30/Accessing+the+Payment+API+using+JAX-RS"&gt;here&lt;/a&gt; and &lt;a href="https://developer.mastercard.com/portal/display/api/Payments%20-%20Resources#Purchase%28Create%29"&gt;here&lt;/a&gt;.  &lt;/div&gt;&lt;div face="Arial" size="medium" style="  ;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div face="Arial" size="medium" style="  ;"&gt;In this snippet from the sample code, they are providing a placeholder for hardcoding your companyID and companyPassword in plaintext string format:&lt;/div&gt;&lt;div face="Arial" size="medium" style="  ;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final double amount = Float.valueOf(amountInput.getText().toString());&lt;/div&gt;&lt;div style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String currency = "USD";&lt;/div&gt;&lt;div style="  ;font-family:Arial;font-size:medium;"&gt;          &lt;span class="Apple-style-span"  style="color:#FE4940;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String companyId = "your-company-id-here";&lt;/span&gt;&lt;/div&gt;&lt;div style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="color:#FE4940;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String companyPassword = "your-company-password-here";&lt;/span&gt;&lt;/div&gt;&lt;div style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="color:#FE4940;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String messageId = "your-message-id-here";&lt;/span&gt;&lt;/div&gt;&lt;div   style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="color:#FE4940;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String settlementId = "your-settlement-id-here";&lt;/span&gt;&lt;/div&gt;&lt;div   style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String cardHolderName = cardHolderNameInput.getText().toString();&lt;/div&gt;&lt;div   style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String accountNumber = cardNumberInput.getText().toString();&lt;/div&gt;&lt;div   style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String expiryMonth = expirationMonthInput.getText().toString();&lt;/div&gt;&lt;div   style="  ;font-family:Arial;font-size:medium;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;final String expiryYear = expirationYearInput.getText().toString();&lt;/div&gt;&lt;div face="Arial" size="medium" style="  "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;And below, we append this to our request and send!!&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;request.append("&amp;lt;MerchantIdentity&amp;gt;");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;request.append("&amp;lt;CompanyId&amp;gt;");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;request.append(companyId);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;request.append("&amp;lt;/CompanyId&amp;gt;");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;request.append("&amp;lt;CompanyPassword&amp;gt;");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;request.append(companyPassword);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;request.append("&amp;lt;/CompanyPassword&amp;gt;");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;request.append("&amp;lt;/MerchantIdentity&amp;gt;");&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;Hardcoding your credentials is NEVER (I repeat, NEVER) a good idea.  Please don't do this.  Your companyID and companyPassword are used for both processing payments, and processing refunds.  Fully decompiling an Android application is extremely trivial, as demonstrated &lt;a href="http://jack-mannino.blogspot.com/2010/09/reversing-android-apps-101.html"&gt;here.&lt;/a&gt;  There are also applications floating around that allow 1-click rooting.  You don't have to be an uber elite expert to do this stuff.  &lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;What concerns me most is the de-centralization of highly sensitive information.  This is a bigtime mobile trend.  If you are writing code like this and giving 50 employees an Android phone or tablet, what is the likelihood that at least 1 of them will end up getting lost at some point?  What is the likelihood that at least one of those devices will get owned at some point?  What is the likelihood that a malicious employee would take this information and rob your company blind?  Pretty high, in my opinion.&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;In a perfect world, this type of architecture would involve a very simple upstream web service and web server where the credentials could be stored in a secure way.  The web service would ask for the credit card information, and THAT'S IT.  There's less of a risk of data leakage with one target instead of 50.&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;There are lots of very important design aspects to consider when rolling out this type of capability.  If you are in the business of losing money, then copy and paste this code and begin processing mobile payments.  And don't even consider putting something like this in the Android market because I will find it ;)&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial; font-size: medium; "&gt;-Jack  &lt;/div&gt;&lt;script type="text/javascript"&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;/script&gt;&lt;script type="text/javascript"&gt;try {var pageTracker = _gat._getTracker("UA-12332480-2");pageTracker._trackPageview();} catch(err) {}&lt;/script&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-7148400556764065957?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/7148400556764065957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=7148400556764065957' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/7148400556764065957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/7148400556764065957'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2011/02/scary-scary-mobile-banking.html' title='Scary, Scary Mobile Banking'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-7487816260023848024</id><published>2010-11-07T21:14:00.008-05:00</published><updated>2010-11-08T02:18:16.355-05:00</updated><title type='text'>Dangers of Rooting Your Mobile Device</title><content type='html'>Many people root or 'jailbreak' their Android and iOS devices in order to gain access to features limited by the security models of each respective platform.  In exchange for added capabilities, these people are essentially accepting (with or without their knowledge) the fact that they've removed pretty much all security protections from their environment.  This post will provide an overview of how the Android security model works, and detail some of the dangers of using a rooted environment.  We will use Android as our platform of choice.&lt;br /&gt;&lt;br /&gt;Each application installed in Android runs as a separate user in its own process space.  Every application user has its own User ID (UID), and this configuration is designed to only allow that application to access associated files and databases.  While it is possible to grant external applications the ability to access some of this information through Content Providers and by signing multiple applications with the same certificate, the default configuration does not allow it.  The Android security documentation on the developer website has an excellent overview of how permissions are assigned to applications:  &lt;a href="http://developer.android.com/guide/topics/security/security.html"&gt;http://developer.android.com/guide/topics/security/security.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Android permissions such as the ability to read SMS messages, install packages, access GPS coordinates, and many more must be declared at the time of installation within the Android Manifest file.  When a user installs an application, the requested features in the Manifest file are displayed to the user.  If they agree that they want to allow the application to do something potentially dangerous such as make phone calls on their behalf or track their location, the application is installed with those rights granted to the code.  Group IDs (GIDs) are assigned to each permission, and the application's UID is then placed into the respective group required to use the feature.  If an application attempts to call an API feature that they have not been granted explicit access to, a security exception is thrown.  This model is in place to prevent an arbitrary application from using dangerous features without a user's explicit consent, although most users really don't care about the permissions an application requests anyway.&lt;br /&gt;&lt;br /&gt;As anyone with even a beginner's knowledge of Linux would expect, running as root gives you complete control to do pretty much whatever you want.  Assuming a phone is rooted, there is no limit the amount of evil a malicious app can perform.  For many years, we've preached the virtues of"least privilege" access.  An administrator should NEVER browse the web using a highly privileged account.  Likewise, those of us Linux and OSX users use a regular account for daily activities, while using 'sudo' to perform something sensitive such as changing system settings or installing software.&lt;br /&gt;&lt;br /&gt;The code below can be used by an application to test whether or not it is running on a rooted device.  If it fails, you know that root access is not possible without an additional exploit.  If you are developing highly sensitive mobile business applications within your organization, this type of check may be useful to track down users who are exposing your information in really dangerous ways.  It can also be used by malicious applications to determine if it is running as root, which allows the application to do really bad things, or download additional code that can do really bad things.  This extremely simple code can be called within the main Activity at startup.  You'll need to import &lt;i&gt;java.lang.Runtime&lt;/i&gt; to do this:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"   style="  color: rgb(145, 28, 103); font-family:Monaco;font-size:11px;"&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt; &lt;span style="color:#911c67;"&gt;public&lt;/span&gt; &lt;span style="text-decoration: underline"&gt;boolean&lt;/span&gt; isRoot (View v) {&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span style="color:#911c67;"&gt;try&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;{&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Runtime cmd = Runtime.getRuntime();&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;cmd.exec(&lt;span style="color:#423cfc;"&gt;"su"&lt;/span&gt;);&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;CharSequence result = &lt;span style="color:#423cfc;"&gt;"You are root"&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Context context = getApplicationContext();&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Toast toast = Toast.makeText(context, result, 10);&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;toast.show();&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return true;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span style="color:#911c67;"&gt;catch&lt;/span&gt; (Throwable t) &lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;{&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;CharSequence result = &lt;span style="color:#423cfc;"&gt;"You are not root."&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Context context = getApplicationContext();&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Toast toast = Toast.makeText(context, result, 10);&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;toast.show();&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return false;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "&gt;    }&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So assuming that we are playing with a rooted device, what can we REALLY do with this power?  Lots of things, such as:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Trojan other legitimate applications&lt;/li&gt;&lt;li&gt;Wipe a device&lt;/li&gt;&lt;li&gt;Read all files and databases&lt;/li&gt;&lt;li&gt;Install other applications&lt;/li&gt;&lt;li&gt;Exfiltrate data&lt;/li&gt;&lt;li&gt;Install reverse shells&lt;/li&gt;&lt;li&gt;Log keystrokes&lt;/li&gt;&lt;li&gt;Enable a user's microphone&lt;/li&gt;&lt;li&gt;Access GPS&lt;/li&gt;&lt;li&gt;Read and send SMS messages&lt;/li&gt;&lt;li&gt;Make phone calls&lt;/li&gt;&lt;li&gt;And much, much more&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You may be asking yourself,"but don't you need to be granted the explicit right to do so?"  Recall that these permissions are declared within the Manifest file for each application, and are defined within the &lt;i&gt;/etc/permissions/platform.xml&lt;/i&gt; file as well.  As root, you have the ability to read and write to both of these files.  You can edit platform.xml directly, and as root you'll have the ability to remove a package and re-install a trojaned version with your own permissions (and code).  As a malicious application author, a rooted phone is your best friend.  There is no need to compromise the device because the owner has already done this for you.&lt;br /&gt;&lt;br /&gt;I'm working on some particularly nasty proof of concept applications that demonstrate some of the more malicious things someone can do to a rooted device, or really mobile devices in general.  Debating whether to release it or save it for Shmoocon and Blackhat DC :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;/script&gt;&lt;script type="text/javascript"&gt;try {var pageTracker = _gat._getTracker("UA-12332480-2");pageTracker._trackPageview();} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-7487816260023848024?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/7487816260023848024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=7487816260023848024' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/7487816260023848024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/7487816260023848024'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/11/dangers-of-rooting-your-mobile-device.html' title='Dangers of Rooting Your Mobile Device'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-8852377409096814655</id><published>2010-10-05T15:21:00.002-04:00</published><updated>2010-10-05T15:42:12.971-04:00</updated><title type='text'>Storing Data On Mobile Devices The Wrong Way</title><content type='html'>Storing sensitive data such as credentials in plain text is a bad idea, especially for mobile applications.  Mobile devices certainly have a much greater likelihood of being lost than a desktop computer or server.  As a good developer, you owe it to your users to protect their information at all costs.&lt;br /&gt;&lt;br /&gt;This tutorial will show you how to check an Android device to determine if sensitive information is being blatantly stored in the clear.  If you are professionally testing an Android application, you should be closely examining what the application stores on the device in its data directory as well as in other places such as system logs and sqlite databases.  We'll be using ADB to browse the file system and take a closer look at some of the files present on the device.  We will also use the sqlite3 utility included with the Android SDK to examine a client-side database.  Our victim application will the popular Evernote app, which has been written for pretty much every mobile platform in existence.&lt;br /&gt;&lt;br /&gt;Assuming Evernote is installed to either a physical device or to a virtual device running in the Android Emulator,  we'll use ADB to browse to the directory where the application stores its information.  The application stores this information under /data/data/com.evernote.&lt;br /&gt;&lt;br /&gt;Jack@Android_Fun =&amp;gt;&amp;gt;&amp;gt;&lt;span style="font-weight:bold;"&gt; ./adb shell&lt;/span&gt;&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;cd /data/data/com.evernote&lt;/span&gt;&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;ls&lt;/span&gt;&lt;br /&gt;cache&lt;br /&gt;databases&lt;br /&gt;shared_prefs&lt;br /&gt;lib&lt;br /&gt;&lt;br /&gt;Let's examine the contents of the "shared_prefs" directory.  Many applications use a similar directory structure, so you should always look for this stuff in the /data/data/com.whateverapp directory.  The file "com.evernote_preferences.xml" is where application-specific information is stored for Evernote.  Outputting the contents of this file gives us the following:&lt;br /&gt;&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;cd shared_prefs&lt;/span&gt;&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;ls&lt;/span&gt;&lt;br /&gt;com.evernote_preferences.xml&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;cat com.evernote_preferences.xml&lt;/span&gt;&lt;br /&gt;&amp;lt;?xml version='1.0' encoding='utf-8' standalone='yes' ?&amp;gt;&lt;br /&gt;&amp;lt;map&amp;gt;&lt;br /&gt;&amp;lt;string name="serviceHost"&gt;&lt;/string&amp;gt;&lt;br /&gt;&amp;lt;string name="username"&gt;&lt;span style="font-weight:bold;"&gt;happy_gilmore&lt;/span&gt;&amp;lt;/string&amp;gt;&lt;br /&gt;&amp;lt;boolean name="ACCOUNT_CHECKED" value="true" /&amp;gt;&lt;br /&gt;&amp;lt;string name="password"&gt;&lt;span style="font-weight:bold;"&gt;MyPassword123&lt;/span&gt;&amp;lt;/string&amp;gt;&lt;br /&gt;&amp;lt;int name="servicePort" value="0" /&amp;gt;&lt;br /&gt;&amp;lt;boolean name="NotifyUploadStatus" value="true" /&amp;gt;&lt;br /&gt;&amp;lt;/map&amp;gt;&lt;br /&gt;# &lt;br /&gt;&lt;br /&gt;Whoa!!  That sure looks like a password to me.  Right there in the clear.  Rule #1 of mobile development: NEVER DO THIS!!  If you absolutely must store credentials on the device, it should be hashed (and salted) using a secure hashing algorithm such as SHA-2.  Never, ever do this.  Your users deserve better.&lt;br /&gt;&lt;br /&gt;The sqlite3 utility included with the Android SDK allows you to work with the client sqlite databases that many applications use to store client-side information.  The following command output shows you how to open a database, list tables, and execute a simple "select" statement:&lt;br /&gt;&lt;br /&gt;Jack@Android_Fun =&gt;&gt;&gt; &lt;span style="font-weight:bold;"&gt;./adb shell&lt;/span&gt;&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;cd /data/data/com.evernote&lt;/span&gt;&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;ls&lt;/span&gt;&lt;br /&gt;cache&lt;br /&gt;databases&lt;br /&gt;shared_prefs&lt;br /&gt;lib&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;cd databases&lt;/span&gt;&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;ls&lt;/span&gt;&lt;br /&gt;Evernote.db&lt;br /&gt;webviewCache.db&lt;br /&gt;webview.db&lt;br /&gt;# &lt;span style="font-weight:bold;"&gt;sqlite3 Evernote.db&lt;/span&gt;&lt;br /&gt;SQLite version 3.6.22&lt;br /&gt;Enter ".help" for instructions&lt;br /&gt;Enter SQL statements terminated with a ";"&lt;br /&gt;sqlite&gt; &lt;span style="font-weight:bold;"&gt;.tables&lt;/span&gt;&lt;br /&gt;android_metadata  note_tag          resource_attrs    tags_table      &lt;br /&gt;data_cache_state  note_thumbnails   resources       &lt;br /&gt;error_log_table   notebooks         saved_searches  &lt;br /&gt;note_attrs        notes             search_history  &lt;br /&gt;sqlite&gt; &lt;span style="font-weight:bold;"&gt;select * from notes;&lt;/span&gt;&lt;br /&gt;65f00f4b-676b-4f45-a9d0-2dcbf5bc1bc2|d7aede0e-ec5d-4ab8-8670-5070d5c0a35e|My Banking Information|289|1?j?4????s|1286304619000|1286304825000|0|1|4|1|5|0|0|0&lt;br /&gt;8ea7f9c7-30b0-4112-98d3-4d78b81e79d5|d7aede0e-ec5d-4ab8-8670-5070d5c0a35e|My Personal Information|321|”??^?A??FdJ|1286305164000|1286305164000|0|1|7|1|5|0|0|1&lt;br /&gt;sqlite&gt; &lt;br /&gt;&lt;br /&gt;Take the time to do your due diligence to ensure that these very simple to prevent issues don't manifest themselves.  While you may think you've caught every instance of where data may be potentially be exposed, taking a close look at the application in use may prove otherwise.&lt;br /&gt;&lt;br /&gt;Gaining unauthorized physical access to a mobile device is a very real threat.  Even if a user password protects their device, gaining access to data is as easy as plugging the phone in and attaching it to ADB.  Also never assume that the user's device won't be rooted (or jailbroken for iOS devices), effectively negating most of the built-in "protection".  All it takes is a single malicious application to be installed on a rooted device for this information to be easily extracted.&lt;br /&gt;&lt;br /&gt;We have only begun to scratch the surface of the vulnerabilities present within mobile platforms.  While you cannot protect against the unknown, minimizing the surface for potential issues by writing code that addresses issues we DO know about today is the only way to ensure your applications withstand the test of time.  &lt;br /&gt;&lt;br /&gt;As an eye opener, take a look at every application installed on your mobile device.  I guarantee you that at least one application (likely many more) is exposing your information in a similar and insecure fashion. &lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;/script&gt;&lt;script type="text/javascript"&gt;try {var pageTracker = _gat._getTracker("UA-12332480-2");pageTracker._trackPageview();} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-8852377409096814655?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/8852377409096814655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=8852377409096814655' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/8852377409096814655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/8852377409096814655'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/10/storing-data-on-mobile-devices-wrong.html' title='Storing Data On Mobile Devices The Wrong Way'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-2955684358908931096</id><published>2010-09-28T17:03:00.013-04:00</published><updated>2010-09-28T20:32:46.517-04:00</updated><title type='text'>Reversing Android Apps 101</title><content type='html'>First blog post in a long time, so I figured I should start back off with something I've been getting a lot of questions about lately, which is how to get started with learning more about Android application security.  &lt;br /&gt;&lt;br /&gt;I think the absolute best way to understand what's going on is to start looking at real world applications.  This tutorial will show you how to download an Android application and convert it back into a format that we prefer, which is its original Java code.  Hopefully this will be the first tutorial of many, so be sure to check back from time to time.&lt;br /&gt;&lt;br /&gt;I hope this post can be of use to developers as well, in order to better understand that the code they allow to be distributed on mobile devices can easily be decompiled.  If you are storing hardcoded credentials or reference other things you don't want the user (or bad guys) to know about, you should re-evaluate that design choice.&lt;br /&gt;&lt;br /&gt;My disclaimer is that this should not be used for malicious purposes, etc etc and all of the other stuff no one will likely listen to.&lt;br /&gt;&lt;br /&gt;To get started, you will need these applications on your box:&lt;br /&gt;&lt;br /&gt;-&lt;a href="http://developer.android.com/sdk/index.html"&gt;Android SDK&lt;/a&gt;&lt;br /&gt;-&lt;a href="http://code.google.com/p/dex2jar/"&gt;dex2jar&lt;/a&gt;&lt;br /&gt;-&lt;a href="http://code.google.com/p/android-apktool/"&gt;apktool (JAR and dependencies)&lt;/a&gt;&lt;br /&gt;-&lt;a href="http://java.decompiler.free.fr/"&gt;JD (or a similar Java decompiler)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first step is to download the Android SDK (Software Development Kit).  You will rely on this heavily when testing applications and interacting with Android devices.  There are many useful utilities bundled with it including Android Debug Bridge (ADB) and the emulator.&lt;br /&gt;&lt;br /&gt;The next step is to download an interesting application to rip open.  Most of us are Twitter fans, so why don't we take a look at the Twitter application for Android?  &lt;br /&gt;&lt;br /&gt;At this point, you have 2 choices:&lt;br /&gt;&lt;br /&gt;-Download it to your physical Android device&lt;br /&gt;-Download it to a virtual device running in the Android emulator&lt;br /&gt;&lt;br /&gt;By default, the virtual devices available using the emulator that comes with the Android SDK do not have the Google Market application installed.  You can either 1) spend time finding ways around this or 2) install an image that has the software pre-loaded.  Here is an excellent tutorial on how to go that route, although you may want to use a more up to date image than the ones referenced.  They use older versions of Android.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://carnal0wnage.blogspot.com/2010/04/android-emulators-with-android-market.html"&gt;Android Emulator Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Assuming you have either plugged your phone in or started an Android virtual machine, in the tools folder of the Android SDK folder, you'll find several utilities incuding ADB.  I recommend familiarizing yourself with it, as you will use it almost constantly if you are working with the Android platform.&lt;br /&gt;&lt;br /&gt;ADB allows us to do many things including connect to the device and have shell access.  We first need to figure out where the application we downloaded is stored.  Under the /data/app/ directory, we will find all of the APK files for applications we've downloaded.  Under /system/app is all of the applications included with your Android distribution.  For this tutorial, we are concerned with /data/app as this is where our Twitter application will be located.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1KoMADiqlzQ/TKKDD3Q5ZeI/AAAAAAAAAEc/1LlMjjOEOLM/s1600/adb+browsing.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 199px; height: 400px;" src="http://1.bp.blogspot.com/_1KoMADiqlzQ/TKKDD3Q5ZeI/AAAAAAAAAEc/1LlMjjOEOLM/s400/adb+browsing.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5522120195507316194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that we know what we want to download, we need to transfer the file to our local system for further analysis.  This can be achieved also by using ADB. &lt;br /&gt;&lt;br /&gt;We will not be using the shell this time, but rather the "pull" command which allows us to select and retrieve files from the Android device.  The general format for this command is: adb pull apk_file destination_directory&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1KoMADiqlzQ/TKKDbo2KaWI/AAAAAAAAAEk/8PWKoDHVfc4/s1600/adb+pull.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 183px;" src="http://1.bp.blogspot.com/_1KoMADiqlzQ/TKKDbo2KaWI/AAAAAAAAAEk/8PWKoDHVfc4/s400/adb+pull.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5522120603953949026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that we have the APK file, we'll need to unzip it.  The APK is simply in standard ZIP format, so any of your existing ZIP compatible utilities will work. &lt;br /&gt;&lt;br /&gt;After unzipping the APK file, there are two things you should be primarily concerned with at this point: looking at the manifest file, and getting the .DEX file into a more desirable format to work with.  The manifest contains juicy information like permissions, intent filters, and lots more.  If you aren't familiar with the manifest file and how its used with Android applications, I highly recommend reading the documentation on the Android development site:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.android.com/guide/topics/manifest/manifest-intro.html"&gt;Manifest Intro&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you try to open the AndroidManifest.xml file that was just unzipped, you'll find that it isn't in plain text.  We'll use apktool at this point to convert it into a format we are comfortable with.  We'll use apktool to decode the entire APK, and then the manifest file should be much easier on the eyes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1KoMADiqlzQ/TKKD4WfweGI/AAAAAAAAAEs/_5F97w-dQCA/s1600/apktool.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_1KoMADiqlzQ/TKKD4WfweGI/AAAAAAAAAEs/_5F97w-dQCA/s400/apktool.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5522121097244342370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After running apktool, this is what the AndroidManifest.xml file should look like when viewed in a text editor or Eclipse:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1KoMADiqlzQ/TKKFe2aSQpI/AAAAAAAAAFE/Ok_OmBo0uRc/s1600/Screen+shot+2010-09-28+at+8.14.42+PM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 223px;" src="http://2.bp.blogspot.com/_1KoMADiqlzQ/TKKFe2aSQpI/AAAAAAAAAFE/Ok_OmBo0uRc/s400/Screen+shot+2010-09-28+at+8.14.42+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5522122858157982354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The classes.dex file in the originally unzipped APK file is the crown jewel here.  It contains all of the application's code, but in the Dalvik Executable format. &lt;br /&gt;&lt;br /&gt;There are tools such as dedexer and apktool that will convert .DEX into smali assembly format, but again we are concerned with looking at the Java code.  We can use dex2jar to achieve this:&lt;br /&gt;&lt;br /&gt;dex2jar.bat path_to_classes.dex&lt;br /&gt;&lt;br /&gt;Once we've run dex2jar, there will be a classes.dex.dex2jar.jar file in the folder where the original .DEX file was located.  Simply unzip this JAR file.  Upon unzipping it, we see a bunch of .class files. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1KoMADiqlzQ/TKKEHKiMyfI/AAAAAAAAAE0/PPCLUZazwNg/s1600/filesystem+after+dex2jar.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 174px;" src="http://1.bp.blogspot.com/_1KoMADiqlzQ/TKKEHKiMyfI/AAAAAAAAAE0/PPCLUZazwNg/s400/filesystem+after+dex2jar.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5522121351731399154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nothing to worry about, this is familiar territory at this point.  Simply use your favorite Java decompiler to convert from bytecode to easily readable code. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1KoMADiqlzQ/TKKEPz_Tx8I/AAAAAAAAAE8/viqjd7imH1U/s1600/decompiled+java.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 223px;" src="http://3.bp.blogspot.com/_1KoMADiqlzQ/TKKEPz_Tx8I/AAAAAAAAAE8/viqjd7imH1U/s400/decompiled+java.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5522121500298299330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We now have complete access to the entire client application.  In the tutorials to come, I'll show you some things you should be paying close attention to when reviewing or designing an Android application.  &lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;/script&gt;&lt;script type="text/javascript"&gt;try {var pageTracker = _gat._getTracker("UA-12332480-2");pageTracker._trackPageview();} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-2955684358908931096?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/2955684358908931096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=2955684358908931096' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2955684358908931096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2955684358908931096'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/09/reversing-android-apps-101.html' title='Reversing Android Apps 101'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1KoMADiqlzQ/TKKDD3Q5ZeI/AAAAAAAAAEc/1LlMjjOEOLM/s72-c/adb+browsing.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-2754171182540134857</id><published>2010-05-14T13:35:00.005-04:00</published><updated>2010-05-14T13:41:53.455-04:00</updated><title type='text'>GoDaddy XSS</title><content type='html'>Just a quick poll.  Contacting them directly didn't work, blasting them on Twitter didn't get their PR people to respond, and releasing it to the masses will only cause innocent people to be exploited.  I guess all we can do is take guesses at how long it will take them to pull their heads out of their asses.&lt;br /&gt;&lt;br /&gt;-Jack  &lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/3131623.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;br /&gt; &lt;a href="http://polldaddy.com/poll/3131623/"&gt;How long will I have to email the GoDaddy security team and Twitter-blast them before they acknowledge and fix their Webmail XSS? (Reported April 30)&lt;/a&gt;&lt;span style="font-size:9px;"&gt;&lt;a href="http://polldaddy.com/features-surveys/"&gt;customer surveys&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;/script&gt;&lt;script type="text/javascript"&gt;try {var pageTracker = _gat._getTracker("UA-12332480-2");pageTracker._trackPageview();} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-2754171182540134857?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/2754171182540134857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=2754171182540134857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2754171182540134857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2754171182540134857'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/05/godaddy-xss.html' title='GoDaddy XSS'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-8967061695335953303</id><published>2010-04-01T14:07:00.002-04:00</published><updated>2010-04-02T14:01:05.833-04:00</updated><title type='text'>New Career</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(255, 0, 0);font-size:130%;" &gt;Update: Now that it's April 2nd, I can say that this was my semi-weak attempt at an April Fool's day joke.  :-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It has been a great ride in the security industry, but all good things must come to an end. &lt;br /&gt;&lt;br /&gt;When I first started out, there were vulnerabilities everywhere.  No one patched, and the last thing on people's minds was worrying about how someone could get into their websites.&lt;br /&gt;&lt;br /&gt;Nowadays, security is better than ever.  The web is reasonably secure thanks to Web Application Firewalls and XSS filters in browsers.  And web scanners and source code review tools have become so advanced that skilled analysis isn't even required anymore!!  Even Flash is pretty damn secure.  There really isn't much left to do.&lt;br /&gt;&lt;br /&gt;I'll be announcing my new business venture in the near future.&lt;br /&gt;&lt;br /&gt;-Jack &lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-8967061695335953303?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/8967061695335953303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=8967061695335953303' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/8967061695335953303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/8967061695335953303'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/04/new-career.html' title='New Career'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-1235167438416229203</id><published>2010-03-09T01:00:00.003-05:00</published><updated>2010-03-09T01:02:18.762-05:00</updated><title type='text'>Marketing Fail</title><content type='html'>This one is an oldie but goodie.  Every time I see it I get a good chuckle out of it.  Read the following paragraph and then check out the actual product. And yes, XSS does make remote administration quite easy =)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ensuretech.com/products/technology/technology.html#XSS"&gt;"XSS makes both local and remote Web-based central management of XyLoc simple. If a user forgets his Key, there are several options the administrator can choose. Users can be provided with override passwords, so they can access their workstations in the case of a forgotten Key. The XSS records each user override, and can notify the administrator of this action through the XSS auditing feature (see below). If the user is not assigned an override password, the XyLoc administrator can issue a temporary override password on each of the user's computers, or suspend the user's current Key and issue a temporary Key. New employees are quickly assigned Keys, and Keys used by outgoing employees can easily be disabled. Every aspect of managing a XyLoc installation can be performed quickly and easily using the XyLoc Security Server."&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-1235167438416229203?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/1235167438416229203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=1235167438416229203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1235167438416229203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1235167438416229203'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/03/marketing-fail.html' title='Marketing Fail'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-3223195657854086448</id><published>2010-03-08T18:58:00.007-05:00</published><updated>2010-03-08T20:41:50.311-05:00</updated><title type='text'>Oops....</title><content type='html'>So hopefully you've arrived at this blog post in the intended way, which was via re-Tweeting. Did anyone realize that the URL was slashdot.org.tinyurl.com/ye74fag?  Probably not.  Did anyone notice that it WAS a TinyURL and then attempt to figure out where the TinyURL led to before deciding whether or not it was worth clicking on?  Probably not.  Were you all using NoScript?  Probably not.  The script on my site will tally up the metrics of those of you that were letting JavaScript run wild on an untrusted site.  Nothing malicious, just an Ajax GET request to a page that doesn't exist and an alert box.  You can look at the source if you don't believe me.  Nothing malicious.&lt;br /&gt;&lt;br /&gt;So nearly all of my followers on Twitter are security professionals, yet many of us (including myself) get lazy at times and fail to do our due diligence.  We interact with the same people every day, we pass around their links and they pass ours around.  Its routine.  We start thinking that we know who is sitting behind the other keyboard, even though we may have never met them and we don't really know anyone that knows that person either.  We are all one big family.&lt;br /&gt;&lt;br /&gt;If we as the people who should "know better" can get duped into clicking on things we shouldn't and trusting people we shouldn't, what makes anyone think the people that don't understand WHY they shouldn't click on things or talk to strangers will resist the temptation to press the shiny red button?  They won't.  Not without a ton of training, &lt;a href="http://farm4.static.flickr.com/3586/3426106666_1f92dfce8d.jpg"&gt;likely to the point where they dread even using the web.&lt;/a&gt;    &lt;br /&gt;&lt;br /&gt;Please feel free to re-Tweet this again and again.  Most of us need a friendly reminder every now and then that we aren't above the law.&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-3223195657854086448?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/3223195657854086448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=3223195657854086448' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3223195657854086448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3223195657854086448'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/03/oops.html' title='Oops....'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-6793463838250688691</id><published>2010-02-28T21:06:00.002-05:00</published><updated>2010-02-28T21:10:58.242-05:00</updated><title type='text'>Android (In)Security</title><content type='html'>The fact that this type of vulnerability exists in 2010 just blows my mind.  There is an extremely simple method to bypass authentication on the Motorola Droid by simply calling the phone and hitting the back button.  Yes, that's it.  Doesn't matter if you've protected the phone with a security pattern, or even if you've exhausted your maximum number of attempts at guessing the right pattern.  A simple phone call along with the back button will get you into the device.  No password or security pattern required.  The phone is pretty much wide open to anyone with physical access to the device. &lt;br /&gt;&lt;br /&gt;Upon discovering this, I was pretty sure that SOMEONE else had to realize this was possible.  Turns out several people in Android forums claim to have reported it to Google, but still no fix.  &lt;br /&gt;&lt;br /&gt;So, who is ready to start rolling Android phones into the enterprise?  I didn't think so.&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-6793463838250688691?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/6793463838250688691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=6793463838250688691' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6793463838250688691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6793463838250688691'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/02/android-insecurity.html' title='Android (In)Security'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-2791517617922598929</id><published>2010-02-25T19:00:00.003-05:00</published><updated>2010-02-25T19:10:30.797-05:00</updated><title type='text'>Urban Legend: "HTML 5 Will Kill Flash"</title><content type='html'>Before I begin my rant, a quick history lesson:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/ASP.NET"&gt;In the earlier part of the decade, Microsoft released a new web framework called ASP.NET.  It was the successor to the often criticized Classic ASP platform, and solved many of the issues plaguing ASP.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fast forward to the present:&lt;br /&gt;&lt;br /&gt;It's 2010.  ASP.NET has been around for close to a decade, and yet Classic ASP applications are still all over the place.  Some are maintained, some aren't.  Many are still as vulnerable as they were nearly a decade ago and yet they still continue to be deployed in production.  Why hasn't Classic ASP completely fallen off the face of the Earth yet?&lt;br /&gt;&lt;br /&gt;There are several reasons.  The first is cost.  Developing a complex application is a significant investment.  Any organization making such an investment wants to receive a maximum return on that investment.  Developing an application and then phasing it out within 2 years isn't practical.  Developers are also creatures of habit, and sadly some dread learning something that's completely foreign to them.  Learning a completely different framework is an undertaking, and since many development shops are ran like true sweatshops, this implies that any and all learning will be done on their own time.  Not to mention, a ton of existing code could also be recycled for use in other projects as well.&lt;br /&gt;&lt;br /&gt;Now that the history lesson is over, how does this apply to the Flash vs HTML 5 debate?  Many of the same things are true today.  Flash is everywhere.  Stating that HTML 5 will crush Flash in a hurry is essentially stating that the entire web will be written overnight.  I'm not a psychic, but I can predict that this simply won't happen and isn't even close to possible.  With the economic downturn in recent years, employers aren't hiring as fast as expected and those that have retained most of their employees are doing so on a shoestring budget.  If it isn't broken, they won't fix it.  Period.&lt;br /&gt;&lt;br /&gt;Adobe also pretty much controls the RIA market.  Silverlight has barely made a dent, and probably won't do much more than take a tiny piece of Adobe's market share away.  Flash, Flex, and AIR fanboys are loyal to Adobe and will not openly embrace a shift away from what they know. &lt;br /&gt;&lt;br /&gt;Even if HTML 5 makes possible many things that are only possible using Flash today, do any of you REALLY think that Adobe will go down without a fight?  They have a market penetration that others can only fantasize about.  They also have the unique advantage of being platform-independent.  Therefore, any standards they push will be deployed universally.  In the browser world, this isn't the case.  Microsoft, Google, Mozilla, and others are all implementing the standards but far from uniformly.  Rather, each of them are &lt;a href="http://biobreak.files.wordpress.com/2009/05/021109-slap-fight1.jpg"&gt;battling like schoolgirls&lt;/a&gt; to implement the newest and coolest features that the other vendor lacks.  Adobe doesn't have to worry about this.  Design a new feature, roll it into the next release cycle.  Enough said.&lt;br /&gt;&lt;br /&gt;Since Adobe has the luxury of doing things their own way without the support of the rest of the browser community (and without conforming to standards), they are in a great position to come up with new ways to push the boundaries of what can be done on the web.  They make a ton of money from the products they sell, and therefore they will do anything they can to keep developers hooked on sipping the Adobe Kool Aid. &lt;br /&gt;&lt;br /&gt;In conclusion, get used to Flash, get used to Adobe, and get used to thinking about how to secure all of the above.  Placing your bets on false hopes won't make the web a safer place today.  Even if by some miracle Adobe's technologies are gone in 10 years (they won't be), is thinking about what security should look like in a decade going to solve the problems of today?&lt;br /&gt;&lt;br /&gt;-Jack  &lt;br /&gt; &lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-2791517617922598929?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/2791517617922598929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=2791517617922598929' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2791517617922598929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2791517617922598929'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/02/urban-legend-html-5-will-kill-flash.html' title='Urban Legend: &quot;HTML 5 Will Kill Flash&quot;'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-7892824768987431548</id><published>2010-02-17T01:07:00.004-05:00</published><updated>2010-02-17T01:11:07.596-05:00</updated><title type='text'>ISSA DC</title><content type='html'>Many thanks to the gracious hosts at the ISSA DC Chapter this evening for taking time out of their busy lives to listen to me rant about web application security for an hour.  We had some serious audio/video issues to start things off, but overall it was a great experience and I met some awesome new people.&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-7892824768987431548?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/7892824768987431548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=7892824768987431548' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/7892824768987431548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/7892824768987431548'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/02/issa-dc.html' title='ISSA DC'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-3824443225481976053</id><published>2010-02-10T17:59:00.011-05:00</published><updated>2010-02-10T18:42:28.370-05:00</updated><title type='text'>Don't Search For Your Social Security Number, Ever!</title><content type='html'>Last night I listened to the &lt;a href="http://www.owasp.org/download/jmanico/owasp_podcast_59.mp3"&gt;February 3 OWASP Podcast&lt;/a&gt;, and one of the topics discussed was why you shouldn't be searching for your SSN via Google.  The reason this is bad should be fairly obvious, but having this information in Google's hands and in the hands of someone with malicious intentions is slightly different.  Unless you can (or want to risk) compromising Google's systems, your search requests simply end up within their stockpile of information and hidden from the rest of the world.  Or do they??&lt;br /&gt;&lt;br /&gt;This is something I've been thinking about for a bit, but their discussion certainly got me thinking harder about the "how" portion.  Then it hit me.  Google Adwords and Analytics!!  The big disclaimer here is that I have not, and will not attempt this theory.  While I populated this information in Adwords, I did not let this ad campaign run nor did I allow it to begin collecting numbers.  I am merely sharing this idea with all of you to hopefully get your brains spinning around the possibilities of such an attack.  The potential attack has several components- the ability to monitor the frequency and identity of social security numbers that are requested through search engines, and the ability to launch targeted phishing attacks based on those searches.  My goal is not to enable the criminals of the world to carry out such evil deeds, but rather to educate the community and spread the word about the possibilities of such activities taking place.&lt;br /&gt;&lt;br /&gt;The very nature of Google's business model ensures that they wouldn't consider this an issue, and while I don't fully support their level of integrity when dealing with our data, in this case I have to agree with them.  While you read this posting, think back to when &lt;a href="http://www.networkworld.com/community/node/48975"&gt;Google's CEO Eric Schmidt stated the following:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"If you have something that you don't want anyone to know, maybe you shouldn't be doing it in the first place, but if you really need that kind of privacy, the reality is that search engines including Google do retain this information for some time, and it's important, for example that we are all subject in the United States to the Patriot Act. It is possible that that information could be made available to the authorities."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now onto the evil....&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Step 1 Generate a List of Every Possible Social Security Number.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I wrote a quick Perl script to do this, using both the regular 9-digit format as well as with dashes inserted.  If you notice, the ssn array gets cleared at every 100,000 numbers and prints to an output file.  I ran the script without this and it slowed my box to a crawl, since there were upwards of two billion values being held in memory.  Below is the code to do this.  If you run it on a Windows machine, simply change /usr/bin/perl at the top to c:\perl\bin or wherever your Perl directory is located.&lt;br /&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;open(OUTFILE, "&gt;ssnz.txt");&lt;br /&gt;my @ssnz_array;&lt;br /&gt;my $elementsInArray = 0;&lt;br /&gt;my $ssnWithDashes = "";&lt;br /&gt;&lt;br /&gt;print "Now generating SSNz\n";&lt;br /&gt;&lt;br /&gt;for (my $count = 100000000; $count &lt; 1000000000; $count++)&lt;div&gt;{&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt; $ssnWithDashes = $count;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt; $ssnWithDashes =~ s/(\d\d\d)?(\d\d)?(\d\d\d\d)/$1-$2-$3/;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt; if ($elementsInArray != 100000)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt; {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt; push(@ssnz_array, "$count\n", "$ssnWithDashes\n"); &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt; $elementsInArray++; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt; else &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt; { &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt; push(@ssnz_array, "$count\n", "$ssnWithDashes\n"); &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt; print OUTFILE @ssnz_array; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt; @ssnz_array = ();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt; $elementsInArray = 0;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt; print "Completed $count\n";&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt; } &lt;/div&gt;&lt;div&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;print OUTFILE @ssnz_array;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Step 2- Create Google Adwords and Analytics Accounts &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;/span&gt;&lt;/b&gt;  In this step, several things must be done.  The first is to create a new ad campaign and ad group using Google Adwords.  I named my new campaign “SSNs Are Awesome”, and the ad group to display my ad “All your SSNs Are Belong To Me”. &lt;br /&gt;&lt;br /&gt;Within this ad group, I created an ad that would be displayed every time an SSN is searched for on Google.  There will obviously be a certain level of false positives, but somewhere within the noise you should find some treasures.  The goal of this ad is to lure people searching for their SSNs to visit this website.  If someone is searching for their SSN, they are either curious as to whether or not its floating around on the web, or they may be worried about the possibility that their identity has been stolen.  Using fear as our bait here, my example ad says “You may be at risk because your Social Security number was found!”&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1KoMADiqlzQ/S3M7enNtx6I/AAAAAAAAADU/I8f0mdJkcFk/s1600-h/ssn+ad.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 255px;" src="http://1.bp.blogspot.com/_1KoMADiqlzQ/S3M7enNtx6I/AAAAAAAAADU/I8f0mdJkcFk/s320/ssn+ad.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5436754572274943906" /&gt;&lt;/a&gt;&lt;br /&gt;The next step to this process is uploading the SSNs. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1KoMADiqlzQ/S3M7qbX0UnI/AAAAAAAAADc/NnU3Y0_i3WU/s1600-h/keywords+example.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://3.bp.blogspot.com/_1KoMADiqlzQ/S3M7qbX0UnI/AAAAAAAAADc/NnU3Y0_i3WU/s320/keywords+example.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5436754775254520434" /&gt;&lt;/a&gt;&lt;br /&gt;Through a bit of trial and error, I discovered that Google imposes a limit of 2,000 keywords per ad group.  Therefore, you would have to create a bunch of ad groups in order to cover the entire range of SSNs.  I'm sure that with a bit of tinkering its possible to automate this process though.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1KoMADiqlzQ/S3M72IAJm1I/AAAAAAAAADk/KAK3OBCQjQw/s1600-h/hard+limit+keywords.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 50px;" src="http://3.bp.blogspot.com/_1KoMADiqlzQ/S3M72IAJm1I/AAAAAAAAADk/KAK3OBCQjQw/s320/hard+limit+keywords.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5436754976213408594" /&gt;&lt;/a&gt;&lt;br /&gt;The final step is to also create a Google Analytics account.  Within Analytics, you want to add a site to monitor (which gets created in Step 3), and take the Analytics Javascript and embed it within the HTML body of your main page.  The reason for adding Analytics to this page is so that you would be able to tie the actual strings used in the search engine to the requests to your page, even outside of what may trigger an Adwords ad to be displayed or clicked.  The result- a lot more information to harvest and even more potential personally identifiable information that can be tied to an SSN.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Step 3- Create A Site To Collect Additional Information&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simply having an SSN isn't enough.  A real criminal would want additional information to tie the SSN to a real person.  Getting personally identifiable information is the primary goal of the site that would be getting linked to through the previously created ad.&lt;br /&gt;&lt;br /&gt;This is where things get exciting.  Not only can we extract information through the Adwords statistics, we can also use the Referer header from the Google search to tie the SSN to the visitor.  Even if they don't enter any information, someone evil would now know their SSN and their source IP address, allowing them to conduct further recon if they chose to.&lt;br /&gt;&lt;br /&gt;Below is an example of how your search request will always be sent via the Referer header from Google to any site you traverse to through your search results.  The sensitive example SSN information is highlighted in red:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1KoMADiqlzQ/S3M8OW5gKYI/AAAAAAAAADs/c4Tc5F8RlCM/s1600-h/referer.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 80px;" src="http://3.bp.blogspot.com/_1KoMADiqlzQ/S3M8OW5gKYI/AAAAAAAAADs/c4Tc5F8RlCM/s320/referer.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5436755392528918914" /&gt;&lt;/a&gt;&lt;br /&gt;What types of evil things could be done from such a site?  We could simply use the SSN that was parsed through the Referer header, and create a convincing page displaying their SSN to them and politely asking them to give us more personal information so we can "determine if their SSN is on the web and remove it for them". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1KoMADiqlzQ/S3M8eFT7rEI/AAAAAAAAAD0/J4KJzavNYzc/s1600-h/browser.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://1.bp.blogspot.com/_1KoMADiqlzQ/S3M8eFT7rEI/AAAAAAAAAD0/J4KJzavNYzc/s320/browser.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5436755662685842498" /&gt;&lt;/a&gt;&lt;br /&gt;As a backup plan in case they are either too lazy to enter this information or if they think the site is suspicious, perhaps dropping a keylogger or something of that nature on the box would be a good idea.  Since the SSN is already known at this point, access to their personal accounts such as email and social networking sites would more than likely give an attacker all of the information required to fill in the blanks.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Moral To The Story- Don't Search For Sensitive Stuff!&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;While Google's business tactics and integrity can and always will be questioned, the bottom-line is that exposing this information to the world should be minimized.  I think all of us have at one point or another searched for things we shouldn't have.  If those of us that should "know better" do this stuff, you can be confident that those who don't understand what really happens with their data are doing this stuff frequently.  Using the tactics described above, you could substitute any type of data to achieve similar results.  Corporate espionage, personal spying, identity theft, and many other scenarios can easily unfold by using a little trial, error, and Google's massive horde of personal information.&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-3824443225481976053?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/3824443225481976053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=3824443225481976053' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3824443225481976053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3824443225481976053'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/02/dont-search-for-your-social-security.html' title='Don&apos;t Search For Your Social Security Number, Ever!'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1KoMADiqlzQ/S3M7enNtx6I/AAAAAAAAADU/I8f0mdJkcFk/s72-c/ssn+ad.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-3730462094068844700</id><published>2010-01-19T01:52:00.003-05:00</published><updated>2010-01-19T02:02:03.393-05:00</updated><title type='text'>Should We Buy More Tools?</title><content type='html'>Short answer: in most cases, absolutely not.  Tools alone do not make an application security program successful.  In fact, I'd go as far as saying that taking a tool-centric approach to any security program is doomed from the start.  Let me explain why with a "purely hypothetical situation."&lt;br /&gt;&lt;br /&gt;All too often I've run across organizations that have deep enough pockets to run a very tight ship, yet somehow fail miserably.  This evening we will pick on the Federal Government sector.  Most groups in the Federal or DoD space have to budget several years in advance to procure actual consultants or contractors to perform a particular subset of services.  However, at the end of each fiscal year they fight over huge pots of money.  Those that are fortunate enough to justify why they have a rightful claim to some of the funding often go out and spend a considerable amount on tools and other software solutions that they hope will serve as a band-aid for another year or so.  &lt;br /&gt;&lt;br /&gt;Here is a scenario that ends up unfolding time and time again: Agency A purchases a few licenses for a web vulnerability scanner and a source code analysis tool.  Meanwhile, they expect their same mid-level (maybe even "senior") security teams to perform this work properly without any training, hands-on experience, or in-depth knowledge of what they are up against.  Armed with new and expensive tools but lacking knowledge of fundamentals, best-practices, etc etc they begin scanning everything.  And scanning.  And scanning.  And scanning.  At some point a savvy developer bursts his/her bubble and says "Everything in this scan report is a false positive.  Did you verify them first?  Did you tune your rules or did you just use the default rules?"  The "security" team member responds with "Tune what?  Why and how would I verify the results?  I'm not a developer.  That's your job."&lt;br /&gt;&lt;br /&gt;The outcome is that 1) The development team has absolutely no respect, trust, or faith in the security team  2) The security team feels disgruntled at the lack of appreciation for their tireless scanning efforts, and 3) The organization somehow feels invincible in the end because they had no "real" issues to deal with other than internal bickering....even though there were likely thousands of actionable issues that were overlooked.  Not to mention severe gaps in their development processes, organizational policies regarding anything and everything related to good application security practices, and ultimately any sense of their true exposure to risk.  Therefore, why bother to put forth additional time and effort in building and maturing an application security program.  They haven't been attacked.  No critical issues were proven to exist.  And even though they develop systems critical to our national infrastructure, they aren't a target (really?).  Everyone wins, right?? &lt;br /&gt;&lt;br /&gt;Wrong.    &lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;              &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-3730462094068844700?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/3730462094068844700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=3730462094068844700' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3730462094068844700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3730462094068844700'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/01/should-we-buy-more-tools.html' title='Should We Buy More Tools?'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-6749954847830060903</id><published>2010-01-12T09:33:00.004-05:00</published><updated>2010-01-18T16:07:24.403-05:00</updated><title type='text'>Web Browser Exploitation Via Barcode Scanning</title><content type='html'>&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;Update 1/18/2010: Tested this idea using ShopSavvy (an Android-based barcode scanning app), and with the default configuration it automatically followed the embedded URL.  Very interesting way to attack mobile browsers, especially as the popularity of these applications continue to grow.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, you read that correctly.  Until yesterday, I wasn't very interested in barcode scanning software.  Until &lt;a href="http://www.guerilla-ciso.com/"&gt;@rybolov&lt;/a&gt; gave a short demo on barcodes and brought to my attention the fact that you can embed URLs in them.  All it really took were the words "web" and "browser" to get my attention.  Anyone that knows Mike in person has surely heard him rant at length about barcode security.  There's a chance he even mumbles stuff about barcodes in his sleep.&lt;br /&gt;&lt;br /&gt;The only piece of software I have at my disposal is &lt;a href="http://www.beetagg.com/"&gt;BeeTagg&lt;/a&gt;, which is a  free Blackberry application.  Using an open-source program called &lt;a href="http://sourceforge.net/projects/zint/"&gt;Zint&lt;/a&gt;, you can create your own barcodes.  You can use BeeTagg to scan them using the camera on your phone.&lt;br /&gt;  &lt;br /&gt;To test this with Zint, you want to create a barcode using the QR Code symbology.  Under the "general" tab, enter your URL within the "Data to Encode" field, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1KoMADiqlzQ/S0yIwkVMa0I/AAAAAAAAAC8/4fAd50DQbkE/s1600-h/zint.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 313px;" src="http://1.bp.blogspot.com/_1KoMADiqlzQ/S0yIwkVMa0I/AAAAAAAAAC8/4fAd50DQbkE/s320/zint.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5425862019042274114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, you want to save this as either a .png or a .svg file.  This allows you to print your barcode and do whatever you want with it.  &lt;br /&gt;&lt;br /&gt;The barcode shown below links to my blog.  Try scanning it using whatever barcode reading software you have:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1KoMADiqlzQ/S0yI6HuexnI/AAAAAAAAADE/VxoO3C4AmZI/s1600-h/barcode_png.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 62px; height: 62px;" src="http://1.bp.blogspot.com/_1KoMADiqlzQ/S0yI6HuexnI/AAAAAAAAADE/VxoO3C4AmZI/s320/barcode_png.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5425862183162398322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;BeeTagg will recognize the URL, but will not automatically follow it.  Even with completely relaxed security permissions, a user will at least be prompted that a browser connection attempt was made.  Of course you can use a URL shortening service to obfuscate the destination, but regardless a user at least has to click "Yes" in order to connect with their mobile browser.  I haven't been able to figure out how to bypass this requirement yet, at least on a Blackberry.&lt;br /&gt;&lt;br /&gt;My real curiousity lies within how other barcode scanning applications  handle this behavior.  Many point of sale systems use Windows XP or some Unix/Linux variants.  I'd be very interested to see how many of those automatically follow links.  If they were to blindly follow links embedded within barcodes, in theory you could trivially pop some of those systems with browser exploits.  Imagine going to the grocery store and owning Internet Explorer 6 using only a milk carton!! =)&lt;br /&gt;&lt;br /&gt;In a perfect world, point of sale systems would be properly isolated from production networks.  In addition, these very same systems shouldn't be allowed to access the internet via 80 and 443.  I'd be willing to bet that many organizations with similar point of sale systems have completely overlooked the fact that this type of behavior may or may not be possible. &lt;br /&gt; &lt;br /&gt;If anyone has access to the hardware and software described above, try scanning the image below.  If the application automatically instantiates your browser and requests the URL embedded within the barcode, be afraid =)  If you can get the browser to fire off, please post a comment or shoot me an email.  I'd love to know if I'm right.&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-6749954847830060903?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/6749954847830060903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=6749954847830060903' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6749954847830060903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6749954847830060903'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/01/web-browser-exploitation-via-barcode.html' title='Web Browser Exploitation Via Barcode Scanning'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1KoMADiqlzQ/S0yIwkVMa0I/AAAAAAAAAC8/4fAd50DQbkE/s72-c/zint.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-551097971637402846</id><published>2010-01-06T21:33:00.007-05:00</published><updated>2010-01-06T22:24:00.415-05:00</updated><title type='text'>Not Educating Your Clients? FAIL</title><content type='html'>How many of you that have brought in external consultants for some type of security engagement felt like you paid a lot of money for something you really didn't understand? Or better yet, how many of you have brought them in and felt like after they left you had less of an understanding of your environment and what your true risks were? It seems as though its becoming standard practice for a lot of groups to test for a few days (or simply run automated tools), crank out a templated report, and give a short presentation at the end of an engagement without detailed guidance for making the world a better place. Is there any value in this? Maybe, but for what you've likely paid not NEARLY enough. &lt;br /&gt;&lt;br /&gt;While many would argue that our job security lies in customers knowing as little as possible about what goes on, I argue that you can achieve the same level of job safety as well as build additional trust and loyalty by not leaving them in the dark. Here is what I consider "leaving your customers in the dark":&lt;br /&gt;&lt;br /&gt;1- Using misleading contract language to give the illusion that you are performing something a lot cooler than you really are. Not to mention billing for 30 hours of "reporting" when you are really having your consultants use an automated report generating tool.&lt;br /&gt;&lt;br /&gt;2- Stating that your "methodology" requires performing several thousand "unique" checks" (doesn't Nessus/WebInspect/Appscan do that?? hmm). When asked about your methodology, you state that its "proprietary, super secret stuff".&lt;br /&gt;&lt;br /&gt;3- Delivering a cookie-cutter report pulled directly from the output of these same tools, without ANY level of analysis or correlation of threats. Correlation example- Threat A is kinda sorta bad, and so is Threat B....when they both exist together, this is REALLY REALLY BAD. That additional layer of analysis and articulation to a client could mean the difference between them getting owned or properly prioritizing their mitigation tasks. &lt;br /&gt;&lt;br /&gt;4- Not offering meaningful guidance for risk mitigation strategies, or better yet, how to prevent them from happening over and over. &lt;br /&gt;&lt;br /&gt;Getting back to the education part, based on the 4 steps above, how much do you think this client learned throughout the engagement? Answer: not much. Not only do they have absolutely no idea what you did for 40/80/120 hours, they don't know what they are doing right. All they were likely told is "you have 38 instances of XSS, validate input and HTML encode output." No custom guidance stating how THEY should validate their input (what if they have to allow HTML tags...guess stripping all special characters goes out the door). Also, don't assume that just because there were no findings in a specific area that they'll figure out on their own that they did something right. If they have a particular area or approach to securing something that works extremely well, explain it to them so they continue to do it this way!! &lt;br /&gt;&lt;br /&gt;Also, unless you are rolling your own in-house stuff that you don't want to release to the public (which you DO have the right to keep "proprietary"), give them advice on resources they can leverage in order to continue to build upon the security improvements that they **hopefully** gained through the services you provided. If you tell them that your toolset is "proprietary" even though it consists of Burp, Nikto, and ::insert_scanner_here::, you are truly doing them a disservice. &lt;br /&gt;&lt;br /&gt;I guarantee that if your customers trust you, see the value in what you provide to them, and most importantly they IMPROVE year after year (read that again: IMPROVE), they'll keep coming back. Stop believing all of the "cost per vulnerability found" stuff. If you are using the number of vulnerabilities your consultants discover as your sole criteria for bringing them back, you are making a big mistake. Instead of saying "wow, finding 20 instances of XSS was only $10k", say "wow, we had 7 less XSS findings than last year, and now we truly understand the threat vectors of these vulnerabilities". &lt;br /&gt;&lt;br /&gt;2 blog entries tonight...doesn't happen often =)&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-551097971637402846?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/551097971637402846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=551097971637402846' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/551097971637402846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/551097971637402846'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/01/not-educating-your-clients-fail.html' title='Not Educating Your Clients? FAIL'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-1482207874913430662</id><published>2010-01-06T21:12:00.008-05:00</published><updated>2010-01-18T21:23:03.208-05:00</updated><title type='text'>nVisium Security</title><content type='html'>&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;Update 1/7/2010: The site is undergoing a facelift, and should be back up within the next few days.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;Update 1/18/2010: The site has received a facelift, and is back in action =)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The website is live, but still has plenty of content, functionality, and sexiness that needs to be added.  In the coming months I'll be releasing most of my code through nVisium Security's site, in addition to whitepapers and links to presentations.  I'll be adding a blog and RSS feed in the very near future, so as soon as I post it to the production site I'll update you all to keep an eye on it.&lt;br /&gt;&lt;br /&gt;Here is the link: &lt;a href="http://nvisiumsecurity.com"&gt;nVisium Security&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tell me what you think, what needs to be improved in terms of aesthetics etc.  Feel free to post comments on my blog, or send me an email if they are REALLY bad =)&lt;br /&gt;&lt;br /&gt;Always fun to juggle startup stuff in addition to performing engagements for clients, business development, AND keeping my skills + knowledge on the cutting edge.&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");&lt;br /&gt;document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;try {&lt;br /&gt;var pageTracker = _gat._getTracker("UA-12332480-2");&lt;br /&gt;pageTracker._trackPageview();&lt;br /&gt;} catch(err) {}&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-1482207874913430662?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/1482207874913430662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=1482207874913430662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1482207874913430662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1482207874913430662'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2010/01/nvisium-security.html' title='nVisium Security'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-7828396712338901965</id><published>2009-12-28T22:58:00.002-05:00</published><updated>2009-12-28T23:02:00.664-05:00</updated><title type='text'>2010 and Beyond</title><content type='html'>Another year has gone by, and looking back at 2009 it certainly was one to remember in the application security world.  There were more notable newsworthy incidents than in previous years.  Major attacks took place on nearly all major social networking sites, plenty of financial institutions, and tons of government sites.  Application security has finally taken center stage, and rightfully so.  Nearly everything we do nowadays happens on the web.  As more of our routine functions both from a business perspective as well as in our personal lives shift to the web, the criticality of these vulnerabilities will grow more and more.  If your organization relies heavily upon web-based technologies and you haven't begun taking security seriously yet, its never too late to start!  &lt;br /&gt;&lt;br /&gt;Putting it all into perspective, what should we take away from the events of 2009?&lt;br /&gt;&lt;br /&gt;1- Solid application security is not, and will never be as simple as &lt;a href="https://www.clicktosecure.com/"&gt;pressing a button &lt;/a&gt;and letting someone else worry about it.  Throwing money at a problem is not the same as solving it.  While the art of security can never be deemed a "perfect science" there are plenty of things we can do to get close.  Running a simple scanner (source code or runtime) against a pre-production application is not the same as building security into your architecture and design.  Implementing a web application firewall is not the same as identifying the root cause of your vulnerabilities and ensuring that your developers learn from their mistakes and begin writing more secure code.&lt;br /&gt;&lt;br /&gt;2- A major incident is extremely expensive to triage.  If your company is an e-commerce company, have you REALLY crunched numbers to estimate how much money it'll cost to be down for 4-5 days?  If you estimate your losses to be upwards of a million dollars a day yet bringing on 2-3 additional full-time application security engineers would cost a few hundred thousand, why on earth would you take such a risk?  Everyone thinks "it won't happen to us" until it actually happens to them.  The numbers don't lie....if it hasn't happened to you yet, it will.  It may already have happened but your attackers weren't interested in raising any red flags.&lt;br /&gt;&lt;br /&gt;3- Web technologies are moving at the speed of light right now, and will continue to do so for the foreseeable future.  Things moved fast in 2009, and will do the same in 2010.  With the emergence of the HTML 5 standard, 2010 is going to be a very interesting year.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Happy New Year to all of you!!&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-7828396712338901965?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/7828396712338901965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=7828396712338901965' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/7828396712338901965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/7828396712338901965'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/12/2010-and-beyond.html' title='2010 and Beyond'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-3562216732992069379</id><published>2009-12-27T18:12:00.002-05:00</published><updated>2009-12-27T18:19:23.573-05:00</updated><title type='text'>New TSA Protections</title><content type='html'>My wife and I returned to the US last night after a much needed vacation.  On the flight back into the US, we were exposed to TSA's latest and greatest set of security measures put into place in response to this week's &lt;a href="http://www.cnn.com/2009/TRAVEL/12/25/airliner.firecrackers/index.html"&gt;incident&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;The following list is what TSA put into place immediately following the botched attempt at blowing up an aircraft:&lt;br /&gt;&lt;br /&gt;-No electronics are to be used in the last hour of flight&lt;br /&gt;-In the final hour, no one shall have a pillow or blanket on their lap&lt;br /&gt;-No standing or moving around the plane is permitted in the last hour&lt;br /&gt;&lt;br /&gt;Yup, thats it.  I wish I was making this stuff up.  Someone tried to blow up a plane and used a blanket to hide what he was doing, and somehow removing the ability for all passengers to have anything on their laps is going to prevent this from happening again?  If a potential bomber manages to get the materials onboard, I'm sure a quick trip to the bathroom mid-flight would be sufficient to prepare his/her weapon.  Our reactive (not proactive) solution might work for about a week, until the next person waiting in line to do something similar plans a workaround to address the "no blankets" issue.  &lt;br /&gt;&lt;br /&gt;To address the obvious shortcomings in the latest security techniques, here are my proposed additions to the new strategy:&lt;br /&gt;&lt;br /&gt;-In addition to standard blankets, passengers cannot wear &lt;a href="https://www.getsnuggie.com/flare/next"&gt;Snuggies&lt;/a&gt; in the final hour of the flight&lt;br /&gt;&lt;br /&gt;-All passengers will be shackled to their seats for the final hour of the flight&lt;br /&gt;&lt;br /&gt;-TSA reserves the right to sedate all passengers with Nitrous Oxide, at random&lt;br /&gt;&lt;br /&gt;-All seats onboard the aircraft will have commodes installed so that passengers can't use that lame old "I have to pee" excuse to get up anymore&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-3562216732992069379?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/3562216732992069379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=3562216732992069379' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3562216732992069379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3562216732992069379'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/12/new-tsa-protections.html' title='New TSA Protections'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-556025459770335174</id><published>2009-12-02T22:33:00.007-05:00</published><updated>2009-12-02T23:05:05.068-05:00</updated><title type='text'>Fun with URL Shortener Chaining</title><content type='html'>While trying to think of a clever way to &lt;a href="http://www.youtube.com/watch?v=oHg5SJYRHA0"&gt;RickRoll&lt;/a&gt; my friends on Facebook earlier without any sort of link previewing taking place, I started messing around with some of the shortening services.  TinyURL disallows shortened URLs that are already TinyURL shortened, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1KoMADiqlzQ/SxczDxvOBEI/AAAAAAAAACc/kX_dMqSvUj8/s1600-h/tiny+message.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 121px;" src="http://3.bp.blogspot.com/_1KoMADiqlzQ/SxczDxvOBEI/AAAAAAAAACc/kX_dMqSvUj8/s320/tiny+message.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5410849617292952642" /&gt;&lt;/a&gt;&lt;br /&gt;However, TinyURL DOES allow shortened URLs from other services, and other services also allow this behavior as well.  If you try chaining a shortened URL through bit.ly, your users/victims will be prompted with a warning like this one:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1KoMADiqlzQ/SxczIQIctuI/AAAAAAAAACk/od4zNVYhHrQ/s1600-h/bit+ly+message.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 165px;" src="http://3.bp.blogspot.com/_1KoMADiqlzQ/SxczIQIctuI/AAAAAAAAACk/od4zNVYhHrQ/s320/bit+ly+message.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5410849694171313890" /&gt;&lt;/a&gt;  &lt;br /&gt;However, there are plenty of other URL shortening services out there.  You can find some other ones &lt;a href="http://www.toprankblog.com/2009/01/11-best-url-shortening-services-vote-your-favorite/"&gt;here&lt;/a&gt;.  Using &lt;a href="http://zi.ma"&gt;zi.ma&lt;/a&gt;, I took a TinyURL link and shortened it via zi.ma.  Then, I took the zi.ma URL and shortened it via TinyURL. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1KoMADiqlzQ/Sxc0fWE19jI/AAAAAAAAACs/BelqjqlTF1o/s1600-h/zima+cropped.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 146px;" src="http://4.bp.blogspot.com/_1KoMADiqlzQ/Sxc0fWE19jI/AAAAAAAAACs/BelqjqlTF1o/s320/zima+cropped.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410851190415423026" /&gt;&lt;/a&gt;&lt;br /&gt;I did this twice, TinyURL to zi.ma, then zi.ma to TinyURL and finally TinyURL to zi.ma again.  Only by repeating this sequence twice, Facebook essentially gave up on trying to resolve the origin of the link.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1KoMADiqlzQ/Sxc1X0RbVhI/AAAAAAAAAC0/pL56Cequ1G4/s1600-h/woods.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 108px;" src="http://4.bp.blogspot.com/_1KoMADiqlzQ/Sxc1X0RbVhI/AAAAAAAAAC0/pL56Cequ1G4/s320/woods.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5410852160593942034" /&gt;&lt;/a&gt;&lt;br /&gt;My real curiousity is in how this technique would work against web malware filters such as those found within IE and Firefox, as well as what Google provides via its search engine??  Is this technique already being used heavily?  What if a site KNOWN to host malware were inserted into an IFRAME on a good site, and using this technique the link was chained through multiple iterations.  Would they still flag this behavior when indexing the site and making the determination as to whether or not its a "safe" site?    &lt;br /&gt;&lt;br /&gt;Thoughts??&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;br /&gt;http://zi.ma/8ac792&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-556025459770335174?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/556025459770335174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=556025459770335174' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/556025459770335174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/556025459770335174'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/12/fun-with-url-shortener-chaining.html' title='Fun with URL Shortener Chaining'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1KoMADiqlzQ/SxczDxvOBEI/AAAAAAAAACc/kX_dMqSvUj8/s72-c/tiny+message.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-1440416976970568691</id><published>2009-11-25T18:11:00.000-05:00</published><updated>2009-11-25T18:48:16.777-05:00</updated><title type='text'>Jack's X-Mas List</title><content type='html'>Dear Santa,&lt;br /&gt;&lt;br /&gt;I know I'm likely to be on your naughty list this year, but I still want gifts anyway.  Why? Because I'm Jack Mannino....stop asking questions.  My list is short and sweet, and its for the greater good of the security community.  Please see my demands below:&lt;br /&gt;&lt;br /&gt;1- I want people to focus less on certifications, and more on learning the fundamentals behind whatever they are working on.  If someone's job is to assess web applications, I don't want to hear about the 10 domains of CISSP.  I also don't want to know about how he/she learned about some cool tools while taking the CEH boot camp.  I want them to understand HTTP, be able to understand and manipulate Javascript, and know a thing or 2 about SQL itself.  If they want to charge $200 an hour but are unable to tell me what the difference between a 302 vs 500 status code is, they deserve a big lump of coal in their stocking!  If you are a "penetration tester" and you can't tell me what the TCP handshake is, you should get coal as well!&lt;br /&gt;&lt;br /&gt;2- The world would be a better place if there was less "marketing" and more "doing" going on.  Don't try to convince me that your product is better than the next guy's because its cheaper and "more mature."  Show me how it is.  When you send salesmen out that have zero experience in the field, I am largely unimpressed.  Also, don't try to convince people that your product is superior because it helps meet compliance standards.  Convince them that it ultimately makes them more secure by showing them real data and evidence, not something staged to work perfectly against Hacme Bank.  &lt;br /&gt;&lt;br /&gt;3- If you give me just 1 gift this year Santa, I'd like for it to be for people that don't actually enjoy security to find new jobs.  Maybe they can come to the North Pole and work for you?  When people say "nah, I don't bother with this stuff outside of work", it takes away the holiday cheer!!  It demoralizes those of us that genuinely love what we do, and makes it harder to achieve progress. &lt;br /&gt;&lt;br /&gt;Thanks Santa,&lt;br /&gt;&lt;br /&gt;Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-1440416976970568691?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/1440416976970568691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=1440416976970568691' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1440416976970568691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1440416976970568691'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/11/jacks-x-mas-list.html' title='Jack&apos;s X-Mas List'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-6739822500128594442</id><published>2009-11-14T01:00:00.005-05:00</published><updated>2009-11-14T02:42:12.858-05:00</updated><title type='text'>Internal Web Server IP Leakage Via Public Crossdomain.xml Files</title><content type='html'>So this one is pretty interesting, and happens in a lot more instances than I originally thought it would.  The public crossdomain.xml file for this particular server shown below has references to internal web servers via "allow-access-from-domain."  What this means is that the developers have given their internal servers the ability to read data from the Flash domain of their external server.  Without going too deep into the nitty gritty of Flash and crossdomain.xml, read Adobe's (much better) explanation &lt;a href="http://blogs.adobe.com/asset/2009/11/securely_deploying_cross-domai.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What you will see (and should take away) from this picture below is that these are internal resource addresses of very critical resources, likely internal websites.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1KoMADiqlzQ/Sv5fIXgSp9I/AAAAAAAAACU/JB1uxxP7ypQ/s1600-h/cross_domain_ip_leakage.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 139px;" src="http://4.bp.blogspot.com/_1KoMADiqlzQ/Sv5fIXgSp9I/AAAAAAAAACU/JB1uxxP7ypQ/s320/cross_domain_ip_leakage.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5403861200244221906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This gives you the immediate connection that there is a sort of transitive trust likely present.  As the external site trusts the internal site, the internal site likely trusts the external site.  If XSS or any method exists to have users execute malicious Flash objects while visiting the external site from within the NAT gateway (where the 10.x.x.x addresses are relevant), it may be possible to easily launch attacks on internal web servers.  The Flash objects could contain scripting and attack code to launch from within the INTERNAL USER's browser, with code to do things like perform SQL Injection on an internal server.  Internal web servers won't typically be afforded much attention, and they often go without proper code reviews or development processes.  It is assumed that because they are internal, they are unreachable.  Not at all the case.  &lt;br /&gt;&lt;br /&gt;More to come...might have shifted my submission for Shmoo to this area.  Lots of fun stuff to explore.&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-6739822500128594442?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/6739822500128594442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=6739822500128594442' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6739822500128594442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6739822500128594442'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/11/internal-web-server-ip-leakage-via.html' title='Internal Web Server IP Leakage Via Public Crossdomain.xml Files'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1KoMADiqlzQ/Sv5fIXgSp9I/AAAAAAAAACU/JB1uxxP7ypQ/s72-c/cross_domain_ip_leakage.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-8861842941912111072</id><published>2009-11-05T02:57:00.001-05:00</published><updated>2009-11-05T02:59:20.568-05:00</updated><title type='text'>The Hidden Costs of Fully Outsourcing</title><content type='html'>&lt;!-- Woopra Code Start --&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var _wh = ((document.location.protocol=='https:') ? "https://sec1.woopra.com" : "http://static.woopra.com");&lt;br /&gt;document.write(unescape("%3Cscript src='" + _wh + "/js/woopra.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;!-- Woopra Code End --&gt;&lt;br /&gt;With the boom in outsourcing and fully managed IT services as well as Software As A Service (SaaS) and "the cloud", a huge amount of debate has already taken place.  Tons of cost models are out there comparing the benefits of each, but sometimes it helps to look past the raw numbers.  When an organization completely outsources EVERYTHING, they do so at the cost of developing internal capabilities to mirror the exact same services being rendered.  This leads to vendor lock-in, and when an organization eventually decides to begin managing their processes internally they are essentially starting from ground-zero.  If 4-5 years have gone by, they've likely had a large staff turnover.  In addition, anything they owned internally may be severely dated, both from a technology and best/most efficient practices perspective.  The end result is that a huge investment may be required in order to maintain the same level of capability on their own.  &lt;br /&gt;&lt;br /&gt;Looking at it from that angle completely changes the outlook on the overall dollar amount.  While it may have been cheaper while things were good (no benefits to pay, 401k matching, etc), upon a messy breakup they end up investing roughly the same amount of money.  So does that mean outsourcing is a terrible idea?  Not at all.  A certain level of external expertise is an absolute requirement.  These services should be used in a way that compliments their existing capabilities rather than replaces them.  The ability to maintain flexibility and freedom can often be cheaper, as well as a lot less of a headache.&lt;br /&gt;&lt;br /&gt;And the debate rages on.......&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-8861842941912111072?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/8861842941912111072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=8861842941912111072' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/8861842941912111072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/8861842941912111072'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/11/hidden-costs-of-fully-outsourcing.html' title='The Hidden Costs of Fully Outsourcing'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-2140143169478593121</id><published>2009-09-11T19:33:00.001-04:00</published><updated>2009-09-11T19:35:20.029-04:00</updated><title type='text'>Commoditized Security Is Optional</title><content type='html'>&lt;!-- Woopra Code Start --&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var _wh = ((document.location.protocol=='https:') ? "https://sec1.woopra.com" : "http://static.woopra.com");&lt;br /&gt;document.write(unescape("%3Cscript src='" + _wh + "/js/woopra.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;!-- Woopra Code End --&gt;&lt;br /&gt;So after watching Bruce Schneier's hour long sales pitch for outsourcing all of your IT solutions, it really made me wonder what standards most companies are using nowadays to truly evaluate who they outsource to.  Just because a company is large, "reputable", or acknowledged by Gartner does not mean that they can 1-cater to ALL of your needs or 2-offer you the strongest technical solution.  In fact, in my opinion the larger a company gets the less likely it will be that their service offerings will be tailored upon to what you ACTUALLY NEED.  While a company may excel in software development, or data center virtualization, it doesn't have any bearing as to whether or not they can provide solid web application security services.  Similarly, if a company is well-known for their security services, it doesn't necessarily mean that they'll do well at IT help desk management.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Since security is obviously a highly lucrative field for many companies to pursue, naturally they've flooded the market with their services....everyone wants to make a buck.  There are companies that "do everything", and there are companies that are highly specialized.  Something each and every one of you with procurement power should ask yourselves is "Would I take my car to someone for repair that is well-known for fixing boats, or should I take my car to the guy that fixes cars (and more specifically, Toyota's)."  The same concept applies here.  One could argue in defense of the do-it-all types that their solutions may have a more "worldy" view of the security field vice looking at knowing a lot about a specific niche.  The main argument against these do-it-all companies would be that as a result of their business model, the skills that their consultants bring to the table might be very diluted.  Using web application security as an example, rather than knowing a ton about Javascript, Flash, and various server-side web technologies and frameworks, they know a little about each, in addition to knowing how to lock down routers, firewalls, operating systems, and spam filtering.  So what you are essentially paying for in the end is just a little bit of what you need, and a lot of what you really don't need.  This is the same concept as going to the store and buying a variety pack of underwear that comes in different sizes...so while all you needed was 3 pairs of large underwear, you are now the proud owner of small, medium, and extra-large underwear that you really don't need.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This isn't to say that all companies offering highly specialized services are perfect.  In the end, you really need to do your homework on them, what they do, what they've done, and ultimately, what they plan to do for you.  If they offer you an in-depth application assessment, but upon asking them what their "methodology" is, they say its a 4 step process: step 1- blindly run a scanner, step 2-validate scanner noise, step 3-send you a bill, step 4- repeat steps 1-3 again and again...then it may be time to evaluate another vendor.  If you are using a SaaS vendor that says "we scan, don't really tweak our scanner, don't really look at the output, and we just hand you a report loaded with stuff", keep looking for the right vendor.  Price is always important, but receiving top-notch services for that price is more important in my opinion.  While the price of an in-depth assessment will differ greatly from what a SaaS provider offers, you should also understand the differences in levels of effort put forth.  Both have their place in the overall security process (a discussion for a rainy day), but again do your homework!!  Ask them what differentiates them from their competitors, aside from price and what their public relations people have branded them upon.  If their proposals are made up of marketing fodder, generic contract speak that doesn't even remotely pertain to you, and an overall "solution" that seems like its a template with your name on it, this might be an indicator of what their services will be like.  Ask them what they've done to improve the broader state of security, how they plan to address any complexities in your environment, or even better: ask to speak to the security person that will actually be performing the work, instead of a sales person who will tell you exactly what you want to hear.  If the person who you'll ultimately be paying for can't answer questions that they weren't coached on or prepared for in advance, has no clue about your specific technology, and can't name at least 1 online resource they use to remain current with their respective field, it might be time to look elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Getting back to the beginning of this post, while a lot of organizations may indeed be increasing their level of outsourcing over time I don't feel that they should simply "bow" to the larger companies that would love for nothing more than to push all of the smaller companies out of the market (or acquire them).  What you get is what you pay for, and if you don't do your own due diligence prior to breaking the piggy bank, it may end up costing you a lot more than you realize.  Outsourcing is here to stay, but companies that choose to drive innovation will avoid commoditization, no matter how badly Bruce Schneier wants you to believe it =)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-2140143169478593121?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/2140143169478593121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=2140143169478593121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2140143169478593121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2140143169478593121'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/09/commoditized-security-is-optional.html' title='Commoditized Security Is Optional'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-2033598611590746268</id><published>2009-09-01T23:28:00.002-04:00</published><updated>2009-09-01T23:30:27.801-04:00</updated><title type='text'>Up Next: More Blogging!!</title><content type='html'>&lt;!-- Woopra Code Start --&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var _wh = ((document.location.protocol=='https:') ? "https://sec1.woopra.com" : "http://static.woopra.com");&lt;br /&gt;document.write(unescape("%3Cscript src='" + _wh + "/js/woopra.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;!-- Woopra Code End --&gt;&lt;br /&gt;I'll be posting much more often in the coming weeks and months.  For those of you that still haven't deleted me from your RSS feed lists, look for some web application security posts that'll hopefully be informative and inspire some healthy debates.&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-2033598611590746268?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/2033598611590746268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=2033598611590746268' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2033598611590746268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2033598611590746268'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/09/up-next-more-blogging.html' title='Up Next: More Blogging!!'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-6616738764653106671</id><published>2009-06-20T16:12:00.003-04:00</published><updated>2009-06-20T19:41:09.401-04:00</updated><title type='text'>My Response to a Dangerous Idea</title><content type='html'>This post is in response to Jeremiah Grossman's latest entry titled "Legalize It (Hacking GOV and MIL websites)".  Before reading the rest of my post, please read his first, which is &lt;a href="http://jeremiahgrossman.blogspot.com/2009/06/legalize-it-hacking-gov-and-mil-website.html"&gt;here.&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;So to sum it up, such an initiative as the one he has described would be far from free, and I intend to explain my theory within the next few paragraphs.  &lt;br /&gt;&lt;br /&gt;One thing I'd like to state upfront is that I acknowledge similar activities are ongoing as we speak.  I am not taking a naive and utopian view of how this stuff wouldn't happen regardless of whether or not it is legalized or encouraged.  My underlying theme should be interpreted to be that opening this stuff up to the general public from legality and encouragement perspectives may not be the most cost-effective solution afterall, nor the safest, which I will tie up with recommendations for better solutions at the end of this post.  &lt;br /&gt; &lt;br /&gt;So why is this both a dangerous suggestion and an irresponsible one at best?  First, Department of Defense systems aren't Paypal.  They aren't intended to drive profits, but rather intended to support the needs of warfighters.  It really all starts off with understanding the needs of the organizations in question, before making recommendations for what they need.  Unlike Paypal, who can allocate as much funding as possible to tolerate increased loads being placed on their systems (downtime = lost revenue), many groups within the government survive on shoestring budgets, believe it or not.  As someone who has been around the DoD for quite some time in his career, I can attest to the fact that legalizing such behavior would likely require many entities to upgrade their infrastructures to even come close to handling the likely volume of traffic that would be generated.  Every script kiddie, and every researcher trying to make a name for himself, would be throwing tons and tons of traffic at targets that were never intended to handle such a considerable load.  So rather than finding a few holes and smiling at the end of the day, you'll be denying legitimate and in many instances, critical applications, from being utilized for their original intent.  An alternate solution to this would involve tons and tons of red-tape being placed around the initiatives in order to maintain some type of positive control, which in government terms = sucking the value out of the process.  The very first time someone messes up by either testing during off-limit production hours, testing from an alternate source address that isn't registered, or DoS'ing a site, it'll be a real nightmare.&lt;br /&gt;&lt;br /&gt;Secondly, consider what the ramifications would be for both legal and incident handling personnel.  Imagine being an incident handler on an already undermanned team that was already overloaded with say X unique and credible leads to follow per day.  Suddenly, you have X plus a million daily, with most of them being the result of loud and obnoxious traffic generated by automated tools.  So should these groups simply say "ok, its legal...better not investigate this", or should they still do their jobs, which is to determine what may or may not be live and ongoing attacks, or what may or may not be pre-attack probing?  Wouldn't this lead to attack identification efforts being increased exponentially?  If this were to occur, what would be a definite side effect?  INCREASED MANNING REQUIREMENTS!! The last time I checked, adding team members wasn't free.&lt;br /&gt;&lt;br /&gt;Surely it isn't feasible to think that opening up and encouraging pentesting efforts by the general public would be without the risk of questionable entities going above and beyond the "engagement rules" set forth by the respective agencies.  So instead of being able to state with confidence that any incidents that may occur are inherently true incidents, there would be a sudden blurring of what is real and what isn't.  As if it wasn't already borderline impossible to keep up with pre-attack probing and actual attacks in the average security operations center (SOC), it would only get much worse.  The result would not only increase the loads placed on incident handling groups, but also on legal personnel as well.  Each case could have its own set of unique twists and turns based on the type of technology in use, and could quickly become very costly to pursue offenders.&lt;br /&gt;&lt;br /&gt;There are some companies in this world that I'll agree that this type of open environment is well suited for.  Twitter, Facebook, Google's myriad of online services....yes.  These "big 3" are all in existence for the sole purpose of generating revenue.  They are also very homogenous organizations in comparision to the government and DoD, which have very intricate reporting structures both within, and to external agencies as well.  The "big 3" do not deter anyone from accessing them, and never will do so, because they are all profit-driven.  Therefore, it wouldn't make sense to discourage this behavior.  For government systems, it pretty much will never be the intent for the general public to have a want/need to access them.  Public companies encouraging researchers and anyone else in between to test their applications, enable a collaborative community in doing so.   It results in publicity, both good and bad.  Publicity = garners interest.  This is exactly what profit-driven companies want. &lt;br /&gt;&lt;br /&gt;Government systems do not exist for these same reasons.  The information contained within them is often classified or considered "sensitive","for official use", or "secret" and above for a reason.  The collaborative communities putting forth research efforts and pentesting efforts should therefore come from within as well.  Rather than opening pentesting and security initiatives up to the general public, it should be done in a controlled manner, such as paying for the talent to perform the work.  In doing so, the work can be coordinated and optimized, so that testing is not detrimental to critical operations.  My view is that if there is a considerable cost associated either way, it might as well be invested in a way that will ultimately lead to better processes being created internally, vice the same widespread dangerous coding and general lack of security that exists today.  It doesn't make sense to spend a ton of money developing an application, only to place it online and then get knocked over 3 hours later by a script kiddie.  The cleanup efforts are enormous, and the wasted time and resources in fixing bugs that should have been identified in development, is downright sinful.  Bringing the true talent in, and paying for it, could prevent this stuff in the development lifecycle, as well as in pre-deployment testing.  Repeatable processes lead to greater cost savings, as opposed to leaving it in the hands of the unknown and simply hoping for the best.&lt;br /&gt;&lt;br /&gt;I do not disagree with Jeremiah's point that too few organizations within the government have the capability to perform rigorous testing on their applications.  In fact, I praise him for making this point, and reiterating it many times through his blogging, Twittering, and press statements. It is certainly an issue that affects everyone, whether we realize it or not.  You certainly don't have to be a warfighter to benefit from the increased security afforded to the ones keeping us safe day in, and day out. &lt;br /&gt;&lt;br /&gt;-Jack   &lt;br /&gt;&lt;br /&gt;&lt;!-- Woopra Code Start --&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var _wh = ((document.location.protocol=='https:') ? "https://sec1.woopra.com" : "http://static.woopra.com");&lt;br /&gt;document.write(unescape("%3Cscript src='" + _wh + "/js/woopra.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;!-- Woopra Code End --&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-6616738764653106671?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/6616738764653106671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=6616738764653106671' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6616738764653106671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6616738764653106671'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/06/my-response-to-dangerous-idea.html' title='My Response to a Dangerous Idea'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-2016622840362110723</id><published>2009-05-20T01:04:00.003-04:00</published><updated>2009-05-20T01:16:18.180-04:00</updated><title type='text'>CacheSearch Firefox Add-on</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1KoMADiqlzQ/ShORcI1oBhI/AAAAAAAAAB8/er5zUQWWESo/s1600-h/cachesearch.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 163px;" src="http://2.bp.blogspot.com/_1KoMADiqlzQ/ShORcI1oBhI/AAAAAAAAAB8/er5zUQWWESo/s320/cachesearch.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5337769895958939154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;!-- Woopra Code Start --&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var _wh = ((document.location.protocol=='https:') ? "https://sec1.woopra.com" : "http://static.woopra.com");&lt;br /&gt;document.write(unescape("%3Cscript src='" + _wh + "/js/woopra.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;!-- Woopra Code End --&gt;&lt;br /&gt;If you spend a lot of time analyzing content the web application you are testing allows to be cached within the browser, I'd highly recommend giving CacheSearch a try.  Just type in something you hope ISN'T being cached (ie- credentials, account numbers, social security numbers, etc), and hit enter.  This is a really efficient way to test for this class of vulnerabilities.  You can find it &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/11113"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-2016622840362110723?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/2016622840362110723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=2016622840362110723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2016622840362110723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2016622840362110723'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/05/cachesearch-firefox-add-on.html' title='CacheSearch Firefox Add-on'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1KoMADiqlzQ/ShORcI1oBhI/AAAAAAAAAB8/er5zUQWWESo/s72-c/cachesearch.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-2519606650179431112</id><published>2009-05-15T03:00:00.002-04:00</published><updated>2009-05-15T03:08:24.261-04:00</updated><title type='text'>Are Secret Questions Secretly a Good Idea? That's Probably the Only Secret!!</title><content type='html'>&lt;!-- Woopra Code Start --&gt;Passwords aren't going away anytime soon, as much as we all wish they would.  None of the global web single sign-on solutions seem to make any sense, and it isn't exactly cost-effective to issue smart cards and RSA tokens to the masses.  So face it, for at least the foreseeable future, passwords are here to stay.&lt;br /&gt;&lt;br /&gt;So here is the scenario: Users are forced to use extremely complex passwords (12-14 characters, alphanumeric + special characters, no dictionary words, etc)...and what happens? They can't remember their passwords.  They continuously lock their accounts out (if account lockouts are actually in place).  Solution: reset your password by answering a super secret question!! &lt;br /&gt;&lt;br /&gt;While a user's password may have been something funky like vd8#720zS@&amp;amp;#!,9$, a secret question implementation can effectively result in their password being reduced to something as simple as "mom".  Imagine that upon entering a valid username + the answer to the question "Who bakes your favorite pies?", you are greeted with either a full-blown login to the site, or a "change password" prompt?  What we've done is taken a weak approach to securing access to our sites, and have found ways to make it even weaker by adding external functionality that can completely circumvent it.  &lt;br /&gt;&lt;br /&gt;I've read lots of stuff where users are advised to use complex answers rather than stuff that can be easily tied back to them.  So, here is the million dollar question: if a user can't remember their complex passwords, what makes anyone think they'll remember a complex answer to a secret question?&lt;br /&gt;&lt;br /&gt;The point to this rant is to get people to really think hard about how they've implemented the usage of secret questions within their web applications.  If you lock accounts out after 3 failed login attempts, but don't do the same for invalid attempts at answering secret questions (and return an instant login when correctly guessing at an answer), then congrats, you've effectively negated your account lockout policy.  You have put your users at risk, in exchange for something slightly more user-friendly.&lt;br /&gt;&lt;br /&gt;-Jack&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var _wh = ((document.location.protocol=='https:') ? "https://sec1.woopra.com" : "http://static.woopra.com");&lt;br /&gt;document.write(unescape("%3Cscript src='" + _wh + "/js/woopra.js' type='text/javascript'%3E%3C/script%3E"));&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;!-- Woopra Code End --&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-2519606650179431112?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/2519606650179431112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=2519606650179431112' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2519606650179431112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2519606650179431112'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/05/are-secret-questions-secretly-good-idea.html' title='Are Secret Questions Secretly a Good Idea? That&apos;s Probably the Only Secret!!'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-6238912182831348066</id><published>2009-03-21T23:12:00.002-04:00</published><updated>2009-03-21T23:18:59.062-04:00</updated><title type='text'>Horrible Forgotten Password/Secret Question Implementations</title><content type='html'>I've really been giving this a lot of thought recently, and have a few tricks up my sleeves in the coming months.  Although the idea of "secret questions" is flawed to begin with, the implementations themselves are even worse.  Horror stories ranging from questions like "What is your favorite color?", to a lack of eventual lockouts resulting from brute-force guessing, to guessing an answer and being greeted with an instant "reset password" function. &lt;br /&gt;&lt;br /&gt;I am extremely curious to hear some similar horror stories from those of you that read this blog from time to time.  Please feel free to post your experiences with poor secret question implementations. &lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-6238912182831348066?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/6238912182831348066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=6238912182831348066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6238912182831348066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/6238912182831348066'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/03/horrible-forgotten-passwordsecret.html' title='Horrible Forgotten Password/Secret Question Implementations'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-1842506315815297702</id><published>2009-01-22T21:41:00.002-05:00</published><updated>2009-01-22T22:35:34.449-05:00</updated><title type='text'>"But you need to be an authenticated user to do that, so who cares?"</title><content type='html'>How often do we all hear that line from developers (or a similar phrase) who either don't firmly grasp the vulnerabilities that exist within their applications, or from those who are simply too jaded to admit that their code actually contains dangerous bugs?  The purpose of this post is to drive home the fact that gaining authorized access to an application doesn't necessarily have to stem from finding flaws in the authentication or session-handling mechanisms, but can be obtained through perfectly legal ways (sort of).&lt;br /&gt;&lt;br /&gt;So what type of low-tech techniques can we use to gain initial access to an application with minimal work and without raising a single red flag? Even for a site that requires a valid PAID subscription?  Here is a great technique....ready? PAY FOR A SUBSCRIPTION!! If it is a banking application, walk into a bank with $50 and open a checking account.  If it is a porn site, pay for the damn porn!!  Now you have access to all sorts of likely unprotected goodies.&lt;br /&gt;&lt;br /&gt;Once you get inside of the application, what types of things may be easily discovered through passive and seemingly innocent means?  Maybe the session stuff isn't as strong as it seemed at first glance.  Perhaps the session tokens that are issued upon a successful login are 128-bits in length, yet follow a pattern that could only be discovered in a reasonable amount of time by having an actual authenticated session.  Maybe the attacker determines that account lockouts aren't actually implemented, and that he has an unlimited amount of opportunities to slowly brute-force the passwords of other users.  Or, what if he creates multiple accounts and observes that a certain pattern is followed when assigning usernames, even though the usernames themselves are reasonably complex?  These clues would not have been readily available without a valid account, because the application was effective at returning uniform responses for invalid usernames, invalid passwords, and locked accounts....thus making attempts to enumerate accounts futile.&lt;br /&gt;&lt;br /&gt;This simple recon performed with a legitimate account may have very well taken weeks or months (as well as thrown up a ton of red flags) to perform without the account.  Armed with this new knowledge, this same attacker now has the ability to easily get himself access to a dozen or so accounts.  He will use these accounts that do not trace back to him to bombard the soft, chewy center of the application with a ton of attacks...many of which will have a high likelihood at being successful because Mr. Hollywood Developer himself took for granted the fact that someone in this world was slightly more creative than he was.&lt;br /&gt;&lt;br /&gt;Just food for thought......&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-1842506315815297702?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/1842506315815297702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=1842506315815297702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1842506315815297702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1842506315815297702'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/01/but-you-need-to-be-authenticated-user.html' title='&quot;But you need to be an authenticated user to do that, so who cares?&quot;'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-2252636813260881774</id><published>2009-01-19T01:54:00.002-05:00</published><updated>2009-01-19T02:13:56.591-05:00</updated><title type='text'>National Collegiate Cyber Defense Competition</title><content type='html'>Just got home last night from the Mid-Atlantic Regional round of the CCDC.  For those of you that haven't heard of it, check it out &lt;a href="http://www.nationalccdc.org/"&gt;here&lt;/a&gt;.  If you are ever invited to participate, I'd highly recommend it.  It was certainly one of the more personally rewarding experiences I've had in quite some time.  While many in the security field take things for granted or do this line of work solely to feed their families, the students were truly in awe of what was happening before their eyes as we pounded them for 8 hours.   &lt;br /&gt;&lt;br /&gt;Tim and the guys at White Wolf Security hosted the event, and my hat goes off to them for the awesome job they did with the event.  The college students got a mega-dose of reality by seeing what skilled and seasoned attackers were capable of doing to their networks.  It is one thing to learn security in an academic environment, but certainly a completely different ballgame in reality.  It was a very humbling experience for them once shells were getting popped left and right, and services magically began either crashing or getting uninstalled =).  Hopefully this experience sticks with them throughout their careers in the security field, as they will be light years ahead of many of their entry-level peers because of it.&lt;br /&gt;&lt;br /&gt;Looking forward to attacking the other schools next week.  Heading back up to Lancaster, PA with my buds Ken Johnson and Rob Fuller (aka Mubix) to cause even more chaos =)  Hopefully this time around we get more sleep.  Probably not likely though.  We hijacked a conference room at the Marriott for the night and turned it into our very own geek kingdom. &lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-2252636813260881774?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/2252636813260881774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=2252636813260881774' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2252636813260881774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/2252636813260881774'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2009/01/national-collegiate-cyber-defense.html' title='National Collegiate Cyber Defense Competition'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-3799778663087638775</id><published>2008-12-15T18:23:00.000-05:00</published><updated>2008-12-15T21:35:08.970-05:00</updated><title type='text'>Security Predictions for 2009 (most of them suck..mine are better)</title><content type='html'>Its that wonderful time of year again, when all of the big security industry pundits start throwing their predictions around for the upcoming year. Some of them really read like a fortune cookie. "You will find love and happiness in security and in life...and your lucky numbers are 4, 13, 18, 24, 37, and 52." And then some of them are just blatantly obvious, like the projected increase in iPhone &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;malware&lt;/span&gt; hoopla that various SANS members discuss &lt;a href="http://www.sans.edu/resources/securitylab/2009_predictions.php"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What it really boils down to is that another year has gone by, and rather than focus on what has been fundamentally broken for ages, we are all yet again focused on the "new and cool" versus the "old and screwed." Most of the attention has shifted to Ajax-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ified&lt;/span&gt; applications and the Web 2.0 world. Meanwhile, most companies still have broken web-facing Classic ASP and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ColdFusion&lt;/span&gt; applications, begging to be destroyed by anyone with the balls to do it. The new stuff is so much cooler, sure. Ajax apps are much more fun and robust to mess with, sure. Finding innovative new ways to abuse Flash and the plethora of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;RIA&lt;/span&gt; technologies is really cool, sure. Performing a sanity check on that dusty old Classic ASP application, to ensure that your application written in 2001 (which you can't get budgeting approved to re-code and phase out) incorporates the best-practices of 2008/2009...not so cool?&lt;br /&gt;&lt;br /&gt;With all of that said, here is my list of 3 predictions for the web application security industry in 2009. Enjoy!! =)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="font-size:130%;"&gt;&lt;strong style="color: rgb(204, 204, 204);"&gt;1). &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;SQL&lt;/span&gt; Injection and Cross-Site Scripting will not go away.&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;All of the modern frameworks have made significant strides to make &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;SQL&lt;/span&gt; Injection harder for developers without security exposure to screw up and introduce into their applications. There are tons of input validation libraries out there that claim to "cure" everything, including &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;SQLi&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;XSS&lt;/span&gt;. Microsoft has even introduced &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;LINQ&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;SQL&lt;/span&gt; in the 3.5 version of the .Net framework, which makes it even easier to write database code without knowing a damn thing about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;SQL&lt;/span&gt;. So how the hell does this stuff even exist within modern applications? The reason is because developers still don't understand security (yea, newsflash huh). Developers still live in a fantasy world where &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;suppressing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;ODBC&lt;/span&gt; errors and using stored procedures makes them invincible (or at least the book from Microsoft Press told them so). Lots of developers still don't understand why browser input should not be trusted. Most of them have been spoon-fed the awful idea that because they have implemented rigorous client-side Javascript routines to validate and scrub any potentially dangerous input, that they should sleep well at night. If you believe that, then I also know a chick named Sarah who wants your vote in 2012!!&lt;br /&gt;&lt;br /&gt;The lesson to be learned here is that unless we take a step back and look at the underlying problems first before jumping to add layers of complexity and obfuscation on top of them, we will still be talking about these issues in 2015. We can come up with new security frameworks and methodologies daily, and even get up on a soap box every morning to preach the virtues of using them..but in the end, if developers don't truly grasp the underlying concepts, then baking security into the development &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;life cycle&lt;/span&gt; won't cure a damn thing.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong style="color: rgb(204, 204, 204);"&gt;&lt;span style="font-size:130%;"&gt;2). Some new security appliance will be marketed as the Holy Grail.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;Instant gratification is a wonderful thing, especially when it shuts your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;CIO&lt;/span&gt; up and also satisfies your compliance needs. However, it is a terrible thing when we begin to actually buy into the idea that we can fix a problem by throwing hundreds of thousands of dollars at it, all while not actually fixing the problem itself. So now the Mighty Pillars of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;PCI&lt;/span&gt; Compliance say something like "Thou shall blindly throw a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;WAF&lt;/span&gt; (Web Application Firewall) onto thy network and be free of glaring vulnerabilities...and liability."&lt;br /&gt;&lt;br /&gt;I actually find this pretty disturbing, as most rational people should. So not only do we have applications filled with the same holes we've been seeing for years already, but now we throw another layer of complexity on top of it...without fixing the problem!! Does anyone else see an underlying theme forming here?&lt;br /&gt;&lt;br /&gt;Needless to say, in 2009 we will see another "game changing" product marketed to the masses that won't do much aside from setting them back another couple hundred thousand dollars. And it'll make them salivate like dogs while they eagerly await the next big thing to arrive in 2010.....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong style="color: rgb(204, 204, 204);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;3). This won't be the year people start to sweat the small stuff.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;So even when we finally kick the dead horse of input validation so hard that developers start to listen (out of fear for how hard we can really kick), now we have a whole other world of tiny problems that nobody will even come close to caring about. Session tokens will still be set without the 'secure' flag, session identifiers will still be issued without salting them with source addresses and enforcing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;IP&lt;/span&gt; restrictions on their usage, etc. These are the little things that some feel are so low on the priority totem pole that they are a waste of time and resources to address. So, that one tiny little &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;XSS&lt;/span&gt; within one of your authenticated forums....nevertheless certainly dangerous on its own, by neglecting to fix all of the little tidbits of proper session-handling, you've turned something bad into something much worse.&lt;br /&gt;&lt;br /&gt;Little things definitely add up in the security world. Sadly, in this day and age of compliance, most companies are spending so much of their time and financial resources ensuring that they meet the absolute minimum requirements. So much in fact that they actually feel as though anything not deemed a medium or above risk by the respective compliance body that pimps them out, is more of a burden than a necessity.&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-3799778663087638775?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/3799778663087638775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=3799778663087638775' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3799778663087638775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/3799778663087638775'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2008/12/security-predictions-for-2009-most-of.html' title='Security Predictions for 2009 (most of them suck..mine are better)'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8811452281277089336.post-1433958254288036219</id><published>2008-09-19T19:05:00.000-04:00</published><updated>2008-12-15T18:09:48.921-05:00</updated><title type='text'>Proxying Burp through Tor and Privoxy</title><content type='html'>Haven't seen any guides to do this, so I figured I'd write one.  &lt;span style="font-style: italic;"&gt;Note: These steps work on a Fedora box.&lt;/span&gt; If the files are in different places on other flavors, just figure out where they are, and it should be the same process.  This guide also assumes that you have both Tor and Privoxy installed.  If not, you can get &lt;a href="http://www.torproject.org/"&gt;Tor here&lt;/a&gt;, and &lt;a href="http://www.privoxy.org/"&gt;Privoxy here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, setting it up....First, you need to configure your browser to point to Burp for outbound HTTP and HTTPS (8080 is the default port). Then, you need to set your SOCKS proxy to point to your Tor service running on 9050 by default.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1KoMADiqlzQ/SNRHDeg2teI/AAAAAAAAABg/hQ6iaUD7yX4/s1600-h/Firefox+Proxy+Settings.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_1KoMADiqlzQ/SNRHDeg2teI/AAAAAAAAABg/hQ6iaUD7yX4/s320/Firefox+Proxy+Settings.png" alt="" id="BLOGGER_PHOTO_ID_5247897590849517026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The next step is to configure Privoxy to proxy all of its upstream requests to the Tor service running on 9050. In Fedora, the file is /etc/privoxy/config. Use nano (or pico, or whatever editor you want really), and hit control+w (in nano and pico) to bring up a search prompt. Search for "9050", and it should bring you to a commented out line containing:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1KoMADiqlzQ/SNRG-UPrJ7I/AAAAAAAAABY/7cNvjNX5r0M/s1600-h/privoxy.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_1KoMADiqlzQ/SNRG-UPrJ7I/AAAAAAAAABY/7cNvjNX5r0M/s320/privoxy.png" alt="" id="BLOGGER_PHOTO_ID_5247897502193756082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Uncomment the line that forwards to the SOCKS service running on localhost at 9050.&lt;br /&gt;&lt;br /&gt;After you configure Privoxy, you will need to configure Burp to point at Privoxy.  Under the "comms" tab, scroll down a bit until you see the proxy settings option.  Privoxy listens on 8118 by default, so you will use 127.0.0.1 for the host address, and 8118 as the port, as illustrated below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1KoMADiqlzQ/SNRG5ZIDUtI/AAAAAAAAABQ/Kp34p1vzfEI/s1600-h/proxy+settings+for+burp.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_1KoMADiqlzQ/SNRG5ZIDUtI/AAAAAAAAABQ/Kp34p1vzfEI/s320/proxy+settings+for+burp.png" alt="" id="BLOGGER_PHOTO_ID_5247897417604616914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The final step is to fire up the Tor and Privoxy services.  To verify that you are being routed through the Tor network, visit &lt;a href="http://www.blogger.com/www.whatismyip.com"&gt;www.whatismyip.com&lt;cite&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/cite&gt;&lt;cite&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/cite&gt;&lt;/a&gt;.  If you did everything right, your web requests should not reflect your source IP when you access the server.&lt;br /&gt;&lt;br /&gt;Enjoy =) If you can't get it working, post your comments or issues and I'll walk you through it.&lt;br /&gt;&lt;br /&gt;-Jack&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("UA-12332480-2");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8811452281277089336-1433958254288036219?l=jack-mannino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jack-mannino.blogspot.com/feeds/1433958254288036219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8811452281277089336&amp;postID=1433958254288036219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1433958254288036219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8811452281277089336/posts/default/1433958254288036219'/><link rel='alternate' type='text/html' href='http://jack-mannino.blogspot.com/2008/09/proxying-burp-through-tor-and-privoxy.html' title='Proxying Burp through Tor and Privoxy'/><author><name>Jack Mannino</name><uri>http://www.blogger.com/profile/00934466872781213241</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_1KoMADiqlzQ/R8kP9eu6vXI/AAAAAAAAAAM/k7DJCw1mUQQ/S220/me_paris.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1KoMADiqlzQ/SNRHDeg2teI/AAAAAAAAABg/hQ6iaUD7yX4/s72-c/Firefox+Proxy+Settings.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
