<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Collin Greene on Medium]]></title>
        <description><![CDATA[Stories by Collin Greene on Medium]]></description>
        <link>https://medium.com/@collingreene?source=rss-10f95cca79fa------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*0_gJlVtTBPAcYRV86DExcw.jpeg</url>
            <title>Stories by Collin Greene on Medium</title>
            <link>https://medium.com/@collingreene?source=rss-10f95cca79fa------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 18:23:56 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@collingreene/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Fixing security bugs]]></title>
            <link>https://medium.com/@collingreene/fixing-security-bugs-5b5172adadf0?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/5b5172adadf0</guid>
            <category><![CDATA[software]]></category>
            <category><![CDATA[application-security]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Wed, 01 Nov 2017 16:06:06 GMT</pubDate>
            <atom:updated>2017-11-05T17:43:00.561Z</atom:updated>
            <content:encoded><![CDATA[<p>This article covers some ways I’ve gotten security bugs fixed inside a company.</p><p>Finding bugs is a technical problem, fixing them is a human problem.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_BwvJ29x6Xjvfe7qPPdQ3w.jpeg" /></figure><p>Hacking: Exciting. <br>Finding bugs: Exciting. <br>Fixing those bugs: Not exciting.</p><p>The thing is, the finish line for our job in security is getting bugs fixed¹, not just found and filed. Doing this effectively is not a technology problem. It is a communications, organizational² and psychology problem.</p><p>A decade ago on the Microsoft vista pentest we³ found some bugs. Then as we worked to get those bugs fixed we got a lot of excuses back: “but that would be illegal”, “just a denial of service”, “ but its a perf hit”, “but the victim would have to click on it”. This happened enough times that a bingo board of the excuses took shape:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*K0yTAnnySa2VYU1ihgWi3Q.jpeg" /><figcaption>Fixing involves excuses. The excellent full story is <a href="https://twitter.com/JohnLaTwC/status/708310208334802944">here</a>.</figcaption></figure><p>The point is it is sometimes a hassle to get security bugs fixed and this isn’t a new problem. It is common for critical security flaws are fixed quickly but the long tail of lower-priority issues (that should still be fixed!) to drag on.</p><p>Over the years I’ve gotten a lot better at getting these type of issues fixed.</p><p>Things that worked for me:</p><ol><li>Is prioritization correct? Bad security teams think everything is critical, in which case nothing is. Everything in security, engineering, and life is tradeoffs. Don’t push for something that doesn’t matter. Preserve your credibility by not causing security fatigue for engineering teams.</li><li>Is the bug clear? All security bugs should cover:<br>* Impact.<br>* How the issue works.<br>* Clear next steps. Either a fix or what to investigate next. <br>* Why you assigned it to that person.<br>* What your expectation is for the assignee.<br><a href="https://whitton.io/">Jack</a>, <a href="http://philippeharewood.com/">Philippe </a>and <a href="https://stephensclafani.com/">Stephen</a> are all examples of clearly communicating complicated security issues.</li><li>Explain why security matters. I believe all security tasks should link to something explaining <em>why</em> security matters, how fixing discrete bugs is part of that and a clear-eyed description of what might happen if it doesn’t get fixed. Doing this well you draw the reader into the world and mission of the security team.</li><li>Empathize. Can you imagine the stress of getting a critical security bug in your code? The stress is multiplied through a murky and accusatory bug report demanding swift action. That is again multiplied when English is not your first language. Show empathy through clear, concise, non-emotional bug reports free of FUD. Empathy also means using the right medium for the person: email, slack, IRC, note on a diff or just showing up at their desk. Respecting different people’s workflows matters.</li><li>Nagging or guilting engineers into fixing stuff is miserable for both sides. If you go down this path consider carefully the “obvious” solution of automating it via a bot that pings tasks. I’ve had good luck with it but only when done carefully. Sometimes it really is as simple as reminding someone a few times and they get to work on it.</li><li>Escalating to a manager. Not ideal but not as “bad” as it feels to most people. Often the manager has the most context on priorities and who has free time on their team. Good to ensure email has more the tone of “I want to make sure you are aware of this and I would like it to be fixed” not “engineer $foo has dropped this task n times”.</li><li>Fixing them yourself is great sometimes, non-optimal most times. Any security team should be capable of this but it but exercised sparingly. Doing the work feeds the lesson back into the people its most relevant to, and needed for.</li><li>A/B test wording. “you are in the small minority of people who have not fixed your open security bug” is a line that works wonders. I stole this wording from an <a href="http://www.npr.org/templates/transcript/transcript.php?storyId=522758910">excellent planet money episode</a> about a/b testing the best words to get people to pay their taxes in Italy. It works for our field too.</li><li>Visualization, leaderboards, gamification. I’ve seen <a href="https://medium.com/uber-security-privacy/uber-bug-bounty-promotions-1ed7648cf6b0">security debt graphs</a> to nudge senior leaders to invest in security work, leaderboards to praise the teams fixing their bugs the fastest and many types of gamification “fix 10 bugs, get a t-shirt!”. All can work or fail depending on the composition of your engineering org and values of your company. <a href="https://twitter.com/swagitda_">Kelly</a> pointed me to this whole area of social proof and it sounds promising but I’ve personally only tried the above.</li><li>Not a tactic but an observation: Sometimes you can actually see the <a href="https://en.wikipedia.org/wiki/K%C3%BCbler-Ross_model">5 stages of grief happen</a> with a security bug: Anger → Denial → Bargaining → Depression → Acceptance. It can be an emotional thing to be told your code put the company and its users at risk and I’ve seen this happen many times: first teams are mad, then try to argue down the severity, then slow to fix then finally thank us for improving their code. Not much to do here except to recognize there is some emotion with this and try to not take it personally.</li><li>Cupcakes. All else fails try cupcakes. Upon the 1 year birthday of bugs we delivered cupcakes to the desks of 30 or so engineers who had not fixed longstanding bugs assigned to them. About a third of them had their issues fixed within the next two weeks. SUCCESS.</li></ol><h3>Conclusion</h3><p>I’ve seen many exasperated security people lean too heavily on the moral component of fixing security bugs (its the right thing to do, how could you not!) and be surprised when that plea doesn’t resonate.</p><p>Security is an inherently cross-functional discipline. We have to work across many teams of varying qualities and enthusiasm for security. The social engineering to getting bugs fixed can be complex so hopefully these notes help.</p><h4>Footnotes</h4><p>1. Not just found and fixed but prevented for next time, eradicated across the codebase, well-understood by the company. I am using “fixed” as shorthand.</p><p>2. This all assumes you work at a company that cares about security and has the appetite to fix things but just isn’t getting it done. I’ve written about this with more color around how to start from zero <a href="https://medium.com/starting-up-security/who-fixes-that-bug-d44f9a7939f2">here</a>.</p><p>3. I played a small part here finding a few bugs and mostly heard this story from others after walking past this board.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5b5172adadf0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Equifax + 3rd party code != security]]></title>
            <link>https://medium.com/@collingreene/equifax-3rd-party-code-security-9002b91fa927?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/9002b91fa927</guid>
            <category><![CDATA[application-security]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Sat, 16 Sep 2017 02:25:06 GMT</pubDate>
            <atom:updated>2017-09-16T02:34:34.194Z</atom:updated>
            <content:encoded><![CDATA[<p>It appears the Equifax breach hinged on an unupdated <a href="https://investor.equifax.com/news-and-events/news/2017/09-15-2017-224018832">Apache Struts vulnerability</a>. Lots of security people are talking about lots of different dimensions of this breach but one portion is the (in)secure use of 3rd party code. The security of 3rd party code is an area of application security that doesn’t get much attention so I want to highlight it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aawR66nnzXB2um86yuFoxA.jpeg" /></figure><h4>Background</h4><p>Reasonable engineers rely on the work of others. This work comes from other parts of the company, the open source community or a commercial product. Once used this code is part of the surface area of your codebase and from a security perspective must be treated just like homegrown code.</p><p>The problem is when security vulnerabilities come to light in this code, they don’t get updated. It is not top of mind that this stuff requires ownership, updating and care.</p><p>This can be especially important when, by lines of code, 30, 50, or 80% of your codebase is actually 3rd party code.</p><p>This is basic patching. OWASP calls it <a href="https://www.owasp.org/index.php/Top_10_2013-A9-Using_Components_with_Known_Vulnerabilities">insecure components</a> but the generalized form of it goes by the name “vulnerability management”. Vulnerability management exists across many areas: servers, routers, laptops, ipads on the conference rooms, etc.</p><h4>How to fix</h4><p>I’ve found this breaks down into 3 problems:</p><ol><li>Inventory — knowing all your inventory of code, systems, etc for which security vulns might be found and need updates.</li><li>Vulnfeed — A feed of security updates against your inventory.</li><li>Remediation — A process to actually patch those things. Usually requires human intervention but may be as easy as apt-get update.</li></ol><p>My first cut of solving this problem was writing a script to guesstimate if something was a 3rd party package. If it was, get its name and version and stuff it in a csv (inventory). Then download the cvedb, compare (vulnfeed) and if there was a hit send an email to whomever checked the package and ask them to update (remediate). Then auto-nag them if they didn’t within a few days.</p><p>The biggest variable here is how difficult it is to inventory your code: sometimes 3rd party code is packaged and nicely versioned, other times its a tarball of code checked into source control. The trickiest case is when someone downloads the source code to openssl, pulls out range of lines from a file and copy/paste it into your codebase. There are commercial solutions that can help if the code is nicely packaged, I’ve had luck with <a href="https://www.sourceclear.com/">src:clr</a>.</p><p>To operationalize this system involves stuffing it in a script, automatically rebuilding the inventory index and most importantly figuring out how to effectively motivate others to fix the findings in a way that scales.</p><p>On motivation one trick that helped was careful wording. Our first few waves of emails about updating were ignored. We eventually found success with the wording: “you are currently in the very small minority of people who have not updated yet”. I stole this idea from <a href="http://www.npr.org/templates/transcript/transcript.php?storyId=522758910">Italian tax collectors who after lots of a/b testing found it to be the most successful</a>.</p><h4>Prioritization</h4><p>Starting from scratch on this problem can be intimidating. There are so many things to patch but what to go for first? Some ideas here: CVE score, the closeness of the system/code to the edge/internet, the areas that have owners, the areas that touch sensitive data.</p><h4>Conclusion</h4><p>Like with all security work the biggest obstacle is apathy. Pointing to this Equifax breach should help motivate other to help fix this grungy but important problem.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9002b91fa927" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Some parts of being a great Engineer]]></title>
            <link>https://medium.com/@collingreene/some-parts-of-being-a-great-engineer-d42ee9cf3b95?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/d42ee9cf3b95</guid>
            <category><![CDATA[self-improvement]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Wed, 26 Jul 2017 22:10:00 GMT</pubDate>
            <atom:updated>2017-07-26T22:16:27.239Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*tSOUQec3QP0hOSnvEERxPQ.jpeg" /></figure><p>Much ink has been spilled in <a href="http://redmonk.com/fryan/2016/12/12/on-the-myth-of-the-10x-engineer-and-the-reality-of-the-distinguished-engineer/">defining</a>, or <a href="https://a16z.com/2014/07/30/the-happy-demise-of-the-10x-engineer/">refuting</a>, the concept of the 10x engineer.</p><blockquote>A concept sometimes used in Silicon Valley to describe an engineer that is 10x more productive than an average engineer although the 10x metric is figurative.</blockquote><p>10x or not there are definitely patterns in how strong engineers approach their work and career. Generalizing these patterns into lessons illuminates how to be a better engineer, and employee.</p><p>This draws from my experience as an programmer, team lead, manager and manager of managers.</p><h4>Be reliable</h4><p>This is the bedrock of you as an employee. Be careful when you say yes to something because you must now see it through to completion. You must be trustable.</p><h4>Results &gt; effort</h4><p>Broadly companies care about problems solved well, not how. If you built it yourself, used a library or purchased something doesn’t matter. The company also doesn’t care how hard you worked, only what got done. The job doesn’t end at code, you must own the outcome even if means putting on a project manager hat.</p><h4>Solve problems; look for more.</h4><p>Your job is not only to solve X, its to be closer to the problem of X than anyone else in existence and surface further work. Over time this leads to a stack of better solutions. Problems are not strictly technical, maybe the new engineer training sucks and you could improve it.</p><h4>Embrace ambiguity</h4><p>Taking on increasingly ill-defined problems is something generally entrusted only to the most senior engineers. When your manager says “go figure out X” understand the problem, articulate a solution and get to work on it.</p><h4>Make others better.</h4><h3>Peter Seibel on Twitter</h3><p>How to be a 10x engineer: help ten other engineers be twice as good.</p><p>Lead the meeting when no one steps up to. Be the person to collect all opinions on something to inform a group decision. Email some persons manager when they did awesome work. Question why we are doing X if it feels suboptimal. Take on interns. Make your weaker teammates better. This effort betters you, them, and the company.</p><h4>Do scalable things</h4><p>Mentoring, documentation, training, libraries, <a href="https://techcrunch.com/2009/09/29/facebook-spreads-its-crowdsourced-translations-across-the-web-and-the-world/">crowdsourcing translation</a> instead of hiring hundreds of translators. All these things make your entire team, company and sometimes world better in an efficient way.</p><h4>Don’t be silent about your work</h4><p>I did a lot of cool work for years that I made no effort to tell anyone about. I expected people to organically find and be impressed by it but that rarely happened. Don’t be an obnoxious self-promoter but tell people about your work so they know and may use it. Its unlikely they will seek it out themselves</p><h4>Impact drives promotions</h4><p>I <a href="https://hackernoon.com/manager-lingo-for-engineers-4c8db00c4bb1">define impact</a> as the mark you leave on a problem, area, field, company, world, etc. Work that solves big problems is what you want to optimize for.</p><h4>Don’t avoid discomfort</h4><p>Human beings naturally hate conflict. If a timeline will slip or an idea didn’t work the worst thing you can do is hide it from your manager. This applies in many areas: don’t like a teammate? Feel underpaid? Other team blocking you on something? Got the flu? All of these are tractable problems once your manager knows.</p><h4>Communicate well</h4><p>Huge topic. Many of us love details which can make succinct writing hard. Know your audience and only include the essentials. The worlds best email gives context and a decision along with a suggestion for that decision. I view communication in 3 vectors/audiences — up (to my boss), across (to my peers), and down (to anyone who reports to me).</p><p>Clear and precise language is a critical tool for us. My favorite illustration of this is <a href="https://medium.com/@jeremyjkun/habits-of-highly-mathematical-people-b719df12d15e">when a mathematician spends a week defining the word “context</a>” for a room of people who all held different definitions</p><blockquote>In the event, I never got beyond the first content slide. But not because I was thrown out. Rather, the rest of the session was spent discussing what appeared on that one slide…[I was told afterwards,] “That one slide justified having you on the project.”</blockquote><blockquote>So what had I done? Nothing really — from my perspective. My task was to find a way of analyzing how <strong>context</strong> influences data analysis and reasoning in highly complex domains involving military, political, and social contexts. I took the oh-so-obvious (to me) first step. <strong>I need to write down as precise a mathematical definition as possible of what a context is</strong>. It took me a couple of days…I can’t say I was totally satisfied with it…but it was the best I could do, and it did at least give me a firm base on which to start to develop some rudimentary mathematical ideas.</blockquote><blockquote>The fairly large group of really smart academics, defense contractors, and senior DoD personnel spent the entire hour of my allotted time discussing that one definition. The discussion brought out that all the different experts had a different conception of what a context is — a recipe for disaster.</blockquote><h4>Conclusion</h4><p>These are far from comprehensive but they have helped me in coaching others and becoming a better employee myself.</p><p>There is lots of good stuff in this arena, some of my favorites are: <a href="http://www.effectiveengineer.com/">The Effective Engineer</a>, <a href="http://shop.oreilly.com/product/0636920056843.do">The Managers Path</a> especially the part about “how to be managed”. Jackson Gabbard’s <a href="https://www.youtube.com/watch?v=ZgdS0EUmn70">interview videos</a>. Anything by <a href="http://randsinrepose.com/">rands</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d42ee9cf3b95" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Feedback loops]]></title>
            <link>https://medium.com/@collingreene/feedback-loops-bc4775a62120?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/bc4775a62120</guid>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Wed, 12 Jul 2017 06:01:05 GMT</pubDate>
            <atom:updated>2017-07-12T06:01:05.656Z</atom:updated>
            <content:encoded><![CDATA[<p>I’ve worked in three big areas in my career: building software, securing software and leadership.</p><p>Each area has a different sized feedback loop.</p><p>Building software has a very tight and immediate feedback loop. Get an idea, try to build the idea, fix/tweak/improve then finally ship. At the micro level its write feature, fix bug, get it worked, commit the diff and go home for the day. This all feels fantastic!</p><p>Security is essentially about understanding how software and systems work together better than the creators so you can find, and fix, security weaknesses in the aggregate system. The work here is simple enough: understand everything. And then be paranoid. The feedback loop for here takes longer, months of groundwork to understand all the moving parts¹, a deep code audit of a given subset from which you draw both bugs and lessons to apply to the rest of the codebase.</p><p>Leadership/management has the longest feedback cycle of all. This is because we as human beings are way more complex than computers. Turning an employee from a low performer into an exemplary one takes time. Months and years. It takes trust and the understanding of motivations, goals, circumstances, skills, etc, etc, etc. But when it happens I’ve found it the most rewarding of all 3.</p><p>Footnotes</p><ol><li>It takes a lot of groundwork to understand how all the technical parts of a company fit together. I found I didn’t feel 100% until 6 or 9 months in to any security job.</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bc4775a62120" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Outcomes > bugs]]></title>
            <link>https://medium.com/@collingreene/outcomes-bugs-bde01f25057?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/bde01f25057</guid>
            <category><![CDATA[application-security]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Wed, 28 Jun 2017 21:48:58 GMT</pubDate>
            <atom:updated>2017-07-05T04:19:48.122Z</atom:updated>
            <content:encoded><![CDATA[<p>A reasonable mission for an application security team is to find and fix security bugs in a codebase. I held this view at one point and I now think this is subtly wrong and instead we actually care about outcomes, not bugs.</p><p>A bug is a discrete flaw in software.</p><p>An outcome is a bug + how it was used. How did the story of the bug end? Did it lead to a breach or was it snuffed out early in development. Similar to medicine doctors ultimately care about the outcome of a patient, the type of cancer and how early it was found are footnotes to that story.</p><p>For example: an RCE bug that no one has found is less important than an XSS that is being actively exploited to harm users.</p><p>Imagine we have perfect knowledge of all the bugs in existence in our codebase¹, the breakdown might look like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/694/1*9-w0qfKy4l7htKuodCv6gQ.png" /></figure><p>From this our goal is clear: Shift left².</p><p>The more bug outcomes that land in leftmost buckets the better for security.</p><p>We can view all security efforts through this lens.</p><ul><li>Static analysis run at checkin time moves a bug that would be found externally to found internally.</li><li>Design reviews catch bugs before they become code.</li><li>A bug bounty program provides a pressure release for bugs that might otherwise be exploited.</li><li>Good security training moves bugs into prevented</li></ul><p>None of these ideas are new, the <a href="https://www.microsoft.com/en-us/sdl/default.aspx">SDL</a> and manufacturing are all about surfacing flaws earlier in the process. Its worth explicitly calling out — most bugs will be found in these latter stages once software is shipped because that is the stage most software spends most of its life in: Shipped and running. This does not mean you suck at security.</p><p>Our goal isn’t the impossible one of building flawless software, it is to strike the right balance of risk vs effort. Outcomes are the best proxy I’ve found to model this for my teams.</p><p>Next article — lessons learned from using this model to drive product security work.</p><p>Footnotes</p><ol><li>This is of course sadly impossible.</li><li>This is not novel, sdlc, manufacturing, etc all talk about this</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bde01f25057" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Manager lingo for engineers]]></title>
            <link>https://medium.com/hackernoon/manager-lingo-for-engineers-4c8db00c4bb1?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/4c8db00c4bb1</guid>
            <category><![CDATA[engineering-mangement]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Thu, 25 May 2017 18:37:19 GMT</pubDate>
            <atom:updated>2017-07-19T16:40:31.891Z</atom:updated>
            <content:encoded><![CDATA[<p>A while back I changed from an engineer to a manager.</p><p>With that came a whole new set of manager-y words that I had previously nodded along with but not deeply understood. This article is my definition of these concepts in a way engineer-Collin would understand.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q7e_aXAXV3qBRc3fOHoPjQ.jpeg" /></figure><h4>Preamble</h4><p>Engineers build¹ a $thing. Managers build the team that builds a $thing.</p><p>Everything revolves around each groups respective focus, including the vocabulary.</p><p>Conversation around software engineering is rooted in detail: scale, design, trade-offs. The manager-side equivalent are more abstract but revolve around: team direction, health, output, etc.</p><p>As an engineer I remember hearing these terms primarily during planning or review season.</p><h4>Vision</h4><p>Vision is the version of the future you want.</p><h4>Roadmap</h4><p>The near-term manifestation of the vision, made concrete. Comprised of projects or tasks.</p><h4>Mission</h4><p>The underlying purpose of a team, project or company. Doubles as a heuristic to determine if a given project/goal/task should fall to a given team. It defines the edges of your team or problemspace.</p><h4>Impact</h4><p>Impact is the effect you and your team have on the company/world. Revenue, cpu cycles, engineer time saved, monthly active users, data breaches avoided, etc. The magic of software is that high impact projects are often scalable.</p><h4>Influence</h4><p>The ability to excite, convince or motivate. Often used in service of selling a vision because big ideas are rarely achievable solo. An engineer convincing other engineers to join an effort is utilizing influence.</p><h4>Vision++</h4><p>Vision is one of the most interesting concepts, and one I struggled with, so it gets extra attention.</p><p>Again, vision is articulating the version of the future you believe should exist. It is often a big bold sort of pronouncement.</p><p>Vision is inherently anti-detail. This is because it defines the ends, not the means. This can be uncomfortable for someone who likes to wallow in the details, or who immediately starts thinking of ways something could go wrong.</p><p>Vision must be succinct. Like a joke if you have to explain it it has failed.</p><p>By the end of the decade, we will put a man on the moon.<br>– John F. Kennedy, 1962</p><p>A computer on every desk and in every home.<br>– Bill Gates, 1980</p><p><a href="https://plus.google.com/+RipRowan/posts/eVeouesvaVX">We will sell our excess compute capacity</a><br> — Jeff Bezos</p><p>These are audacious ideas that are easy to get excited about, possible to define success for and succinct.</p><p>Vision is useful even if its unachievable, ex: We ship zero security bugs, ever.</p><p>Vision by no means has to come from the manager, it often bubbles up especially with some encouragement.</p><p>A clear vision has strong downstream benefits:</p><blockquote>Seeing a SpaceX employee assembling a large part, he stopped to ask him, “What is your job at SpaceX?” He answered, “The mission of SpaceX is to colonize Mars. In order to colonize Mars, we need to build reusable rockets because it will otherwise be unaffordable for humans to travel to Mars and back. My job is to help design the steering system that enables our rockets to land back on earth. You’ll know if I’ve succeeded if our rockets land on our platform in the Atlantic after launch.” The employee could have simply said he was building a steering system for landing rockets. Instead, he recited the company’s entire “Mission-to-Metrics” framework.</blockquote><p>— <a href="https://blog.ycombinator.com/the-second-job-of-a-startup-ceo/">Ali Rowghani</a></p><p>Vision is a top level concept, from which roadmap, projects, tasks all derive.</p><p>The most interesting instances of vision, and the most difficult, is recognizing a future that has never existed. Its much easier to bring an idea you have seen work to your current company. E.x: Facebook had a great built system, lets get something similar here.</p><h4>Conclusion</h4><p>As an engineer your manager owes you their own definitions of the above concepts with plenty of examples to illustrate. To further understand your manager check out <a href="http://www.elidedbranches.com/2015/10/notes-on-startup-engineering-management.html">some</a> <a href="http://firstround.com/review/this-90-day-plan-turns-engineers-into-remarkable-managers/">good</a> <a href="http://larahogan.me/blog/manager-levels/">writing</a> on the topic.</p><p>These are just my definitions for these terms right now, I am sure they will drift and change over team. I would be interested in hearing how others think about these.</p><h4>Footnotes</h4><ol><li>Build is a stand in verb for conceive, design, build, ship, maintain and are generally responsible for</li></ol><figure><a href="http://bit.ly/HackernoonFB"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0hqOaABQ7XGPT-OYNgiUBg.png" /></a></figure><figure><a href="https://goo.gl/k7XYbx"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Vgw1jkA6hgnvwzTsfMlnpg.png" /></a></figure><figure><a href="https://goo.gl/4ofytp"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gKBpq1ruUi0FVK2UM_I4tQ.png" /></a></figure><blockquote><a href="http://bit.ly/Hackernoon">Hacker Noon</a> is how hackers start their afternoons. We’re a part of the <a href="http://bit.ly/atAMIatAMI">@AMI</a> family. We are now <a href="http://bit.ly/hackernoonsubmission">accepting submissions</a> and happy to <a href="/service/mailto:partners@amipublications.com">discuss advertising &amp; sponsorship</a> opportunities.</blockquote><blockquote>If you enjoyed this story, we recommend reading our <a href="http://bit.ly/hackernoonlatestt">latest tech stories</a> and <a href="https://hackernoon.com/trending">trending tech stories</a>. Until next time, don’t take the realities of the world for granted!</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*35tCjoPcvq6LbB3I6Wegqw.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4c8db00c4bb1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/manager-lingo-for-engineers-4c8db00c4bb1">Manager lingo for engineers</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Business risk for security engineers]]></title>
            <link>https://medium.com/@collingreene/business-risk-for-security-engineers-2cfb1fddc822?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/2cfb1fddc822</guid>
            <category><![CDATA[application-security]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Tue, 02 May 2017 20:49:53 GMT</pubDate>
            <atom:updated>2017-05-02T20:49:53.117Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>There are these two young fish swimming along and they happen to meet an older fish swimming the other way who nods at them and says “morning boys, hows the water?”</blockquote><blockquote>And the two young fish swim on for a bit and eventually one of them looks over at the other and goes, “what the hell is water?”</blockquote><p>David Foster Wallace, <a href="https://www.youtube.com/watch?v=8CrOL-ydFMI">2005</a></p><p>In security, risk is that stuff all around us whether we realize it or not. This article is my take on how businesses think about risk and how that affects our domain of information security.</p><p>On day 1 hour 1 of my first security job I mainly cared how gnarly a given security bug I found was. The more complex and dangerous the better. On a good day I might have considered how the bug would affect the larger application I was auditing but not much beyond that.</p><p>In time my perspective broadened and I recognized that the root cause of insecurity is both technical and <em>organizational.</em></p><p>We must ask what the engineering organization that built the software is optimizing for? Features, performance, cheap engineering talent, comprehensibility, security, are all competing concerns. Which prevails? The company that houses the engineering organization decides that. And the company makes makes those decisions based off what it sees as risks and opportunities.</p><p>So lets explore how and why companies make these business risk decisions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TLUcqyPZ6bqU6DrA50lubQ.png" /></figure><h4>Business risk</h4><p>CEOs think of our security work as <a href="https://en.wikipedia.org/wiki/Risk_management">risk management</a>.</p><p>From the perspective of a CEO your company faces many simultaneous risks — A fire in a manufacturing plant, a supplier going out of business, a boycott of your product or your mail spool being put on the internet must all be considered. Every risk carries a <a href="https://www.mitre.org/publications/systems-engineering-guide/acquisition-systems-engineering/risk-management/risk-impact-assessment-and-prioritization">probability of happening and impact</a> to the company.</p><p>CEOs have the difficult job of judging and prioritizing these risks, often with imperfect information. High-impact risks are called “risk factors” and are disclosed by public companies in their 10-K reports. Reading them as a security engineer illuminates what the company is most worried about, it is essentially a map.</p><p><a href="https://corporate.target.com/annual-reports/2013/10-k/10-K-Part-I/Item-1A-Risk-Factors">Here</a> is what Target reported after their breach in 2013</p><blockquote>The data breach we experienced in 2013 has resulted in government inquiries and private litigation, and if our efforts to protect the security of information about our guests and team members are unsuccessful, future issues may result in additional costly government enforcement actions and private litigation and our sales and reputation could suffer.</blockquote><p><a href="https://www.sec.gov/Archives/edgar/data/1326801/000132680116000043/fb-12312015x10k.htm#sF56954A5C1B90DC1CA64F3139F51DF5C">Here</a> are some of Facebooks:</p><blockquote>Security breaches and improper access to or disclosure of our data or user data, or other hacking and phishing attacks on our systems, could harm our reputation and adversely affect our business.</blockquote><p>Pretty straightforward. Most 10-ks you have to read between the lines. What else is in here…</p><blockquote>If we are not able to maintain and enhance our brand…our business and financial results may be harmed.</blockquote><blockquote>Our business is subject to complex and evolving U.S. and foreign laws and regulations regarding privacy, data protection…otherwise harm our business.</blockquote><blockquote>Our products and internal systems rely on software that is highly technical, and if it contains undetected errors or vulnerabilities, our business could be adversely affected.</blockquote><p>We can take Facebooks risks point by point and see why they need top notch security, comms and legal teams working on these issues.</p><p>Or look at this one:</p><blockquote>The size of our user base and our users’ level of engagement are critical to our success.</blockquote><p>This realization about the business shows why Facebook has the worlds best team at limiting spam and keeping users from being mean to one another. Users wont stick around when they have a miserable time.</p><p>Looking at Snaps <a href="https://www.sec.gov/Archives/edgar/data/1564408/000119312517029199/d270216ds1.htm#rom270216_2">S-1 filing</a></p><blockquote>Our products are highly technical and…may contain undetected software bugs, security vulnerabilities…Spectacles, as an eyewear product, is regulated by the U.S. Food and Drug Administration, or the FDA, and may malfunction in a way that physically harms a user.</blockquote><p>A security flaw that blinds someone is a bad thing.</p><blockquote>If our security is compromised … our users, advertisers, and partners may cut back on or stop using our products and services altogether, which could seriously harm our business.</blockquote><p>Getting hacked: also bad.</p><p>From these 10-Ks we get a clear sense of the high-level business risks. Such risks can define both how we prioritize and tell the story of our work on the security team.</p><h4>Example risk profiles</h4><p>Companies are all different and thus their individual risks are all different as well. Lets think through the infosec risks of three theoretical businesses</p><p><strong>SockCo</strong>. They sell socks online. Pretty standard company. Makes money from the 10% margin of buying socks wholesale and selling them online.</p><p><strong>SockBook</strong>. A social network for sock lovers. Makes money from advertisers paying to show users ads as they talk about socks.</p><p><strong>MtSox</strong>. An online cryptocurrency exchange. Makes a profit whenever trades happen and takes a cut. Holds the sockCoins on behalf of others like a bank.</p><p>The risk profiles of these companies are quite different.</p><p><strong>SockCo risk profile — </strong>SockCo worries about consumer sock sentiment, fewer people buying socks, keeping good connections with sock factories, differentiating themselves from other sources of socks via unique design, cost, bad press harming sales, etc.</p><p>The infosec-related risks here are: That someone DoSses their website. That a bug in code harms the ability to order. That someone is phished and their corporate network is taken over for ransom. That credit card fraud levels rise to harmful levels.</p><p>SockCo getting hacked would be a bad day but it would probably not kill the company. Their 10-Ks risk factors would reflect this.</p><p><strong>Sockbook risk profile</strong> — Sockbooks revenue is directly tied to the engagement of its users. So SB must not only protect itself as a business from infosec risk but it must engender a place users want to spend time, which means it protects user experience, no spam, no graphic images and nothing that would drive people away.</p><p>Sockbook getting hacked would also probably not end the company as it enjoys the <a href="https://en.wikipedia.org/wiki/Network_effect">network effect</a>. This effect is an attribute of the business but shapes how to evaluate the risk of technical security issues. Spam and abuse become first-class problems in ways they wouldn’t be at another company.</p><p><strong>MtSox risk profile </strong>— mtSox must care a lot about information security as it holds the precious sockCoins on behalf of its users. One security flaw allows sockCoin theft and the entire company sinks.</p><p>This is the very rare case of the venn diagram of “infosec risk” and “business risk” overlapping 100%. Credit to <a href="https://medium.com/u/cf87128497cb">Ryan</a> for observation. See his <a href="https://magoo.github.io/Blockchain-Graveyard/">Blockchain graveyard</a> for examples of bitcoin companies blowing up as the result of a security issue.</p><p>So every company in the world has its own unique risk profile. Even within companies different sections are more or less risky, its bad if someone hacks my gmail account but much worse if they control the autonomous car that is driving me.</p><h4>Conclusion</h4><p>Understanding business risk lets you make better local security decisions and tie your work to the larger risks of the business.</p><p>Different companies have different risks and tolerances for those risks. Infosec risk is one among many.</p><p>Risk can be ignored, transferred, reduced (mitigated) or eliminated (remediate). The correct answer to risk is not always to eliminate it and it is our job to know the appropriate action given the many variables.</p><p>The advice to the me of a decade ago is to set down vi, nmap and IDA for a moment to read a 10-k because to make the best tradeoffs when evaluating security we must understand vastly more than just security.</p><p><strong>References</strong></p><ol><li>Dan Geer recognized all this and explained it. In <a href="http://www.ists.dartmouth.edu/docs/geerslides.pdf">2002</a>. Of course.</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2cfb1fddc822" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[From the Ground Up: Building Product Security at Uber]]></title>
            <link>https://medium.com/uber-security-privacy/from-the-ground-up-building-product-security-at-uber-59c824eab41c?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/59c824eab41c</guid>
            <category><![CDATA[security]]></category>
            <category><![CDATA[bug-bounty]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Tue, 31 Jan 2017 01:41:36 GMT</pubDate>
            <atom:updated>2017-01-31T01:48:09.255Z</atom:updated>
            <content:encoded><![CDATA[<p>Because software has inherent vulnerabilities, smart security teams build protections inside and outside their code to help prevent exploits. The goal is not only to limit the impact of an unknown vulnerability, but to prevent future vulnerabilities from ever being written into code. To do this effectively, security must be present and involved throughout the entire development process. This is the purpose of the product security team at Uber.</p><p>We see security as a subset of quality. Alongside performance, usability, maintainability, correctness and cleanliness, security should be a quantitative consideration when writing software. At Uber, we have found success by following three key principles.</p><p><strong>Solve for Yes</strong></p><p>Culture is an important tool for improving security. It’s easy for security teams to simply say “no.” It’s much harder to figure out how to safely get to yes, but this is the job of a good product security team. At Uber, we challenge historical assumptions about what can be secured. Establishing a reputation of saying “no” with your product and engineering colleagues kills a lot of potentially work and weakens your influence with these teams.</p><p>We committed to a culture where other teams aren’t afraid of security. We don’t allow shaming. Instead, we work hard to make something both possible and safe. This attracts a lot of inbound work for our product security team, builds strong relationships with product engineers, and forces us to think critically about short and long-term challenges — — and new ways to solve them.</p><p>As a result of these efforts, the product security team Uber is a welcomed advocate throughout the development process. Before a single line of code is written we investigate the impact new builds will have on current architecture and ensure it’s not inherently impossible to secure.</p><p>During this conceptual phase, we ask questions such as:</p><ul><li>What data will be stored and/or used by a new service, feature, or product?</li><li>Where is input validation done? How and where is authorization enforced?</li><li>Is the software directly accessible to external parties, e.g. vendors, partners, public, etc.? If so, how will they access it and what controls are in place?</li></ul><p>We work to identify hard tradeoffs that might weaken our security posture and help product teams make safer decisions. Catching issues at this stage means potential flaws are never written to begin with, and solidifies the partnership between security and engineering.</p><p><strong>Follow the Bugs</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/269/1*1Z7jlMkB3swoNlvQsW4ptQ.png" /></figure><p>Each bug is a lesson, a story of mistakes and a valuable data point in finding potentially larger problems. It is our job as the product security team to follow bugs back to their root and understand the deeper cause.</p><p>Software is written in stages and our security team gets involved in each one because different types of vulnerabilities can be introduced during different stages. As a result, different security strategies and processes are used during each stage to identify as many bugs as we can before code ships into production. The early we find a bug, the easier it is to fix it with minimal impact on subsequent stages. This is good for both security, and cost.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*PzRPYu-eqcUP-kc-." /></figure><p><em>Phases of software development at Uber and some of the corresponding security tools for detecting bugs. Our goal is to identify potential security issues in the earliest stage possible.</em></p><p>Here’s a brief outline of what our security efforts typically look like during each stage:</p><ul><li><strong>Design</strong> — We guide development away from insecure decisions through reviewing the design. This is the best stage to snuff out a bug before it ever becomes code.</li><li><strong>Build</strong> — Code exists but it is in flux. Finding &amp; fixing individual mistakes in the code through advice and awareness. The product security team serves as consultants to product teams, answering questions like “is this secure?” or “how should I write this?” and proactive outreach.</li><li><strong>Ship</strong> — A thorough review by the product security team, if appropriate before launch. Our product security team holds itself to an SLA and we work hard to keep launches on track.</li><li><strong>Live</strong> — Software spends most of its lifetime in this stage, so our security efforts don’t stop at launch. In addition to ongoing internal tests, we also invite external researchers to audit our code in production through the <a href="https://hackerone.com/uber">Uber bug bounty program</a>.</li></ul><p>Every bug is a lesson — an indicator of inexperience or misunderstanding of how something works. This is true of the engineers writing code and us on the security team looking for bugs. Over time, these bugs provide a long tail of tactics to help improve our code, which we can enforce on new projects.</p><p>At Uber, we shamelessly follow leads from sources that routinely produce bugs — a specific part of the codebase, abstraction, or team. This helps us formalize bug patterns to catch them before they go live. Sometimes it’s a grep-based checkin rule, static analysis rule, or a specific individual needing more training. Either way, by working back from each bug, we accumulate customized tools and processes tailored specifically to the problematic characteristics of our code.</p><p><strong>Measure &amp; Prove Your Worth</strong></p><p>Security can be difficult to quantify because you cannot measure an unknown. The most common perception, even within our own industry, is that security is expensive insurance and a cost center. In terms of measurement, this approach leads security professionals to ask abstract questions like, is one critical bug worth 20 low priority bugs, or if we look harder for bugs and find more is that a good thing?</p><p>At Uber, we decided to look at measurement differently and track the effort required to prevent bugs from being created in the first place. We believe security is more than stopping bad things from happening — it should be valued for its ability to unlock new types of business by providing a trusted foundation. The ultimate goal is to contribute to both the technical and financial health of the company.</p><p>We know bugs are more expensive to fix the longer they go through the development process before they’re found, and so, identifying security issues in earlier stages of the process benefits both cost and safety. This is one way we prove our worth to the business — demonstrating how our security team moves these fixes “up the chain” to earlier stages of development, ultimately preventing many bugs from ever being created.</p><p>Even bugs found in live code lead to improvements earlier in the process, maybe a static analysis rule, better education, or a library. Additionally, our bug bounty program compliments internal discovery of bugs in the wild. All of these signals can be used in reporting our value to the business by tying directly to the impact on development.</p><p><strong>How it Works in Practice</strong></p><p>Here’s an example of how the approach above plays out. <a href="https://hackerone.com/reports/125980">Jinja2 RCE </a>was reported by a security researcher through our bug bounty program in April 2016. After fixing the bug, we built a code commit rule that looks for any patterns like this in our codebase and alerts the product security team for manual review. This effectively moved detection of this bug earlier in the development process. We also modified the jinja2 engine to take out the ability to run python code inside an expression. Now, even if a developer mistakenly writes this bug again, it is defanged.</p><p><strong>Security by Default</strong></p><p>As more and more bugs move toward the best end of the spectrum, we prove our value to the business in a way they understand — — development time, risk, and cost. It also puts us in a position of strength for conversations about resources, tooling, and product strategy.</p><p>We settled on these guiding principles to help keep Uber’s code clean and secure. They also let the builders at our company build new and better experiences for users while achieving increasingly more security by default.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=59c824eab41c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/uber-security-privacy/from-the-ground-up-building-product-security-at-uber-59c824eab41c">From the Ground Up: Building Product Security at Uber</a> was originally published in <a href="https://medium.com/uber-security-privacy">Uber Privacy &amp; Security</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Product security primitives]]></title>
            <link>https://medium.com/@collingreene/product-security-primitives-e15ec129395?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/e15ec129395</guid>
            <category><![CDATA[bug-bounty]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[application-security]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Fri, 27 Jan 2017 17:09:06 GMT</pubDate>
            <atom:updated>2017-01-28T18:22:25.023Z</atom:updated>
            <content:encoded><![CDATA[<p>Working in software security for a while I’ve recognized a few core ideas that have helped guide the efforts of a product security team. I want to share these primitives and the opinions built upon them as essentially how I think about product security.</p><p>All of these ideas are seen through the lens of product/application security but may apply to other aspects of information security as well.</p><h4>Purpose</h4><p>Taking a simplified view companies hire a security team to prevent them from being hacked. Product security is responsible for the portion of that goal surrounding the security of the codebase. This is largely done through finding, fixing and preventing security vulnerabilities (“bugs”).</p><p>All security efforts are inherently asymmetric. The defenders have to win everywhere, every day but an attacker only has to win once.</p><p>Put together these two truths suggests that the ultimate goal is to eliminate, and forever prevent, all security flaws in the codebase. Lets call this goal “perfect security”. It is unquestionably an aspirational goal but for definitions of purpose it feels like a good target to aim for.</p><h4>What is bug (<a href="https://www.youtube.com/watch?v=K5G1FmU-ldg">baby dont hurt me</a>)</h4><p>Everything in product security revolves around bugs. Bugs are really a proxy for “insecurity” and perhaps more accurately a “observed example of insecurity”.</p><p>Every bug is a story and a lesson. The story describes a failure of some kind that can teach us something. Taken in aggregate security bugs localized to a feature, a framework, a pattern, a team or a codebase are big blinking arrows saying “look here”.</p><h4>Bug fates</h4><p>I believe the fate of a security bug is what we really care about. This is the core idea that guides lots of work.</p><p>Myspace had many XSS bugs before (and after) the <a href="https://en.wikipedia.org/wiki/Samy_%28computer_worm%29">samy worm</a> but the difference was how the bug affected the company and its users. Simply tallying the raw number of XSS bugs wouldn’t reflected the impact of Samy’s finding.</p><p>Since quantity and severity don’t fully capture the impact we need to describe the <em>outcomes</em>.</p><p>These outcomes can be broadly categorized as:</p><ul><li>Exploited — This bug was used for harm</li><li>Unfound — The bug still lurks, unfound by us or others</li><li>Found — We become aware of this issue and fixed it<br>- Found outside<br>- Found by security team in code<br>- Found by security team pre-code</li><li>Prevented — A bug that is unlikely to happen again<br>- Mitigated<br>- Prevented</li></ul><p>Exploited is the worst outcome for a bug and prevented is the best. Because it needs a name we can call this idea “outcome buckets”. I feel like many of us security practitioners think of things this way. Lets look at each outcome in detail</p><p><strong>Exploited</strong> — This is bad. This is Gmail being <a href="https://en.wikipedia.org/wiki/Operation_Aurora">hacked by China</a>, this is the Tunisian government <a href="https://www.theguardian.com/world/2011/feb/25/twitter-facebook-uprisings-arab-libya">finding dissidents</a> via lack of https. For more examples OWASP has a corpus of <a href="https://docs.google.com/spreadsheets/d/1xZPAw1uCdLqDz8F_Vz57DRvCNJTcCnPgtG7P-yeloUc/edit#gid=1">a decade of security flaws</a> some of which were exploited.</p><p><strong>Unfound</strong> — Unfound by anyone is not a good state as it is essentially a race between your internal security team and the entire world. Unfortunately if you are unaware of a lurking security flaw there is nothing you can do about it, a core part of <a href="https://medium.com/@collingreene/why-product-security-is-hard-52e3f73178">why security is hard</a>. Thus a primary goal for a product security team is to excavate security bugs turning them from unfound to found. Basically for bugs in this bucket there is only one action you can ever take, find the bug.</p><p><strong>Found</strong> — There is a lot of range in this bucket and I believe sub-buckets inside it.</p><ul><li>Pre-code — before the insecure idea or design becomes code</li><li>Code — Found as the software is being written or before its shipped outside the company to the greater world.</li><li>Live/Externally — Found once the software is live often by someone outside the company like when through a bug bounty program</li></ul><p>While finding is always good, finding it in earlier stages of the software development lifecycle is better because as the bug is cheaper to fix, safer for users and easier for an engineering team. This is the essence of the <a href="https://www.microsoft.com/en-us/sdl/">SDLC</a>.</p><p>So our goal when finding a bug is considering how we could have found it earlier in the development process while accepting the reality that software is built in stages and as such security involvement will differ by stage. Design reviews, more or better security audits, external audits, static analysis and other tooling all apply to this bucket.</p><p><strong>Prevented</strong> — Preventing a bug is the best possible outcome. The canonical example is sql injection being prevented by parameterized queries but I like to take it further and believe truly preventing a class of bugs includes:</p><ul><li>Library/framework support, like an ORM or parameterized queries</li><li>Enforcement/safeguards in the form of commit hooks or tooling to enforce the secure patterns and surface non-blessed ways of doing things to the security team.</li><li>Training &amp; Culture to explain and emphasize what the secure path is and why taking it is important.</li></ul><p>Prevention encompasses two separate ideas: mitigation and prevention. Mitigation I see as reducing the damage if an issues does occur while prevention would be reducing the likelihood of an issue ever happening in the first place.</p><h4>Bug success</h4><p>This is pretty abstract stuff, lets look at an example.</p><p>Imagine we have perfect knowledge of all the bugs in existence for a month of security work. The breakdown might look like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/694/1*9-w0qfKy4l7htKuodCv6gQ.png" /></figure><p>From this our goal is clear — move the maximum number of bug outcomes in the direction of “prevented”. Anytime we can find a bug before someone outside the company its a win, anytime we can find a security bug at all before its exploited for real harm is a win, etc.</p><p>The primary goal of a security team is to move <strong>every</strong> bug outcome in to prevented. This is our “perfect security” defined earlier.</p><p>We can view all security efforts through this lens. Static analysis run at checkin time moves a bug that would be found externally to found internally. Design reviews catch bugs before they become code. A bug bounty program reduces the likelihood of bugs in Exploited by providing a pressure release and moves Unfound into the Found category, its a two for one.</p><p>Its worth explicitly calling out — most bugs will be found in these latter stages once software is shipped because that is the stage most software spends most of its life in: Shipping and running. This does not mean you are bad at product security.</p><h4>Bug reality</h4><p>Like all models this one is imperfect. Key weaknesses:</p><ul><li>Its impossible to measure unfound bugs.</li><li>Its difficult to honestly measure prevented bugs.</li><li>You don’t always know when a bug is exploited.</li></ul><p>As practitioners the exact outcome we are striving for, preventing a bug from being written in the first place, is really hard to measure. That sucks. The best I’ve found is comparing the before/after to approximate the impact of fixing a class of bugs. The best example of this I have seen is <a href="https://www.blackhat.com/docs/us-16/materials/us-16-Weston-Windows-10-Mitigation-Improvements.pdf">this work from the Microsoft security team</a> where you can see the zero day flaws decrease over time due to investment.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tHlUyBKUGQeYAAFK7TXLqA.png" /></figure><p>My categorization ignores plenty of subtlety, what if a bug is found but unfixed. Prevented but regressed. Unfound but unexplainable, etc. In general though I’ve found it a useful way to view things.</p><p>Another big weaknesses is we have been treating all security bugs as equal to one another, which is obviously wrong. The most accurate answer is a blog post long but for now know that some bugs are more meaningful than others and <a href="https://www.first.org/cvss">CVSS</a> with an emphasis on the environmental factors is a decent approximation of importance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/1*2DjpOav7NykNZzUy2GUh-A.jpeg" /></figure><h4>Opinions</h4><p>If we accept all these primitives then I will share a few opinions that have guided how I’ve invested effort among the security teams I’ve lead in the past. These is all about optimizing the effort expended for maximum “security” in return.</p><p><strong>Opinion</strong> — Shifting bugs from a less to more favorable outcome bucket is always good, but some jumps are more impactful than others. Known -&gt; prevented is the biggest win possible. Wiping out XSS with CSP in block mode is the rare tangible, easily explainable, clear-cut security work</p><p><strong>Opinion</strong> — Unknown -&gt; Known is huge. All security work relies on a base layer of awareness and visibility into what is going on at the company. Awareness project X is shipping, awareness a known shaky team is actively working on a sensitive codebase, awareness or what is going is a prerequisite to prioritizing what to look at and diving deeper into concerning areas. It might not feel like “real work” to meet with PMs and managers to ensure you are aware of their roadmap but it is.</p><p><strong>Opinion</strong> — Keep a balance of finding and fixing. Product security is unique in that we essentially make our own work. If we look harder for flaws it generates projects we could complete to then prevent those flaws. Keep in mind a balance between finding more work and completing what is already on your plate</p><p><strong>Opinion</strong> — Measurement. Meaningful metrics are very hard. The two most useful over time to me have been:</p><ul><li>% of “really bad” bugs vs total security bugs</li><li>Classes of bugs going down with investment to prevent them</li></ul><p>There are many ways to twist metrics and in security its especially hard, Are more bugs a good thing or a bad thing? If its turning unfound into found then its good. If its simply writing more bugs overall its bad. Explaining a security team’s work to higherups can be hard, accentuating the positive, or the <a href="https://medium.com/@collingreene/infosec-underpinnings-f5bc4a913a37#.noj21d55j">security as enablement</a>, has worked for me at times.</p><p>Some good metrics for a product security team itself:</p><ul><li>Inbound vs outbound-initiated security work</li><li>Engineer-hours saved with a new library or framework</li><li>How long critical bugs were live before fix</li></ul><p><strong>Opinion </strong>—As a group of primarily engineers we discount the usefulness of nontechnical solutions. Socializing the impact of a bug across the company is a powerful and underused tool to improve security. Its like a seasoning, don’t overdo it but I believe most orgs are not doing it enough. I was surprised that one of the most powerful things I’ve done for security is compiling and sharing a pseudo-monthly newsletter of interesting, exciting or representative security bugs we have found in our travels through the codebase. It gets the company talking, and thinking, about security.</p><h4>Conclusion</h4><p>There is a lot of Fear, Uncertainty and Doubt when it comes to security. This FUD is unfortunate because it obscures, enhances, trivializes or otherwise misrepresents the true risk of a security issues and thus how best to battle and remedy them.</p><p>This is a way of thinking about security that has been useful for me but its one of many ways, I wrote it primarily to hear how other people think about this topic. Gathering this understanding of how to approach security optimally means we can work towards higher quality software which will lead to a safer world.</p><h4>Thanks</h4><p>Much thanks to <a href="https://twitter.com/Magoo">Magoo</a>, <a href="https://twitter.com/jimio">Jim O’Leary</a>, <a href="https://twitter.com/galgara">Hudson</a>, Robert Fly and <a href="https://twitter.com/frgx">Dev</a> for talking over these ideas. Be sure to see <a href="https://appseccali2017.sched.com/event/8wQx/securityselfie-size-up-your-appsec-program-with-new-metrics?iframe=no&amp;w=100%&amp;sidebar=no&amp;bg=no">Jim’s talk</a> about ideas like this at <a href="https://2017.appseccalifornia.org/">Appsec California 2017.</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e15ec129395" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why product security is hard]]></title>
            <link>https://medium.com/hackernoon/why-product-security-is-hard-52e3f73178?source=rss-10f95cca79fa------2</link>
            <guid isPermaLink="false">https://medium.com/p/52e3f73178</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[appsec]]></category>
            <category><![CDATA[application-security]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Collin Greene]]></dc:creator>
            <pubDate>Sun, 15 Jan 2017 23:30:37 GMT</pubDate>
            <atom:updated>2017-07-14T21:21:29.573Z</atom:updated>
            <content:encoded><![CDATA[<p>When software security flaws can <a href="https://www.wired.com/2016/09/top-shelf-iphone-hack-now-goes-1-5-million/">fetch over a million dollars</a> it is useful to examine why building secure software is so difficult.</p><p>All our work in security rests on these difficulties and this article aims to collect the specifics inherent in application security so followup articles can offer solutions. It is not meant to be defeatist.</p><h4>Writing software is hard</h4><p>Securing software is hard but even writing it somewhat correctly is difficult. Finding security bugs in a subcategory of finding bugs in software.</p><p>Software in a <a href="http://www.nytimes.com/2016/09/09/business/dealbook/hedge-fund-and-cybersecurity-firm-team-up-to-short-sell-device-maker.html">pacemaker</a>, a <a href="http://articles.latimes.com/1999/oct/01/news/mn-17288">satellite</a> or a <a href="https://gcn.com/Articles/1998/07/13/Software-glitches-leave-Navy-Smart-Ship-dead-in-the-water.aspx">battleship</a> should probably be perfect but for the vast majority of software time to market, more features and other goals understandably come first.</p><p>We know it is possible for us as human beings to write flawless software, it is just really hard and often not prioritized. An example optimized towards quality/zero bugs is <a href="https://rhodecode.com/blog/70/code-review-learn-how-nasa-codes">NASA and the curiosity rover</a> which is appropriate because the cost of a bug in that software is very high. <a href="https://cr.yp.to/djbdns.html">Djbdns</a> is another.</p><h4>Unknown unknowns</h4><blockquote>Testing shows the presence, not the absence of bugs</blockquote><p>— Dijkstra in <a href="http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1969.PDF">1969 report</a></p><p>If we knew all the vulns we were searching for it would obviate the need to look in the first place.</p><p>The number of vulns in the 100,000 lines of code comprising service $foo is unknown ahead of time. The universe doesn’t give us a yardstick to measure against, there is no “you have found 16/27 vulns, keep looking!” progress bar.</p><p>While writing bug free code is difficult enough if we managed to accomplish that it its even harder yet to <em>prove</em> that it is bug-free. <a href="https://en.wikipedia.org/wiki/Proving_a_negative">Proving a negative</a> is hard. NIST has <a href="http://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8151.pdf">an awesome paper</a> about security + formal verification which is the state of the art in this area.</p><p>The absence of evidence is not necessarily <a href="https://medium.com/starting-up-security/evidence-of-absence-8148958da092">evidence of absence</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*vdxi4hAOdF8WdBB6iID7GQ.jpeg" /><figcaption>The potential flaws in this bridge are unknown until we seek them out</figcaption></figure><h4>Inconsistent</h4><p>Even the process of measuring the full set of human-findable bugs in a codebase differs between who is looking, how, and <a href="http://blogs.discovermagazine.com/notrocketscience/2011/04/11/justice-is-served-but-more-so-after-lunch-how-food-breaks-sway-the-decisions-of-judges/#.WD_gvrIrL9Q">what they had for lunch</a>.</p><p>I ran a trial at Facebook where 10 security consulting companies audited the same code. Code my team had already carefully audited. All 10 found the same pool of shallow bugs (about half) but the remaining issues were all over the map, including one we ourselves had missed. Each person brings their own long tail of security knowledge to bear. Contrast this with something like performance (another attribute of “quality” in software) where it is trivial to measure progress.</p><p>Inconsistent is another way to say probabilistic. Like mining for gold finding security bugs involves expending effort for a possibility, not a promise, of discovery.</p><h4>Opposition</h4><p>We don’t always get to know who our competition is.</p><p>It is not FUD to say nations may actively <a href="https://en.wikipedia.org/wiki/Operation_Aurora">be trying</a> to do this.</p><p>I sometimes think of product security as a race. A race for us to find the lurking security flaws before someone else does who would use them for harm.</p><h4>Weighting</h4><p>Consistently judging the severity of a vuln is hard. We have this discussion every week at work when rewarding bug bounty issues. Is one really good account takeover bug worth 10 less critical bugs? 100?Its hard to agree on this among any two security engineers but is a prerequisite to optimizing time investment in the areas that will benefit holistic “security” the most. <a href="https://www.first.org/cvss">CVSS</a> is currently the best answer we have to grade the criticality of bugs.</p><h4>Constraints</h4><p>Despite best efforts and big budgets we will never be able to deeply review the whole codebase for security flaws. If we somehow did by the time we completed it will have changed significantly. This isn’t fatalism but fact.</p><h4>Timeline</h4><p>Security is often on a longer timeline than you expect. Its possible to harm security with a decision whose result wont arrive for years.</p><blockquote><a href="http://bit.ly/Hackernoon">Hacker Noon</a> is how hackers start their afternoons. We’re a part of the <a href="http://bit.ly/atAMIatAMI">@AMI</a>family. We are now <a href="http://bit.ly/hackernoonsubmission">accepting submissions</a> and happy to <a href="/service/mailto:partners@amipublications.com">discuss advertising &amp;sponsorship</a> opportunities.</blockquote><blockquote>To learn more, <a href="https://goo.gl/4ofytp">read our about page</a>, <a href="http://bit.ly/HackernoonFB">like/message us on Facebook</a>, or simply, <a href="https://goo.gl/k7XYbx">tweet/DM @HackerNoon.</a></blockquote><blockquote>If you enjoyed this story, we recommend reading our <a href="http://bit.ly/hackernoonlatestt">latest tech stories</a> and <a href="https://hackernoon.com/trending">trending tech stories</a>. Until next time, don’t take the realities of the world for granted!</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=52e3f73178" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/why-product-security-is-hard-52e3f73178">Why product security is hard</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>