Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
IOSSecuritySuite — Libreria Swift per la sicurezza della piattaforma iOS e anti-manomissione | Kitploit
Strumenti/GitHubGitHub/securing/iossecuritysuite
Sicurezza iOSReverse EngineeringSicurezza MobileApprendimento e Formazione
GitHubsecuring/iossecuritysuite

IOSSecuritySuite

Libreria Swift per la sicurezza della piattaforma iOS e anti-manomissione

Vedi Repository
2.7k34416 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

⭐️ 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

iASE logo

Descrizione ISS

ISS logo

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

root@kitploit:~
.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.

root@kitploit:~
<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
root@kitploit:~
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
root@kitploit:~
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ù
root@kitploit:~
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

root@kitploit:~
let amIDebugged: Bool = IOSSecuritySuite.amIDebugged()

Negare il debugger completamente

root@kitploit:~
IOSSecuritySuite.denyDebugger()

Modulo rilevatore di emulatore

root@kitploit:~
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
root@kitploit:~
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
root@kitploit:~
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

root@kitploit:~
let amIProxied: Bool = IOSSecuritySuite.amIProxied(considerVPNConnectionAsProxy: true)

Modulo rilevatore della modalità di blocco

root@kitploit:~
let amIInLockdownMode: Bool = IOSSecuritySuite.amIInLockdownMode()

Funzionalità sperimentali

Modulo rilevatore di hook runtime

root@kitploit:~
let amIRuntimeHooked: Bool = amIRuntimeHook(dyldWhiteList: dylds, detectionClass: SomeClass.self, selector: #selector(SomeClass.someFunction), isClassMethod: false)

Modulo di negazione degli hook dei simboli

root@kitploit:~
// 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

root@kitploit:~
// 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

root@kitploit:~
// 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

root@kitploit:~
// 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.")
}

// Manually verify SHA256 hash value of a loaded dylib
if let hashValue = IOSSecuritySuite.getMachOFileHashValue(.custom("IOSSecuritySuite")), hashValue == "6d8d460b9a4ee6c0f378e30f137cebaf2ce12bf31a2eef3729c36889158aa7fc" {
    print("I have not been Tampered.")
}
else {
    print("I have been Tampered.")
}
 
// Check SHA256 hash value of the main executable
// Tip: Your application may retrieve this value from the server
if let hashValue = IOSSecuritySuite.getMachOFileHashValue(.default), hashValue == "your-application-executable-hash-value" {
    print("I have not been Tampered.")
}
else {
    print("I have been Tampered.")
}

Modulo di rilevamento dei breakpoint

root@kitploit:~
func denyDebugger() {
    // Set breakpoint here
}
     
typealias FunctionType = @convention(thin) ()->()
let func_denyDebugger: FunctionType = denyDebugger   // `: FunctionType` is a must
let func_addr = unsafeBitCast(func_denyDebugger, to: UnsafeMutableRawPointer.self)
let hasBreakpoint = IOSSecuritySuite.hasBreakpointAt(func_addr, functionSize: nil)

if hasBreakpoint {
    print("Breakpoint found in the specified function")
} else {
    print("Breakpoint not found in the specified function")
}

Modulo di rilevamento dei watchpoint

root@kitploit:~
// Set a breakpoint at the testWatchpoint function
func testWatchpoint() -> Bool{
		// lldb: watchpoint set expression ptr
    var ptr = malloc(9)
    // lldb: watchpoint set variable count
    var count = 3
    return IOSSecuritySuite.hasWatchpoint()
}

Considerazioni sulla sicurezza

Prima di utilizzare questo e altri controllori di sicurezza della piattaforma, devi capire che:

  • Includere questo strumento nel tuo progetto non è l'unica cosa che dovresti fare per migliorare la sicurezza della tua app! Puoi leggere un whitepaper generale sulla sicurezza mobile qui.
  • Rilevare se un dispositivo è jailbroken viene fatto localmente sul dispositivo. Ciò significa che ogni rilevatore di jailbreak può essere bypassato (anche questo)!
  • Il codice Swift è considerato più difficile da manipolare dinamicamente rispetto a Objective-C. Poiché questa libreria è stata scritta in puro Swift, i metodi di IOSSecuritySuite non dovrebbero essere esposti al runtime di Objective-C (il che rende più difficile il bypass ✅). Devi sapere che un attaccante è ancora in grado di eseguire MSHookFunction/MSFindSymbol su simboli Swift e modificare dinamicamente il flusso di esecuzione del codice Swift.

Contributi ❤️

Sì, per favore! Se hai un'idea migliore o vuoi semplicemente migliorare questo progetto, contattami su Twitter o LinkedIn. Le pull request sono più che benvenute!

Ringraziamenti speciali: 👏🏻

  • kubajakowski per aver segnalato il problema con il metodo canOpenURL(_:)
  • olbartek per la revisione del codice e la pull request
  • benbahrenburg per vari miglioramenti a ISS
  • fotiDim per aver aggiunto nuovi percorsi di file da controllare
  • gcharita per aver aggiunto il supporto per Swift Package Manager
  • rynaardb per aver creato il metodo amIJailbrokenWithFailedChecks()
  • undeaDD per vari miglioramenti a ISS
  • fnxpt per aver aggiunto multiple rilevazioni di jailbreak
  • TannerJin per i moduli MSHook, RuntimeHook, SymbolHook e Watchpoint Detection
  • NikoXu per aver aggiunto il modulo di integrità dei file
  • hellpf per aver risolto un problema di socket pendente
  • Ant-tree per aver migliorato la resistenza agli hook
  • izmcm per aver implementato il metodo amIReverseEngineeredWithFailedChecks()
  • sanu per aver fornito nuovi controlli sui file
  • marsepu per una pull request ben fatta con nuovi miglioramenti
  • mkj-is per una pull request che migliora le prestazioni di ISS 🚄

TODO

  • Ricerca sul rilevamento di Installer5 e Zebra Package Manager (Alternative a Cydia)
  • Rilevatore Dopamine hidejb

Licenza

Vedi il file LICENSE.

Riferimenti

Mentre creavo questo strumento ho utilizzato:

  • 🔗 https://github.com/TheSwiftyCoder/JailBreak-Detection
  • 🔗 https://github.com/abhinashjain/jailbreakdetection
  • 🔗 https://gist.github.com/ddrccw/8412847
  • 🔗 https://gist.github.com/bugaevc/4307eaf045e4b4264d8e395b5878a63b
  • 📚 "iOS Application Security" di David Thiel
Scarica lo strumento
  • LongXiangGuo per una pull request che aggiunge il manifesto della privacy
  • Coeur per miglioramenti e correzioni di bug in ISS
  • Adobels per aver adattato ISS ai nuovi requisiti di Apple