<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>michael wager | cyber security consultant</title>
    <description>cyber security consultant</description>
    <link>https://mwager.de/</link>
    <!-- <atom:link href="https://mwager.de/feed.xml" rel="self" type="application/rss+xml" /> -->
    <atom:link href="http://mwager.de/feed.xml" rel="self" type="application/rss+xml" />
    
      <item>
        <title>Vulnerability Management with DefectDojo</title>
        <description>&lt;p&gt;Last Friday, I had the pleasure of speaking at the &lt;a href=&quot;https://hackerkiste.de/&quot;&gt;Hackerkiste Conference&lt;/a&gt; in my hometown Augsburg 🥨 — about one of my favorite topics:&lt;br /&gt;
&lt;strong&gt;How to make Vulnerability Management actually work&lt;/strong&gt; in modern DevSecOps environments. Here’s a small blogpost about it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/20251024-hackerkiste.jpg&quot; alt=&quot;Hackerkiste Augsburg 2025&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Imagine it’s Friday afternoon.&lt;/em&gt;&lt;br /&gt;
A critical vulnerability is disclosed in a widely used library — one that your applications also depend on.&lt;br /&gt;
When your developers return on Monday morning, a pull request with the fix is already open, all tests are green, and the ticket just needs to be merged and deployed.&lt;br /&gt;
That’s what &lt;strong&gt;modern DevSecOps&lt;/strong&gt; should look like: automated detection, prioritization, and remediation — before attackers can exploit the weakness.&lt;/p&gt;

&lt;h2 id=&quot;why-vulnerability-management&quot;&gt;Why Vulnerability Management?&lt;/h2&gt;

&lt;p&gt;Security today is not just about reacting to hacks — it’s about &lt;strong&gt;staying ahead&lt;/strong&gt;.&lt;br /&gt;
Besides regulatory pressure (e.g. &lt;a href=&quot;https://www.bsi.bund.de/DE/Das-BSI/Auftrag/Gesetze-und-Verordnungen/NIS-2-Richtlinie/nis-2-richtlinie_node.html&quot;&gt;NIS2&lt;/a&gt;, &lt;a href=&quot;https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Informationen-und-Empfehlungen/Cyber_Resilience_Act/cyber_resilience_act_node.html&quot;&gt;CRA&lt;/a&gt;, &lt;a href=&quot;https://mwager.de/cyber_security/iso/27001/2025/09/02/cyber-risiko-check/&quot;&gt;ISO 27001&lt;/a&gt;), continuous attacks and new vulnerabilities make it essential to monitor your &lt;strong&gt;entire software supply chain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The challenge: there are countless scanners — SAST, SCA, DAST, container, IaC, WTF — each producing different formats, priorities, and reports.&lt;br /&gt;
This leads to &lt;strong&gt;scanner overload&lt;/strong&gt; and fragmented visibility.&lt;br /&gt;
That’s why we need &lt;strong&gt;Vulnerability Management&lt;/strong&gt;: to consolidate, track, and prioritize findings efficiently.&lt;/p&gt;

&lt;h2 id=&quot;owasp-and-defectdojo&quot;&gt;OWASP and DefectDojo&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Open Web Application Security Project (OWASP)&lt;/strong&gt; provides an open-source solution for Application Security Posture Management: &lt;a href=&quot;https://github.com/DefectDojo/django-DefectDojo&quot;&gt;OWASP DefectDojo&lt;/a&gt;.&lt;br /&gt;
It aggregates findings from multiple scanners, deduplicates results, provides dashboards, and integrates directly with tools like Jira.&lt;/p&gt;

&lt;p&gt;There’s a demo available at &lt;a href=&quot;https://demo.defectdojo.org/&quot;&gt;https://demo.defectdojo.org/&lt;/a&gt;. Log in with admin / 1Defectdojo@demo#appsec.&lt;/p&gt;

&lt;h2 id=&quot;the-architecture&quot;&gt;The Architecture&lt;/h2&gt;

&lt;div style=&quot;text-align:center;&quot;&gt;
    &lt;a href=&quot;javascript:;&quot; id=&quot;launcher&quot;&gt;
        &lt;img src=&quot;/images/arch.png&quot; /&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;div style=&quot;display:none&quot;&gt;
    &lt;div class=&quot;fancy-images-in-grid pure-g&quot;&gt;
        &lt;div class=&quot;pure-u-1-3&quot;&gt;
            &lt;a href=&quot;/images/arch.png&quot; class=&quot;fancybox&quot; rel=&quot;me-images&quot;&gt;
                &lt;img src=&quot;/images/arch.png&quot; /&gt;
            &lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
document.addEventListener(&quot;DOMContentLoaded&quot;, function(event) {
  $(&quot;#launcher&quot;).on(&quot;click&quot;, function() {
      console.log($(&quot;.fancybox&quot;));
        $(&quot;.fancybox&quot;).eq(0).trigger(&quot;click&quot;);
    });
});
&lt;/script&gt;

&lt;p&gt;Our architecture for automated vulnerability management consists of &lt;strong&gt;three main components&lt;/strong&gt;:&lt;/p&gt;

&lt;h3 id=&quot;1️⃣-gitlab-left&quot;&gt;1️⃣ GitLab (left)&lt;/h3&gt;
&lt;p&gt;GitLab CI/CD pipelines execute all relevant &lt;strong&gt;security scans&lt;/strong&gt; using custom container images.&lt;br /&gt;
Each image includes a bit of &lt;strong&gt;Python logic&lt;/strong&gt; that automatically uploads results from the application pipelines directly to DefectDojo.&lt;br /&gt;
This ensures that every security scan from every team ends up in one central place.&lt;/p&gt;

&lt;h3 id=&quot;2️⃣-defectdojo-center&quot;&gt;2️⃣ DefectDojo (center)&lt;/h3&gt;
&lt;p&gt;At the heart of the system, DefectDojo acts as the &lt;strong&gt;central Application Security Posture Management platform&lt;/strong&gt;.&lt;br /&gt;
It normalizes and deduplicates scanner data, tracks remediation progress, and provides &lt;strong&gt;management-level dashboards and reporting&lt;/strong&gt; — critical for compliance and executive visibility.&lt;/p&gt;

&lt;h3 id=&quot;3️⃣-jira-right&quot;&gt;3️⃣ Jira (right)&lt;/h3&gt;
&lt;p&gt;Between DefectDojo and Jira sits a thin Python integration layer.&lt;br /&gt;
It automatically creates and updates &lt;strong&gt;tickets&lt;/strong&gt; in Jira for verified findings, linking them to the right teams and repositories.&lt;br /&gt;
This closes the loop between detection and remediation.&lt;/p&gt;

&lt;h2 id=&quot;challenges-we-faced&quot;&gt;Challenges We Faced&lt;/h2&gt;

&lt;p&gt;To be very honest here, there were some challenges:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;DefectDojo maintenance&lt;/strong&gt; required ongoing updates and tuning, e.g. the &lt;strong&gt;database migration&lt;/strong&gt; from MySQL to PostgreSQL was a major effort.&lt;/li&gt;
  &lt;li&gt;JIRA Spam: &lt;strong&gt;False positives&lt;/strong&gt; had to be filtered before creating Jira tickets.&lt;/li&gt;
  &lt;li&gt;And overall, ensuring smooth integration across tools required constant attention.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;a-practical-alternative&quot;&gt;A Practical Alternative&lt;/h2&gt;

&lt;p&gt;If you don’t want to build such an automation framework from scratch, a practical alternative is to explore &lt;a href=&quot;https://about.gitlab.com/solutions/application-security-testing/&quot;&gt;GitLab’s integrated security features&lt;/a&gt; - where you get everything from this architecture (and more) out of the box. This can drastically reduce complexity and maintenance overhead.&lt;/p&gt;

&lt;h2 id=&quot;get-in-touch&quot;&gt;Get in Touch&lt;/h2&gt;

&lt;p&gt;If you’re interested in setting up a similar vulnerability management process or improving your DevSecOps workflows:&lt;br /&gt;
📧 &lt;strong&gt;Reach out to me or the team at &lt;a href=&quot;https://secure-io.de&quot;&gt;secureIO GmbH&lt;/a&gt;&lt;/strong&gt; — we’d love to help.&lt;/p&gt;

&lt;p&gt;You can download my &lt;strong&gt;slides from the presentation here:&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;/assets/Hackerkiste_Talk_VulnerabilityManagement.pdf&quot;&gt;Download Slides (PDF)&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 25 Oct 2025 16:26:11 +0200</pubDate>
        <link>https://mwager.de/application_security/2025/10/25/vulnerability-management-talk-hackerkiste/</link>
        <guid isPermaLink="true">https://mwager.de/application_security/2025/10/25/vulnerability-management-talk-hackerkiste/</guid>
      </item>
    
      <item>
        <title>DIN 27076 Cyber-Risiko-Check ✅</title>
        <description>&lt;p&gt;Ich habe erfolgreich die &lt;strong&gt;Schulung zum Cyber-Risiko-Check nach DIN SPEC 27076&lt;/strong&gt; abgeschlossen und bin nun offiziell berechtigt, kleine und mittlere Unternehmen (KMU) bei der Durchführung dieses standardisierten Sicherheitschecks zu unterstützen.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/images/crc.png&quot;&gt;&lt;img style=&quot;max-width: 340px&quot; src=&quot;/images/crc.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;was-ist-die-din-spec-27076&quot;&gt;Was ist die DIN SPEC 27076?&lt;/h2&gt;

&lt;p&gt;Die &lt;strong&gt;DIN SPEC 27076&lt;/strong&gt; ist ein vom Bundesamt für Sicherheit in der Informationstechnik (BSI) unterstützter Standard zur &lt;strong&gt;niedrigschwelligen Cyber-Sicherheitsberatung&lt;/strong&gt; für kleinere Unternehmen. Ziel ist es, ein erstes, systematisches Bild über den Stand der IT-Sicherheit zu erhalten – &lt;strong&gt;schnell, verständlich und praxisnah&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;warum-ist-das-relevant&quot;&gt;Warum ist das relevant?&lt;/h2&gt;

&lt;p&gt;Gerade kleinere Unternehmen stehen zunehmend im Fokus von Cyberangriffen, haben aber oft nicht die Ressourcen für eine umfassende Sicherheitsstrategie. Der Cyber-Risiko-Check ermöglicht einen einfachen Einstieg:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Systematischer Fragenkatalog&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Klare Handlungsempfehlungen&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Schnelle Umsetzung möglich&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Förderfähig durch das BSI (IT-Sicherheitskennzeichen)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;mein-angebot&quot;&gt;Mein Angebot&lt;/h2&gt;

&lt;p&gt;Als geschulter Berater nach DIN 27076 biete ich:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Durchführung des Cyber-Risiko-Checks&lt;/li&gt;
  &lt;li&gt;Dokumentation der Ergebnisse&lt;/li&gt;
  &lt;li&gt;Erste Maßnahmenempfehlungen&lt;/li&gt;
  &lt;li&gt;Optional: Begleitung bei der Umsetzung&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📞 &lt;strong&gt;Interesse an einem Cyber-Risiko-Check für Ihr Unternehmen?&lt;/strong&gt;
&lt;a href=&quot;mailto:mail@mwager.de&quot;&gt;Jetzt Kontakt aufnehmen&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;-zusatzqualifikation&quot;&gt;🎓 Zusatzqualifikation&lt;/h2&gt;

&lt;p&gt;Neben der DIN 27076 Schulung habe ich auch die &lt;strong&gt;ISO/IEC 27001 Officer Schulung&lt;/strong&gt; &lt;a href=&quot;/assets/27001_officer_cert.pdf&quot;&gt;erfolgreich abgeschlossen&lt;/a&gt;. Damit bin ich in der Lage, Unternehmen zusätzlich zur Umsetzung eines vollständigen Informationssicherheitsmanagementsystems (ISMS) nach internationalem Standard zu beraten.&lt;/p&gt;
</description>
        <pubDate>Tue, 02 Sep 2025 16:26:11 +0200</pubDate>
        <link>https://mwager.de/cyber_security/iso/27001/2025/09/02/cyber-risiko-check/</link>
        <guid isPermaLink="true">https://mwager.de/cyber_security/iso/27001/2025/09/02/cyber-risiko-check/</guid>
      </item>
    
      <item>
        <title>Secure Containers 🚢</title>
        <description>&lt;p&gt;Recently I gave a talk at the &lt;a target=&quot;_blank&quot; href=&quot;https://www.containerdays.io/&quot;&gt;Container Days Conference&lt;/a&gt; in Hamburg, as well as the &lt;a target=&quot;_blank&quot; href=&quot;https://2023.bsidesmunich.org/talks/002-05_YYBLSM_secure-containers-do-component-reduction-strategies-fix-your-container-security-nightmares/&quot;&gt;BSides Conference&lt;/a&gt; in Munich.
&lt;br /&gt;&lt;br /&gt;You can download the slides &lt;a href=&quot;/assets/slides.pdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; or watch the videos &lt;a href=&quot;/cyber_security/2023/09/14/container-days/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/7MdSURvtcNQ?si=FS6MdZqwJDLezhu_&quot; title=&quot;Secure Containers&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/ETu9IGrubjo?si=Gn2VY1jFJFVuD3YB&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;!--
&lt;div style=&quot;margin: 0 100px 0 40px&quot;&gt;
    &lt;a href=&quot;/assets/cds_slides.pdf&quot; target=_blank&gt;&lt;img src=&quot;/images/me/me1.jpg&quot;&gt;&lt;/a&gt;
&lt;/div&gt; --&gt;
</description>
        <pubDate>Thu, 14 Sep 2023 10:26:11 +0200</pubDate>
        <link>https://mwager.de/cyber_security/2023/09/14/container-days/</link>
        <guid isPermaLink="true">https://mwager.de/cyber_security/2023/09/14/container-days/</guid>
      </item>
    
      <item>
        <title>Scorecard​ - rate the security of your OSS🃏</title>
        <description>&lt;p&gt;This post presents “&lt;a href=&quot;https://github.com/ossf/scorecard&quot;&gt;Scorecard&lt;/a&gt;” - a pretty interesting tool for evaluating the overall security status of an open source software component. It is a project by the &lt;a href=&quot;https://openssf.org&quot;&gt;Open Source Security Foundation&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;introduction&quot;&gt;Introduction​&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/software-infra-oss.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Almost all software products depend on so called open source libraries. And just like code written by yourself, these libraries can have security vulnerabilities too! For example, I bet you heard about log4j, a logging library for Java which is widely used in applications worldwide. This library had a &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2021-44228&quot;&gt;critical security issue&lt;/a&gt;, thus affecting millions of applications. Another example of so called supply chain attacks is seen in the NPM pakage “&lt;a href=&quot;https://blog.sonatype.com/npm-project-used-by-millions-hijacked-in-supply-chain-attack&quot;&gt;ua-parser.js&lt;/a&gt;”. The NPM account of the original maintainer had been hijacked and the malicious threat actor then added some malware to do cryptomining on the affected machines. These machines could be local developer machines, staging or even production servers! So you see, securing open source components is a very important part of the SSDLC.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/log4j-meme.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Fact is: Libraries will be used, so what can we do? How can we decide if a library meets certain criteria related security?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Manual research​&lt;/li&gt;
  &lt;li&gt;Software Composition Analysis (SCA)&lt;/li&gt;
  &lt;li&gt;Running a SAST scan manually against the library source code&lt;/li&gt;
  &lt;li&gt;And… use Scorecard!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;intro-to-the-open-source-security-foundation-openssf&quot;&gt;Intro to the &lt;a href=&quot;https://openssf.org/&quot;&gt;Open Source Security Foundation&lt;/a&gt; (OpenSSF)&lt;/h2&gt;

&lt;p&gt;The OpenSSF is a cross-industry forum for a collaborative effort to improve open source software security​. Founding board members include Google, IBM, JPMorgan Chase, Microsoft, and more. They have lots of interesting projects on Github​:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ossf/scorecard&quot;&gt;Scorecard Repo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ossf/wg-securing-critical-projects&quot;&gt;WG Securing Critical Projects&lt;/a&gt; (e.g. angular, laravel, Wordpress, OpenVPN, MySQL, etc.)​&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ossf/wg-security-tooling/wiki/WebAppDefn&quot;&gt;Web Application Definition 1.0.0&lt;/a&gt; - Open standard for the integration of DAST in OSS ​&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-is-scorecard&quot;&gt;What is Scorecard?​&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CLI tool written in go ​&lt;/li&gt;
  &lt;li&gt;Idea: give consumers of OSS a way to judge whether their dependencies are safe​&lt;/li&gt;
  &lt;li&gt;Uses heuristics (called “checks”) related to software security ​&lt;/li&gt;
  &lt;li&gt;Each check has a score of 0-10 (higher -&amp;gt; better)​&lt;/li&gt;
  &lt;li&gt;Usage: via CLI manually or access already scanned projects: &lt;a href=&quot;https://deps.dev/npm/%40angular%2Fcore/11.0.0-next.1&quot;&gt;Angular example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;checks&quot;&gt;CHECKS:&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;16 checks implemented​&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Examples:​&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;CI-Tests: “tests executed before pull requests are merged?” (technical debt == security debt)​&lt;/li&gt;
      &lt;li&gt;Dependency-Update-Tool: “project uses a dependency update tool?”​&lt;/li&gt;
      &lt;li&gt;SAST: “project integrates static application security testing?”​&lt;/li&gt;
      &lt;li&gt;Vulnerabilities: “Does the project has open, unfixed vulnerabilities?” using the OSV (&lt;a href=&quot;https://osv.dev/&quot;&gt;Open Source Vulnerabilities&lt;/a&gt;) service
​&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find documentation of all implemented checks here: &lt;a href=&quot;https://github.com/ossf/scorecard/blob/main/docs/checks.md&quot;&gt;https://github.com/ossf/scorecard/blob/main/docs/checks.md​&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;demo&quot;&gt;Demo​&lt;/h2&gt;

&lt;p&gt;We are going to demonstrate the usage against “&lt;a href=&quot;https://github.com/jonelo/jacksum&quot;&gt;Jacksum&lt;/a&gt;” - an integrity verification library for java.&lt;/p&gt;

&lt;p&gt;Note that for runs against a github repo a token must be created first.
The demo uses the osx compiled binary “scorecard-darwin-amd64” with one parameter: the direct github url of the java library: &lt;a href=&quot;https://github.com/jonelo/jacksum/​&quot;&gt;https://github.com/jonelo/jacksum/​&lt;/a&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GITHUB_AUTH_TOKEN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$TOKEN&lt;/span&gt;​
./scorecard-darwin-amd64 &lt;span class=&quot;nt&quot;&gt;--repo&lt;/span&gt; https://github.com/jonelo/jacksum/​
Starting &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Dependency-Update-Tool]​
Starting &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;SAST]​
Starting &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Vulnerabilities]​
…​
Finished &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Dependency-Update-Tool]​
Finished &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;SAST]​
Finished &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Vulnerabilities]​
​
RESULTS​
&lt;span class=&quot;nt&quot;&gt;-------&lt;/span&gt;​
Aggregate score: 4.9 / 10
...&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Scorecard is a very interesting project. As I’ve been a developer myself for more than 10 years, I know how hard it is to evaluate new dependencies​. The checks of scorecard also look for quality assurance (e.g. CI Tests or Code-Review) which is a nice thing for sure! So the usage of scorecards gives developers a quick way to decide​ if a certain project is worth looking into more.&lt;/p&gt;

&lt;p&gt;Also, it provides security analysts with a solid base for decision making when asked if a certain library can be included into an application.&lt;/p&gt;

&lt;p&gt;It’s worth checking out the project (and all of OpenSSF)​!
​&lt;/p&gt;
</description>
        <pubDate>Wed, 08 Jun 2022 14:36:11 +0200</pubDate>
        <link>https://mwager.de/cyber_security/2022/06/08/scorecard/</link>
        <guid isPermaLink="true">https://mwager.de/cyber_security/2022/06/08/scorecard/</guid>
      </item>
    
      <item>
        <title>Tools for Security Testing in Continuous Integration Pipelines 🛠</title>
        <description>&lt;p&gt;In the context of the lecture &lt;strong&gt;scientific writing&lt;/strong&gt; at the &lt;a target=&quot;_blank&quot; href=&quot;https://www.hs-augsburg.de/&quot;&gt;University of Applied Sciences&lt;/a&gt; in Augsburg, I recently wrote a small paper researching and comparing security testing tools for usage in CI pipelines.
&lt;br /&gt;&lt;br /&gt;Read the full paper &lt;a href=&quot;/assets/Tools_for_Security_Testing_in_Continuous_Integration_Pipelines__Wager_Michael__Paper_v2.pdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;div style=&quot;margin: 0 100px 0 40px&quot;&gt;
    &lt;a href=&quot;/assets/Tools_for_Security_Testing_in_Continuous_Integration_Pipelines__Wager_Michael__Paper_v2.pdf&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;/assets/ci-abstract.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
</description>
        <pubDate>Mon, 23 May 2022 15:26:11 +0200</pubDate>
        <link>https://mwager.de/cyber_security/2022/05/23/security-testing-ci-pipelines/</link>
        <guid isPermaLink="true">https://mwager.de/cyber_security/2022/05/23/security-testing-ci-pipelines/</guid>
      </item>
    
      <item>
        <title>Data runs (Run-Lists) in NTFS filesystems 📂🔪</title>
        <description>&lt;p&gt;This post explains how data is stored within the &lt;a href=&quot;https://docs.microsoft.com/en-us/windows-server/storage/file-server/ntfs-overview&quot;&gt;New Technology File System (NTFS)&lt;/a&gt; which is the primary file system for recent versions of Windows and Windows Server. Based on an example I will explain how to “carve” a file out of the &lt;a href=&quot;https://en.wikipedia.org/wiki/NTFS#Master_File_Table&quot;&gt;master file table&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;setup&quot;&gt;Setup&lt;/h2&gt;

&lt;p&gt;I formatted a 32GB USB Drive with NTFS and copied a movie file on it:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ls.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The file is &lt;b&gt;21.663.347&lt;/b&gt; bytes in size (21.7MB), which is larger than an MFT record, which has 1024 bytes in NTFS. For files smaller than 1024 bytes the content is stored directly inside the MFT record, but if the size is larger this is called “none-resident” and then the location &amp;amp; size of the content on disk is stored in so-called “Data runs” inside the MFT record of this file. We will now analyze the runlist and try to find the raw data of the movie.&lt;/p&gt;

&lt;p&gt;For analyzation I am using &lt;a href=&quot;https://www.exterro.com/ftk-imager&quot;&gt;FTK Imager&lt;/a&gt; on Windows. Opening the USB Drive directly and looking at the file we get the MFT record number, which is 30. With a little math we can jump to the record: Each record has 1024 bytes, so we need to multiply 30 with 1024 to get the byte offset in the MFT: 30720&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/mft-record.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The image shows a screenshot of the hex-representation of the MFT record. I selected the filename, which is stored inside the MFT record as well. The red selection is the run-list for our file (Starting at decimal offet 64 from the data attribute 0x80000000). It is:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color:red&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:green&quot;&gt;2&lt;/span&gt; B0 14 D1 00 02&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;So the &lt;b style=&quot;color: green&quot;&gt;2&lt;/b&gt; tells us the size: &lt;b&gt;B0 14&lt;/b&gt; -&amp;gt; little endian -&amp;gt; 0x14B0 which is the value 5296 in decimal representation. This is the size of clusters used for the file content. We need to convert it to bytes by multiplying it with the cluster size, which is 4096. So we get: 21.692.416 Byte. This is just a little bit larger than our original file size and this is caused by internal NTFS organization structures. But this makes sense so far.&lt;/p&gt;

&lt;p&gt;The last &lt;b style=&quot;color: red&quot;&gt;3&lt;/b&gt; bytes &lt;b&gt;D1 00 02&lt;/b&gt; tell us the starting cluster number of the content which is 131.281 in decimal representation (little endian!).&lt;/p&gt;

&lt;p&gt;So now in FTK Imager we can select the NTFS Evidence, use “Go to sector/cluster…” and put in this number. After that we just set the selection size to 21.692.416 Byte and save as &lt;b&gt;fragment.mpeg&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Opening this file with VLC will play the movie. Here we go!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/mft-save.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AbApUDui8wM&quot;&gt;MFT Run Lists explained by Frank Griffitts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 27 Jan 2022 13:36:11 +0100</pubDate>
        <link>https://mwager.de/cyber_security/2022/01/27/ntfs-mft-example/</link>
        <guid isPermaLink="true">https://mwager.de/cyber_security/2022/01/27/ntfs-mft-example/</guid>
      </item>
    
      <item>
        <title>Forensic Analysis of an Ext3 Linux filesystem 🗄</title>
        <description>&lt;p&gt;In the context of the lecture &lt;strong&gt;IT-Forensics&lt;/strong&gt; (which I really enjoyed!) at the &lt;a target=&quot;_blank&quot; href=&quot;https://www.hs-augsburg.de/&quot;&gt;University of Applied Sciences&lt;/a&gt; in Augsburg, I recently did a forensic analysis of the Ext3 Linux filesystem.
&lt;br /&gt;&lt;br /&gt;Read the full paper (in german) &lt;a href=&quot;/assets/ext3.pdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;div style=&quot;margin: 0 100px 0 40px&quot;&gt;
    &lt;a href=&quot;/assets/ext3.pdf&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;/assets/ext3-abstract.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
</description>
        <pubDate>Fri, 21 Jan 2022 14:26:11 +0100</pubDate>
        <link>https://mwager.de/cyber_security/2022/01/21/ext3-filesystem/</link>
        <guid isPermaLink="true">https://mwager.de/cyber_security/2022/01/21/ext3-filesystem/</guid>
      </item>
    
      <item>
        <title>OWASP Offensive Web Testing Framework (OWTF) 🔐</title>
        <description>&lt;p&gt;In the context of the lecture &lt;strong&gt;Network Penetration Testing&lt;/strong&gt; at the &lt;a target=&quot;_blank&quot; href=&quot;https://www.hs-augsburg.de/&quot;&gt;University of Applied Sciences&lt;/a&gt; in Augsburg, I recently did an evaluation of the &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/owtf/owtf&quot;&gt;Offensive Web Testing Framework&lt;/a&gt; (OWTF) from the &lt;a target=&quot;_blank&quot; href=&quot;https://owasp.org/&quot;&gt;Open Web Application Security Project&lt;/a&gt; (OWASP). &lt;br /&gt;&lt;br /&gt;Read the full paper &lt;a href=&quot;/assets/owtf.pdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;div style=&quot;margin: 0 100px 0 40px&quot;&gt;

&lt;p style=&quot;font-style: italic&quot;&gt;Penetration testers often need to work under time pressure. Companies may have limited budget but still need high quality results quickly. Therefore it is a major goal for penetration testers to work as efficient as possible and integrate the use of sophisticated and comprehensive tools to reach this goal.
&lt;br /&gt;
&lt;br /&gt;
In the context of the lecture Network Penetration Testing at the University of Applied Sciences, Augsburg, a collection of such tools will be presented in this report: the Offensive Web Testing Framework (OWTF) from the Open Web Application Security Project (OWASP).
&lt;br /&gt;
&lt;br /&gt;
First, the motivation of this project will be explained followed by a feature overview. After a short technical analysis, installation instructions will be given. Afterwards a demonstration of the usage and the tools’ possibilities will be presented. Finally, a conclusion related the productive use of the tool completes this document.
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;You can read the full paper &lt;a href=&quot;/assets/owtf.pdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 30 Jun 2021 15:17:11 +0200</pubDate>
        <link>https://mwager.de/cyber_security/2021/06/30/owasp-offensive-web-testing-framework/</link>
        <guid isPermaLink="true">https://mwager.de/cyber_security/2021/06/30/owasp-offensive-web-testing-framework/</guid>
      </item>
    
      <item>
        <title>Configuration Management 📚</title>
        <description>&lt;p&gt;I am doing my master’s degree in &lt;a href=&quot;https://www.hs-augsburg.de/en/Electrical-Engineering/Industrial-Security-and-Safety-MSc.html&quot; target=&quot;_blank&quot;&gt;Industrial Security and Safety&lt;/a&gt; since april 2020 at &lt;a target=&quot;_blank&quot; href=&quot;https://www.hs-augsburg.de/&quot;&gt;University of Applied Sciences&lt;/a&gt; in Augsburg. It was quite a crazy start due to covid. This post introduces my work on a major project, which I did together with two fellow students, which goal was to secure the state of an industrial automation facility by developing a configuration management solution.
&lt;br /&gt;&lt;br /&gt;Read the full paper &lt;a href=&quot;https://mwager.de/MIS2020_Grossprojekt_CM_report.pdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;div style=&quot;margin: 0 100px 0 40px&quot;&gt;

&lt;p style=&quot;font-style: italic&quot;&gt;Today’s enterprises in the producing industry are subjected to continuous
change and are required to adapt their production environment capabilities in
order to remain competitive. This causes continuously increasing complexity
and connectivity of modern production systems. To mitigate potential safety
and security incidents as well as optimization of the companies’ business case,
a configuration management solution represents an effective instrument.
&lt;br /&gt;
&lt;br /&gt;
In context of the master course in Industrial Security at the University of
Applied Sciences, Augsburg, a configuration management project is conducted
on a real-world production facility by a group of three students.
&lt;br /&gt;
&lt;br /&gt;
Based on a fictional scenario concerning a manufacturer of smartphones
(Yeskia Inc.), an initial analysis of the enterprise environment regarding potential risks is performed and appropriate mitigations are derived. Based on
the mitigations a comprehensive concept phase is proposing various strategies
for realization. Following the V-Model approach, three individual software solutions are designed, implemented and validated. A training course with qualified
training material regarding the developed solutions concludes the project.
&lt;/p&gt;
&lt;/div&gt;

&lt;h2 id=&quot;️-javascript-️&quot;&gt;❤️ JavaScript ❤️&lt;/h2&gt;

&lt;p&gt;We used JavaScript to detect any unauthorized changes to PLC applications. More info in the paper :-)&lt;/p&gt;

&lt;p&gt;You can read the full paper &lt;a href=&quot;https://mwager.de/MIS2020_Grossprojekt_CM_report.pdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 19 Dec 2020 19:17:24 +0100</pubDate>
        <link>https://mwager.de/cyber_security/2020/12/19/configuration-management/</link>
        <guid isPermaLink="true">https://mwager.de/cyber_security/2020/12/19/configuration-management/</guid>
      </item>
    
      <item>
        <title>On UNIT Testing 🔨</title>
        <description>&lt;p&gt;So you don’t write tests, eh? This is what I think about it.&lt;/p&gt;

&lt;div class=&quot;responsive-video&quot;&gt;
  &lt;iframe class=&quot;test-your-shit-iframe&quot; width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/H7C0vd-L5lg&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;In a lot of projects I work in, the people just don’t write tests, especially in the frontend. And everytime the reasons are as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;It takes so much time!&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;It is much more code than the code I need to write for the app!&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;We don’t need tests (because of reasons)!&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And everytime the consequences are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;SO MUCH SENSELESS BUGS!!! (😭😭😭)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;some-examples&quot;&gt;Some examples&lt;/h2&gt;

&lt;h4 id=&quot;1-the-following-line-of-code-was-added-without-tests&quot;&gt;1. The following line of code was added, without tests:&lt;/h4&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;doStuff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;metaInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// Context: The developer introduced a new flag which should be `true` by default&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;metaInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;sendPrintjob&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;metaInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;sendPrintjob&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Question: what’s the value of &lt;code&gt;metaInfo.sendPrintjob&lt;/code&gt; if &lt;code&gt;metaInfo.sendPrintjob === false&lt;/code&gt; ?&lt;/p&gt;

&lt;p&gt;Yeah, it’s &lt;code&gt;true&lt;/code&gt; 😞. Bug in production. A simple test most probably got that covered…&lt;/p&gt;

&lt;p&gt;You could argue that the developer was stupid. But we all make mistakes. Writing tests allows us to execute that code VERY FAST and get IMMEDIATE RESPONSE. Without reloading the page, adding &lt;code&gt;console.log&lt;/code&gt;s, clicking through X screens just to get there and manually test it, maybe only once, like in this case with &lt;code&gt;metaInfo.sendPrintjob = true&lt;/code&gt;&lt;/p&gt;

&lt;h4 id=&quot;2-following-code-was-changed&quot;&gt;2. Following code was changed:&lt;/h4&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;  &lt;span class=&quot;c1&quot;&gt;// before:&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toJSON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// after:&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;headers&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Don&apos;t call toJSON&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;This change led to a bug in production. I had to fix the bug ticket in a new project. And it did cost me hours of debugging to find it. As there were no tests at all, this means starting the app, clicking through lots of pages, and setting breakpoints just to get to the point I could reproduce… (this was a big codebase and I was new to the project)&lt;/p&gt;

&lt;p&gt;Nevermind the frustation and lost of motivation on that day… But hey, thanks to the comment &lt;code&gt;Don&apos;t call toJSON&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;If there was a simple test which expects that &lt;code&gt;toJSON&lt;/code&gt; has to be called, it wouldn’t be a problem at all..&lt;/p&gt;

&lt;h2 id=&quot;some-arguments-for-testing&quot;&gt;Some arguments for testing&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Tests are (living) &lt;strong&gt;documentation&lt;/strong&gt; (= specification) - this means they are &lt;strong&gt;executable code documentation&lt;/strong&gt; - see &lt;a href=&quot;https://en.wikipedia.org/wiki/Behavior-driven_development&quot;&gt;BDD on wikipedia&lt;/a&gt; &lt;br /&gt; -&amp;gt; Do you always update the code docs when changing code?! (If your answer is yes: 😂)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Time! If you have no &lt;strong&gt;automated&lt;/strong&gt; tests you need to &lt;strong&gt;manually&lt;/strong&gt; test the whole app if you are making changes because you cannot know which parts you broke ;)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Refactoring: How can you refactor and clean up some code without automated tests? Manually test everthing? Good luck!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;After updating dependencies tests can show you if something broke.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Better Code-Design - if you are writing tests, you think more about the structure of your code resulting in more clean and readable code&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Fast feedback of code execution: You can run code without having to run the whole app. This can even speed up the development of a certain feature, especially UI related code. Who wants to click through 5 pages just to visit the part of the app you are working on?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Less bugs will go to production because with tests they are detected much earlier.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I hate to manually test my apps (of course I do it) but it’s just boring and error prone.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Writing tests will give you more confidence about your code.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;🤺 …and yes you will have more test-code that production-code, but:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;TDD is like Mr. Miyagi getting you to wash his car and paint his fence - seems like a lot of unnecessary work, but the payoff comes later &lt;a href=&quot;https://t.co/7U9nbENXEU&quot;&gt;pic.twitter.com/7U9nbENXEU&lt;/a&gt;&lt;/p&gt;&amp;mdash; Joshua Morony (@joshuamorony) &lt;a href=&quot;https://twitter.com/joshuamorony/status/874962761196765184&quot;&gt;June 14, 2017&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;some-links&quot;&gt;Some links&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://youtu.be/ib2Pt9_zciA&quot;&gt;Writing unit tests for personal projects? - FunFunFunction #29 @ YouTube&lt;/a&gt; -&amp;gt; &lt;em&gt;“Code without tests is buggy and bad code”&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://medium.com/javascript-scene/what-every-unit-test-needs-f6cd34d9836d&quot;&gt;Eric Elliott - 5 Questions Every Unit Test Must Answer&lt;/a&gt; -&amp;gt; &lt;em&gt;“Most Developers Don’t Know How to Test”&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://medium.com/javascript-scene/5-common-misconceptions-about-tdd-unit-tests-863d5beb3ce9&quot;&gt;Eric Elliott - 5 Common Misconceptions About TDD &amp;amp; Unit Tests&lt;/a&gt; -&amp;gt; &lt;em&gt;“TDD is too Time Consuming”&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://ryanhayes.net/how-to-introduce-tdd-to-your-team-with-no-unit-testing-experience/&quot;&gt;Ryan Hayes - How to Introduce TDD to Your Team With No Unit Testing Experience&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://martinfowler.com/articles/mocksArentStubs.html&quot;&gt;Martin Fowler - Mocks Aren’t Stubs&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;so-always-remember&quot;&gt;So, always remember:&lt;/h2&gt;

&lt;p&gt;&lt;img class=&quot;test-your-shit&quot; src=&quot;/images/test-your-shit.jpg&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 18 Jun 2017 20:27:21 +0200</pubDate>
        <link>https://mwager.de/software_engineering/2017/06/18/on-unit-testing/</link>
        <guid isPermaLink="true">https://mwager.de/software_engineering/2017/06/18/on-unit-testing/</guid>
      </item>
    
  </channel>
</rss>
