АнглийскийФранцузскийИспанский

Значок OnWorks

flawfinder - Интернет в облаке

Запустите программу проверки ошибок в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

Это командный дефектоскоп, который можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


flawfinder - лексически найти потенциальные недостатки безопасности ("попадания") в исходный код

СИНТАКСИС


дефектоскоп [--Помогите|-h] [--версия] [--listrules]
[--allowlink] [--followdotdir] [--нет ссылки]
[--patch =имя файла|-P имя файла]
[- входы|-I] [ --minlevel =X | -m X ] [--ложно положительный|-F]
[- никогда не игнорировать|-n]
[--regex =ШАБЛОН | -e ШАБЛОН]
[--контекст|-c] [--колонны|-C] [--данные только|-D] [--html|-H] [--немедленный|-i]
[--одна линия|-S] [--omittime] [--тихий|-Q]
[--loadhitlist =F] [--savehitlist =F] [--diffhitlist =F]
[--] [ источник код файл or источник корень каталог ]+

ОПИСАНИЕ


Flawfinder просматривает исходный код C / C ++ в поисках потенциальных недостатков безопасности. К
запустите flawfinder, просто дайте flawfinder список каталогов или файлов. Для каждого каталога
учитывая, что все файлы с расширениями файлов C / C ++ в этом каталоге (и его
подкаталоги, рекурсивно). Таким образом, для большинства проектов просто дайте
flawfinder имя самого верхнего каталога исходного кода (используйте ``. '' для текущего
каталог), а дефектоскоп проверит весь исходный код проекта на C / C ++. если ты
только хочу иметь изменения рассмотрено, сохраните унифицированное сравнение этих изменений (созданное GNU
"diff -u" или "svn diff" или "git diff") в файле исправления и используйте параметр --patch (-P).

Flawfinder выдаст список `` попаданий '' (потенциальных недостатков безопасности), отсортированный по степени риска; в
самые рискованные попадания показаны первыми. Уровень риска указан в квадратных скобках и варьируется
от 0, очень маленький риск, до 5, большой риск. Этот уровень риска зависит не только от
функция, а от значений параметров функции. Например, постоянная
строки часто менее опасны, чем полностью переменные строки во многих контекстах, и в тех
контексты попадания будут иметь более низкий уровень риска. Flawfinder знает о gettext (обычном
библиотека для интернационализированных программ) и будет обрабатывать постоянные строки, прошедшие через
gettext, как если бы они были постоянными строками; это уменьшает количество ложных попаданий в
интернационализированные программы. Flawfinder будет делать то же самое с _T () и
_TEXT (), общие макросы Microsoft для работы с интернационализированными программами. Дефектоскоп
правильно игнорирует большую часть текста внутри комментариев и строк. Обычно дефектоскоп показывает все
попаданий с уровнем риска не менее 1, но вы можете использовать параметр --minlevel, чтобы отображать только
попадания с более высоким уровнем риска, если хотите. В описаниях попаданий также указываются соответствующие общие
Идентификаторы перечисления слабых мест (CWE) в скобках, как обсуждается ниже. Дефектоскоп
официально CWE-совместимый.

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

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

· // Дефектоскоп: игнорировать

· / * Дефектоскоп: игнорировать * /

Для совместимости вы можете заменить "Flawfinder:" на "ITS4:" или "RATS:" в этих
комментарии в специальном формате. Поскольку возможно, что такие строки неверны, вы можете использовать
параметр - Neverignore, который заставляет дефектоскоп никогда не игнорировать ни одну строку, несмотря ни на что
директивы комментариев говорят (что более сбивает с толку, - Neverignore игнорирует игнорируемые).

Flawfinder использует внутреннюю базу данных, называемую «набором правил»; набор правил определяет
функции, которые являются частыми причинами недостатков безопасности. Стандартный набор правил включает большой
ряд различных потенциальных проблем, включая как общие проблемы, которые могут повлиять на любую
Программа на C / C ++, а также ряд специфических Unix-подобных и Windows функций, которые
особенно проблематично. Параметр --listrules сообщает список текущих правил и
уровень риска дефолта. Как отмечалось выше, каждый потенциальный недостаток безопасности, обнаруженный в данном
файл исходного кода (соответствующий записи в наборе правил) называется `` попаданием '', а набор
совпадения, обнаруженные во время любого конкретного запуска программы, называются `` хит-листами ''.
можно сохранить (используя --savehitlist), повторно загрузить для повторного отображения (используя --loadhitlist) и
вы можете отображать только те совпадения, которые отличаются от другого запуска (используя --diffhitlist).

Дефектоскоп - это простой инструмент, у которого есть несколько фундаментальных плюсов и минусов. Дефектоскоп работает
путем простой лексической токенизации (пропуская комментарии и правильную разметку строк),
поиск совпадений токенов с базой данных (в частности, для поиска вызовов функций).
Таким образом, Flawfinder похож на RATS и ITS4, которые также используют простую лексическую разметку.
Затем Flawfinder проверяет текст параметров функции для оценки риска. В отличие от
такие инструменты, как splint, предупреждающие флаги gcc и clang, flawfinder делает использовать или иметь
доступ к информации о потоке управления, потоке данных или типах данных при поиске
потенциальные уязвимости или оценка уровня риска. Таким образом, дефектоскоп будет
обязательно приводят к множеству ложных срабатываний уязвимостей и не сообщают о многих
уязвимости. С другой стороны, дефектоскоп может найти уязвимости в программах, которые
не могут быть построены или не могут быть связаны. Часто может работать с программами, которые даже нельзя
составлено (по крайней мере, средствами рецензента). Дефектоскоп также не так запутан
определения макросов и другие странности, с которыми сталкиваются более сложные инструменты.
Дефектоскоп также может быть полезен как простое введение в инструменты статического анализа в
в целом, так как его легко начать использовать и легко понять.

Любое имя файла, указанное в командной строке, будет проверено (даже если оно не имеет обычного
Расширение имени файла C / C ++); таким образом, вы можете заставить дефектоскоп проверять любые файлы, которые вы
желание. При рекурсивном поиске в каталогах дефектоскоп только открывает и исследует
обычные файлы с расширениями файлов C / C ++. Flawfinder предполагает, что файлы
Файлы C / C ++, если они имеют расширения «.c», «.h», «.ec», «.ecp», «.pgc», «.C», «.cpp»,
".CPP", ".cxx", ".cc", ".CC", ".pcc", ".hpp" или ".H". Имя файла `` - '' означает
стандартный ввод. Чтобы предотвратить проблемы с безопасностью, специальные файлы (например, специальные файлы устройств)
и именованные каналы) всегда пропускаются, и по умолчанию пропускаются символические ссылки (
Параметр --allowlink следует по символическим ссылкам).

После списка совпадений следует краткое изложение результатов (используйте -D, чтобы удалить это
Информация). Он покажет количество совпадений, проанализированных строк (как сообщает wc -l) и
проанализированы физические строки исходного кода (SLOC). Физический SLOC - это непустой, непустой
строка комментария. Затем он покажет количество попаданий на каждом уровне; обратите внимание, что будет
никогда не попадать на уровень ниже minlevel (по умолчанию 1). Таким образом, «[0] 0 [1] 9»
означает, что на уровне 0 было зарегистрировано 0 попаданий, а на уровне 1 было 9 попаданий.
сообщил. Затем он покажет количество попаданий на данном уровне или выше (поэтому уровень 3+
имеет сумму количества попаданий на уровне 3, 4 и 5). Таким образом, запись «[0+] 37»
показывает, что на уровне 0 или выше было 37 попаданий (запись 0+ всегда будет одинаковой
как число "совпадений" выше). Далее показаны совпадения по KSLOC; это каждый из "уровней" или
более высокие "значения, умноженные на 1000 и разделенные на физический SLOC. Если символические ссылки были
пропущено, сообщается их количество. Если попадания подавлялись (с помощью "игнорировать"
в комментариях к исходному коду, как описано выше), сообщается подавленное число.
Отображается минимальный уровень риска, который должен быть включен в отчет; по умолчанию это 1
(используйте --minlevel, чтобы изменить это). Резюме заканчивается важными напоминаниями: не каждое попадание
обязательно является уязвимостью безопасности, и могут быть другие уязвимости безопасности
не сообщает инструмент.

Flawfinder выпускается под лицензией GNU GPL версии 2 или более поздней (GPLv2 +).

Flawfinder работает аналогично другой программе, ITS4, исходный код которой не является полностью открытым.
программное обеспечение (в соответствии с определением открытого исходного кода) или бесплатное программное обеспечение (в соответствии с определением
Фонд свободного программного обеспечения). Автор Flawfinder никогда не видел исходного кода ITS4.

КРАТКАЯ Обучение


Вот краткий пример того, как можно использовать дефектоскоп. Представьте, что у вас есть C / C ++
исходный код для некоторой программы с именем xyzzy (которую вы могли писать, а могли и не писать), и
вы ищете уязвимости в системе безопасности (чтобы вы могли исправить их, прежде чем клиенты
столкнуться с уязвимостями). В этом руководстве я предполагаю, что вы используете Unix-
как система, такая как Linux, OpenBSD или MacOS X.

Если исходный код находится в подкаталоге с именем xyzzy, вы, вероятно, начнете с открытия
текстовое окно и используя настройки дефолтера по умолчанию, чтобы проанализировать программу и сообщить
приоритетный список потенциальных уязвимостей безопасности (`` меньше '' просто гарантирует, что
результаты остаются на экране):
дефектоскоп xyzzy | меньше

На этом этапе вы увидите большое количество записей. У каждой записи есть имя файла,
двоеточие, номер строки, в скобках уровень риска (где 5 - наиболее рискованный), категория,
имя функции и описание того, почему дефектоскоп считает строку
уязвимость. Дефектоскоп обычно сортирует по уровню риска, показывая в первую очередь наиболее рискованные элементы;
если у вас мало времени, вероятно, лучше начать работать с самыми рискованными предметами и
продолжайте, пока не закончится время. Если вы хотите ограничить отображение рисков с помощью только
определенный уровень риска или выше используйте параметр --minlevel. Если вы получаете
необычайное количество ложных срабатываний, потому что имена переменных выглядят опасными
имена функций, используйте параметр -F, чтобы удалить отчеты о них. Если ты не понимаешь
сообщение об ошибке, см. такие документы, как Writing Безопасность Программы для Linux и
Юникс КАКhttp://www.dwheeler.com/secure-programs⟩ в http://www.dwheeler.com/secure-
программы, которые предоставляют дополнительную информацию о написании безопасных программ.

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

Если вы определили, что какая-то строка на самом деле не проблема, и уверены в этом, вы можете
вставьте непосредственно перед или в строке оскорбления комментарий, например
/ * Дефектоскоп: игнорировать * /
чтобы они не появлялись на выходе.

Как только вы это сделаете, вам следует вернуться и поискать входные данные программы, чтобы сделать
убедитесь, что программа строго фильтрует любые ненадежные входные данные. Дефектоскоп может
идентифицировать многие входные данные программы с помощью параметра --inputs, например:
дефектоскоп - входы xyzzy

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

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

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ


У Flawfinder есть несколько параметров, которые можно сгруппировать в параметры, управляющие самостоятельно.
документация, выберите входные данные, выберите, какие хиты отображать, выберите формат вывода,
и выполнить управление списком совпадений. Flawfinder поддерживает стандартный синтаксис, определенный в
POSIX (выпуск 7, издание 2013 г.) раздел `` Соглашения об утилитах ''. Он также поддерживает GNU
длинные варианты (варианты формы с двойным тире -вариант), как определено в GNU C Библиотека
ID Ручная `` Соглашения о синтаксисе аргументов программы '' и GNU Кодирование Стандартный
`` Стандарты интерфейсов командной строки ''. Аргументы длинных опций могут быть представлены как
`` --name = value '' или `` -name value ''. К некоторым параметрам можно получить доступ только с помощью кнопки more
удобочитаемые соглашения о длинных опциях GNU; общие параметры также поддерживаются старыми
однобуквенное соглашение об опциях.

Документация
--Помогите

-h Показать информацию об использовании (справке).

--версия Показывает (просто) номер версии и закрывается.

--listrules Перечислите термины (токены), которые вызывают дальнейшее изучение, и риск их неисполнения
уровень и предупреждение по умолчанию (включая идентификаторы CWE, если
применимо), все они разделены табуляцией. Термины - это в первую очередь имена потенциально-
опасные функции. Обратите внимание, что сообщаемый уровень риска и предупреждение для некоторых
конкретный код может отличаться от кода по умолчанию, в зависимости от того, как термин
использовал. Комбинируйте с -D, если вам не нужен обычный заголовок. Дефектоскоп
версия 1.29 изменила разделитель с пробелов на табуляции и добавила значение по умолчанию
поле предупреждения.

Выбор вход Данные
--allowlink Разрешить использование символических ссылок; обычно символические ссылки пропускаются. Не надо
используйте эту опцию, если вы анализируете чужой код; злоумышленники могли сделать много
вещи, которые могут вызвать проблемы при анализе, если эта опция включена. Для
Например, злоумышленник может вставить символические ссылки на такие файлы, как / И т.д. / пароль
(утечка информации о файле) или создать круговой цикл, который
заставить дефектоскоп работать `` вечно ''. Еще одна проблема с включением этого
вариант состоит в том, что если один и тот же файл упоминается несколько раз с использованием символического
ссылки, он будет проанализирован несколько раз (и, следовательно, будет сообщаться несколько раз).
Обратите внимание, что в дефектоскоп уже включена некоторая защита от символических ссылок.
в специальные типы файлов, такие как типы файлов устройств (например, / dev / zero или
C: \ mystuff \ com1). Обратите внимание, что для версии 1.01 дефектоскопа и ранее это было
по умолчанию.

--followdotdir
Введите каталоги, имена которых начинаются с ".". Обычно такие каталоги
игнорируются, поскольку они обычно включают частные данные управления версиями (например,
.git / или .svn /), конфигурации и т. д.

--нет ссылки Игнорируется. Исторически это отключало переход по символическим ссылкам; это поведение
теперь по умолчанию.

--patch =файл патча

-P файл патча
Изучите выбранные файлы или каталоги, но сообщайте о попаданиях только в тех строках, которые
добавляются или изменяются данным файлом исправления. Файл патча должен находиться в
распознанный унифицированный формат сравнения (например, вывод GNU "diff -u old new",
"svn diff" или "git diff [commit]"). Дефектоскоп предполагает, что патч имеет
уже были применены к файлам. Файл патча также может включать изменения в
нерелевантные файлы (они просто игнорируются). Номера строк, указанные в
файл патча используются для определения того, какие строки были изменены, поэтому, если у вас есть
изменил файлы с момента создания файла исправления, повторно сгенерируйте файл исправления
первый. Помните, что имена новых файлов, указанные в файле патча
должны точно совпадать, включая верхний / нижний регистр, префикс пути и каталог
разделитель (\ vs. /). Принимается только унифицированный формат сравнения (GNU diff, svn
diff, и вывод git diff в порядке); если у вас другой формат, снова
сначала регенерируйте его. Только совпадения, которые происходят в результирующих измененных строках, или
непосредственно над и под ними сообщаются. Этот вариант подразумевает
- Neverignore.

Выбор Хиты в Дисплей
- входы

-I Показывать только функции, получающие данные извне программы; это также устанавливает
minlevel до 0.

--minlevel =X

-m X Установите минимальный уровень риска на X для включения в список результатов. Это может быть от 0 (`` нет
риск '') до 5 (`` максимальный риск ''); по умолчанию - 1.

--ложно положительный

-F Не включайте попадания, которые могут оказаться ложноположительными. В настоящее время это означает
эти имена функций игнорируются, если за ними не следует "(", и что
объявления символьных массивов не отмечены. Таким образом, если вы используете переменную
с именем "доступ" повсюду, это исключит ссылки на этот обычный
Переменная. Это не по умолчанию, потому что это также увеличивает вероятность
пропуск важных попаданий; в частности, имена функций в предложениях и вызовах #define
через указатели на функции будут пропущены.

- никогда не игнорировать

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

--regexp =ШАБЛОН

-e ШАБЛОН
Сообщайте только о совпадениях с текстом, который соответствует шаблону регулярного выражения PATTERN.
Например, чтобы сообщать только о совпадениях, содержащих текст «CWE-120», используйте «--regex
CWE-120 ''. Эти имена флагов параметров такие же, как у grep.

Выбор Результат Формат
--колонны

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

--контекст

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

--данные только

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

--html

-H Форматируйте вывод как HTML, а не как простой текст.

--немедленный

-i Немедленно отображайте попадания (не ждите до конца).

--одна линия

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

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

--тихий

-Q Не отображать информацию о состоянии (например, какие файлы проверяются), пока
анализ продолжается.

Хит-лист Руководство
--savehitlist =F
Сохраните все полученные совпадения («список совпадений») в F.

--loadhitlist =F
Загрузите список совпадений из F вместо анализа исходных программ. Предупреждение: сделать
загружать хит-листы из ненадежных источников (в целях безопасности).

--diffhitlist =F
Показывать только хиты (загруженные или проанализированные), которых нет в F. Предположительно F был создан
ранее использовал --savehitlist. Предупреждение: сделать различать хит-листы из ненадежных
источники (в целях безопасности). Если опция --loadhitlist не указана,
это покажет попадания в проанализированные файлы исходного кода, которые не были
ранее сохраненный в F. Если используется вместе с --loadhitlist, это покажет
совпадений в загруженном списке совпадений нет в F. Алгоритм разности
консервативный; хиты считаются `` одинаковыми '' только в том случае, если они имеют одинаковые
имя файла, номер строки, положение столбца, имя функции и уровень риска.

ПРИМЕРЫ


Вот различные примеры того, как вызвать дефектоскоп. Первые примеры показывают различные
простые параметры командной строки. Flawfinder разработан для работы с текстовыми редакторами и
интегрированные среды разработки, поэтому в следующих разделах показано, как интегрировать дефектоскоп
в vim и emacs.

просто командной строки кредита
дефектоскоп /USR/SRC/Linux-3.16
Изучите все файлы C / C ++ в каталоге /usr/src/linux-3.16 и все его
подкаталоги (рекурсивно), сообщающие обо всех найденных совпадениях. По умолчанию
flawfinder будет пропускать символические ссылки и каталоги с именами, начинающимися с
Период.

дефектоскоп --minlevel = 4 .
Изучите все файлы C / C ++ в текущем каталоге и его подкаталогах.
(рекурсивно); сообщать только об уязвимостях уровня 4 и выше (два самых высоких
уровни риска).

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

дефектоскоп - никогда не игнорировать моя папка
Изучите все файлы C / C ++ в каталоге mydir и его подкаталогах,
включая даже попадания, отмеченные для игнорирования в комментариях к коду.

дефектоскоп -QD моя папка
Изучите mydir и сообщайте только о фактических результатах (удалив заголовок и
нижний колонтитул вывода). Эта форма полезна, если вывод будет передан в
другие инструменты для дальнейшего анализа. -C (--columns) и -S (--singleline)
Параметры также могут быть полезны, если вы передаете данные в другие инструменты.

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

дефектоскоп --тихий --html --контекст моя папка > результаты.html
Изучите все файлы C / C ++ в каталоге mydir и его подкаталогах и
создать версию результатов в формате HTML. Управление исходным кодом
системы (такие как SourceForge и Savannah) могут использовать такую ​​команду.

дефектоскоп --тихий --savehitlist сохранено. ударов *. [ch]
Изучите все файлы .c и .h в текущем каталоге. Не сообщайте о
статус обработки и сохраните полученный список совпадений (набор всех совпадений) в
файл сохранен.

дефектоскоп --diffhitlist сохранено. ударов *. [ch]
Изучите все файлы .c и .h в текущем каталоге и покажите все совпадения, которые
еще не были в файле save.hits. Это можно использовать для отображения только
`` новые '' уязвимости в модифицированной программе, если они сохранены. хиты были созданы из
старая версия анализируемой программы.

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

дефектоскоп --regex «CWE-120 | CWE-126» SRC /
Изучить каталог SRC рекурсивно, но сообщать только о совпадениях там, где CWE-120 или
Применяется CWE-126.

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

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

Во-первых, запустите дефектоскоп и сохраните его вывод в каком-нибудь ДЕФЕКТЕ (скажем, "дефектный файл"),
затем вызовите vim, используя его опцию -q, например: "vim -q flawfile". Второй способ
(запуск дефектоскопа после запуска vim) можно сделать множеством способов. Один - призвать
flawfinder с помощью команды оболочки ":! flawfinder-command> FLAWFILE", а затем
команда ": cf FLAWFILE". Другой способ - сохранить команду дефектоскопа в вашем
makefile (как, скажем, псевдокоманда типа "flaw"), а затем запустите ": make flaw".

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

дефектоскоп -СКД .

Теперь вы можете использовать различные команды редактирования для просмотра результатов. Команда ": cn" отображает
следующий удар; «: cN» отображает предыдущее попадание, а «: cr» перематывает назад к первому попаданию.
": copen" откроет окно для отображения текущего списка совпадений, называемого "quickfix".
window ";": cclose "закроет окно quickfix. Если буфер в используемом окне
изменено, и ошибка находится в другом файле, переход к ошибке не удастся. Ты должен
убедитесь, что окно содержит буфер, от которого можно отказаться, прежде чем пытаться перейти к
новый файл, скажем, путем сохранения файла; это предотвращает случайную потерю данных.

Вызов от Emacs
Текстовый редактор / операционная система emacs включает "режим grep" и "режим компиляции"
механизмы, которые хорошо работают с дефектоскопом, позволяя легко просматривать предупреждающие сообщения, прыгать
к соответствующему исходному коду и исправьте все обнаруженные проблемы.

Во-первых, вам нужно вызвать дефектоскоп, чтобы создать список предупреждающих сообщений. Вы можете использовать
"grep mode" или "compile mode" для создания этого списка. Часто "режим grep" более удобен;
он оставляет режим компиляции нетронутым, поэтому вы можете легко перекомпилировать после того, как вы изменили
что-то. Однако, если вы хотите перейти к точной позиции столбца попадания, скомпилируйте
режим может быть более удобным, потому что emacs может использовать вывод столбца дефектоскопа для
прямо перейти в нужное место без какой-либо специальной настройки.

Чтобы использовать режим grep, введите команду "Mx grep", а затем введите нужный дефектоскоп.
команда. Чтобы использовать режим компиляции, введите команду "Mx compile" и введите необходимые
команда дефектоскопа. Это команда с мета-ключом, поэтому вам нужно использовать мета-ключ для
вашу клавиатуру (обычно это клавиша ESC). Как и в случае со всеми командами emacs, вам необходимо
нажмите RETURN после ввода «grep» или «compile». Итак, во многих системах режим grep
вызывается путем ввода ESC xgrep RETURN.

Затем вам нужно ввести команду, удалив все, что было раньше, если это необходимо. А
правдоподобная команда:

дефектоскоп -SQDC .

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

После того, как вы запустили дефектоскоп, вы можете использовать emacs для просмотра его результатов. В
команда Cx `(обратная кавычка Control-x) посещает местоположение исходного кода для следующего предупреждения
сообщение. Cu Cx `(control-u control-x backtick) перезапускается с начала. Вы можете
посетите источник любого конкретного сообщения об ошибке, перейдя к этому сообщению в
* буфер компиляции * или * grep * буфер и ввод ключа возврата. (Техническое примечание: в
буфер компиляции, это вызывает ошибку compile-goto.) Вы также можете щелкнуть Mouse-2
в сообщении об ошибке (вам не нужно сначала переключаться на буфер * компиляции *).

Если вы хотите использовать режим grep для перехода к определенным столбцам обращения, вам потребуется
специально сконфигурируйте emacs для этого. Для этого измените переменную emacs "grep-regexp-
alist ". Эта переменная сообщает Emacs, как анализировать вывод команды" grep ", аналогично
переменная compilation-error-regexp-alist, в которой перечислены различные форматы ошибок компиляции.
сообщений.

Вызов от Интегрированные Разработка Среды (Иды)
Для (других) IDE обратитесь к набору плагинов вашей IDE.

ОБЩИЙ СЛАБОСТЬ ПЕРЕЧИСЛЕНИЕ (КВЕ)


Common Weakness Enumeration (CWE) - это `` формальный список или словарь распространенного программного обеспечения.
слабые места, которые могут возникнуть в архитектуре, дизайне, коде или реализации программного обеспечения, которые
может привести к эксплуатируемым уязвимостям безопасности ... созданным для использования в качестве общего языка
для описания слабых мест в безопасности программного обеспечения '' (http://cwe.mitre.org/about/faq.html). Для
подробнее о CWE см. http://cwe.mitre.org.

Flawfinder поддерживает CWE и официально совместим с CWE. Описание обращений обычно
включите соответствующий идентификатор Common Weakness Enumeration (CWE) в круглые скобки, где
известен как соответствующий CWE. Например, во многих обращениях, связанных с буфером, упоминается
CWE-120, идентификатор CWE для `` буферной копии без проверки размера ввода '' (также известный как
`` Классическое переполнение буфера ''). В некоторых случаях может быть указано более одного идентификатора CWE.
Отчет HTML также включает гипертекстовые ссылки на определения CWE, размещенные на MITER. В
Таким образом, дефектоскоп разработан с учетом требований CWE-Output.

Многие из CWE, о которых сообщает дефектоскоп, включены в список 25 лучших CWE / SANS 2011 г.
(http://cwe.mitre.org/top25/). Многие люди захотят искать CWE в этом списке,
например, CWE-120 (классическое переполнение буфера), когда дефектоскоп сопоставляется с CWE, который больше
общий, чем элемент из топ-25, он перечисляет его как более общий: более конкретный (например,
CWE-119: CWE-120), где фактическое отображение является более общим. Если дефектоскоп сопоставляется с более
конкретный элемент CWE, который является частным случаем одного из 25 лучших элементов, он указан в форме
топ-25 / более конкретные (например, CWE-362 / CWE-367), где реальное сопоставление является более конкретным
Запись CWE. Если одна и та же запись отображается на несколько CWE, CWE разделяются запятыми.
(это часто происходит с CWE-20, неправильная проверка ввода). Это упрощает поиск
некоторые CWE.

Для сопоставления использовалась версия 2.7 CWE (выпущенная 23 июня 2014 г.). Текущий CWE
сопоставления выбирают наиболее конкретный CWE, который может определить инструмент. Теоретически большинство CWE
элементы безопасности (подписи / шаблоны, которые ищет инструмент) теоретически могут быть
сопоставлен с CWE-676 (Использование потенциально опасной функции), но такое сопоставление не будет
полезный. Таким образом, предпочтение было отдано более конкретным сопоставлениям там, где их можно было найти. Дефектоскоп
инструмент лексического анализа; в результате нецелесообразно указывать более конкретный, чем
сопоставления, реализованные в настоящее время. Это также означает, что вряд ли потребуется много
обновление для валюты карты; у него просто недостаточно информации для уточнения до
подробный уровень CWE, на который обычно влияют изменения CWE. Список идентификаторов CWE
был сгенерирован автоматически с помощью "make show-cwes", поэтому есть уверенность, что этот список
верно. Пожалуйста, сообщайте о проблемах с отображением CWE как об ошибках, если вы их обнаружите.

Дефектоскоп может не обнаружить уязвимость, даже если дефектоскоп закрывает одну из этих CWE.
недостатки. Тем не менее, дефектоскоп действительно находит уязвимости, перечисленные CWE, которые он покрывает,
и во многих случаях он не будет сообщать о строках без этих уязвимостей. Таким образом, как
требуется для любого инструмента, который намеревается быть совместимым с CWE, дефектоскоп имеет частоту ложных
число положительных результатов менее 100% и ложноотрицательных результатов менее 100%. Дефектоскоп почти
всегда сообщает, когда он находит совпадение с элементом безопасности CWE (подпись / шаблон как
определены в его базе данных), хотя некоторые неясные конструкции могут вызвать сбой (см. ОШИБКИ
ниже).

Дефектоскоп может сообщать о следующих CWE (это те CWE, которые покрывает дефектоскоп;
`` * '' отмечает тех, кто входит в список 25 лучших CWE / SANS):

· CWE-20: неправильная проверка ввода

· CWE-22: Неправильное ограничение имени пути к каталогу с ограничениями (`` Обход пути '')

· CWE-78: неправильная нейтрализация специальных элементов, используемых в команде ОС (`` Команда ОС
Инъекция '') *

· CWE-119: Неправильное ограничение операций в пределах буфера памяти (
родитель CWE-120 *, поэтому он отображается как CWE-119: CWE-120)

· CWE-120: буферное копирование без проверки размера ввода (`` Классическое переполнение буфера '') *

· CWE-126: чрезмерное чтение буфера

· CWE-134: неконтролируемая строка формата *

· CWE-190: целочисленное переполнение или повторение *

· CWE-250: выполнение с ненужными привилегиями

· CWE-327: использование сломанного или опасного криптографического алгоритма *

· CWE-362: параллельное выполнение с использованием общего ресурса с неправильной синхронизацией
(`` Состояние гонки '')

· CWE-377: небезопасный временный файл

· CWE-676: Использование потенциально опасной функции *

· CWE-732: неправильное назначение разрешений для критического ресурса *

· CWE-785: использование функции управления путями без буфера максимального размера (дочерний элемент
CWE-120 *, поэтому он отображается как CWE-120 / CWE-785)

· CWE-807: Использование ненадежных входных данных при принятии решения по безопасности *

· CWE-829: включение функций из недоверенной сферы управления *

Вы можете выбрать определенное подмножество CWE для отчета, используя параметр --regex (-e).
Этот параметр принимает регулярное выражение, поэтому вы можете выбрать несколько CWE, например, `` --regex
«CWE-120 | CWE-126» ''. Если вы выберете несколько CWE с `` | '' в командной строке, вы
обычно необходимо заключать параметры в кавычки (поскольку символ вертикальной черты без кавычек `` | '').
Дефектоскоп разработан в соответствии с требованиями CWE-Searchable.

Если ваша цель - сообщить о подмножестве CWE, перечисленных в файле, это может быть достигнуто.
в Unix-подобной системе с помощью параметра --regex, также известного как -e. Файл должен быть в
формат регулярного выражения. Например, `` flawfinder -e $ (cat file1) '' сообщит только
совпадения, соответствующие шаблону в `` file1 ''. Если file1 содержит `` CWE-120 | CWE-126 '', он
будет сообщать только совпадения, соответствующие этим CWE.

Список всех элементов безопасности CWE (сигнатуры / шаблоны, которые ищет дефектоскоп)
можно найти с помощью параметра --listrules. В каждой строке указан токен подписи
(обычно имя функции), которая может привести к попаданию, уровень риска по умолчанию и
предупреждение по умолчанию (которое включает идентификатор CWE по умолчанию). Для большинства целей это
также достаточно, если вы хотите увидеть, какие элементы безопасности CWE сопоставлены с какими CWE, или
задний ход. Например, чтобы увидеть большинство сигнатур (имен функций), которые сопоставляются с
CWE-327, не видя уровня риска по умолчанию или подробного текста предупреждения, запустите `` flawfinder
--listrules | grep CWE-327 | вырезать -f1 ''. Вы также можете увидеть токены без отображения CWE
таким образом, запустив «flawfinder -D --listrules | grep -v CWE- ''. Однако пока
--listrules перечисляет все элементы безопасности CWE, он перечисляет только сопоставления по умолчанию из CWE
элементы защиты для идентификаторов CWE. В него не входят доработки, которые дефектоскоп
применяется (например, путем изучения параметров функции).

Если вам нужно подробное и точное сопоставление между элементами безопасности CWE и CWE
идентификаторы, исходный код дефектоскопа (включенный в раздачу) - лучшее место
для этой информации. Эта подробная информация в первую очередь интересна тем немногим
люди, которые пытаются улучшить отображение CWE дефектоскопа или улучшить CWE в целом.
Исходный код документирует сопоставление элементов безопасности с соответствующими CWE.
идентификаторы и представляет собой один файл Python. Набор данных c_rules определяет большинство правил,
со ссылкой на функцию, которая может вносить дальнейшие уточнения. Вы можете искать
набор данных для имен функций, чтобы увидеть, какой CWE он генерирует по умолчанию; если первый параметр
не `` нормальный '', тогда это имя уточняющего метода Python, который может выбирать разные
CWE (в зависимости от доп. Информации). И наоборот, вы можете искать `` CWE-номер ''
и найдите, какие элементы безопасности (подписи или шаблоны) относятся к этому идентификатору CWE.
Для большинства людей это намного больше, чем им нужно; большинство людей просто хотят сканировать свои
исходный код для быстрого поиска проблем.

БЕЗОПАСНОСТЬ


Весь смысл этого инструмента - помочь найти уязвимости, чтобы их можно было исправить.
Однако разработчики и рецензенты должны знать, как разрабатывать безопасное программное обеспечение, чтобы использовать это
инструмент, потому что в противном случае a дурачить a инструментом is все еще a дурачить. Моя книга на
http://www.dwheeler.com/secure-programs может помочь.

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

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

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

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

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

В системах Cygwin (эмуляция Unix поверх Windows) возникает дополнительная проблема, если дефектоскоп
используется для анализа программ, которым аналитик не может доверять. Проблема связана с дизайном
недостаток Windows (наследуемый от MS-DOS). В Windows и MS-DOS определенные имена файлов
(например, `` com1 '') автоматически обрабатываются операционной системой как имена
периферийные устройства, и это верно, даже если указан полный путь. Да, Windows и MS-DOS
действительно спроектированы так плохо. Flawfinder решает эту проблему, проверяя, какая файловая система
объект есть, а затем открываются только каталоги и обычные файлы (и символические ссылки, если они включены).
К сожалению, на Cygwin это не работает; по крайней мере на некоторых версиях Cygwin на некоторых
версиях Windows, просто попытка определить, является ли файл типом устройства, может вызвать
программу повесить. Обходной путь - удалить или переименовать любые интерпретируемые имена файлов.
в качестве имен устройств перед выполнением анализа. Эти так называемые `` зарезервированные имена ''
CON, PRN, AUX, CLOCK $, NUL, COM1-COM9 и LPT1-LPT9, необязательно с последующим расширением
(например, `` com1.txt ''), в любом каталоге и в любом случае (Windows нечувствительна к регистру).

Do загружать или различать хит-листы из ненадежных источников. Они реализованы с использованием
Модуль pickle Python, а модуль pickle не предназначен для защиты от ошибочных
или злонамеренно сконструированные данные. Сохраненные хит-листы предназначены для дальнейшего использования тем же
пользователь, создавший хит-лист; в этом контексте это ограничение не проблема.

Воспользуйтесь поисковиком в Интернете с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

  • 1
    UnitedRPMS
    UnitedRPMS
    Присоединяйтесь к нам в Gitter!
    https://gitter.im/unitedrpms-people/Lobby
    Включите репозиторий URPMS в вашем
    система -
    https://github.com/UnitedRPMs/unitedrpms.github.io/bl...
    Скачать объединенные рпмс
  • 2
    Boost C ++ библиотеки
    Boost C ++ библиотеки
    Boost предоставляет бесплатное портативное
    рецензируемые библиотеки C++.
    упор делается на портативные библиотеки, которые
    хорошо работать со стандартной библиотекой C++.
    Смотрите http://www.bo...
    Скачать библиотеки Boost C++
  • 3
    Виртуальный GL
    Виртуальный GL
    VirtualGL перенаправляет 3D-команды из
    Приложение Unix / Linux OpenGL на
    серверный GPU и преобразует
    визуализированные 3D-изображения в видеопоток
    с которым ...
    Скачать VirtualGL
  • 4
    libusb
    libusb
    Библиотека для включения пользовательского пространства
    прикладные программы для связи с
    USB-устройства. Аудитория: Разработчики, Конец
    Пользователи/рабочий стол. Язык программирования: С.
    Категории ...
    Скачать libusb
  • 5
    Сковорода
    Сковорода
    SWIG - это инструмент для разработки программного обеспечения
    который соединяет программы, написанные на C, и
    C ++ с множеством высокоуровневых
    языки программирования. SWIG используется с
    разные...
    Скачать SWIG
  • 6
    Тема WooCommerce Nextjs React
    Тема WooCommerce Nextjs React
    Тема React WooCommerce, созданная с помощью
    Далее JS, Webpack, Babel, Node и
    Экспресс, используя GraphQL и Apollo
    Клиент. Магазин WooCommerce в React (
    содержит: продукты...
    Скачать тему WooCommerce Nextjs React
  • Больше »

Команды Linux

Ad