In addition to @michael.ong1 suggestions, also consider what such a user might be trying to gain from their signups. Presumably you have some sort of hint that led you to realising this particular user is malicious? If so, I would add in a bunch of extra monitoring functions (e.g. logging workflow activities to a DB table) to try and understand what they are doing once they log in (don’t bother with browser-based monitoring, it’s too easy to bypass for an actively malicious user).
When developing apps, threat models should be created that look into possible attack vectors and possible mitigations. This should look at different classes of user, entry points, data exfiltration, among many other vectors. I work in the IT security sector as my day job, so I can attest to how critical threat modelling is to try and understand the security risks and mitigation options for your app.
If I was encountering such an attacker, I would be mandating QR codes, email verification, IP address restrictions, request limits and data privacy rules. If such an attacker persisted, I would convert the signup model to an “approval required” model where you (or an administrator) must approve all signups.