
IOSSecuritySuite v2.3.0
Libreria Swift per la sicurezza della piattaforma iOS e anti-manomissione
⭐️ Vuoi diventare un ingegnere certificato di sicurezza delle applicazioni iOS? ⭐️
Dai un'occhiata al nostro corso pratico e completamente online su: https://courses.securing.pl/courses/iase

Descrizione ISS

di @_r3ggi
🌏 iOS Security Suite è una libreria avanzata e facile da usare per la sicurezza della piattaforma e anti-manomissione scritta in puro Swift! Se sviluppi per iOS e vuoi proteggere la tua app secondo lo standard OWASP MASVS capitolo v8, allora questa libreria potrebbe farti risparmiare molto tempo. 🚀
Cosa rileva ISS:
- Jailbreak 🧨
- Debugger collegato 👨🏻🚀
- Se un'app è stata eseguita in un emulatore 👽
- Strumenti comuni di reverse engineering in esecuzione sul dispositivo 🔭
Configurazione
Ci sono 4 modi per iniziare a utilizzare IOSSecuritySuite
1. Aggiungere il codice sorgente
Aggiungi i file IOSSecuritySuite/*.swift al tuo progetto
2. Configurare con CocoaPods
pod 'IOSSecuritySuite'
3. Configurare con Carthage
github "securing/IOSSecuritySuite"
4. Configurare con Swift Package Manager
.package(url: "https://github.com/securing/IOSSecuritySuite.git", from: "1.5.0")
Aggiornare Info.plist
Dopo aver aggiunto ISS al tuo progetto, dovrai anche aggiornare il tuo Info.plist principale. C'è un controllo nel modulo di rilevamento jailbreak che utilizza il metodo canOpenURL(_:) e richiede di specificare gli URL che verranno interrogati.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>undecimus</string>
<string>sileo</string>
<string>zbra</string>
<string>filza</string>
</array>
Prezzi
Controlla la nostra licenza EULA per i dettagli.
TLDR: Se la tua azienda impiega:
- 0-99 persone - gratuito da usare
- 100-1000 - 3.000 EUR/anno
- 1000+ - 10.000 EUR/anno
Se vuoi vendere un modulo che utilizza iOS Security Suite (non utilizzato direttamente nella tua app) - 10.000 EUR/anno
Avviso
iOS Security Suite è pensato per essere utilizzato su iOS/iPadOS. Non dovrebbe essere utilizzato su Mac con Apple Silicon.
Come usarlo
Modulo rilevatore di jailbreak
- Il metodo più semplice restituisce Vero/Falso se vuoi solo sapere se il dispositivo è jailbroken o meno
if IOSSecuritySuite.amIJailbroken() {
print("This device is jailbroken")
} else {
print("This device is not jailbroken")
}
- Verboso, se vuoi anche sapere quali indicatori sono stati identificati
let jailbreakStatus = IOSSecuritySuite.amIJailbrokenWithFailMessage()
if jailbreakStatus.jailbroken {
print("This device is jailbroken")
print("Because: \(jailbreakStatus.failMessage)")
} else {
print("This device is not jailbroken")
}
Il failMessage è una stringa contenente indicatori separati da virgole come mostrato nell'esempio qui sotto:
sileo:// URL scheme detected, Suspicious file exists: /Library/MobileSubstrate/MobileSubstrate.dylib, Fork was able to create a new process
- Verboso e filtrabile, se vuoi anche, ad esempio, identificare dispositivi che erano jailbroken in passato, ma ora non lo sono più
let jailbreakStatus = IOSSecuritySuite.amIJailbrokenWithFailedChecks()
if jailbreakStatus.jailbroken {
if (jailbreakStatus.failedChecks.contains { $0.check == .existenceOfSuspiciousFiles }) && (jailbreakStatus.failedChecks.contains { $0.check == .suspiciousFilesCanBeOpened }) {
print("This is real jailbroken device")
}
}
Modulo rilevatore di debugger
let amIDebugged: Bool = IOSSecuritySuite.amIDebugged()
Negare il debugger completamente
IOSSecuritySuite.denyDebugger()
Modulo rilevatore di emulatore
let runInEmulator: Bool = IOSSecuritySuite.amIRunInEmulator()
Modulo rilevatore di strumenti di reverse engineering
- Il metodo più semplice restituisce Vero/Falso se vuoi solo sapere se il dispositivo ha evidenze di reverse engineering
if IOSSecuritySuite.amIReverseEngineered() {
print("This device has evidence of reverse engineering")
} else {
print("This device hasn't evidence of reverse engineering")
}
- Verboso e filtrabile, se vuoi anche la lista dei controlli effettuati
let reverseStatus = IOSSecuritySuite.amIReverseEngineeredWithFailedChecks()
if reverseStatus.reverseEngineered {
// check for reverseStatus.failedChecks for more details
}
Modulo rilevatore di proxy di sistema
Ora puoi anche rilevare se un'app è connessa a VPN
let amIProxied: Bool = IOSSecuritySuite.amIProxied(considerVPNConnectionAsProxy: true)
Modulo rilevatore della modalità di blocco
let amIInLockdownMode: Bool = IOSSecuritySuite.amIInLockdownMode()
Funzionalità sperimentali
Modulo rilevatore di hook runtime
let amIRuntimeHooked: Bool = amIRuntimeHook(dyldWhiteList: dylds, detectionClass: SomeClass.self, selector: #selector(SomeClass.someFunction), isClassMethod: false)
Modulo di negazione degli hook dei simboli
// If we want to deny symbol hook of Swift function, we have to pass mangled name of that function
denySymbolHook("$s10Foundation5NSLogyySS_s7CVarArg_pdtF") // denying hooking for the NSLog function
NSLog("Hello Symbol Hook")
denySymbolHook("abort")
abort()
Modulo rilevatore di MSHook
// Function declaration
func someFunction(takes: Int) -> Bool {
return false
}
// Defining FunctionType : @convention(thin) indicates a “thin” function reference, which uses the Swift calling convention with no special “self” or “context” parameters.
typealias FunctionType = @convention(thin) (Int) -> (Bool)
// Getting pointer address of function we want to verify
func getSwiftFunctionAddr(_ function: @escaping FunctionType) -> UnsafeMutableRawPointer {
return unsafeBitCast(function, to: UnsafeMutableRawPointer.self)
}
let funcAddr = getSwiftFunctionAddr(someFunction)
let amIMSHooked = IOSSecuritySuite.amIMSHooked(funcAddr)
Modulo di negazione di MSHook
// Function declaration
func denyDebugger(value: Int) {
}
// Defining FunctionType : @convention(thin) indicates a “thin” function reference, which uses the Swift calling convention with no special “self” or “context” parameters.
typealias FunctionType = @convention(thin) (Int)->()
// Getting original function address
let funcDenyDebugger: FunctionType = denyDebugger
let funcAddr = unsafeBitCast(funcDenyDebugger, to: UnsafeMutableRawPointer.self)
if let originalDenyDebugger = denyMSHook(funcAddr) {
// Call the original function with 1337 as Int argument
unsafeBitCast(originalDenyDebugger, to: FunctionType.self)(1337)
} else {
denyDebugger()
}
Modulo di verifica dell'integrità dei file
// Determine if application has been tampered with
if IOSSecuritySuite.amITampered([.bundleID("biz.securing.FrameworkClientApp"),
.mobileProvision("2976c70b56e9ae1e2c8e8b231bf6b0cff12bbbd0a593f21846d9a004dd181be3"),
.machO("IOSSecuritySuite", "6d8d460b9a4ee6c0f378e30f137cebaf2ce12bf31a2eef3729c36889158aa7fc")]).result {
print("I have been Tampered.")
}
else {
print("I have not been Tampered.")
}