Исключительно простые задачи по AppSec .NET
Предлагаю всем размять мозг после выходных и начать рабочую неделю с простых, на первый взгляд, задачек по программированию на C#. Возможно эти задачи заставят вас посмотреть на код своих проектов с новой стороны, так как все они касаются сумрачной области — области безопасности приложений, Application Security. Про AppSec и платформу .NET пишут не много, говорят еще меньше, некоторые вообще считают, что использование любого managed языка, магическим образом делает приложение защищенным. Это положение дел я пытаюсь исправить, рассказывая на конференциях про различные аспекты безопасности .NET платформы. Так на этой недели, в четверг, наше сообщество SPB .NET Community проводит митап в Санкт-Петербурге полностью посвящённый вопросам разработки защищённых ASP .NET приложений. Кому интересны подробности этой встречи, кто хочет узнать побольше о сообществе .NET разработчиков Санкт-Петербурга и попробовать свои силы в решении задач по AppSec .NET, приглашаю под кат!
Так как на Хабре еще не писали про SPB .NET Community начну, пожалуй, с него. В июне, в Санкт-Петербурге собралось сообщество программистов, пишущих на .NET. Наша цель — это делиться опытом решения задач, с которыми мы встречаемся в ходе работы, собираться в офлайне, чтобы обсудить актуальные проблемы и новости мира .NET. Сейчас платформа переживает бум развития, тут и выход огромного количества кода в open source, и новая web платформа, и обсуждение сразу двух новых стандартов языка C#, и кроссплатформенность, которая предлагает большие возможности и грозит новым полем граблей. Как сказал Льюис, чтобы оставаться на месте, мы должны бежать. И если бежать всем вместе, то шансы не отстать повышаются (бегуны поймут метафору). Итак, что уже сделано. Мы провели первую встречу, организовали островок на IT Global Meetup, где сделали 4 доклада, смогли все познакомиться и пообщаться о планах на будущее. Судя по отзывам, доклады понравились, а идея возродить регулярные встречи .NET тусовки уже у многих была в головах.
Сейчас мы готовим вторую встречу. Она пройдет 25 июня, в 19.30 в питерском офисе компании DataArt, основной темой встречи выбрали разработку защищенных приложений. В этот четверг к нам в Санкт-Петербург приезжает известный эксперт по информационной безопасности в целом, и по платформе .NET в частности, Владимир Кочетков VladimirKochetkov. Он согласился поучаствовать в нашей встрече, так что кто знаком с Володей по блогам, вебинарам или его работе в RSDN Team, у вас есть шанс прийти и пообщаться с ним лично. В программе встречи два доклада и много общения, это «Теория Application Security .NET» Владимир Кочетков и «Практика Application Security .NET» Михаил Щербаков (мой доклад). Я с материалом по этой теме выступал на последних конференциях, это .NEXT, dotnetconf.ru, SECON. Но для митапа подготовил новые примеры и задачки, которые мы тоже разберем на встрече. А, да задачи… Не буду больше рассказывать про митап, читайте анонс в группе сообщества spbdotnet.org, регистрируйтесь по ссылке и приходите. Участие конечно бесплатное, необходима только регистрация (количество мест к сожалению, ограничено, но свободные есть).
А теперь внимание задачи.
- Содержит ли проблемы безопасности код следующей aspx страницы? Если содержит, то какие и в каких строках кода? Вопрос со звездочкой: какие данные нужно отправить на сервер, чтобы продемонстрировать атаки? Условия выполнения кода стандартные: на сервере IIS 8.5 с настройками по умолчанию, aspx-страница входит в web-проект с настройками по умолчанию, собирается под Framework 4.5.1.
<%@ Page Language="C#" AutoEventWireup="true"%> Preview: "/>
- Содержит ли проблемы безопасности следующий C# код? Какими способами атакующий может проэксплуатировать уязвимости, если они есть? Как бы вы исправили этот код? Доступ к БД осуществляется через классы Entity Framework«а, CoinsDB — класс контекста нашей БД, наследник DbContext. CustomerLogin — класс нашей сущности из БД, его код есть ниже. Условия выполнения кода стандартные, как и в примере выше, БД — MS SQL.
protected void Page_Load(object sender, EventArgs e) { using (var db = new CoinsDB()) { var where = String.Empty; var parameters = new List
Ответы, пожалуйста, пишите в комментариях под спойлером. Все интересные случаи мы разберем 25 июня на митапе. Для тех, кто надумал прийти, оставлю ссылку на регистрацию здесь.