Coder Social home page Coder Social logo

sajibekanti / iossecuritysuite Goto Github PK

View Code? Open in Web Editor NEW

This project forked from securing/iossecuritysuite

0.0 0.0 0.0 310 KB

iOS platform security & anti-tampering Swift library

Home Page: https://www.securing.biz/

License: BSD 2-Clause "Simplified" License

Swift 92.97% Objective-C 3.10% Ruby 3.93%

iossecuritysuite's Introduction

ISS logo

ISS Description

๐ŸŒ iOS Security Suite is an advanced and easy-to-use platform security & anti-tampering library written in pure Swift! If you are developing for iOS and you want to protect your app according to the OWASP MASVS standard, chapter v8, then this library could save you a lot of time. ๐Ÿš€

What ISS detects:

  • Jailbreak (even the iOS 11+ with brand new indicators! ๐Ÿ”ฅ)
  • Attached debugger ๐Ÿ‘จ๐Ÿปโ€๐Ÿš€
  • If an app was run in emulator ๐Ÿ‘ฝ
  • Common reverse engineering tools running on the device ๐Ÿ”ญ

Setup

There are 3 ways you can start using IOSSecuritySuite

1. Add source

Add IOSSecuritySuite/*.swift files to your project

2. Setup with CocoaPods

pod 'IOSSecuritySuite'

3. Setup with Carthage

github "securing/IOSSecuritySuite"

Update Info.plist

After adding ISS to your project, you will also need to update your main Info.plist. There is a check in jailbreak detection module that uses canOpenURL(_:) method and requires specyfing URLs that will be queried.

<key>LSApplicationQueriesSchemes</key>
<array>
	<string>cydia</string>
	<string>undecimus</string>
	<string>sileo</string>
</array>

How to use

Jailbreak detector module

  • This method returns a binary value of True/False if you just want to know if the device is jailbroken or jailed
if IOSSecuritySuite.amIJailbroken() {
	print("This device is jailbroken")
} else {
	print("This device is not jailbroken")
}
  • Verbose if you also want to know what indicators were identified
let jailbreakStatus = IOSSecuritySuite.amIJailbrokenWithFailMessage()
if jailbreakStatus.jailbroken {
	print("This device is jailbroken")
	print("Because: \(jailbreakStatus.failMessage)")
} else {
	print("This device is not jailbroken")
}

The failMessage is a String containing comma separated indicators as shown on the example below: Cydia URL scheme detected, Suspicious file exists: /Library/MobileSubstrate/MobileSubstrate.dylib, Fork was able to create a new process

Debbuger detector module

let amIDebugged = IOSSecuritySuite.amIDebugged() ? true : false

Deny debugger at all

IOSSecuritySuite.denyDebugger()

Emulator detector module

let runInEmulator = IOSSecuritySuite.amIRunInEmulator() ? true : false

Reverse engineering tools detector module

let amIReverseEngineered = IOSSecuritySuite.amIReverseEngineered() ? true : false

Security considerations

Before using this and other platform security checkers you have to understand that:

  • Including this tool in your project is not the only thing you should do in order to improve your app security! You can read a general mobile security whitepaper here.
  • Detecting if a device is jailbroken is done locally on the device. It means that every jailbreak detector may be bypassed (even this)!
  • Swift code is considered to be harder to manipulate dynamically than Objective-C. Since this library was written in pure Swift, the IOSSecuritySuite methods shouldn't be exposed to Objective-C runtime (which makes it more difficult to bypass โœ…). You have to know that attacker is still able to MSHookFunction/MSFindSymbol Swift symbols and dynamically change Swift code execution flow.
  • It's also a good idea to obfuscate the whole project code including this library. See Swiftshield

Contribution โค๏ธ

Yes, please! If you have a better idea or you just want to improve this project, please text me on Twitter or Linkedin. Pull requests are more than welcome!

Special thanks: ๐Ÿ‘๐Ÿป

TODO

  • File integrity checks

  • Deny debugger

License

See the LICENSE file.

References

While creating this tool I used:

iossecuritysuite's People

Contributors

r3ggi avatar benbahrenburg avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.