Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
IOSSecuritySuite — Bibliothèque Swift de sécurité et d'anti-altération pour la plateforme iOS | Kitploit
Outils/GitHubGitHub/securing/iossecuritysuite
Sécurité iOSRétro-ingénierieSécurité MobileApprentissage et Éducation
GitHubsecuring/iossecuritysuite

IOSSecuritySuite

Bibliothèque Swift de sécurité et d'anti-altération pour la plateforme iOS

Voir le dépôt
2.7k344il y a 15 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Site web

⭐️ Voulez-vous devenir un ingénieur certifié en sécurité des applications iOS ? ⭐️

Découvrez notre cours pratique et entièrement en ligne sur : https://courses.securing.pl/courses/iase

iASE logo

Description d'ISS

ISS logo

par @_r3ggi

🌏 iOS Security Suite est une bibliothèque de sécurité de plateforme avancée et facile à utiliser, écrite en pure Swift ! Si vous développez pour iOS et que vous souhaitez protéger votre application selon la norme OWASP MASVS, chapitre v8, alors cette bibliothèque pourrait vous faire gagner beaucoup de temps. 🚀

Ce que ISS détecte :

  • Jailbreak 🧨
  • Débogueur attaché 👨🏻‍🚀
  • Si une application a été exécutée dans un émulateur 👽
  • Outils de rétro-ingénierie courants exécutés sur l'appareil 🔭

Configuration

Il y a 4 façons de commencer à utiliser IOSSecuritySuite

1. Ajouter la source

Ajoutez les fichiers IOSSecuritySuite/*.swift à votre projet

2. Configuration avec CocoaPods

pod 'IOSSecuritySuite'

3. Configuration avec Carthage

github "securing/IOSSecuritySuite"

4. Configuration avec Swift Package Manager

root@kitploit:~
.package(url: "https://github.com/securing/IOSSecuritySuite.git", from: "1.5.0")

Mettre à jour Info.plist

Après avoir ajouté ISS à votre projet, vous devrez également mettre à jour votre Info.plist principal. Il y a une vérification dans le module de détection de jailbreak qui utilise la méthode canOpenURL(_:) et nécessite de spécifier les URL qui seront interrogées.

root@kitploit:~
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>undecimus</string>
    <string>sileo</string>
    <string>zbra</string>
    <string>filza</string>
</array>

Tarifs

Consultez notre licence EULA pour les détails.

TLDR : Si votre entreprise emploie :

  • 0-99 personnes - gratuit
  • 100-1000 - 3k EUR/an
  • 1000+ - 10k EUR/an

Si vous souhaitez vendre un module qui utilise iOS Security Suite (il n'est pas utilisé directement dans votre application) - 10k EUR/an

Avis

iOS Security Suite est destiné à être utilisé sur iOS/iPadOS. Il ne doit pas être utilisé sur les Mac avec Apple Silicon.

Comment utiliser

Module de détection de jailbreak

  • La méthode la plus simple renvoie True/False si vous voulez simplement savoir si l'appareil est jailbreaké ou non
root@kitploit:~
if IOSSecuritySuite.amIJailbroken() {
	print("This device is jailbroken")
} else {
	print("This device is not jailbroken")
}
  • Verbeux, si vous voulez aussi savoir quels indicateurs ont été identifiés
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")
}

Le failMessage est une chaîne de caractères contenant des indicateurs séparés par des virgules, comme illustré dans l'exemple ci-dessous : sileo:// URL scheme detected, Suspicious file exists: /Library/MobileSubstrate/MobileSubstrate.dylib, Fork was able to create a new process

  • Verbeux et filtrable, si vous voulez par exemple identifier les appareils qui ont été jailbreakés dans le passé, mais qui sont maintenant non jailbreakés
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")
   }
}

Module de détection de débogueur

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

Refuser le débogueur complètement

root@kitploit:~
IOSSecuritySuite.denyDebugger()

Module de détection d'émulateur

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

Module de détection d'outils de rétro-ingénierie

  • La méthode la plus simple renvoie True/False si vous voulez simplement savoir si l'appareil présente des preuves de rétro-ingénierie
root@kitploit:~
if IOSSecuritySuite.amIReverseEngineered() {
  print("This device has evidence of reverse engineering")
} else {
  print("This device hasn't evidence of reverse engineering")
}
  • Verbeux et filtrable, si vous voulez aussi la liste des vérifications effectuées
root@kitploit:~
let reverseStatus = IOSSecuritySuite.amIReverseEngineeredWithFailedChecks()
if reverseStatus.reverseEngineered {
   // check for reverseStatus.failedChecks for more details
}

Module de détection de proxy système

Vous pouvez maintenant aussi détecter si une application est connectée à un VPN

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

Module de détection du mode verrouillage

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

Fonctionnalités expérimentales

Module de détection de hook d'exécution

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

Module de refus de hook de symbole

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()

Module de détection 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)

Module de refus 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()
 }

Module de vérification d'intégrité des fichiers

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.")
}

Module de détection de point d'arrêt

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")
}

Module de détection de point de surveillance

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()
}

Considérations de sécurité

Avant d'utiliser cet outil et d'autres vérificateurs de sécurité de plateforme, vous devez comprendre que :

  • Inclure cet outil dans votre projet n'est pas la seule chose que vous devriez faire pour améliorer la sécurité de votre application ! Vous pouvez lire un livre blanc général sur la sécurité mobile ici.
  • La détection si un appareil est jailbreaké est effectuée localement sur l'appareil. Cela signifie que tout détecteur de jailbreak peut être contourné (même celui-ci) !
  • Le code Swift est considéré comme plus difficile à manipuler dynamiquement que l'Objective-C. Puisque cette bibliothèque a été écrite en pure Swift, les méthodes de IOSSecuritySuite ne devraient pas être exposées au runtime Objective-C (ce qui les rend plus difficiles à contourner ✅). Vous devez savoir qu'un attaquant peut toujours utiliser MSHookFunction/MSFindSymbol sur les symboles Swift et modifier dynamiquement le flux d'exécution du code Swift.

Contribution ❤️

Oui, s'il vous plaît ! Si vous avez une meilleure idée ou si vous souhaitez simplement améliorer ce projet, envoyez-moi un message sur Twitter ou LinkedIn. Les pull requests sont les bienvenues !

Remerciements particuliers : 👏🏻

  • kubajakowski pour avoir signalé le problème avec la méthode canOpenURL(_:)
  • olbartek pour la revue de code et la pull request
  • benbahrenburg pour diverses améliorations d'ISS
  • fotiDim pour avoir ajouté de nouveaux chemins de fichiers à vérifier
  • gcharita pour avoir ajouté le support de Swift Package Manager
  • rynaardb pour avoir créé la méthode amIJailbrokenWithFailedChecks()
  • undeaDD pour diverses améliorations d'ISS
  • fnxpt pour avoir ajouté plusieurs détections JB
  • TannerJin pour les modules de détection MSHook, RuntimeHook, SymbolHook et Watchpoint
  • NikoXu pour avoir ajouté le module d'intégrité des fichiers
  • hellpf pour avoir corrigé un problème de socket pendante
  • Ant-tree pour avoir amélioré la résistance au hooking
  • izmcm pour avoir implémenté la méthode amIReverseEngineeredWithFailedChecks()
  • sanu pour avoir fourni de nouvelles vérifications de fichiers
  • marsepu pour une pull request bien faite avec de nouvelles améliorations
  • mkj-is pour une pull request améliorant les performances d'ISS 🚄

À faire

  • Recherche sur la détection d'Installer5 et Zebra Package Manager (alternatives à Cydia)
  • Détecteur de Dopamine hidejb

Licence

Voir le fichier LICENSE.

Références

Lors de la création de cet outil, j'ai utilisé :

  • 🔗 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" de David Thiel
Télécharger l’outil
  • LongXiangGuo pour une pull request ajoutant le manifeste de confidentialité
  • Coeur pour des améliorations et corrections de bugs d'ISS
  • Adobels pour avoir adapté ISS aux nouvelles exigences d'Apple