<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Arxignis]]></title><description><![CDATA[We empower you to take bold actions that secure your digital world and eliminate threats.]]></description><link>https://gen0sec.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!xGH0!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faacf8cbc-1edb-4e3c-ad52-95e61a187fec_150x150.png</url><title>Arxignis</title><link>https://gen0sec.substack.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 16 Apr 2026 13:50:55 GMT</lastBuildDate><atom:link href="https://gen0sec.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Arxignis]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[gen0sec@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[gen0sec@substack.com]]></itunes:email><itunes:name><![CDATA[Gen0Sec]]></itunes:name></itunes:owner><itunes:author><![CDATA[Gen0Sec]]></itunes:author><googleplay:owner><![CDATA[gen0sec@substack.com]]></googleplay:owner><googleplay:email><![CDATA[gen0sec@substack.com]]></googleplay:email><googleplay:author><![CDATA[Gen0Sec]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to integrate Fail2ban with eBPF?]]></title><description><![CDATA[with Arxignis and Moat]]></description><link>https://gen0sec.substack.com/p/how-to-integrate-fail2ban-with-ebpf</link><guid isPermaLink="false">https://gen0sec.substack.com/p/how-to-integrate-fail2ban-with-ebpf</guid><dc:creator><![CDATA[Gen0Sec]]></dc:creator><pubDate>Fri, 31 Oct 2025 20:46:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!N4VW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2509721-0944-43ea-8654-8521e48eb48d_387x387.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong><a href="https://ebpf.io/what-is-ebpf/#what-is-ebpf">What is eBPF?</a></strong></h2><p>eBPF is a revolutionary technology with origins in the Linux kernel that can run sandboxed programs in a privileged context such as the operating system kernel. It is used to safely and efficiently extend the kernel's capabilities without requiring changes to the kernel source code or loading kernel modules.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lSCn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lSCn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp 424w, https://substackcdn.com/image/fetch/$s_!lSCn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp 848w, https://substackcdn.com/image/fetch/$s_!lSCn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp 1272w, https://substackcdn.com/image/fetch/$s_!lSCn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lSCn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp" width="1249" height="658" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:658,&quot;width&quot;:1249,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39152,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://arxignis.substack.com/i/177686469?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lSCn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp 424w, https://substackcdn.com/image/fetch/$s_!lSCn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp 848w, https://substackcdn.com/image/fetch/$s_!lSCn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp 1272w, https://substackcdn.com/image/fetch/$s_!lSCn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46ab8732-7f03-4899-9430-109e27132c70_1249x658.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>What is fail2ban?</h2><p>Fail2ban is an intrusion prevention software framework that guards against brute-force attacks by monitoring system log files for suspicious activity and automatically banning malicious IP addresses. It works by parsing log files for patterns, such as excessive failed login attempts, and then updating firewall rules to block the source IP address for a set period of time or indefinitely.</p><h2>What is the problem?</h2><p>Fail2Ban faces two key challenges. First, if there&#8217;s a lack of synchronization between nodes, each server must independently detect and respond to malicious activity, which makes centralized management difficult. Second, Fail2Ban relies on <strong>iptables</strong> by default, and <strong>iptables</strong> itself comes with scalability and performance limitations.</p><h3>What is the difference between eBPF and iptables?</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DtHA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DtHA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DtHA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DtHA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DtHA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DtHA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg" width="1456" height="972" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:182094,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://arxignis.substack.com/i/177686469?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DtHA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DtHA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DtHA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DtHA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42e844fb-558d-4248-9429-0154f82ffa38_1642x1096.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The solution</h2><p>Moat &#8212; our agents are running on every node and integrated with kernel-level eBPF. If you ban an IP Address or CIDR, ASN, that&#8217;s synced across every node, and if you unban it, that&#8217;s synced too. Our config is refreshing every 10 seconds.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/arxignis/moat&quot;,&quot;text&quot;:&quot;Moat&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/arxignis/moat"><span>Moat</span></a></p><div><hr></div><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;d0d0e6a3-0b38-4c31-a178-aad5252e90e7&quot;,&quot;duration&quot;:null}"></div><div><hr></div><h5>You can find our integration on GitHub.</h5><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/arxignis/example/tree/main/fail2ban&quot;,&quot;text&quot;:&quot;Integration&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/arxignis/example/tree/main/fail2ban"><span>Integration</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gen0sec.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[SSL fingerprinting in action]]></title><description><![CDATA[How we can use JA3/JA4+ hashes in real life?]]></description><link>https://gen0sec.substack.com/p/ssl-fingerprinting-in-action</link><guid isPermaLink="false">https://gen0sec.substack.com/p/ssl-fingerprinting-in-action</guid><dc:creator><![CDATA[Gen0Sec]]></dc:creator><pubDate>Tue, 23 Sep 2025 12:46:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HP6x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey Security fellow &#128075;!</p><p>I wrote this article to demonstrate the power of SSL fingerprinting in security.  Our product, <a href="https://arxignis.com?utm=substack">Arxignis</a>, is actively using this technology for security purposes. </p><div class="pullquote"><p>Thanks for reading my first article!</p></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gen0sec.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Most people reading this article have likely seen this technology. The SSL heartens everybody; however, not everybody knows how SSL works. </p><h2>How does SSL work?</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v81E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v81E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png 424w, https://substackcdn.com/image/fetch/$s_!v81E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png 848w, https://substackcdn.com/image/fetch/$s_!v81E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png 1272w, https://substackcdn.com/image/fetch/$s_!v81E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v81E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png" width="636" height="541" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:541,&quot;width&quot;:636,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120476,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://arxignis.substack.com/i/174318607?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v81E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png 424w, https://substackcdn.com/image/fetch/$s_!v81E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png 848w, https://substackcdn.com/image/fetch/$s_!v81E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png 1272w, https://substackcdn.com/image/fetch/$s_!v81E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8d8f611-6b5c-4237-bd29-54fdb4eb48e0_636x541.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p> </p><p>This diagram illustrates how the TCP protocol and SSL work. I don&#8217;t want to start from the ground. The most important part here for us is the client's hello. This is the moment when we get more information about our SSL client. Client Hello, help us to understand who is sitting on the other side. Possibly a bad actor or just a simple customer. </p><h2>Where can we collect this information?</h2><p>We can obtain the <strong>JA3</strong> and <strong>JA4/JA4+</strong> client hash only when SSL termination occurs. Therefore, if you are using a <strong>CDN</strong> or <strong>service provider</strong>, they must collect this data on your behalf. Some providers are requesting additional compensation for this information. We can collect this information <strong>ONLY</strong> here.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QqpT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QqpT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png 424w, https://substackcdn.com/image/fetch/$s_!QqpT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png 848w, https://substackcdn.com/image/fetch/$s_!QqpT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png 1272w, https://substackcdn.com/image/fetch/$s_!QqpT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QqpT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png" width="1054" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:1054,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What is SSL Termination? Definition &amp; Related FAQs | VMware&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="What is SSL Termination? Definition &amp; Related FAQs | VMware" title="What is SSL Termination? Definition &amp; Related FAQs | VMware" srcset="https://substackcdn.com/image/fetch/$s_!QqpT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png 424w, https://substackcdn.com/image/fetch/$s_!QqpT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png 848w, https://substackcdn.com/image/fetch/$s_!QqpT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png 1272w, https://substackcdn.com/image/fetch/$s_!QqpT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe17b420-17c9-404e-9c0e-1ced75ecc7c0_1054x376.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>SSL fingerprinting history</h2><p>The original idea came from <a href="https://www.youtube.com/watch?v=XX0FRAy2Mec">Lee Brotherston</a>. JA3 hash original coming from Salesforce Labs from 2017. The author of this technology is John Althouse, who has written a <a href="https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/">detailed article</a> on the subject. He left Salesforce and founded a new company named&nbsp;<a href="https://foxio.io/">Fox IO</a>. Fox IO developed an improved hashing technology, known as JA4/JA4+.</p><div id="youtube2-XX0FRAy2Mec" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;XX0FRAy2Mec&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/XX0FRAy2Mec?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>JA3 vs JA4+</h2><h3>JA3</h3><p>JA3 creates a fingerprint by serializing (in a fixed order) the decimal values of several TLS ClientHello fields and hashing that string with MD5:</p><blockquote><p>JA3 = MD5(TLSVersion, CipherSuites, Extensions, SupportedGroups, ECPointFormats)</p></blockquote><p>The result is a 32-character hash, known as the JA3 fingerprint. Because different clients (e.g., Chrome on Windows, a Python requests script, or malware) implement TLS differently, they produce distinct JA3 hashes. Security systems leverage this to spot and block suspicious clients, since malware often presents a different&#8212;and more static&#8212;JA3 than typical browsers.</p><h3>Limitations of JA3</h3><ul><li><p><strong>Low visibility into differences:</strong> Everything is folded into one MD5 value, so you can&#8217;t tell <em>why</em> two fingerprints differ without inspecting the raw fields.</p></li><li><p><strong>Cipher-suite order randomness:</strong> Some legitimate software (notably many Go-based apps) shuffles cipher-suite order, yielding a new JA3 on each connection and complicating tracking.</p></li><li><p><strong>No app-layer context:</strong> JA3 only covers the TLS handshake and excludes application-level details, such as the HTTP User-Agent.</p></li></ul><h3>JA4/JA4+</h3><p>JA4 is a family of TLS fingerprints from the creators of JA3 that addresses JA3&#8217;s blind spots. It&#8217;s not a single value but several related ones that add context and resist evasion: <strong>JA4</strong> (client), <strong>JA4S</strong> (server), and <strong>JA4X</strong> (certificate). Below, we focus on the client-side JA4.</p><p>The JA4 fingerprint is a string with three sections, separated by underscores:</p><blockquote><p>JA4 = ProtocolAndVersion _ CipherCount + CipherHash _ ExtensionCount + ExtensionHash + SignatureAlgs</p></blockquote><h3>1) Protocol &amp; TLS version</h3><ul><li><p><code>t</code> = TLS 1.2 or below, <code>q</code> = TLS 1.3</p></li><li><p>Followed by the version: e.g., <code>t12</code>, <code>q13</code>.</p></li></ul><h3>2) Cipher suites (sorted)</h3><ul><li><p>The number of offered ciphers.</p></li><li><p>An underscore.</p></li><li><p>A 5-character &#8220;fuzzy&#8221; hash of the <strong>sorted</strong> cipher list.</p></li></ul><p>Sorting neutralizes libraries (like many Go clients) that randomize cipher order&#8212;so the same client yields a stable JA4.</p><h3>3) Extensions &amp; signature algorithms</h3><ul><li><p>The number of extensions.</p></li><li><p>An underscore.</p></li><li><p>A 5-character &#8220;fuzzy&#8221; hash of the <strong>sorted</strong> extensions.</p></li><li><p>An underscore.</p></li><li><p>The signature algorithms.</p></li></ul><p><strong>Example (Chrome-like):</strong></p><blockquote><p>t13_17_15ae45e35b_13_22a2da45a2_0017</p></blockquote><p>You can read this at a glance as a TLS 1.3 client with 17 ciphers and 13 extensions.</p><h3>JA4+ (adds application context)</h3><p>JA4+ enriches the network fingerprint with HTTP-layer details, such as:</p><ul><li><p>HTTP method (GET, POST)</p></li><li><p>HTTP version (h1, h2)</p></li><li><p>User-Agent</p></li><li><p>Accept-Language</p></li></ul><p>By tying TLS behavior to concrete application signals, JA4+ makes it significantly harder for malware to mimic a real browser convincingly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UVfr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UVfr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png 424w, https://substackcdn.com/image/fetch/$s_!UVfr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png 848w, https://substackcdn.com/image/fetch/$s_!UVfr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png 1272w, https://substackcdn.com/image/fetch/$s_!UVfr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UVfr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png" width="1456" height="569" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:569,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183763,&quot;alt&quot;:&quot;Sorry for the picture, but Substack does not support tables. &quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://arxignis.substack.com/i/174318607?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Sorry for the picture, but Substack does not support tables. " title="Sorry for the picture, but Substack does not support tables. " srcset="https://substackcdn.com/image/fetch/$s_!UVfr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png 424w, https://substackcdn.com/image/fetch/$s_!UVfr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png 848w, https://substackcdn.com/image/fetch/$s_!UVfr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png 1272w, https://substackcdn.com/image/fetch/$s_!UVfr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcef34f4d-4e73-431e-ac87-ce7def40a58e_2148x840.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>What problem does this information address?</h2><p>We have to go back a little bit in time. We have a billion devices around the world, each with an IP address, internal or external. The biggest problem with the world IPv4 pools is that they are deficient.  You can imagine that every mobile device connecting to the internet has a public IP address, and this is just one piece of the puzzle.</p><p>The result is that we don&#8217;t have enough IPv4 addresses, but we do have IPv6 addresses; however, their adoption is not as rapid as ISPs and providers would like it to be. For example, GitHub is not available on IPv6. Crazy right? Lots of other services are also not available on IPv6. ISPs have to find a solution. </p><h3>What is the ISP solution?</h3><h3>CGNAT</h3><p>They start to use multiple NAT technologies to solve this problem&#8212;for example, CGNAT. The devices use a private IP address, but they transform their side to IPv4 public and connect to the host. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cs84!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cs84!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp 424w, https://substackcdn.com/image/fetch/$s_!cs84!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp 848w, https://substackcdn.com/image/fetch/$s_!cs84!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp 1272w, https://substackcdn.com/image/fetch/$s_!cs84!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cs84!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp" width="1456" height="749" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:749,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51740,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://arxignis.substack.com/i/174318607?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cs84!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp 424w, https://substackcdn.com/image/fetch/$s_!cs84!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp 848w, https://substackcdn.com/image/fetch/$s_!cs84!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp 1272w, https://substackcdn.com/image/fetch/$s_!cs84!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85a46c2-a922-4a9b-8407-2e7de05331e7_2100x1080.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>464xlat</h3><p>464XLAT is an IPv4/IPv6 transition mechanism that enables IPv4-only applications or devices to work over IPv6-only access networks by utilizing a stateless customer-side translator (CLAT) to convert IPv4 addresses into IPv6 and a provider-side stateful NAT64 (PLAT) to access the IPv4 Internet. It&#8217;s widely used in mobile networks (LTE/5G, Android) to provide legacy IPv4 service without requiring IPv4 on the access link.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hqVG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hqVG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif 424w, https://substackcdn.com/image/fetch/$s_!hqVG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif 848w, https://substackcdn.com/image/fetch/$s_!hqVG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif 1272w, https://substackcdn.com/image/fetch/$s_!hqVG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hqVG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif" width="588" height="299" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:299,&quot;width&quot;:588,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:15852,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://arxignis.substack.com/i/174318607?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hqVG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif 424w, https://substackcdn.com/image/fetch/$s_!hqVG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif 848w, https://substackcdn.com/image/fetch/$s_!hqVG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif 1272w, https://substackcdn.com/image/fetch/$s_!hqVG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa29657e9-db7e-43a0-9a5c-1d78c72925f5_588x299.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Result</h2><p>On the server-side, we see one IP address, but that can encompass a large number of devices.  </p><h2>IPs have lost their uniqueness.</h2><p>We can&#8217;t block all attacker IP addresses because it could easily kill our business. If you look at the picture below, you can see multiple clients have the same IP address. </p><p>For example, if we have an e-commerce webshop and we block a big ISP CGNAT IP address, we can easily block hundreds of potential customers. The attackers can easily exploit this vulnerability because they often operate from this pool; you are at a disadvantage here. Of course, you block the temporary use of CAPTCHA, but the problem is that you punish your innocent customers. Yeah, you can&#8217;t use CAPTCHA for API calls. </p><div class="pullquote"><p>Finally, we arrived, so we need a <strong>unique identifier</strong>!</p></div><h2>How can we identify?</h2><p>Now we have context about the technology and reasons. </p><p>JA4 fingerprints are driven by the TLS stack&#8217;s implementation details&#8212;cipher-suite preferences, extension ordering, ALPN lists&#8212;not just the application itself. For example:</p><ul><li><p>Chrome (BoringSSL) will yield a different JA4 than a Python bot using requests (typically OpenSSL).</p></li><li><p>Malware with embedded or outdated TLS stacks often produces rare JA4s that are easily identifiable.</p></li><li><p>Even bots that rotate IPs or spoof User-Agents frequently keep a stable JA4, making them traceable across multiple requests.</p></li></ul><h3>In what ways can we use these findings?</h3><h4>Threat detection</h4><ul><li><p>Treat the JA4/TLS fingerprint as the client identity key.</p></li><li><p>Link activity across IP churn and UA spoofing.</p></li><li><p>Use similarity matching (e.g., distance on cipher/extension order, ALPN sets) to catch &#8220;nearby&#8221; variants.</p></li><li><p>Flag outliers: rare or outdated stacks are high-risk.</p></li><li><p>Fuse with request shape (method/path/header order), velocity, and reputation.</p></li><li><p>Outcomes: tag &#8594; raise score &#8594; challenge &#8594; block.</p></li></ul><h4>WAF</h4><ul><li><p>Feed the fingerprint and related features into a risk score:</p><ul><li><p>score = w1*rarity + w2*bad_reputation + w3*behavior_anomaly + w4*path_sensitivity</p></li></ul></li><li><p>Action matrix: allow (&lt;T1) &#8594; throttle/challenge (T1&#8211;T2) &#8594; block (&gt;T2).</p></li><li><p>Maintain allow/deny clusters (known-good browsers vs. bot toolkits).</p></li><li><p>Keep static edge signatures for known exploits/CVEs for immediate drops.</p></li><li><p>Log reason codes (fingerprint, rule hit, score) for auditability.</p></li></ul><h4>Rate-limit</h4><ul><li><p>Prefer entity limits over IP limits: bucket per TLS fingerprint (JA4).</p></li><li><p>Reduces collateral damage behind NAT/CGNAT and shared proxies.</p></li><li><p>Separate pools for sensitive endpoints; cap bursts and in-flight concurrency.</p></li><li><p>If fingerprints rotate, compose the key (JA4 + header order + cookie/session) before throttling. No single indicator stops everything. Utilize TLS fingerprints in conjunction with other data to construct a more intelligent and resilient defense.</p></li></ul><h2>Service provider support</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cy1C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cy1C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg 424w, https://substackcdn.com/image/fetch/$s_!cy1C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg 848w, https://substackcdn.com/image/fetch/$s_!cy1C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!cy1C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cy1C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg" width="1456" height="170" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:170,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139830,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://arxignis.substack.com/i/174318607?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cy1C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg 424w, https://substackcdn.com/image/fetch/$s_!cy1C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg 848w, https://substackcdn.com/image/fetch/$s_!cy1C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!cy1C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b5fe35f-472a-4e16-8f63-47319defce97_2768x324.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h6><a href="https://docs.aws.amazon.com/waf/latest/APIReference/API_JA4Fingerprint.html">https://docs.aws.amazon.com/waf/latest/APIReference/API_JA4Fingerprint.html</a></h6><h6><a href="https://cloud.google.com/load-balancing/docs/https/custom-headers#variables">https://cloud.google.com/load-balancing/docs/https/custom-headers#variables</a></h6><h6><a href="https://developers.cloudflare.com/bots/additional-configurations/ja3-ja4-fingerprint/">https://developers.cloudflare.com/bots/additional-configurations/ja3-ja4-fingerprint/</a></h6><h6><a href="https://ngrok.com/docs/traffic-policy/variables/connection/#conntlsja4_fingerprint">https://ngrok.com/docs/traffic-policy/variables/connection/#conntlsja4_fingerprint</a></h6><blockquote><p>https://github.com/arxignis/nginx</p></blockquote><h2>Arxignis</h2><p>We are building multi-layer services because the best result is similar to an onion. </p><div class="pullquote"><p>Onions have layers. Ogres have layers. You get it? We both have layers! by Shrek.</p></div><h4>Arxignis architecture</h4><p>If you have any questions, please join our <a href="https://discord.com/invite/jzsW5Q6s9q">Discord</a> community.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HP6x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HP6x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png 424w, https://substackcdn.com/image/fetch/$s_!HP6x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png 848w, https://substackcdn.com/image/fetch/$s_!HP6x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png 1272w, https://substackcdn.com/image/fetch/$s_!HP6x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HP6x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png" width="900" height="879" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:879,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:179535,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://arxignis.substack.com/i/174318607?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!HP6x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png 424w, https://substackcdn.com/image/fetch/$s_!HP6x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png 848w, https://substackcdn.com/image/fetch/$s_!HP6x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png 1272w, https://substackcdn.com/image/fetch/$s_!HP6x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F879f677c-5b75-4a79-bc68-82bf3c90d49c_900x879.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p>Thanks for reading my article! Appreciate it!</p></div><p>Author: David Papp</p><p>LinkedIn: <a href="https://www.linkedin.com/in/davpapp/">https://www.linkedin.com/in/davpapp/</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gen0sec.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>