<?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"><channel><title><![CDATA[GEANT TECH LLC]]></title><description><![CDATA[A multinational Software and Data Engineering company focused on building Datacenter solutions and Software as a Service applications for accelerated Digital Tr]]></description><link>https://blog.geanttech.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Apr 2026 12:23:40 GMT</lastBuildDate><atom:link href="https://blog.geanttech.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Trade Study - Open Source Single Sign-On Technology]]></title><description><![CDATA[Preamble:
Our Engineering Team leverages lot of Open Source Technologies when building production grade platform stack for internal use or for our partners. Before an Open Source Software makes it to the technology stack we do our due diligence by un...]]></description><link>https://blog.geanttech.com/trade-study-single-sign-on-technology</link><guid isPermaLink="true">https://blog.geanttech.com/trade-study-single-sign-on-technology</guid><category><![CDATA[single sign on]]></category><category><![CDATA[Security]]></category><category><![CDATA[SSO]]></category><category><![CDATA[keycloak]]></category><category><![CDATA[OpenID Connect]]></category><category><![CDATA[identity-management]]></category><category><![CDATA[SAML]]></category><category><![CDATA[oauth]]></category><dc:creator><![CDATA[GEANT TECH LLC]]></dc:creator><pubDate>Thu, 30 Nov 2023 21:28:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1701221547005/f8158f23-f6a8-4b8b-a68b-bcbfa8cbbd5e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-preamble">Preamble:</h2>
<p>Our Engineering Team leverages lot of Open Source Technologies when building production grade platform stack for internal use or for our partners. Before an Open Source Software makes it to the technology stack we do our due diligence by undertaking a trade study to determine the best fit, feature rich, ease of maintenance, community involvement, and user base among multiple similar projects.</p>
<p>In an era where web/tv/mobile applications dominate our daily lives, the need for a secure online access has become a biggest security concern that can no longer be ignored. Single Sign-On (SSO) technologies along with MFA (Multi-Factor Authentication) have emerged as secure solutions for simplifying the user experience and enhancing security. In this blog we will showcase some of the comparative study we undertake as a team in exploring the intricacies, functionalities, benefits, transformative impact, ease of use and maintenance when analyzing selected the best suited open source single sign-on technology. These following Open Source Projects have successfully made it to our shortlist for analysis:</p>
<ul>
<li><a target="_blank" href="https://www.keycloak.org/">KeyCloak</a>: a Cloud Native Computing Foundation incubation project (at the time of writing)</li>
<li><a target="_blank" href="https://apereo.github.io/cas">Apereo CAS</a>: from the Apereo Foundation</li>
<li><a target="_blank" href="https://www.authelia.com/">Authelia</a>: not a company, no affiliation to any type of incorporated entity</li>
<li><a target="_blank" href="https://goauthentik.io/">Authentik</a>: backed by Authentik Security Inc</li>
<li><a target="_blank" href="https://zitadel.com/">Zitadel</a>: backed by Zitadel</li>
</ul>
<h2 id="heading-comparative-study">Comparative Study:</h2>
<h3 id="heading-keycloak-vs-apereo-cas-vs-authentik-vs-authelia-vs-zitadel">KeyCloak vs. Apereo CAS vs. Authentik vs. Authelia vs. Zitadel</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td><a target="_blank" href="https://www.keycloak.org/">Keycloak</a></td><td><a target="_blank" href="https://apereo.github.io/cas/">Apereo CAS</a></td><td><a target="_blank" href="https://goauthentik.io/">Authentik</a></td><td><a target="_blank" href="https://www.authelia.com/">Authelia</a></td><td><a target="_blank" href="https://zitadel.com/">Zitadel</a></td></tr>
</thead>
<tbody>
<tr>
<td>Open source</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr>
<tr>
<td>Backed by</td><td>Cloud Native Computing Foundation</td><td>Apereo Foundation</td><td>Authentik Security Inc</td><td>No affiliation to any type of incorporated entity</td><td>Zitadel</td></tr>
<tr>
<td>Commercial support</td><td><a target="_blank" href>third-party</a></td><td><a target="_blank" href>third-party</a></td><td><a target="_blank" href="https://goauthentik.io/pricing/">Authentik Security Inc</a></td><td><a target="_blank" href>third-party</a></td><td><a target="_blank" href="https://zitadel.com/pricing">Zitadel</a></td></tr>
<tr>
<td>License Type</td><td><a target="_blank" href="https://github.com/keycloak/keycloak/blob/main/LICENSE.txt">Apache v2</a></td><td><a target="_blank" href="https://github.com/apereo/cas/blob/master/LICENSE">Apache v2</a></td><td><a target="_blank" href="https://github.com/goauthentik/authentik/blob/main/LICENSE">Multi-layer licensing</a></td><td><a target="_blank" href="https://github.com/authelia/authelia/blob/master/LICENSE">Apache v2</a></td><td><a target="_blank" href="https://github.com/zitadel/zitadel/blob/main/LICENSE">Apache v2</a></td></tr>
<tr>
<td><strong>Supported Standard Protocols</strong></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>Kerberos</td><td>✔</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr>
<td>Radius</td><td>-</td><td>✔</td><td>✔</td><td>-</td><td>-</td></tr>
<tr>
<td>OpenID Connect</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr>
<tr>
<td>OAuth 2.0</td><td>✔</td><td>✔</td><td>✔</td><td>partial</td><td>✔</td></tr>
<tr>
<td>SAML 2.0</td><td>✔</td><td>✔</td><td>✔</td><td>-</td><td>✔</td></tr>
<tr>
<td>Json Web Token (JWT)</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr>
<tr>
<td>System for Cross-domain Identity Management (SCIM)</td><td>✔</td><td>✔</td><td>-</td><td>-</td><td>-</td></tr>
<tr>
<td>OpenID Connect Client Initiated Backchannel Authentication (CIBA)</td><td>✔</td><td>-</td><td>partial</td><td>-</td><td>-</td></tr>
<tr>
<td>OAuth 2.0 Pushed Authorization Requests (PAR)</td><td>✔</td><td>✔</td><td>-</td><td>✔</td><td>-</td></tr>
<tr>
<td>OAuth 2.0 Demonstrating Proof-of-Possession (dpop)</td><td>✔</td><td>✔</td><td>-</td><td>-</td><td>-</td></tr>
<tr>
<td>W3C Web Authentication (WebAuthn)</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr>
<tr>
<td><strong>Identity Brokering and Social Login</strong></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>Social Login</td><td>Supports login with Google, GitHub, Facebook, Twitter, and other social networks</td><td>Supports login with Google, GitHub, Facebook, Twitter, and other social networks</td><td>Supports login with Google, GitHub, Facebook, Twitter, and other social networks</td><td>Supports login with Google, GitHub, Facebook, Twitter, and other social networks</td><td>Supports login with Google, GitHub, Facebook, Twitter, and other social networks</td></tr>
<tr>
<td>Identity Brokering</td><td>OpenID Connect or SAML 2.0 IdPs</td><td>OpenID Connect or SAML 2.0 IdPs</td><td>OpenID Connect or SAML 2.0 IdPs</td><td>OpenID Connect</td><td>OpenID Connect or SAML 2.0 IdPs</td></tr>
<tr>
<td>User Federation</td><td>Built-in support to connect to existing LDAP or Active Directory servers. Supports also custom identity provider based on a relational database.</td><td>Built-in support to connect to existing LDAP or Active Directory servers. Supports WS-Federation built on top of <a target="_blank" href="http://cxf.apache.org/fediz.html">Apache Fedix</a></td><td>Built-in support to connect to existing LDAP or Active Directory servers</td><td>-</td><td>Built-in support to connect to existing LDAP or Active Directory servers, and <a target="_blank" href="https://zitadel.com/docs/guides/integrate/identity-providers">more</a></td></tr>
<tr>
<td><strong>Authentication and Authorization</strong></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>Multi-factor authentication (MFA)</td><td>Supports OTP, TOTP, and HOTP via Google Authenticator, FreeOTP, Authy</td><td>Supports OTP, TOTP, and HOTP via Duo Security, YubiKey, RSA, Google Authenticator, WebAuthn, Authy and <a target="_blank" href="https://apereo.github.io/cas/6.6.x/mfa/Configuring-Multifactor-Authentication.html">more</a></td><td>Supports SMS 2FA, OTP, TOTP, and WebAuthn</td><td>Supports OTP, TOTP, Mobile Push Notifications, and WebAuthn</td><td>Supports SMS 2FA, OTP, TOTP, Universal Second Factor (U2F), Email 2FA</td></tr>
<tr>
<td>Passkeys/Passwordless support</td><td>✔</td><td>✔</td><td>✔</td><td>-</td><td>✔</td></tr>
<tr>
<td>Built-in CORS support</td><td>✔</td><td>✔</td><td>partial</td><td>✔</td><td>✔</td></tr>
<tr>
<td>Session management</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr>
<tr>
<td>Password policy enforcement</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>partial</td></tr>
<tr>
<td><strong>Deployment and Scalability</strong></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>Middleware</td><td><a target="_blank" href="https://www.keycloak.org/migration/migrating-to-quarkus">Quarkus</a></td><td>Apache Tomcat, Jetty, Undertow</td><td>Python framework</td><td>Go Framework</td><td>Go Framework</td></tr>
<tr>
<td>Clustering for Scalability and High Availability</td><td>supported</td><td>supported</td><td>-</td><td>-</td><td>supported with CockroachDB cluster</td></tr>
<tr>
<td>Multi-site deployment</td><td>supported</td><td>-</td><td>-</td><td>-</td><td>supported</td></tr>
<tr>
<td>Multitenancy</td><td>supported through concept of Realms</td><td>-</td><td>-</td><td>-</td><td>✔</td></tr>
<tr>
<td>High Availability active-passive deployment</td><td>supported</td><td>supported</td><td>-</td><td>-</td><td>-</td></tr>
<tr>
<td>High Availability active-active deployment</td><td>supported with Kubernetes Operator</td><td>supported with multiple nodes or single node with multiple server processes</td><td>-</td><td>-</td><td>supported with CockroachDB cluster</td></tr>
<tr>
<td>Container image</td><td><a target="_blank" href="https://quay.io/repository/keycloak/keycloak">Available on Quay.io</a></td><td><a target="_blank" href="https://hub.docker.com/r/apereo/cas/">Available on Dockerhub</a></td><td><a target="_blank" href="https://github.com/goauthentik/authentik/blob/main/Dockerfile">Dockerfile</a></td><td><a target="_blank" href="https://hub.docker.com/r/authelia/authelia">Available on Dockerhub</a></td><td><a target="_blank" href="ghcr.io/zitadel/zitadel:latest">Available on ghcr.io</a></td></tr>
<tr>
<td>Kubernetes Deployment</td><td>supported</td><td>supported</td><td>supported</td><td>supported</td><td>supported</td></tr>
<tr>
<td>Kubernetes Operator</td><td><a target="_blank" href="https://operatorhub.io/operator/keycloak-operator"> Available at OperatorHub</a></td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr>
<td>Ansible Collection</td><td><a target="_blank" href="https://github.com/ansible-middleware/keycloak">Available on Github</a></td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr>
<td>Operating System support</td><td>Linux and Windows</td><td>Linux and Windows</td><td>Linux and Windows</td><td>Linux and Windows</td><td>Linux and Windows</td></tr>
<tr>
<td><strong>User Interface</strong></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>Web UI</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr>
<tr>
<td>Admin Management Interface</td><td>✔</td><td>✔</td><td>✔</td><td>partial</td><td>✔</td></tr>
<tr>
<td>User Account Management Interface</td><td>✔</td><td>✔</td><td>✔</td><td>-</td><td>✔</td></tr>
<tr>
<td>RESTful API Access</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr>
<tr>
<td>Command Line Interface Access</td><td>✔</td><td>✔</td><td>-</td><td>✔</td><td>-</td></tr>
<tr>
<td>Customizable Theme</td><td>✔</td><td>✔</td><td>✔</td><td>partial</td><td>✔</td></tr>
<tr>
<td><strong>Compliance</strong></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>SOC 2 Type II</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr>
<td>ISO/IEC 27001 standard for information security management systems</td><td>-</td><td>-</td><td>-</td><td>-</td><td>✔</td></tr>
<tr>
<td>GDPR</td><td>partial</td><td>-</td><td>✔</td><td>-</td><td>✔</td></tr>
<tr>
<td>FIPS 140-2 Compliant</td><td>✔</td><td>-</td><td>-</td><td>-</td><td>✔</td></tr>
<tr>
<td>FAPI 2 (Financial API 2.0 Standard)</td><td>✔</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr>
<td>Metrics, Auditing, Reporting</td><td><a target="_blank" href="https://www.keycloak.org/server/configuration-metrics">supported</a></td><td><a target="_blank" href="https://apereo.github.io/cas/6.6.x/audits/Audits.html">supported</a></td><td><a target="_blank" href="https://goauthentik.io/docs/installation/monitoring">supported</a></td><td><a target="_blank" href="https://www.authelia.com/configuration/telemetry/metrics/">supported</a></td><td><a target="_blank" href="https://zitadel.com/docs/apis/observability/metrics">supported</a></td></tr>
<tr>
<td><strong>Extensible</strong></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>Third Party Extension</td><td><a target="_blank" href="https://www.keycloak.org/extensions.html">List of available extensions</a></td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
</tbody>
</table>
</div><h2 id="heading-disclaimer">Disclaimer:</h2>
<p>The information for this comparison was first retrieved on November 27, 2023. The article was last updated on December 5, 2023.</p>
<h3 id="heading-found-this-useful">Found this useful:</h3>
<p>Follow our page on <a target="_blank" href="https://www.linkedin.com/company/geanttechnology">LinkedIn</a></p>
]]></content:encoded></item><item><title><![CDATA[Trivy - The Container Image Scanner]]></title><description><![CDATA[Preamble:
Trivy is an open source single binary application written in Go and designed to find vulnerabilities, misconfigurations, secrets, SBOMs (Software Bill of Materials) in Container Images and Virtual Machine Images. It is a versatile security ...]]></description><link>https://blog.geanttech.com/trivy-the-container-image-scanner</link><guid isPermaLink="true">https://blog.geanttech.com/trivy-the-container-image-scanner</guid><category><![CDATA[trivy]]></category><category><![CDATA[Security]]></category><category><![CDATA[containers]]></category><category><![CDATA[docker images]]></category><category><![CDATA[supplychainsecurity]]></category><dc:creator><![CDATA[GEANT TECH LLC]]></dc:creator><pubDate>Thu, 09 Nov 2023 17:48:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1699548032090/1bbad15e-e7ab-4891-a096-5f076d6f5aaa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-preamble">Preamble:</h3>
<p><a target="_blank" href="https://trivy.dev/">Trivy</a> is an open source single binary application written in Go and designed to find vulnerabilities, misconfigurations, secrets, SBOMs (Software Bill of Materials) in Container Images and Virtual Machine Images. It is a versatile security utility tool with built-in scanners that can look for security issues on a number of targets such as:</p>
<ul>
<li>Container Images </li>
<li>Container Registries</li>
<li>Virtual Machine Images </li>
<li>Kubernetes </li>
<li>Files System</li>
<li>Software Licenses</li>
<li>Software Bill of Material</li>
<li>Amazon Cloud</li>
</ul>
<p>A best use of <strong>Trivy</strong> is for scanning container images to ensure:</p>
<ul>
<li>They are safe</li>
<li>They do not contain vulnerabilities</li>
<li>They do not bring in security risks</li>
<li>They do not violate any licensing</li>
<li>There is a generated SBOMs for all the packages installed</li>
</ul>
<h3 id="heading-how-to-install-trivy">How To Install Trivy?</h3>
<p>It is a straight forward process. Start by downloading and extracting the single binary application:</p>
<pre><code class="lang-markdown">$ sudo wget https://github.com/aquasecurity/trivy/releases/download/v0.47.0/trivy<span class="hljs-emphasis">_0.47.0_</span>Linux-64bit.tar.gz
$ sudo tar xvzf trivy<span class="hljs-emphasis">_0.47.0_</span>Linux-64bit.tar.gz -C /usr/local/bin
</code></pre>
<p>Ensuring the executable flag is set on the application:</p>
<pre><code class="lang-markdown">$ sudo chmod +x /usr/local/bin/trivy
</code></pre>
<p>Let's run the help command to validate the installation was successful:</p>
<pre><code class="lang-markdown">$ trivy --help
</code></pre>
<p><img src="https://github.com/geanttechnology/blog-assets/assets/3255683/2b944e4f-6583-4067-83a1-92c92d1afe0d" alt="Trivy Help View" /></p>
<h3 id="heading-using-trivy-to-scan-a-container-images">Using Trivy to Scan a Container Images:</h3>
<p><strong>Trivy</strong> can scan container images for:</p>
<ul>
<li>Vulnerabilities</li>
<li>Misconfigurations</li>
<li>Secrets</li>
<li>Licenses</li>
<li>SBOMs generation</li>
</ul>
<p>By default, vulnerability and secret scanning are enabled and here is the command to run:</p>
<pre><code class="lang-markdown">$ trivy image alpine:3.15
</code></pre>
<p><img src="https://github.com/geanttechnology/blog-assets/assets/3255683/e4d8ab64-2bc7-42d0-ba33-60bebf0fdfcc" alt="Trivy Image Scan" /></p>
<p>To scan a container image for vulnerabilities only run:</p>
<pre><code class="lang-markdown">$ trivy image --scanners vuln alpine:3.15
</code></pre>
<p>To scan a container image for misconfigurations only run:</p>
<pre><code class="lang-markdown">$ trivy image --scanners config alpine:3.15
</code></pre>
<p><img src="https://github.com/geanttechnology/blog-assets/assets/3255683/70867d8a-b1c0-481e-b991-c5446112ae22" alt="Trivy Image Config Scan" /></p>
<p>To scan for licensing issues only run:</p>
<pre><code class="lang-markdown">$ trivy image --scanners license alpine:3.15
</code></pre>
<p><img src="https://github.com/geanttechnology/blog-assets/assets/3255683/b044b3b9-3e84-4ff7-8615-acb14c11c2aa" alt="Trivy Image License Scan" /></p>
<p>To generate SBOM, you can use the --format to specify between cyclonedx or spdx-json format:</p>
<pre><code class="lang-markdown">$ trivy image --format spdx-json --output result.json alpine:3.15
</code></pre>
<pre><code class="lang-markdown">$ trivy image --format cyclonedx --output result.json alpine:3.15
</code></pre>
<h3 id="heading-trivy-vulnerability-database">Trivy Vulnerability Database:</h3>
<p>When trivy is installed on a system that has access to the Internet, it will automatically download the latest vulnerability database during execution. In air-gapped environments (no access to the Internet) trivy's vulnerability database has to be updated manually and here is the process to do so:</p>
<p>1.) <strong>Download the vulnerability database:</strong></p>
<pre><code class="lang-markdown">$ mkdir /tmp/trivy-vul-db
$ trivy --cache-dir /tmp/trivy-vul-db image --download-db-only
$ ls -la /tmp/trivy-vul-db/db
</code></pre>
<p>There should be two files: <code>trivy.db</code>, and <code>metadata.json</code>.  In the next step we will copy those files to Trivy's DB cache directory in the air-gapped environment.</p>
<p><img src="https://github.com/geanttechnology/blog-assets/assets/3255683/e3657da0-e7bf-4616-966e-4faa4f71116e" alt="Trivy DB Files" /></p>
<p>2.) <strong>Put the DB file in the cache directory:</strong>
The DB cache folder is usually located in <code>/home/myuser/.cache/trivy/db</code>. Here we will use scp for remote copy (rsync could also be used).</p>
<pre><code class="lang-markdown">$ scp /tmp/trivy-vul-db/db/trivy.db  /tmp/trivy-vul-db/db/metadata.json myuser@remotehost:/home/myuser/.cache/trivy/db/
</code></pre>
<p><em>Note: If the /home/myuser/.cache/trivy/db/ folder does not exist you will have to create it before migrating the database</em>.</p>
<p>3.) <strong>Now we have to run trivy with specific flags:</strong>
In an air-gapped environment, you have to specify <code>--skip-db-update</code> and <code>--skip-java-db-update</code> so that Trivy doesn't attempt to download the latest database files. In addition, if you want to scan pom.xml dependencies, you need to specify <code>--offline-scan</code>. Here is an example:</p>
<pre><code class="lang-markdown">$ trivy image --skip-db-update --skip-java-db-update --offline-scan alpine:3.12
</code></pre>
<p>For more on how to manage air-gapped deployment of Trivy refer to this link in the official documentation: <a target="_blank" href="https://aquasecurity.github.io/trivy/v0.47/docs/advanced/air-gap/">trivy-in-air-gapped-environments</a></p>
<h3 id="heading-extending-trivys-vulnerability-database">Extending Trivy's Vulnerability Database:</h3>
<p>The <strong>Trivy Vulnerability Database</strong> has vulnerability information from NVD, Red Hat, Debian, etc. If you are one those power users who would like to extend trivy's vulnerabilities database and bring in your own, the <strong>trivy-db</strong> CLI utility is a tool used internally by the <strong>Trivy team</strong> to build and update vulnerability DBs. To learn more on how to use this tool to bring in your own curated list of vulnerabilities refer to the link: <a target="_blank" href="https://github.com/aquasecurity/trivy-db">Trivy-DB-Utility</a></p>
<p>Found this useful, follow our page on: https://www.linkedin.com/company/geanttechnology</p>
]]></content:encoded></item><item><title><![CDATA[How To use Terrascan to scan Terragrunt Code]]></title><description><![CDATA[Preamble:
If you have been writing Infrastructure as Code using frameworks like Terraform and Kubernetes, you know how painful it was to not have a proper testing framework to test the code before deploying. Resulting in dev teams hacking their way i...]]></description><link>https://blog.geanttech.com/how-to-use-terrascan-to-scan-terragrunt-code</link><guid isPermaLink="true">https://blog.geanttech.com/how-to-use-terrascan-to-scan-terragrunt-code</guid><category><![CDATA[Terraform]]></category><category><![CDATA[terragrunt]]></category><category><![CDATA[#IaC]]></category><category><![CDATA[terrascan]]></category><dc:creator><![CDATA[GEANT TECH LLC]]></dc:creator><pubDate>Wed, 08 Nov 2023 12:01:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1699444748397/5d4afdc7-a902-4968-b17c-5e0bf33a1029.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4 id="heading-preamble">Preamble:</h4>
<p>If you have been writing Infrastructure as Code using frameworks like Terraform and Kubernetes, you know how painful it was to not have a proper testing framework to test the code before deploying. Resulting in dev teams hacking their way in and out to provide a somewhat testing framework to increase trust in their code.</p>
<p>Worry no more, <a target="_blank" href="https://runterrascan.io/">Terrascan</a> is here to save the day. Developed by <a target="_blank" href="https://www.tenable.com/">Tenable</a> (the  leading Cybersecurity Exposure Management Company), Terrascan is an open-source static code analysis tool designed for Infrastructure as Code. It helps developers and DevOps teams ensure their infrastructure code adheres to best practices, security standards, and compliance requirements. Terrascan provides 500+ out-of-the-box policies so that you can scan your IaC code against common policy standards such as the CIS Benchmark.</p>
<h4 id="heading-initializing-terrascan">Initializing Terrascan:</h4>
<p>Once terrascan is installed, the first command to run is:</p>
<pre><code class="lang-markdown">$ terrascan init
</code></pre>
<p>This command initializes and downloads the latest policies from the <a target="_blank" href="https://github.com/tenable/terrascan">repository</a> into <code>~/.terrascan</code>. By default the policies are installed here: <code>~/.terrascan/pkg/policies/opa/rego</code> and are fetched while scanning and performing code analysis.  It leverages the Open Policy Agent (OPA) engine so that you can easily create your own custom policies using the Rego query language.</p>
<h4 id="heading-scanning-iac-code-with-terrascan">Scanning IaC Code with Terrascan</h4>
<p>After initializing terrascan, the next command to run is with the option <code>scan</code> to scan the IaC code for compliance requirements, best practices, and security standards.</p>
<pre><code class="lang-markdown">$ terrascan scan -c /directory/with/iac/code
</code></pre>
<p>The <code>scan</code> command also supports the following flags:</p>
<ol>
<li><code>--config-path</code> Specifies a directory to be scanned</li>
<li><code>--iac-file</code> Specifies path to a single IaC file to be scanned</li>
<li><code>--iac-type</code> Specifies IaC provider type (arm, cft, docker, helm, k8s, kustomize, terraform, or tfplan)</li>
<li><code>--policy-type</code> Specifies policy type (all, aws, azure, docker, gcp, github, k8s) (default to all)</li>
<li><code>--remote-type</code> Specifies type of remote backend where the IaC code resides (git, s3, gcs, http, terraform-registry)</li>
<li><code>--remote-url</code> Specifies the url pointing to remote IaC repository</li>
</ol>
<p>The full list of flags for the scan command can be found by running: <code>terrascan scan -h</code>
<img src="https://github.com/geanttechnology/blog-assets/assets/3255683/4886c51d-b7d9-462a-9264-54f1158c5f1f" alt="Terrascan scan" /></p>
<h4 id="heading-scanning-terragrunt-code-with-terrascan">Scanning Terragrunt Code with Terrascan</h4>
<p>Terragrunt is a thin wrapper that provides extra tools for running Terraform in a DRY (Do Not Repeat Yourself) fashion and for managing Terraform remote state. Here is how Terrascan can be used to scan Terragrunt IaC code:</p>
<p>1.) Inside the folder containing the <code>terragrunt.hcl</code> file, run the following to convert the terragrunt plan into tfplan format:</p>
<pre><code class="lang-markdown">terragrunt plan -out $(pwd)/plan.tfplan
</code></pre>
<p>2.) Next, we will convert the tfplan file into json formatted output which will be used by terrascan:</p>
<pre><code class="lang-markdown">terragrunt show -json $(pwd)/plan.tfplan &gt; plan.json
</code></pre>
<p>3.) There is a small bug (at the time of writing this blog post) that prevents terrascan from reading tfplan json content formatted in <strong>format_version 1.1</strong>. To resolve the issue we will have to edit <code>plan.json</code> and update the <strong>format_version</strong> to <strong>0.2</strong>.</p>
<pre><code class="lang-markdown">vi plan.json
</code></pre>
<p>Change <strong>format_version</strong> from <strong>1.1</strong> to <strong>0.2</strong></p>
<p>4.) Run terrascan to scan the <code>plan.json</code> file</p>
<pre><code class="lang-markdown">terrascan scan --iac-type tfplan --iac-file plan.json
</code></pre>
<p>And there you have it, Here is a sample output of a scan performed:
<img src="https://github.com/geanttechnology/blog-assets/assets/3255683/d2f5300a-9c2f-4a47-93a8-cdabf31360bc" alt="Terrascan scan" /></p>
<p>Found this useful, follow our page on: https://www.linkedin.com/company/geanttechnology</p>
]]></content:encoded></item><item><title><![CDATA[CISA Top Ten Cybersecurity
Misconfigurations]]></title><description><![CDATA[Default Configurations of Software Applications

Modify the default configuration of applications and appliances before going live in production environment.

Change or disable vendor-supplied default usernames and passwords of services, software and...]]></description><link>https://blog.geanttech.com/cisa-top-ten-cybersecurity-misconfigurations</link><guid isPermaLink="true">https://blog.geanttech.com/cisa-top-ten-cybersecurity-misconfigurations</guid><category><![CDATA[#cybersecurity]]></category><dc:creator><![CDATA[GEANT TECH LLC]]></dc:creator><pubDate>Mon, 06 Nov 2023 20:40:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1699303114394/83e243e6-922f-45e6-9972-2e8ad7fd3b8d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4 id="heading-default-configurations-of-software-applications">Default Configurations of Software Applications</h4>
<ol>
<li><p>Modify the default configuration of applications and appliances before going live in production environment.</p>
</li>
<li><p>Change or disable vendor-supplied default usernames and passwords of services, software and hardware equipment.</p>
</li>
<li><p>If not required disable LLMNR and NetBIOS on WINDOWS Systems</p>
</li>
</ol>
<h4 id="heading-mitigate-improper-separation-of-user-and-administrator-privileges">Mitigate Improper Separation of User and Administrator Privileges</h4>
<ol>
<li><p>Implement Authentication, Authorization, Accountability, and Auditing system for non-repudiation.</p>
</li>
<li><p>Audit user accounts and remove those that are inactive or unnecessary. Limit the number of users with identity and access management privileges.</p>
</li>
<li><p>Restrict the use of privileged accounts to perform general tasks. Only use service accounts with the permissions necessary for the services they need access.</p>
</li>
<li><p>Implement time-based access for privileged accounts. Disable unused services and implement ACLs and RBACs to protect services and applications.</p>
</li>
<li><p>Implement a Security Information and Event Management System for log  aggregation, correlation, visualization, and alerting.</p>
</li>
</ol>
<h4 id="heading-lack-of-network-segmentation">Lack of Network Segmentation</h4>
<ol>
<li><p>Leverage next-gen firewalls to perform deep packet filtering, stateful packet inspection, and application level packet inspection.</p>
</li>
<li><p>Setup network segmentation to isolate critical systems, functions, and resources.</p>
</li>
<li><p>Create Virtually Private Cloud instances to isolate essential cloud systems.</p>
</li>
</ol>
<h4 id="heading-poor-patch-management">Poor Patch Management</h4>
<ol>
<li><p>Implement and maintain an efficient patch management process. Update software and firmware regularly.</p>
</li>
<li><p>Automate the update process as much as possible.</p>
</li>
<li><p>Use the Common Vulnerability Scoring System for a qualitative measure of severity.</p>
</li>
<li><p>Evaluate the use of unsupported hardware and software. Discontinue or isolate legacy systems that are outdated.</p>
</li>
</ol>
<h4 id="heading-bypassing-of-system-access-control">Bypassing of System Access Control</h4>
<ol>
<li><p>Limit credential overlap across systems.</p>
</li>
<li><p>Deny domain users the ability to be in the local administrator group on multiple systems.</p>
</li>
<li><p>Use service accounts for system to system communication.</p>
</li>
</ol>
<h4 id="heading-weak-or-misconfigured-multifactor-authentication">Weak or Misconfigured Multifactor Authentication</h4>
<ol>
<li><p>Disable the use of New Technology LAN Manager (NTLM) and other legacy authentication protocols on Windows systems.</p>
</li>
<li><p>Implement cloud-primary authentication solution using modern open standards such OpenID Connect.</p>
</li>
<li><p>Enforce phising-resitant Multifactor Authentication (MFA)</p>
</li>
</ol>
<h4 id="heading-insufficient-acls-on-network-shares-and-services">Insufficient ACLs on Network Shares and Services</h4>
<ol>
<li><p>Implement secure access for all storage devices and network shares.</p>
</li>
<li><p>Apply the principle if least privilege on users, groups, and roles.</p>
</li>
<li><p>Apply restrictive permissions to files, shares, and directories.</p>
</li>
</ol>
<h4 id="heading-unrestricted-code-execution">Unrestricted Code Execution</h4>
<ol>
<li><p>Implement system settings that prevent the ability to run applications downloaded from untrusted sources.</p>
</li>
<li><p>Use  application control tools that restrict program execution by default; also  known  as allowlisting.</p>
</li>
<li><p>Block or prevent the execution of known vulnerability drives. Use read-only and  minimal images for containers.</p>
</li>
<li><p>Constrain scripting languages from auto-executing to prevent malicious activities.  </p>
</li>
</ol>
<p><br />
Found  this useful, follow our page on: <a target="_blank" href="https://www.linkedin.com/company/geanttechnology">https://www.linkedin.com/company/geanttechnology</a></p>
]]></content:encoded></item></channel></rss>