Добрый день! Меня зовут Кирилл Зиборов, я представляю отдел безопасности распределенных систем Positive Technologies. В этой статье я продолжу рассказывать о том, как мы используем инструменты формальной верификации для предотвращения уязвимостей в различных компонентах блокчейна. Ранее Читать полностью »
Рубрика «формальная верификация»
Формальная верификация протокола IBFT: проверяем безопасность византийского консенсуса в блокчейне
2024-12-10 в 9:07, admin, рубрики: BFT, formal verification, IBFT, model checking, TLA+, блокчейн, Криптовалюты, протокол консенсуса, формальная верификацияЧто такое формальная верификация
2023-08-05 в 10:52, admin, рубрики: coq, Rust, Алгоритмы, безопасность, безопасность веб-приложений, безопасность данных, информационная безопасность, Криптовалюты, формальная верификация, функциональное программированиеЭто обзорная статья, в которой очень поверхностно и не подробно рассказывается о том, что такое формальная верификация программного кода, зачем она нужна и чем она отличается от аудита и тестирования.
Формальная верификация — это доказательство с использованием математических методов корректности программного обеспечения.
Формальная верификация молода. На сегодняшний день, на сайте хабр, например, нет (пока) специализации «Формальная верификация», нет специальности «Proof инженер» или «Специалист по формальной верификации». А люди, работающие по этой специальности — есть.
Политкорректность проникает в Россию через книги про проектирование чипов на SystemVerilog для не-начинающих
2019-09-03 в 5:32, admin, рубрики: fpga, SystemVerilog, Verilog, vhdl, vlsi, Анализ и проектирование систем, высокая производительность, интервью, методологии разработки, ненормальное программирование, параллельное программирование, проектирование микросхем, триггер, учебная литература, формальная верификация, цифровая электроника, языки описания аппаратурыНаконец-то в России вышел учебник по SystemVerilog уровнем выше чем для начинающих. Учебник описывает технологии и приемы, которые спрашивают на интервью в NVidia, Intel, AMD, Apple и другие электронные компании: использование concurrent assertions и functional coverage, что сейчас требуют не только от инженеров по верификации, но и от дизайнеров микросхем; алгоритм работы симулятора с дельта-циклами; вменяемое объяснение static timing analysis; схемы коммуникации аппаратных блоков через аппаратные очереди; реализацию этих коммуникаций с помощью конечных автоматов с трактами данных и т.д.
В главе про последнее российского читателя может озадачить упоминание «политкорректной системы». Что бы это значило? Это вероятно намек на казус, который произошел в округе Лос-Анжелес в 2003 году. Чиновники Лос-Анджелеса попросили производителей, поставщиков и подрядчиков прекратить использование терминов «master/slave» («хозяин» и «раб») в отношении компьютерного оборудования, так как одному из работников округа эти термины напомнили про рабовладельческое прошлое.
Сейчас авторы технической литературы избегают терминов master/slave. В современной Америке работают и афро-американские инженеры (например София Мвокани из Камеруна — на фото слева), и использование старых терминов выглядит архаично, как выглядели бы например термины «пан/холоп» в украинской технической литературе вместо принятых «провідний/ведений» (рус. «ведущий/ведомый»).
Это не первый раз, когда в российском электронном образовании появляется тема борьбы афро-американцев за гражданские права. Например Татьяна Волкова, известный специалист по образованию в электронике, носит маечку с эмблемой «Черных Пантер», калифорнийского движения, которое в свое время сочло мирный протест недостаточным, и занялось вооруженным протестом.
Полное изображение эмблемы под кожанкой Татьяны Александровны — под катом, но в основном я буду рассказывать про дельта-циклы и конечные автоматы:
Читать полностью »
Формальная верификация на примере задачи о волке, козе и капусте
2019-04-22 в 12:42, admin, рубрики: 8 ферзей, coq, Isabelle, np, smt, WhyML, z3, верификация программ, вычислительная сложность, для чайников, защита программ, информационная безопасность, логика Хоара, поиск уязвимостей, проблема остановки, решатель, Символьное выполнение, формальная верификация, формальная верификация для чайников, формальные методыНа мой взгляд, в русскоязычном секторе интернета тематика формальной верификации освещена недостаточно, и особенно не хватает простых и наглядных примеров.
Я приведу такой пример из зарубежного источника, и дополню собственным решением известной задачи о переправе волка, козы и капусты на другую сторону реки.
Но вначале вкратце опишу, что из себя представляет формальная верификация и зачем она нужна.
Под формальной верификацией обычно понимают проверку одной программы либо алгоритма с помощью другой.
Это нужно для того, чтобы удостовериться, что поведение программы соответствует ожидаемому, а также обеспечить её безопасность.
Формальная верификация является самым мощным средством поиска и устранения уязвимостей: она позволяет найти все существующие дыры и баги в программе, либо же доказать, что их нет.
Стоит заметить, что в некоторых случаях это бывает невозможно, как например, в задаче о 8 ферзях с шириной доски 1000 клеток: всё упирается в алгоритмическую сложность либо проблему остановки.
Однако в любом случае будет получен один из трёх ответов: программа корректна, некорректна, или же — вычислить ответ не удалось.
В случае невозможности нахождения ответа, зачастую можно переработать неясные места программы, уменьшив их алгоритмическую сложность, для того чтобы получить конкретный ответ да либо нет.
А применяется формальная верификация, например, в ядре Windows и операционных системах беспилотников Darpa, для обеспечения максимального уровня защиты.
Мы будем использовать Z3Prover, очень мощный инструмент для автоматизированного доказательства теорем и решения уравнения.
Причём Z3 именно решает уравнения, а не подбирает их значения грубым брутфорсом.
Это означает, что он способен находить ответ, даже в случаях когда комбинаций входных вариантов и 10^100.
А ведь это всего лишь около дюжины входных аргументов типа Integer, и подобное зачастую встречается на практике.
Задача о 8 ферзях (Взята из англоязычного мануала).
Микроядро seL4. Формальная верификация программ в реальном мире
2019-01-24 в 15:47, admin, рубрики: AH-6, CakeML, CAmkES, Candle, capDL, CertiKOS, CoCon, CompCert, FSCQ, Ivory, Milawa, Rockwell Collins, sel4, ULB, Unmanned Little Bird, Беспилотная Птичка, боинг, гипотеза Кеплера, информационная безопасность, математика, модернизация безопасности ПО, проблема четырёх красок, синтез драйверов, системное программирование, Софт, теорема о нечётном порядке, теорема Фейта — Томпсона, типобезопасность, транспорт будущего, формальная верификацияНаучная статья опубликована в журнале Communications of the ACM, октябрь 2018, том 61, номер 10, стр. 68−77, doi: 10.1145/3230627
В феврале 2017 года со взлётной площадки «Боинга» в Аризоне поднялся вертолёт с обычным заданием: облёт ближайших холмов. Он летел полностью автономно. Согласно требованиям по технике безопасности Федерального управления авиации США, пилот не прикасался к органам управления. Это был не первый автономный полёт AH-6, которого в компании называют Беспилотной Птичкой (Unmanned Little Bird, ULB). Он так летает уже много лет. Однако на этот раз посреди полёта вертолёт подвергся кибератаке. Бортовой компьютер атаковало вредоносное программное обеспечение видеокамеры, а также вирус, доставленный через заражённую флэшку, которую вставили во время техобслуживания. Атака поставила под угрозу некоторые подсистемы, но не смогла повлиять на безопасную эксплуатацию воздушного судна.
Читать полностью »
Почему земляне делают глючный софт и железо
2016-12-17 в 17:54, admin, рубрики: будущее здесь, доказательное программирование, информационная безопасность, искусственный интеллект, качество, математика, Программирование, Производство и разработка электроники, формальная верификацияДумаю никто не станет спорить с тем, что качество сколь-либо сложных систем создаваемых землянами далеко от идеала.
Конечно, можно сказать, что всё работает — самолёты летают, космические корабли бороздят просторы орбиты Земли т.д.
Но при этом все привыкли к тому, что ПО на их устройствах работает непредсказуемо, через раз, что даже установка самых последних обновлений не гарантирует отсутствия проблем с безопасностью, что часто в открытом, массово используемом коде находят ошибки существующие там много лет, что даже у крупных и «технологических» компаний бывают сбои и утечки данных, что космические аппараты разбиваются или теряют часть функциональности вовсе не из-за козней инопланетян (марсиане клянутся что не сбивали ExoMars).
Хотелось бы рассмотреть причины и возможные пути решения этой планетарной проблемы.
Читать полностью »
Обзор языка Idris
2014-07-07 в 11:26, admin, рубрики: формальная верификация, функциональное программирование(источник)
Материалов о языке Idris на русском практически нет, попробую это исправить кратким обзором. Также постараюсь сделать текст понятным для начинающих, не-функциональных и незнакомых с зависимыми типами программистов, и потому тем, кто знаком с подобными языками, может быть проще отмотать в конец или сразу прочесть официальную документацию. Писать серьёзное введение в язык и теорию не берусь, но надеюсь показать, о чём это вообще.
Итак, Idris — чистый функциональный язык программирования общего назначения с зависимыми типами.
Читать полностью »
Мягкое введение в Coq: структуры данных и функции высших порядков
2013-07-03 в 8:01, admin, рубрики: coq, формальная верификация, функциональное программирование, метки: coq, формальная верификацияПары и списки
В предыдущих частях мы научились задавать новые типы данных, определять функции над ними и доказывать их корректность с помощью распространенных тактик. Настало время определить некоторые структуры данных и функции высших порядков (далее ФВП) над ними.
Читать полностью »
Мягкое введение в Coq: используем тактики
2013-06-11 в 5:23, admin, рубрики: coq, формальная верификация, функциональное программирование, метки: coq, формальная верификацияДоказательство упрощением
Итак, в предыдущих частях мы определили новые типы данных и функции над ними. Настало время обратиться к вопросу о том, как сформулировать и доказать их свойства и поведение. В некотором смысле мы уже начали делать это – в первой части мы написали своего рода юнит-тест, используя ключевое слово Example
, который содержал некоторые утверждения о поведении некоторой функции, применяемой к определенному набору аргументов. Используя определение функции, Coq упрощает выражение и проверяет на равенство его левую и правую часть.Читать полностью »
Мягкое введение в Coq: индуктивные определения
2013-06-10 в 9:49, admin, рубрики: coq, формальная верификация, функциональное программирование, метки: coq, формальная верификацияВ предыдущей части мы научились задавать новые типы и строить функции над их значениями. В этой небольшой заметке я более подробно остановлюсь на индуктивных определениях, чтобы внести ясность и наметить дальнейшие темы для изучения.
Ранее я сказал, что в Coq нет батареек. На самом деле я слукавил — в Coq есть стандартная библиотека, которая содержит множество полезных определений. Помимо стандартной библиотеки существуют и более специфические вещи, на которых мы пока не будем останавливаться.
Читать полностью »