Что такое код leak


Содержание

Leaks in com Xiaomi что это такое

Владельцы телефонов Xiaomi могут заметить, что после очередного обновления операционной системы на рабочем экране их гаджетов появилась иконка неизвестного приложения «Leaks». При запуске приложения обычно появляется серый фон, на котором сверху написано «Leaks in com.xiaomi.mipicks».Попытки как-либо удалить указанное приложение не заканчиваются успехом, подтверждая, тем самым, что приложение имеет системный характер и помещено в систему разработчиками. Ниже разберём, что это такое leaks in com Xiaomi, и что делать при появлении данного приложения в вашей системе.

Что такое Leaks in com Xiaomi?

«Leaks» (Leaks in com.xiaomi.mipicks) – это системное приложение Xiaomi, предназначенное для нахождения утечек памяти (leaks) в различных приложениях. В нашем случае таким приложением является приложение «Mipicks», позволяющее эффективно разобраться во множестве программ, доступных в Плей Маркет.

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

При подготовке очередного обновления ОС разработчики попросту позабыли изъять отладочный компонент из готовящегося к выходу обновления. Потому множество пользователей внезапно столкнулись с установленным приложением «Leaks» в их системе.

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

Серый экран с надписью Leaks in com.xiaomi.mipicks, появляющий при запуске ярлыка Leaks

Что такое «утечка памяти»?

Главная цель приложения «Leaks» — это борьба с утечками памяти. Последние представляют собой программные объекты (остатки программного кода), которые остаются в памяти после завершения работы какого-либо приложения. Специальные программы – сборщики мусора (от англ. «Garbage Collector» – GC) не могут удалить указанные остатки кода из памяти в ситуации, когда подобные остатки как-либо связаны с другими работающими приложениями. Такая невозможность удаления мусорного кода из памяти и называется «утечкой памяти».

Некоторые «утечки памяти» имеют крохотный размер, и занимают лишь пару килобайт. Другие же имеют солидные размеры и потребляют такой же значимый объём памяти.

Когда множество сборщиков мусора (GC) работающих в сепаратном режиме пытаются избавиться от оставшегося в памяти мусора, то они практически не замедляют работу остальных приложений (на каждую такую операцию делается пауза примерно от 2 до 5 миллисекунд). В случае же объёмных утечек памяти пауза может составлять уже от 50ms до 100ms, и запущенные вами приложения начинает жутко лагать.

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

Как исправить Leaks in com Xiaomi

После того, как мы разобрались с тем, что означает Leaks in com Xiaomi и что это такое, разберёмся теперь, как исправить возникшую дисфункцию. Поскольку приложение «Leaks» появилось на рабочем столе гаджетов Xiaomi по недосмотру разработчиков, то последние поспешили исправить опущенную оплошность. Обычно после очередного обновления ОС иконка «Leaks» пропадает из рабочего стола, и работа системы нормализуется.

Если же иконка «Leaks» продолжает находиться на рабочем столе гаджета длительное время, тогда рекомендую сделать следующее:

  • Обновите приложения MI (mi store, mi community etc). После проведения указанных обновлений проблема исчезнет;
  • Измените ваш регион на United States в настройках гаджета. Обычно это делается через «Настройки» — «Дополнительно» — «Регион». У некоторых пользователей это позволяло избавиться от leaks in com xiaomi;
  • Ожидайте обновления ОС для вашего гаджета. Обычно с очередным обновление дисфункция пропадает.

Обновите Mi Store и другие ваши MI-приложения

Обнаружение и локализация утечек памяти

Автор: Эдвард Райт
Перевод: Александр Шаргин
Источник: MSDN


Версия текста: 1.0.2

Введение

Динамическое распределение и освобождение памяти — одна из мощнейших возможностей языка C/C++. Но, как заметил китайский философ Сан Тзю, великая сила может обернуться великой слабостью. Это особенно верно в отношении приложений, написанных на C/C++, где ошибки при работе с памятью относятся к числу самых распространённых. Из них наиболее тонкими и трудными для обнаружения являются утечки памяти, которые возникают, когда память, выделенная программой, никогда не освобождается. Небольшие утечки памяти, возникающие один раз, могут никак не сказаться на работе программы. Однако значительные утечки, накапливающиеся со временем, могут привести к различным неприятным последствиям, начиная с невысокой производительности, и заканчивая полным отказом программы вследствие нехватки памяти. Что ещё хуже, программа, допускающая утечки памяти, может привести к краху совсем другую программу, и пользователь никогда не узнает, в чём состоит истинная причина отказа. Кроме всего перечисленного, даже самая незначительная утечка может свидетельствовать о наличии других серьёзных проблем в вашей программе.

К счастью, отладчик Visual C++ и стандартная библиотека языка C (CRT) предоставляют вам целый набор отличных инструментов для обнаружения и локализации утечек памяти. В этой статье я покажу вам, как ими пользоваться.

Активизация режима обнаружения утечек памяти

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

Директивы #include должны идти в указанном порядке. В противном случае функции, которыми мы воспользуемся, будут работать неправильно. Включая файл crtdbg.h, мы перенаправляем вызовы функций malloc и free на их отладочные версии _malloc_dbg и _free_dbg, которые отслеживают все операции по распределению и освобождению памяти. Перенаправление происходит только в отладочной версии программы (то есть, когда определён символ _DEBUG). В окончательной версии будут использоваться обычные функции malloc и free.

Директива #define непосредственно отображает базовые функции для работы с «кучей» на их отладочные версии. Вставлять её в программу не обязательно, но без неё отчёт об утечках памяти будет менее подробным.

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

Когда программа выполняется под управлением отладчика, _CrtDumpMemoryLeaks отображает информацию об утечках памяти на вкладке Debug окна Output. Эта информация выглядит примерно так:

Если бы вы не включили в программу директиву #define _CRTDBG_MAP_ALLOC, отчёт выглядел бы так:

Как видите, _CrtDumpMemoryLeaks выдаёт гораздо более полезную информацию, когда символ _CRTDBG_MAP_ALLOC определён. Без него вам выдаются следующие данные:

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

Если _CRTDBG_MAP_ALLOC определён, вам дополнительно показывается имя файла, в котором произошло распределение памяти. После имени файла в скобках содержится номер строки (20 в нашем примере). Если сделать двойной щелчок на строчке, содержащей имя файла и номер строки в нём:

то курсор переместится на строку в файле с исходным кодом программы (в нашем примере строку 20 в файле leaktest.cpp), где произошло распределение памяти. Аналогичного эффекта можно добиться, выделив строчку и нажав F4.

Использование _CrtSetDbgFlag

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

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

Типы блоков памяти

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


  • Нормальный блок (normal block) — это обычный блок, распределяемый вашей программой.
  • Клиентский блок (client block) — особый тип блока, используемый в программах под MFC для объектов, имеющих деструктор. [На самом деле клиентский блок памяти — это блок, для которого определяется пользовательская функция построения отчёта об утечках памяти. В MFC блоки этого типа распределяются для объектов класса, порождённого от CObject. MFC предоставляет функцию построения отчёта _AfxCrtDumpClient (описана в файле dumpinit.cpp), которая вызывает виртуальную функцию CObject::Dump для объекта, размещённого в клиентском блоке памяти. Это даёт вам возможность переопределить функцию CObject::Dump в производном классе, чтобы выводить содержимое объекта в окне Debug в более удобной для восприятия форме — прим. перев.]
  • CRT-блок (CRT block) — это блок памяти, который CRT распределяет для внутреннего использования. Стандартная библиотека сама заботится об освобождении таких блоков, так что вы вряд ли увидите их в отчёте об утечках памяти. Их наличие может сигнализировать о серьёзных проблемах (например, о повреждении CRT). [По умолчанию функция _CrtDumpMemoryLeaks не показывает блоки этого типа. Чтобы их увидеть, необходимо предварительно установить флаг _CRTDBG_CHECK_CRT_DF с помощью функции _CrtSetDbgFlag — прим. перев.]

Существует ещё два типа блоков, которые никогда не попадают в отчёт об утечках памяти:

  • Освобождённый блок (free block) — это блок памяти, который уже освобождён вашей программой.
  • Игнорируемый блок (ignore block) — это блок, который вы специально пометили как абсолютно вас не интересующий.

Установка режима сообщений CRT

По умолчанию _CrtDumpMemoryLeaks выводит свой отчёт об утечках памяти на вкладку Debug окна Output, как это уже описывалось выше. Однако вы можете перенаправить эту информацию в другое место посредством _CrtSetReportMode. И наоборот: если вы используете библиотеку, которая куда-то перенаправляет вывод, вы можете вернуть его в окно Output, используя следующий вызов:

За дополнительной информацией об использовании функции _CrtSetReportMode обратитесь к разделу «_CrtSetReportMode» в документации на Visual C++ (Visual C++ Programmer’s Guide, Run-Time Library Reference, Debug Function Reference).

Установка точки останова на нужном распределении памяти

Имя файла и номер строки в отчёте об утечках памяти указывает вам, где именно в программе был выделен соответствующий блок. Тем не менее, иногда этой информации оказывается недостаточно, чтобы выявить проблему. В процессе выполнения программы одно и то же распределение может происходить множество раз, но приводить к утечкам лишь в некоторых случаях. Поэтому нужно определить не только точку, в которой потерянный блок был выделен, но и при каких условиях произошла утечка. Решить задачу поможет порядковый номер распределения, то самое число, которое выводится в фигурных скобках вслед за именем файла и номером строки в нём (если, конечно, вы включили их отображение). Например, в приведённом ниже отчёте «18» — это порядковый номер распределения. Он означает, что потерянный блок был выделен восемнадцатым по счёту.

CRT учитывает каждый блок, выделенный вашей программой в процессе работы, в том числе и блоки, распределяемые самой CRT и другими библиотеками, такими как MFC. Поэтому блок с порядковым номером n — это n-й блок, распределённый вашей программой, но совсем не обязательно n-й блок, распределённый вашим собственным кодом. Как правило, это не так.

Вы можете использовать порядковый номер распределения, чтобы поставить точку останова в точности на то место, где выделяется соответствующий блок. Для этого поставьте обычную точку останова где-нибудь в начале вашей программы. Когда выполнение прервётся в этой точке, вы сможете поставить точку останова на распределение памяти из диалога QuickWatch или из окна Watch. Например, в окне Watch наберите в колонке «Name» имя:

Если вы используете многопоточную версию CRT, размещённую в динамически подключаемой библиотеке (опция /MD), вы должны задать полный контекстный оператор, как показано ниже:

Теперь нажмите RETURN. Отладчик рассчитает значение переменной и разместит его в колонке «Value». Если перед этим вы не ставили точек останова на распределения памяти, значение будет равно -1. Замените его порядковым номером распределения, на котором вы хотите прервать выполнение программы, например, номером 18, чтобы прерваться на распределении, показанном выше.

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

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

Альтернативный вариант заключается в использовании функции _CrtSetBreakAlloc, которая делает то же самое:

Сравнение состояний памяти

Другой способ обнаружения утечек памяти подразумевает использование «моментальных снимков» (snapshots) памяти в ключевых точках вашей программы. Специально для хранения таких «снимков» в CRT предусмотрена структура _CrtMemState:

Чтобы сделать «снимок» памяти в некоторый момент времени, передайте указатель на структуру _CrtMemState функции _CrtMemCheckpoint. Эта функция записывает в структуру информацию о текущем состоянии памяти:

Вы можете в любой момент вывести содержимое структуры _CrtMemState, передав указатель на неё функции _CrtMemDumpStatistics:

Эта функция выдаёт отчёт обо всех выделенных блоках, который выглядит примерно так:

Чтобы определить, не было ли утечек памяти на каком-то участке вашей программы, вы можете сделать «снимки» памяти до и после этого участка, а затем вызвать _CrtMemDifference, чтобы сравнить два состояния:

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

Что такое утечка DNS leak и как устранить

При подключении к VPN серверу в некоторых ОС (например, Windows) не всегда запросы проходят через DNS сервер VPN подключения. В этом случае некоторые сайты могут узнать, что ваш IP адрес и DNS сервера находятся в разных странах, и ваша анонимность может оказаться под угрозой.

Что такое DNS сервер

Основное предназначение DNS серверов — это преобразование доменных имен сайтов в IP адреса, за которыми эти домены закреплены. Простыми словами, вводя в браузере домен Google.com, DNS сервер смотрит за каким IP адресом закреплен данный домен, и загрузка страницы сайта происходит через IP адреса.

Ниже представлен пример определения DNS серверов на сайте Whoer.net.

Из примера видно, что мы подключились к VPN и скрыли свой IP адрес (IP принадлежит Великобритании), но при этом DNS сервер выдает наше реальное местонахождение (США).

В данном случае, проблема лежит в принципе работы DNS службы Windows. При подключении к VPN по-умолчанию запрос посылается на DNS VPN сервера. Затем DNS служба Windows ждет 2 секунды, и если ответ не пришел, то посылает запрос на следующий DNS сервер, находящийся в списке ОС Windows. Как раз следующие DNS сервера и принадлежат вашему Интернет-провайдеру, но имеют меньший приоритет по сравнению с DNS VPN сервера.

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

Решение: принудительно использовать нужный нам DNS сервер. В этом случае мы однозначно укажем операционной системе, что нужно использовать только указанные DNS сервера и тогда в списке DNS службы Windows не будут значиться DNS сервера вашего реального провайдера.

Наш VPN клиент Secure Kit умеет защищать от утечки DNS leak автоматически. Узнайте подробнее про Secure Kit.

Как скрыть свой реальный DNS в Windows

Выполните следующие действия в любой версии Windows.

Кликните правой кнопкой мышки на сетевое подключение Windows и затем выберите «Свойства».

Укажите публичные DNS сервера Google или OpenDNS.

Google DNS:
— 8.8.8.8
— 8.8.4.4

OpenDNS:
— 208.67.222.222
— 208.67.220.220

Эти DNS сервера чаще всего определяются как США. В этом случае ни один сайт не будет выдавать ваши реальные DNS.

Для полной анонимности мы рекомендуем использовать наши DNS сервера. В разделе «Мой аккаунт» указаны DNS сервера для каждого VPN направления. И уже в этом случае ваш DNS сервер будет всегда соответствовать вашему IP адресу (по стране).

После выполнения указанных действий, ваш реальный DNS сервер в Windows будет скрыт.


Как скрыть свой реальный DNS на Mac OS X

Для принудительной установки DNS на любой версии Mac OS X выполните следующие шаги:

В следующем окне внизу нажмите на иконку замка, чтобы разрешить редактирование настроек. Потребуется ввести пароль от учетной записи Mac OS X.

Выберите подключение, которое вы используете для получения Интернета. Обычно это либо Wi-Fi соединение, либо Ethernet. И затем нажмите на кнопку «Дополнительно».

Введите публичные DNS сервера Google или OpenDNS.

Google DNS:
— 8.8.8.8
— 8.8.4.4

OpenDNS:
— 208.67.222.222
— 208.67.220.220

Эти DNS сервера чаще всего определяются как США. В этом случае ни один сайт не будет выдавать ваши реальные DNS.

Для полной анонимности мы рекомендуем использовать наши DNS сервера. В вашем аккаунте в разделе «Подписки» -> вкладка «DNS» появятся DNS сервера рекомендуемые к использованию с нашими VPN серверами. Для каждого VPN направления будет указан свой DNS сервер. И уже в этом случае ваш DNS сервер будет всегда соответствовать вашему IP адресу (по стране).

После выполнения указанных действий, ваш реальный DNS сервер на Mac OS X будет скрыт.

Как скрыть свой реальный DNS на Ubuntu

Для устранения DNS leak в операционной системе Ubuntu на базе Linux, откройте раздел Соединения.

Выберите ваше подключение к Интернету и нажмите Изменить.

  1. Вкладку Параметры IPv4
  2. Автоматически (DHCP, только адрес)
  3. Укажите DNS сервер. Например, можно использовать публичные DNS сервера от Google или OpenDNS

Google DNS:
— 8.8.8.8
— 8.8.4.4

OpenDNS:
— 208.67.222.222
— 208.67.220.220

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

Нажмите на Управление сетью.

Появится сообщение Соединение разорвано.

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

После этих действий, ваш реальный DNS сервер будет скрыт.

Как скрыть свой реальный DNS на серверной Linux

Следующие действия выполняйте только в том случае, если вы считаете себя опытным пользователем Linux. Мы предупреждаем, что вносить изменения ручным способом опасно, если у вас мало знаний по администрированию Linux. Внимание: мы снимаем с себя ответственность за последствия.

Зайдите на сервер под root пользователем (или под обычным пользователем, но у вас должны быть привилегии исполнять команды под sudo).

Введите следующую команду. Возможно понадобится ввести пароль от учетной записи ОС. Для редактирования используется текстовый редактор nano. Если он у вас не установлен, то сделайте изменения другим редактором или установите nano.

  1. Если у вас установлен resolvconf, то в этом файле будет сообщение, что после перезагрузки ОС все изменения в этом файле будут утеряны и настройки вернутся по умолчанию на 127.0.1.1. Так как мы меняем DNS сервер временно, то нас это устраивает.
  2. Запишите DNS сервер, указанный по умолчанию в этом файле. Затем измените DNS сервер. Например, можно взять DNS сервер от Google или OpenDNS.

Google DNS:
— 8.8.8.8
— 8.8.4.4

OpenDNS:
— 208.67.222.222
— 208.67.220.220

Для сохранения в редакторе nano нажмите:

  1. Ctrl+X для выхода из редактора
  2. клавишу Y для сохранения изменений в файле
  3. клавишу Enter для подтверждения сохранения в тот же файл

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

  • для Debian и Ubuntu введите команду:
  • для CentOS и Red Hat Linux введите команду:

Сетевой интерфейс перезагрузится и DNS leak будет устранена.

Перезагрузите компьютер, чтобы вернуть исходный DNS сервер.

Предотвращение вторжений

You are viewing an old version of this page. View the current version.

« Previous Version 30 Next »

*/Системаобнаруженияипредотвращениявторжений#id-Предотвра»>


Система обнаружения и предотвращения вторжений

В версии 6.4 система предотвращения вторжений не может быть включена совместно с шейперами. Для ее работы необходимо их отключить и перезагрузить сервер (Сервер — Сетевые параметры — QoS и шейпер).

Система предотвращения вторжений доступна только в активированной Enterprise версии Ideco ICS для пользователей с активной подпиской на обновления.

Система предотвращения вторжений (IDS/IPS, Intrusion detection system / Intrusion prevention system) предназначена для обнаружения, логирования и предотвращения атак злоумышленников на сервер, интегрированные службы (почта, веб-сайт и др.) и защищаемую интернет-шлюзом локальную сеть.

Правила блокировки трафика включают в себя блокирование активности троянских программ, spyware, бот-сетей, клиентов p2p и торрент-трекеров, вирусов, сети TOR (используемой для обхода правил фильтрации) и многое другое.

Настроить службу можно на вкладке Безопасность — Предотвращение вторжений:

Установив или сняв галочку «Включить IDS/IPS» можно соответственно включить/выключить службу предотвращения вторжений.

В поле «Анализировать трафик этих подсетей» укажите адресацию вашей локальной сети. В случае, если на внешнем интерфейсе Ideco ICS установлен публичный IP-адрес, то в настройках можно оставить указанные по-умолчанию частные диапазоны адресов. Если же внешний адрес Ideco ICS из диапазона частных IP-адресов, то обязательно оставьте в этом поле только диапазоны своего локального интерфейса.

Опция «Хранить записи журнала» позволяет выбрать время хранения логов системы: 1, 2 или 3 месяца.

При использовании системы предотвращения вторжений не рекомендуется использовать внутренние DNS-сервера для компьютеров сети, т.к. система анализирует проходящие через нее DNS-запросы и определяет по ним зараженные устройства. В случае использования внутреннего домена AD, рекомендуется на компьютерах указывать DNS-сервер Ideco ICS в качестве единственного DNS-сервера, а в настройках DNS-сервера на ICS указать Forward-зону для локального домена.

Журнал

В журнале можно просмотреть последние 50 строк логов системы предотвращения вторжений: предупреждения и отклоненные пакеты.

Полные логи системы находятся на сервере в каталоге: /var/log/suricata

drop.log — информация о отклоненных пакетах

fast.log — логи предупреждений

suricata.log — логи работы службы

В логах предупреждений указывается группа (Classification), к которой принадлежит сработавшее правило.

На вкладке «Правила» группы переведены на русский язык, соответствие английского названия русскому можно сопоставить по следующей таблице:

Classification в Журнале Группа в Правилах
1 Attempted Administrator Privilege Gain Попытки получения привилегий администратора
2 Attempted Denial of Service Попытки проведения DoS-атак
3 Attempted Information Leak Попытки получения системных файлов
4 Attempted User Privilege Gain Попытки получения привилегий пользователя
5 Potentially Bad Traffic Потенциально опасный трафик
6 Attempt to Login By a Default Username and Password Попытки авторизации с логином и паролем по-умолчанию
7 Detection of a Denial of Service Attack Обнаружение DoS-атак
8 Generic ICMP event Подозрительная активность по протоколу ICMP
9 Inappropriate Content was Detected Обнаружение подозрительного контента
10 Misc activity Обнаружение подозрительной сетевой активности
11 Misc Attack Блокирование атак
12 Detection of a Network Scan Попытки сканирования сети
13 Detection of a Non-Standard Protocol or Event Обнаружение нарушений стандартов сетевых протоколов
14 Not Suspicious Traffic Трафик устаревшего уязвимого ПО
15 Potential Corporate Privacy Violation Запросы на скомпрометированные ресурсы
16 Generic Protocol Command Decode Ошибки в сетевых протоколах
17 Decode of an RPC Query Блокирование подозрительных RPС-запросов
18 Executable Code was Detected Блокирование попыток запуска исполняемого кода
19 A Suspicious String was Detected Обнаружение подозрительных команд
20 Successful Administrator Privilege Gain Атаки на получения привилегий администратора
21 Denial of Service DoS-атаки
22 Large Scale Information Leak Блокирование крупных утечек информации
23 Information Leak Блокирование утечек информации
24 Successful User Privilege Gain Атаки на получение прав пользователя
25 A Suspicious Filename was Detected Подозрительное обращение к файлам
26 An Attempted Login Using a Suspicious Username was Detected Авторизация с подозрительным логином
27 A System Call was Detected Попытки выполнить системный вызов
28 A TCP Connection was Detected Установлено TCP-подключение
29 A Network Trojan was Detected Блокирование активности троянских программ
30 Unknown Traffic Неизвестный тип трафика
31 Unsuccessful User Privilege Gain Блокирование некорректных попыток получения привилегий пользователя
32 A Client was Using an Unusual Port Нецелевое использование стандартных портов
33 Access to a Potentially Vulnerable Web Application Подключения к потенциально уязвимым web-приложениям
34 Web Application Attack Атаки на web-приложения

Правила

На вкладке правила доступны для просмотра и включения/отключения группы правил системы предотвращения вторжений.

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

Пример анализа логов

Пример 1

Предупреждение системы предотвращения вторжений:

07/03/2015-13:49:35.920710 [Drop] [**] [1:2001891:16] ET USER_AGENTS Suspicious User Agent (agent) [**] [Classification: A Network Trojan was Detected] [Priority: 1] 192.168.10.230:63086 -> 213.248.127.133:1119

07/03/2015-13:49:35 — дата и время события.

[Drop] — действие системы, Drop — пакет блокирован, любая другая информация в этом поле означает Alert, информирование.

[1:2001891:16] — ID правила в группе

Classification: A Network Trojan was Detected — трафик категоризирован правилами группы «Блокирование активности троянских программ»

Таким образом на вкладке «Правила» можно открыть найденную группу и в ней найти сработавшее правило по его ID:

По ссылке (после url, в данном примере: doc.emergingthreats.net/bin/view/Main/2001891) как правило можно получить дополнительную информацию о сработавшем правиле.

192.168.10.230:63086 -> 213.248.127.133:1119 — IP-адрес с которого (в локальной сети) на который была попытка соединения.

Можно проанализировать IP-адрес, с которым была попытка подозрительного соединения, через whois. В данном случае это сеть Blizzard Entertainment, а трафик — обновление игрового ПО.

Пример 2

Предупреждение системы предотвращения вторжений:

07/03/2015-14:52:07.654757 [Drop] [**] [1:2403302:1942] ET CINS Active Threat Intelligence Poor Reputation IP group 3 [**] [Classification: Misc Attack] [Priority: 2] 24.43.1.206:10980 -> 192.168.10.14:32346

Для более подробного анализа логов с IP компьютера 192.168.10.14 в консоли сервера выполняем команду:

grep «10.80.1.13:» /var/log/suricata/fast.log

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

В результате анализа ПО на компьютере была обнаружена и удалена adware-программа, на которую не реагировал локально установленный антивирус.

Технические требования

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


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

В разделе Монитор — Системные ресурсы. Параметр load average (средняя загрузка за 1, 5 и 15 минут), не должен быть больше, чем количество физических ядер установленного процессора.

DLP — Data Loss / Leak Prevention
Технологии предотвращения утечек конфиденциальной информации

Технология DLP (Data Loss/Leak Prevention) — технологии предотвращения утечек конфиденциальной информации из информационной системы вовне, а также технические устройства (программные или программно-аппаратные) для такого предотвращения утечек.

Содержание

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

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

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

Контейнерный анализ

Этот метод анализирует свойства файла или другого контейнера (архива, криптодиска и т.п.), в котором находится информация. Просторечное название таких методов — «решения на метках», что довольно полно отражает их суть. Каждый контейнер содержит некую метку, которая однозначно определяет тип содержащегося внутри контейнера контента. Упомянутые методы практически не требуют вычислительных ресурсов для анализа перемещаемой информации, поскольку метка полностью описывает права пользователя на перемещение контента по любому маршруту. В упрощенном виде такой алгоритм звучит так: «есть метка — запрещаем, нет метки — пропускаем».

Плюсы такого подхода очевидны: быстрота анализа и полное отсутствие ошибок второго рода (когда открытый документ система ошибочно детектирует как конфиденциальный). Такие методы в некоторых источниках называют «детерминистскими».

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

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

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

Контейнерные структуры в ИБ

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

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

Также с помощью решений, базирующихся на метках, компании организуют документооборот в закрытых сегментах сети, в которой обращаются интеллектуальная собственность и государственная тайна. Вероятно, теперь по требованиям ФЗ «О персональных данных» так же будет организован документооборот в отделах кадров крупных компаний.

Контентный анализ

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

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

Сигнатуры

Самый простой метод контроля — поиск в потоке данных некоторой последовательности символов. Иногда запрещенную последовательность символов называют «стоп-словом», но в более общем случае она может быть представлена не словом, а произвольным набором символов, например той же меткой. Вообще этот метод не во всех его реализациях можно отнести к контентному анализу. Например, в большинстве устройств класса UTM поиск запрещенных сигнатур в потоке данных происходит без извлечения текста из контейнера, при анализе потока «as is». Или, если система настроена только на одно слово, то результат ее работы — определение 100%-го совпадения, т.е. метод можно отнести к детерминистским.

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

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

Недостатки становятся очевидными при использования не-английского языка. К сожалению, большинство производителей систем анализа текстов работают для американского рынка, а английский язык очень «сигнатурен» — формы слов чаще всего образуются с помощью предлогов без изменения самого слова. В русском языке все гораздо сложнее. Возьмем, к примеру, милое сердцу сотрудника информационной безопасности слово «secret» (секрет). В английском оно означает и существительное «секрет», и прилагательное «секретный», и глагол «засекретить». В русском языке из корня «секрет» можно образовать несколько десятков различных слов. Т.е. если в англоговорящей организации сотруднику информационной безопасности достаточно ввести одно слово, в русскоговорящей придется вводить пару десятков слов и затем еще изменять их в шести различных кодировках.

Кроме того, такие методы неустойчивы к примитивному кодированию. Практически все они пасуют перед любимым приемом начинающих спамеров — заменой символов на похожие по начертанию. Автор неоднократно демонстрировал офицерам безопасности элементарный прием — проход конфиденциального текста через сигнатурные фильтры. Берется текст, содержащий, например, фразу «совершенно секретно», и почтовый перехватчик, настроенный на эту фразу. Если текст открыть в MS Word, то двухсекундная операция: Ctrl+F, «найти ‘o’ (русской раскладки)», «заменить на ‘o’ (английской раскладки)», «заменить все», «отослать документ» — делает документ абсолютно невидимым для этого фильтра. Тем более обидно, что такая замена проводится штатными средствами MS Word или любого другого текстового редактора, т.е. они доступны пользователю, даже если у него нет прав локального администратора и возможности запускать программы шифрования.

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

Маски

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

Неразумно задавать номер конкретной банковской карты в качестве объекта поиска, а хочется находить любой номер кредитной карты, как бы он не был написан — с пробелами или слитно. Это не просто желание, а требование стандарта PCI DSS: незашифрованные номера пластиковых карт запрещено посылать по электронной почте, т.е. обязанностью пользователя является находить такие номера в электронной почте и сбрасывать запрещенные сообщения.

Вот, например, маска, задающая такое стоп-слово, как название конфиденциального или секретного приказа, номер которого начинается с нуля. Маска учитывает не только произвольный номер, но и любой регистр и даже подмену русских букв латинскими. Маска записана в стандартной нотации «REGEXP», хотя у различных DLP-систем могут быть собственные, более гибкие нотации. Еще хуже дело обстоит с номерами телефонов. Эта информация отнесена к персональным данным, а писать ее можно десятком способов — с использованием различных сочетаний пробелов, разных типов скобок, плюса и минуса и т.д. Здесь, пожалуй, единственной маской не обойтись. Например, в антиспамовых системах, где приходится решать сходную задачу, для детектирования телефонного номера используют несколько десятков масок одновременно.

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

Хеш-функции

Различного типа хеш-функции образцов конфиденциальных документов одно время считались новым словом на рынке защиты от утечек, хотя сама технология существует с 1970-х годов. На Западе этот метод иногда называется «digital fingerprints», т.е. «цифровые отпечатки пальцев», или «шиндлы» на научном сленге.

Суть всех методов одна и та же, хотя конкретные алгоритмы у каждого производителя могут существенно отличаться. Некоторые алгоритмы даже патентуются, что подтверждает уникальность реализации. Общий сценарий действия такой: набирается база образцов конфиденциальных документов. С каждого из них снимается «отпечаток», т.е. из документа извлекается значимое содержимое, которое приводится к некоторому нормальному, например (но не обязательно) текстовому виду, затем снимаются хеши всего содержимого и его частей, например абзацев, предложений, пятерок слов и т.д., детализация зависит от конкретной реализации. Эти отпечатки хранятся в специальной базе данных.

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

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

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

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

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

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


Лингвистические методы

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

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

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

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

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

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

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

Еще один недостаток — высокий процент ошибок второго рода, для снижения которого требуется квалификация в области лингвистики (для тонкой настройки базы фильтрации). Стандартные отраслевые базы обычно дают точность фильтрации 80-85%. Это означает, что каждое пятое-шестое письмо перехвачено ошибочно. Настройка базы до приемлемых 95-97% точности срабатывания связана обычно с вмешательством специально обученного лингвиста. И хотя для обучения корректировке базы фильтрации достаточно иметь два дня свободного времени и владеть языком на уровне выпускника средней школы, эту работу, кроме офицера безопасности, делать некому, а он обычно считает такую работу непрофильной. Привлекать же человека со стороны всегда рискованно — ведь работать ему придется с конфиденциальной информацией. Выходом из этой ситуации обычно является покупка дополнительного модуля — самообучающегося «автолингвиста», которому «скармливаются» ложные срабатывания, и он автоматически адаптирует стандартную отраслевую базу.

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

Популярные каналы случайных утечек мобильные носители информации

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

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

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

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

Эффективности инструментов DLP могут мешать их очевидные изъяны: современные решения защиты от утечек не позволяют контролировать и перекрывать все имеющиеся информационные каналы. Системы DLP проконтролируют корпоративную почту, использование веб-ресурсов, мгновенный обмен сообщениями, работу с внешними носителями, печать документов и содержимое жестких дисков. Но не подконтрольным для систем DLP пока остается Skype. Только Trend Micro успела заявить, что умеет контролировать работу этой программы коммуникации. Остальные разработчики обещают, что соответствующий функционал будет обеспечен в следующей версии их защитного ПО.

Но если Skype обещает открыть свои протоколы для разработчиков DLP, то другие решения, например Microsoft Collaboration Tools для организации совместной работы, остаются закрытыми для сторонних программистов. Как контролировать передачу информации по этому каналу? Между тем в современном мире получает развитие практика, когда специалисты удаленно объединяются в команды для работы над общим проектом и распадаются после его завершения.

Основными источниками утечек конфиденциальной информации в первой половине 2010 года по-прежнему остаются коммерческие (73,8%) и государственные (16%) организации. Около 8% утечек происходят из образовательных учреждений. Характер утекающей конфиденциальной информации – персональные данные (почти 90% всех информационных утечек).

Лидерами по утечкам в мире традиционно являются США и Великобритания (также в пятерку стран по наибольшему количеству утечек вошли Канада, Россия и Германия с существенно более низкими показателями), что связанно с особенностью законодательства данных стран, предписывающего сообщать обо всех инцидентах утечки конфиденциальных данных. Аналитики Infowatch прогнозируют в будущем году сокращение доли случайных утечек и рост доли умышленных.

Трудности внедрения

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

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

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

Почти на каждом предприятии приняты такие документы, как «Положение о коммерческой тайне» и «Перечень сведений, составляющих коммерческую тайну», и их требования следует выполнять. Существует мнение, что закон «О коммерческой тайне» (98-ФЗ) не работает, тем не менее руководители компаний хорошо осознают, что им важно и нужно защищать свои коммерческие секреты. Причем это осознание гораздо выше понимания важности закона «О персональных данных» (152-ФЗ), и любому руководителю намного проще объяснить необходимость внедрить конфиденциальный документооборот, чем рассказывать про защиту персональных данных.

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

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

Россия и Запад

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

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

Не существует всеобъемлющего решения

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

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

Mitsubishi Lancer Evolution › Бортжурнал › Leak test (лик тест)

Всем привет. Сегодня постараюсь рассказать о своем опыте осуществления такой процедуры как лик тест или тест на утечки в ДВС (leak test). Итак для его осуществления понадобиться специальный прибор пневмотестер (leak tester). Конструкция его не сложна это регулятор давления, два манометра и обратный клапан между ними. Сразу скажу и это ОЧЕНЬ ВАЖНО прибор этот очень хрупкий так сказать. неаккуратное обращение с ним (с давлением в нем) приводит к выходу его из строя. НО если делать все правильно то все будет работать. Итак постараюсь все по порядку изложить.
1. Тест делается на ДВС рабочей температуры.
2. Продуваем компрессором пространство вокруг свечей, чтобы убрать оттуда пылинки и прочий возможный мусор.
3. Выкручиваем свечи.

Как указано в инструкции утечки до 40% являются хорошим показателем что отражено на градуировке манометра зеленым цветом. Так как система камеры сгорания не герметична то отсутствие утечки не возможно даже на новом двигателе. Также согласно инструкции разница в утечке между цилиндрами не должна превышать 15%. В моем случае разница — 6%. Что тоже считаю хорошим показателем.
С помощью пневмотестера диагностируются проблему ДВС (ШПГ) выражается это в определении мест утечки, (шипение в колодце маслянного цупа или шипение на дроселе, либо пузыри в радиаторе) каждый из симптомов говорит о своих проблемах.
В моем случае шипение (утечка) диагностировались лишь в колодце маслянного щупа, что говорит об утечку через колечки поршня.

Ну вот как-то так. Надеюсь эта запись в БЖ будет полезна остальным. Так у нас в Караганде я не смог найти мотористов которые мне сделали бы этот тест. И теперь я наверно первый и единственный кто это умеет делать в нашем городе.
Прошу прощения если какие-то из терминов применил ошибочно не очень силен в тех.части, но учусь. )))
Оставляйте комменты, давайте советы, ставьте лайки. Всем удачи.

Нахождение утечек памяти с помощью библиотеки CRT Find memory leaks with the CRT library

Утечки памяти являются наиболее заметно и жестких в обнаружении ошибок в приложениях C/C++. Memory leaks are among the most subtle and hard-to-detect bugs in C/C++ apps. Результат после сбоя при освобождении памяти, который ранее был выделен утечки памяти. Memory leaks result from the failure to correctly deallocate memory that was previously allocated. Небольшая утечка памяти, могут остаться незамеченными на первый, но со временем может привести к симптомы от низкой производительности до аварийного завершения приложения не хватает памяти. A small memory leak might not be noticed at first, but over time can cause symptoms ranging from poor performance to crashing when the app runs out of memory. Утечкой памяти приложения, которое использует всю доступную память может вызвать аварийное завершение работы других приложений, создание сомнения, какое приложение отвечает. A leaking app that uses up all available memory can cause other apps to crash, creating confusion as to which app is responsible. Даже взгляд утечка памяти могут свидетельствовать о других проблемах, которые должны быть исправлены. Even harmless memory leaks might indicate other problems that should be corrected.

Visual Studio Visual Studio Отладчика и библиотеки времени выполнения C (CRT) может помочь обнаружить и выявить утечки памяти. The Visual Studio Visual Studio debugger and C Run-time Library (CRT) can help you detect and identify memory leaks.

Включение обнаружения утечек памяти Enable memory leak detection

Основным средством для обнаружения утечек памяти является отладчик C/C++ и библиотека времени выполнения C (CRT) отладочные функции кучи. The primary tools for detecting memory leaks are the C/C++ debugger and the C Run-time Library (CRT) debug heap functions.

Чтобы включить все отладочные функции кучи, включите следующие инструкции в программе C++, в следующем порядке: To enable all the debug heap functions, include the following statements in your C++ program, in the following order:

Оператор #define сопоставляет базовые версии функций кучи CRT соответствующим отладочным версиям. The #define statement maps a base version of the CRT heap functions to the corresponding debug version. Если опустить #define инструкции, что дамп утечки памяти будет меньший. If you leave out the #define statement, the memory leak dump will be less detailed.


Включая crtdbg.h сопоставляет malloc и free функций с их отладочными версиями _malloc_dbg и _free_dbg, которые отслеживают памяти Выделение и освобождение. Including crtdbg.h maps the malloc and free functions to their debug versions, _malloc_dbg and _free_dbg, which track memory allocation and deallocation. Это сопоставление используется только в отладочных построениях, в которых определен _DEBUG . This mapping occurs only in debug builds, which have _DEBUG . В окончательных построениях используются первоначальные функции malloc и free . Release builds use the ordinary malloc and free functions.

После включения отладочные функции кучи с помощью предыдущие инструкции, поместите вызов _CrtDumpMemoryLeaks перед точкой выхода приложения для отображения отчета об утечке памяти, при выходе из приложения. After you’ve enabled the debug heap functions by using the preceding statements, place a call to _CrtDumpMemoryLeaks before an app exit point to display a memory-leak report when the app exits.

Если приложение имеет несколько завершает работу, не требуется вручную размещать _CrtDumpMemoryLeaks в каждой точке выхода. If your app has several exits, you don’t need to manually place _CrtDumpMemoryLeaks at every exit point. Чтобы привести к автоматическому вызову функции _CrtDumpMemoryLeaks в каждой точке выхода, поместите вызов _CrtSetDbgFlag в начале приложения с помощью показанных здесь битовых поля: To cause an automatic call to _CrtDumpMemoryLeaks at each exit point, place a call to _CrtSetDbgFlag at the beginning of your app with the bit fields shown here:

По умолчанию _CrtDumpMemoryLeaks выводит отчет об утечке памяти в область Отладка окна Вывод . By default, _CrtDumpMemoryLeaks outputs the memory-leak report to the Debug pane of the Output window. Если используется библиотека, она может переустановить вывод в другое расположение. If you use a library, the library might reset the output to another location.

Можно использовать _CrtSetReportMode для перенаправления отчета в другое расположение или обратно в вывода окна, как показано ниже: You can use _CrtSetReportMode to redirect the report to another location, or back to the Output window as shown here:

Интерпретация отчета об утечке памяти Interpret the memory-leak report

Если ваше приложение не определяет _CRTDBG_MAP_ALLOC , _CrtDumpMemoryLeaks отображает отчет об утечке памяти, который выглядит следующим образом: If your app doesn’t define _CRTDBG_MAP_ALLOC , _CrtDumpMemoryLeaks displays a memory-leak report that looks like:

Если ваше приложение определяет _CRTDBG_MAP_ALLOC , отчет об утечке памяти выглядит как: If your app defines _CRTDBG_MAP_ALLOC , the memory-leak report looks like:

Во втором отчете показано имя файла и номер строки, где сначала выделяется утечки памяти. The second report shows the filename and line number where the leaked memory is first allocated.

Ли вы определить _CRTDBG_MAP_ALLOC , в отчете об утечке памяти: Whether or not you define _CRTDBG_MAP_ALLOC , the memory-leak report displays:

  • Номер выделения памяти, который является 18 в примере The memory allocation number, which is 18 in the example
  • Тип блока, normal в примере. The block type, normal in the example.
  • Расположение памяти в шестнадцатеричном формате, 0x00780E80 в примере. The hexadecimal memory location, 0x00780E80 in the example.
  • Размер блока, 64 bytes в примере. The size of the block, 64 bytes in the example.
  • Первые 16 байт данных в блоке, в шестнадцатеричном формате. The first 16 bytes of data in the block, in hexadecimal form.

Типы блоков памяти являются обычный, клиента, или CRT. Memory block types are normal, client, or CRT. Обычный блок — это обыкновенная память, выделенная программой. A normal block is ordinary memory allocated by your program. Клиентский блок — особый тип блока памяти, используемой программами MFC для объектов, для которых требуется деструктор. A client block is a special type of memory block used by MFC programs for objects that require a destructor. Оператор new в MFC создает либо обычный, либо клиентский блок, в соответствии с создаваемым объектом. The MFC new operator creates either a normal block or a client block, as appropriate for the object being created.

Блок CRT — это блок памяти, выделенной библиотекой CRT для внутреннего использования. A CRT block is allocated by the CRT library for its own use. Освобождение этих блоков производится библиотекой CRT, поэтому блоки CRT не будет отображаться в отчете об утечке памяти, если существуют серьезные проблемы с библиотекой CRT. The CRT library handles the deallocation for these blocks, so CRT blocks won’t appear in the memory-leak report unless there are serious problems with the CRT library.

Существуют два других типа блоков памяти, которые никогда не отображаются в отчетах об утечке памяти. There are two other types of memory blocks that never appear in memory-leak reports. Объект свободных блоков памяти, которая была освобождена, поэтому по определению не утечки. A free block is memory that has been released, so by definition isn’t leaked. Пропускаемый блок — это память, вы специально помеченная для исключения из отчета об утечке памяти. An ignore block is memory that you’ve explicitly marked to exclude from the memory-leak report.

Выше методы определения утечки памяти для памяти, выделенной с помощью стандартных CRT malloc функции. The preceding techniques identify memory leaks for memory allocated using the standard CRT malloc function. Если программа выделяет память с помощью C++ new оператор, однако вы можете увидеть только имя файла и номер строки, где operator new вызовы _malloc_dbg в отчете об утечке памяти. If your program allocates memory using the C++ new operator, however, you may only see the filename and line number where operator new calls _malloc_dbg in the memory-leak report. Чтобы создать более отчет об утечке памяти, можно написать макрос следующим сообщить о строке, внесенные выделение: To create a more useful memory-leak report, you can write a macro like the following to report the line that made the allocation:

Теперь вы можете заменить new оператора с помощью DBG_NEW макрос в коде. Now you can replace the new operator by using the DBG_NEW macro in your code. В отладочных сборках DBG_NEW используется перегруженная версия глобального operator new , принимает дополнительные параметры для типа блока, файла и номер строки. In debug builds, DBG_NEW uses an overload of global operator new that takes additional parameters for the block type, file, and line number. Перегрузка new вызовы _malloc_dbg для записи дополнительных сведений. The overload of new calls _malloc_dbg to record the extra information. Отчеты об утечке памяти Показать имя файла и номер строки, где были выделены потерянные объекты. The memory-leak reports show the filename and line number where the leaked objects were allocated. Сборки выпуска, по-прежнему используют значение по умолчанию new . Release builds still use the default new . Ниже приведен пример этого метода: Here’s an example of the technique:

При выполнении этого кода в Visual Studio отладчика, вызов _CrtDumpMemoryLeaks создает отчет в вывода окно, которое выглядит так: When you run this code in the Visual Studio debugger, the call to _CrtDumpMemoryLeaks generates a report in the Output window that looks similar to:

Эти выходные данные отчетов, что утечка выделение было предназначено в строке 20 debug_new.cpp. This output reports that the leaked allocation was on line 20 of debug_new.cpp.

Мы не рекомендуем создать макрос препроцессора с именем new , или другие ключевое слово языка. We don’t recommend you create a preprocessor macro named new , or any other language keyword.

Установите точки останова для номера выделения памяти Set breakpoints on a memory allocation number

Номер выделения памяти сообщает, когда был выделен утекающий блок памяти. The memory allocation number tells you when a leaked memory block was allocated. Блок с номером выделения памяти 18 — например, — 18-й блок памяти, выделенной во время выполнения приложения. A block with a memory allocation number of 18, for example, is the 18th block of memory allocated during the run of the app. В отчете CRT учитываются все выделения блоков памяти во время выполнения, включая выделения, произведенные библиотекой CRT и другие библиотеки, например MFC. The CRT report counts all memory-block allocations during the run, including allocations by the CRT library and other libraries such as MFC. Таким образом эта память номер выделения блока 18, вероятно, станет 18-й блок памяти, выделенным вашим кодов. Therefore, memory allocation block number 18 probably isn’t the 18th memory block allocated by your code.

Номер выделения можно использовать для того, чтобы задать точку останова в том месте, где выделяется память. You can use the allocation number to set a breakpoint on the memory allocation.

Установка точки останова для выделения памяти с помощью окна контрольных значений: To set a memory-allocation breakpoint using the Watch window:

Установите точку останова недалеко от начала приложения и начните отладку. Set a breakpoint near the start of your app, and start debugging.

Когда приложение приостанавливается в точке останова, откройте Watch окно, выбрав Отладка > Windows > Контрольные значения 1 (или Контрольные значения 2, Контрольное значение 3, или Контрольные значения 4). When the app pauses at the breakpoint, open a Watch window by selecting Debug > Windows > Watch 1 (or Watch 2, Watch 3, or Watch 4).

В Watch введите _crtBreakAlloc в имя столбца. In the Watch window, type _crtBreakAlloc in the Name column.

Если используется многопоточная версия DLL библиотеки CRT (параметр/MD), добавьте контекстный оператор: <,,ucrtbased.dll>_crtBreakAlloc If you’re using the multithreaded DLL version of the CRT library (the /MD option), add the context operator: <,,ucrtbased.dll>_crtBreakAlloc

Нажмите клавишу ВВОД. Press Enter.

Отладчик выполнит оценку вызова и поместит результат в столбец Значение . The debugger evaluates the call and places the result in the Value column. Это значение будет равно –1, если в местах выделения памяти не задано ни одной точки останова. This value will be -1 if you have not set any breakpoints on memory allocations.

В значение столбца, замените значение номером выделения памяти, где требуется останов отладчика. In the Value column, replace the value with the allocation number of the memory allocation where you want the debugger to break.

После выбора точки останова для номера выделения памяти, продолжите отладку. After you set a breakpoint on a memory-allocation number, continue to debug. Убедитесь в том, что для запуска под тем же условиям, поэтому номер выделения памяти не изменяется. Make sure to run under the same conditions, so the memory-allocation number doesn’t change. Когда выполнение программы будет приостановлено на заданном выделении памяти, используйте стек вызовов окно и других окон отладчика определите условия, при которых была выделена память. When your program breaks at the specified memory allocation, use the Call Stack window and other debugger windows to determine the conditions under which the memory was allocated. Затем можно продолжить выполнение, чтобы посмотреть, что происходит на объект и определить, почему он не освобождается неправильно. Then, you can continue execution to observe what happens to the object and determine why it isn’t correctly deallocated.

Иногда может быть полезно задать точку останова по данным на самом объекте. Setting a data breakpoint on the object might also be helpful. Для получения дополнительной информации см. раздел Использование точек останова. For more information, see Using breakpoints.

Точки останова для выделения памяти можно также задать в коде. You can also set memory-allocation breakpoints in code. Можно установить следующие значения: You can set:

Сравнение состояний памяти Compare memory states

Другая технология для обнаружения утечек памяти включает получение «снимков» состояния памяти приложения в ключевых точках. Another technique for locating memory leaks involves taking snapshots of the application’s memory state at key points. Чтобы получить снимок состояния памяти в заданной точке приложения, создайте _CrtMemState структурировать и передать его в _CrtMemCheckpoint функции. To take a snapshot of the memory state at a given point in your application, create a _CrtMemState structure and pass it to the _CrtMemCheckpoint function.

_CrtMemCheckpoint Функция поместит в структуру снимок текущего состояния памяти. The _CrtMemCheckpoint function fills in the structure with a snapshot of the current memory state.

Чтобы вывести содержимое _CrtMemState структуры, передайте ее _ CrtMemDumpStatistics функции: To output the contents of a _CrtMemState structure, pass the structure to the _ CrtMemDumpStatistics function:

_ CrtMemDumpStatistics Выводит дамп состояния памяти, который выглядит следующим образом: _ CrtMemDumpStatistics outputs a dump of memory state that looks like:

Чтобы определить, произошла ли утечка памяти на отрезке кода, можно сделать снимок состояния памяти перед ним и после него, а затем сравнить оба состояния с помощью функции _ CrtMemDifference : To determine whether a memory leak has occurred in a section of code, you can take snapshots of the memory state before and after the section, and then use _ CrtMemDifference to compare the two states:

_CrtMemDifference Сравнивает состояния памяти s1 и s2 и возвращает результат в ( s3 ) является различие между s1 и s2 . _CrtMemDifference compares the memory states s1 and s2 and returns a result in ( s3 ) that is the difference between s1 and s2 .

Еще один способ поиска утечек памяти заключается в размещении _CrtMemCheckpoint вызовы в начале и конце приложения, затем с помощью _CrtMemDifference сравнить результаты. One technique for finding memory leaks begins by placing _CrtMemCheckpoint calls at the beginning and end of your app, then using _CrtMemDifference to compare the results. Если _CrtMemDifference показывает утечку памяти, можно добавить несколько _CrtMemCheckpoint вызовы, чтобы разделить программу с помощью двоичного поиска, пока вы определили, что источник утечки. If _CrtMemDifference shows a memory leak, you can add more _CrtMemCheckpoint calls to divide your program using a binary search, until you’ve isolated the source of the leak.


Ложные срабатывания False positives

_CrtDumpMemoryLeaks можно дать ошибочно диагностировать утечку памяти, если библиотеку внутренние выделения как обычных блоков вместо блоки CRT или клиентские блоки. _CrtDumpMemoryLeaks can give false indications of memory leaks if a library marks internal allocations as normal blocks instead of CRT blocks or client blocks. В таком случае функция _CrtDumpMemoryLeaks не может различать пользовательские выделения и внутренние выделения библиотеки. In that case, _CrtDumpMemoryLeaks is unable to tell the difference between user allocations and internal library allocations. Если глобальные деструкторы для выделений библиотеки выполняются после точки вызова функции _CrtDumpMemoryLeaks , каждое внутреннее выделение библиотеки принимается за утечку памяти. If the global destructors for the library allocations run after the point where you call _CrtDumpMemoryLeaks , every internal library allocation is reported as a memory leak. Версии библиотеки стандартных шаблонов раньше, чем Visual Studio .NET может привести к _CrtDumpMemoryLeaks сообщить о таких ложных положительных результатов. Versions of the Standard Template Library earlier than Visual Studio .NET may cause _CrtDumpMemoryLeaks to report such false positives.

Программерские типсы и триксы: Ловим memory leaks

Содержание статьи

В «Диспетчере задач» очень часто можно увидеть, что некоторые программы занимают совершенно неприличное количество памяти. Особенно это свойственно интернет-браузерам. Рано или поздно перед каждым разработчиком встает задача отлова утечек памяти. Сегодня мы узнаем, как это сделать в языке C++ на MSVC.

Искать утечки памяти мы будем в ОС Windows, а для сборки кода использовать компилятор от Microsoft. Существует множество способов избежать мемори ликов, но основное правило этой борьбы можно сформулировать как «класть на место все, что взяли». К сожалению, в «боевом кодинге» такое не всегда возможно. Банальный человеческий фактор или сработавший exception запросто может отменить выполнение оператора delete. В этой статье мы не будем рассматривать, что нужно делать, а что не стоит, чтобы память не утекала. Мы будем действовать в контексте уже имеющейся проблемы: утечка есть и нам надо ее перекрыть.
Для решения этой задачки многие программисты используют сторонние библиотеки (а самые крутые пишут собственные менеджеры памяти), но мы начнем с чего-нибудь попроще — например, воспользуемся средствами Debug CRT.

Debug CRT

Для использования Debug CRT надо подключить соответствующий хидер и включить использование Debug Heap Alloc Map. Делается это всего несколькими строками кода:

Подключение Debug CRT

#ifdef _DEBUG
#include
#define _CRTDBG_MAP_ALLOC
#endif

После этих действий при выделении памяти через new и malloc() данные будут оборачиваться в специальную структуру _CrtMemBlockHeader. С помощью этой обертки мы сможем узнать имя файла и строку, в которой резервировалась ликнутая память, ее объем и сами данные. Все записи объединены в двусвязный список, поэтому по нему можно легко пробежаться и найти проблемные участки.

Структура _CrtMemBlockHeader

typedef struct _CrtMemBlockHeader
<
struct _CrtMemBlockHeader * pBlockHeaderNext;
struct _CrtMemBlockHeader * pBlockHeaderPrev;
char* szFileName;
int nLine;
size_t nDataSize;
int nBlackUse;
long lRequest;
unsigned char gap[nNoMansLandSize];
unsigned char data[nDataSize];
unsigned char anotherGap[nNoMansLandSize];

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

Вывод _CrtDumpMemoryLeaks()

Detected memory leaks!
Dumping objects ->
<163>normal block at 0x00128788, 4 bytes long.
Data: 00 00 00 00
<162>normal block at 0x00128748, 4 bytes long.
Data: 00 00 00 00
Object dump complete.

Вот оно как: в Microsoft Visual C++ 6.0 в файле crtdbg.h имело место переопределение функции new, которое должно было точно показать файл и строку, в котором происходило выделение памяти. Но оно не давало желаемого результата — FILE:LINE всегда разворачивались в crtdbg.h file line 512. В следующих версиях Microsoft вообще убрали эту фичу, и весь груз ответственности лег на программистов. Сделать нормальный вывод можно с помощью следующего переопределения:

Переопределение new

#define new new( _NORMAL_BLOCK, __FILE__, __LINE__)

Эту строчку желательно вынести в какой-нибудь общий заголовочный файл и подключать его после crtdbg.h. Теперь перед нами стоит задача записать все это в какой-нибудь лог или хотя бы выводить в консоль. Для перенаправления вывода нам потребуются две функции: _CrtSetReportMode и _CrtSetReportFile. Вторым параметром _CrtSetReportFile может быть хендл нашего лог-файла или флаг вывода в stdout.

Перенаправление вывода

_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
// выводим все в stdout
_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );

У этого метода есть еще одна проблемка — он выводит информацию о памяти, которая не утекла, а просто не успела вернуться. Это, например, может быть какая-нибудь глобальная переменная или объект. Нам нужно как-то удалить эти куски памяти из вывода _CrtDumpMemoryLeaks(). Делается это следующим образом:

Ограничение зоны действия _CrtDumpMemoryLeaks()

int _tmain(int argc, _TCHAR* argv[])
<
_CrtMemState _ms;
_CrtMemCheckpoint(&_ms);
// some logic goes here.
_CrtMemDumpAllObjectsSince(&_ms);
return 0;
>

Мы записываем начальное состояние памяти в специальную структуру с помощью функции _CrtMemCheckpoint(), а в конце, используя _CrtMemDumpAllObjectsSince(), выводим все, что утекло после того, как мы сделали слепок памяти.

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

Visual Leak Detector

Visual Leak Detector — это уже сторонняя библиотека, но по сути она является надстройкой над Debug CRT, которую мы рассмотрели чуть раньше. Пользоваться ей достаточно просто — надо всего лишь включить заголовочный файл vld.h в любой файл проекта. Но с двумя оговорками.

Во-первых, если у нас в проекте есть несколько бинарных модулей (DLL или EXE), то include для vld.h надо делать как минимум в одном исходном файле для каждого модуля. То есть, если у нас после компиляции на выходе получается module_1.dll и module_2.dll, то нам нужно сделать #include как минимум в module_1.h и в module_2.h.

Во-вторых, включение заголовочного файла Visual Leak Detector должно происходить после включения прекомпилед хидера. То есть, после stdafx.h и других подобных файлов. После выполнения этих условий достаточно запустить программу в дебаг-сборке, и библиотека сразу начнет работать.

Visual Leak Detector можно настроить под свои нужды. Конфиг хранится в файле vld.ini, который, в свою очередь, лежит в директории с установленным VLD. Файл с настройками можно скопировать в папку с проектом, и тогда библиотека будет использовать эту копию с индивидуальными настройками для каждого проекта.
Параметров для тюнинга Visual Leak Detector предостаточно. Например, можно настроить тот же вывод в файл или в дебаг консоль студии. Делается это ключом ReportTo. По умолчанию там стоит «debugger», но можно заменить это значение на «file» или «both». Надеюсь, их смысл пояснять не нужно.

Если мы включим вывод в файл, то надо указать путь к этому файлу с помощью параметра ReportFile. Также можно выбрать кодировку файла с помощью ReportEncoding: unicode или ASCII.

Еще есть интересная опция поиска ликов библиотеки в самой себе (SelfTest). Да, бывает и такое. Если постараться, то можно получить в output что-то вроде этого:

ERROR: Visual Leak Detector: Detected a memory leak internal to Visual Leak Detector.

Еще VLD позволяет ограничить размер дампа памяти, выводимого в лог, или вообще подавить этот вывод, настроить глубину и метод проходки по стеку и так далее. Но это уже специфичные вещи, которые некоторым могут пригодиться, а некоторым и нет. В общем и целом Visual Leak Detector прост, удобен и не требует много кода для включения режима поиска утечек.

Valgrind

Все, что мы рассмотрели выше, было актуально для Windows и MS Visual Studio. Но есть и другие ОС. Valgrind как раз для них. Он работает в Linux и Mac OS X и используется не только для отлова мемори ликов, но и для отладки памяти и профилирования (сбор характеристик работы программы). По сути, Valgrind является виртуальной машиной, использующей методы JIT-компиляции. Ее усилиями программа не выполняется непосредственно на процессоре компьютера, а транслируется в так называемое «промежуточное представление». С этим представлением и работает Valgrind. Точнее, работают его инструменты, но об этом чуть позже.

После обработки промежуточного представления Valgrind перегоняет все обратно в машинный код. Такие действия значительно (в 4-5 раз) замедляют выполнение программы. Но это вполне обоснованная плата за контроль расхода памяти. Как я говорил выше, Valgrind предоставляет несколько инструментов. Самый популярный из них — Memcheck. Он заменяет стандартное выделение памяти языка C собственной реализацией. Memcheck обнаруживает попытки использования неинициализированной памяти, чтение/запись после её освобождения и с конца выделенного блока, а также утечки памяти.

Есть и другие инструменты, например Addrcheck — более легкая, но менее функциональная версия Memcheck. Инструменты Helgrind и DRD используются для поиска ошибок в многопоточном коде. Иначе говоря, Valgrind гораздо более мощная штука, чем просто библиотека по поиску мемори ликов.

Заключение

Утечки памяти — одна из самых распространенных проблем в программировании. Даже самые опытные из нас могут заиметь парочку ликов. Инструментов для их отлова великое множество, и эти несколько страниц должны помочь тебе начать борьбу с memory leaks.

Что такое код leak


leak in a boiler in a boat, in a roof — течь в котле в лодке, в крыше

to start /to spring/ a leak — дать течь

to stop a leak — остановить течь

3. спец. размер утечки; путь утечки; сопротивление утечки

4. 1> утечка информации 2> просочившаяся информация 3> источник утечки информации

to take a leak — прост. пописать, отлить

2. li:k v 1. давать течь, протекать, пропускать жидкость

the boiler the cistern is leaking — котёл цистерна течёт

the ship is leaking badly — судно дало сильную течь

2. вытекать, просачиваться, проникать ( о жидкости, газе и т. п. )

the rain is leaking in through a crack in the roof — дождь проникает /льёт, хлещет/ через щель в крыше

gas leaking from a pipe — утечка газа из трубы

3. 1> просачиваться ( об информации ) 2> неофициально давать, сведения прессе

he leaked the story to the press — он был источником сведений, якобы просочившихся в прессу

Англо-Русско-Английский словарь общей лексики, сборник из лучших словарей. English-Russian-English dictionary of general lexis, the collection of the best dictionaries. 2012

Еще значения слова и перевод LEAK с английского на русский язык в англо-русских словарях и с русского на английский язык в русско-английских словарях.

More meanings of this word and English-Russian, Russian-English translations for the word «LEAK» in dictionaries.

  • LEAK — I. ˈlēk verb ( -ed/-ing/-s ) Etymology: Middle English leken, from Old Norse leka to drip, leak; akin to Old …
    Webster’s New International English Dictionary
  • LEAK — (v.) A crack, crevice, fissure, or hole which admits water or other fluid, or lets it escape; as, a leak …
    Английский словарь Webster
  • LEAK — — leaker , n. — leakless , adj. /leek/ , n. 1. an unintended hole, crack, or the like, through …
    Random House Webster’s Unabridged English Dictionary
  • LEAK — I. ˈlēk verb Etymology: Middle English leken, liken, from or akin to Middle Dutch leken; akin to Old English hlec …
    Merriam-Webster’s Collegiate English vocabulary
  • LEAK — adj leaky. 2. leak ·add. ·noun a loss of electricity through imperfect insulation; also, the point at which such loss …
    Webster English vocab
  • LEAK — [leak] vb [ME leken, fr. ON leka; akin to OE leccan to moisten, MIr legaid it melts] vi (14c) 1 …
    Merriam-Webster English vocab
  • LEAK — / liːk; NAmE / verb , noun ■ verb 1. to allow liquid or gas to get in or out …
    Oxford Advanced Learner’s English Dictionary
  • LEAK — I. leak 1 /liːk/ BrE AmE verb [ Date: 1400-1500 ; Language: Old Norse ; Origin: leka ] 1 . …
    Longman Dictionary of Contemporary English
  • LEAK — ( leaks, leaking, leaked) Frequency: The word is one of the 3000 most common words in English. 1. If a …
    Collins COBUILD Advanced Learner’s English Dictionary
  • LEAK — I. verb COLLOCATIONS FROM OTHER ENTRIES a gas leak (= an escape of gas through a hole in something ) …
    Longman DOCE5 Extras English vocabulary
  • LEAK — [noun] [C]There’s water on the floor — we must have a leak somewhere.If you suspect a gas leak, phone the …
    Cambridge English vocab
  • LEAK — I. noun 1 small hole/crack VERB + LEAK ▪ have ▪ The boat had a small

. ▪ develop , …
Oxford Collocations English Dictionary

  • LEAK — With a qualifier, one of a class of resource-management bugs that occur when resources are not freed …
    FOLDOC Computer English Dictionary
  • LEAK — With qualifier, one of a class of resource-management bugs that occur when resources are not freed properly after operations on …
    Jargon File English vocabulary
  • LEAK — 1. сущ. 1) течь, протечка; утечка gas leak ≈ утечка газа start a leak spring a leak plug a leak …
    Большой Англо-Русский словарь
  • LEAK — 1) утечка; течь; просачивание || давать течь; протекать; просачиваться 2) место утечки 3) подтёк ( дефект баночных консервов ) • …
    Большой Англо-Русский политехнический словарь
  • LEAK — 1) утечка; течь; просачивание || давать течь; протекать; просачиваться 2) место утечки 3) подтёк (дефект баночных консервов) • leak to ground — утечка на …
    Большой Англо-Русский политехнический словарь — РУССО
  • LEAK — 1) вытекать 2) давать утечку 3) натекатель 4) пропускать 5) пропустить 6) просачиваться 7) протекать 8) рассеиваться 9) течь 10) утечка • apply leak test — проверять на плотность gas leak to …
    Англо-Русский научно-технический словарь
  • LEAK — leak сущ.1) течь, протечка; утечка gas leak — утечка газа — start a leak — spring a leak — plug …
    Англо-Русский словарь Tiger
  • LEAK — 1. li:k n 1. течь leak in a boiler in a boat, in a roof — течь в котле в …
    Большой новый Англо-Русский словарь
  • LEAK — 1. сущ. 1) течь, протечка; утечка gas leak — утечка газа — plug a leak — spring a leak — …
    Англо-Русский словарь по общей лексике
  • LEAK — 1. сущ. 1) течь, протечка; утечка gas leak — утечка газа — plug a leak — spring a leak — start a leak — stop a …
    Англо-Русский словарь общей лексики

  • LEAK — 1. _n. течь; утечка; — start a leak — spring a leak _Syn: drip, ooze, trickle 2. _v. 1> пропускать …
    Англо-Русский словарь Мюллера — 24 редакция
  • LEAK — 1. n. течь; утечка; — start a leak — spring a leak Syn: drip, ooze, trickle 2. v. 1. пропускать …
    Англо-Русский словарь Мюллера — редакция bed
  • LEAK — 1) утечка; течь; фильтрация 2) место утечки 3) просачиваться; пропускать; давать течь • leak to ground — утечка в землю to leak out — вытекать — …
    Англо-Русский словарь по строительству и новым строительным технологиям
  • LEAK — 1. утечка, течь; просачивание, фильтрация || просачиваться; пропускать; протекать, стекать 2. неплотное соединение leak in the casing — течь в обсадных …
    Большой Англо-Русский словарь по нефти и газу
  • LEAK — 1. _n. течь; утечка; to start (или to spring) a leak дать течь 2. _v. 1> пропускать воду, давать течь; …
    Англо-Русский словарь Мюллера
  • LEAK — leak n vulg sl He’s gone for his fucking leak Он пошел отлить Pull over, I gotta take a leak …
    Англо-Русский новый словарь современного неформального английского языка
  • LEAK — течь; утечка; протекание || течь; протекать — air leak — fuel leak — oil leak — radiator leak
    Англо-Русский автомобильный словарь — Руссо
  • LEAK — 1. сущ. 1) течь, протечка; утечка gas leak ≈ утечка газа start a leak spring a leak plug a leak …
    Новый большой Англо-Русский словарь
  • LEAK — licc (-ar); v. (to

    out) divulgar se.
    English interlingue dictionary

  • LEAK — agas;hungaw;lutsanan;tulo
    English-Visayan vocabulary
  • LEAK — I. verb Etymology: Middle English leken, liken, from or akin to Middle Dutch leken; akin to Old English hlec

    y, …
    Толковый словарь английского языка — Merriam Webster

  • LEAK — (n.) A loss of electricity through imperfect insulation; also, the point at which such loss occurs.
    Английский словарь Webster
  • LEAK — (n.) To enter or escape, as a fluid, through a hole, crevice, etc. ; to pass gradually into, or out …
    Английский словарь Webster
  • LEAK — (n.) To let water or other fluid in or out through a hole, crevice, etc.; as, the cask leaks; the …
    Английский словарь Webster
  • LEAK — (a.) Leaky.
    Английский словарь Webster
  • LEAK — (v.) The entrance or escape of a fluid through a crack, fissure, or other aperture; as, the leak gained on …
    Английский словарь Webster
  • LEAK — ( v. ) The entrance or escape of a fluid through a crack, fissure, or other aperture; as, the leak …
    Webster’s Revised Unabridged English Dictionary
  • LEAK — ( v. ) A crack, crevice, fissure, or hole which admits water or other fluid, or lets it escape; as, …
    Webster’s Revised Unabridged English Dictionary
  • LEAK — ( n. ) To let water or other fluid in or out through a hole, crevice, etc.; as, the cask …
    Webster’s Revised Unabridged English Dictionary
  • LEAK — ( n. ) To enter or escape, as a fluid, through a hole, crevice, etc. ; to pass gradually into, …
    Webster’s Revised Unabridged English Dictionary
  • LEAK — ( a. ) Leaky.
    Webster’s Revised Unabridged English Dictionary
  • LEAK — v. allow a liquid or other substance to enter or escape through a small hole or opening; escape or pass …
    Толковый словарь английского языка — Редакция bed
  • LEAK — n. hole caused by damage or wear through which liquid seeps; drip, seepage; any opening through which something can escape; …
    Толковый словарь английского языка — Редакция bed
  • LEAK — n. Function: noun Date: 15th century 1 a : a crack or hole that usually by mistake admits or lets …
    Merriam Webster Collegiate English Dictionary
  • LEAK — n. Pronunciation: ‘ l ē k Function: verb Etymology: Middle English leken, liken, from or akin to Middle Dutch leken; …
    Merriam Webster Collegiate English Dictionary
  • LEAK — ■ verb 1》 (of a container or covering) accidentally lose or admit contents through a hole or crack. ↘(of liquid, …
    Concise Oxford English vocab
  • LEAK — leak BrE AmE liːk (= leek) ▷ leaked liːkt ▷ leaking ˈliːk ɪŋ ▷ leaks liːks
    Longman Pronunciation English Dictionary
  • LEAK — n. & v. —n. 1 a a hole in a vessel, pipe, or container etc. caused by wear or damage, …
    Английский основной разговорный словарь
  • LEAK — n. & v. n. 1 a a hole in a vessel, pipe, or container etc. caused by wear or damage, …
    Concise Oxford English Dictionary
  • LEAK — n. & v. —n. 1. a a hole in a vessel, pipe, or container etc. caused by wear or damage, …
    Oxford English vocab
  • LEAK — (

    ed) Frequency: The word is one of the 3000 most common words in English. 1. If a container …
    Collins COBUILD — Толковый словарь английского языка для изучающих язык

  • LEAK — Synonyms and related words : abysm, abyss, aperture, arroyo, babble, babbling, be indiscreet, be revealed, be unguarded, become known, betray, …
    Moby Thesaurus English vocabulary
  • LEAK — Noun. An act of urination. E.g. «Hold on a minute, I need to take a leak.»
    Slang English vocab
  • LEAK — To make water.
    Slang English vocab
  • LEAK — n. Function: verb Synonyms: GET OUT 2, break, come out, out, transpire
    Collegiate Thesaurus English vocab
  • LEAK — I . n. 1. Fissure ( letting a liquid in or out ), chink, crevice, hole. 2. Leaking,

    age, percolation. …
    Dictionary of English Synonyms

  • LEAK — verb Synonyms: get out 2, break, come out, out, transpire
    Collegiate Thesaurus English vocabulary
  • LEAK — I. noun
    Oxford Collocations Dictionary Second Edition
  • LEAK — See ↑ FIND OUT 3, ↑ FLOW 1, ↑ HOLE 5, ↑ TELL 11
    Longman Activator English vocab
  • LEAK — n. 25B6; verb oil leaking from the tanker : SEEP (OUT), escape, ooze (out), emanate, issue, drip, dribble, drain, bleed. …
    Concise Oxford Thesaurus English vocabulary
  • LEAK — 1. noun мочеиспускание 2. v 1) просачиваться (vi); 2) пропускать (vt)
    Dirty English-Russian vocab
  • LEAK — I n. 1) to spring a

    2) to plug, stop a

    II v. 1) ( B ) (‘to …
    The Bbi Combinatory Dictionary of English — A Guide to Word Combinations

    Apple подтвердила утечку секретного кода прошивки iPhone

    Компания Apple подтвердила реальность утечки исходного кода основного компонента iOS, который на днях был обнаружен на веб-сервисе для хостинга и совместной разработки Github.

    В своем заявлении журналистам, Apple подчеркнула, что речь идет о версии операционной системы iOS 9 трехлетней давности, которую сейчас заменила более современная iOS 11 и используется на небольшом количестве мобильных устройств. Компания призвала пользователей обновиться до свежей ОС для большей безопасности. При этом она отметила, что в гаджетах предусмотрена многоуровневая аппаратная и программная защита, а безопасность её продуктов изначально не зависит от секретности исходного кода.

    Напомним, утекший код относится к компоненту iBoot, отвечающему в iOS за правильную загрузку операционной системы. Он изначально был слит несколько месяцев назад на Reddit, а теперь возродился GitHub, где привлек к себе куда больше внимания.

    Утекший код относится к версии iOS 9, то есть он не вполне соответствует самой современной iOS 11.2.5. Тем не менее солидная часть кода iOS 9 всё ещё используется в iOS 11. Некоторые файлы отсутствуют на Github, так что код нельзя скомпилировать. По мнению экспертов по безопасности, утечки вполне достаточно, чтобы хакеры смогли обнаружить новые уязвимости и создать джейлбрейк.

    Apple в последние годы открывала некоторые части исходного кода macOS и iOS, но iBoot относится к компонентам, которые Apple предпочитала оставить в секрете.

    Илон Маск рекомендует:  Что такое код ncurses_init_pair
  • Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL