Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
IOSSecuritySuite — Библиотека Swift для безопасности платформы iOS и защиты от взлома | Kitploit
Инструменты/GitHubGitHub/securing/iossecuritysuite
Безопасность iOSОбратная инженерияМобильная безопасностьОбучение и Образование
GitHubsecuring/iossecuritysuite

IOSSecuritySuite

Библиотека Swift для безопасности платформы iOS и защиты от взлома

Репозиторий
2.7k3441102 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Сайт
Поделиться
## ⭐️ Хотите стать сертифицированным инженером по безопасности iOS-приложений? ⭐️

Ознакомьтесь с нашим практическим и полностью онлайн-курсом: [https://courses.securing.pl/courses/iase](https://courses.securing.pl/courses/iase?utm_source=githubiosss&utm_medium=githubiosss&utm_campaign=githubiosss&utm_id=githubiosss)

![iASE logo](https://assets.kitploit.com/production/public/readmes/5249/32a5ed83a074890e108696e8d409a60131045c9fb4fbaeec742c8a5cc505ddb3.png)

## Описание ISS

![ISS logo](https://assets.kitploit.com/production/public/readmes/5249/f1509c19032617bb06212f44e6b353e12a142811dcecdc783b8e266836f1ed72.png)
### by [@_r3ggi](https://twitter.com/_r3ggi)

🌏 iOS Security Suite — это продвинутая и простая в использовании библиотека для обеспечения безопасности платформы и защиты от взлома, написанная на чистом Swift! Если вы разрабатываете приложения для iOS и хотите защитить их в соответствии со стандартом OWASP [MASVS](https://github.com/OWASP/owasp-masvs), глава v8, эта библиотека может сэкономить вам много времени. 🚀

Что обнаруживает ISS:

* Jailbreak 🧨
* Подключённый отладчик 👨🏻‍🚀
* Запуск приложения в эмуляторе 👽
* Популярные инструменты для реверс-инжиниринга, запущенные на устройстве 🔭

## Установка
Есть 4 способа начать использовать IOSSecuritySuite

### 1. Добавление исходников
Добавьте файлы `IOSSecuritySuite/*.swift` в ваш проект

### 2. Установка через CocoaPods
`pod 'IOSSecuritySuite'`

### 3. Установка через Carthage
`github "securing/IOSSecuritySuite"`

### 4. Установка через Swift Package Manager
```swift
.package(url: "https://github.com/securing/IOSSecuritySuite.git", from: "1.5.0")
```

### Обновление Info.plist
После добавления ISS в проект вам также потребуется обновить ваш основной Info.plist. В модуле обнаружения jailbreak используется метод ```canOpenURL(_:)```, [требующий](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl) указания URL, которые будут проверяться.

```xml
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>undecimus</string>
    <string>sileo</string>
    <string>zbra</string>
    <string>filza</string>
</array>
```

### Ценообразование

Ознакомьтесь с нашей лицензией EULA для подробной информации.

Кратко:
Если в вашей компании работает:
* 0-99 человек — **бесплатно**
* 100-1000 — 3 000 евро/год
* 1000+ — 10 000 евро/год

Если вы хотите продавать модуль, использующий iOS Security Suite (но не используемый непосредственно в вашем приложении) — 10 000 евро/год

### Примечание

iOS Security Suite предназначен для использования на iOS/iPadOS. Его не следует использовать на Mac с Apple Silicon.

## Как использовать

### Модуль обнаружения jailbreak

* **Простейший метод** возвращает True/False, если вы просто хотите узнать, взломано устройство или нет

```Swift
if IOSSecuritySuite.amIJailbroken() {
	print("This device is jailbroken")
} else {
	print("This device is not jailbroken")
}
```

* **Подробный**, если вы также хотите узнать, какие признаки были обнаружены

```Swift
let jailbreakStatus = IOSSecuritySuite.amIJailbrokenWithFailMessage()
if jailbreakStatus.jailbroken {
	print("This device is jailbroken")
	print("Because: \(jailbreakStatus.failMessage)")
} else {
	print("This device is not jailbroken")
}
```
Параметр failMessage — это строка, содержащая признаки, разделённые запятыми, как показано в примере ниже:
`sileo:// URL scheme detected, Suspicious file exists: /Library/MobileSubstrate/MobileSubstrate.dylib, Fork was able to create a new process`

* **Подробный и фильтруемый**, если вы также хотите, например, идентифицировать устройства, которые были взломаны в прошлом, но сейчас находятся в защищённом состоянии

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

### Модуль обнаружения отладчика
```Swift
let amIDebugged: Bool = IOSSecuritySuite.amIDebugged()
```

### Запретить отладчик полностью
```Swift
IOSSecuritySuite.denyDebugger()
```

### Модуль обнаружения эмулятора
```Swift
let runInEmulator: Bool = IOSSecuritySuite.amIRunInEmulator()
```

### Модуль обнаружения инструментов реверс-инжиниринга

* **Простейший метод** возвращает True/False, если вы просто хотите узнать, есть ли на устройстве признаки реверс-инжиниринга

```Swift
if IOSSecuritySuite.amIReverseEngineered() {
  print("This device has evidence of reverse engineering")
} else {
  print("This device hasn't evidence of reverse engineering")
}
```

* **Подробный и фильтруемый**, если вы также хотите получить список выполненных проверок

```Swift
let reverseStatus = IOSSecuritySuite.amIReverseEngineeredWithFailedChecks()
if reverseStatus.reverseEngineered {
   // check for reverseStatus.failedChecks for more details
}
```

### Модуль обнаружения системного прокси

Теперь вы также можете определить, подключено ли приложение к VPN
```Swift
let amIProxied: Bool = IOSSecuritySuite.amIProxied(considerVPNConnectionAsProxy: true)
```

### Модуль обнаружения режима блокировки
```Swift
let amIInLockdownMode: Bool = IOSSecuritySuite.amIInLockdownMode()
```

## Экспериментальные функции

### Модуль обнаружения перехвата во время выполнения
```Swift
let amIRuntimeHooked: Bool = amIRuntimeHook(dyldWhiteList: dylds, detectionClass: SomeClass.self, selector: #selector(SomeClass.someFunction), isClassMethod: false)
```

### Модуль запрета перехвата символов
```Swift
// 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()
```

### Модуль обнаружения MSHook
```Swift
// 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)
```

### Модуль запрета MSHook
```Swift
// 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()
 }
```

### Модуль проверки целостности файлов

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

### Модуль обнаружения точек останова

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

### Модуль обнаружения точек наблюдения

```Swift
// 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()
}
```

## Соображения безопасности

Прежде чем использовать это и другие средства проверки безопасности платформы, вы должны понимать:

* Включение этого инструмента в ваш проект — не единственное, что нужно сделать для повышения безопасности приложения! Вы можете прочитать общее руководство по мобильной безопасности [здесь](https://www.securing.biz/en/mobile-application-security-best-practices/index.html).
* Обнаружение джейлбрейка производится локально на устройстве. Это означает, что любой детектор джейлбрейка может быть обойдён (даже этот)!
* Считается, что код на Swift труднее динамически модифицировать, чем на Objective-C. Поскольку эта библиотека написана на чистом Swift, методы IOSSecuritySuite не должны быть доступны среде выполнения Objective-C (что затрудняет их обход ✅). Вы должны знать, что злоумышленник всё ещё может использовать MSHookFunction/MSFindSymbol для перехвата символов Swift и динамически изменять поток выполнения кода Swift.

## Вклад ❤️
Да, пожалуйста! Если у вас есть идея получше или вы просто хотите улучшить этот проект, напишите мне в [Twitter](https://twitter.com/_r3ggi) или [LinkedIn](https://www.linkedin.com/in/wojciech-regula/). Pull request'ы приветствуются!

### Особая благодарность: 👏🏻

* [kubajakowski](https://github.com/kubajakowski) за указание проблемы с методом ```canOpenURL(_:)```
* [olbartek](https://github.com/olbartek) за ревью кода и pull request 
* [benbahrenburg](https://github.com/benbahrenburg) за различные улучшения ISS
* [fotiDim](https://github.com/fotiDim) за добавление новых путей к файлам для проверки
* [gcharita](https://github.com/gcharita) за добавление поддержки Swift Package Manager
* [rynaardb](https://github.com/rynaardb) за создание метода `amIJailbrokenWithFailedChecks()`
* [undeaDD](https://github.com/undeaDD) за различные улучшения ISS
* [fnxpt](https://github.com/fnxpt) за добавление множества детекций JB
* [TannerJin](https://github.com/TannerJin) за модули обнаружения MSHook, RuntimeHook, SymbolHook и Watchpoint
* [NikoXu](https://github.com/NikoXu) за добавление модуля целостности файлов
* [hellpf](https://github.com/hellpf) за исправление проблемы с висящим сокетом
* [Ant-tree](https://github.com/Ant-tree) за улучшение устойчивости к перехвату
* [izmcm](https://github.com/izmcm) за реализацию метода `amIReverseEngineeredWithFailedChecks()`
* [sanu](https://github.com/sanu) за предоставление новых проверок файлов
* [marsepu](https://github.com/marsepu) за качественно выполненный PR с новыми улучшениями
* [mkj-is](https://github.com/mkj-is) за PR, улучшающий производительность ISS 🚄
* [LongXiangGuo](https://github.com/LongXiangGuo) за PR с добавлением манифеста конфиденциальности
* [Coeur](https://github.com/Coeur) за улучшения ISS и исправления ошибок
* [Adobels](https://github.com/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" by David Thiel
Скачать инструмент