<?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 Nal on Medium]]></title>
        <description><![CDATA[Stories by Nal on Medium]]></description>
        <link>https://medium.com/@nalinikanth?source=rss-85973e56bed8------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*b6Ms9N-SLu12uyeA.</url>
            <title>Stories by Nal on Medium</title>
            <link>https://medium.com/@nalinikanth?source=rss-85973e56bed8------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 28 May 2026 17:08:12 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@nalinikanth/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[Security in DevOps AKA DevSecOps]]></title>
            <link>https://medium.com/@nalinikanth/security-in-devops-aka-devsecops-c25132b548a3?source=rss-85973e56bed8------2</link>
            <guid isPermaLink="false">https://medium.com/p/c25132b548a3</guid>
            <category><![CDATA[devsecops]]></category>
            <category><![CDATA[sast]]></category>
            <category><![CDATA[dast]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[threat-modelling]]></category>
            <dc:creator><![CDATA[Nal]]></dc:creator>
            <pubDate>Thu, 17 Feb 2022 06:48:31 GMT</pubDate>
            <atom:updated>2022-04-28T20:01:45.342Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>DevSecOps integrates security controls and best practices in the DevOps workflow. DevSecOps automates security and compliance workflows to create an adaptable process for development teams.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/405/1*fbCBCYdifru2-JS1hFY3Fw.png" /><figcaption>Image source: redhat.com</figcaption></figure><blockquote><strong>The ratio of engineers in Development, Operations, and Infosec in a typical technology organisation is 100:10:1</strong></blockquote><blockquote>The above statement holds true most of the time. When security professionals are outnumbered, without automating or integrating security into the daily work of Devs and Ops, Security teams might only be restricted to do Compliance testing and one time pen testing which incurs huge costs but might not serve the purpose of delivering a secure application.</blockquote><p>One of the most quoted terms in the world of Information Technology to tackle such a problem is DevSecOps which is derived from DevOps by including security to it. While that is how things should be DevOps should inherit security to it. But, how do we go there?</p><p>The idea is to shift security towards the left of the SDLC. This will help teams to come together and talk about security more often. This will help in “<em>delivering secured features in less time to market” </em>as security comes packaged with every phase in SDLC. Start with simple things like</p><figure><img alt="Thanks to Harinee &amp; Neelu for this image from the build-security-in talk at TWIsummit 2019. Source:https://www.slideshare.net" src="https://cdn-images-1.medium.com/max/1024/1*BnHdQIi9gTpVp9DirDOF0w.png" /><figcaption>Thanks to Harinee &amp; Neelu for this image from the build-security-in talk at TWIsummit 2019. Source:<a href="https://www.slideshare.net/ThoughtWorks/twisummit-2019-build-security-in">https://www.slideshare.net/ThoughtWorks/twisummit-2019-build-security-in</a>.</figcaption></figure><h3>Integrate Security into Sprint/Iteration</h3><p>Making small changes to incorporate security related activities into our daily activities helps DevOps consume Security</p><ul><li>Performing Iterative Threat Modelling on the application you are working on</li></ul><blockquote><a href="https://martinfowler.com/articles/agile-threat-modelling.html">A Guide to Threat Modelling for Developers</a> By Jim Gumbley is a good start for Threat Modelling Aspirants</blockquote><ul><li>Involving security professionals(People with security knowledge and background) from the initial phases of the project</li><li>Talking about security related stuff in Sprint demonstrations/ Iteration showcases</li><li>Adding security related acceptance criteria to all the business stories/ technical stories</li><li>Add evil/abuse stories</li></ul><h3>Integrate Security into Project Tracking or Defect Tracking Tools</h3><p>We generally tend to see all the security related issues in a large PDF report after a pen testing or stored in a GRC(governance, risk and compliance) tool and often tend to ignore putting them on to our project wall like JIRA.</p><ul><li>Converting the outcomes of threat modelling in to stories and add them to the project wall</li><li>Tracking all the security related stories/defects/tasks on project wall</li><li>Writing security specific stories if necessary(recommended only if the scope cannot be incorporated in any of the existing stories, coz security stories not get prioritised )</li></ul><h3>Integrate Preventive Security Controls in to Shared Source Code Repositories and Shared Services</h3><p>We create so many accounts in a project like GitHub, Jenkins/CircleCI, Splunk etc. This will make our life easy in the world of DevOps to be collaborative and at the same time this deals with a lot of sensitive information like source code, Cloud account keys, logs and so on. When we try making our life easy, it is important for us to make it secure as well. The security teams can help them by providing a list of security services or libraries that their environment requires, such as user authentication, authorisation, password management, data encryption so on and so forth. So that teams can choose to use them as per their needs.</p><ul><li>Using a centralised shared services organisation and implement SSO for all the applications with MFA (for Git, continuous integration environments like circleCI or gitlabci)</li><li>Providing a list security services/libraries/tools to all the teams and configurations (logging, 2fact auth library, etc)</li><li>For Secret management (connection settings, encryption keys, cloud account keys) using tools like vault, creadstash, Keywhiz, AWS secret manager</li><li>Using Team password manager options like LastPass or 1Password.</li><li>Providing training for teams using these services and libraries for the first time.</li></ul><p>Collaborating with the Ops specialist on the team to make this process easier to everyone to make this process easier to everyone on the team, automating things wherever possible also helps in people picking up these things without a lot of setup required for everyone to go through.</p><h3>Integrate Security into Our CI/CD Pipelines</h3><p>The era where security reviews and pen testing is done at the end of the development and getting hundreds of pages of vulnerabilities in a PDF which will be handed over to development and operations, which in turn will mostly be ignored due to delivery milestones. One way to prevent this from not happening in the time of DevOps is to automate security on the pipelines and these would run on every commit.</p><figure><img alt="Example of how pipelines would look like" src="https://cdn-images-1.medium.com/max/1024/1*4ELAyAdO6suLuydkADnsdA.png" /><figcaption>Example of how pipelines would look like</figcaption></figure><h4>Beware of what you push</h4><p>While developing we deal with a lot of sensitive data like passwords, credentials, AWS cloud keys, etc and these are essential for us to make the code work. Sometimes unintentionally we might push these secrets into our source code repositories. We can prevent such things from happening and can use tools like <a href="https://thoughtworks.github.io/talisman/"><em>Talisman</em></a>, <a href="https://github.com/hawkeyesec/scanner-cli"><em>Hawkeye</em></a><em> file-secrets, </em><a href="https://github.com/michenriksen/gitrob"><em>gitrob</em></a><em> to our rescue.</em></p><blockquote>Talisman is a tool to validate code changes that are to be pushed out of a local Git repository on a developer’s workstation. By hooking into the pre-commit &amp; pre-push hook provided by Git, it validates the outgoing change set for things that look suspicious — such as potential SSH keys, authorisation tokens, private keys etc. The aim is for Talisman to scan both file names &amp; file content so that even potential problems embedded in source code and documentation can be caught.</blockquote><h4>Static Application Security Testing</h4><p>Static Code Analysis (also known as Source Code Analysis) is usually performed as part of a Code Review (also known as white-box testing) and is carried out at the Implementation phase of a Security Development Lifecycle (SDL). Static Code Analysis commonly refers to the running of Static Code Analysis tools that attempt to highlight possible vulnerabilities within ‘static’ (non-running) source code by using techniques such as Taint Analysis and Data Flow Analysis.<br><em>Tools: </em><a href="https://www.checkmarx.com/products/static-application-security-testing"><em>Checkmarx</em></a><em>, </em><a href="https://owasp.org/www-community/Source_Code_Analysis_Tools"><em>tool list</em></a></p><h4>Scanning Vulnerabilities in Dependencies</h4><p>Developing a software involves a lot of things, one of them being heavily used is frameworks, libraries etc., which are dependencies. These dependencies are nothing but a piece of code and they too have a chance of being vulnerable. Dependency Scanning helps to automatically find security vulnerabilities in your dependencies while you are developing and testing your applications.<br> <em>for example</em>: when your application is using an external (open source) library which is known to be vulnerable. <br>The idea here is to have them running on pipelines.<br><em>Tools: </em><a href="https://owasp.org/www-project-dependency-check/"><em>OWASP Dependency checker</em></a><em> , </em><a href="https://snyk.io/"><em>synk</em></a></p><h4>Scanning images for vulnerabilities</h4><p>In the era of docker and kubernetes, use of containers is on a rise. Most of the applications developed these days are based on container technology. If you are using this, then definitely you will have to use a container repository to push your images. At this level various tools offer to scan these images on push this can help you automate detection and responses to container image vulnerabilities prior to promoting and deploying into production. <br>Tools: <a href="https://docs.docker.com/ee/dtr/user/manage-images/scan-images-for-vulnerabilities/">Docker’s inbuilt ability to scan</a>, <a href="https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning.html"><em>AWS ECR image scanning</em></a>, so on..</p><h4>Dynamic Application Security Testing</h4><p>As opposed to static testing, dynamic application testing consists of tests executed while a program is in operation. Dynamic tests monitor items such as system memory, functional behaviour, response time and overall performance of the system. This might be in a similar manner on how a third party user will interact with the system. There are tools which can be used to find security vulnerabilities on a running software/application. This can be automated on the pipeline.<br>Tools: <a href="https://www.zaproxy.org/"><em>ZAP</em></a><em>, </em><a href="https://www.tenable.com/products/nessus"><em>Nessus</em></a><em> ., etc</em></p><h4>Source code Integrity and code signing</h4><p>Everyone who has access to code and permissions to checkin so should have their own PGP key, perhaps created and managed by a system like keybase.io . All commits should be signed. This is straight forward with tools like <a href="https://help.github.com/en/github/authenticating-to-github/managing-commit-signature-verification"><em>git</em></a> and <em>gpg</em>. <br>Every artefact that is produced during by CI pipelines should also be signed and the hash should be recorded in the central logging service for auditing purposes.</p><blockquote>Check this <a href="https://medium.com/weekly-webtips/protect-yourself-from-git-identity-theft-f6836f3249d5\">article</a> by <a href="https://medium.com/@bilalfazlani?source=post_page-----f6836f3249d5----------------------">Bilal Fazlani</a></blockquote><h4>Password vaults or secret managers</h4><p>In the devops world, we have all the code and systems running on the cloud. There are a lot of secrets(passwords, tokens, cloud environment keys) that are being floated to make these systems work. These should always be managed by password vaults and not be stored in any config. One of the advantages of maintaining vaults is the rotation of the secrets can be automated.</p><figure><img alt="Examples of some tools that can be run on pipelines" src="https://cdn-images-1.medium.com/max/1024/1*TDdtpbpBXk_6IECPldMFPw.png" /><figcaption>Examples of some tools that can be run on pipelines</figcaption></figure><blockquote>Tools like <a href="https://about.gitlab.com/solutions/dev-sec-ops/">Gitlabci</a> will give most of these services inbuilt if you are using such tools .<br>look out for what they offer in this space.<br><a href="https://circleci.com/integrations/devsecops/\">Circleci</a> too have some things inbuilt to support devsecops.</blockquote><p>While we talk about things to adopt when we try to include security in devops, there are some things that we need to keep in mind while transitioning to such a development model</p><ul><li>Prevent security mistake from being repeated</li><li>Integrate security objectives into the development tools</li><li>Maintain fast flow through infosec, through automation</li><li>Ensure security of the environment(Harden the environments, enable necessary security settings on cloud)</li><li>Integrate security into production telemetry, create security telemetry like unauthorised login attempts, password resets, credit card changes</li><li>Monitor the security telemetry to detect any kind of attacks being performed</li><li>Protect your deployment pipelines, they are prone to attacks too</li><li>Providing training for teams on the practices in security in SDLC. Like how to perform threat modelling to the development teams</li></ul><blockquote>If anyone can answer what is the most secured house on earth?<br>Secured house is one which doesn’t have any doors or windows or an entry point. Which is impossible! Or such a house is good for nothing. Rather we build a secure house. So let’s build our tools &amp; products securely. Since we have more attack surfaces now, including these security measures in devops is very essential to build a secure application.</blockquote><h4>References:</h4><p>[1]: The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organisations.</p><p>[2]: <a href="https://about.gitlab.com/solutions/dev-sec-ops/">https://about.gitlab.com/solutions/dev-sec-ops/</a></p><p>[3]: <a href="https://owasp.org/">https://owasp.org/</a></p><p>[4]: <a href="https://martinfowler.com/articles/agile-threat-modelling.html">https://martinfowler.com/articles/agile-threat-modelling.html</a></p><p>[5]: <a href="https://medium.com/weekly-webtips/protect-yourself-from-git-identity-theft-f6836f3249d5">https://medium.com/weekly-webtips/protect-yourself-from-git-identity-theft-f6836f3249d5</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c25132b548a3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Selenium and HTML5 “required”]]></title>
            <link>https://medium.com/@nalinikanth/selenium-and-html5-required-7da8e8b22121?source=rss-85973e56bed8------2</link>
            <guid isPermaLink="false">https://medium.com/p/7da8e8b22121</guid>
            <category><![CDATA[selenium]]></category>
            <category><![CDATA[selenium-webdriver]]></category>
            <category><![CDATA[html5]]></category>
            <category><![CDATA[selenium-testing]]></category>
            <category><![CDATA[selenium-test-automation]]></category>
            <dc:creator><![CDATA[Nal]]></dc:creator>
            <pubDate>Sat, 17 Feb 2018 16:40:11 GMT</pubDate>
            <atom:updated>2018-02-17T16:40:11.723Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Selenium and HTML5 <em>“required”</em></strong></p><p>Recently, I had to identify a error/validation message on form submit in a application with selenium webdriver. Like every other element, I tried inspecting it the error that’s being popped out very similar to a <a href="https://en.wikipedia.org/wiki/Tooltip">tooltip</a>. I couldn’t find anything in HTML or DOM to identify the error/validation message. Wondered how this is happening, later figured out the HTML5 provides <strong><em>“required”</em></strong> attribute, which lets the browser to throw a error/validation message.</p><blockquote>What is this HTML5 <strong><em>“required”</em></strong>?</blockquote><blockquote>The Boolean <em>required</em> attribute marks any form control as being required to have a value before the form can be submitted. In browsers supporting constraint validation, any fields with this attribute which lack a value will prevent the form from being submitted.</blockquote><blockquote>&lt;input type=”text” name=”username” required&gt;</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6vdOK7Y6z_LJTfp6rjhptA.png" /></figure><p><strong>How to identify the element?</strong></p><p>By implementation the browser is the owner which will throw the error message. Here with HTML5 “<strong><em>required”,</em></strong> the browser is not injecting any code or changing the DOM. Error message can’t be identified because of this.</p><p>The only way we can identify the error message is possible if the developer has used <a href="http://www.whatwg.org/specs/web-apps/current-work/#constraint-validation-api">constraint validation API</a> to provide a custom error/validation message. This way the DOM will give the error/validation element on page.</p><p><strong>How do I verify the error/validation message?</strong></p><ol><li>If developers are throwing a custom error/validation message the element will be in DOM, using any of the locators(CSS, Xpath, id, name.. etc )</li><li>If developers are using default error/validation message thrown by browser.<br><strong>a. </strong>We can use the mouse actions to moveTo the element and do getText() and verify.<br> — This is flaky because any other action might let the error/validation message disappear.<br><strong>b. </strong>We can verify whether the attribute <em>“required” </em>is present in the HTML of the element.<br> — We are dependent on the HTML5 behaviour of the browser. So we need to verify the support of the browser with the client side technologies whenever there is an update on either side i.e., browser or the technologies we use.</li></ol><blockquote>isAttribtuePresent(webelement, required)</blockquote><blockquote>private boolean isAttribtuePresent(WebElement element, String attribute) {<br> Boolean result = false;<br> try {<br> String value = element.getAttribute(attribute);<br> if (value != null){<br> result = true;<br> }<br> } catch (Exception e) {}<br> return result;<br> }</blockquote><h3><strong>Learnings:</strong></h3><blockquote>Understand the tech stack and how the changes are gonna effect automation that we are doing on the application.</blockquote><blockquote>Keeping an eye on what versions of the browser the application is compatible with is very much necessary. We might tend to miss this on legacy applications.</blockquote><blockquote>Verifying code in automation and leveraging the efficiency to do while trusting the third party technologies or libraries that we use.</blockquote><p><strong>More resources:</strong></p><p><a href="https://www.html5rocks.com/en/tutorials/forms/constraintvalidation/">https://www.html5rocks.com/en/tutorials/forms/constraintvalidation/</a></p><p><a href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation">https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation</a></p><p><a href="https://www.wufoo.com/html5/attributes/09-required.html">https://www.wufoo.com/html5/attributes/09-required.html</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7da8e8b22121" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Fixing is not Patching, it is eliminating the root cause..!!]]></title>
            <link>https://medium.com/@nalinikanth/fixing-is-not-patching-it-is-eliminating-the-root-cause-80444da96a70?source=rss-85973e56bed8------2</link>
            <guid isPermaLink="false">https://medium.com/p/80444da96a70</guid>
            <category><![CDATA[agile-methodology]]></category>
            <category><![CDATA[iteration-management]]></category>
            <category><![CDATA[sdlc]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[agile]]></category>
            <dc:creator><![CDATA[Nal]]></dc:creator>
            <pubDate>Thu, 15 Feb 2018 11:08:39 GMT</pubDate>
            <atom:updated>2018-02-15T17:42:33.175Z</atom:updated>
            <content:encoded><![CDATA[<p>A good day it is!<br>nd a worthy thought!!</p><blockquote>It’s not doing Agile. It’s being Agile</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AsE-x_mZrdTd1Wc1UaLdYg.jpeg" /><figcaption>&lt;Img_Src: <a href="https://goo.gl/g1dDJa">https://goo.gl/g1dDJa</a>&gt;</figcaption></figure><p>Talking to a friend about a trip.<br><strong>Friend1:</strong> Can we postpone the trip by a week.<br><strong>Me:</strong> Let’s see how it works with others.<br><strong>Friend 2:</strong> Sorry, I can’t take leave next week. My team needs me!! we have lot of work to finish off for this release.</p><p>Digging deep into the details, why such a situation in the team. I came to understood that the estimates on the project are not realistic, the entire team thinks the same that - they can pull it off.</p><blockquote>I was surprised to understand, knowing the fact that the estimates are gonna put the team in trouble how everyone has agreed to go ahead and test the waters!!</blockquote><p>I have often seen this in agile projects, how wrong estimates have got the hands burnt at the end of deadlines for releases.</p><p><strong><em>Which leads to:</em></strong><br>Working more than required — <em>Team has to stretch</em><br>Convey the client and extend deadlines — Creates l<em>oss of trust on the team<br></em>Work on weekends — Team starts disliking the project<br>Manage to achieve velocity now — Client expects same going forth<br>Many more..</p><blockquote>IMO, it is not a situation that a team should be in!!</blockquote><blockquote>Being in such a situation <strong>decreases the productivity of the team, rather than increasing it</strong>.</blockquote><p>All the above said methods are like <strong>patching </strong>the project for that specific point of time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dUzEyUAEwUwwDqxutd9Vtw.jpeg" /><figcaption>&lt;Img_Src<strong>:</strong><a href="https://goo.gl/dGibDv">https://goo.gl/dGibDv</a>&gt;</figcaption></figure><p><strong>Try to identify the root cause and fix it:</strong></p><blockquote><strong><em>Din’t get correct estimates?</em><br></strong>One of the most common problems that teams face: not getting the right estimates. This happens quite often, but understanding this problem and getting that fixed plays a crucial role.</blockquote><blockquote>Speak out if you feel that estimates are gonna put the team in trouble<br>Understand yesterday’s weather and keep correcting estimates time to time<br>Promise what can be delivered and meet it, rather over committing and failing</blockquote><blockquote><em>Velocity changes?</em><strong><em><br></em></strong>Expect the unexpected<em>.<br></em>Consider anything that might impact on velocity while planing a release. A team members marriage <strong>or</strong> third party dependencies (co vendor or an open source product) get a contract on turn around time.</blockquote><blockquote>New team member ramp up time<br>Team leaves across the release<br>Risks and third party dependencies<br>Keep client updated with all these impacts</blockquote><blockquote>Changes in iteration once IPM is done?<br>Best way to deal with things like this is to put a practice in place. No changes to stories once stories agreed for the iteration. If it is a should from client then drop something from agreed stories. If we don’t do this, then it is gonna result in a scope creep.</blockquote><blockquote>Set a practice with client that the team is gonna follow<br>Don’t change iteration wall(stories) once the iteration is started<br>Again convey the impact of the changes made to client(if the changes are unavoidable)</blockquote><blockquote>Blocked on something?<br>If ever you have come across a blocker, communicate to client then and there. If needs a discussion from client IT team, there is a dependency on another component from other vendor.. so on..</blockquote><blockquote>Always do the right communication at the right time<br>Keep tracking RAIDs on a common medium</blockquote><p>Out of everything, set practices and communicate to client and follow them. We are humans and we do forget. Keep reminding ourselves about what we have set up. We are humans and we do mistakes. How quick we learn from them is all that makes a difference.</p><blockquote><em>Let’s not patch! Let’s Fix!!</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JdPCondpc_Ck5mRKrxxVBA.jpeg" /><figcaption>&lt;Img_Src: <a href="https://goo.gl/8J5pJU">https://goo.gl/8J5pJU</a>&gt;</figcaption></figure><p><strong>P.S.:</strong> Everything above is in my opinion, any feedback is welcome :) Happy to learn!!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=80444da96a70" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>