<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FMProxy on David Hamann</title><link>https://davidhamann.de/tags/fmproxy/</link><description>Recent content in FMProxy on David Hamann</description><generator>Hugo</generator><language>en</language><copyright>&amp;copy; David Hamann</copyright><lastBuildDate>Fri, 14 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://davidhamann.de/tags/fmproxy/feed.xml" rel="self" type="application/rss+xml"/><item><title>FMProxy – Tunneling support, session dashboard and some more</title><link>https://davidhamann.de/2026/08/14/fmproxy-tunneling-dashboard-updates/</link><pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate><guid>https://davidhamann.de/2026/08/14/fmproxy-tunneling-dashboard-updates/</guid><description>&lt;p&gt;A few months back &lt;a href="https://davidhamann.de/2026/05/30/fmproxy-security-proxy-for-filemaker-server/"&gt;I wrote&lt;/a&gt; about the first FMProxy release, giving an overview about past research and the idea of the proxy as a product.&lt;/p&gt;
&lt;p&gt;We used the time since to add features, fix bugs and improve stability of the proxy. Here are a few of the new things worth mentioning:&lt;/p&gt;
&lt;h2 id="support-for-http-tunneling"&gt;Support for HTTP tunneling&lt;/h2&gt;
&lt;p&gt;A few beta testers reached out asking how the proxy would affect the &amp;ldquo;HTTP tunneling&amp;rdquo; feature of Pro/Server.&lt;/p&gt;
&lt;p&gt;In the beginning we didn&amp;rsquo;t support it at all, but from &lt;a href="https://downloads.fmproxy.com"&gt;version 0.4.0&lt;/a&gt; this channel can now be used with all of FMProxy&amp;rsquo;s detection capabilities. You just have to enable it during installation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ./install.sh --features&lt;span class="o"&gt;=&lt;/span&gt;tunneling
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For some background information, here is how FileMaker Server&amp;rsquo;s &amp;ldquo;HTTP tunneling&amp;rdquo; roughly works and what FMProxy does slightly different:&lt;/p&gt;
&lt;p&gt;Nginx, shipped and configured with FileMaker Server, accepts WebSocket connections coming from FileMaker Pro and passes them on to an additional listener of &lt;code&gt;fmserverd&lt;/code&gt; (by default TCP/8091, started when the feature is enabled via the Admin Console).&lt;/p&gt;
&lt;p&gt;FMProxy works by starting its own WebSocket listener on a separate port (by default TCP/8092). To let FMProxy accept the traffic, the Nginx configuration must be adjusted from this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;location ^~ /fms/ws {
 proxy_pass http://127.0.0.1:8091/fms/ws;
 proxy_read_timeout 600s;
 proxy_send_timeout 600s;
 keepalive_timeout 600s;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection $connection_upgrade;
 proxy_set_header Host $http_host;
 proxy_set_header X-Forwarded-Host $host:$server_port;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;location ^~ /fms/ws {
 proxy_pass http://127.0.0.1:8092/fms/ws; # &amp;lt;-- this guy has changed
 proxy_read_timeout 600s;
 proxy_send_timeout 600s;
 keepalive_timeout 600s;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection $connection_upgrade;
 proxy_set_header Host $http_host;
 proxy_set_header X-Forwarded-Host $host:$server_port;
 proxy_set_header X-Forwarded-For $remote_addr; # &amp;lt;-- and this guy was added
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As you can see, we just modify the upstream port from 8091 to 8092 and add the &lt;code&gt;X-Forwarded-For&lt;/code&gt; header with the remote address of the connecting client. The latter is necessary to transport the actual address of a client to FMProxy – otherwise, we would just have the address of the Nginx proxy itself (which would always be 127.0.0.1 and not very helpful in the logs).&lt;/p&gt;
&lt;p&gt;The modification can be taken care of by the installer if you give it the explicit instruction (see feature flag above).&lt;/p&gt;
&lt;p&gt;One thing to note: tunneling &lt;em&gt;with&lt;/em&gt; FMProxy works slightly different than &lt;em&gt;without&lt;/em&gt; it. When tunneling is enabled, FMProxy will &lt;em&gt;not&lt;/em&gt; pass the traffic it receives from Nginx to FileMaker Server&amp;rsquo;s tunneling listener, but rather unwrap it itself and send it to the always available data port (stock config TCP/5003, usually adjusted to 5004 by FMProxy).&lt;/p&gt;
&lt;p&gt;Due to this, enabling or disabling the HTTP tunneling feature in the FileMaker Server Admin Console has no effect anymore (i.e. FMProxy&amp;rsquo;s HTTP tunneling feature also works when FileMaker Server&amp;rsquo;s tunneling is turned off).&lt;/p&gt;
&lt;p&gt;We do this to prevent rewrapping the GIOP messages again (after unwrapping and analysis) and having to manage and keep alive another WebSocket connection. In practice, you should not notice the difference, except that FileMaker&amp;rsquo;s &lt;code&gt;Get(NetworkProtocol)&lt;/code&gt; will return &lt;code&gt;TCP/IP&lt;/code&gt; instead of &lt;code&gt;HTTPS&lt;/code&gt; even for tunneled connections.&lt;/p&gt;
&lt;p&gt;If you require it, you can even have a mixed setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use FMProxy for native traffic, disable HTTP tunneling completely&lt;/li&gt;
&lt;li&gt;Use FMProxy for native traffic, skip it for HTTP tunneling (tunneling will still work, but will be invisible to FMProxy)&lt;/li&gt;
&lt;li&gt;Use FMProxy for both native and tunnelling traffic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that – just like with FileMaker Server itself – traffic via the native channel (i.e. by default 5003) cannot be disabled.&lt;/p&gt;
&lt;p&gt;Due to Nginx always being the frontend for the tunneling feature, certificates for tunneling are also always managed by Nginx (as TLS is terminated by Nginx). A certificate configured for FMProxy will not have an effect on the tunneling feature. You can use the FileMaker Admin Console (or &lt;code&gt;fmsadmin&lt;/code&gt;) to configure the certificates for Nginx. Just make sure to do a reload of FMProxy in case you use the same certificates for FMProxy.&lt;/p&gt;
&lt;p&gt;This brings us to the next new feature: TLS hot reloading.&lt;/p&gt;
&lt;h2 id="tls-hot-reloading"&gt;TLS Hot Reloading&lt;/h2&gt;
&lt;p&gt;Since FileMaker clients connect directly to FMProxy (using the native, i.e. non-tunnel channel), they also negotiate TLS with FMProxy (not FileMaker Server).&lt;/p&gt;
&lt;p&gt;This gives us the opportunity to do what FileMaker Server currently cannot do: swap TLS certificates without restarting the server and without clients being forced to re-connect or scripts stopping mid-execution.&lt;/p&gt;
&lt;p&gt;We do this by reacting to a SIGHUP signal and then read the configured TLS certificate/key again. One caveat: if you replace the certificate via the FileMaker Server Admin Console (or &lt;code&gt;fmsadmin&lt;/code&gt;), you have to perform one additional FileMaker Server config change afterwards.&lt;/p&gt;
&lt;p&gt;This setting is &lt;code&gt;UseSecureConnection&lt;/code&gt; which FileMaker Server resets to &lt;code&gt;1&lt;/code&gt; when you import a certificate. Since the proxy talks to FileMaker Server on localhost without TLS, this setting has to be set to &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If it is not reset, the proxy won&amp;rsquo;t be able to connect to FileMaker Server after the next restart (which would happen eventually :-)).&lt;/p&gt;
&lt;p&gt;If you would want to automate the whole process, it could look something like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1.) Replace certificates (either manually or via FMS admin console). No&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# restart of FMS is required.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2.) If you&amp;#39;ve replaced the certificates via admin console/api/fmsadmin, tell&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# FileMaker Server to revert back to clear connections (proxy to FMS). If&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# you skip this step, the proxy won&amp;#39;t be able to connect to FMS anymore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# after the next FMS restart.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ignore the message &amp;#34;Please restart the FileMaker Server service to apply&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# the change.&amp;#34; from fmsadmin – it&amp;#39;s not required!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/bin/fmsadmin &lt;span class="nb"&gt;set&lt;/span&gt; serverprefs &lt;span class="nv"&gt;UseSecureConnection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3.) Finally, tell FMProxy to reload certificate files (from configured paths)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/bin/systemctl reload fmproxy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Note: if you want to run this process scheduled/headless, you will need to&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# load/pass credentials to fmsadmin as there will be no interactive terminal.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you don&amp;rsquo;t manage your certificates with FileMaker Server, a plain &lt;code&gt;/usr/bin/systemctl reload fmproxy&lt;/code&gt; is enough. The reload command is really just an alias for &lt;code&gt;kill -s HUP &amp;lt;fmproxy PID&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now that you can swap certificates on the fly, how can you see which clients were originally presented with which certificate? With an interactive session dashboard!&lt;/p&gt;
&lt;h2 id="live-session-dashboard"&gt;Live session dashboard&lt;/h2&gt;
&lt;p&gt;Installing FMProxy with &lt;code&gt;sudo ./install.sh --features=dashboard&lt;/code&gt; will enable a small HTTP server providing live information about currently connected clients/sessions. By default, it will run on port 5353 (bound to loopback).&lt;/p&gt;
&lt;p&gt;If you would like to process this information yourself, you can send requests in short intervals to &lt;code&gt;http://127.0.0.1:5353/sessions&lt;/code&gt;. This will give you a snapshot JSON representation of what&amp;rsquo;s currently in FMProxy&amp;rsquo;s session store.&lt;/p&gt;
&lt;p&gt;If you would rather like to see the data within a user interface, you can run the new &lt;code&gt;fmproxy dashboard&lt;/code&gt; command. The dashboard will query the same data, but present it interactively in a way that looks something like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;FMProxy sessions: 1 generated 2026-08-14T13:26:20.200422035+00:00 refresh 2s (↑/↓ or j/k to move, q/Esc to quit)
┌Sessions───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Session IP Channel Connected Tickle Host Username Platform Client Serial DBs TLS Persistent ID│
│ 0x49613320 10.10.99.41:65434 native 5m 48s workstation-01 david.hamann MacOS/26.6.1 Pro 26.0.2 AAAAA-BBBBB-CCCCC-DDDD… 2 73d1ff…ed5874 d8e69c…cec60a│
│ │
│ │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌Session───────────────────────────────────────────────────────────────────────────┐┌Network &amp;amp; databases──────────────────────────────────────────────────────┐┌Paths───────────────────────────────────────────────────────┐
│ID 0x49613320 ││IPs 10.10.99.41, fd7a:2c19:8e4b:0d63:c1f2:9a07:56be:e814, ││Root /Macintosh HD/ │
│Connect ID c3326149ff17e00598ef72be2e790045 ││fd7a:2c19:8e4b:0d63:3b95:71dc:a2f0:4c67 ││Preferences /Macintosh HD/Users/a/Library/Preferences/ │
│Persistent ID d8e69ccc68f742028b5658188bcec60a ││MACs 5e:b3:91:d4:6f:71, 5e:b3:91:d4:6f:3d, 5e:b3:91:d4:6f:a8, ││Documents /Macintosh HD/Users/a/Documents/ │
│Channel native ││5e:b3:91:d4:6f:c2, 5e:b3:91:d4:6f:15, 5e:b3:91:d4:6f:e9, ││Desktop /Macintosh HD/Users/a/Desktop/ │
│Host workstation-01 ││0a:47:d2:8b:31:6c, 0a:47:d2:8b:31:b4, 0a:47:d2:8b:31:27, ││Applications /Macintosh HD/Applications/ │
│User david.hamann ││0a:47:d2:8b:31:6c, e2:9f:44:07:ca:d3, 96:1b:5d:e8:74:2f, ││ │
│Platform MacOS ││2a:f5:60:19:8c:b7, 2a:f5:60:19:8c:43 ││ │
│OS 26.6.1 ││Path fmnet:/fms02.davidhamann.de/test.fmp12 ││ │
│Language English ││Printer Xerox(R) B230 Printer ││ │
│Client Pro 26.0.2 ││ ││ │
│Serial AAAAA-BBBBB-CCCCC-DDDDD-EEEEE-FFFFF-GGGGG ││Databases (2) ││ │
│Connected 2026-08-14T13:20:43.971578165+00:00 ││test.fmp12 as admin (0x02) [auth] ││ │
│Last tickle 2026-08-14T13:25:32.056192169+00:00 (48s ago) ││FMServer_Sample.fmp12 ││ │
│TLS 73d1ffc4fe4ef21b1f70d7b3d96d9f7dcbd5a1a94415745c2f7f91f649ed5874 ││ ││ │
│ ││ ││ │
└──────────────────────────────────────────────────────────────────────────────────┘└─────────────────────────────────────────────────────────────────────────┘└────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As you can see above, you can get quite a lot of information from a connecting client (even before authentication) – OS, client version, serial number, connection channel, etc. is all there. And to answer the question from the last section: you can also get the fingerprint of the TLS certificate used during initial handshake.&lt;/p&gt;
&lt;p&gt;To view other sessions, just use arrow keys or &lt;code&gt;j/k&lt;/code&gt; to navigate up and down.&lt;/p&gt;
&lt;h2 id="miscellaneous"&gt;Miscellaneous&lt;/h2&gt;
&lt;p&gt;For a list of bug fixes and other changes, head over to the &lt;a href="https://downloads.fmproxy.com/release_notes.txt"&gt;release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="stay-up-to-date-and-discuss"&gt;Stay up-to-date and discuss&lt;/h2&gt;
&lt;p&gt;If you want get a notification for new releases or discuss things about the proxy, feel free to join our new &lt;a href="https://groups.io/g/fmproxy/join"&gt;mailing list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We don&amp;rsquo;t have any pricing yet. So you can still freely download new versions of FMProxy &lt;a href="https://downloads.fmproxy.com"&gt;from our server&lt;/a&gt; with the only restriction that they expire 60 days after release.&lt;/p&gt;</description></item><item><title>FMProxy – A Security Proxy for FileMaker Server</title><link>https://davidhamann.de/2026/05/30/fmproxy-security-proxy-for-filemaker-server/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>https://davidhamann.de/2026/05/30/fmproxy-security-proxy-for-filemaker-server/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; &lt;a href="https://fm-security.com"&gt;Alex Dubov&lt;/a&gt; and I just released the first public version of FMProxy, a security proxy for FileMaker Server. We are currently looking for beta testers. Want to try it out? Get your copy for Ubuntu Server &lt;a href="https://downloads.fmproxy.com/fmproxy-0.2.1-linux-x86_64-trial.tar.gz"&gt;x86_64&lt;/a&gt; or &lt;a href="https://downloads.fmproxy.com/fmproxy-0.2.1-linux-aarch64-trial.tar.gz"&gt;arm_64&lt;/a&gt;. Make sure to read the &lt;a href="https://downloads.fmproxy.com/fmproxy-trial-docs-0.2.1.pdf"&gt;trial docs (pdf)&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="introduction-and-research-background"&gt;Introduction and Research background&lt;/h2&gt;
&lt;p&gt;In the last few years, &lt;a href="https://fm-security.com"&gt;Alex Dubov&lt;/a&gt; and I have independently been researching the security of the FileMaker platform.&lt;/p&gt;
&lt;p&gt;We both reported bugs directly to Claris and via the Apple Bug Bounty program.&lt;/p&gt;
&lt;p&gt;While these reports led to fixes/improvements in the product, the full timeline – from discovery through reporting, validation, release, and eventual installation on customer servers – was often stretched over many months.&lt;/p&gt;
&lt;p&gt;Early last year, during the discovery of more security-relevant issues, we teamed up to see if we can not only do the security research but also directly work on a solution ourselves.&lt;/p&gt;
&lt;p&gt;The idea was to build a tool that would continuously analyze traffic to detect current threats, even before official patches for certain vulnerabilities were being provided. And on top of that, give administrators more visibility into connecting clients and their configurations/fingerprints.&lt;/p&gt;
&lt;p&gt;At the Vienna Calling conference in June 2025 (yes, nearly a year ago – things take a while ;-)), we demonstrated a few newly discovered vulnerabilities in the latest version of FileMaker Server (denial of service, session hijacking and privilege escalation) and showed a preview of the proxy server we developed, which could detect – and in some cases prevent – exploitation of known and yet to be discovered vulnerabilities.&lt;/p&gt;
&lt;p&gt;At the time, it was just a proof-of-concept on our local machines. We used the time since then to develop the proxy server to a point where it can now be easily installed and reliably run next to FileMaker Server on Ubuntu Linux.&lt;/p&gt;
&lt;p&gt;To understand what the proxy inspects, it helps to first look at how clients talk to the server.&lt;/p&gt;
&lt;h2 id="how-do-filemaker-clients-communicate-and-what-does-the-proxy-look-at"&gt;How do FileMaker clients communicate and what does the proxy look at?&lt;/h2&gt;
&lt;p&gt;FileMaker Pro and Go communicate with FileMaker Server using &lt;a href="https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture"&gt;CORBA&lt;/a&gt;&amp;rsquo;s GIOP (&lt;a href="https://en.wikipedia.org/wiki/General_Inter-ORB_Protocol"&gt;General Inter-ORB Protocol&lt;/a&gt;), usually wrapped in TLS.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s check briefly how the communication over this protocol works.&lt;/p&gt;
&lt;p&gt;Looking at a traffic capture of FileMaker Pro/Go to FileMaker Server, we can see that GIOP packets contain a header specifying the message type (such as &lt;code&gt;Request&lt;/code&gt; or &lt;code&gt;Reply&lt;/code&gt;), and a body with several data fields in accordance with that type. These fields carry, for example, the request id, operation and of course the actual payload data.&lt;/p&gt;
&lt;p&gt;The majority of packets you will see when observing FileMaker traffic are of the type &lt;code&gt;Request&lt;/code&gt; and &lt;code&gt;Reply&lt;/code&gt;, with the requests predominantly using the &lt;code&gt;Perform&lt;/code&gt; operation.&lt;/p&gt;
&lt;p&gt;A simple example:&lt;/p&gt;
&lt;p&gt;A FileMaker Pro client wants to retrieve account information (or record data or any other data) for a certain database hosted on a FileMaker Server. To request this data, it sends a GIOP packet with the &lt;code&gt;Request&lt;/code&gt; message type, &lt;code&gt;Perform&lt;/code&gt; operation, and some payload in a proprietary format to the server.&lt;/p&gt;
&lt;p&gt;This (unfortunately not publicly documented) payload contains, amongst other data, a session ID (also see Alex&amp;rsquo;s &lt;a href="https://fm-security.com/posts/bypass_auth/"&gt;authentication bypass article&lt;/a&gt;), a command instructing the server to return specific data, and a location described as a hierarchical path to a data structure in the hosted database file (in this example a location where account information is stored). This path structure is the same as you would find in an fmp12 file (see &lt;a href="https://davidhamann.de/2024/06/17/how-does-filemaker-store-passwords/"&gt;my analysis of the format here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;&lt;img alt="GIOP request" loading="lazy" src="https://davidhamann.de/images/giop-request.png"&gt;
&lt;div class="notice notice-info"&gt;
 &lt;ul&gt;
&lt;li&gt;12 00 00 00 = Request ID 18&lt;/li&gt;
&lt;li&gt;50 65 72 66 6f 72 6d = Perform (0x50 = ascii &amp;ldquo;P&amp;rdquo;, 0x65 = ascii &amp;ldquo;e&amp;rdquo;, &amp;hellip;)&lt;/li&gt;
&lt;li&gt;Get data at path: 0x17, 0x01, 0x05, 0x02 (where 0x02 is the account ID)&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;The server will then answer (assuming the request was valid and the client authenticated) with a &lt;code&gt;Reply&lt;/code&gt; packet containing the data at the requested path. In the case of a user account this data contains fields for name, privilege set, etc. and can be parsed as described in the fmp12 file format post linked above.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;&lt;img alt="GIOP reply" loading="lazy" src="https://davidhamann.de/images/giop-reply.png"&gt;&lt;/p&gt;
&lt;div class="notice notice-info"&gt;
 &lt;ul&gt;
&lt;li&gt;12 00 00 00 = Request ID 18 (matches this reply to the request)&lt;/li&gt;
&lt;li&gt;00 00 00 00 = Status -&amp;gt; No Exception&lt;/li&gt;
&lt;li&gt;d0 00 00 00 = Length of message (208 bytes)&lt;/li&gt;
&lt;li&gt;80 06 04 10 = NOP, 06 = code for key-value type, key 04, length 0x10 (16), some value&lt;/li&gt;
&lt;li&gt;06 10 05 1b 3e 37 33 34 = type 06, key 0x10 (16), length 5, value = admin ^ 0x5a&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h2 id="what-can-we-do-with-this-knowledge-and-where-does-fmproxy-fit-in"&gt;What can we do with this knowledge and where does FMProxy fit in?&lt;/h2&gt;
&lt;p&gt;The idea behind FMProxy is that all this data flowing between server and clients is continuously analyzed to give you more information about who is connecting to your server with what kind of client setup (e.g. version, serial number, operating system), and to alert you if there are unusual/suspicious patterns appearing in the network traffic.&lt;/p&gt;
&lt;p&gt;FMProxy runs on the same host as FileMaker Server and listens on the default port which FileMaker clients connect to (5003/tcp). To avoid conflicts, the FileMaker Server installation is modified to listen on another port.&lt;/p&gt;
&lt;p&gt;Once a client connects to the proxy server, the proxy does two things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A quick scan of the packet contents to decide if there is any critical issue which should lead to a termination of the connection (a known DoS payload should never reach the FileMaker Server)&lt;/li&gt;
&lt;li&gt;If no severe issue is detected in the fast scan, we pass the packet contents to a separate task for deeper analysis while at the same time forwarding it to the target FileMaker Server.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Step 2 is implemented in this way such that it doesn&amp;rsquo;t couple the analysis overhead with the forwarding of the packet to FileMaker Server, to keep the latency penalty low.&lt;/p&gt;
&lt;p&gt;Should the deeper analysis detect any issues (this is mostly unrelated to specific vulnerabilities, but rather a scan for unusual patterns such as a non-&amp;ldquo;Full Access&amp;rdquo; account accessing data it shouldn&amp;rsquo;t have access to), then these cases are logged to a file for further investigation by the server administrator. The logs would typically be forwarded to a central log server with alerting rules.&lt;/p&gt;
&lt;p&gt;FMProxy generally tries to only do a minimum set of actions before forwarding data to FileMaker Server and the clients to not cause any interference with regular client-server communications (after all it&amp;rsquo;s a proprietary protocol and we want to keep traffic unchanged if at all possible). In very few cases we do have to rewrite parts of a packet to make the whole proxy setup feasible.&lt;/p&gt;
&lt;h2 id="what-can-fmproxy-actually-detect"&gt;What can FMProxy actually detect?&lt;/h2&gt;
&lt;p&gt;Besides access logging, FMProxy currently has detection capabilities that log the following security events. The majority of them don&amp;rsquo;t focus on specific vulnerabilities, but rather on detecting patterns indicating authorization issues that could be a &lt;em&gt;result&lt;/em&gt; of all kinds of vulnerabilities (known or not yet known).&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Event ID&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0001&lt;/td&gt;
 &lt;td&gt;Detection of a request with an unknown session ID. Repeated events of this kind could be an indication of session ID brute-forcing.&lt;br/&gt;&lt;br/&gt;Session IDs are given out by the server when a client connects (before authentication). If a session ID for an already authenticated client is &amp;ldquo;guessed&amp;rdquo; by brute-force, it can allow an attacker to hijack that session and perform actions on behalf of the authenticated client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0002&lt;/td&gt;
 &lt;td&gt;Detection of a client downloading or attempting to download data from a database which is not part of the session used to initiate the download (i.e. no authentication was performed for this database during this session).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0003&lt;/td&gt;
 &lt;td&gt;Detection of a client downloading or attempting to download a list of all scripts with an unauthenticated account.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0004&lt;/td&gt;
 &lt;td&gt;Detection of a client downloading or attempting to download a list of all scripts with a non-&amp;ldquo;Full Access&amp;rdquo; account. This is benign if the authenticated account is not a Full Access account but has the permissions to modify scripts.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0005&lt;/td&gt;
 &lt;td&gt;Detection of a client downloading or attempting to download data from a specific database without the corresponding account being authenticated.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0006&lt;/td&gt;
 &lt;td&gt;Detection of a client accessing account information for an account other than self while the proxy has insufficient information about the privilege set / permissions of the authenticated account.&lt;br&gt;&lt;br&gt;With data going over the wire the proxy builds a representation of the privileges for different accounts. When a request is made to download data for another account, this representation is in most cases sufficient to judge if it&amp;rsquo;s a legit request or not. This event will be raised if the information is incomplete to judge the legitimacy of the request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0007&lt;/td&gt;
 &lt;td&gt;Detection of a client accessing account information for an account other than self while being authenticated but not having Full Access privileges.&lt;br&gt;&lt;br&gt;This message is benign if a non-Full Access account is configured with permissions to manage other accounts.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0008&lt;/td&gt;
 &lt;td&gt;Detection of a client connecting with a persistent ID which is not present in the list of trusted clients.&lt;br&gt;&lt;br&gt;This event can only appear if the proxy was started with a list of trusted clients.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0009&lt;/td&gt;
 &lt;td&gt;Detection of a client connecting with an invalid persistent ID. This could be an indicator of an attacker using a crafted payload using a custom tool. FileMaker clients will always connect with a valid ID.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0010&lt;/td&gt;
 &lt;td&gt;Detection of a failed login. This event is always logged when a login fails (e.g. wrong account name / password combination).&lt;br&gt;&lt;br&gt;When automatic logins are configured, you might see this event appearing before a login prompt is shown to a user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0011&lt;/td&gt;
 &lt;td&gt;Detection of known payloads that will crash FileMaker server (denial of service) due to memory issues.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0012&lt;/td&gt;
 &lt;td&gt;Detection of successful login.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SEC-0013&lt;/td&gt;
 &lt;td&gt;Detection of non-FileMaker traffic on the listening port. This event will occur more frequently on public servers which experience probing traffic (bots trying to check for open ports and analyze what software is running).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="want-to-get-your-hands-on-the-first-version"&gt;Want to get your hands on the first version?&lt;/h2&gt;
&lt;p&gt;If you would like to try out FMProxy in your own lab setup, you can get your copy for Ubuntu Server &lt;a href="https://downloads.fmproxy.com/fmproxy-0.2.1-linux-x86_64-trial.tar.gz"&gt;x86_64&lt;/a&gt; or &lt;a href="https://downloads.fmproxy.com/fmproxy-0.2.1-linux-aarch64-trial.tar.gz"&gt;arm_64&lt;/a&gt;. If you would rather test on macOS or Windows, let us know – we have working versions but not a fully automated setup yet. For more information and installation and configuration instructions, please refer to the &lt;a href="https://downloads.fmproxy.com/fmproxy-trial-docs-0.2.1.pdf"&gt;trial docs (pdf)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The current builds expire every 60 days, so if you would like to follow the progress, just &lt;a href="mailto:support@fmproxy.com"&gt;send us an email&lt;/a&gt; and we keep you in the loop for new versions and later potential commercial options.&lt;/p&gt;</description></item></channel></rss>