Как найти спрятанную информацию

Привет, Хабр!

Многим из вас я уже знаком по предыдущим статьям. Меня зовут Юрий Шабалин. Мы вместе с командой разрабатываем платформу анализа защищенности мобильных приложений. Сегодня я расскажу о том, на что обратить внимание при поиске и анализе чувствительной информации в приложении, как ее искать, и немного о том, как ее можно правильно хранить.

Статья может быть полезна тем, кто занимается анализом защищенности приложений (подскажет, как улучшить качество и полноту проверок, например) а также разработчикам, заинтересованным в правильном хранении данных и в безопасности в целом.

Надеюсь, что каждый найдет для себя здесь что-то познавательное и интересное.

Оглавление

  • Введение

  • Поиск чувствительной информации

  • Расширение поиска

  • Как хранить

    • Создание ключа

    • PBKDF2

    • Режимы и вектор инициализации

    • Дополнение (Padding)

    • Операции шифрования и дешифрования

      • Encrypt

      • Decrypt

  • Заключение

  • Ссылки

Введение

Изначально, когда мы разрабатывали продукт для своих целей ежедневного анализа различных мобильных приложений, мы в первую очередь автоматизировали то, что занимало наибольшее количество времени. Речь про поиск различной чувствительной информации*, которую хранит или обрабатывает приложение. Это может быть все, что угодно, – аутентификационные данные (пароли, cookie и т.д.), персональные сведения (номер телефона, ФИО, паспортные/контактные данные), сессионный идентификатор, который вернула серверная часть приложения, различные токены от сторонних сервисов и т.д.

* Под термином чувствительная информация (чувствительные данные) подразумевается любая информация, которая может позволить злоумышленнику выстроить вектор атаки на пользователя.

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

Поиск чувствительной информации

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

  • Файлы приложения, которых может быть очень много. Современные платформы активно используют мобильное устройство для хранения, чтобы в дальнейшем работать быстрее;

  • Базы данных. Это частный случай файлов приложения, но проводить поиск там нужно по совершенно другому принципу;

  • Системный журнал. Нужно быть уверенными в том, что в него ничего не попадает, даже учитывая, что читать его может лишь ограниченное количество приложений;

  • Сетевая активность. Надо смотреть, какие данные ходят между приложением и серверной частью и выявлять чувствительную информацию, которая потенциально может быть интересна злоумышленникам;

  • Межпроцессное взаимодействие. Необходимо проверять, как приложение общается с внешним миром, какие есть доступные извне компоненты, что туда приходит и что приложение отправляет в другие приложения/сервисы;

  • Deeplink и Applink, как частный случай межпроцессного взаимодействия;

  • Код и ресурсы приложения – декомпилированный / дизассемблированный код приложения, в нем надо искать различные оставленные секреты.

Если суммировать все эти данные, то получится достаточно большой объем. А ведь вся информация представлена в различных форматах, каждый из которых нужно правильно анализировать. Возьмем хотя бы тот же plist формат. Если искать в нем данные классическим способом, просто по ключевым словам (например, по слову key, как это обычно и делается), то можно получить достаточно большое количество срабатываний, не относящихся к чувствительной информации, и утонуть в их разборе. При этом очень легко потерять из вида что-то важное.

Но основной интерес представляет собой даже не сам первоначальный поиск данных, который вполне понятен и очевиден, а валидация того, что они больше нигде не хранятся. Например, мы выяснили, что после аутентификации сервер прислал нам значение Cookie, которое используется дальше в приложении. И нам желательно удостовериться, что значение этого идентификатора нигде в данных не встречается в открытом виде. И тут начинается процесс, который далеко не всегда проводят при анализе, а именно нужно повторно искать эту информацию по всем собранным данным.

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

В одном из приложений значение pin-кода, который задавал пользователь, хранилось локально внутри песочницы приложения в виде хэша SHA512. Хоть это и не хранение в открытом виде, но алгоритм хэширования применялся к пятизначному пинкоду из цифр без использования соли. Если поискать в Google значение этого хэша, то оно будет в первых результатах. То есть, с одной стороны, это хранение не в открытом виде, но, с другой стороны, оно небезопасно. Формально прикрыли информацию, чтобы не сильно заметно было.

После анализа нескольких приложений, которые подобным образом хранили чувствительную информацию пользователя, не могу не посоветовать искать не только исходную информацию, но и производные от неё. Условно, процесс поиска таких данных можно проводить в несколько этапов:

  1. После первичного анализа всех собранных данных определяется чувствительная информация, которая обрабатывается или хранится в приложении;

  2. От каждого срабатывания из этого списка чувствительных данных высчитываются производные в виде md5, sha1, sha256, sha512, base64 и других;

  3. После этого необходимо снова пройтись по всем собранным данным и повторно поискать, не встречается ли где-то значение чувствительной информации и производные от нее.

Таким образом, если где-то засветится чувствительная информация или ее производная, можно будет это отловить и показать, откуда и на основе чего появился этот дефект.

В качестве иллюстрации к примеру с pin-кодом пользователя – найденный pin в сетевом запросе к серверу при первой аутентификации пользователя:

Найденное значение pin-кода в трафике приложения

Найденное значение pin-кода в трафике приложения

И после повторного поиска производной от этого значения, видно, что это оно было сохранено в виде sha512 во внутренней директории приложения:

Найденный хэш от значения чувствительной информации

Найденный хэш от значения чувствительной информации

Такой подход позволит обнаруживать более сложные цепочки и закономерности в хранении и использовании данных в приложении и поспособствует выявлению интересных уязвимостей во время анализа. А еще эти данные можно применять и дальше при анализе бизнес-логики и тестировании других уязвимостей.

Еще один хороший пример того, как может помочь поиск повторной информации. В анализируемом приложении использовалась зашифрованная при помощи популярной библиотеки SQLChipher база данных. Так как процесс создания или открытия такой базы давно известен, можно перехватить его в Runtime и посмотреть на значение пароля:

Полученный пароль от зашифрованной базы данных

Полученный пароль от зашифрованной базы данных

Что с этой информацией делать дальше? Все очень просто. Если приложение использует пароль для шифрования базы, он должен где-то храниться. Дальше необходимо во всех данных приложения попробовать обнаружить его значение (и его производные):

Найденный пароль от базы данных в исходном коде

Найденный пароль от базы данных в исходном коде

В этом случае нам сильно повезло – можно было обойтись банальным изучением исходников. Но вообще, используемое значение пароля может быть спрятано где-то намного глубже и интереснее. И тогда подход с повторным поиском может очень пригодиться. То есть мы сразу получим целую цепочку, полностью характеризующую уязвимость и вектор атаки: приложение использует зашифрованную базу данных, применяется определенный пароль для шифрования, пароль хранится в исходниках. Такой процесс актуален для абсолютно любой информации, которая была определена, как чувствительная.

Еще один пример связан с поиском значений сессионных идентификаторов. В нескольких приложениях, когда пользователь аутентифицировался, значение сессионных идентификаторов через стороннюю библиотеку попадало в системный журнал (или сохранялось в кэшированных сетевых запросах в файловой системе). Обычным поиском по ключевым словам такого не найти, но благодаря механизму повторного поиска это становится возможным.

Так что не забывайте об анализе собранных во время анализа данных, и делайте это в несколько проходов, чтобы ничего не упустить.

Расширение поиска

После поиска чувствительной информации, её дальнейшего повторного анализа вместе с производными, можно копнуть еще немного глубже (или в сторону). А именно понять, как определить огромное количество различных форматов и вариаций сессионных заголовков, различные форматы и типы ключей шифрования, которые могут быть оставлены в коде или ресурсах приложений. Также возможно, что они пришли во время сетевого взаимодействия или из других мест, и всё это наталкивает на мысль об энтропийном анализе информации.

В прошлой статье я уже упоминал про репозиторий, который умеет определять последовательность символов, не похожую на обычные слова – Gibberish Detector. Это простая модель, основанная на цепи Маркова. Суть ее в том, что, обучаясь на произвольном тексте на английском языке, модель понимает, с какой частой буквы обычно следуют друг за другом, и на этом основании анализирует входные данные (то есть то, насколько часто встречается такая же последовательность букв) и определяет, является ли входная строка словом или случайным набором символов.

Для удобства ее применения существует репозиторий, реализующий функционал этой модели в виде библиотеки для Python. По факту, все, что нужно сделать – это получить интересующие нас строки (к примеру, можно взять все строки длиннее 16 символов) и отправить на вход обученной модели. На выходе мы получим некоторое значение, которое чем больше, тем более вероятно, что это не слова, а некоторая случайная последовательность символов. И вот на них стоит обратить внимание, поскольку нередко они оказываются хэшированными значениями интересных данных, а то и просто значением токенов или ключей.

Второй вариант без использования моделей основан на вычислении энтропии Шэннона (также известной как информационная энтропия) для каждого фрагмента текста более длиной более тех же 16-ти символов (или любого другого количества). Алгоритм, как именно вычислять это значение, можно найти в интересной статье, ну а реализацию – в одном из инструментов под названием TruffleHog. Он позволяет искать секреты в репозиториях с исходным кодом вплоть до конкретного коммита, когда и кем это значение было добавлено. Так что, если вы анализируете приложения с доступным вам исходным кодом, рекомендую задуматься о постоянном использовании данного инструмента.

Такие срабатывания достаточно часто оказываются ложными и их приходится дополнительно фильтровать и обрабатывать, но иногда там можно найти действительно интересные вещи, которые можно пропустить во время первоначального анализа.

Как хранить

Одна из традиционных рубрик моих статей – “Как все сделать правильно” 🙂 В прошлых материалах мы рассматривали несколько вариантов хранения чувствительной информации с применением шифрования для Android, генерацию и хранение ключей в Security Enclave и Android KeyStore. А сейчас посмотрим, как это можно реализовать с применением алгоритма расширения ключа, то есть с получением надежного ключа шифрования из информации, которую предоставил пользователь (например, пароль). И в этот раз будут примеры для iOS.

Параллельно с разбором процесса создания ключа на основе пароля и шифрованием на нем данных пользователя, я постараюсь немного рассказать про термины, используемые в криптографии. Если к этой теме будет интерес, я подготовлю и выпущу статью с описанием основ криптографии простыми словами. О том, что необходимо знать, чтобы не делать простых ошибок и понимать описываемое в том или ином репозитории с примерами или библиотеками по использованию криптографии.

Но прежде, чем приступить к коду и шифрованию, еще раз подчеркну, что я не разработчик. Поэтому не надо пробовать слепо копировать то, что здесь написано (и вообще так лучше никогда не делать). Постарайтесь использовать это как материал, позволяющий структурировать информацию и найти отправную точку для собственной безопасной реализации.

Создание ключа

Очень распространенной ошибкой при использовании любого шифрования является применение пароля в качестве ключа. Что делать, если пользователь выберет очень простой или предсказуемый пароль? Как заставить его применить для шифрования ключ, который был бы случайным и достаточно сильным (имел бы достаточную энтропию)? Что делать, если пользователь затем запомнит его и будет вводить каждый раз для входа в приложение или на устройство?

Решением является применение алгоритмов усиления ключа (Key Stretching). Это позволяет получить ключ шифрования из достаточно простого пароля, применяя к нему несколько раз функцию хеширования вместе с солью. Соль – это некая последовательность случайных данных. Распространенной ошибкой является исключение соли из алгоритма. Соль дает ключу намного большую энтропию. Без неё намного проще получить/восстановить/подобрать ключ. Тем более, без использования соли два одинаковых пароля будут иметь одинаковое значение хэша и, соответственно, одинаковое окончательное значение ключа шифрования.

Еще одна ошибка – применять предсказуемый генератор случайных чисел при создании соли. Примером может служить функция rand() в C, к которой можно получить доступ из Swift или Objective-C. Результат данной функции может оказаться очень предсказуемым. Чтобы создать достаточно случайную соль, рекомендуется применять функцию SecRandomCopyBytes для генерации криптографически безопасной последовательности случайных чисел.

Чтобы использовать код из приведенного далее примера, нужно добавить следующую строку в заголовки:

#import <CommonCrypto/CommonCrypto.h>

Ниже приведен код, создающий соль:

var salt = Data(count: 8)
salt.withUnsafeMutableBytes { (saltBytes: UnsafeMutablePointer<UInt8>) -> Void in
    let saltStatus = SecRandomCopyBytes(kSecRandomDefault, salt.count, saltBytes)
    //...

Дальше по тексту мы будем понемногу дополнять этот код, приводя его к законченному виду.

PBKDF2

Теперь приступим к процедуре усиления ключа. Выполнять то, что нам нужно, позволит функция определения ключа на основе пароля (PBKDF2 – Password-Based Key Derivation Function):

  • PBKDF2 выполняет функцию усиления в несколько итераций для получения ключа. Обычно это около 10 тысяч итераций;

  • Рост количества итераций увеличивает время, необходимое для успешной атаки с использованием полного перебора (brute force).

var setupSuccess = true
var key = Data(repeating:0, count:kCCKeySizeAES256)
var salt = Data(count: 8)
salt.withUnsafeMutableBytes { (saltBytes: UnsafeMutablePointer<UInt8>) -> Void in
    let saltStatus = SecRandomCopyBytes(kSecRandomDefault, salt.count, saltBytes)
    if saltStatus == errSecSuccess
    {
        let passwordData = password.data(using:String.Encoding.utf8)!
        key.withUnsafeMutableBytes { (keyBytes : UnsafeMutablePointer<UInt8>) in
            let derivationStatus = CCKeyDerivationPBKDF(
										CCPBKDFAlgorithm(kCCPBKDF2),
										password, 
										passwordData.count, 
										saltBytes, 
										salt.count, 
										CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA512),
										14271, 
										keyBytes, 
										key.count)
            if derivationStatus != Int32(kCCSuccess)
            {
                setupSuccess = false
            }
        }
    }
    else
    {
        setupSuccess = false
    }
}

Режимы и вектор инициализации

Блочные алгоритмы шифрования работают с текстом определенной длины. Если изначальное сообщение, которое мы хотим зашифровать, длиннее, чем блок, с которым умеет работать алгоритм, оно просто разделяется на части. Из-за этого при неправильной конфигурации алгоритма могут возникнуть некоторые особенности. Например, если при разделении на блоки текст в них совпадет, то и в зашифрованном виде мы получим одинаковый шифротекст. Как раз для того, чтобы избежать таких ситуаций, используют различные варианты связи блоков между собой:

  • Электронная кодовая книга (Electronic Code Book) – ECB

  • Сцепление блоков (Cipher Block Chaining) – CBC

  • Обратная связь по шифротексту (Cipher Feedback) – CFB

  • Обратная связь по выходу (Output Feedback) – OFB

  • Режим счетчика (Counter Mode) – CM, CTR

Режим “электронная кодовая книга” (ECB) – самый простой вариант, при котором все блоки шифруются независимо друг от друга.

 Режим “электронная кодовая книга” (ECB)

Режим “электронная кодовая книга” (ECB)

Как раз именно в этом случае блоки друг от друга не зависят и шифруются отдельно. Это применяется по умолчанию. Если мы при настройке шифрования просто укажем AES без каких-либо дополнительных параметров, то именно такой вариант и будет использован. По этой причине настоятельно рекомендуется явно указывать режим связи блоков между собой.

Режим сцепления блоков шифротекста — один из режимов шифрования для симметричного шифра с использованием механизма обратной связи. Это означает, что при шифровании все блоки связываются между собой и зависят друг от друга. Такой подход позволяет избежать повторения информации в одинаковых блоках.

Режим сцепления блоков (CBC)

Режим сцепления блоков (CBC)

Именно его в основном и рекомендуется использовать. Остальные варианты мы рассматривать не будем, так как они отличаются между собой только способом связывания блоков, а для нас это в целом не имеет значения. Главное – понять отличие ECB от остальных способов.

Но существует еще одна проблема – первый блок в любом из режимов остается одинаковым. Если сообщение, которое нужно зашифровать, начинается так же, как и другое зашифрованное сообщение, начальный зашифрованный текст (первый блок) будет одинаковым в обоих случаях. Это даст злоумышленнику понимание того, что текст в этих блоках совпадает. 

Для того, чтобы избежать подобных проблем, вводится понятие вектора инициализации (IV). 

Initialization vector (IV) — вектор инициализации, представляющий собой произвольное число, которое может применяться вместе с ключом для шифрования данных. Использование IV предотвращает повторение шифрования данных в первом блоке.

Для генерации вектора инициализации рекомендуется использовать функцию SecRandomCopyBytes:

var iv = Data.init(count: kCCBlockSizeAES128)
iv.withUnsafeMutableBytes { (ivBytes : UnsafeMutablePointer<UInt8>) in
    let ivStatus = SecRandomCopyBytes(kSecRandomDefault, kCCBlockSizeAES128, ivBytes)
    if ivStatus != errSecSuccess
    {
        setupSuccess = false
    }
}

Дополнение (Padding)

Блочные алгоритмы шифрования работают с сообщениями открытого текста, длина которых должна быть кратна длине одного блока. Если это свойство не выполняется, то к сообщению необходимо добавить необходимое количество битов, называемых дополнением (Padding).

Этот параметр указывает, каким именно способом необходимо провести дополнение блока меньшей длины. Существуют различные варианты, но предпочтительным методом дополнения блоков шифротекста является PKCS7. В нем значение каждого дополняемого байта устанавливается равным количеству дополняемых байтов. Так, если мы имеем блок из 12 символов, он будет дополнен четырьмя байтами [04, 04, 04, 04] до стандартного размера блока в 16 байт. Если блок имеет размер в 15 байт, он будет дополнен одним байтом [01]. Если блок имеет размер ровно в 16 байт, мы добавляем новый блок состоящий из [16]*16.

Я попытался разобраться, почему рекомендуют использовать именно этот метод, а не остальные, но мои поиски не увенчались успехом. Некоторые мои коллеги рекомендуют вообще не применять дополнение из-за атаки Padding Oracle (вот, кстати, отличнейший перевод статьи про эту атаку). Так что вопрос для меня пока еще открытый, использовать дополнение или нет.

Операции шифрования и дешифрования

Наконец-то мы добрались до самого интересного! Пора связать все вместе, провести операции усиления пароля, шифрования и расшифровки. Поскольку используем алгоритм усиления ключа, нам нет необходимости его где-то хранить. Каждый раз, когда в нем возникнет необходимость, мы будем задействовать данные пользователя для его генерации. Один из вариантов пришел мне в голову прямо во время написания этой статьи. Можно сохранить случайно сгенерированное значение в Keychain (обязательно с правильными ключами доступа), защитив его с использованием биометрии. Таким образом, доступ к значению будет осуществлен только после подтверждения пользователем биометрических данных. Полученное значение следует передавать на вход в функцию PBKDF2 для генерации ключа. В результате, пользователю не нужно будет каждый раз вводить пароль/пин. Достаточно будет предоставить отпечаток пальца или лицо. Схема, конечно, со своими недостатками, но вполне неплохая. Хотя, таким же образом можно и просто использовать Security Enclave.

Для шифрования и дешифрования используем функцию CCCrypt с помощью kCCEncrypt или kCCDecrypt. Поскольку применяется блочный шифр, необходимо дополнить сообщение, если оно не соответствует кратности размера блока. Используя параметр KCCOptionPKCS7Padding, определяем тип дополнения, как PKCS7:

Encrypt

class func encryptData(_ clearTextData : Data, withPassword password : String) -> Dictionary<String, Data>
{
    var setupSuccess = true
    var outDictionary = Dictionary<String, Data>.init()
    var key = Data(repeating:0, count:kCCKeySizeAES256)
    var salt = Data(count: 8)
    salt.withUnsafeMutableBytes { (saltBytes: UnsafeMutablePointer<UInt8>) -> Void in
        let saltStatus = SecRandomCopyBytes(kSecRandomDefault, salt.count, saltBytes)
        if saltStatus == errSecSuccess
        {
            let passwordData = password.data(using:String.Encoding.utf8)!
            key.withUnsafeMutableBytes { (keyBytes : UnsafeMutablePointer<UInt8>) in
                let derivationStatus = CCKeyDerivationPBKDF(CCPBKDFAlgorithm(kCCPBKDF2), password, passwordData.count, saltBytes, salt.count, CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA512), 14271, keyBytes, key.count)
                if derivationStatus != Int32(kCCSuccess)
                {
                    setupSuccess = false
                }
            }
        }
        else
        {
            setupSuccess = false
        }
    }
     
    var iv = Data.init(count: kCCBlockSizeAES128)
    iv.withUnsafeMutableBytes { (ivBytes : UnsafeMutablePointer<UInt8>) in
        let ivStatus = SecRandomCopyBytes(kSecRandomDefault, kCCBlockSizeAES128, ivBytes)
        if ivStatus != errSecSuccess
        {
            setupSuccess = false
        }
    }
     
    if (setupSuccess)
    {
        var numberOfBytesEncrypted : size_t = 0
        let size = clearTextData.count + kCCBlockSizeAES128
        var encrypted = Data.init(count: size)
        let cryptStatus = iv.withUnsafeBytes {ivBytes in
            encrypted.withUnsafeMutableBytes {encryptedBytes in
            clearTextData.withUnsafeBytes {clearTextBytes in
                key.withUnsafeBytes {keyBytes in
                    CCCrypt(CCOperation(kCCEncrypt),
                            CCAlgorithm(kCCAlgorithmAES),
                            CCOptions(kCCOptionPKCS7Padding + kCCModeCBC),
                            keyBytes,
                            key.count,
                            ivBytes,
                            clearTextBytes,
                            clearTextData.count,
                            encryptedBytes,
                            size,
                            &numberOfBytesEncrypted)
                    }
                }
            }
        }
        if cryptStatus == Int32(kCCSuccess)
        {
            encrypted.count = numberOfBytesEncrypted
            outDictionary["EncryptionData"] = encrypted
            outDictionary["EncryptionIV"] = iv
            outDictionary["EncryptionSalt"] = salt
        }
    }
 
    return outDictionary;
}

И, соответственно, функция расшифровки:

Decrypt

class func decryp(fromDictionary dictionary : Dictionary<String, Data>, withPassword password : String) -> Data
{
    var setupSuccess = true
    let encrypted = dictionary["EncryptionData"]
    let iv = dictionary["EncryptionIV"]
    let salt = dictionary["EncryptionSalt"]
    var key = Data(repeating:0, count:kCCKeySizeAES256)
    salt?.withUnsafeBytes { (saltBytes: UnsafePointer<UInt8>) -> Void in
        let passwordData = password.data(using:String.Encoding.utf8)!
        key.withUnsafeMutableBytes { (keyBytes : UnsafeMutablePointer<UInt8>) in
            let derivationStatus = CCKeyDerivationPBKDF(CCPBKDFAlgorithm(kCCPBKDF2), password, passwordData.count, saltBytes, salt!.count, CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA512), 14271, keyBytes, key.count)
            if derivationStatus != Int32(kCCSuccess)
            {
                setupSuccess = false
            }
        }
    }
     
    var decryptSuccess = false
    let size = (encrypted?.count)! + kCCBlockSizeAES128
    var clearTextData = Data.init(count: size)
    if (setupSuccess)
    {
        var numberOfBytesDecrypted : size_t = 0
        let cryptStatus = iv?.withUnsafeBytes {ivBytes in
            clearTextData.withUnsafeMutableBytes {clearTextBytes in
            encrypted?.withUnsafeBytes {encryptedBytes in
                key.withUnsafeBytes {keyBytes in
                    CCCrypt(CCOperation(kCCDecrypt),
                            CCAlgorithm(kCCAlgorithmAES128),
                            CCOptions(kCCOptionPKCS7Padding + kCCModeCBC),
                            keyBytes,
                            key.count,
                            ivBytes,
                            encryptedBytes,
                            (encrypted?.count)!,
                            clearTextBytes,
                            size,
                            &numberOfBytesDecrypted)
                    }
                }
            }
        }
        if cryptStatus! == Int32(kCCSuccess)
        {
            clearTextData.count = numberOfBytesDecrypted
            decryptSuccess = true
        }
    }
     
    return decryptSuccess ? clearTextData : Data.init(count: 0)
}

Для проверки того, что эти функции работают и шифрование/расшифровка проходят корректно, можно воспользоваться простым примером:

class func encryptionTest()
{
    let clearTextData = "some clear text to encrypt".data(using:String.Encoding.utf8)!
    let dictionary = encryptData(clearTextData, withPassword: "123456")
    let decrypted = decryp(fromDictionary: dictionary, withPassword: "123456")
    let decryptedString = String(data: decrypted, encoding: String.Encoding.utf8)
    print("decrypted cleartext result - ", decryptedString ?? "Error: Could not convert data to string")
}

В этом примере мы упаковываем всю необходимую информацию и возвращаем ее в виде словаря, чтобы впоследствии все части могли использоваться для успешного дешифрования данных. Для этого необходимо хранить IV и соль – либо в Keychain, либо на сервере.

Заключение

К данным, которые хранятся и обрабатываются в мобильном приложении, надо относиться с большой осторожностью и вниманием. Во-первых, не стоит забывать, что оно работает на устройстве пользователя, то есть в неблагоприятной для себя среде. Кроме того, мобильное приложение можно рассматривать как еще одну версию Frontend. Мы ведь не храним пароль пользователя в Local Storage браузера (по крайней мере, я очень надеюсь на это). Так почему же мы можем позволить себе делать это в мобильном приложении?

К большому сожалению, как я уже писал в прошлых статьях, проблемы с хранением чувствительной информации пока все еще на первом месте по распространенности. Мы практически каждый день сталкиваемся с новыми и новыми срабатываниями. Своим циклом статей я хотел бы помочь разработчикам и аналитикам безопасности понять, как можно искать такие проблемы, на что стоит обращать внимание, и главное, как это можно попробовать исправить и сделать правильно.

Если в результате прочтения этих статей хотя бы в одном приложении все станет чуть лучше, значит, моё время было потрачено не зря.

Ссылки

  1. SQLCipher

  2. Информационная энтропия

  3. Наиболее распространенные уязвимости в мобильных приложениях

  4. Знай свои секреты. Поиск и автоматическая проверка секретов сторонних сервисов

  5. Key stretching

  6. PBKDF2

  7. Padding (cryptography)

  8. Gibberish Detector

  9. Краткое введение в цепи Маркова

  10. Gibberish Detector Python Module

  11. Scanning data for entropy anomalies

  12. TruffleHog

  13. Padding Oracle Attack или почему криптография пугает

Когда нам нужно найти что-то в Интернете, мы автоматически открываем Google или Bing. Наверное, так устроено наше подсознание, и мы доверяем именно этим системам, которые дают нам искомые результаты. Но допускаем ли мы вероятность того, что информация, которую мы ищем на самом, может быть доступна в «глубокой сети» (Deep Web). Что именно там находятся настоящие ответы на наши запросы?

10 лучших Deep Web-поисковых систем

Наиболее популярные поисковые системы хранят подробные отчеты о наших действиях в Интернете. Если вы не хотите, чтобы Google знал о ваших онлайн-поисках, нужно попытаться сохранить анонимность.

Но как быть с огромными объемами информации, которые хранятся в недрах «глубокой сети» (также известной как «глубокая паутина», «невидимый Интернет» и т. д.). Как получить данные, к которым нет доступа у обычных поисковых систем?

Считается, что объемы контента в «скрытом Интернете» примерно в 50 раз превышают количество информации, доступной в открытых источниках.

«Тайный» контент же остается незамеченным для обычных поисковых систем. Используя поисковик вроде Гугл или Яндекс, вы инициируете общий поиск. Но для подобных систем недоступны личные профили людей с подробным перечнем данных, размещенные на статических веб-сайтах.

Почему Google не работает в Deep Web?

Основная причина, по которой Google не предоставляет пользователям «глубокий» контент, заключается в том, что этот контент не индексируется в обычных поисковых системах. Следовательно, обычные поисковые системы не будут показывать результаты или индексировать такой документ или файл. Его содержимое находится за HTML-формами.

Обычные поисковые системы сканируют файлы, находящиеся в открытом доступе, а поисковые запросы выводятся из взаимосвязанных серверов. Связанные серверы позволяют вам регулярно взаимодействовать с источником информации, но, когда дело доходит до «даркнета», этого не происходит. Все находится за завесой и остается скрытым внутри сети TOR Network, которая обеспечивает безопасность и конфиденциальность.

Только 4 процента интернет-контента видны широкой публике, а остальные 96 процентов скрыты в «глубокой сети».

Теперь рассмотрим, по каким причинам Гугл не обрабатывает эти данные, или почему «скрытый» веб-контент не индексируется. В основном, эта информация либо незаконна, либо носит негативный характер для общества в целом. Среди этого контента в больших количествах содержится порно, пропаганда насилия, употребления наркотиков, закрытая информация военного характера, хакерские программы и т. д.

Исключения для роботов

Файл robot.txt обычно используется для назначения веб-сайту файлов для записи, регистрации и индексации.

«Файлы-исключения для роботов» – это документы настройки параметров веб-сайтов и страниц в Интернете таким образом, чтобы они не индексировались обычными поисковыми системами, использующими автоматический поиск. Таким образом, эти страницы остаются закрытыми от Google и Yahoo.

А теперь рассмотрим несколько поисковиков, заточенных на поиск информации в скрытой части Интернета, и использующих для этого нестандартные принципы и механизмы.

Список лучших поисковых систем для работы с Deep Web

Pipl

Эта система, также, как Google или Yahoo, использует поисковых роботов, но ее боты способны гораздо глубже проникать в недра «невидимого Интернета». Роботы Pipl ищут информацию в самых разных базах данных, способны найти не только личные данные, контакты человека, но и информацию юридического характера, научные исследования и множество различных фактов, недоступных широкому кругу лиц.

10 лучших Deep Web-поисковых систем

Pipl использует расширенные алгоритмы ранжирования и анализ языка, благодаря чему пользователь получает в выдаче варианты, более близкие к его запросу, чем в обычных поисковых системах. Вкупе с расширенной областью поиска возможности системы позволяют найти ответ на, без преувеличения, любой вопрос.

MyLife

Система MyLife предоставляет что-то вроде сводной информации из всех социальных сетей, в которых зарегистрирован каждый конкретный человек. В итоге на каждого пользователя формируется виртуальный профиль-досье, что дает возможность узнать личные данные, профессию, место работы и проживания и т. д. Кроме того, там же можно найти фото, видео, данные о перемещениях человека и другие «следы» его деятельности, если информация о них когда-либо попадала в Интернет.

10 лучших Deep Web-поисковых систем

Учитывая, что почти каждый житель развитых стран имеет личную страничку хотя бы в одной из социальных сетей, на каждого можно найти тот или иной объем информации. Количество таких «портфелей» только в США достигает 200 тысяч.

Yippy

На самом деле Yippy – это система метапоиска (она получает результаты, используя другие веб-ресурсы). Я решил включить Yippy в этот список, поскольку он может взаимодействовать с девайсами, которые используют веб-клиенты, вроде электронной почты, браузерных игр и т. д.

10 лучших Deep Web-поисковых систем

В отличие от Google, этот сервис не хранит личных данных пользователей, благодаря чему они могут не беспокоиться за свою конфиденциальность. Это Metasearch-система, и она зависит от других ресурсов, выдавая показывая результаты на их основе.

Yippy не подойдет для пользователей, привыкших искать информацию через Google, потому что эти системы работают по разному принципу. Например, если вы ищете «марихуану», Yippy выдаст ресурсы, описывающие реальные «эффекты марихуаны», а не страницу Википедии и новостные ленты.

SurfWax

Для того, чтобы работать с SurfWax, на сервис нужно подписаться. У системы есть куча особенностей помимо поиска, не совсем привычного современному пользователю.

10 лучших Deep Web-поисковых систем

Согласно информации с веб-сайта, название SurfWax возникло от того, что «на волнах воск помогает серферам лучше держаться на доске, а для веб-серфинга SurfWax обеспечивает лучший контроль и обработку информации». Поисковые роботы сервиса оптимизируют процесс, что позволяет получить более релевантную выдачу.

Wayback Machine

Wayback Machine предоставляет вам расширенный доступ к информации о URL-адресе. Это интернет-архив, который позволяет пользователям публиковать контент в цифровом виде, выкладывая его в общий доступ – в открытости данных заключается главная цель сервиса. Некоторая часть информации собирается системой автоматически.

10 лучших Deep Web-поисковых систем

Google Scholar

Еще одна поисковая система от интернет-гиганта, работающая, однако, по другому принципу, и имеющая другие цели. Google Scholar помогает пользователям найти ссылки на конкретную обучающую информацию, и интерфейс сервиса рассчитан на более детальный поиск не только по названию, но и по авторам, источникам и т. д.

10 лучших Deep Web-поисковых систем

Например, вбив в поисковик «Психология» и выбрав в качестве источника «Оксфордский университет», пользователь сможет выбрать нужные работы в конкретной области, причем выполненные на базе конкретного научного центра.

DuckDuckGo

Систему DuckDuckGo можно назвать самой честной и «дружелюбной» – она обладает простым интерфейсом, мощными поисковыми роботами, способными «достать» информацию из самых глубин Интернета, но, при этом, никак не отслеживает действия пользователя, не хранит личные данные и обеспечивает полную конфиденциальность.

10 лучших Deep Web-поисковых систем

Вы можете настроить поисковик и даже улучшить его в соответствии с результатами. Поисковая система заточена на качество, а не на количество. Акцент делается на лучших результатах. Система работает более чем с 500 независимыми источниками, включая Google, Yahoo, Bing и все другие популярные поисковые системы.

Fazzle

Еще одна мета-индексная система, доступная на английском, французском и голландском языках. Предназначена для быстрого получения результатов. Элементы запроса включают изображения, документы, видео и, технический документ и многое другое.

10 лучших Deep Web-поисковых систем

Большая часть страниц, выдаваемых поисковиком, могут быть платным промо, тем не менее, Fazzle высоко котируется среди других Deep Web-систем.

Not Evil

«Не злые» поисковые системы, созданные не для получения прибыли, выживают на взносы и пожертвования и, похоже, они получают достойную поддержку. Обладая высокой надежностью в результатах поиска, этот сервис обладает функциональностью, которая является высококонкурентной в сети TOR.

10 лучших Deep Web-поисковых систем

Здесь нет навязчивой рекламы или отслеживания действий пользователя, а благодаря продуманным и постоянно обновляемым алгоритмам поиска легко найти любую информацию. При этом вы можете сэкономить много времени и сохранить полную конфиденциальность.

Этот поисковик ранее назывался TorSearch.

Start Page

Start Page доступна с 2009 года. Это имя было выбрано для того, чтобы людям было проще его запомнить и вбить при необходимости в адресную строку.

Startpage.com и Ixquick.com одинаковы и управляются одной компанией. Это частная поисковая система, обеспечивающая высокий уровень защиты информации.

10 лучших Deep Web-поисковых систем

Это одна из лучших поисковых систем, когда дело доходит до конфиденциальности. В отличие от популярных поисковиков, Startpage.com не записывает ваш IP-адрес и сохраняет вашу историю поиска в секрете.

Когда нам нужно что-то найти, тогда Google или yandex внезапно приходят в голову.

Но Google и Yandex не будут предоставлять всю скрытую информацию, которая обслуживается в Даркнете.

У Google есть возможность отслеживать каждое ваше движение в Интернете во время поиска с помощью Google.

Если вы не хотите, чтобы Google собирал вашу личную информацию и ваши действия в Интернете, вы должны сохранять анонимность в Интернете.

«Дип вэб».

Этот термин, также известный как «невидимая сеть», относится к обширному хранилищу базового контента, например документов в онлайн-базах данных, недоступных сканерам общего назначения.

Поскольку большинство личных профилей, общедоступных записей и других связанных с людьми документов хранятся в базах данных, а не на статических веб-страницах, большая часть высококачественной информации о людях просто «невидима» для обычной поисковой системы.

Содержание

  1. Почему Google не предоставляет результаты поиска в Дип нете?
  2. 1.pipl
  3. 2. My Life
  4. 3. Yippy
  5. 4. Surfwax
  6. 5. Way Back Machine
  7. 6. Google Scholar
  8. 7. DuckDuckgo
  9. 8. Fazzle
  10. 9. not Evil
  11. 10. Start Page
  12. 11. Spokeo

Почему Google не предоставляет результаты поиска в Дип нете?

По сути, секретное содержимое Deep Web или Dark Web не индексируется для предоставления результатов обычными поисковыми системами, такими как Google и Bing.all, на сайтах Deb (.onion) не индексируются.

Google не будет предоставлять результаты поиска, которые не индексируются в глобальной сети.

Содержание скрыто за HTML-формами.

Регулярные поиски, которые вы ищете в Google, и его результаты перенаправляются с взаимосвязанных серверов.

Здесь мы покажем интересные поисковые системы, которые позволяют получить результаты поиска в дип вебе, которые, вероятно, большинство людей не знают.

1.pipl

Система запросов Pipl помогает вам находить веб-страницы, которые невозможно найти в обычных поисковых системах.

В отличие от других поисковых систем, например Google и Bing, pipl предоставляет результаты поиска, полученные из Deep Web.

Роботы Pipl предназначены для взаимодействия с базами данных с возможностью поиска и извлечения фактов, контактных данных и другой соответствующей информации из личных профилей, справочников, научных публикаций, судебных отчетов и многочисленных других источников в Интернете.

Согласно pipl, они используют расширенные алгоритмы языкового анализа и ранжирования, чтобы предоставить вам наиболее релевантные фрагменты информации о человеке на единой, легко читаемой странице результатов.

2. My Life

На общедоступной странице Mylife можно перечислить данные о человеке, включая возраст, прошлые и текущие места жительства, номера телефонов, адреса электронной почты, места работы, инструкции, фотографии, родственников, меньшую, чем ожидалось, историю и отдельный сегмент опроса, который призывает других людей Mylife оценить друг друга.

Вы можете зарегистрироваться на эту услугу и получить изрядное количество информации бесплатно, но за 6,95 долларов США вы можете пользоваться этой услугой в течение месяца и получать полные отчеты и все виды сочной информации.

У Mylife есть «более 225 миллионов публичных страниц с данными практически обо всех в Америке, в возрасте 18 лет и старше».

Согласно MyLife, «открытая страница не может быть стерта», и «только премиум-пользователи могут скрывать контент на своей общедоступной странице и удалять информацию из первого источника.

3. Yippy

Yippy на самом деле Metasearch Engine (он получает свои результаты, используя другие веб-индексы), я включил сюда Yippy, так как он имеет место для входа с устройств, которыми может быть занят веб-клиент, например, таких как электронная почта, игры , видео и тд.

Совсем не так, как в Google, он не хранит вашу историю, не видят термины или электронную почту, что является  более важным моментом, однако традиционная семейная картина благонадежности повлияла на качество поиска.

Поиск [алкоголь] возвращает результаты алкоголиков, анонимных групп, а не, скажем, страницу Википедии о том, что такое алкоголь, например.

Он хорошо подойдет для родителей, чьи дети пользуются ноутбуком.

4. Surfwax

SurfWax поиск доступен как бесплатно, так и на основе подписки.

Поисковый сайт связан с рядом функций, помимо простого поиска.

По словам Surfwax, на волнах, серфовый воск помогает серферам захватывать их доску для серфинга; для веб-серфинга SurfWax помогает вам лучше справляться с информацией – обеспечивает «наилучшее использование» релевантных результатов поиска.

Дизайн / пользовательский интерфейс SurfWax был первым, кто сделал поиск «визуальным процессом», бесшовно интегрируя поиск по смыслу с ключевыми элементами поиска знаний для эффективной связи и отзывов.

5. Way Back Machine

Wayback Machine – это интерфейс для сбора открытых веб-страниц в интернет-архиве.

Он включает в себя более 100 терабайт даты – колоссальное собрание с огромными запасными предпосылками.

Wayback Machine предоставляет доступ к этой информации по URL.

Он недоступен для содержимого – клиент должен знать правильный URL-адрес конкретной веб-страницы или, возможно, веб-сайта, чтобы иметь возможность вести хронику.

Интернет-архив позволяет общественности загружать и скачивать цифровые материалы в свой кластер данных, но большая часть его данных автоматически собирается поисковыми роботами, которые стремятся сохранить как можно большую часть общедоступной сети.

Его веб-архив, Wayback Machine, содержит более 150 миллиардов веб-снимков.

Архив также курирует один из крупнейших в мире проектов оцифровки книг.

6. Google Scholar

Google Scholar позволяет выполнять поиск по широкому кругу научной литературы.

Он опирается на информацию издателей журналов, университетских репозиториев и других веб-сайтов, которые он определил как научные.

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

Как только вы обнаружите эти источники, вам захочется их заполучить.

Вы можете настроить Google Scholar, чтобы разрешить автоматический доступ к подпискам библиотек NCSU на журналы и базы данных.

7. DuckDuckgo

Этот механизм глубокого веб-поиска, который, как и многие другие механизмы глубокого веб-поиска в этом списке, также позволяет осуществлять поиск в обычном Интернете, имеет простой и понятный интерфейс и не отслеживает ваши открытия.

Варианты тем для поиска бесконечны, и вы даже можете настроить его для повышения вашего опыта.

DuckDuckGo делает упор на возвращении лучших результатов, а не большинства результатов, и генерирует эти результаты из более чем 400 отдельных источников, включая ключевые краудсорсинговые сайты, такие как Википедия, и другие поисковые системы, такие как Bing, Yahoo !, Yandex и Yummly.

8. Fazzle

Fazzle.com – это мета-веб-индекс, доступный на английском, французском и голландском языке.

Fazzle просматривает более 120 измененных веб-индексов, чтобы передать «быстрые точные результаты», к которым присоединяется страница просмотра рядом с каждой публикацией.

Пункты запросов Fazzle включают в себя Интернет, файлы для загрузки, изображения, видео, аудио, желтые страницы, белые страницы, покупки и новости.

Совсем не так, как большая часть более известных мета-веб-индексов, результаты Fazzle не охватываются поддерживаемыми соединениями, и Fazzle просто выделяет место № 1 в списке элементов для продвижения.

Все, что осталось от элементов запроса, собрано из многочисленных списков поиска, которые Fazzle запускает, однако для определения своего «лучшего выбора» и 20 различных результатов на своих страницах SERPS.

9. not Evil

В отличие от других поисковых систем Tor, not Evil не для прибыли.

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

not Evil еще одна поисковая система в сети TOR.

По своей функциональности и качеству он очень конкурентоспособен.

Там нет рекламы и отслеживания

. Благодаря продуманным и постоянно обновляемым алгоритмам поиска легко найти нужный товар, контент или информацию.

Используя not Evil , вы можете сэкономить много времени и сохранить полную анонимность.

Пользовательский интерфейс очень интуитивно понятен.

Следует отметить, что ранее этот проект был широко известен как TorSearch.

10. Start Page

Если вы беспокоитесь о конфиденциальности, Start Page от  Ixquick – одна из лучших поисковых систем, даже если вы не используете Tor.

В отличие от других поисковых систем,Start Page не записывает ваш IP-адрес, что позволяет хранить историю поиска в секрете.

Обидно, что Google знает о тебе все.

Start Page  это способ провести исследование, не передавая вашу информацию кому-либо еще.

11. Spokeo

Таким образом, после проведения поиска, к вашим услугам будут местоположение, адреса электронной почты, профили в социальных сетях и даже дополнительные сведения о судимости.

Этот веб-сайт действительно прост в использовании, просто введите 10-значный номер телефона в специальной строке и нажмите «search».

Вы можете использовать Spokeo в случае, если вы хотите найти потерянного члена семьи или друга, проверить своих близких, избежать мошенников, узнать больше об этом человеке, проверить, кто вам звонит, найти еще один шанс связаться с ним и т. д.

В жизни мы порою контактируем с людьми, которых видим впервые. Если собеседник нам интересен, хочется о нем знать больше, хочется строить беседу таким образом, чтобы тоже интересовать его. Для бизнеса наличие информация – это деньги. И чем больше владеешь информацией, чем меньше неизвестности, легче прийти к цели.
Как же получить информацию от оппонента и об оппоненте?

ПереговорыЯ предлагаю некоторые наблюдения, способы, которые люди чаще всего используют в бизнесе для раскрутки оппонента на информацию.
Не всегда эти способы честные, иногда это осознанная манипуляция, иногда неосознанная. Я сторонник ситуации «выигрыш – выигрыш».
Но, согласитесь, лучше знать способы, чтобы быть вооруженным и не выдавать какую-то секретную информацию, когда кто-то их использует.
Либо понимать, каким оружием сам владеешь, и применять его по назначению и в нужных ситуациях.

Данная статья для тех, кто хочет узнать, как, какими способами люди влияют друг на друга, чтобы получить желанную информацию.

Способы раскрутки на информацию

1. Выдавать вариант возможного действия, решения оппонента за действительное

с применением утвердительных словосочетаний «Я знаю», «Вы наверняка… (делаете так-то, такой-то человек, чувствуйте то-то…)»
И внимательно фиксировать реакцию оппонента.

ПереговорыЧем более неверный вариант, особенно предположение о чувствах собеседника (разговор о чувствах неосознанно отключает частично или полностью логику), тем более откровенная его реакция.

Иногда приводят несколько вариантов решений от имени собеседника, хотя он их не озвучивал. Информацию получают, сравнивая реакции на обе ситуации.
Перечислять проблемы, которые скорее всего есть. «Наверняка…» И спросить оппонента, что и списка интересно, а что не имеет значения? Задать альтернативный вопрос: или это или это интересно?
Даже если человек не угадал – оппонент чаще раскрывается, когда ему приписывают не то, что есть.
Говорить, что является причинами отказа. Но при этом сделать вызов: «Если я скажу, что к нам это все не относится и докажу, Вы подпишите?»

2. Заводить с собеседником тему, которая опосредовано связана с интересующей темой.

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

Например, кто-то хочет узнать о проблеме человека, начинает разговор о том, что ее вызывает.
Хотят узнать заболевания человека? Начинают говорить о еде, о курении, о стрессе…
Хотят знать о ценах конкурента? Начинают разговор о дороговизне поставок, о рынке труда…
Начать разговор о конкурентах. О их клиентах, о их ценах… Об отличиях и преимуществах оппонента с ними. О рыночной ситуации на данном сегменте.
Иногда описывают подобную ситуацию, которая якобы или в действительности произошла у него с конкурентом оппонента.
Затрагивать в разговоре тему персонала.
Она всегда актуальна для руководителя, как и продажи. Начать говорить о новинках в этих вопросах. Часто оппонент сам начинает говорить о планах.
Разговор о мечтах, рисование желаемого образа. Часто руководители легко говорят о планах, которые в мечтах, т.е. идеальных, а не реальных. Но если внимательно слушать и побуждать разговору, человек сам переходит на реальные планы и возможности.

3. Находить общее с собеседником.

«Я знаю, что…» «Я тоже имел подобный опыт…» «Я сталкивался с…» «Я из этой же области, поэтому знаю, какие проблемы бывают…» «Я разговаривал со всеми подобными Вам, и они имеют…»
Понятно, что переживания сближают, дают больше понимание и доверия. А информацию дают тем, кто безопасен и кому доверяют.
Ссылка на авторитет.
Порою легче делать то, что кто-то уже делал до Вас. И если это был авторитет…

4. Вводить собеседника в эмоциональное состояние.

ПереговорыЭто можно сделать через эмоциональную тему или тему «другого уровня» общения.
Эмоциональная тема – тема, которая «переносит», «переключает» человека в сферу «эмоций». Причем как приятных, так и неприятных. Если довести оппонента до крика, и начать задавать нужные вопросы, он может ответить, т. к. контроль над логикой резко снижен.
Эмоциональные темы – это темы, которые могут волновать Вашего собеседника. Деньги, престиж, его статус, езда на дорогах и марки машин, экстремальные виды спорта, отношения (в том числе с персоналом, конкурентами)…
Вызвать на обсуждение спорной темы в области оппонента, где нет правых 50% на 50%.
Можно в виде запроса у оппонента совета. «Вы опытный человек, хотел узнать мнение специалиста по такому спорному вопросу…»

Рекомендуем так же обратить внимание на одну из наших услуг: Коучинг по управлению взаимоотношений в бизнесе.

Теперь расскажу про использование разных уровней общения для получения информации в бизнесе.
Есть одна система, которая выделяет 3 уровня общения: деловой, дружеский и сексуальный.
Каждый уровень общения подразумевает свое определенное поведение, свой лексикон слов, свои темы, свои жесты, разрешенные позы, даже свое дыхание…
Деловой уровень предполагает разговор о фактах, дружеский – о чувствах, сексуальный – об ощущениях.
Чтобы ввести оппонента в транс, или на время снять контроль над основной темой, достаточно использовать в основе разговора один уровень, а какой-то элемент вставить из другого уровня.
Например, мужчины могут говорить о серьезных вещах, используя лексикон уровня сексуального или дружеского.
Даже фразы подчиненной женщине при заключении серьезного договора «Я хочу тебя» или при заключении договора поставок «Я люблю большие размеры» могут неосознанно переключать оппонента на другой уровень, который уже предполагает другое отношение. И не важно, согласен ли оппонент перейти на другой уровень, важно, что он переключился и появившиеся мысли сбили его с основной темы, а при потере контроля люди могут выдавать информацию.

5. Делать оригинальные и в тему комплименты.

ПереговорыПризнать преимущества оппонента. «Я знаю, что Вы имеете и без меня решение. Но все мои клиенты тоже имели решение. И отказывались, т.к. …Но их интересовало…Вам интересно для развития …?»
Этот метод действует по правилу – дай собеседнику возможность выиграть, признав достоинства, и он будет готов и Вам дать.

6. Зафиксировать отрицательную, или непонятную для Вас реакцию оппонента

(молчание человека, его «сопротивление»), пусть на уровне «Ваших ощущений», и описать эту реакцию вслух собеседнику.
Например, «Я вижу, что Вы молчите. Вам неинтересно? Что же важно Вам?» «Я вижу, что Вы не хотите разговаривать. Что мне сделать по-другому?»

При озвучивании собственных чувств или угадывании чувств другого происходит интересный факт – «разделение ответственности» за возникновение этих чувств.
Чтобы проверить это, попробуйте сказать вслух «сильно болит голова» или «душно в комнате», и окружающие скорее всего начнут предлагать решения Вашей проблемы или вдруг начнут злиться, т.к. появление чувства вины, что не могут помочь может вызвать и такую реакцию. 🙂

7. Вызвать любопытство, интерес через обещание или раскрытие собственной тайны.

ПереговорыНапример «У меня есть несколько вариантов решения, несколько предложений, но я не знаю, какое Вас заинтересует? Чтобы Вы не теряли время, я хочу узнать ответ на один вопрос, после этого я расскажу именно то, что интересно Вам…»
Любопытство действует на уровне инстинктов, сложно отказаться от нахождения ответа. И когда человек открывает тайны, он будто сдает оружие, становится более безопасным. А когда бояться нечего, люди расслабляются больше и меньше контроля и напряжения в отношениях.
Не обязательно выдавать тайны, раскрытие которых может принести неприятности Вам или кому-либо, есть просто некие откровения или новая информация для оппонента.

8. Сыграть роль клиента. Задать вопросы, как если бы Вы были клиентом оппонента, который собирается приобрести его товар, услугу.

Продать товар все хотят и охотно говорят на эту тему.
Вопросы лучше строить на основе возможных проблем с данным товаром или услугой.
«А это в сроки делается?» «А как качество Вашего товара проверить?» «А если будет…?»

9. Узнать критерии в понимании оппонента «хороший клиент», Его выгоду

т. е. «Что важно Вам в этом продукте? (в данном вопросе?»). «Я могу долго рассказывать, чем могу быть полезен, но для экономии времени, хочу услышать ответ на один вопрос»
Это самый честный и эффективный способ!!!

P.S. Для желающих получить описание дополнительных наблюдений «игр» в бизнес среде, просьба написать мне.

С уважением, Гордеева Екатерина, коуч-бизнес-консультант

© 2023 Лидер 54 · Копирование материалов сайта без разрешения запрещено
Дизайн и поддержка: GoodwinPress.ru


Download Article


Download Article

This wikiHow teaches you how to find text messages you’ve hidden on your iPhone. If you’ve set up your iPhone to filter messages from people who aren’t in your contacts list, you can find the hidden messages in a special folder called Unknown Senders. If you’re looking for text messages you’ve deleted, you may be able to recover them by restoring from an iCloud backup you made before deleting them. And if you saw a notification that said you have a new message but can no longer find that notification, you’ll find the message in your inbox.

  1. Image titled Find Hidden Text Messages on an iPhone Step 1

    1

    Open the Messages app. It’s the green icon with a white chat bubble inside.

    • If you’ve turned on the iPhone feature that automatically filters messages from people who aren’t in your contacts, you can find those hidden messages using this method.
  2. Image titled Find Hidden Text Messages on an iPhone Step 2

    2

    Tap Filters. This is at the top-left corner of the Messages inbox.

    • This option is only visible if you’ve filtered messages from senders who aren’t in your contacts.
    • If you’re on a screen that says “Messages” in large letters and displays a list of three folders, just skip to the next step.

    Advertisement

  3. Image titled Find Hidden Text Messages on an iPhone Step 3

    3

    Tap Unknown Senders. This displays all text messages coming from phone numbers that aren’t in your contacts.

  4. Image titled Find Hidden Text Messages on an iPhone Step 4

    4

    Return all hidden messages to the regular inbox (optional). If you don’t want to keep these messages hidden, you can turn off unknown sender filtering:

    • Open your iPhone’s Settings (that gray gear icon on your home screen or in your App Library).
    • Scroll down and tap Messages.
    • Scroll down to “Message Filtering.”
    • Tap the “Filter Unknown Senders” switch to turn it off.
  5. Advertisement

  1. Image titled Find Hidden Text Messages on an iPhone Step 5

    1

    Make sure your messages are backed up to iCloud. If you deleted a text and want to get it back, you may be able to do so by restoring from an iCloud backup. First, check to make sure your messages are actually being backed up to iCloud:

    • Open your iPhone’s Settings (the gray gear icon on your home screen or in your App Library).
    • Tap your name at the top to open your Apple ID details.
    • Tap iCloud.
    • Look for “Messages” in the list of backed-up items. If its corresponding switch is on (green), your messages are backed up to iCloud and you can use this method to restore deleted texts.
    • If the switch is off (gray or white), you won’t be able to restore deleted texts with this method.
  2. Image titled Find Hidden Text Messages on an iPhone Step 6

    2

    Open your iPhone’s Settings

    iPhone Settings App Icon

    . If you just checked to see if you’re backing up messages, just tap the back button until you’ve returned to the Settings menu. Otherwise, tap the gray gear icon on your home screen or in your App Library now.

    • This method will erase and restore your iPhone. This sounds extreme, but as long as you back your data to iCloud, all of your data (including the text messages you had in your inbox at the time of the backup) will be placed back onto your iPhone automatically.[1]
    • Apps that claim to restore deleted texts can only pull them from backups. If you would rather not restore your entire iPhone to recover your texts, you can pay for an app like Phone Rescue ($49.99) or Enigma Recovery ($59.99) that allows you to restore messages only.[2]
  3. Image titled Find Hidden Text Messages on an iPhone Step 7

    3

    Tap General. This is the option with a gray-and-white gear icon in the third group of settings.

  4. Image titled Find Hidden Text Messages on an iPhone Step 8

    4

    Scroll down and tap Reset. It’s near the bottom of the page.

  5. Image titled Find Hidden Text Messages on an iPhone Step 9

    5

    Tap Erase All Content and Settings. This option is toward the top.

    • Most of your settings will be restored from your backup, although you’ll need to log back in to many apps and services.
  6. Image titled Find Hidden Text Messages on an iPhone Step 10

    6

    Tap Erase Now. Do not choose the option to back it up first—this will overwrite the existing backup, which would mean you’d permanently lose your deleted texts.

  7. Image titled Find Hidden Text Messages on an iPhone Step 11

    7

    Follow the on-screen instructions to reset your iPhone. Once your iPhone restarts, you’ll set it up as though it’s brand new.

  8. Image titled Find Hidden Text Messages on an iPhone Step 12

    8

    Select Restore from iCloud Backup on the Apps & Data screen. This option will appear after you’ve configured a few settings, such as signing in to iCloud and choosing a language.

  9. Image titled Find Hidden Text Messages on an iPhone Step 13

    9

    Tap Choose backup and select a backup. You may have more than one backup available. If you do, select a backup that predates when you deleted your messages. Once selected, your iPhone will start restoring.

    • If you restore from an old backup, it will undo any of the changes you’ve made to your iPhone after that date. This means you’ll need to re-download apps you’ve downloaded after the backup was made.
  10. Image titled Find Hidden Text Messages on an iPhone Step 14

    10

    Open the Messages app to find your deleted messages. As long as the messages you deleted were still on your iPhone when the backup was made, you’ll find them in the Messages app, merged in with your other messages.

    • If you were unable to restore your deleted messages this way, you may be able to contact your mobile carrier to request them.
  11. Advertisement

  1. Image titled Find Hidden Text Messages on an iPhone Step 15

    1

    Open the Messages app on your iPhone. It’s the green icon with a white speech bubble inside. You’ll find it at the bottom of your home screen. This opens your inbox.

    • Use this method if you saw a notification that said you received a text message but can no longer find the notification.
  2. Image titled Find Hidden Text Messages on an iPhone Step 16

    2

    Find the most recent messages at the top of your inbox. Any messages you haven’t opened yet will have a blue dot to the left of the sender’s name.

    • If you tapped the notification to read the message previously, you won’t see a blue dot.
  3. Image titled Find Hidden Text Messages on an iPhone Step 17

    3

    Tap a message to open it. The contents of the message will appear.

  4. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Thanks for submitting a tip for review!

References

About This Article

Article SummaryX

1. Open the Messages app.
2. Tap Filters.
3. Tap Unknown Senders.

Did this summary help you?

Thanks to all authors for creating a page that has been read 74,428 times.

Is this article up to date?

Добавить комментарий