<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Posts tagged with “Kali” on Mark van Lent’s weblog</title>
  <updated>2024-02-13T00:00:00+00:00</updated>
  <link rel="self" type="application/atom+xml" href="https://markvanlent.dev/tags/kali/index.xml" hreflang="en"/>
  <id>tag:markvanlent.dev,2010-04-02:/tags/kali/index.xml</id>
  <link rel="alternate" type="text/html" href="https://markvanlent.dev/tags/kali/" hreflang="en"/>
  <author>
      <name>Mark van Lent</name>
      <uri>https://markvanlent.dev/about/</uri>
    </author>
  <rights>Copyright (c) Mark van Lent, Creative Commons Attribution 4.0 International License.</rights>
  <icon>https://markvanlent.dev/favicon.ico</icon>
  <entry>
    <title type="html"><![CDATA[Custom Kali Linux ISO — part 2]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2024/02/13/custom-kali-linux-iso-part-2/" type="text/html" />
    <id>https://markvanlent.dev/2024/02/13/custom-kali-linux-iso-part-2/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="kali" />
    <category term="tools" />
    <category term="vagrant" />
    
    <updated>2024-02-13T20:03:46Z</updated>
    <published>2024-02-13T00:00:00Z</published>
    <content type="html"><![CDATA[<p>In <a href="/2024/02/11/custom-kali-linux-iso-part-1/">part 1</a> of this (mini) series I
described what I did to be able to build an ISO image using Vagrant. Now it&rsquo;s
time to actually customize it.</p>
<p>I&rsquo;ll show what I have done and will provide links to the official documentation
for more in-depth information. This post is mainly for my own reference in the
future, but others might benefit from it as wel.</p>
<p>The basis is an existing Kali Linux environment which is setup with the build
script. See the
<a href="https://www.kali.org/docs/development/live-build-a-custom-kali-iso/#getting-ready---setting-up-the-build-script-kali-system">Getting Ready</a>
section of the documentation. Long story short:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt install -y git live-build simple-cdd cdebootstrap curl
</span></span><span class="line"><span class="cl">git clone https://gitlab.com/kalilinux/build-scripts/live-build-config.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> live-build-config
</span></span></code></pre></div><h2 id="additional-packages">Additional packages</h2>
<p>You can include extra packages on your custom Live ISO. If these are available in the
Kali repos, it is quite simple. As described in the
<a href="https://www.kali.org/docs/development/live-build-a-custom-kali-iso/#controlling-the-packages-included-in-your-build">documentation</a>
you can edit the files (in case of the default Live ISO) in
<code>kali-config/variant-default/package-lists/kali.list.chroot</code>. I decided to put
the additional packages in a new file:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;# Custom packages
</span></span></span><span class="line"><span class="cl"><span class="s2">chromium
</span></span></span><span class="line"><span class="cl"><span class="s2">torbrowser-launcher
</span></span></span><span class="line"><span class="cl"><span class="s2">&#34;</span> &gt; kali-config/variant-default/package-lists/custom.list.chroot
</span></span></code></pre></div><h2 id="additional-apt-repositories">Additional APT repositories</h2>
<p>A bit harder was the case where I wanted to add Visual Studio Code. This package
requires a separate APT repository. So let&rsquo;s start there first.</p>
<p>To be able to add the files needed, you need to create an additional directory:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p kali-config/common/archives
</span></span></code></pre></div><p>Now you can configure the repository:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main&#34;</span> &gt; kali-config/common/archives/vscode.list.chroot
</span></span><span class="line"><span class="cl">cp kali-config/common/archives/vscode.list.chroot kali-config/common/archives/vscode.list.binary
</span></span></code></pre></div><p>The first command creates a file with the <code>.chroot</code> extension and is used during
the chroot stage. To also have this file on the live system (to be able to use
APT later on to update the packages), I copy the <code>.chroot</code> file to one ending in
<code>.binary</code>. For more information on this subject, see the Debian documentation pages
<a href="https://live-team.pages.debian.net/live-manual/html/live-manual/customization-overview.en.html">Customization overview</a>
and
<a href="https://live-team.pages.debian.net/live-manual/html/live-manual/customizing-package-installation.en.html">Customizing package installation</a>.</p>
<p>The APT repository signing key also needs to be stored in the same directory:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -s -o kali-config/common/archives/vscode.key https://packages.microsoft.com/keys/microsoft.asc
</span></span></code></pre></div><p>There&rsquo;s one more change that needs to be made. To make sure the build process
can actually use the packages from the added repository, you&rsquo;ll need to include a
few more packages at boot time.</p>
<p>To do this, edit the file <code>auto/config</code> and add an <code>--include</code> option to the
<code>debootstrap-options</code> line. Concretely this means changing this line:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">--debootstrap-options &#34;--keyring=/usr/share/keyrings/kali-archive-keyring.gpg&#34; \
</span></span></code></pre></div><p>into this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">--debootstrap-options &#34;--include=apt-transport-https,ca-certificates,openssl --keyring=/usr/share/keyrings/kali-archive-keyring.gpg&#34; \
</span></span></code></pre></div><p>After that you are good to go. Just do not forget to add the package you want to
install (in this case <code>code</code>) to the list of packages. In my case this meant
updating <code>kali-config/variant-default/package-lists/custom.list.chroot</code>.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Custom Kali Linux ISO — part 1]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2024/02/11/custom-kali-linux-iso-part-1/" type="text/html" />
    <id>https://markvanlent.dev/2024/02/11/custom-kali-linux-iso-part-1/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="kali" />
    <category term="tools" />
    <category term="vagrant" />
    
    <updated>2024-02-13T20:03:46Z</updated>
    <published>2024-02-11T00:00:00Z</published>
    <content type="html"><![CDATA[<p>When I wanted to create a custom Kali Linux ISO using Vagrant, the allocated
disk was not big enough. Solving this required some searching and putting
several bits of information together. This post shows how I increased the disk
size.</p>
<p>The Kali documentation contains a nice page about <a href="https://www.kali.org/docs/development/live-build-a-custom-kali-iso/">creating a custom Kali
ISO</a>. That
page states that <q>[i]deally, you should build your custom
Kali ISO from within a pre-existing Kali environment, [&hellip;]</q> so I
decided to use <a href="https://www.vagrantup.com/">Vagrant</a> to create a virtual machine
which I could use.</p>
<p>The basic configuration for that box:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="no">Vagrant</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="s2">&#34;2&#34;</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">box</span> <span class="o">=</span> <span class="s2">&#34;kalilinux/rolling&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">provider</span> <span class="s2">&#34;virtualbox&#34;</span> <span class="k">do</span> <span class="o">|</span><span class="n">vb</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Do not display the VirtualBox GUI when booting the machine</span>
</span></span><span class="line"><span class="cl">    <span class="n">vb</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="kp">false</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span></code></pre></div><p>When I started building the ISO, the default 40G disk filled up and the process
could not be completed.</p>
<p>To solve this, the first step was to have Vagrant resize the disk for the
machine. You can do this by adding a single line to your configuration.
(For details see the relevant
<a href="https://developer.hashicorp.com/vagrant/docs/disks/usage">Vagrant documentation</a>.)</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="no">Vagrant</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="s2">&#34;2&#34;</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">box</span> <span class="o">=</span> <span class="s2">&#34;kalilinux/rolling&#34;</span>
</span></span><span class="line hl"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">disk</span> <span class="ss">:disk</span><span class="p">,</span> <span class="ss">size</span><span class="p">:</span> <span class="s2">&#34;50GB&#34;</span><span class="p">,</span> <span class="ss">primary</span><span class="p">:</span> <span class="kp">true</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">provider</span> <span class="s2">&#34;virtualbox&#34;</span> <span class="k">do</span> <span class="o">|</span><span class="n">vb</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Do not display the VirtualBox GUI when booting the machine</span>
</span></span><span class="line"><span class="cl">    <span class="n">vb</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="kp">false</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div>
<p>While this increases the size of the disk, I still had to increase the
partition in the OS. This was a bit more involved, but by adding a couple of
commands in a <code>config.vm.provision</code> section, I got it working without needing to
reboot the machine afterwards:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="no">Vagrant</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="s2">&#34;2&#34;</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">box</span> <span class="o">=</span> <span class="s2">&#34;kalilinux/rolling&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">disk</span> <span class="ss">:disk</span><span class="p">,</span> <span class="ss">size</span><span class="p">:</span> <span class="s2">&#34;50GB&#34;</span><span class="p">,</span> <span class="ss">primary</span><span class="p">:</span> <span class="kp">true</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">provider</span> <span class="s2">&#34;virtualbox&#34;</span> <span class="k">do</span> <span class="o">|</span><span class="n">vb</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Do not display the VirtualBox GUI when booting the machine</span>
</span></span><span class="line"><span class="cl">    <span class="n">vb</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="kp">false</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">  <span class="n">config</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">provision</span> <span class="s2">&#34;shell&#34;</span><span class="p">,</span> <span class="ss">inline</span><span class="p">:</span> <span class="s">&lt;&lt;-SHELL
</span></span></span><span class="line"><span class="cl"><span class="s"></span>    <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">update</span>
</span></span><span class="line"><span class="cl">    <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="o">-</span><span class="n">y</span> <span class="n">cloud</span><span class="o">-</span><span class="n">guest</span><span class="o">-</span><span class="n">utils</span>
</span></span><span class="line"><span class="cl">    <span class="n">swapoff</span> <span class="o">-</span><span class="n">a</span>
</span></span><span class="line"><span class="cl">    <span class="n">echo</span> <span class="s1">&#39;+10G,&#39;</span> <span class="o">|</span> <span class="n">sfdisk</span> <span class="o">--</span><span class="n">move</span><span class="o">-</span><span class="n">data</span> <span class="o">--</span><span class="n">force</span> <span class="sr">/dev/s</span><span class="n">da</span> <span class="o">-</span><span class="n">N</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">    <span class="n">partprobe</span>
</span></span><span class="line"><span class="cl">    <span class="n">growpart</span> <span class="sr">/dev/s</span><span class="n">da</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="n">resize2fs</span> <span class="sr">/dev/s</span><span class="n">da1</span>
</span></span><span class="line"><span class="cl">    <span class="n">swapon</span> <span class="o">-</span><span class="n">a</span>
</span></span><span class="line"><span class="cl">  <span class="no">SHELL</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span>
</span></span></code></pre></div><p>Running &ldquo;<code>vagrant up</code>&rdquo; now does all the heavy lifting for you. Do note that
resizing the disk and making the extra space available to the OS takes
significantly more time when creating the machine (compared to using a machine
with the default disk size). Then again: if you know this, you can plan to have
a cup of coffee (or tea if you are like me) in that time.</p>
<p>The end result:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">┌──(vagrant㉿kali)-[~]
</span></span><span class="line"><span class="cl">└─$ df -h
</span></span><span class="line"><span class="cl">Filesystem      Size  Used Avail Use% Mounted on
</span></span><span class="line"><span class="cl">udev            942M     0  942M   0% /dev
</span></span><span class="line"><span class="cl">tmpfs           197M  896K  196M   1% /run
</span></span><span class="line hl"><span class="cl">/dev/sda1        48G   14G   32G  31% /
</span></span><span class="line"><span class="cl">tmpfs           983M     0  983M   0% /dev/shm
</span></span><span class="line"><span class="cl">tmpfs           5.0M     0  5.0M   0% /run/lock
</span></span><span class="line"><span class="cl">tmpfs           197M  116K  197M   1% /run/user/126
</span></span><span class="line"><span class="cl">vagrant         232G  173G   59G  75% /vagrant
</span></span><span class="line"><span class="cl">tmpfs           197M  112K  197M   1% /run/user/1000</span></span></code></pre></div>
<p>Time to create a custom Kali ISO&hellip; See
<a href="/2024/02/13/custom-kali-linux-iso-part-2/">part 2</a> for how I added extra
packages to the ISO.</p>]]></content>
  </entry>
</feed>
