Application security feature

iOS RASP

Otukan iOS RASP detects jailbreaks, debuggers, instrumentation and injected code while your app runs, and applies the response you set for each flow.

  • iOS
Instrumented live session is met at the in-process checks boundary before it reaches the appInstrumented live sessionIn-process checksYour app
  • Checks at the right moment

    Otukan runs its iOS checks at launch, on return from the background and just before the flows you mark as sensitive.

  • A decision per flow

    Browsing, sign-in and payment each get their own response, so a risky device loses access to what matters and keeps the rest.

  • A way back for real users

    Clear messages, a support route and backend-side policy let a legitimate user recover without waiting for a new release.

Runtime conditions Otukan acts on

Pick a condition to see how Otukan notices it in a running iOS app, what the app does and what reaches your server.

Jailbroken device

  1. Detect

    Several independent checks look for jailbreak traces, a weakened sandbox and system changes, in both rootful and rootless layouts.

  2. Respond

    Payments and profile changes move to step-up or are paused; read-only screens keep working.

  3. Report

    A jailbreak signal naming the checks that fired travels with the next sensitive request.

Debugger attached

  1. Detect

    Otukan notices a debugger attached to the distribution build, whether at launch or partway through a session.

  2. Respond

    The flow in progress is closed and the session can end, following your policy.

  3. Report

    Your backend receives a debugging signal and can refuse the request it arrives with.

Instrumentation framework

  1. Detect

    Otukan looks for the artefacts dynamic instrumentation leaves in the process, such as unexpected threads, ports and rewritten function entry points.

  2. Respond

    Sensitive logic stops running while the framework is present.

  3. Report

    An instrumentation signal lets your fraud team separate scripted sessions from real ones.

Library injected at run time

  1. Detect

    Otukan compares the images loaded into the process with the ones your bundle ships and flags code that arrived from elsewhere.

  2. Respond

    Sign-in and transactions apply the response you chose for injected code.

  3. Report

    The signal lists the class of injected code so analysts can triage it.

Unexpected run environment

  1. Detect

    Otukan tells a physical iPhone apart from the simulator and from an iOS app running on a Mac.

  2. Respond

    Flows you restrict to phones and tablets are declined on other environments.

  3. Report

    An environment signal lets your server treat those sessions with its own rules.

What Otukan iOS RASP brings to your app

Detection, decision and reporting work as one loop inside the running app.

  • Jailbreak awareness

    Independent checks for rootful and rootless jailbreaks, each reported by name so one noisy check never decides alone.

  • Debugger detection

    Spots a debugger attached to the distribution build outside your development setup and reacts in the current flow.

  • Hooking and instrumentation

    Finds rewritten functions, the traces of dynamic instrumentation and libraries injected into the app process after launch.

  • Run environment checks

    Separates physical iPhones and iPads from the simulator and from iPhone apps running on a Mac, so each environment gets its own rules.

  • Signals for your server

    Runtime findings ride along with sign-in and transaction requests, so your server makes the final call.

  • App Attest alongside

    Runtime signals complement Apple's App Attest assertions, which your server verifies on devices that support it.

You choose the response

Set a response for each user flow. Start by observing, then tighten flow by flow as the signals prove themselves.

Observe

Signal sent to your backend

Rolling out a new policy and measuring real-world signals.

Warn

This device looks modified. Continue with care.

Conditions some genuine users create, such as developer settings.

Restrict

Payments are unavailable on this device.

Payments, stored data and account changes.

Terminate

Session closed for your security.

Clear tampering on a high-risk flow.

How it works

  1. Map the flows

    List the screens that move money, change identity or expose personal data, and the response each one needs.

  2. Protect the build

    Otukan fits your existing build and release pipeline, and your signing identity stays with your team.

  3. Start in observe

    Ship with signals reported but no user impact, and learn how often each condition appears in your audience.

  4. Enforce by flow

    Move each sensitive flow to warn, restrict or terminate once the data supports it.

Free for app publishers

Check your app's exposure

A passive review of your published app by an Otukan engineer. No files, no access to your systems. Findings go by email to the verified publisher.

You finish the request on the next page.

Otukan iOS RASP lets your app notice hostile conditions while it runs and act on them before a sensitive action completes. It detects jailbroken devices, attached debuggers, dynamic instrumentation, libraries injected into the process, and sessions on the simulator or a Mac. Each condition feeds a response you set per flow, from observe to terminate, and a signal your server can weigh. Scope is the running iOS app on physical iPhones and iPads; RASP raises the cost of analysis and abuse rather than ending it, so the backend keeps the final decision.

How runtime self-protection works across Android, iOS and cross-platform apps is covered on mobile RASP.

iOS event coverage and detection timing

A check is only useful if it runs when the risk is real. Otukan places its checks at the points in the iOS app lifecycle where an attacker is most likely to act.

MomentWhy it matters on iOSWhat Otukan checks
LaunchInjected libraries and tweaks load with the appLoaded images, jailbreak traces, run environment
Return from backgroundA debugger or instrumentation tool can attach while the app is suspendedDebugger state, instrumentation artefacts
Before a sensitive flowSign-in, payment and profile changes are what an attacker wantsA fresh evaluation of every active condition
During the flowHooks can be installed after launchRewritten entry points in the functions you protect

The checks run in your app’s own process, so they apply whether the screens are written in Swift, Objective-C, Flutter or React Native. Your server also learns which moment produced each signal, which separates a device that arrived compromised from one that changed mid-session.

What each condition means

  • Jailbreak. The sandbox and code-signing rules iOS relies on are weakened. Modern jailbreaks are often rootless and leave the system volume untouched, so Otukan’s checks look beyond file paths.
  • Debugger. Someone is stepping through your distribution build, which normally never runs under a debugger.
  • Instrumentation and hooks. A tool is rewriting your functions in memory to read arguments or change return values. Hooking detail is covered on iOS hooking detection.
  • Environment. The simulator exists only for development, so a customer session there deserves scrutiny. An iPhone app on an Apple silicon Mac can be a real customer if you allow Mac availability, so Otukan reports it as its own environment and your policy decides.

Response choices during sensitive flows

A signal is information. The response is a product decision, and Otukan lets you make it per flow instead of once for the whole app.

  • Observe. Report the condition and change nothing for the user. The right start for any new check.
  • Warn. Tell the user the device looks unsafe and let them continue with low-risk actions.
  • Restrict. Block the flow in progress, or require step-up authentication, while the rest of the app works.
  • Terminate. End the session when the condition makes any further action untrustworthy.

The strongest pattern keeps enforcement on your server. The app sends Otukan’s signal with the sign-in or transaction request, your backend combines it with App Attest and its own risk rules, and a refusal happens where the attacker cannot patch it out. Attestation detail is covered on iOS app attestation.

Version updates and legitimate-user recovery

When iOS or your app changes

Each iOS release moves system paths, loader behaviour and sandbox rules, and jailbreak tools adapt in turn. Otukan tests its checks against new iOS releases and ships updated detection in your next protected build. Your own releases matter too: a new SDK or framework can add loaded libraries the check has not seen, so each release is accepted again before it ships.

Keeping real users whole

A false alarm on a real customer is a support ticket and a lost transaction. Otukan is designed so that a false alarm on a real customer has a way back:

  1. Start each check in observe mode and read its rate per device model and iOS version.
  2. Enforce only in the flows that need it, and only once the data supports it.
  3. Show a message that says what to do next, with a reference your support team can look up.
  4. Relax policy on the server for a model, version or user while you investigate.

Proving each check before release

Every control is accepted with your engineers on physical devices: reproduce the condition in an authorised lab, repeat the same journey on a clean supported device, then run install, update, sign-in and your most sensitive flow. Versions, results and the reviewer are recorded for each release. Release practice is covered on iOS app security guides.

The wider iOS picture is covered on iOS app security. Already live on the App Store? Ask for a free App Exposure Check of that version.

Common questions

  • Can iOS RASP stop a determined attacker?

    RASP raises the cost of every attempt. An attacker with a jailbroken device and time can still study the app, but each check they must find and bypass slows them down, and each signal gives your backend a reason to refuse the request. Otukan is built so that the server, which the attacker does not control, has the last word on sensitive actions.

  • Why test on a physical device and not the simulator?

    The simulator runs a separate simulator build of your app as a process on macOS, with a different sandbox, different loaded libraries and no App Attest support. Runtime checks behave differently there by design. Otukan reports the simulator as its own environment, and acceptance of each control happens on real iPhones and iPads with the signed build.

  • What happens when a new iOS version ships?

    Apple changes system paths, loader behaviour and sandbox rules between releases, and jailbreak tooling follows. Otukan tests its checks against each new iOS release and ships updated detection with your next protected build. Running in observe mode for new versions first lets you confirm signal rates before any enforcement applies to those users.

  • How does a legitimate user recover from a false alarm?

    Design for it from the start. Show a plain message that names the next step, give support a reference code tied to the signal, and keep the enforcement decision on your server. Your team can then relax the policy for one device model, one iOS version or one user while you investigate, without shipping a new build.

On the mobile engineering team?

How protection fits your build, signing and release, platform by platform.

Related

Let your iOS app defend itself

Tell us whether the app is Swift, Objective-C or a cross-platform framework, which flows carry money or identity, and how your backend decides today. We do not ask for source code, IPA files, signing certificates or production credentials.

Or request a technical demo