
IOSSecuritySuite v2.3.0
iOS प्लेटफ़ॉर्म सुरक्षा और छेड़छाड़-रोधी Swift लाइब्रेरी
⭐️ क्या आप प्रमाणित iOS एप्लीकेशन सिक्योरिटी इंजीनियर बनना चाहते हैं? ⭐️
हमारा व्यावहारिक और पूरी तरह से ऑनलाइन कोर्स देखें: https://courses.securing.pl/courses/iase

ISS विवरण

@_r3ggi द्वारा
🌏 iOS Security Suite एक उन्नत और उपयोग में आसान प्लेटफ़ॉर्म सुरक्षा और एंटी-टैम्परिंग लाइब्रेरी है जो पूरी तरह Swift में लिखी गई है! यदि आप iOS के लिए डेवलपमेंट कर रहे हैं और OWASP MASVS मानक, अध्याय v8 के अनुसार अपने ऐप को सुरक्षित रखना चाहते हैं, तो यह लाइब्रेरी आपका बहुत समय बचा सकती है। 🚀
ISS क्या पता लगाता है:
- जेलब्रेक 🧨
- संलग्न डीबगर 👨🏻🚀
- क्या ऐप एमुलेटर में चलाया गया 👽
- डिवाइस पर चल रहे सामान्य रिवर्स इंजीनियरिंग टूल 🔭
सेटअप
IOSSecuritySuite का उपयोग शुरू करने के 4 तरीके हैं
1. स्रोत जोड़ें
अपने प्रोजेक्ट में IOSSecuritySuite/*.swift फ़ाइलें जोड़ें
2. CocoaPods के साथ सेटअप
pod 'IOSSecuritySuite'
3. Carthage के साथ सेटअप
github "securing/IOSSecuritySuite"
4. Swift Package Manager के साथ सेटअप
.package(url: "https://github.com/securing/IOSSecuritySuite.git", from: "1.5.0")
Info.plist अपडेट करें
अपने प्रोजेक्ट में ISS जोड़ने के बाद, आपको अपनी मुख्य Info.plist को भी अपडेट करना होगा। जेलब्रेक डिटेक्शन मॉड्यूल में एक जाँच है जो canOpenURL(_:) विधि का उपयोग करती है और आवश्यकता है उन URLs को निर्दिष्ट करने की जो क्वेरी की जाएंगी।
<key>LSApplicationQueriesSchemes</key>
<array>
<string>undecimus</string>
<string>sileo</string>
<string>zbra</string>
<string>filza</string>
</array>
मूल्य निर्धारण
विवरण के लिए हमारा EULA लाइसेंस देखें।
TLDR: यदि आपकी कंपनी में कार्यरत हैं:
- 0-99 लोग - उपयोग करने के लिए मुफ्त
- 100-1000 - 3k EUR/वर्ष
- 1000+ - 10k EUR/वर्ष
यदि आप iOS Security Suite का उपयोग करने वाला एक मॉड्यूल बेचना चाहते हैं (जो सीधे आपके ऐप में उपयोग नहीं किया गया है) - 10k EUR/वर्ष
सूचना
iOS Security Suite का उपयोग iOS/iPadOS पर किया जाना है। इसे Apple Silicon वाले Macs पर उपयोग नहीं किया जाना चाहिए।
उपयोग कैसे करें
जेलब्रेक डिटेक्टर मॉड्यूल
- सबसे सरल विधि True/False लौटाती है यदि आप केवल यह जानना चाहते हैं कि डिवाइस जेलब्रोकन है या जेल्ड
if IOSSecuritySuite.amIJailbroken() {
print("यह डिवाइस जेलब्रोकन है")
} else {
print("यह डिवाइस जेलब्रोकन नहीं है")
}
- विस्तृत, यदि आप यह भी जानना चाहते हैं कि कौन से संकेतक पहचाने गए
let jailbreakStatus = IOSSecuritySuite.amIJailbrokenWithFailMessage()
if jailbreakStatus.jailbroken {
print("यह डिवाइस जेलब्रोकन है")
print("क्योंकि: \(jailbreakStatus.failMessage)")
} else {
print("यह डिवाइस जेलब्रोकन नहीं है")
}
फेलमैसेज एक स्ट्रिंग है जिसमें अल्पविराम से अलग किए गए संकेतक होते हैं जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
sileo:// URL scheme detected, Suspicious file exists: /Library/MobileSubstrate/MobileSubstrate.dylib, Fork was able to create a new process
- विस्तृत और फ़िल्टरेबल, यदि आप उदाहरण के लिए उन डिवाइसों की पहचान करना चाहते हैं जो पहले जेलब्रोकन थे लेकिन अब जेल्ड हैं
let jailbreakStatus = IOSSecuritySuite.amIJailbrokenWithFailedChecks()
if jailbreakStatus.jailbroken {
if (jailbreakStatus.failedChecks.contains { $0.check == .existenceOfSuspiciousFiles }) && (jailbreakStatus.failedChecks.contains { $0.check == .suspiciousFilesCanBeOpened }) {
print("यह वास्तविक जेलब्रोकन डिवाइस है")
}
}
डीबगर डिटेक्टर मॉड्यूल
let amIDebugged: Bool = IOSSecuritySuite.amIDebugged()
डीबगर को पूरी तरह से अस्वीकार करें
IOSSecuritySuite.denyDebugger()
एमुलेटर डिटेक्टर मॉड्यूल
let runInEmulator: Bool = IOSSecuritySuite.amIRunInEmulator()
रिवर्स इंजीनियरिंग टूल डिटेक्टर मॉड्यूल
- सबसे सरल विधि True/False लौटाती है यदि आप केवल यह जानना चाहते हैं कि डिवाइस पर रिवर्स इंजीनियरिंग के सबूत हैं
if IOSSecuritySuite.amIReverseEngineered() {
print("इस डिवाइस पर रिवर्स इंजीनियरिंग के सबूत हैं")
} else {
print("इस डिवाइस पर रिवर्स इंजीनियरिंग के सबूत नहीं हैं")
}
- विस्तृत और फ़िल्टरेबल, यदि आप की गई जाँचों की सूची भी चाहते हैं
let reverseStatus = IOSSecuritySuite.amIReverseEngineeredWithFailedChecks()
if reverseStatus.reverseEngineered {
// अधिक जानकारी के लिए reverseStatus.failedChecks देखें
}
सिस्टम प्रॉक्सी डिटेक्टर मॉड्यूल
अब आप यह भी पता लगा सकते हैं कि कोई ऐप VPN से कनेक्ट है या नहीं
let amIProxied: Bool = IOSSecuritySuite.amIProxied(considerVPNConnectionAsProxy: true)
लॉकडाउन मोड डिटेक्टर मॉड्यूल
let amIInLockdownMode: Bool = IOSSecuritySuite.amIInLockdownMode()
प्रायोगिक सुविधाएँ
रनटाइम हुक डिटेक्टर मॉड्यूल
let amIRuntimeHooked: Bool = amIRuntimeHook(dyldWhiteList: dylds, detectionClass: SomeClass.self, selector: #selector(SomeClass.someFunction), isClassMethod: false)
सिंबल हुक अस्वीकृति मॉड्यूल
// यदि हम Swift फ़ंक्शन के सिंबल हुक को अस्वीकार करना चाहते हैं, तो हमें उस फ़ंक्शन का मैंगल्ड नाम पास करना होगा
denySymbolHook("$s10Foundation5NSLogyySS_s7CVarArg_pdtF") // NSLog फ़ंक्शन के लिए हुकिंग अस्वीकार करना
NSLog("Hello Symbol Hook")
denySymbolHook("abort")
abort()
MSHook डिटेक्टर मॉड्यूल
// फ़ंक्शन घोषणा
func someFunction(takes: Int) -> Bool {
return false
}
// FunctionType परिभाषित करना : @convention(thin) एक "पतले" फ़ंक्शन संदर्भ को इंगित करता है, जो बिना किसी विशेष "self" या "context" पैरामीटर के Swift कॉलिंग कन्वेंशन का उपयोग करता है।
typealias FunctionType = @convention(thin) (Int) -> (Bool)
// उस फ़ंक्शन का पॉइंटर पता प्राप्त करना जिसे हम सत्यापित करना चाहते हैं
func getSwiftFunctionAddr(_ function: @escaping FunctionType) -> UnsafeMutableRawPointer {
return unsafeBitCast(function, to: UnsafeMutableRawPointer.self)
}
let funcAddr = getSwiftFunctionAddr(someFunction)
let amIMSHooked = IOSSecuritySuite.amIMSHooked(funcAddr)
MSHook अस्वीकृति मॉड्यूल
// फ़ंक्शन घोषणा
func denyDebugger(value: Int) {
}
// FunctionType परिभाषित करना : @convention(thin) एक "पतले" फ़ंक्शन संदर्भ को इंगित करता है, जो बिना किसी विशेष "self" या "context" पैरामीटर के Swift कॉलिंग कन्वेंशन का उपयोग करता है।
typealias FunctionType = @convention(thin) (Int)->()
// मूल फ़ंक्शन का पता प्राप्त करना
let funcDenyDebugger: FunctionType = denyDebugger
let funcAddr = unsafeBitCast(funcDenyDebugger, to: UnsafeMutableRawPointer.self)
if let originalDenyDebugger = denyMSHook(funcAddr) {
// मूल फ़ंक्शन को 1337 Int आर्गुमेंट के साथ कॉल करें
unsafeBitCast(originalDenyDebugger, to: FunctionType.self)(1337)
} else {
denyDebugger()
}
फ़ाइल अखंडता सत्यापनकर्ता मॉड्यूल
// निर्धारित करें कि एप्लिकेशन के साथ छेड़छाड़ की गई है या नहीं
if IOSSecuritySuite.amITampered([.bundleID("biz.securing.FrameworkClientApp"),
.mobileProvision("2976c70b56e9ae1e2c8e8b231bf6b0cff12bbbd0a593f21846d9a004dd181be3"),
.machO("IOSSecuritySuite", "6d8d460b9a4ee6c0f378e30f137cebaf2ce12bf31a2eef3729c36889158aa7fc")]).result {
print("मेरे साथ छेड़छाड़ की गई है।")
}
else {
print("मेरे साथ छेड़छाड़ नहीं की गई है।")
}
// लोड की गई dylib के SHA256 हैश मान को मैन्युअल रूप से सत्यापित करें
if let hashValue = IOSSecuritySuite.getMachOFileHashValue(.custom("IOSSecuritySuite")), hashValue == "6d8d460b9a4ee6c0f378e30f137cebaf2ce12bf31a2eef3729c36889158aa7fc" {
print("मेरे साथ छेड़छाड़ नहीं की गई है।")
}
else {
print("मेरे साथ छेड़छाड़ की गई है।")
}
// मुख्य निष्पादन योग्य का SHA256 हैश मान जांचें
// सुझाव: आपका एप्लिकेशन यह मान सर्वर से प्राप्त कर सकता है
if let hashValue = IOSSecuritySuite.getMachOFileHashValue(.default), hashValue == "your-application-executable-hash-value" {
print("मेरे साथ छेड़छाड़ नहीं की गई है।")
}
else {
print("मेरे साथ छेड़छाड़ की गई है।")
}
ब्रेकपॉइंट डिटेक्शन मॉड्यूल
func denyDebugger() {
// यहाँ ब्रेकपॉइंट सेट करें
}
typealias FunctionType = @convention(thin) ()->()
let func_denyDebugger: FunctionType = denyDebugger // `: FunctionType` अनिवार्य है
let func_addr = unsafeBitCast(func_denyDebugger, to: UnsafeMutableRawPointer.self)
let hasBreakpoint = IOSSecuritySuite.hasBreakpointAt(func_addr, functionSize: nil)
if hasBreakpoint {
print("निर्दिष्ट फ़ंक्शन में ब्रेकपॉइंट पाया गया")
} else {
print("निर्दिष्ट फ़ंक्शन में ब्रेकपॉइंट नहीं पाया गया")
}
वॉचपॉइंट डिटेक्शन मॉड्यूल
// testWatchpoint फ़ंक्शन पर एक ब्रेकपॉइंट सेट करें
func testWatchpoint() -> Bool{
// lldb: watchpoint set expression ptr
var ptr = malloc(9)
// lldb: watchpoint set variable count
var count = 3
return IOSSecuritySuite.hasWatchpoint()
}
सुरक्षा संबंधी विचार
इस और अन्य प्लेटफ़ॉर्म सुरक्षा जाँचकों का उपयोग करने से पहले, आपको यह समझना होगा कि:
- अपने प्रोजेक्ट में इस टूल को शामिल करना ही एकमात्र चीज़ नहीं है जो आपको अपनी ऐप सुरक्षा सुधारने के लिए करनी चाहिए! आप एक सामान्य मोबाइल सुरक्षा श्वेतपत्र यहाँ पढ़ सकते हैं।
- डिवाइस जेलब्रोकन है या नहीं यह पता लगाना डिवाइस पर स्थानीय रूप से किया जाता है। इसका मतलब है कि प्रत्येक जेलब्रेक डिटेक्टर को बायपास किया जा सकता है (यह भी)!
- Swift कोड को Objective-C की तुलना में गतिशील रूप से हेरफेर करना अधिक कठिन माना जाता है। चूँकि यह लाइब्रेरी शुद्ध Swift में लिखी गई है, IOSSecuritySuite विधियाँ Objective-C रनटाइम के लिए उजागर नहीं होनी चाहिए (जो इसे बायपास करना अधिक कठिन बनाता है ✅)। आपको यह जानना होगा कि हमलावर अभी भी MSHookFunction/MSFindSymbol Swift प्रतीकों को हुक कर सकता है और Swift कोड निष्पादन प्रवाह को गतिशील रूप से बदल सकता है।
योगदान ❤️
हाँ, कृपया! यदि आपके पास कोई बेहतर विचार है या आप इस प्रोजेक्ट को सुधारना चाहते हैं, तो कृपया मुझे Twitter या LinkedIn पर संदेश भेजें। पुल रिक्वेस्ट का स्वागत है!
विशेष धन्यवाद: 👏🏻
- kubajakowski ने
canOpenURL(_:)विधि के साथ समस्या को इंगित करने के लिए - olbartek कोड समीक्षा और पुल रिक्वेस्ट के लिए
- benbahrenburg विभिन्न ISS सुधारों के लिए
- fotiDim जाँचने के लिए नए फ़ाइल पथ जोड़ने के लिए
- gcharita Swift Package Manager समर्थन जोड़ने के लिए
- rynaardb
amIJailbrokenWithFailedChecks()विधि बनाने के लिए - undeaDD विभिन्न ISS सुधारों के लिए
- fnxpt एकाधिक JB डिटेक्शन जोड़ने के लिए
- TannerJin MSHook, RuntimeHook, SymbolHook और Watchpoint Detection मॉड्यूल के लिए
- NikoXu फ़ाइल अखंडता मॉड्यूल जोड़ने के लिए
- hellpf हैंगिंग सॉकेट समस्या को ठीक करने के लिए
- Ant-tree हुकिंग प्रतिरोध में सुधार करने के लिए
- izmcm
amIReverseEngineeredWithFailedChecks()विधि को लागू करने के लिए - sanu नए फ़ाइल जाँच प्रदान करने के लिए
- marsepu नए सुधारों के साथ एक अच्छी तरह से किए गए PR के लिए
- mkj-is ISS प्रदर्शन में सुधार करने वाले PR के लिए 🚄
- LongXiangGuo गोपनीयता मैनिफेस्ट जोड़ने वाले PR के लिए
- Coeur ISS सुधार और बग फिक्स के लिए
- Adobels ISS को Apple की नई आवश्यकताओं के अनुसार समायोजित करने के लिए
TODO
- Installer5 और Zebra Package Manager डिटेक्शन पर शोध (Cydia विकल्प)
- Dopamine hidejb डिटेक्टर
लाइसेंस
LICENSE फ़ाइल देखें।
संदर्भ
इस टूल को बनाते समय मैंने उपयोग किया:
- 🔗 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" David Thiel द्वारा