{"id":31852,"date":"2019-10-31T21:43:30","date_gmt":"2019-10-31T18:43:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/strah-i-nenavist-devsecops\/"},"modified":"2019-10-31T21:43:30","modified_gmt":"2019-10-31T18:43:30","slug":"strah-i-nenavist-devsecops","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/strah-i-nenavist-devsecops","title":{"rendered":"Fear and Loathing in DevSecOps","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>We had 2 code analyzers, 4 dynamic testing tools, our own crafts, and 250 scripts. It's not that everything was needed in the current process, but since I started implementing DevSecOps, it\u2019s necessary to see it through to the end.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/bcd78cc4963e397ecbaa18ffd43ce05e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/user\/narkos\">Source<\/a><\/noindex>. Character authors: Justin Roiland and Dan Harmon.<\/i><\/p>\n<p>What is SecDevOps? And DevSecOps? What are the differences? Application Security \u2014 what is it about? Why doesn\u2019t the classical approach work anymore? The answers to all these questions are known. <b>Yuri Shabalin<\/b> from\u00a0<b>Swordfish Security. <\/b>Yuri will answer everything in detail and analyze the challenges of transitioning from the classical Application Security model to the DevSecOps process: how to properly integrate secure development into the DevOps process without breaking anything, how to go through the main stages of security testing, which tools can be used, how they differ, and how to configure them correctly to avoid pitfalls.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"sYMWGw5Lyu4\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/sYMWGw5Lyu4\/hqdefault.jpg\" alt=\"Play video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\n<b>About the speaker:<\/b> <b>Yuri Shabalin \u2014 <\/b>Chief Security Architect at <b>Swordfish Security<\/b>. He is responsible for implementing SSDL, for the overall integration of application analysis tools into a unified development and testing ecosystem. 7 years of experience in information security. He has worked at Alfa-Bank, Sberbank, and Positive Technologies, which develops software and provides services. A speaker at international conferences such as ZerONights, PHDays, RISSPA, OWASP.<\/p>\n<h2>Application Security: what is it about?<\/h2>\n<p>\n<b>Application Security<\/b>\u00a0\u2014 this is a branch of security that focuses on application security. It does not relate to infrastructure or network security, but specifically to what we write and what developers work on \u2014 it concerns the flaws and vulnerabilities of the application itself.<\/p>\n<p>Direction <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/ru-ru\/ef\/ef6\/modeling\/designer\/advanced\/edmx\/ssdl-spec\">SDL or SDLC<\/a><\/noindex>\u00a0\u2014 <b>Security Development Lifecycle<\/b>\u00a0\u2014 developed by Microsoft. The diagram shows the canonical SDLC model, whose main task is to involve security at every stage of development, from requirements to release and production deployment. Microsoft realized that there were too many bugs in production, they were becoming more frequent, and something needed to be done about it, leading to the proposal of this approach, which became canonical.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/466773b9a5bd355419fa1d6d1ddbca66.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApplication Security and SSDL are focused not on detecting vulnerabilities, as is commonly believed, but on preventing their emergence. Over time, the canonical approach by Microsoft has been improved and developed, resulting in a deeper and more detailed approach.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/58d3e6aadd30594c018940bcb2a8248b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe canonical SDLC is detailed in various methodologies - OpenSAMM, BSIMM, OWASP. The methodologies differ, but overall, they are similar.<\/p>\n<h3>Building Security In Maturity Model<\/h3>\n<p>\nI am most fond of <b>BSIMM<\/b>\u00a0\u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bsimm.com\/\">Building Security In Maturity Model<\/a><\/noindex>. The foundation of the methodology is the division of the Application Security process into 4 domains: Governance, Intelligence, SSDL Touchpoints, and Deployment. Each domain includes 12 practices presented as 112 activities.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/ae0bbfd0dde335af886282672ed92367.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEach of the 112 activities has <b>3 maturity levels<\/b>: initial, intermediate, and advanced. All 12 practices can be studied by sections, selecting important aspects for you, understanding how to implement them, and gradually adding elements such as static and dynamic code analysis or code review. You draft a plan and work calmly within the framework of implementing the selected activities.<\/p>\n<h2>Why DevSecOps<\/h2>\n<p><\/p>\n<blockquote><p>DevOps is a comprehensive process where security must be considered.<\/p><\/blockquote>\n<p>\nInitially <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DevOps\"><b>DevOps<\/b><\/a><\/noindex> was expected to conduct security checks. In practice, the number of security teams was significantly lower than it is today, and they acted not as participants in the process but as a control and oversight body that imposes requirements and checks product quality at the end of the release. This is a classic approach where security teams were separated from development and did not participate in the process.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/1c5958fb123313308bdd92c5471c44da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe main problem is precisely that information security is set apart from development. Typically, it is some sort of security perimeter with 2-3 large and expensive tools. Every six months the source code or application arrives for review, and annual <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%98%D1%81%D0%BF%D1%8B%D1%82%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD%D0%B8%D0%B5\">pentests<\/a><\/noindex>. All of this leads to delays in production timelines, and a huge number of vulnerabilities from automated tools are dumped on the developer. It is impossible to sort and fix this because the results from the previous six months have not yet been dealt with, and now there is a new batch.<\/p>\n<p>In the course of our company's work, we see that security in all sectors and industries understands that it's time to step up and align with development in the same wheel - in\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D0%B8%D0%B1%D0%BA%D0%B0%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8\"><b>Agile<\/b><\/a><\/noindex>. The DevSecOps paradigm fits perfectly into agile development methodology, ensuring involvement, support, and participation in every release and iteration.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/cf258bd7efc82ff27787b5029cf2f945.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Transition to DevSecOps<\/h2>\n<p>\nThe most important word in the Security Development Lifecycle is <b>\"process\"<\/b>You need to understand this before thinking about purchasing tools.<\/p>\n<blockquote><p>Simply incorporating tools into the DevOps process is not enough\u2014it's important to have interaction and understanding among the participants of the process.<\/p><\/blockquote>\n<p><\/p>\n<h3>People are more important than tools.<\/h3>\n<p>\nOften, the planning of a secure development process starts with the selection and purchase of a tool and ends with attempts to integrate the tool into the existing process, which often remain just attempts. This leads to unfortunate outcomes, as every tool has its own features and limitations.<\/p>\n<p>A common scenario is when the security department selects a good, expensive tool with extensive capabilities and approaches developers to integrate it into the process. But it doesn't work\u2014it turns out the process is structured in a way that the limitations of the purchased tool do not fit into the current paradigm.<\/p>\n<blockquote><p>First, describe the outcome you want and how the process will look. This will help clarify the roles of the tool and security in the process.<\/p><\/blockquote>\n<p><\/p>\n<h3>Start with what is already being used.<\/h3>\n<p>\nBefore purchasing expensive tools, take a look at what you already have. Every company has security requirements imposed on development, there are checks, pentests\u2014why not transform all this into a clear and convenient format for everyone?<\/p>\n<p>Usually, requirements are a paper tome that sits on a shelf. There was a case when we visited a company to review processes and asked to show the security requirements for the software. The specialist responsible for this searched for a long time:<\/p>\n<p><i>\u2014 Right now, somewhere in the notes, there was a path to where this document is located.<\/i><\/p>\n<p>In the end, we received the document after a week.<\/p>\n<p>For requirements, checks, and other matters, create a page, for example, on\u00a0<b>Confluence<\/b>\u00a0\u2014 this is convenient for everyone.<\/p>\n<blockquote><p>It's easier to reformat what already exists and use it as a starting point.<\/p><\/blockquote>\n<p><\/p>\n<h3>Use Security Champions. <\/h3>\n<p>\nUsually, in a medium-sized company with 100-200 developers, there is one security person who performs multiple functions and physically cannot check everything. Even if they try their hardest\u2014they cannot review all the code generated by development alone. For such cases, the concept of <noindex><a rel=\"nofollow\" href=\"https:\/\/www.owasp.org\/index.php\/Security_Champions\"><b>Security Champions<\/b><\/a><\/noindex>.<\/p>\n<blockquote><p>Security Champions are individuals within the development team who are invested in the security of your product.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/c67728db4a6e34407da199387eba2bb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA Security Champion is both an entry point into the development team and a security evangelist.<\/p>\n<p>Typically, when a security expert joins the development team and points out a bug in the code, they receive a surprised response:<\/p>\n<p><i>\u2014 And who are you? I\u2019m seeing you for the first time. Everything is fine for me \u2014 my senior colleague approved it during the code review, and we're moving on!<\/i><\/p>\n<p>This is a common scenario because developers trust senior colleagues or team members they work with closely and frequently in code review much more. If instead of a security expert, a Security Champion points out a bug and its consequences, their word carries more weight.<\/p>\n<p>Developers also know their code better than any security expert. For someone with at least 5 projects in a static analysis tool, it\u2019s usually hard to remember all the nuances. Security Champions are familiar with their product: what interacts with what and what to prioritize\u2014they are more effective.<\/p>\n<p>So, consider implementing Security Champions to expand the influence of the security team. It\u2019s also beneficial for the champion: professional development in a new area, broadening technical horizons, enhancing technical, managerial, and leadership skills, and increasing market value. They serve as your \u2018eyes\u2019 in the development team.<\/p>\n<h2>Testing Stages<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%9F%D0%B0%D1%80%D0%B5%D1%82%D0%BE\">The 20 to 80 paradigm<\/a><\/noindex>\u00a0states that 20% of efforts yield 80% of results. These 20% represent application analysis practices that can and should be automated. Examples of such activities include static analysis \u2014 <b>SAST<\/b>, dynamic analysis \u2014 <b>DAST,<\/b> and\u00a0<b>open source monitoring<\/b>. I will elaborate on the activities and the tools, along with the specific challenges we typically encounter when implementing them into the process and how to do it correctly.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/db720e0879cdd1ed818461ffb5f927da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Key Issues with Tools<\/h3>\n<p>\nI will highlight the relevant issues that all tools face, which require attention. I will discuss them in detail to avoid repetition.<\/p>\n<p><b>Long analysis times. <\/b>If it takes 30 minutes from commit to production for all tests and builds, then checks for information security will take a day. No one is going to slow down the process like that. Keep this in mind and draw conclusions.<\/p>\n<p><b>A high level of False Negatives or False Positives. <\/b>All products are different; they use various frameworks and coding styles. Different codebases and technologies can show varying levels of False Negatives and False Positives. So, take a look at what's specific in\u00a0<b>your<\/b> company and for <b>your<\/b> applications that will yield good and reliable results.<\/p>\n<p><b>No integrations with existing tools<\/b>. Look at the tools from the perspective of integrations, considering what you are already using. For example, if you have Jenkins or TeamCity, check the integration of the tools specifically with that software, not with GitLab CI, which you do not use.<\/p>\n<p><b>Lack of or overly complex customization. <\/b>If the tool has no API, then what is its purpose? Everything that can be done in the interface should be available through the API. Ideally, the tool should have the capability to customize checks.<\/p>\n<p><b>No product development roadmap. <\/b>Development is always evolving; we constantly use new frameworks and features, rewriting old code in new languages. We want to be assured that the tool we purchase will support new frameworks and technologies. Thus, it is essential to know that the product has a genuine and proper <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B4%D0%BE%D1%80%D0%BE%D0%B6%D0%BD%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0\">Roadmap<\/a><\/noindex> roadmap for development.<\/p>\n<h3>Process features<\/h3>\n<p>\nIn addition to the features of the tools, consider the peculiarities of the development process. For instance, interfering with development is a typical mistake. Let's look at what other features need to be taken into account and what the security team should pay attention to.<\/p>\n<p>To avoid derailing development and release timelines, establish <b>different rules<\/b> and various <b>show stoppers\u00a0<\/b>\u2014 criteria for halting the build process when vulnerabilities are present \u2014 <b>for different environments.<\/b>For example, we understand that the current branch is heading to the development stage or UAT, which means we do not stop and do not say:<\/p>\n<p><i>\u2014 You have vulnerabilities here; you\u2019re not going any further!<\/i><\/p>\n<p>At this stage, it is essential to inform developers that there are security issues that need attention.<\/p>\n<p><b>The presence of vulnerabilities is not an obstacle for further testing.<\/b>whether manual, integration, or manual testing. On the other hand, we need to improve the product's security somehow, and ensure that developers do not overlook the findings of the security team. So sometimes we do this: when a release goes to the development environment, we simply notify the developers:<\/p>\n<p><i>\u2014 Guys, you have issues, please pay attention to them.<\/i><\/p>\n<p>At the UAT stage, we again show warnings about vulnerabilities, and at the production launch stage we say:<\/p>\n<p><i>\u2014 Guys, we warned you several times, you did nothing \u2014 we will not release with this.<\/i><\/p>\n<p>When it comes to code and dynamics, we need to show and warn about vulnerabilities only for those features and code that have just been written in that feature. If a developer moved a button 3 pixels and we tell them that they have an SQL injection and need to fix it urgently \u2014 that is incorrect. Only look at what has been written now and at the changes coming into the application.<\/p>\n<p>Suppose we have some functional defect \u2014 that is, how the application should not work: money is not transferred, clicking on a button does not lead to the next page, or the product does not load. <b>Security defects<\/b>\u00a0are similar defects, but not in the context of application functionality, rather in terms of security. <\/p>\n<blockquote><p>Not all software quality issues are security problems. However, all security problems are related to software quality. Sherif Mansour, Expedia.<\/p><\/blockquote>\n<p>\nSince all vulnerabilities are similar defects, they should be located where all development defects are. So forget about reports and scary PDFs that no one reads.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/e54e64658a3882bdc68a48c6ef426746.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWhen I worked at a company that was involved in development, I received a report from static analysis tools. I opened it, was horrified, made coffee, flipped through 350 pages, closed it, and went back to work. <b>Large reports are dead reports.<\/b>Usually they go nowhere, emails get deleted, forgotten, lost, or the business says it accepts the risks.<\/p>\n<p>What to do? The confirmed defects that have been found are simply converted into a format suitable for development, for example, stored in the backlog in Jira. We prioritize and eliminate defects in order of priority along with functional defects and testing defects.<\/p>\n<h2>Static Analysis - SAST<\/h2>\n<p>\n<b>This is code analysis for vulnerabilities.<\/b>, but it is not the same as SonarQube. We check not only against patterns or styles. A range of approaches is applied during analysis: by vulnerability tree, by\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\">DataFlow<\/a><\/noindex>, by analyzing configuration files. This all relates directly to the code.<\/p>\n<p><b>Advantages of the approach<\/b>: <b>identifying vulnerabilities in the code at an early stage of development<\/b>, when there are still no environments or ready tools, and<b>\u00a0the possibility of incremental scanning<\/b>: scanning the part of the code that has changed, and only the feature we are currently working on, which reduces scanning time.<\/p>\n<p><b>Cons<\/b>\u00a0\u2014 there is no support for the necessary languages.<\/p>\n<p><b>Necessary integrations, <\/b>which should be in the tools, in my subjective opinion:<\/p>\n<ul>\n<li>Integration tools: Jenkins, TeamCity, and Gitlab CI.\n<\/li>\n<li>Development environment: Intellij IDEA, Visual Studio. It's easier for the developer not to navigate an unfamiliar interface that needs to be remembered, but to see all necessary integrations and vulnerabilities discovered directly in their own development environment at their work.\n<\/li>\n<li>Code review: SonarQube and manual review.\n<\/li>\n<li>Defect trackers: Jira and Bugzilla.\n<\/li>\n<\/ul>\n<p>\nIn the picture are several of the best representatives of static analysis.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/bab3420874ac090d4d107edb0d2b857b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt\u2019s not the tools that matter, but the process; therefore, there are Open Source solutions that are also good for testing the process.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/4f2c278922c291b15922bc5748f87dc3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSAST Open Source won't find a huge number of vulnerabilities or complex DataFlow, but when building the process, they can and should be used. They help understand how the process will be structured, who will be responsible for the bugs, who will report, and who will provide reports. If you want to go through the initial phase of building security into your code, use Open Source solutions.<\/p>\n<p>How can this be integrated if you are just starting out and have nothing: no CI, no Jenkins, no TeamCity? Let\u2019s consider integrations in the process.<\/p>\n<h3>Integration at the CVS level<\/h3>\n<p>\nIf you have Bitbucket or GitLab, you can integrate at the <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/CVS\">Concurrent Versions System<\/a><\/noindex>.<\/p>\n<p><b>By event<\/b>\u00a0\u2014 pull request, commit. You scan the code and in the build status, you indicate whether the security check passed or failed.<\/p>\n<p><b>Feedback. <\/b>Certainly, feedback is always necessary. If you just performed it on the security side, put it in a box and told no one about it, and then at the end of the month dumped a bunch of bugs \u2014 that\u2019s wrong and not good.<\/p>\n<h3>Integration with the code review system<\/h3>\n<p>\nOnce, we set the technical user AppSec as the default reviewer in several important projects. Depending on whether problems were identified in the new code or not, the reviewer assigns a status on the pull request as 'accept' or 'need work' \u2014 either all is OK, or it needs some improvement along with links to what exactly needs to be improved. For the integration with the version going to production, we had a merge prohibition enabled if the security test did not pass. We included this in manual code review, and other participants in the process could see statuses pertaining to security specifically for that process.<\/p>\n<h3>Integration with SonarQube<\/h3>\n<p>\nMany have <noindex><a rel=\"nofollow\" href=\"https:\/\/de.wikipedia.org\/wiki\/Quality_Gate\">quality gate<\/a><\/noindex> for code quality. The same applies here \u2014 you can create the same gates just for SAST tools. It will have the same interface, the same quality gate, but it will be called <b>security gate<\/b>. And likewise, if you have a process set up using SonarQube, you can easily integrate everything there.<\/p>\n<h3>Integration at the CI level<\/h3>\n<p>\nHere too, everything is quite straightforward:<\/p>\n<ul>\n<li><b>At the same level as automated tests<\/b>, unit tests.\n<\/li>\n<li><b>Separation by development stages<\/b>: dev, test, prod. Different sets of rules can be included or different fail conditions: stop the build, do not stop the build.\n<\/li>\n<li><b>Synchronous\/asynchronous execution<\/b>. We wait for the results of the security tests or we do not wait. That is, we just start them and move on, and then we receive a status indicating whether everything is good or bad.\n<\/li>\n<\/ul>\n<p>\nThis is all in an ideal pink world. In real life, this does not happen, but we strive for it. The results of security checks should be analogous to the results of unit tests.<\/p>\n<p>For example, we took a large project and decided that we would now scan it using SAST\u2014OK. We put this project into SAST, it reported 20,000 vulnerabilities, and with a decisive action, we accepted that everything was fine. 20,000 vulnerabilities\u2014that's our technical debt. We'll box this debt up, gradually tackle it, and log bugs in defect trackers. We'll hire a company, do everything ourselves, or be assisted by Security Champions\u2014and the technical debt will reduce.<\/p>\n<p>All newly identified vulnerabilities in the new code must be addressed just like errors in unit or automated tests. Let's say a build was launched, two tests failed, and two security-related tests also failed. OK\u2014we went, looked at what happened, fixed one issue, fixed the other, and ran the tests again\u2014everything is fine, no new vulnerabilities appeared, and the tests passed. If the task is deeper and needs thorough understanding, or if fixing vulnerabilities affects large parts of what's under the hood: a bug is logged in the defect tracker, prioritized, and fixed. Unfortunately, the world is not perfect, and tests sometimes fail.<\/p>\n<p>An example of a security gate is akin to a quality gate, based on the presence and quantity of vulnerabilities in the code.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/eb30d3c7988b28c2cb25e9656871ec96.png\" style=\"display:block;margin: 0 auto;\" \/>We integrate with SonarQube\u2014a plugin is installed, everything is very convenient and great.<\/p>\n<h3>Integration with the development environment<\/h3>\n<p>\n<b>Integration capabilities:<\/b><\/p>\n<ul>\n<li>Launching scans from the development environment even before committing.\n<\/li>\n<li>Viewing results.\n<\/li>\n<li>Analyzing results.\n<\/li>\n<li>Synchronization with the server.\n<\/li>\n<\/ul>\n<p>\nThis is what retrieving results from the server looks like.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/270d4af76fddc0ceebca908c7d3835b8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn our development environment <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/idea\/\">IntelliJ IDEA<\/a><\/noindex> a new item simply appears that indicates that such vulnerabilities were discovered during scanning. You can immediately correct the code, review recommendations, and\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Control-flow_graph\">Flow Graph<\/a><\/noindex>. Everything is located at the developer's workstation, which is very convenient\u2014you don't have to navigate through other links and look for additional information.<\/p>\n<h2>Open Source<\/h2>\n<p>\nThis is my favorite topic. Everyone uses Open Source libraries\u2014why write a ton of workarounds and reinvent the wheel when you can use a ready-made library where everything is already implemented?<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/05b9cd5a8b269af2a3f59931a0774778.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOf course, that's true, but libraries are also written by people and include certain risks, with vulnerabilities that are periodically or constantly reported. Therefore, the next step in Application Security is the analysis of Open Source components.<\/p>\n<h3>Open Source Analysis - OSA<\/h3>\n<p>\nThe tool consists of three main stages.<\/p>\n<p><b>Searching for vulnerabilities in libraries. <\/b>For example, the tool knows that we're using a certain library, and that in\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Common_Vulnerabilities_and_Exposures\">A number of security vulnerabilities in the kernel have been eliminated, which should improve the system's overall security level. A fresh cumulative security update package has been integrated, closing several<\/a><\/noindex> or in bug trackers there are vulnerabilities related to this version of the library. When attempting to use it, the tool will issue a warning that the library is vulnerable and recommends using another version that does not have these vulnerabilities.<\/p>\n<p><b>Analysis of license compliance. <\/b>This is not particularly popular for us yet, but if you work overseas, you can occasionally face penalties for using an open-source component that cannot be used or modified. According to the licensing policy of the library, we cannot do that. Or, if we have modified it and are using it, we must publish our code. Of course, no one wants to make their product code public, but there are ways to protect against this as well.<\/p>\n<p><b>Analysis of components used in the industrial environment. <\/b>Let's imagine a hypothetical situation where we have finally completed development and released the final version of our microservice into production. It lives wonderfully there for a week, a month, a year. We don't collect it, we don't conduct security checks, everything seems fine. But suddenly, two weeks after the release, a critical vulnerability is found in the Open Source component that we use in this build, in production. If we don't keep a record of what and where we use, we simply won't see this vulnerability. Some tools offer the ability to monitor vulnerabilities in the libraries currently used in production. This is very useful.<\/p>\n<p><b>Features:<\/b><\/p>\n<ul>\n<li>Different policies for different stages of development.\n<\/li>\n<li>Monitoring components in the industrial environment.\n<\/li>\n<li>Control of libraries within the organization's perimeter.\n<\/li>\n<li>Support for various build systems and languages.\n<\/li>\n<li>Analysis of Docker images.\n<\/li>\n<\/ul>\n<p>\nA few examples of industry leaders that engage in Open Source analysis.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/f1b05f86beb4a64f9bf3443963e3603b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nThe only free one among them is <noindex><a rel=\"nofollow\" href=\"https:\/\/www.owasp.org\/index.php\/OWASP_Dependency_Check\">Dependency-Check<\/a><\/noindex> from OWASP. It can be enabled in the early stages to see how it works and what it supports. Basically, this covers all cloud products and on-premise solutions, but they still send their base data to the internet. They send not your libraries, but hashes or their computed values, along with fingerprints, to their server to get notifications about vulnerabilities.<\/p>\n<h3>Integration into the process<\/h3>\n<p>\n<b>Control of libraries within the perimeter<\/b>, which are downloaded from external sources. We have both external and internal repositories. For instance, inside Event Central, there is Nexus, and we want our internal repository to be free from vulnerabilities rated as 'critical' or 'high'. Proxying can be set up using the Nexus Firewall Lifecycle tool to filter out such vulnerabilities and prevent them from entering the internal repository.<\/p>\n<p><b>Integration into CI<\/b>. At the same level as automated tests, unit tests, and phase separation: dev, test, prod. At each stage, any libraries can be downloaded and anything can be used, but if there's something severe rated as 'critical', it might be worth bringing to the developers' attention before production release.<\/p>\n<p><b>Integration with artifact repositories<\/b>: Nexus and JFrog.<\/p>\n<p><b>Integration into the development environment. <\/b>The tools you choose should integrate with development environments. Developers should have access to scanning results from their workstations or have the ability to scan and check code for vulnerabilities before committing to CVS.<\/p>\n<p><b>Integration into CD. <\/b>This is a cool feature that I really like and have already mentioned\u2014monitoring the emergence of new vulnerabilities in the production environment. It works roughly like this.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/605c638df343db5c47ab36b4dc00f41c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe have <b>Public Component Repositories<\/b>\u00a0\u2014 some external tools, and our internal repository. We want only trusted components in it. When proxying a request, we check that the downloaded library has no vulnerabilities. If it falls under certain policies that we establish and must agree upon with development, then it won't be downloaded, and a notification comes in to use a different version. Accordingly, if there is something truly critical and bad in the library, then the developer will not receive it at the installation stage\u2014 they should use a higher or lower version.<\/p>\n<ul>\n<li>During the build process, we check that no one has slipped in anything malicious, that all components are safe, and that no one has brought anything dangerous on a flash drive.\n<\/li>\n<li>Our repository contains only trusted components. \n<\/li>\n<li>During deployment, we double-check the package itself: war, jar, DL, or Docker image, to ensure it complies with the policies. \n<\/li>\n<li>Upon going live, we monitor what happens in the production environment: whether critical vulnerabilities appear or not.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Dynamic analysis\u2014DAST<\/h2>\n<p>\nDynamic analysis tools differ significantly from everything mentioned earlier. It\u2019s a kind of simulation of a user interacting with the application. If this is a web application, we send requests mimicking client behavior, click buttons on the front end, and send artificial data from forms: quotes, brackets, characters in different encodings, to see how the application operates and processes external data.<\/p>\n<p>This system also allows checking for template vulnerabilities in Open Source. Since DAST doesn\u2019t know which Open Source we are using, it simply throws \u2018malicious\u2019 patterns and analyzes the server responses:<\/p>\n<p><i>\u2014 Aha, there\u2019s a deserialization problem here, and there isn\u2019t one there.<\/i><\/p>\n<p>There are significant risks involved because if you conduct this security test on the same environment that the testers are operating on\u2014 unpleasant things can happen.<\/p>\n<ul>\n<li>High load on the application server network.\n<\/li>\n<li>No integrations.\n<\/li>\n<li>Ability to change settings of the analyzed application.\n<\/li>\n<li>No support for the required technologies.\n<\/li>\n<li>Complexity of configuration.\n<\/li>\n<\/ul>\n<p>\nWe had a situation where we finally launched AppScan: it took a long time to gain access to the application, we got 3 accounts and were happy \u2014 finally, we could check everything! We started the scan, and the first thing AppScan did was access the admin panel, clicked all the buttons, changed half of the data, and then completely crashed the server with its <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mailform.io\/\">mailform<\/a><\/noindex>-requests. Development with testing said:<\/p>\n<p><i>\u2014 Guys, are you kidding?! We provided you with accounts, and you just brought the stand down!<\/i><\/p>\n<p>Consider the possible risks. Ideally, prepare a separate stand for testing information security, which should be isolated from the rest of the environment at least somewhat, and it's preferable to check the admin panel manually. This is a pentest \u2014 those remaining percentages of effort that we are not considering right now. <\/p>\n<p>It's worth noting that this can be used as an equivalent of load testing. In the first phase, you can enable a dynamic scanner with 10-15 threads and see what happens, but usually, as practice shows, nothing good comes of it.<\/p>\n<p>Several resources that we usually use.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/45a25dbe2a2d053e6ed16d31b6ac53ef.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt's worth highlighting <noindex><a rel=\"nofollow\" href=\"https:\/\/portswigger.net\/burp\">Burp Suite<\/a><\/noindex>\u00a0\u2014 this is the 'Swiss Army Knife' for any security professional. Everyone uses it, and it's very convenient. A new demo version of the enterprise edition has just been released. Previously, it was just a standalone utility with plugins, but now the developers are finally creating a large server that will allow managing multiple agents from it. This is great; I recommend trying it out.<\/p>\n<h3>Integration into the process<\/h3>\n<p>\nIntegration occurs quite well and easily: <b>starting the scan after a successful installation <\/b>of the application on the stand and\u00a0<b>scanning after successful integration testing<\/b>.<\/p>\n<p>If the integrations are not working or if there are stubs and mock functions in place, this is pointless and useless \u2014 no matter what pattern we send, the server will respond the same way.<\/p>\n<ul>\n<li>Ideally \u2014 a separate stand for testing.\n<\/li>\n<li>Before starting the test, record the login sequence.\n<\/li>\n<li>System administration testing is only manual.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Process<\/h2>\n<p>\nA bit of a general overview of the process in general and about the operation of each tool, in particular. All applications are different \u2014 one works better with dynamic analysis, another with static analysis, with OpenSource analysis, pentests, or something entirely different, for example, events with\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Waf\">, described below. Most users will work with<\/a><\/noindex>.<\/p>\n<blockquote><p>Every process needs to be monitored.<\/p><\/blockquote>\n<p>\nTo understand how the process works and where it can be improved, you need to gather metrics from all accessible areas, including production metrics, metrics from tools, and from defect trackers.<\/p>\n<p>Any data is useful. You should look at various angles to see where a particular tool is best applied, and where the process is specifically faltering. It might be worth considering development response time to identify areas for process improvement based on timing. The more data you have, the more perspectives you can gain, from high-level overviews down to the details of each process.<\/p>\n<p><img decoding=\"async\" alt=\"Fear and Loathing in DevSecOps\" src=\"\/wp-content\/uploads\/2019\/04\/93e079b19c4c8189ce6ca4eaec186eed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSince all static and dynamic analyzers have their own APIs, methods of execution, principles, some have schedulers while others do not, we are developing a tool <b>AppSec Orchestrator<\/b>, which provides a single entry point into the entire process from the product and allows management from one location.<\/p>\n<p>For managers, developers, and security engineers, there is one entry point from which they can see what is running, configure and initiate scans, receive scan results, and present requirements. We aim to move away from paperwork and translate everything into a human-readable format used by development\u2014pages on Confluence with statuses and metrics, defects in Jira or various defect trackers, or integration into synchronous\/asynchronous processes in CI\/CD.<\/p>\n<h2>Key Takeaways<\/h2>\n<p>\n<b>Tools are not the main focus.<\/b> First, think through the process\u2014then implement the tools. Tools are good but costly, so it's better to start with the process and establish interaction and understanding between development and security. From a security standpoint, it is not advisable to 'cross everything off' indiscriminately; from a development perspective, if something is high mega super critical, it needs to be addressed rather than ignored.<\/p>\n<p><b>Product Quality<\/b>\u00a0<b>is the common goal<\/b> for both security and development. We\u2019re working towards the same objective, ensuring everything operates correctly to mitigate reputational and financial risks. That\u2019s why we advocate for a DevSecOps and SecDevOps approach to facilitate communication and enhance product quality.<\/p>\n<p><b>Start with what already exists<\/b>: requirements, architecture, partial checks, training, guidelines. You don\u2019t need to apply all practices to all projects at once \u2014 <b>move iteratively<\/b>. There is no single standard \u2014 <b>experiment<\/b> and try different approaches and solutions.<\/p>\n<p><b>Between information security defects and functional defects, there is an equal sign<\/b>.<\/p>\n<p><b>Automate everything<\/b>, that moves. Everything that doesn't move \u2014 make it move and automate it. If something is done manually, it's not a good part of the process. You might want to reconsider it and also automate.<\/p>\n<p>If the information security team is small \u2014 <b>use Security Champions<\/b>.<\/p>\n<p>Perhaps what I\u2019ve talked about won\u2019t fit you and you\u2019ll come up with something of your own \u2014 and that\u2019s fine. But\u00a0<b>choose tools based on the requirements specific to your process<\/b>. Don\u2019t look at what the community says; that this tool is bad and that one is good. It may turn out to be quite the opposite for your product.<\/p>\n<p><b>Requirements for tools.<\/b><\/p>\n<ul>\n<li>Low level of False Positives.\n<\/li>\n<li>Adequate analysis time.\n<\/li>\n<li>Ease of use.\n<\/li>\n<li>Availability of integrations.\n<\/li>\n<li>Understanding of the product development roadmap.\n<\/li>\n<li>Possibility of tool customization.\n<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p>Yuri's report was chosen as one of the best at DevOpsConf 2018. To see even more interesting ideas and practical cases, come to Skolkovo on May 27 and 28 at\u00a0<noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/moscow-rit\/2019\">DevOpsConf<\/a><\/noindex> as part of <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2019\">the RIT++ festival<\/a><\/noindex>. And even better, if you are ready to share your experience, then <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose\/?conference=dc2019-rit\">submit an application<\/a><\/noindex> for a report by April 21.<\/p><\/blockquote>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/448488\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423\u00a0\u043d\u0430\u0441 \u0431\u044b\u043b\u043e 2\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430, 4\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0435\u043b\u043a\u0438 \u0438\u00a0250\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u041d\u0435\u00a0\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u043d\u043e\u00a0\u0440\u0430\u0437 \u043d\u0430\u0447\u0430\u043b \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c DevSecOps, \u0442\u043e \u043d\u0430\u0434\u043e\u00a0\u0438\u0434\u0438 \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a. \u0410\u0432\u0442\u043e\u0440\u044b \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439: \u0414\u0436\u0430\u0441\u0442\u0438\u043d \u0420\u043e\u0439\u043b\u0430\u043d\u0434 \u0438\u00a0\u0414\u044d\u043d \u0425\u0430\u0440\u043c\u043e\u043d. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 SecDevOps? \u0410\u00a0DevSecOps? \u0412\u00a0\u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f? Application Security\u00a0\u2014 \u043e\u00a0\u0447\u0451\u043c \u044d\u0442\u043e? \u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u041d\u0430\u00a0\u0432\u0441\u0435 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0437\u043d\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u042e\u0440\u0438\u0439 \u0428\u0430\u0431\u0430\u043b\u0438\u043d [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23720,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e 2 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430, 4 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0435\u043b\u043a\u0438 \u0438 250 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/strah-i-nenavist-devsecops\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0440\u0430\u0445 \u0438 \u043d\u0435\u043d\u0430\u0432\u0438\u0441\u0442\u044c DevSecOps | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e 2 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430, 4 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0435\u043b\u043a\u0438 \u0438 250 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/strah-i-nenavist-devsecops\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:43:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:43:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Fear and Loathing in DevSecOps | ProHoster","description":"We had 2 code analyzers, 4 dynamic testing tools, our own creations, and 250 scripts.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/strah-i-nenavist-devsecops","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0440\u0430\u0445 \u0438 \u043d\u0435\u043d\u0430\u0432\u0438\u0441\u0442\u044c DevSecOps | ProHoster","og:description":"\u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e 2 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430, 4 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0435\u043b\u043a\u0438 \u0438 250 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/strah-i-nenavist-devsecops","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:43:30+00:00","article:modified_time":"2019-10-31T18:43:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31852","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 08:08:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:50:34","updated":"2026-01-21 08:08:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/31852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=31852"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/31852\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/23720"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=31852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=31852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=31852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}