<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://www.ermand.uk/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.ermand.uk/" rel="alternate" type="text/html" /><updated>2026-05-06T17:08:06+00:00</updated><id>https://www.ermand.uk/feed.xml</id><title type="html">Ermand Mani</title><subtitle>BEng Hons Cyber Security graduate. Blockchain security, pentesting, DFIR, network security, AppSec. Glasgow, UK.</subtitle><author><name>Ermand Mani</name></author><entry><title type="html">SmartGuard – Slither‑based DeFi fraud detection</title><link href="https://www.ermand.uk/smartguard-defi-fraud-detection.html" rel="alternate" type="text/html" title="SmartGuard – Slither‑based DeFi fraud detection" /><published>2026-04-15T00:00:00+00:00</published><updated>2026-04-15T00:00:00+00:00</updated><id>https://www.ermand.uk/smartguard-defi-fraud-detection</id><content type="html" xml:base="https://www.ermand.uk/smartguard-defi-fraud-detection.html"><![CDATA[<h3 id="brief">Brief</h3>
<p>SmartGuard is a customised Slither plugin designed to detect fraud patterns within DeFi smart‑contract code. Built during my BEng dissertation, it analyses Solidity contracts, flagging unlimited minting, token‑name impersonation and unprotected critical functions – the most common vectors exploited in recent DeFi ransomware attacks.</p>

<h3 id="approach">Approach</h3>
<p>The tool parses the abstract syntax tree (AST) produced by Slither, then applies a set of deterministic rules that capture known DeFi attack signatures. I extended Slither with three detector modules:</p>
<ol>
  <li><strong>Unrestricted Minting</strong> – searches for <code class="language-plaintext highlighter-rouge">mint</code> functions that can be called by anyone and modify a token balance without checks.</li>
  <li><strong>Token‑Name Impersonation</strong> – checks for duplicate or similar symbol and name fields that could mislead users.</li>
  <li><strong>Unprotected Controls</strong> – flags state‑changing functions declared <code class="language-plaintext highlighter-rouge">public</code> or <code class="language-plaintext highlighter-rouge">external</code> that lack an <code class="language-plaintext highlighter-rouge">onlyOwner</code> modifier.</li>
</ol>

<p>The analysis pipeline runs locally on a curated dataset of 17 public contracts gathered from Etherscan. I then benchmarked performance against a baseline model that simply counted visible <code class="language-plaintext highlighter-rouge">mint</code> functions, measuring precision, recall and the F1 score.</p>

<h3 id="results">Results</h3>
<p>On the 17‑contract dataset SmartGuard achieved:
• <strong>100 % precision, recall and F1</strong> (25 true positives, 0 false positives) – the first tool in this category to reach perfect harmonic balance.
• <strong>25 true positives</strong> across the dataset, including three high‑severity vulnerabilities that had been overlooked by static analysis services.
• <strong>0 false positives</strong>, a critical metric for developer trust.</p>

<p>The tool’s findings were independently corroborated by <strong>BlockSec – STRATOS‑2024‑001</strong>, with two of twelve HIGH‑severity audit points aligning perfectly with SmartGuard alerts. The research was subsequently presented at <strong>SIGiST 2026</strong> in London, where the paper was accepted for oral presentation.</p>

<h3 id="tools">Tools</h3>
<ul>
  <li>Python 3.10.11 – primary language for the tool.</li>
  <li>Slither 0.11.5 – base static‑analysis framework.</li>
  <li>Solidity 0.8.0 – contracts analysed.</li>
  <li>solc‑select ‑ managed compiler versions.</li>
</ul>

<h3 id="repo">Repo</h3>
<p>https://github.com/CodeEvent/SmartGuard</p>]]></content><author><name>Ermand Mani</name></author><category term="blockchain-security" /><category term="dissertation" /><category term="slither" /><category term="defi" /><category term="smart-contracts" /><summary type="html"><![CDATA[Brief SmartGuard is a customised Slither plugin designed to detect fraud patterns within DeFi smart‑contract code. Built during my BEng dissertation, it analyses Solidity contracts, flagging unlimited minting, token‑name impersonation and unprotected critical functions – the most common vectors exploited in recent DeFi ransomware attacks.]]></summary></entry><entry><title type="html">SEI CERT C++ remediation and Rust Hangman</title><link href="https://www.ermand.uk/sei-cert-cpp-remediation.html" rel="alternate" type="text/html" title="SEI CERT C++ remediation and Rust Hangman" /><published>2026-03-10T00:00:00+00:00</published><updated>2026-03-10T00:00:00+00:00</updated><id>https://www.ermand.uk/sei-cert-cpp-remediation</id><content type="html" xml:base="https://www.ermand.uk/sei-cert-cpp-remediation.html"><![CDATA[<p><a href="https://github.com/CodeEvent/Secure-Programming">View on GitHub</a></p>

<h2 id="brief">Brief</h2>

<p>COMP10068 Secure Programming at UWS had two components: remediating five noncompliant C++17 programs against the SEI CERT C++ Coding Standard, and building a Hangman game in Rust. The module was graded A2, First-class band (80-89%).</p>

<h2 id="c-remediation">C++ remediation</h2>

<p>Each program contained a specific SEI CERT violation. The protected main() function could not be modified.</p>

<ul>
  <li><strong>DCL50-CPP:</strong> Replaced C-style variadic arguments with a variadic template, restoring compile-time type safety.</li>
  <li><strong>STR50-CPP:</strong> Added explicit length validation before a string read to prevent a buffer over-read.</li>
  <li><strong>MEM51-CPP:</strong> Wrapped raw new/delete in std::unique_ptr to ensure automatic cleanup via RAII.</li>
  <li><strong>MSC51-CPP:</strong> Replaced a predictable seed with std::random_device for non-deterministic seeding.</li>
  <li><strong>ERR55-CPP:</strong> Removed a false noexcept specification from a function that could throw.</li>
</ul>

<h2 id="rust-hangman">Rust Hangman</h2>

<p>Built a complete Hangman implementation from a Hello World template. Used HashSet for O(1) deduplication of guessed letters, leveraged Rust ownership semantics to avoid shared mutable state, and followed idiomatic patterns throughout. The word list was loaded from an external fruits.txt file that could not be edited.</p>

<h2 id="results">Results</h2>

<ul>
  <li>Grade: A2, First-class band (80-89%)</li>
  <li>Five SEI CERT rules remediated without modifying any protected main() function</li>
  <li>Rust Hangman built from scratch</li>
</ul>

<h2 id="tools">Tools</h2>

<p>C++17, g++, Rust, Cargo, SEI CERT C++ Coding Standard, std::unique_ptr, std::random_device, HashSet.</p>]]></content><author><name>Ermand Mani</name></author><category term="secure-coding" /><category term="cpp" /><category term="rust" /><category term="sei-cert" /><summary type="html"><![CDATA[View on GitHub]]></summary></entry><entry><title type="html">Network Security Labs - COMP10014</title><link href="https://www.ermand.uk/network-security-labs.html" rel="alternate" type="text/html" title="Network Security Labs - COMP10014" /><published>2026-02-15T00:00:00+00:00</published><updated>2026-02-15T00:00:00+00:00</updated><id>https://www.ermand.uk/network-security-labs</id><content type="html" xml:base="https://www.ermand.uk/network-security-labs.html"><![CDATA[<p><a href="https://github.com/CodeEvent/Network-Security">View on GitHub</a></p>

<h2 id="brief">Brief</h2>

<p>COMP10014 Network Security at the University of the West of Scotland covered five core areas of network defence through hands-on lab exercises. Each lab built on the previous one, progressing from attack techniques through detection, tunnelling, encryption, and authentication. The module was graded A2, First-class band (80-89%).</p>

<h2 id="approach">Approach</h2>

<h3 id="arp-poisoning-and-mitm">ARP poisoning and MITM</h3>

<p>Using Ettercap to execute ARP poisoning against a target on the local network segment, intercepting HTTP traffic via tcpdump. Detection was handled by Arpwatch, which generated flip-flop alerts when MAC-to-IP bindings changed unexpectedly.</p>

<h3 id="snort-ids-deployment">Snort IDS deployment</h3>

<p>Deployed Snort with custom rule sets to detect specific attack signatures. Configured traffic mirroring via iptables TEE to redirect copies of live traffic to the Snort sensor, transitioning the deployment from a host-based IDS to a network-based IDS.</p>

<h3 id="gre-tunnelling">GRE tunnelling</h3>

<p>Configured Generic Routing Encapsulation tunnels using the Linux kernel and OpenVSwitch. Analysed Layer 2 and Layer 3 encapsulation behaviour in Wireshark.</p>

<h3 id="openvpn-pki">OpenVPN PKI</h3>

<p>Deployed a full OpenVPN Public Key Infrastructure using EasyRSA. This included Certificate Authority creation, server and client certificate signing, Diffie-Hellman parameter generation, and secure credential transfer via SCP.</p>

<h3 id="freeradius-aaa">FreeRADIUS AAA</h3>

<p>Configured FreeRADIUS 3.0 as an Authentication, Authorisation, and Accounting server. Set up client devices, user authentication entries, Attribute Value Pairs for access policies, and validated the configuration using radclient test queries.</p>

<h2 id="results">Results</h2>

<ul>
  <li>Grade: A2, First-class band (80-89%)</li>
  <li>Five distinct lab areas completed with full documentation</li>
</ul>

<h2 id="tools">Tools</h2>

<p>Ettercap, tcpdump, Arpwatch, Snort IDS, iptables, OpenVSwitch, Wireshark, OpenVPN 2.4, EasyRSA, FreeRADIUS 3.0.</p>]]></content><author><name>Ermand Mani</name></author><category term="network-security" /><category term="ids" /><category term="vpn" /><category term="radius" /><summary type="html"><![CDATA[View on GitHub]]></summary></entry><entry><title type="html">Operation FishNet – ACPO digital forensic investigation</title><link href="https://www.ermand.uk/operation-fishnet-acpo-forensics.html" rel="alternate" type="text/html" title="Operation FishNet – ACPO digital forensic investigation" /><published>2025-12-20T00:00:00+00:00</published><updated>2025-12-20T00:00:00+00:00</updated><id>https://www.ermand.uk/operation-fishnet-acpo-forensics</id><content type="html" xml:base="https://www.ermand.uk/operation-fishnet-acpo-forensics.html"><![CDATA[<h3 id="brief">Brief</h3>
<p>Operation FishNet was a live‑forensic dig during the final semester of my degree. Two Windows machines seized in a cyber‑crime investigation needed a chain‑of‑custody compliant analysis that produced court‑ready evidence for an ACPO‑compliant report. My role was to extract, analyse and document every artifact while preserving evidence integrity.</p>

<h3 id="approach">Approach</h3>
<p>The investigation workflow followed the ACPO‑2012 chain of custody checklist:</p>
<ol>
  <li><strong>Acquisition</strong> – used FTK Imager 4.7.1 to capture both the physical E01 disk images and the live‑memory dumps (RAW).</li>
  <li><strong>Hash verification</strong> – calculated MD5 and SHA256 for each artefact, logged in a secure audit trail.</li>
  <li><strong>Analysis</strong> – employed Volatility 2.6 to enumerate processes (<code class="language-plaintext highlighter-rouge">pslist</code>), locate hidden malware (<code class="language-plaintext highlighter-rouge">malfind</code>), and network sockets (<code class="language-plaintext highlighter-rouge">netscan</code>). The DarkComet RAT was identified through its characteristic PID‑58 service and a distinct registry hive modification.</li>
  <li><strong>Evidence tabulation</strong> – each discoverable artefact was numbered, the provenance recorded in a PDF filing system, and duplicated onto secure storage.</li>
  <li><strong>Reporting</strong> – drafted the ACPO‑compliant report, aligning findings with the standard’s six pillars: chain of custody, provenance, authenticity, integrity and admissibility.</li>
</ol>

<h3 id="results">Results</h3>
<p>The operation produced <strong>50+</strong> audit‑ready exhibits, including:</p>
<ul>
  <li><strong>DarkComet RAT</strong> – confirmed via hash and binary memory snapshot.</li>
  <li><strong>Email evidence</strong> – verified through Thunderbird logs, matched to suspect communication.</li>
  <li><strong>MD5 evidence</strong> – disallowed (genuine images) on Device 2 and recognised as legitimate on Device 1.</li>
</ul>

<p>All findings were cross‑validated by the proprietary hyper‑visor forensic toolkit and presented in a court‑tolerant PDF suitable for the prosecutor’s office. The investigation itself was highlighted in the department’s annual best‑practice showcase.</p>

<h3 id="tools">Tools</h3>
<ul>
  <li>Autopsy 4.21.0 – forensic case management.</li>
  <li>FTK Imager 4.7.1 – evidence acquisition.</li>
  <li>Volatility 2.6 – memory live‑analysis.</li>
  <li>RegRipper 3.0 – registry history extraction.</li>
  <li>Registry Explorer – quick visualisation of suspect keys.</li>
</ul>

<h3 id="repo">Repo</h3>
<p>https://github.com/CodeEvent/Operation‑FishNet</p>]]></content><author><name>Ermand Mani</name></author><category term="dfir" /><category term="forensics" /><category term="volatility" /><category term="acpo" /><summary type="html"><![CDATA[Brief Operation FishNet was a live‑forensic dig during the final semester of my degree. Two Windows machines seized in a cyber‑crime investigation needed a chain‑of‑custody compliant analysis that produced court‑ready evidence for an ACPO‑compliant report. My role was to extract, analyse and document every artifact while preserving evidence integrity.]]></summary></entry><entry><title type="html">OWASP Web Application Penetration Testing</title><link href="https://www.ermand.uk/owasp-pentest-suite.html" rel="alternate" type="text/html" title="OWASP Web Application Penetration Testing" /><published>2025-05-01T00:00:00+00:00</published><updated>2025-05-01T00:00:00+00:00</updated><id>https://www.ermand.uk/owasp-pentest-suite</id><content type="html" xml:base="https://www.ermand.uk/owasp-pentest-suite.html"><![CDATA[<h3 id="brief">Brief</h3>
<p>I completed a structured two‑part OWASP pentest exercise using the official Mutillidae II, Juice Shop, and Security Shepherd labs. Part A assessed an intentionally insecure environment on Mutillidae II against the OWASP Top 10, while Part B targeted Juice Shop’s cloud‑native security features, exploiting its Two‑Factor Authentication via a SQL injection that accessed a TOTP secret.</p>

<h3 id="approach">Approach</h3>
<p><strong>Part A – Mutillidae II &amp; Mutillidae II‑II</strong></p>
<ul>
  <li>Conducted a comprehensive vulnerability scan with Burp Suite Community 2025.2.4, mapping out broken access control, cryptographic weaknesses, and injection points.</li>
  <li>Leveraged the built‑in Mutillidae II user‑base to bypass authentication via SQL i, then moved laterally, capturing session cookies for takeover.</li>
</ul>

<p><strong>Part B – Juice Shop &amp; Security Shepherd</strong></p>
<ul>
  <li>Utilised Burp Suite to locate a potential SQL i that might expose the TOTP key used for MFA. Following a successful exploit, I extracted the secret and seeded a 2FA bypass, achieving full control of a high‑privileged account.</li>
  <li>Conducted stored and reflected XSS testing through the Juice Shop comment outlets, confirming path‑controlled cookie theft.</li>
  <li>Employed CSS‑based <code class="language-plaintext highlighter-rouge">NXDOMAIN</code> image‑tag payloads within Security Shepherd to force a CSRF attack, confirming command‑execution via the built‑in “account deletion” endpoint.</li>
  <li>Integrated OSSEC HIDS (v3.7.0) to monitor file‑system changes resulting from exploitation, establishing a forensic trail.</li>
</ul>

<h3 id="results">Results</h3>
<p>My final scores were:</p>
<ul>
  <li><strong>45/50</strong> on Mutillidae II – outstanding in access‑control and injection categories.</li>
  <li><strong>44/50</strong> on Juice Shop – secured the majority of the high‑impact vulnerabilities, including a bypass of 2FA and XSS session hijacking.</li>
</ul>

<p>The dissertation additionally documents an OSSEC deployment for continuous monitoring, illustrating the usefulness of real‑time alerts for threat hunting.</p>

<h3 id="tools">Tools</h3>
<ul>
  <li>Burp Suite Community 2025.2.4</li>
  <li>Kali Linux – full stegan‑analysis environment.</li>
  <li>OSSEC v3.7.0 – host‑based intrusion detection.</li>
  <li>Mutillidae II, Juice Shop, Security Shepherd – target frameworks.</li>
</ul>

<h3 id="repo">Repo</h3>
<p>https://github.com/CodeEvent/OWASP‑Pentest‑Suite</p>]]></content><author><name>Ermand Mani</name></author><category term="pentesting" /><category term="owasp" /><category term="web-app-sec" /><summary type="html"><![CDATA[Brief I completed a structured two‑part OWASP pentest exercise using the official Mutillidae II, Juice Shop, and Security Shepherd labs. Part A assessed an intentionally insecure environment on Mutillidae II against the OWASP Top 10, while Part B targeted Juice Shop’s cloud‑native security features, exploiting its Two‑Factor Authentication via a SQL injection that accessed a TOTP secret.]]></summary></entry><entry><title type="html">Programming for Cyber Security - COMP08101</title><link href="https://www.ermand.uk/programming-for-cyber-security.html" rel="alternate" type="text/html" title="Programming for Cyber Security - COMP08101" /><published>2024-12-01T00:00:00+00:00</published><updated>2024-12-01T00:00:00+00:00</updated><id>https://www.ermand.uk/programming-for-cyber-security</id><content type="html" xml:base="https://www.ermand.uk/programming-for-cyber-security.html"><![CDATA[<p><a href="https://github.com/CodeEvent/Programming-for-Cyber-Security">View on GitHub</a></p>

<h2 id="brief">Brief</h2>

<p>COMP08101 Programming for Cyber Security at the University of the West of Scotland focused on building practical security tools in Python. The module was graded A2, First-class band (80-89%).</p>

<h2 id="approach">Approach</h2>

<h3 id="http-brute-force-tool">HTTP brute force tool</h3>

<p>Built a Python script to perform dictionary-based brute force attacks against HTTP authentication endpoints. The tool handled session management, response code parsing, and timing controls.</p>

<h3 id="dns-enumeration-pipeline">DNS enumeration pipeline</h3>

<p>Developed a DNS enumeration pipeline that automated subdomain discovery through dictionary-based queries. The pipeline resolved DNS records, filtered live hosts, and produced structured output for further analysis.</p>

<h3 id="defensive-scripting-patterns">Defensive scripting patterns</h3>

<p>Covered input validation, safe handling of external data, error handling that avoids information leakage, and logging practices that support incident investigation.</p>

<h2 id="results">Results</h2>

<ul>
  <li>Grade: A2, First-class band (80-89%)</li>
  <li>Working HTTP brute force and DNS enumeration tools</li>
</ul>

<h2 id="tools">Tools</h2>

<p>Python 3, requests, socket, dns.resolver, argparse.</p>]]></content><author><name>Ermand Mani</name></author><category term="python" /><category term="security-tools" /><summary type="html"><![CDATA[View on GitHub]]></summary></entry></feed>