Всякий раз, когда вы смотрите на проблему безопасности программного обеспечения, вы быстро чувствуете, что невидимые силы движутся таинственным и непостижимым образом. Почему программное обеспечение небезопасно? Есть теория, которая все это объясняет?
Если вы посмотрите на одну из самых известных уязвимостей программного обеспечения, SQL Injection, вы сразу же получите внутреннюю реакцию, что что-то не так в принципе. Вы должны задаться вопросом, почему такой мощный язык, как SQL, открыт пользователю в первую очередь.
В этом году на 28-м конгрессе Chaos Communication Congress (28C3) Мередит Паттерсон взяла это чувство и поместила его в контекст информатики. Проще говоря, мы небезопасны, потому что даем пользователям доступ к мощным вычислительным средствам прямо в пользовательском интерфейсе.
Высказанные идеи являются частью нового движения LangSec, которое постулирует следующее:
«Теоретико-языковой подход (LANGSEC) рассматривает эпидемию небезопасности Интернета как следствие специального программирования обработки ввода на всех уровнях сетевых стеков и в других типах программных стеков. LANGSEC утверждает, что единственный путь к надежному программному обеспечению, который требует ненадежные входные данные обрабатывают все допустимые или ожидаемые входные данные как формальный язык, а соответствующие процедуры обработки входных данных — как распознаватель для этого языка. Распознавание должно быть осуществимым, и распознаватель должен соответствовать языку в требуемой вычислительной мощности ».
Это особенно интересная идея в свете постоянно растущей популярности предметно-ориентированного языка. Если вы дадите своему конечному пользователю режим ввода, который фактически является полным языком Тьюринга, тогда вы должны ожидать, что он будет использовать его творчески. Они, вероятно, найдут не только способы, о которых вы никогда не думали, но и способы, от которых вы не можете защитить.
Дело в том, что в данном случае задача распознавания действительных входных данных формально неразрешима. Если вы ограничите синтаксис ввода контекстно-зависимым или, лучше, грамматикой регулярных выражений, тогда вы сможете создать инструменты, которые могут отфильтровать опасные части — если вы готовы и можете это сделать. Ключ — информатика.
Те же аргументы применимы к любому протоколу, который можно рассматривать как интерфейс, если в этом случае пользователь является просто еще одной частью программного обеспечения.
Фотография сделана Китерой из Аневерн.
Идея ВОЗ хорошо и забавно изложена в презентации. Если вы посмотрите видео, вы не сможете не прийти к выводу, что передача ключей от компьютера путем слишком изощренного взаимодействия с пользователем является преступлением:
Очень приятно обнаружить, что теория полноты по Тьюрингу и теория языков в целом могут иметь приложение к практической теме безопасности, которая в большинстве случаев не имеет какой-либо теоретической основы. Что действительно удивительно, так это то, как, когда вы начинаете думать об уязвимостях в протоколах всех видов, вы быстро приходите к выводу, что это правда, что встраивание сверхмощных языковых средств является корнем проблемы. Возможно, все проблемы с безопасностью связаны с предоставлением слишком большого количества оборудования.
Если вы хотите продолжить, то на веб-сайте LangSec есть несколько очень хороших документов и технических отчетов.
Фотография сделана Китерой из Аневерн.
Дальнейшая информация:
LANGSEC
Презентация 28C3
Чтобы быть в курсе новых статей на I Programmer, подпишитесь на RSS-канал, подпишитесь на нас в Google+, Twitter, Linkedin или Facebook или подпишитесь на нашу еженедельную новостную рассылку.